gpt4 book ai didi

c++ - Visual Studio 2010,超线程处理器的最大并发 C++ 编译

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

我正在尝试优化大型 VC++ 项目的编译时间。我的处理器是 Core i7 950(4 核、8 线程,因为它支持 Intel 超线程技术)。

在 Microsoft Visual Studio 2010 中,如果您转到工具>选项>项目和解决方案>VC++ 项目设置>最大并发 C++ 编译

您可以选择最大数量的 CPU 内核用于并行 C++ 编译。我在那里选择 0(以便使用我的所有内核),这与使用 4 或 8 时产生的结果完全相同。

现在,如果我在编译项目时打开任务管理器,我可以看到 4 个并行编译线程正在运行(在进程下它们有描述:Microsoft C/C++ Compiler Driver),并且总 CPU 使用率是一直低于 50%。

所以我的问题是:

是否可以在四核超线程处理器中拥有 8 个并行编译线程?如果这不可能,那么是否可以在编译时以某种方式使用接近 100% 的处理器能力?

这将为我节省大量时间。

非常感谢您,

尼古拉斯

最佳答案

This is will save me a huge amount of time.

不,不会。当您要运行使用 CPU 内部互补资源的不同类型的任务时,超线程非常有用。例如,一个线程使用大量 float ,而另一个则不用。当第一个执行 float 学运算时,CPU 的其余部分可供另一个线程使用。

出于显而易见的原因,一堆编译线程需要相同的内部 CPU 资源。您所获得的只是有两倍的线程争夺 CPU 缓存和资源。更多的缓存争用会让生活变得更慢,而不是更快。


好吧,上面解释了为什么您不会从超线程和同类代码中获得巨大 yield 。并行 make 的传统智慧是将作业数设置为比内核数大 1,假设 1/N 进程可能正在执行磁盘 I/O。当然,这是针对 Unix make 的,其中作业除了实际编译之外还进行大量 makefile 处理。

如果您在任务管理器报告的 CPU 使用情况中将旋钮调到 8 并且没有看到任何变化(请注意,由于上述原因,吞吐量可能出现负面变化),这可能是因为您的解决方案中的相互依赖性迫使某些编译任务按顺序运行。如果一个任务依赖于另一个任务的输出(预编译头通常会导致这种情况),那么这会限制同时作业的数量——即使您有一个 16 核系统,您仍然不会获得超过项目结构所允许的并行性。

关于c++ - Visual Studio 2010,超线程处理器的最大并发 C++ 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6373121/

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