2 次元配列 (4*4) があり、配列要素全体をループしたい場合
どちらが速いですか?:
- 1 つのスレッドを使用し、それによって配列全体をループします。
- 4 つのスレッドを使用し、スレッドごとに行全体をループします。
マルチコアのコンセプト(性能-メモリ)としてどっちがいい!?
ありがとう。
2 次元配列 (4*4) があり、配列要素全体をループしたい場合
どちらが速いですか?:
マルチコアのコンセプト(性能-メモリ)としてどっちがいい!?
ありがとう。
どちらの場合も、実際のループにはほとんど時間がかかりません。決定要因は、スレッドが配列内の各要素に対して何を行うかです。要素は単純なアクションを持つ単純な POD 型ですか、それとも複雑で長く、CPU を集中的に使用するメソッドを持つオブジェクトですか?
各要素で実行されるアクションが 50 ナノ秒未満で実行される場合、そのようなアクションを実行するために複数のスレッドを作成または通知することは自滅的です。ループの実行を開始するために 4 つのスレッドにシグナルを送るだけでよい最適な条件。結果をプールに送信すると、時間がかかります。実際に新しいスレッドを作成して 20ns のタスクを実行するのは絶望的です。
どちらが速いですか?1 つのスレッドを使用して配列全体をループするか、4 つのスレッドを使用して各スレッドで行全体をループします。
これは、配列内の各要素に対して何を行う必要があるかに大きく依存します。実行に時間がかかるプロセッサー依存の操作である場合は、各要素を独自のスレッドで処理する (または、固定スレッドのスレッドプールを設定し、各要素を独自のタスクとして送信する) ことによって、パフォーマンスを向上させることができます。そうしないと、@kan が述べたように、おそらく何の改善も得られません。
各要素を印刷したいだけです!
各要素の処理が主に IO 操作である場合、CPU ではなく IO によって制限されます。この場合、各要素の印刷操作を別のスレッドで実行しても、プログラムの実行速度は遅くなります。
マルチコアのコンセプト(性能-メモリ)としてどっちがいい!?
性能は同じになります。シングル スレッド ソリューションは、使用するスレッドが 1 つだけであるためメモリの使用量が少なくなりますが、複数のスレッド (少なくとも 16 のみ) によるメモリの増加は比較的わずかです。