草庐IT

OPTIMIZATION

全部标签

c++ - 我应该多担心英特尔 C++ 编译器为 AMD 发出次优代码?

我们一直是一家英特尔商店。所有开发人员都使用Intel机器,最终用户推荐的平台是Intel,如果最终用户想在AMD上运行,那是他们的了望。也许测试部门在某处有一台AMD机器来检查我们没有交付任何完全损坏的东西,但仅此而已。直到几年前,我们还只使用了MSVC编译器,因为它并没有真正提供很多超出SSE级别的处理器调整选项,所以没有人担心代码是否会偏向某个x86供应商。然而,最近我们一直在使用英特尔编译器。我们的东西肯定会从中获得一些显着的性能优势(在我们的英特尔硬件上),它的矢量化能力意味着更少需要去asm/intrinsics。然而,人们开始对英特尔编译器是否实际上可能没有为AMD硬件做

c++ - 分支预测和除以零

我正在编写如下所示的代码...if(denominator==0){returnfalse;}intresult=value/denominator;...当我想到CPU中的分支行为时。https://stackoverflow.com/a/11227902/620863这个答案表示CPU将尝试正确猜测分支将走向哪条路,并且只有在发现它错误地猜测分支时才停止该分支。但是如果CPU错误地预测了上面的分支,它会在下面的指令中除以零。但这并没有发生,我想知道为什么?CPU是否实际上执行了除以零并在执行任何操作之前等待查看分支是否正确,或者它是否可以告诉它在这些情况下不应该继续?怎么回事?

c++ - 分支预测和除以零

我正在编写如下所示的代码...if(denominator==0){returnfalse;}intresult=value/denominator;...当我想到CPU中的分支行为时。https://stackoverflow.com/a/11227902/620863这个答案表示CPU将尝试正确猜测分支将走向哪条路,并且只有在发现它错误地猜测分支时才停止该分支。但是如果CPU错误地预测了上面的分支,它会在下面的指令中除以零。但这并没有发生,我想知道为什么?CPU是否实际上执行了除以零并在执行任何操作之前等待查看分支是否正确,或者它是否可以告诉它在这些情况下不应该继续?怎么回事?

c++ - GCC 内联 C++ 函数是否没有 'inline' 关键字?

在编译C++代码时,GCC是否曾尝试通过选择内联未用inline关键字标记的函数来优化速度? 最佳答案 是的。任何编译器只要认为这是一个好主意,就可以自由地内联任何函数。GCC也这样做。在-O2优化级别,当编译器认为值得做(使用启发式)并且不会增加代码。在-O3中,只要编译器认为值得这样做,它就会执行,而不管它是否会增加代码的大小。此外,在所有优化级别(即启用的优化)中,仅调用一次的静态函数都会被内联。正如下面评论中所指出的,这些-Ox实际上是包含多个更具体设置的复合设置,包括与内联相关的设置(如-finline-functions

c++ - GCC 内联 C++ 函数是否没有 'inline' 关键字?

在编译C++代码时,GCC是否曾尝试通过选择内联未用inline关键字标记的函数来优化速度? 最佳答案 是的。任何编译器只要认为这是一个好主意,就可以自由地内联任何函数。GCC也这样做。在-O2优化级别,当编译器认为值得做(使用启发式)并且不会增加代码。在-O3中,只要编译器认为值得这样做,它就会执行,而不管它是否会增加代码的大小。此外,在所有优化级别(即启用的优化)中,仅调用一次的静态函数都会被内联。正如下面评论中所指出的,这些-Ox实际上是包含多个更具体设置的复合设置,包括与内联相关的设置(如-finline-functions

c++ - 如何编写快速(低级)代码?

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter寻求指导。关闭10年前.我想了解有关低级代码优化以及如何利用底层机器架构的更多信息。我正在寻找有关在哪里阅读有关此主题的好建议。更多详情:我对在C/C++等低级语言中的科学计算(这是很多数字运算,但不仅)环境中的优化感兴趣。我对那些不明显的优化方法特别感兴趣,除非人们对机器的工作原理有很好的了解(我还不了解)。例如,很明显,更好的算法更快,无需了解运行它的机器的任何信息。如

c++ - 如何编写快速(低级)代码?

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter寻求指导。关闭10年前.我想了解有关低级代码优化以及如何利用底层机器架构的更多信息。我正在寻找有关在哪里阅读有关此主题的好建议。更多详情:我对在C/C++等低级语言中的科学计算(这是很多数字运算,但不仅)环境中的优化感兴趣。我对那些不明显的优化方法特别感兴趣,除非人们对机器的工作原理有很好的了解(我还不了解)。例如,很明显,更好的算法更快,无需了解运行它的机器的任何信息。如

c++ - 优化非常常用的字谜函数

我写了一个函数来判断两个单词是否是字谜。单词如果您可以通过重新排列从A中构建单词B,则A是单词B的字谜字母,例如:leadisanagramofdeal这是我的功能:boolis_anagram(std::stringconst&s1,std::stringconst&s2){autocheck=[](std::stringconst&x){std::mapcounter;for(autoconst&c:x){autoit=counter.find(c);if(it==counter.end())counter[c]=1;else++counter[c];}returncounter;

c++ - 优化非常常用的字谜函数

我写了一个函数来判断两个单词是否是字谜。单词如果您可以通过重新排列从A中构建单词B,则A是单词B的字谜字母,例如:leadisanagramofdeal这是我的功能:boolis_anagram(std::stringconst&s1,std::stringconst&s2){autocheck=[](std::stringconst&x){std::mapcounter;for(autoconst&c:x){autoit=counter.find(c);if(it==counter.end())counter[c]=1;else++counter[c];}returncounter;

c++ - 现代编译器是否将 x * 2 操作优化为 x << 1?

C++编译器是否优化了乘以二的运算x*2到位移操作x?我愿意相信是的。 最佳答案 其实VS2008把这个优化成x+x:01391000pushecxintx=0;scanf("%d",&x);01391001leaeax,[esp]01391004pusheax01391005pushoffsetstring"%d"(13920F4h)0139100Amovdwordptr[esp+8],001391012calldwordptr[__imp__scanf(13920A4h)]inty=x*2;01391018movecx,dwor