gpt4 book ai didi

openmp - OpenMP 中的原子性和关键性有什么区别?

转载 作者:行者123 更新时间:2023-12-01 22:18:53 27 4
gpt4 key购买 nike

OpenMP 中原子和关键之间有什么区别?

我能做到

#pragma omp atomic
g_qCount++;

但这和

不一样吗
#pragma omp critical
g_qCount++;

最佳答案

对 g_qCount 的影响是相同的,但所做的事情不同。

OpenMP 临界区是完全通用的 - 它可以包围任何任意代码块。然而,每次线程进入和退出关键部分时,您都会为这种通用性付出代价(除了序列化的固有成本之外)。

(此外,在 OpenMP 中,所有未命名的临界区都被视为相同(如果您愿意,所有未命名的临界区只有一把锁),因此,如果一个线程位于上述一个 [未命名] 临界区中,则没有线程可以输入任何[未命名]临界区。正如您可能猜到的,您可以通过使用命名临界区来解决这个问题。

原子操作的开销要低得多。在可用的情况下,它利用提供(例如)原子增量操作的硬件;在这种情况下,进入/退出代码行时不需要锁定/解锁,它只是执行原子增量,硬件告诉您不会受到干扰。

优点是开销要低得多,并且处于原子操作中的一个线程不会阻止任何即将发生的(不同的)原子操作。缺点是原子支持的操作集有限。

当然,无论哪种情况,您都会产生序列化的成本。

关于openmp - OpenMP 中的原子性和关键性有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7798010/

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