1

C/C++で配列に対してメモリブロックを動的に割り当てたいのですが、この配列は高頻度でアクセスされます。したがって、この配列をチップ上、つまりキャッシュ内にとどめておきたいのです。C/C++ のコードでこれを明示的に行うにはどうすればよいですか?

4

4 に答える 4

3

これを可能にする標準の C++ 言語機能はありません。

コンパイラと CPU によっては、asm ブロックでアーキテクチャ固有の CPU 命令を使用できる場合があります。

T* p = new T(...);
size_t n = sizeof(T);
asm {
    "CACHE n bytes at address p"
}

...またはこれを行う組み込みコンパイラ関数 (「組み込み」)。

CPU のマニュアルやコンパイラのマニュアルを参照する必要があります。

例として、x86 CPU には で始まる一連の命令がありPREFETCHます。

そして別の例として、GCC には という関数があります__builtin_prefetchGCC データ プリフェッチ サポートを参照してください。

于 2013-04-21T15:21:30.197 に答える
2

私はあなたができるとは思わない。まず、どのキャッシュ?L3、L2、L1? をプリフェッチし、そのアクセスがより最適化されるように調整することができます。その後、定期的にクエリを実行して、LRU にならないようにすることができますが、実際にはキャッシュにとどまらせることはできません。

于 2013-04-21T15:21:47.763 に答える
1

まず、コードを実行したいマシンのアーキテクチャを知る必要があります。次に、そのようなことを行う命令があることを確認する必要があります。

実際にメモリを大量に使用すると、キャッシュ コントローラがこの領域をキャッシュに入れるようになります。

最適化には 3 つのルールがあります。最初に知っておくとよいでしょう :) http://c2.com/cgi/wiki?RulesOfOptimization

于 2013-04-21T15:24:10.650 に答える