我的应用程序对大尺寸矩阵进行了一些操作。我最近遇到了缓存的概念以及它可以通过这个答案产生的性能影响。我想知道什么是对我的案例缓存友好的最佳算法。
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