gpt4 book ai didi

c++ - OpenMP:为 'shared' 预先确定 'shared' ?

转载 作者:可可西里 更新时间:2023-11-01 18:37:57 24 4
gpt4 key购买 nike

查看此函数(矩阵 vector 积):

std::vector<double> times(std::vector<std::vector<double> > const& A, std::vector<double> const& b, int m, int n) {

std::vector<double> c;
c.resize(n);

int i, j;
double sum;

#pragma omp parallel for default(none) private(i, j, sum) shared(m, n, A, b, c)
for (i = 0; i < m; ++i) {
sum = 0.0;
for (j = 0; j < n; j++) {
sum += A[i][j] * b[j];
}
c[i] = sum;
}

return c;
}

尝试使用 OpenMP 编译时,编译器失败并显示:

Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -fopenmp -MMD -MP -MF"src/OpemMPTutorial.d" -MT"src/OpemMPTutorial.d" -o "src/OpemMPTutorial.o" "../src/OpemMPTutorial.cpp"
../src/OpemMPTutorial.cpp:127: warning: ignoring #pragma omp end
../src/OpemMPTutorial.cpp: In function 'std::vector<double, std::allocator<double> > times(std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&, std::vector<double, std::allocator<double> >&, int, int)':
../src/OpemMPTutorial.cpp:200: error: 'b' is predetermined 'shared' for 'shared'
../src/OpemMPTutorial.cpp:200: error: 'A' is predetermined 'shared' for 'shared'
make: *** [src/OpemMPTutorial.o] Error 1

这里有什么问题吗?

(请注意,简单地删除 const 会导致相同的错误。)

最佳答案

我遇到了一个非常相似的问题,在我从 OpenMP 指令的 shared 部分删除了共享的 const 变量后,我发现可以使用 Apple 的 GCC 4.2 编译这样的程序.它们被预先确定为共享的,因为它们是常量并且不需要为每个线程制作拷贝。编译器似乎只是不接受在它已经知道的情况下明确地告诉它......

我还会删除 default(none) 规范(但请参阅 comment below )。 OpenMP 旨在减少明确的规范,因此让它发挥作用。

关于c++ - OpenMP:为 'shared' 预先确定 'shared' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13199398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com