此问题特定于OpenMP3.0中的任务构造及其对C++的隐式firstprivate的使用。我正在寻找问题的解释以及可能的解决方案。我正在处理的程序有一些段错误;我设法将问题简化为以下测试用例。出现问题是因为我正在从#pragmaomptask中访问(对象A的)实例变量#include#includeusingnamespacestd;classA{private:intsomeInstanceVariable;public://ThisisnevercalledA(int_someInstanceVariable){someInstanceVariable=_someInstance
g++-fopenmpmain.cpp提示未定义对std::vector的引用。如何解决这个问题?我已经在Ubuntu上安装了libomp-dev包。主要.cpp#include#includetemplateTrecursiveSumBody(std::vector&vec){Tsum=0;#pragmaomptaskshared(sum){sum=recursiveSumBody(vec);}returnvec[0];}intmain(){std::vectora;recursiveSumBody(a);return0;}undefinedreference/tmp/ccTDECN
我在类方法中有一个#pragmaompparallelfor循环。每个线程只读访问很少的方法局部变量,很少调用私有(private)数据和方法的参数。所有这些都在shared子句中声明。我的问题:性能方面应该没有任何区别声明这些变量shared或firstprivate。对吧?如果我不小心让变量不共享相同的缓存行,是否也是如此?如果其中一个共享变量是一个指针,并且在线程内我通过它读取一个值,是否存在像普通循环中那样的别名问题?明天我将尝试分析我的代码。同时感谢您的建议! 最佳答案 嗯,它们不是一回事。使用shared,它们在所有线程