我发现在MSVC(Windows上)和GCC(Linux上)中为IvyBridge系统编译的代码在性能上存在很大差异。该代码执行密集矩阵乘法。我使用GCC获得了70%的峰值失败率,而使用MSVC仅获得了50%的失败率。我想我可能已经隔离了它们如何转换以下三个内在函数的区别。__m256breg0=_mm256_loadu_ps(&b[8*i])_mm256_add_ps(_mm256_mul_ps(arge0,breg0),tmp0)GCC会这样做vmovupsymm9,YMMWORDPTR[rax-256]vmulpsymm9,ymm0,ymm9vaddpsymm8,ymm8,ymm
我发现在MSVC(Windows上)和GCC(Linux上)中为IvyBridge系统编译的代码在性能上存在很大差异。该代码执行密集矩阵乘法。我使用GCC获得了70%的峰值失败率,而使用MSVC仅获得了50%的失败率。我想我可能已经隔离了它们如何转换以下三个内在函数的区别。__m256breg0=_mm256_loadu_ps(&b[8*i])_mm256_add_ps(_mm256_mul_ps(arge0,breg0),tmp0)GCC会这样做vmovupsymm9,YMMWORDPTR[rax-256]vmulpsymm9,ymm0,ymm9vaddpsymm8,ymm8,ymm
基本的Google搜索bigobjissue说明很多人都在体验FatalErrorC1128:“节数超出目标文件格式限制:使用/bigobj编译”。如果大量使用C++模板库,例如Boostlibraries,则该错误更有可能发生。或CGALlibraries.这个错误很奇怪,因为它自己给出了解决方案:设置compilerflag/bigobj!所以这是我的问题:为什么默认情况下不设置该标志?使用该标志必须受到惩罚,否则它将默认设置。MSDN中没有记录该惩罚。有人知道吗?我问这个问题是因为我想知道CGAL的配置系统不应默认设置/bigobj。 最佳答案
基本的Google搜索bigobjissue说明很多人都在体验FatalErrorC1128:“节数超出目标文件格式限制:使用/bigobj编译”。如果大量使用C++模板库,例如Boostlibraries,则该错误更有可能发生。或CGALlibraries.这个错误很奇怪,因为它自己给出了解决方案:设置compilerflag/bigobj!所以这是我的问题:为什么默认情况下不设置该标志?使用该标志必须受到惩罚,否则它将默认设置。MSDN中没有记录该惩罚。有人知道吗?我问这个问题是因为我想知道CGAL的配置系统不应默认设置/bigobj。 最佳答案
因此,在使用constexpr时,MSVC(VisualStudio2012)在尝试使用这个简单的程序(包括省略)使用constexpr关键字限定我的函数时给了我一个错误:constexprintfactorial(intn){returnnconstexpr带有红色下划线,并带有以下消息:Error:thisdeclarationhasnostorageclassortypespecifier并尝试编译程序给出以下输出:1>main.cpp(5):errorC2144:syntaxerror:'int'shouldbeprecededby';'1>main.cpp(5):errorC
因此,在使用constexpr时,MSVC(VisualStudio2012)在尝试使用这个简单的程序(包括省略)使用constexpr关键字限定我的函数时给了我一个错误:constexprintfactorial(intn){returnnconstexpr带有红色下划线,并带有以下消息:Error:thisdeclarationhasnostorageclassortypespecifier并尝试编译程序给出以下输出:1>main.cpp(5):errorC2144:syntaxerror:'int'shouldbeprecededby';'1>main.cpp(5):errorC
预编译头文件的最佳候选者是什么?我可以将STL和Boostheader放在那里,即使它们有模板?这会减少编译时间吗?另外,减少编译时间的最佳IDE设置是什么? 最佳答案 快速回答:STL和Boost头文件确实属于预编译头文件,即使这些头文件定义了模板类。在生成预编译的头文件时,编译器会解析头文本(一项重要的任务!),并将其转换为针对编译器进行优化的二进制格式。即使在编译其他.cpp文件时会实例化模板类,它们也会从预编译头中的信息实例化,这对于编译器来说读取速度要快得多。(稍后添加)您应该不包含在预编译头文件中的一件事是作为项目的一部
预编译头文件的最佳候选者是什么?我可以将STL和Boostheader放在那里,即使它们有模板?这会减少编译时间吗?另外,减少编译时间的最佳IDE设置是什么? 最佳答案 快速回答:STL和Boost头文件确实属于预编译头文件,即使这些头文件定义了模板类。在生成预编译的头文件时,编译器会解析头文本(一项重要的任务!),并将其转换为针对编译器进行优化的二进制格式。即使在编译其他.cpp文件时会实例化模板类,它们也会从预编译头中的信息实例化,这对于编译器来说读取速度要快得多。(稍后添加)您应该不包含在预编译头文件中的一件事是作为项目的一部
所以我可以做类似的事情#ifdefMSVC//docompilerspecificcodehere#endif 最佳答案 它是_MSC_VER。更多信息atMSDN和atpredef.但是,请注意,其他一些编译器也可能定义它,例如英特尔的Windows的C++编译器也定义了_MSC_VER。如果这是一个问题,请使用#if_MSC_VER&&!__INTEL_COMPILER。 关于c++-如果编译器是MSVC,是否定义了预处理器定义?,我们在StackOverflow上找到一个类似的问题
所以我可以做类似的事情#ifdefMSVC//docompilerspecificcodehere#endif 最佳答案 它是_MSC_VER。更多信息atMSDN和atpredef.但是,请注意,其他一些编译器也可能定义它,例如英特尔的Windows的C++编译器也定义了_MSC_VER。如果这是一个问题,请使用#if_MSC_VER&&!__INTEL_COMPILER。 关于c++-如果编译器是MSVC,是否定义了预处理器定义?,我们在StackOverflow上找到一个类似的问题