作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 OpenMP,我将一个简单的算法划分在不同的线程中,但执行时间急剧增加。这可能是由于所有线程都在同一 CPU 核心上运行。我知道,如果我的 CPU 是双核或四核,那么分配的线程数量多于 CPU 核心数量不会有太大帮助。但即使有两个线程,执行时间也会增加。
最佳答案
是的,您可以确定哪个 CPU 获得线程。
例如使用 Thread Affinity Interface (Linux* and Windows*) ,正如talonmies所建议的。但是,请注意文章中提到的内容:
<小时/>thread affinity can have a dramatic effect on the application speed.
为了使执行速度变慢,可能有两个主要原因:
1) 如果线程数多于核心数,则剩余线程将等待其他线程,这会减少为串行执行。
话虽如此,假设您有 2 个核心,那么有 4 个线程准备执行,将导致竞争条件,因为所有这些线程都会竞争资源(即核心),因此其中 2 个线程将并行执行,但另外两个则必须等待。
2) 问题规模较小。
并行运行并不是免费的。您必须做很多内务工作并通常协调并行执行。您必须让 OpenMP 发挥作用,操作系统也必须处理更多线程/进程。
因此,除非问题的规模足够大,否则您不会看到任何加速(更糟糕的是,您会看到速度减慢,就像您的情况一样),因为编排并行执行的开销将主导执行您的应用程序。
关于c - 我想知道是否有办法将 OpenMP 中的特定线程分配给特定的 CPU 核心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38343817/
我是一名优秀的程序员,十分优秀!