私のアプリケーションは、大きなサイズの行列に対していくつかの操作を行います。私は最近、キャッシュの概念と、この回答によるパフォーマンスへの影響に出くわしました。私の場合、キャッシュに適した最適なアルゴリズムは何かを知りたいです。
Algorithm 1:
for(int i = 0; i < size; i++)
{
for(int j = i + 1; j < size; j++)
{
c[i][j] -= K * c[j][j];//K is a constant double variable
}//c is a 2 dimensional array of double variables
}
Algorithm 2:
double *A = new double[size];
for(int n = 0; n < size; n++)
A[n] = c[n][n];
for(int i = 0; i < size; i++)
{
for(int j = i + 1; j < size; j++)
{
c[i][j] -= K * A[j];
}
}
アレイのサイズが 1000x1000 を超えています。私のラップトップでのベンチマークは、サイズ 5000x5000 でアルゴリズム 2 が 1 よりも優れていることを示しています。行のセットがスレッドによって操作されるように、アプリケーションをマルチスレッド化したことに注意してください。
For example: For array of size 1000x1000.
thread1 -> row 0 to row 249
thread2 -> row 250 to row 499
thread3 -> row 500 to row 749
thread4 -> row 750 to row 999