首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenMP开销

OpenMP开销
EN

Stack Overflow用户
提问于 2011-09-05 02:33:48
回答 4查看 1K关注 0票数 2

我已经使用OpenMP和Intel TBB并行化了图像卷积和lu分解。我正在1-8个内核上测试它。但是,当我通过分别使用set_num_threads(1)和task_scheduler_init InitTBB(1)指定一个线程,在OPenMP和TBB中的1核上进行测试时,由于TBB开销,TBB性能与顺序代码相比略有下降,但令人惊讶的是,OpenMP在单核上没有显示任何开销,并且性能与顺序代码完全相同(使用英特尔O3优化级别)。我使用的是OpenMP循环的静态调度。这是现实的,还是我做错了什么?

EN

回答 4

Stack Overflow用户

发布于 2011-10-02 02:32:47

如果只使用一个线程运行OpenMP运行时,它可能不会创建任何线程。

此外,仅仅使用OpenMP并行化指令有时也会使串行代码运行得更快,因为您实际上是在向编译器提供更多信息。例如,工作共享结构告诉编译器循环的迭代是相互独立的,这可能是它自己无法推断的,这允许编译器使用更积极的优化策略。当然,并不总是这样,但我曾在“真实世界的代码”中看到过这种情况。

票数 2
EN

Stack Overflow用户

发布于 2011-09-05 02:45:39

OpenMP是编译器完成所有工作的地方。如果编译器知道它将总是串行代码,它可以非常合法地跳过所有的并行位。

据我所知,它基本上只是一个库。它总是必须用必要的部分来装饰你的算法,以便并行和串行运行它。

票数 0
EN

Stack Overflow用户

发布于 2012-06-14 19:12:30

OpenMP将代码的修饰部分(#杂注omg for/parallel)分支到一个主线程(也可以在没有OpenMP的情况下执行)和其他线程中。

如果配置为仅使用一个线程,则这只是主线程,在没有OpenMP指令的情况下执行。没有开销,因为执行路径没有派生。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7301317

复制
相关文章

相似问题

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