【问题标题】:openmp threadprivate and gcc __thread compatibilityopenmp threadprivate 和 gcc __thread 兼容性
【发布时间】:2021-11-27 05:12:33
【问题描述】:

我对“openMP 线程”的理解是它们可能不会一对一地映射到 OS 线程。 openMP spec 似乎不需要这个。

GCC 有the __thread keyword,它用于线程本地存储(根据我的解释,线程与 OS 线程中的线程一样)。这是否意味着 GCC __thread 与 openMP 的 threadprivate 不兼容?如果 openMP 规范允许将 openMP 线程多路复用到 OS 线程上,那么我认为 __threadthreadprivate 不兼容。

我看到有一个question 不久前询问了旧版本的 GCC,它说它们基本上是兼容的。对于较新版本的 GCC(比如 GCC 11.2)仍然如此吗?

【问题讨论】:

    标签: c openmp


    【解决方案1】:

    对于大多数实现来说都是如此。我所知道的所有 OpenMP 实现都是基于操作系统级别的线程(Linux 上的 pthreads,Windows 上的 Winthreads),因此 C 的 __thread 关键字或 C++ 中的 thread_local 应该没有问题。

    但正如您所说的那样,这是事情如何实施的问题。 OpenMP API 没有对事情必须如何在内部工作做出任何声明,因此从技术上讲,可以完成不基于操作系统级线程的实现,然后可能会破坏基础语言功能,为此 OpenMP API没有指定 thre 交互。

    【讨论】:

      猜你喜欢
      • 2013-01-25
      • 2018-01-07
      • 2021-11-26
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 2013-04-17
      相关资源
      最近更新 更多