gpt4 book ai didi

c - 我想知道是否有办法将 OpenMP 中的特定线程分配给特定的 CPU 核心?

转载 作者:行者123 更新时间:2023-11-30 18:12:18 25 4
gpt4 key购买 nike

使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com