gpt4 book ai didi

c++ - OpenMP - 部分

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:59 26 4
gpt4 key购买 nike

我使用 OpenMP 编写了一个应用程序。我创建了两个部分并将两个对象放入其中。他们每个人都调用一个运行将近 22-23 秒的方法。这两个部分是独立的。

当我设置 num_threads(1) 时,应用程序需要 46 秒才能运行。没关系,因为 2×23=46。

当我设置 num_threads(2) 时,应用程序需要 35 秒才能运行,但我预计是 ~25 秒。

正如我所说,这些部分是独立的。 cm1cm2 不使用任何外部变量。那么,谁能告诉我为什么我的应用比我预期的慢 10 秒?底层有同步吗?

t1 = clock();
#pragma omp parallel num_threads(2)
{
#pragma omp sections
{
#pragma omp section
{
Cam cm1;
cm1.solveUsingCost();
}

#pragma omp section
{
Cam cm2;
cm2.solveUsingTime();
}
}
}
t2 = clock();

最佳答案

您有多少个 CPU 或内核?例如,如果您只有 2 个物理内核,其中一个还必须处理所有其他程序 + 操作系统,因此这会减慢其中一个线程的速度。

另一种可能是你的CPU的L3 cache足以将一次计算的数据完整保存在L3 cache中。但是当并行执行 2 时,会使用双倍的内存量,因此可能必须将 L3 缓存中的一些内存传输到 ram(请注意,大多数多核 CPU 在内核之间共享 L3 缓存)。这会大大减慢您的计算速度,并可能导致所描述的结果。

然而,这些只是猜测,在进行并行计算时,可能还有很多其他原因导致没有因子 2 速度增益。

更新:当然,在您提到您的 CPU 是 i5 之前我忘记了什么:i5 和 i7 处理器具有这种称为“Turbo boost”的能力,可以提高它们的时钟速度,在您的情况下从 3.3 到 3.6 GHz。然而,这仅在大多数内核处于空闲状态(我认为是出于热原因)并且单个内核被提升时才会完成。因此,两个内核的速度不会是一个内核的两倍,因为它们将以较低的时钟速度运行。

关于c++ - OpenMP - 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11163850/

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