草庐IT

OPTIMIZATION

全部标签

c++ - 计算高效的 C++ - 一般阅读

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭10年前。我的工作主要是高性能“科学”计算。我已经这样做了大约15年了,但直到最近才意识到我的软件浪费了计算时间。简而言之:我编写高效C++代码的方法不再奏效了。我不时看到一段代码,由某个child编写,其计算与我的基本相同(相同的算法,类似的方法),但是-神奇!-执行得更快。在大多数情况下,我什至无法追踪差异的根源!我的问题是:我如何学习现代C++代码优化的艺术?也许是关于SSE、缓存/内存对齐问题的?

c++ - `using`的开销

对于我的问题,我可以通过两种方式使用using指令。他们基本上归结为这些选项:templatestructA{private://DefineourtypesusingWrapperType=Wrapper;public:U*operator()(U*g)const{//TODO:useWrapperType}};或:structB{templateU*operator()(U*g)const{//Definethetypeshereinstead.usingWrapperType=Wrapper;//TODO:useWrapperType}};在这两种情况下,都会有其他的类模板参数。

c++ - 如何使用 SSE 或 GLSL 优化 "u[0]*v[0] + u[2]*v[2]"代码行

我有以下功能(来自开源项目"recastnavigation"):///Derivesthedotproductoftwovectorsonthexz-plane.(@pu.@pv)///@param[in]uAvector[(x,y,z)]///@param[in]vAvector[(x,y,z)]///@returnThedotproductonthexz-plane.//////Thevectorsareprojectedontothexz-plane,sothey-valuesareignored.inlinefloatdtVdot2D(constfloat*u,constfl

c++ - 仅当某个编译时表达式为真时才尝试 {.... } catch(..)

这是我们正在努力做的try{std::uninitialized_copy(...);}catch(...){if(!boost::has_trivial_destructor::value){//somecleanuptodohere...}throw;}如果if中的编译时常量为假,我们想知道try/catch是否有成本。编译器能否在其“as-if”权限内删除trycatch并表现得好像std::uninitialized_copy调用出现时没有try围绕它?或者是否有隐藏在C++规范中的东西要求编译器将它留在这里?例如,想象一个假设的surrounding_try_blocks()

c++ - 值语义与具有大型数据结构的输出参数

2013Keynote:ChandlerCarruth:OptimizingtheEmergentStructuresofC++42:45您不需要输出参数,我们在C++中有值语义。...任何时候你看到有人争论说nonono我不会按值(value)返回,因为复制成本太高,从事优化器的人说他们错了。好的?我还从未见过该论点是正确的一段代码。...人们没有意识到值语义对优化器有多么重要,因为它完全阐明了别名场景。谁能把这个放在这个答案的上下文中:https://stackoverflow.com/a/14229152我听说不断重复,但是,对我来说,返回某些内容的函数是来源。输出参数通过引用从

c# - 性能瓶颈 - 使用 Visual Studio

我正在寻找一种方法来找到解决方案(很多项目)中的瓶颈方法。假设我有一个巨大的程序(1000多个方法),我想通过查找被调用很多(实际在运行时使用)的方法并优化它们来提高性能。我需要这个来解决用C++、C#、CLI/C++编写的复杂问题。(我可以在调试中编译它并拥有.pdb文件)因此,我正在寻找某种分析器来告诉我每种方法使用了多少CPU时间。我可以在VisualStudio中使用什么工具/插件/功能来获取该信息?我希望能够运行程序几分钟,然后分析方法的cpu使用情况。甚至更好-cpu数量/调用次数。如果我可以按namespace或dll/包/项目排序,那就更好了。

c++ - 是否已经有一些基于 std::vector 的集合/映射实现?

对于小型集合或映射,仅使用排序vector通常比基于树的set/map要快得多-特别是对于像5-10个元素。LLVM有一些类inthatspirit,但没有真正的适配器会提供类似std::map的接口(interface),并支持std::vector。有任何(免费)实现吗?编辑:感谢所有替代想法,但我对基于vector的集合/map非常感兴趣。我确实有一些特定的情况,我倾向于创建大量通常包含少于10个元素的集合/映射,而且我真的希望内存压力更小。例如,考虑三角形网格中顶点的相邻边,您很容易得到100k组,每组3-4个元素。 最佳答案

c++ - 是否允许编译器像带有 -O2 的英特尔 C++ 编译器那样删除无限循环?

以下测试代码在带有调试或发布的VS中以及在GCC中均正确执行。它也适用于带调试的ICC,但在启用优化(-O2)时不正确。#includeclasstClassA{public:intm_first,m_last;tClassA():m_first(0),m_last(0){}~tClassA(){}boolisEmpty()const{return(m_first==m_last);}voidupdateFirst(){m_first=m_first+1;}voidupdateLast(){m_last=m_last+1;}voiddoSomething(){printf("shoul

c++ - 在比较用 C++ 编写的两种不同算法时,您使用的优化级别 (g++) 是多少?

我有两个用C++编写的算法。据我所知,用编译是常规的-O0-NDEBUG(g++)同时比较两种算法的性能(渐近它们是相同的)。但我认为优化级别对其中之一不公平,因为它在所有情况下都使用STL。使用普通数组的程序在使用-O0选项编译时比STL-heavy算法快5倍。但是当我用-O2-NDEBUG编译它们时,性能差异并没有太大的不同。有什么方法可以在优化级别-O0下充分利用STL(我在vector[]运算符中的性能受到严重影响)?在比较两种算法时,您使用什么优化级别(可能还有-NDEBUG等变量)?如果有人能提供一些关于比较用C++编写的算法的性能的学术研究趋势的想法,也会有很大的帮助?好

c++ - gcc优化?漏洞?及其对项目的实际意义

我的问题分为三个部分问题一考虑下面的代码,#includeusingnamespacestd;intmain(intargc,char*argv[]){constintv=50;inti=0X7FFFFFFF;coutNospecificcompileroptimisationoptionsareusedortheO'sflagisused.Itisbasiccompilationcommandg++-otestmain.cppisusedtoformtheexecutable.看似非常简单的代码,在SUSE64位操作系统gcc4.1.2中有奇怪的行为。预期输出为“Numberisne