首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于每秒运行多次的代码块,openMP有多适合并行处理?

对于每秒运行多次的代码块,openMP有多适合并行处理?
EN

Stack Overflow用户
提问于 2010-03-11 15:52:34
回答 3查看 281关注 0票数 0

假设你有一个典型的游戏循环,每秒运行大约30次。一个特定的函数花费了大约50%的时间,看起来像是并行化的主要候选函数--假设它是一个大循环,或者有4条独立的工作正在进行。假设我们已经检查了函数本身可以很好地隔离于2-4核并行化。

在这种情况下,OpenMP会放弃加速吗?我认为天真地创建1-3个线程来分割工作并不是件好事,但我真的不知道一个线程的创建/销毁会带来什么样的开销,如果是10‘s还是100’s。我不知道OMP在这类事情上是否有效,或者只适合于运行更长时间的代码。

有什么想法?

EN

回答 3

Stack Overflow用户

发布于 2010-03-11 15:57:23

许多OpenMP实现在程序启动时启动了一组线程,并且只在完成时才关闭它--也就是说,在执行过程中,它们不会做太多的破坏/构建。但是,我认为这是依赖于实现的,因此您需要仔细检查您的情况和文档。

不要争论这个问题的首要原则--测试!

编辑:如果您发现您的实现在执行过程中确实启动和停止线程,您可能可以将整个程序包装在一个omp并行构造中,并使用主子句来确保程序的单线程部分不并行。如果您有OpenMP 3.0的实现,这可能比以前规范的实现更容易。

票数 1
EN

Stack Overflow用户

发布于 2010-03-11 16:28:39

每隔1/30秒就创建和销毁线程,可能不会有这样的效果。人们会说profile,但是其他具有任何重要多线程经验的人会说减少系统调用的数量。在这种情况下,创建这些线程一次并想出一种从主线程执行请求的方法会更容易。

如果这就是您所要做的,那么您可能只需要使用#pragma omp task#pragma omp taskwait

票数 0
EN

Stack Overflow用户

发布于 2010-03-11 15:56:50

不是很多。MP =消息传递。这些算法是针对高度并行的集群系统(2000台计算机在同一件事情上工作)进行优化的,而不是“在一个过程中,每秒有很多次的小片段”。当然,只有当问题需要重要的计算时,这才能有效地工作。

示例:

电影的

  • 3d渲染,机器可能在几分钟内计算出一个帧,你需要计算数万帧。
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2426427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档