デュアルxeonチップを搭載したマシンで実行されているCアプリ(VStudio 2010、win7 64ビット)があります。これは、12個の物理コアと24個の論理コア、および192ギガのRAMを意味します。編集:OSはwin7(つまり、Windows 7、64ビット)です。
アプリには24個のスレッドがあり(各スレッドには独自の論理コアがあります)、計算を実行し、大規模なC構造の異なる部分を埋めます。すべてのスレッドが終了したとき(およびスレッドがすべて完全にバランスが取れているため、同時に完了するとき)の構造は、約60ギガバイトです。
(ハードウェアのセットアップを制御できるので、RAID 0を実行する6台の2TBドライブを使用します。つまり、書き込みの物理的な制限は、平均シーケンシャル書き込み速度の約6倍、つまり約2ギガ/秒になります。)
これをディスクに保存する最も効率的な方法は何ですか?明らかに、i/o時間は計算時間を小さくします。このトピックに関する私の調査から、(fwrite()ではなく)write()が進むべき道のようです。しかし、バッファサイズの設定などに関して、ソフトウェア側で他にどのような最適化を行うことができますか?mmapの方が効率的でしょうか?