ギガビット イーサネット インターフェイス経由でカメラからデータを取得しています。データが非常に小さいので、これを (DRAM ではなく) L1 キャッシュに直接入れて処理を高速化することを考えています。
これどうやってするの?これに対するコンパイラ指令はありますか?
プラットフォーム情報
Windows 7、Intel Core2Duo、Visual Studio 2010、C/C++、OpenCV。
大容量のキャッシュを備えたハイエンドコンピューターでは、パフォーマンスが大幅に向上することはありません。
画像が大きすぎてキャッシュに完全にロードできず、多くのアルゴリズムが同じ画像に対して何度も実行される場合、パフォーマンスが向上する可能性があります。このような場合、画像の一部がキャッシュに読み込まれ、アルゴリズムが実行されます。その後、残りの部分がコピーされ、続行されます。このようなケースは、32kbのL1キャッシュを備えたBeagleboardなどの組み込みデバイスで簡単に再現できます。このような場合、アルゴリズムのパフォーマンスは、画像を効率的に分割し、画像の次の部分をロードする前に画像の一部ですべてのプロセスを実行することによって改善できます。
Gcc は、-O1 -O2 -O3 の配列データのデータ プリフェッチ命令を生成します。これはすべてかなり最近作り直されました。したがって、_DATAPREFETCH フラグが標準の最適化レベルよりも改善される可能性は低いです。
メモリのバイパスに関して、どのようにデータにキャッシュ タグが割り当てられるのでしょうか? キャッシュ タグはメモリ フェッチ時に発行され、CPU はキャッシュ タグを介してキャッシュ内のデータを検出します。
DuoCore はタグ バスを共有しており、GPU はタグ バスにぶら下がっている可能性があるため、I/O コントローラーがそうすることが考えられると思いますが、まだ参考文献が見つかりません。ギガカードはどのソケットに差し込んでいますか?
(さまざまな CPU ファミリのタグの古いリスト。)[ http://gcc.gnu.org/projects/prefetch.html]
" -fprefetch-loop-arrays ターゲット マシンでサポートされている場合は、メモリをプリフェッチする命令を生成して、大きな配列にアクセスするループのパフォーマンスを向上させます。 このオプションは、より良いコードまたはより悪いコードを生成する可能性があります。結果は、ソース コード内のループの構造に大きく依存します。"(gcc-4.7)[ http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Optimize-Options.html#Optimize-Options ]