OpenMP 如何重用线程

2024-01-20

我认为线程的创建和删除可能代价高昂。 OpenMP 是否尝试重用现有线程?例如,

#pragma omp parallel sections num_threads(4)
   {
    #pragma omp section
    { ... worker A ... }
    #pragma omp section
    { ... worker B ... }
   }
   #pragma omp parallel sections num_threads(4)
   {
    #pragma omp section
    { ... worker C ... }
   #pragma omp section
   { ... worker D ... }
  }

在执行过程中,OpenMP 分配 5 个线程还是 3 个线程(其中 C 和 D 复用 A 和 B 使用的线程)?


在您的示例中,在进入第一个并行部分时,将创建/激活一组 4 个“工作”线程,其中 2 个将执行一些工作:一个执行 A,另一个执行 B。另外 2 个将处于空闲状态在本节的末尾。然后,4 个线程在退出该部分时被销毁/停用。然后,在进入第二个并行部分时,将创建/激活一个由 4 个线程组成的新团队,同样的情况也会发生...现在我说创建/激活,因为正如您所猜测的,创建线程的成本很高,标准允许编译器创建线程一次,并且仅在需要时才将线程置于并行部分之间的睡眠状态。但这是一个对程序员来说应该透明的实现细节。

最终,无法知道哪个线程将处理 A、B、C 和 D...您只能确定 A 和 B 将由 2 个不同的线程处理,而 C 和 D 将由两个不同的线程处理。也有不同的线程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenMP 如何重用线程 的相关文章

  • 让线程在窗体关闭时保持运行

    我在我的应用程序上创建了一个同步线程 我想知道如果我关闭申请表 是否有办法让该线程保持打开状态 直到完成同步过程 调用线程的WaitFor方法在您的 DPR 文件中 之后Application Run线 如果线程已经运行完毕 那么WaitF
  • 是否有可能将 *.pdb 文件包含到发布版本中以查看错误行号?

    我做了一个项目 所有设置都是默认的 当我在调试模式 构建配置 调试 下运行它并遇到异常时 它转储到我的自定义日志记录机制 其中包含错误行号 但是当我运行发布构建时 记录相同的异常 没有行号 只有方法抛出和记录调用堆栈 是否有可能在发布配置
  • 使用 GCHandle 将大型结构数组从 C# unity 脚本传递到 C++ dll 在 C++ 函数执行后崩溃

    我想从 C unity 脚本将结构数组传递给 c 本机插件 我做了如下操作 我可以访问数据 但我的应用程序在执行 c 函数后崩溃 我不知道为什么 C side StructLayout LayoutKind Sequential publi
  • 何时使用 C++ 私有继承而不是组合?

    你能给我一个具体的例子吗 什么时候使用私有继承优于组合 就我个人而言 我将使用组合而不是私有继承 但在某些情况下 使用私有继承可能是特定问题的最佳解决方案 正在阅读C faq http www parashift com c faq lit
  • 如何在 ASP.NET Core 6.0 Web API 项目中启用 cors?

    在我的 ASP NET Core 6 0 Web API 项目中配置了 CORS 但预检请求收到 http 405 错误 换句话说 不允许使用 HTTP OPTION 看起来 cors 没有启用 我见过的例子config EnableCor
  • c 使用 lseek 以相反顺序复制文件

    我已经知道如何从一开始就将一个文件复制到另一个文件 但是我如何修改程序以按相反的顺序复制它 源文件应具有读取访问权限 目标文件应具有读写执行权限 我必须使用文件控制库 例如 FILE A File B should be ABCDEF FE
  • 从 Golang 调用 C 函数

    我想在 Golang 中编写控制器逻辑并处理 json 和数据库 同时在 C 中使用我的数学处理模型 在我看来 调用 C 函数的开销必须尽可能低 就像设置寄存器 rcx rdx rsi rdi 一样 执行一些操作fastcall 并获取 r
  • 何时分离或加入 boost 线程?

    我有一个方法 大约每 30 秒触发一次 我需要在一个线程中包含它 我有一个可以从类外调用的方法 像 call Threaded Method 这样的东西会创建一个线程 该线程本身会调用最终的线程方法 这些是 MyClass 的方法 void
  • 如何解决文件被另一个进程使用的问题?

    我一直在 VS NET 2010 中调试 没有任何问题 但现在无法建造 我收到错误 Unable to copy file filename to bin Debug filename The process cannot access t
  • 禁用实体框架的默认值生成(Code First)

    我数据库中有一个列不能为空 我想将其设置为默认值在数据库中 问题是实体框架似乎自己创建了一个默认值 例如 int gt 0 并且完全忽略了数据库中的默认值约束 有没有办法禁用实体框架的默认值 我发现您可以使用以下属性来装饰您的字段 Data
  • 如何在 ASP.NET Core 项目中使用 MStest 测试 Ok() 结果

    我正在使用 MStest 来测试我的控制器 我想测试这个动作 HttpGet Name GetGroups public async Task
  • Code::Blocks 中的调试似乎不起作用 - 缺少调试符号

    我正在尝试在 Code Blocks 中调试程序 我跟着本指南 http wiki codeblocks org index php title Debugging with Code Blocks and 这个短视频 http www y
  • 如何在 SQLite 中检查数据库是否存在 C#

    我目前正在用 C 编写一个应用程序 并使用 sqlite 作为嵌入式数据库 我的应用程序在启动时创建一个新数据库 但如何让它检查数据库是否存在 如果它确实存在 我如何让它使用它 如果不存在如何创建一个新数据库 这是我到目前为止所拥有的 pr
  • 在 lua 中加载 C++ 模块时出现“尝试索引字符串值”错误

    我正在尝试使用 lua 用 C 编写的函数 下面给出的是cpp文件 extern C include lua h include lauxlib h include lualib h static int add 5 lua State L
  • 在两个点之间创建一条曲线,每个点都具有标准化向量

    因此 我需要一种写入方法来在两点之间创建一条曲线 每个点都有一个指向任意方向的归一化向量 我一直在尝试设计这样一种方法 但一直无法理解数学 在这里 由于一张图片胜过一千个文字 这就是我所需要的 在图中 矢量垂直于红线 我相信向量需要进行相同
  • 是否可以检测流是否已被客户端关闭?

    简要介绍一下情况 我有一项服务可以通过套接字接收信息并发送回复 连接不安全 我想设置另一个可以为这些连接提供 TLS 的服务 这个新服务将提供单个端口并根据提供的客户端证书分发连接 我不想使用 stunnel 有几个原因 其中之一是每个接收
  • 如何创建实体集或模型而不在数据库中创建相应的表 - 实体框架

    我的 sqlserver 数据库中有一个存储过程 它返回多个结果集 我正在使用 msdn 中的以下链接从实体框架中的 SP 读取多个结果集 https msdn microsoft com en us library jj691402 v
  • execlp() 系统调用输出错误

    这个非常简单的例子exec 系统调用 在这里 我试图打电话execlp 两次 但是 我没有得到例外的输出 它仅显示当前目录的第一次调用的输出 include
  • 线程安全的有限大小队列,不使用锁

    我正在尝试编写一个主题队列 但遇到死锁和其他多线程问题 我想用Interlocked CompareExchange避免lock用法 但这段代码并没有按预期工作 它只是擦除整个队列 我在这里做错了什么 public class FixedS
  • 查找和替换正则表达式问题

    感谢这里对我其他问题的所有大力帮助 我开始掌握正则表达式 但我仍然对这个一无所知 我的代码是 StreamReader reader new StreamReader fDialog FileName ToString string con

