C++ OpenMP共享与firstprivate性能对比
我在类方法中有一个C++ OpenMP共享与firstprivate性能对比,c++,performance,optimization,openmp,C++,Performance,Optimization,Openmp,我在类方法中有一个#pragma omp parallel for循环。每个线程只读访问几个方法局部变量、几个调用私有数据和一个方法的参数。它们都在shared子句中声明。 我的问题是: 性能方面不应该有任何区别 变量shared或firstprivate。对吧? 如果我不小心使变量不共享同一缓存线,是否也是如此 如果其中一个共享变量是指针,并且在线程中我通过它读取了一个值,那么是否存在与普通循环类似的别名问题 明天我将尝试分析我的代码。同时,谢谢你的建议 嗯,它们不是一回事。使用share
#pragma omp parallel for
循环。每个线程只读访问几个方法局部变量、几个调用私有数据和一个方法的参数。它们都在shared
子句中声明。
我的问题是:
- 性能方面不应该有任何区别
变量
或shared
。对吧?firstprivate
- 如果我不小心使变量不共享同一缓存线,是否也是如此
- 如果其中一个共享变量是指针,并且在线程中我通过它读取了一个值,那么是否存在与普通循环类似的别名问题
shared
,它们在所有线程之间共享。使用firstprivate
,每个线程都会获得自己的副本。如果您只读取变量,那么最好将其保留为shared
,以避免复制它。(在C++中,仅读取变量时不会发生错误共享,这至少是我对现代处理器的理解。所以你的第二点是非常模糊的,我建议编辑你的答案,清楚地告诉OP不会受到虚假分享的影响,不应该在意它。