マルチスレッドメモリアクセスはシングルスレッドメモリアクセスより高速ですか?マルチスレッドメモリアクセスは、シングルスレッドメモリアクセスより高速ですか?
C言語であると仮定します。簡単な例は次のとおりです。私が巨大な配列A
を持っていて、A
と同じサイズの配列B
にA
をコピーしたいのですが。マルチスレッドを使用して、単一のスレッドを使用するよりも高速にメモリコピーを実行していますか?この種のメモリ操作を実行するのに適したスレッドの数はいくつですか?
編集: 質問を絞り込んでください。まず第一に、我々はGPUのケースを考慮しない。メモリアクセスの最適化は、GPUプログラミングを行うときに非常に重要で効果的です。私の経験では、常にメモリ操作に注意する必要があります。一方、私たちがCPUで作業する場合は必ずしもそうではありません。さらに、avxやsseなどのSIMD命令については考慮しません。また、多くの計算操作ではなく、プログラムのメモリアクセス操作が多すぎると、メモリパフォーマンスの問題が発生します。私たちは、1〜2個のCPUを持つx86アーキテクチャを扱っているとします。各CPUには、複数のコアとクワッドチャネルメモリインタフェースがあります。メインメモリは今日のようにDDR4です。
私の配列は、CPUのL3キャッシュのサイズと似たサイズの倍精度浮動小数点数の配列です。これは約50MBです。さて、私は2つの場合があります:1)同じサイズの別の配列にこの配列をコピーするには、要素ごとのコピーを実行するか、またはmemcpyを使用します。 2)たくさんの小さな配列をこの巨大な配列に結合する。どちらもリアルタイム操作であり、できるだけ早く実行する必要があることを意味します。マルチスレッドは高速化またはドロップダウンを行いますか?この場合、メモリ操作のパフォーマンスに影響する要因は何ですか?
誰かが主にDMAの性能に依存すると言いました。私はmemcpyをするときだと思います。要素別のコピーを実行すると、まずCPUキャッシュを通過するのでしょうか?
多くの要因によって異なります。 –
なぜdownvotes? –
あなた自身の測定を行います。非常に多くのパラメータが含まれています:キャッシュミス、データの長さ...私はCPU集中型操作ではないので、ボトルネックはメモリへのアクセス(ディスクアクセスのようなビット)になると言います。私は単一のスレッドに行くだろうが、私は確かにマルチスレッドと比較するだろう... –