時々大量のメモリを複製しなければならないリアルタイムシステムを設計しています。メモリは非小さな領域で構成されているため、コピーのパフォーマンスは、関連するコンポーネント(CPU、RAM、MB)が実行できる最大帯域幅にかなり近いと思います。これにより、現代のコモディティマシンはどのような生のメモリ帯域幅を集めることができるのだろうかと思いました。
私の古いCore2Duoは、1つのスレッドを使用すると1.5 GB / sにmemcpy()
なります(両方のコアを同時に使用する場合は当然少なくなりmemcpy()
ます)。1.5GBはかなりの量のデータですが、作業中のリアルタイムアプリケーションには1/50秒のようなもので、30MBを意味します。基本的に、ほとんど何もありません。そしておそらく最悪の場合、複数のコアを追加すると、必要な複製ステップのパフォーマンスを向上させることなく、より多くのデータを処理できます。
しかし、最近のローエンドのCore2Dueは必ずしもホットなものではありません。現在および近い将来のハードウェアのrawメモリ帯域幅に関する実際のベンチマークなどの情報を提供しているサイトはありますか?
さらに、メモリ内の大量のデータを複製するためのショートカットはありますか、それともmemcpy()
それが得られるのと同じくらい良いですか?
短時間でできるだけ多くのメモリを複製する以外に何もすることがないコアの束を考えると、私ができる最善のことは何ですか?
編集:私はまだ生のメモリコピーのパフォーマンスに関する良い情報を探しています。古いmemcpy()
ベンチマークを実行しました。同じマシンと設定で、2.5GB/秒になります...