[英]OpenMP shared vs. firstprivate performancewise
我在类方法中有一个#pragma omp parallel for
循环。 每个线程只读取几个方法局部变量,很少调用私有数据和方法的参数。 所有这些都在shared
条款中声明。 我的问题:
shared
或firstprivate
。 对? 明天我将尝试描述我的代码。 在此期间感谢您的建议!
嗯,他们不是一回事。 通过shared
,它们在所有线程之间共享。 使用firstprivate
,每个线程都获得它自己的副本。 如果您只是阅读变量,那么最好将其保留为shared
以避免复制它。 (在C ++中, firstprivate
将隐式调用复制构造函数。)
正确,多个线程读取和写入位于同一个高速缓存行上的值称为假共享 。 高速缓存行将在访问它的核心之间来回反弹 - 如果经常发生这种情况,可能会导致显着减速。
如果您只是通过共享指针读取数据,那么应该没有问题。 但如果你也写信,那么你需要确保你没有竞争条件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.