一般的な方法 (集約/選択/変換) で大量のデータを操作する C/C++ アプリケーションを開発しています。私は AMD Phenom II X4 965 Black Edition を使用しているので、かなりの量の異なるキャッシュがあります。
すべての単一操作を実行するために、ST バージョンと MT バージョンの両方の関数を開発しましたが、驚くことではありませんが、最高の場合、MT バージョンは4コアを使用している場合でも ST よりも 2 倍高速です。
私は利用可能なリソースの 100% を使用するのが好きなので、2 倍しかないという事実に腹を立てました。4 倍が必要です。このため、キャッシュ シミュレーターとコールグラフを使用して、
すでにかなりの時間を-pgとvalgrindに費やしてきました。プログラムは期待どおりに動作しており、コアは入力プロセス データ (つまり、データに適用する操作) を共有しており、さまざまなスレッドが処理対象のデータ (何百万ものエンティティまたは行) をロードすると、キャッシュ ミスが報告されます (予想どおり)。今、あなたが私がやろうとしていることを知っているなら:-))。最終的に、g++ と clang++ の異なるコンパイラを-O3を指定して使用しましたが、パフォーマンスは同じです。
私の結論は、処理するデータが大量 (GB のデータ) であるため、最終的にデータを CPU にロードする必要があるという事実を考えると、これは実際の待機時間です。ソフトウェアをさらに改善できますか? 限界に達しましたか?
Linux x86-64、Ubuntu 11.10 で C/C++ を使用しています。ぜひ聞きたいです!:-)