这是我的代码:
主文件
#include <header.h>
#include <Eigen/Dense>
int main{
int result(100);
VectR M(100) = something; // VectR defined in header.h
VectR N(100) = something else;
#pragma omp parallel private(var,i,R) shared(M,N,result)
{
#pragma omp for
for(int i = 0 ; i < 100 ; ++i){
result(i) = somefunction(M,N(i));
}
}
}
somefunction
,在另一个文件中定义,将需要读取(但不写入)整个向量M
。
标头.h:
#include <Eigen/Dense>
using namespace Eigen;
typedef double REAL;
typedef Eigen::Matrix<REAL, Eigen::Dynamic, 1> VectR;
int somefunction(const VectorR&, const VectorR&)
如何避免多个线程同时访问M
in的给定元素somefunction
?一些想法:
- 我可以/应该直接在读取 M 的文件中直接放置
#pragma omp critical
或atomic
指令吗?somefunction
我最初的想法是通过指令中
M
的一个子句为每个线程提供自己的完整副本。但是,我在编译时收到以下错误:firstprivate(M)
parallel
main.cpp: In function âint somefunction(const VectorR&, const VectorR&)â:
main.cpp:xx: error: âMâ has reference type for âfirstprivateâ