我有这个 C++ 代码。
循环遍历矩阵,找到每一行中的最小元素,然后从对应行的每个元素中减去它。变量 myr 是所有最小元素的总和
尝试并行:
int min = 0;
int myr = 0;
int temp[SIZE][SIZE];
int size = 0;
...//some initialization
omp_set_num_threads(1);
start_time = omp_get_wtime();
#ifdef _OPENMP
#pragma omp parallel for firstprivate(min, size) reduction(+:myr)
#endif
for(int i = 0; i < size; i++){
min = INFINITY;
for(int j = 0; j < size; j++){
if (temp[i][j] < min)
min = temp[i][j];
}
myr+=min;
for(int j = 0; j < size; j++)
temp[i][j]-=min;
}
end_time = omp_get_wtime();
如果我设置omp_set_num_threads(2);
这部分代码开始工作得更慢。
我的 proc 有 2 个核心
为什么代码在 2 个线程上运行速度较慢?