OpenMP 卸载数据竞争

问题描述

我目前正在开展一个项目,使用 OpenMP 在 GPU 上反转矩阵。但是,在对矩阵的一行进行归一化时,我会遇到数据竞争。 代码如下所示:

#pragma omp target data map(tofrom: matrix[0:dim*dim],iden[0:dim*dim]) map(alloc: factor)
for (int i = 0; i < dim; i++) {

// fix data race on cpu,this should not be necessary
#pragma omp target update from(matrix[i * dim + i])
    factor = matrix[i * dim + i];
#pragma omp target update to(factor)

#pragma omp target teams distribute shared(factor)
    for (int x = i; x < dim + i + 1; x++) {
//barrier doesn't help
//      float factor = matrix[i * dim + i];
//#pragma omp barrier
        if (x < dim) {
            matrix[i * dim + x] /= factor;
        } else {
            iden[i * dim + x - dim] /= factor;
        }
    }

...
}

发生数据竞争是因为 matrix[i * dim + i] 会在计算过程中的某个时刻被 1.0 替换。在最后一次迭代中更换它也没有解决问题。 也许你有什么建议?

先谢谢你!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)