CPUキャッシュが速度パフォーマンスに与える影響をテストするプログラムを作成しました。
void* foo(void* ptr)
{
int* r = (int*) ptr;
for (int i = (r - s); i < N; i += NUM_THREADS)
*r += num[i];
return NULL;
}
void* bar(void* ptr)
{
int* r = (int*) ptr;
int idx = r - s;
int block = N/NUM_THREADS;
int start = idx * block, end = start + block;
for (int i = start; i < end; ++i)
*r += num[i];
return NULL;
}
基本的にfoo()
、インターレーススキャンを実行しましたがbar()
、アレイをブロックごとにスキャンしました。
テスト結果は、それbar()
がはるかに高速であることを示しています。
gcc ping-pong.c -std=gnu99 -lpthread -O2 ; ./a.out
1.077037s
0.395525s
では、この結果をどのように解釈するのでしょうか?
完全なソースコードは次の場所にあります:https ://gist.github.com/4617935
更新:すべてのifステートメントが削除されました