草庐IT

OPTIMIZATION

全部标签

c++ - float 组的更快 abs-max

我需要实时绘制音频的峰值表。每秒最少44100个样本乘以最少40个流。每个缓冲区包含64到1024个样本。我需要从每个缓冲区中获取absmax。(然后这些通过一种低通滤波器馈送并以大约20毫秒的间隔绘制。)for(inti=0;i我现在就是这样做的。我想做得更快。缓冲器在-1到1范围内float,因此是晶圆厂。问题,是否有一些棘手的comp-sciquicksort-esque方法可以更快地完成此操作?否则,float的无分支ABS和MAX函数是否存在?编辑:主要平台是Linux/gcc,但计划了一个Windows端口(可能与mingw一起)。编辑,第二个:我接受了onebyone因为

c++ - 优化 C++11 随机生成器的使用

我正在大量使用随机数编写物理模拟代码,我只是第一次分析我的代码,所以我在读取输出时可能有误,但我看到这一行排在第一位:%cumulativeselfselftotaltimesecondssecondscallsms/callms/callname90.0921.8821.882655360.080.08std::mersenne_twister_engine::operator()()这似乎意味着生成数字生成器花费了90%的时间。我之前已经写过一篇文章询问是否在每个循环中不构建随机概率分布可以节省我的时间但是在尝试和计时之后它没有帮助(Isdefiningaprobabilitydi

c++ - 优化稳定的恒定时间数组比较

(注意:“恒定时间”是指当其中一个输入固定时机器周期的数量是恒定的,而不是O(1)。这是该术语在密码学上下文中的标准含义。)将一个固定值与一个相同大小的未知值进行比较的最常见方法是使用XOR循环:boolcompare(constchar*fixed,constchar*unknown,size_tn){charc=0;for(size_ti=0;iGCC4.6.3和CLANG3.0不会在AMD64上短路此循环,即使在-O3时也是如此(我检查了生成的机器代码)。但是,我不知道C标准中有什么会阻止一些聪明的编译器识别如果c永远不为零,那么该函数只能返回false.如果您愿意接受较大的性能

c++ - SSE 优化的 64 位整数模拟

对于我正在从事的业余项目,我需要在x86CPU上模拟某些64位整数运算,并且它需要快速。目前,我正在通过MMX指令执行此操作,但这真的很麻烦,因为我必须一直刷新fp寄存器状态(并且因为大多数MMX指令处理已签名整数,我需要无符号行为)。所以我想知道SO上的SSE/优化专家是否可以使用SSE提出更好的实现。我需要的操作如下(非常具体):uint64_tX,Y;X=0;X=1;XY;具体来说,我不需要通用的加法或移位,比如只加一个,左移一个。真的,只是此处显示的精确操作。当然,在x86上除外,uint64_t通过使用两个32位标量来模拟,这很慢(而且,在我的例子中,根本不起作用,因为我需要

机器人控制算法—TEB算法文献阅读Integrated online trajectory planning and optimization in distinctive topologies

论文题目:Integratedonlinetrajectoryplanningandoptimizationindistinctivetopologies独特的集成在线轨迹规划和优化拓扑摘要:本文提出了一种新的基于拓扑特征的移动机器人轨迹在线优化的集成方法。在线轨迹优化通过最小化路径长度、过渡时间或控制工作量等目标,使全局规划器生成的初始粗略路径变形。移动机器人的运动学运动特性和与障碍物的间隙对轨迹优化施加了额外的等式和不等式约束。当地规划者通过仅将搜索空间限制为局部最优解来考虑效率。然而,目标函数通常是非凸的,因为障碍物的存在会产生多个不同的局部最优。所提出的方法保持并同时优化不同拓扑的可容

c++ - 为空间优化 tribools 数组

让我从一些背景开始:对于“tribool”,我理解的变量可以包含以下值之一:true、false或null。有问题Copyingarrayofintsvspointerstobools,OP希望拥有尽可能小的tribools数组(或多或少)。有了“一点点”最基本的bit-fu,我想出了一个解决方案,每个tribool使用2位,并允许以16字节存储OP的64tribool数组,这没问题。我使用的tribool机制很简单,例如:booleanA表示“nullornotnull”,booleanB表示“如果不为空则为真或假”。但后来我想...“位”的算法定义是:Abitistheamount

c++ - SSE 比 FPU 慢?

我有一大段代码,其中一部分包含这段代码:result=(nx*m_Lx+ny*m_Ly+m_Lz)/sqrt(nx*nx+ny*ny+1);我已经对其进行了如下矢量化处理(一切都已经是一个float):__m128r=_mm_mul_ps(_mm_set_ps(ny,nx,ny,nx),_mm_set_ps(ny,nx,m_Ly,m_Lx));__declspec(align(16))intasInt[4]={_mm_extract_ps(r,0),_mm_extract_ps(r,1),_mm_extract_ps(r,2),_mm_extract_ps(r,3)};float(&r

c++ - 编码 : Premature Optimization or not? 时考虑内存碎片

我正在开发一个使用C++编写的大型服务器应用程序。该服务器可能需要运行数月而不重新启动。碎片在这里已经是一个可疑的问题,因为我们的内存消耗会随着时间的推移而增加。到目前为止,测量是将私有(private)字节与虚拟字节进行比较,并分析这两个数字的差异。我处理碎片化的一般方法是留待分析。我对一般性能和内存优化等其他事情也有同样的思考方式。您必须用分析和证明来支持更改。我在代码审查或讨论期间注意到很多,内存碎片是最先出现的事情之一。几乎就像现在对它产生了巨大的恐惧,并且有一个提前“防止碎片化”的大倡议。请求的代码更改似乎有利于减少或防止内存碎片问题。我倾向于立即不同意这些,因为它们对我来说

c++ - C++ 库中的快速梯度下降实现?

我正在寻找运行梯度下降优化来最小化变量实例化的成本。我的程序在计算上非常昂贵,所以我正在寻找一个可以快速实现GD的流行库。推荐的图书馆/引用资料是什么? 最佳答案 GSL是一个很棒的(免费的)库,已经实现了数学和科学兴趣的常见功能。您可以仔细阅读整个referencemanualonline.四处寻找,this开始看起来很有趣,但我认为我们需要更多地了解这个问题。 关于c++-C++库中的快速梯度下降实现?,我们在StackOverflow上找到一个类似的问题:

传递参数的 C++ 编译器优化

我正在使用可以在运行时启用/禁用报告的日志记录模块。调用通常是这样的:WARN("DangerWillRobinson!Thereare"+boost::lexical_cast(minutes)+"minutesofoxygenleft!");我正在为WARN使用内联函数,但我很好奇在幕后进行了多少优化——在整个程序中评估参数的成本很高。WARN函数是这样的:boolWARNINGS_ENABLED=false;inlinevoidWARN(conststring&message){if(!WARNINGS_ENABLED){return;}//...}鉴于构造字符串参数没有副作用,