0
當在試圖加快我的並行代碼涉及許多二級嵌套循環驚奇溶解嵌套循環
我創建一個整數數組並在它們的順序環路的存儲索引,從而在兩個水平嵌套減緩循環變成了一層應該減少開銷的大循環。
k = 0;
for (int i=0;i<n;++i)
{
for (int j=0;j<n;++j)
{
index[k][0] = i;
index[k][1] = j;
}
}
例如:
#pragma omp for
for (int i=0;i<n;++i)
{
for (int j=0;j<n;++j)
{
a[i][j] = 2.0*i+3.0;
}
}
轉向
#pragma omp for
for (int k=0;k<n;++k)
{
i = index[k][0];
j = index[k][1];
a[i][j] = 2.0*i+3.0;
}
讓我吃驚的代碼放緩,而不是加快,我不知道爲什麼?
爲什麼第一段代碼從不修改'k'? –