Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么是好的CPU/PC设置来加速密集型C++/模板编译?_C++_Templates_Boost_Compilation - Fatal编程技术网

C++ 什么是好的CPU/PC设置来加速密集型C++/模板编译?

C++ 什么是好的CPU/PC设置来加速密集型C++/模板编译?,c++,templates,boost,compilation,C++,Templates,Boost,Compilation,目前,我有一台配备Opteron 275(2.2Ghz)双核CPU、4GB RAM以及高速硬盘的机器。我发现,当编译一些使用C++模板的简单项目(思考Boost等)时,我的编译时间可能需要相当长的时间(小事情的时间,对于大项目来说要长得多)。不幸的是,只有一个核心被绑定到100%,所以我知道它不是I/O,而且似乎没有办法利用C++的编译的另一个核心? < P>你使用预编译的头文件吗?它们通常提供我在C++项目中获得的最大编译速度提升。 此外,根据编译器的不同,您可以启用多线程编译。例如,使用Vi

目前,我有一台配备Opteron 275(2.2Ghz)双核CPU、4GB RAM以及高速硬盘的机器。我发现,当编译一些使用C++模板的简单项目(思考Boost等)时,我的编译时间可能需要相当长的时间(小事情的时间,对于大项目来说要长得多)。不幸的是,只有一个核心被绑定到100%,所以我知道它不是I/O,而且似乎没有办法利用C++的编译的另一个核心?

< P>你使用预编译的头文件吗?它们通常提供我在C++项目中获得的最大编译速度提升。
此外,根据编译器的不同,您可以启用多线程编译。例如,使用VisualC++,它是/MP开关(),尽管启用/MP并不总是可能的,这取决于您使用的其他命令行选项。

< P>编译时问题通常是链接问题,而不是编译问题。
在.cpp文件中内部使用模板,但确保标题实际上不包含模板,这是修复这些问题的好方法。这可以通过向前声明类或将实现类包装在一个只声明公共成员的抽象基类中(基本上是Pimpl习惯用法)来实现。

要利用基于Makefile系统的多线程编译,请看一下-j开关,通常的建议是调用

make -j<number of cores + 1>
make-j

编译C++代码是困难的,而且不容易并行,特别是在链接阶段。我认为是jalf列出了为什么编译会很慢的原因,让我们看看是否可以找到。你用什么来编译?boost的哪些部分呢?这很简单,这是他投票最多的答案:一些编译器,读IDE/编译系统,允许并行编译文件。这可能会更多地利用您的双核系统。一个例子是linux/unix中的GNU make,它可以并行编译文件。如果英特尔编译器能发挥作用的话,我可以使用它。假设我也可以在VS.NET中使用GCC,如果它真的有帮助的话,尽管我对它知之甚少。英特尔编译器有很多东西,但它并不快。这是一个很好的观点,我应该更清楚,但我对Pimpl习惯用法很懒惰,这是一种额外的工作。为什么应该是
核心数+1
?您可以参考其他问题: