草庐IT

OPTIMIZATION

全部标签

c++ - 分支感知编程

我正在阅读有关分支错误预测可能成为应用程序性能的热门瓶颈的信息。正如我所看到的,人们经常展示揭示问题的汇编代码,并声明程序员通常可以预测一个分支最多可以去哪里,并避免分支错误预测。我的问题是:是否可以使用一些高级编程技术(即无汇编)避免分支错误预测?使用高级编程语言(我对C和C++最感兴趣)生成对分支友好的代码应该注意什么?欢迎使用代码示例和基准测试。 最佳答案 peopleoften...andstatethatprogrammersusuallycanpredictwhereabranchcouldgo(*)有经验的程序员经常提

c++ - c/c++ 编译器是否通过二次幂值将常量除法优化为移位?

问题说明了一切。有谁知道以下...size_tdiv(size_tvalue){constsize_tx=64;returnvalue/x;}...优化成?size_tdiv(size_tvalue){returnvalue>>6;}编译器会这样做吗?(我的兴趣在于GCC)。有哪些情况可以,而其他情况不可以?我真的很想知道,因为每次我写一个可以像这样优化的部门时,我都会花费一些精力去思考是否浪费了宝贵的一秒钟时间来完成一个轮类就足够了的部门。 最佳答案 即使使用g++-O0(是的,-O0!),也会发生这种情况。您的函数编译为:_Z3

c++ - c/c++ 编译器是否通过二次幂值将常量除法优化为移位?

问题说明了一切。有谁知道以下...size_tdiv(size_tvalue){constsize_tx=64;returnvalue/x;}...优化成?size_tdiv(size_tvalue){returnvalue>>6;}编译器会这样做吗?(我的兴趣在于GCC)。有哪些情况可以,而其他情况不可以?我真的很想知道,因为每次我写一个可以像这样优化的部门时,我都会花费一些精力去思考是否浪费了宝贵的一秒钟时间来完成一个轮类就足够了的部门。 最佳答案 即使使用g++-O0(是的,-O0!),也会发生这种情况。您的函数编译为:_Z3

c++ - 在 c++11 中复制常量大小数组的最简洁方法

我经常发现自己想要复制具有恒定大小的数组的内容,我通常只写以下内容:floata[4]={0,1,2,3};floatb[4];for(inti=0;i最近,我正在编写一个用于教育目的的线性微积分库,我想知道是否有更好的方法。我首先想到的是使用memcpy:memcpy(b,a,sizeof(float)*4);但这对我来说似乎很像c并且容易出错。我喜欢在编译时出现错误,这对于具有非平凡复制构造函数的数据类型,或者如果我忘记与sizeof(datatype)相乘,这可能会变得很难看。由于我正在编写一个我将大量使用的数学库,因此性能对我来说非常重要。今天的编译器是否足够聪明,能够理解第一

c++ - 在 c++11 中复制常量大小数组的最简洁方法

我经常发现自己想要复制具有恒定大小的数组的内容,我通常只写以下内容:floata[4]={0,1,2,3};floatb[4];for(inti=0;i最近,我正在编写一个用于教育目的的线性微积分库,我想知道是否有更好的方法。我首先想到的是使用memcpy:memcpy(b,a,sizeof(float)*4);但这对我来说似乎很像c并且容易出错。我喜欢在编译时出现错误,这对于具有非平凡复制构造函数的数据类型,或者如果我忘记与sizeof(datatype)相乘,这可能会变得很难看。由于我正在编写一个我将大量使用的数学库,因此性能对我来说非常重要。今天的编译器是否足够聪明,能够理解第一

c++ - 如何确保编译器优化不会带来安全风险?

我必须编写一个Windows服务,在某些时候处理secret数据(例如PIN码、密码等)。这些信息需要很短的时间:通常它们几乎立即发送到智能卡读卡器。让我们考虑这段代码:{std::stringpassword=getPassword();//GetthepasswordfromtheuserwritePasswordToSmartCard(password);//Okay,herewedon'tneedpasswordanymore.//Wesetitallto'\0'soitdoesn'tstayinmemory.std::fill(password.begin(),passwor

c++ - 如何确保编译器优化不会带来安全风险?

我必须编写一个Windows服务,在某些时候处理secret数据(例如PIN码、密码等)。这些信息需要很短的时间:通常它们几乎立即发送到智能卡读卡器。让我们考虑这段代码:{std::stringpassword=getPassword();//GetthepasswordfromtheuserwritePasswordToSmartCard(password);//Okay,herewedon'tneedpasswordanymore.//Wesetitallto'\0'soitdoesn'tstayinmemory.std::fill(password.begin(),passwor

c++ - GCC Profile Guided Optimization (PGO) 收集哪些信息以及哪些优化使用它?

当我启用-fprofile-generate时GCC会收集哪些信息,哪些优化实际上使用了收集的信息(设置-fprofile-use标志时)?我需要在这里引用。我已经搜索了一段时间,但没有找到任何记录。有关链接时间优化(LTO)的信息将是一个加分项!=D 最佳答案 -fprofile-generate启用-fprofile-arcs、-fprofile-values和-fvpt。-fprofile-use启用-fbranch-probabilities、-fvpt、-funroll-loops、-fpeel-loops和-ftrace

c++ - GCC Profile Guided Optimization (PGO) 收集哪些信息以及哪些优化使用它?

当我启用-fprofile-generate时GCC会收集哪些信息,哪些优化实际上使用了收集的信息(设置-fprofile-use标志时)?我需要在这里引用。我已经搜索了一段时间,但没有找到任何记录。有关链接时间优化(LTO)的信息将是一个加分项!=D 最佳答案 -fprofile-generate启用-fprofile-arcs、-fprofile-values和-fvpt。-fprofile-use启用-fbranch-probabilities、-fvpt、-funroll-loops、-fpeel-loops和-ftrace

c++ - 在一组 27 个浮点值中选择中位数的最快代码 C/C++

这是众所周知的选择算法。见http://en.wikipedia.org/wiki/Selection_algorithm.我需要它来找到一组3x3x3体素值的中值。由于体积由十亿体素组成,并且算法是递归的,所以最好快一点。一般来说,可以预期值是比较接近的。迄今为止我尝试过的最快的已知算法使用快速排序分区函数。我想知道有没有更快的。我已经“发明”了一个使用两个堆的快20%的堆,但预期使用散列的一个更快。在实现此之前,我想知道是否已经存在Blitz快速解决方案。我使用float这一事实并不重要,因为在反转符号位后它们可以被视为无符号整数。订单将被保留。编辑:基准和源代码按照建议移到单独的