別のCPUで実行するときに、CPUキャッシュサイズに関する仮定が間違っていると、この最適化が機能しなくなるため、特定のCPUキャッシュサイズを最適化することは通常無駄です。
しかし、そこには方法があります。特定のアクセスパターンを最適化して、CPUが次に読み取る必要のあるメモリ位置を簡単に予測できるようにする必要があります(最も明白なものは、線形に増加する読み取りです)。CPUを完全に利用できるようにするには、すべてのメモリアクセスがCPUキャッシュに完全に収まるまで、問題がある程度サブパートに分割される分割統治戦略に従うキャッシュ忘却アルゴリズムについて読む必要があります。
別々のコードとデータキャッシュがあることにも注意してください。Herb Sutterは、CPUの内部について詳しく説明している、すばらしいビデオをオンラインで公開しています。
Visual Studio Profilerは、メモリおよびL2カウンターを処理するCPUカウンターを収集できます。これらのオプションは、インストルメンテーションプロファイリングを選択するときに使用できます。
Intelはまた、これらのCPUカウンターについて、WindowsとLinuxのタスクマネージャーが何を示しているか、そして多くの異なるレベルで内部的に非同期で並列に動作する今日のCPUにとってどれほど間違っているかについて詳しく説明しているオンラインペーパーも持っています。残念ながら、このようなものを直接表示するためのIntelのツールはありません。私が知っている唯一のツールはVSプロファイラーです。おそらくVTuneにも同様の機能があります。
コードを最適化するためにここまで進んだ場合は、GPUプログラミングも検討する必要があります。SIMD命令に頭を悩ませたり、局所性をキャッシュしたりするには、少なくともPHDが必要です。おそらく、元の設計の5倍になります。しかし、アルゴリズムをGPUに移植することで、まともなグラフィックカードではるかに少ない労力で100倍になります。CUDAをサポートするNVidiaGPU (現在販売されているすべてのカードはCUDAをサポートしています)は、Cダイアレクトで非常にうまくプログラムできます。GPUのフルパワーを活用するためのマネージコード(.NET)のラッパーもあります。
OpenCLを使用することでプラットフォームにとらわれないままにすることができますが、NVidiaOpenCLのサポートは非常に悪いです。OpenCLドライバーは、対応するCUDAドライバーよりも少なくとも8倍低速です。