【问题标题】:Visual Studio 2010, Maximum Concurrent C++ Compilations for Hyper-Threaded ProcessorsVisual Studio 2010,超线程处理器的最大并发 C++ 编译
【发布时间】:2011-06-16 13:59:28
【问题描述】:

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

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

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

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

所以我的问题是:

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

这将为我节省大量时间。

非常感谢您,

尼古拉斯

【问题讨论】:

标签: c++ visual-studio-2010 compiler-construction parallel-processing hyperthreading


【解决方案1】:

这将为我节省大量时间。

不,不会。当您要运行不同类型的任务并使用 CPU 内的互补资源时,超线程非常有用。例如,一个线程使用大量浮点数,而另一个线程不使用。第一个线程进行浮点运算时,其他线程可以使用 CPU 的其余部分。

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


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

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

【讨论】:

  • 感谢您的回复。所以拥有 4 个编译器进程永远不会让我的总 CPU 使用率超过 50%,对吗??
  • @Nicholas:Windows 不知道如何计算超线程 CPU 的使用百分比。您只有 4/8 个可能的线程在运行,但它们使用了编译所需 CPU 资源的 4/4。更高的 CPU 使用率并不意味着更快地完成有用的工作。 10,000 个同时运行的进程将达到 100% 的 CPU,但它们在主内存和缓存之间移动数据所花费的时间比工作要多。
  • 这不是真的。编译速度并不真正取决于处理,而是内存吞吐量(不是许多人所说的 IO)。这意味着在 CPU 处于空闲状态而其他线程可以运行的情况下会出现大量缓存未命中。不幸的是,英特尔与 Sun/Oracle 的最新技术相去甚远。这就是为什么您在编译期间只看到 35% 的增长。
  • @Lothar:“你所要做的就是让两倍多的线程争夺 CPU 缓存”是否不足以涵盖这一点?
【解决方案2】:

可能是您只是磁盘受限而不是 CPU 受限。

【讨论】:

  • 所以你建议升级到固态硬盘可以解决这个问题,并且可以达到 100%?
  • @Nicholas:快速测试是使用 RAMDisk 作为构建目录。但通常编译是 CPU 密集型的。
  • 只是想取消我的投票而不是 -1 但这里是 - 在 8 核 HT 系统上接近 50% 意味着 4 个核心以接近 100% 的 CPU 使用率运行 - 这表明它不受磁盘限制,因为它是使用 4 个线程可以使用的所有 CPU。
  • @RnR:或者,可能有 8 个线程以 50% 的 CPU 运行,因为它们无法获得足够的输入以 100% 运行。
  • 是的 - 但这里不是这种情况 - “现在,如果我在编译项目时打开任务管理器,我可以看到 4 个并行编译线程正在运行”
【解决方案3】:

我认为这是视觉工作室的问题。尝试使用“jom”并行 nmake 克隆运行您的 makefile。与调用 4 核编译的 msvc 相比,使用它时,您应该会看到 35% 的增长。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-15
    • 2023-03-26
    • 1970-01-01
    • 2012-05-29
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    相关资源
    最近更新 更多