0
我一直試圖在一個系統上測試我的複雜CSR矩陣矢量代碼,每個系統有2個CPU,每個6個核心。我驚奇地發現1,2,4,6或12線程的時間幾乎相同。它的工作原理,我可以看到相應的線程在乘法運算期間仍然存在,但沒有加速。我不明白我是否犯了一些錯誤,或者只是說現在的問題不能縮放。OpenMP沒有表現:嵌套循環
void spmv_csr(int num_rows, const int* rowPtrs, const int* colIdxs, const double complex* values, const double complex* x, double complex* y)
{
double complex rowSum;
int i, j, row_start, row_end;
clock_t begin, end;
begin = clock();
#pragma omp parallel for private(j, i, row_start, row_end) reduction(+:rowSum)
for(i = 0; i < num_rows; i++)
{
rowSum = 0.00 + 0.00 *I;
row_start = rowPtrs[i]-1;
row_end = rowPtrs[i+1]-1;
for (j=row_start; j<row_end; j++)
{
rowSum += ((creal(values[j]) * creal(x[colIdxs[j]-1])) - (cimag(values[j]) * cimag(x[colIdxs[j]-1]))) + (((creal(values[j]) * cimag(x[colIdxs[j]-1])) + (cimag(values[j]) * creal(x[colIdxs[j]-1]))) * I);
}
y[offset+i] = rowSum;
}
end = clock();
printf("Time Elapsed: %f seconds\n", (double)(end - begin)/CLOCKS_PER_SEC);
}
我避開0.38秒,奔跑與1,2,4,6,8,12個線程,我不明白爲什麼我沒有看到,甚至10%的速度提升。
感謝您提前提出任何意見。
所有線程是否同時運行?如果程序利用多核CPU,我會調用omp_get_num_threads()函數來查明實際情況。 – Juniar 2014-09-26 18:49:54
最近一個問題的重複可能是一個問題的重複[是一個老問題]的副本(http://stackoverflow.com/questions/10673732/openmp-time-and-clock-calculates-two-different - 結果) - 不要使用clock()。此外,你的代碼是內存限制的,而且大矩陣的性能不會擴展。 – 2014-09-26 18:52:35
@Hristo Iliev可能,但它是由不同的用戶問的。但是,您可能必須重定向他,以確定他是否在問他是什麼。 – Juniar 2014-09-26 18:59:06