随机推荐

  • 对齐子图中的 ylabel

    我有几个子图 一个在另一个下 每个子图的 y 轴都标有不同的值 比如第一个是 1 5 第二个是 10 1000 等 所以结果是每个 ylabel 都会有不同的对齐方式 有没有办法来解决这个问题 例如 将所有 ylabel 向左对齐 或者还有
  • 为什么 eval 是邪恶的?

    我知道Lisp和Scheme程序员通常会这么说eval除非绝对必要 否则应避免 我已经看到了对几种编程语言的相同建议 但我还没有看到反对使用的明确论据列表eval 在哪里可以找到使用潜在问题的说明eval 例如 我知道以下问题GOTO在过程
  • 卷曲:连接被拒绝

    运行curl时出现以下错误 curl 7 连接127 0 0 1端口8080失败 连接 拒绝了 看起来很容易调试 但是 我没有找到如何解决它 文件中提到了地址127 0 0 1etc hosts 我在Ubuntu系统上使用curl版本7 4
  • 如何从 Sinch 应用仪表板删除上传的 APNS 证书?

    我们正在开发呼叫应用程序使用新奇SDK 我想从 Sinch Dashboard 中创建的应用程序中删除上传的 APNS 证书 我没有找到任何方法来从中删除现有的上传证书 NOTE 现在sinch在App上传的认证附近提供了 删除 选项 No
  • 如何使用java脚本向“go服务器”(go语言)发送json请求并接收json响应

    如何使用java脚本发布json请求并从 go服务器 go语言 接收json响应 我试过这个 JavaScript 代码 var calculate operand1 null operand2 null operator null fun
  • 内核中的地址

    当我在内核中找到地址时 我有一个问题 我在内核中插入一个 hello 模块 在这个模块中 我放置了这些东西 char mystring this is my address printk lt 1 gt The address of mys
  • Momentjs:如何将一个时区的日期/时间转换为 UTC 日期/时间

    我有一个带有时区的日期 时间 并且想将其转换为 UTC const date 2019 04 10T20 30 00Z const zone Asia Kuala Lumpur const utcDate moment date tz zo
  • 在 MATLAB 中拆分数组

    我有一个整数数组 我想在 0 出现的地方分割这个数组 并有一个函数给我分割点 示例 数组 0 0 0 1 2 4 5 6 6 0 0 0 0 0 22 4 5 6 6 0 0 0 4 4 0 该函数必须返回这些数字 3 10 14 20 2
  • 通过求和来聚合重复行

    根据我的问题 1 识别一组变量是否唯一标识数据的每一行 https stackoverflow com q 22834725 1414455 2 根据给定的变量集标记所有重复的行 https stackoverflow com q 2289
  • CMake 源代码中大小写一致性的工具

    CMake 命令在小写 大写和混合大小写下均有效 然而 将所有这些内容混合在一个文件中会降低 CMake 代码的可读性 有没有一种工具可以自动纠正这种风格不一致的情况 steveire 的答案链接到正确的资源 但让我明确解释一下 以防这些链
  • 关于 sbrk() 和 malloc()

    我已经彻底阅读了有关 sbrk 的 linux 手册 sbrk 改变程序中断的位置 它定义了结束 进程的数据段 即程序中断是第一个 未初始化数据段末尾之后的位置 And I do know that user space memory s
  • 如何刷新 WinForms DataGridView 上的数据源?

    我从 EntityFramework 模型填充 GridView DataSource gwTimeLog DataSource entities TimeLogs 当新行添加到 entities 时 我尝试更新网格 尝试使用与上面相同的语
  • Microsoft Sync Framework 还存在吗?

    根据MS文档Sync Framework Toolkit https code msdn microsoft com Sync Framework Toolkit 4dc10f0e https code msdn microsoft com
  • NSWindowController 与 NSViewController 之间的区别

    我来自iOS背景并开始学习Cocoa 在iOS除非我们有多个目标iPad and iPhone我们通常有一窗并使用管理屏幕UIViewControllers 每个新屏幕大多数时候都会映射到UIViewController 然而 在可可中 这
  • Treeset.contains() 问题

    所以我已经被一个问题困扰了一段时间 我想我不妨在这里寻求帮助 我将 Ticket 对象添加到 TreeSet Ticket 实现 Comparable 并重写 equals hashCode 和 CompareTo 方法 我需要使用 con
  • 古怪的 __set() 魔术函数

    谁能向我解释一下这种行为的逻辑吗 考虑以下情况 class EPPDomain protected myField public static function buildEPPDomain fieldValue me new self m
  • Select2:未捕获类型错误:options.results 不是函数

    我正在尝试使用 Select2 jquery 插件进行 AJAX 调用 查询似乎有效 但问题发生在 results 被称为options object Uncaught TypeError options results is not a
  • 默认变量值

    如果我在声明变量时没有为其赋值 那么它是否默认为零或只是内存中先前的值 e g float x 声明的变量可以是零初始化 值初始化 or 默认初始化 C 03 标准 8 5 5 恰当地定义了以下各项 To 零初始化T 类型的对象意味着 如果
  • 使用SimpleXmlElement和symfony2输出xml文件

    rootNode new SimpleXMLElement
  • OpenMP 如何重用线程

    我认为线程的创建和删除可能代价高昂 OpenMP 是否尝试重用现有线程 例如 pragma omp parallel sections num threads 4 pragma omp section worker A pragma omp