nik*_*kos 4 c++ compiler-construction parallel-processing visual-studio-2010 hyperthreading
我正在尝试优化大型VC++项目的编译时间.我的处理器是Core i7 950(4核,8线程,因为它支持Intel超线程技术).
在Microsoft Visual Studio 2010中,如果转到"工具">"选项">"项目和解决方案">"VC++项目设置">"最大并发C++编译"
您可以选择用于并行C++编译的最大CPU内核.我在那里选择0(以便使用我的所有核心),这与使用4或8时产生完全相同的结果.
现在,如果我在编译项目时打开任务管理器,我可以看到4个并行编译线程正在运行(在进程下他们有描述:Microsoft C/C++编译器驱动程序),并且总CPU使用率略低于50%的所有时间.
所以我的问题是:
是否有可能在四核,超线程处理器中拥有8个并行编译线程?如果这是不可能的,那么在编译时是否有可能以某种方式使用接近100%的处理器功率?
这将为我节省大量时间.
非常感谢你提前,
尼古拉斯
这将为我节省大量时间.
不,它不会.当您运行使用CPU内部补充资源的不同类型的任务时,超线程非常有用.例如,一个线程使用大量浮点而另一个不使用浮点数.虽然第一个是进行浮点数学运算,但其余的CPU可供另一个线程使用.
出于显而易见的原因,一堆编译线程需要相同的内部CPU资源.所有你实现的是拥有两倍的线程争夺CPU缓存和资源.更多的缓存争用会使生命更慢,而不是更快.
好吧,上面解释了为什么你不会从超线程和同质代码中获得巨大收益.并行化的传统智慧是将作业数量设置为大于核心数量,假设1/N进程可能正在执行磁盘I/O. 当然,对于Unix而言,除了实际编译之外,还会在其中执行大量的makefile处理.
如果您将旋钮调高到8并且在任务管理器报告的CPU使用情况下没有看到任何变化(注意,由于上述原因,可能是吞吐量的负面变化),这可能是因为您的解决方案中的相互依赖性正在强制执行某些编译任务顺序运行 如果一个任务依赖于另一个任务的输出(预编译头通常会导致这种情况),则会限制同时作业的数量 - 即使您拥有16个核心系统,您仍然无法获得比项目结构允许的并行性更多的并行性.
| 归档时间: |
|
| 查看次数: |
3907 次 |
| 最近记录: |