私のアレイが 32KB、L1 が 64KB だとしましょう。プログラムの実行中にWindowsはその一部を使用しますか? Windows が他のプログラムを動作させているため、L1 を使用できないのでしょうか? すべてのキャッシュを使用するようにプログラムの優先順位を設定する必要がありますか?
for(int i=0;i<8192;i++)
{
array_3[i]+=clock()*(rand()%256);//clock() and rand in cache too?
//how many times do I need to use a variable to make it stay in cache?
//or cache is only for reading? look below plz
temp_a+=array_x[i]*my_function();
}
プログラムは C/C++ です。
L2も同様にお願いします。
また、関数はキャッシュに保持されますか? キャッシュは読み取り専用ですか? (アレイを変更すると、キャッシュ結合が失われますか?)
コンパイラは、キャッシュをより多く生成するために asm コードを作成しますか?
ありがとう