【发布时间】:2019-04-03 14:27:26
【问题描述】:
我在 OpenMP 中并行 for-loop 代码有问题,并行 for-loop 的结果与顺序 for-loop 不同。如何使此代码与顺序代码具有相同的结果。
counter = 0;
#pragma omp parallel for
for(i=0; i<L; i++) {
int sum_found = 0;
for(j=0; j<M; j++) {
int found = 0;
for(k=0; k<N_SUBSET; k++) {
if (i==0 && unsorted_arr[j*N_SUBSET + k] < intervals[i]) {
s_prime[counter] = unsorted_arr[j*N_SUBSET + k];
counter++;
found++;
}
else if (i!=0 && unsorted_arr[j*N_SUBSET + k] >= intervals[i-1] && unsorted_arr[j*N_SUBSET + k] < intervals[i]) {
s_prime[counter] = unsorted_arr[j*N_SUBSET + k];
counter++;
found++;
}
else if (i==L-1 && unsorted_arr[j*N_SUBSET + k] >= intervals[i-1]) {
s_prime[counter] = unsorted_arr[j*N_SUBSET + k];
counter++;
found++;
}
}
C[i][j] = found;
sum_found += found;
}
n_intervals_len[i] = sum_found;
}
【问题讨论】:
-
您是否尝试过启用 thread-sanitizer 进行编译?
-
我只是用 GCC 和 OpenMP 编译
-
尝试添加
-fsanitize=thread。它会告诉您是否以及在哪里进行数据竞赛
标签: multithreading parallel-processing openmp