gpt4 book ai didi

c++ - 单线程程序明显使用多核

转载 作者:行者123 更新时间:2023-11-30 01:10:04 26 4
gpt4 key购买 nike

问题总结:运行单线程程序时使用了所有四个内核。为什么?

详细信息:我用 Xcode (C++) 编写了一个非并行程序。我正在对其进行并行处理,想看看我所做的是否真的导致使用了更多的内核。为此,我使用 Instruments 来查看核心用法。令我惊讶的是,虽然我的应用程序是单线程的,但所有四个内核都得到了利用。

为了测试它是否改变了性能,我将可用内核的数量调低到 1(您可以在 Instruments 和首选项中这样做)并且速度一点也没有降低。所以(据我所知)该程序没有以任何方式并行化。

我找不到任何关于使用多核执行单线程任务意味着什么的信息。我读错了仪器输出吗?或者单线程进程是否由于某种原因在不同的内核之间分流(比如在路上改变车道而不是同时在两条车道上行驶 - 即实际并行化)?

感谢任何人对此提供的任何见解。

使用 MWE 进行编辑(很抱歉最初没有这样做)。以下是在 Xcode 中编译的 C++ 代码,用于查找小于 500,000 的素数。

#include <iostream>

int main(int argc, const char * argv[]) {
clock_t start, end;
double runTime;
start = clock();
int i, num = 1, primes = 0;
int num_max = 500000;

while (num <= num_max) {
i = 2;
while (i <= num) {
if(num % i == 0)
break;
i++;
}
if (i == num){
primes++;
std::cout << "Prime: " << num << std::endl;
}

num++;
}

end = clock();
runTime = (end - start) / (double) CLOCKS_PER_SEC;
std::cout << "This machine calculated all " << primes << " under " << num_max << " in " << runTime << " seconds." << std::endl;

return 0;
}

这在我的机器上运行大约 36 秒,如最终结果和我手机的秒表所示。当我分析它时(使用从 Xcode 中启动的工具),它给出了大约 28 秒的运行时间。下图显示了核心用法。

instruments showing core usage with all 4 cores (with hyper threading)

现在我将可用核心数减少到 1。从分析器中重新运行(按下记录按钮),它说运行时间为 29 秒;如下图所示。

instruments output with only 1 core available

这符合我的理论,即更多内核不会提高单线程程序的性能!不幸的是,当我实际用我的手机为程序计时时,上面的过程大约花费了 1 分 30 秒,因此打开所有内核可以获得有意义的性能提升。

让我很困惑的一件事是,如果你将核心数保留为 1,回到 Xcode 并运行程序,它再次说它需要大约 33 秒,但我的手机说它需要 1 分钟 50 秒.因此,改变核心是对内部时钟做一些事情(也许)。

希望能完整描述问题。我正在运行 2015 15 英寸 MBP,配备 2.2GHz i7 四核处理器。 Xcode 7.3.1

最佳答案

我想假设您的回答缺少大量信息,以便进行准确的诊断。无论如何,我将尝试向您解释 IHMO 最常见的原因,假设您的应用程序不使用以多线程方式执行的第 3 部分组件。

我认为这可能是调度器效应的结果。我将解释我的意思。

处理器的每个核心在系统中获取一个进程并在“短”时间内执行它。 This是桌面操作系统中最常见的解决方案。

您的进程在单个内核上执行了这段时间,然后停止以允许其他进程继续。当您恢复相同的进程时,它可以在另一个核心中执行(总是一个核心,但另一个核心)。因此,一个精度低且分辨率低的任务管理器可以记录所有内核的利用率,即使它没有记录。

为了验证是否是这个原因,我建议您查看应用程序运行时使用的 CPU 百分比。事实上,在单线程应用程序的情况下,CPU 应该约为 1/#numberCore ,在您的情况下为 25%

关于c++ - 单线程程序明显使用多核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38874654/

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