草庐IT

OPTIMIZATION

全部标签

C++ 和 Haskell 代码在不同机器上的执行时间不同

我想问你是什么导致了这种差异。如果我编译以下程序并运行相同的二进制文件——在某些平台上,由C++代码生成的二进制文件比Haskell代码生成的二进制文件快得多,而在其他平台上,情况正好相反。此外,根据构建平台的不同,最终二进制文件的性能也有很大差异。(每个平台使用相同的标志和相同版本的LVM和clang)代码经过优化,应该具有相似的性能-请参阅:CanHaskelloptimizefunctioncallsthesamewayClang/GCCdoes?.我想问问你,怎么可能。C++代码:#include#includeintb(constintx){returnx+5;}intc(c

c++ - 什么是 C++ 优化和 Visual Studio 中的整个程序优化

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。本质上,我想知道什么是c++优化(/O)和全程序优化(/GL)。希望得到深入的解释。谢谢

c++ - 避免调用 floor()

我正在编写一段代码,我需要处理不一定在0到1范围内的uvs(2D纹理坐标)。例如,有时我会得到一个u分量为1.2的uv。为了处理这个问题,我正在实现一个包装,它通过执行以下操作导致平铺:u-=floor(u)v-=floor(v)这样做会使1.2变为0.2,这是期望的结果。它还处理负面情况,例如-0.4变为0.6。但是,这些对floor的调用相当慢。我已经使用IntelVTune分析了我的应用程序,我花费了大量的周期来完成这个底层操作。在对这个问题做了一些背景阅读后,我想出了以下函数,它速度更快但仍有很多不足之处(我仍然会受到类型转换的惩罚,等等)。intinlinefasterflo

c++ - 是不是更喜欢预增量而不是后增量?

过去首选预增量,因为类上的重载后增量需要返回表示增量前对象状态的临时拷贝。这似乎不再是一个严重的问题(只要内联到位),因为我的旧C++编译器(GCC4.4.7)似乎将以下两个函数优化为相同的代码:classInt{//...public:Int(intx=0);Int&operator++();Intoperator++(int){Intx(*this);++*this;returnx;}};Int&test_pre(Int&a){++a;returna;}Int&test_post(Int&a){a++;returna;}这两个函数的最终程序集是:.cfi_startproc.cfi

c++ - 优化 C++ 代码(使用 UnorderedMap 和 Vector)

我正在尝试优化花费很长时间的C++代码的某些部分(对于X量的数据,代码的以下部分大约需要19秒,我试图在不到5秒内完成整个过程相同数据量的秒数——基于我拥有的一些基准)。我有一个函数“添加”,我在这里编写并复制了代码。我将尝试尽可能多地解释我认为理解代码所需的内容。如果我错过了什么,请告诉我。以下函数add被调用X次,用于X量的数据条目。voidHashTable::add(PointObjectvector)//PointObjectisauser-definedobject{intcombinedHash=hash(vector);//thefunction"hash"takesl

c++ - C++中的多线程图像处理

我正在开发一个处理不同尺寸图像的程序。许多这些操作从输入读取像素数据并写入单独的输出(例如模糊)。这是在每个像素的基础上完成的。这种图像映射对CPU的压力很大。我想使用多线程来加快速度。我该怎么做?我正在考虑为每行像素创建一个线程。我有几个要求:可执行文件的大小必须最小化。换句话说,我不能使用大量的库。用于C/C++的最轻量级、可移植的线程库是什么?可执行文件的大小必须最小化。我正在考虑有一个函数forEachRow(fp*),它为每一行运行一个线程,甚至是一个forEachPixel(fp*),其中fp在它自己的线程中对单个像素进行操作。哪个最好?我应该使用普通函数或仿函数或函数或某

c++ - 查看固定长度数组之间有多少字节相等的最快方法

我有2个包含16个元素(字符)的数组,我需要“比较”它们并查看两者之间有多少元素相等。这个例程将被使用数百万次(通常运行大约60或7000万次),所以我需要它尽可能快。我正在研究C++(C++Builder2007,备案)现在,我有一个简单的:matches+=array1[0]==array2[0];重复16次(因为性能分析似乎比使用for循环快30%)有没有其他方法可以更快地工作?关于环境和数据本身的一些数据:我使用的是C++Builder,它没有任何速度优化需要考虑。我最终会尝试使用另一个编译器,但现在我只能使用这个。大多数时候数据会有所不同。100%相等的数据通常非常非常少(可

c++ - GCC/进行构建时间优化

我们有使用gcc和make文件的项目。项目还包含一个大子项目(SDK)和许多使用该SDK和一些共享框架的相对较小的子项目。我们使用预编译的头文件,但这只会让重新编译变得更快。是否有任何已知的技术和工具可以帮助构建时优化?或者,也许您知道一些关于此主题或相关主题的文章/资源? 最佳答案 您可以从两个方面解决问题:重构代码以降低编译器看到的复杂性,或者加快编译器的执行速度。在不接触代码的情况下,您可以向其中添加更多的编译功能。使用ccache避免重新编译您已经编译过的文件,使用distcc将构建时间分配给更多机器。如果您在本地编译,请使

c++ - 强制编译器不优化无副作用的语句

我正在阅读一些旧的游戏编程书籍,正如你们中的一些人可能知道的那样,在那个年代,做一些小技巧通常比以标准方式做事要快。(将float转换为int,屏蔽符号位,转换回绝对值,而不是仅仅调用fabs(),例如)现在几乎总是使用标准库数学函数更好,因为这些微小的东西无论如何都不是大多数瓶颈的原因。但我还是想做个比较,只是出于好奇。所以我想确保在我分析时,我不会得到有偏差的结果。因此,我想确保编译器不会优化没有副作用的语句,例如:voidfloat_to_int(floatf){inti=static_cast(f);//hasnoside-effects}有没有办法做到这一点?据我所知,执行i

windows - 如何在 Windows 上使用 jpegtran 批量转换 JPEG 图像

是否可以在Windows上使用jpegtran批量转换JPEG图像文件夹?我通常对一个文件使用以下命令,但我不确定如何将它应用于JPEG文件的整个目录:jpegtran-copynone-optimizea.jpgb.jpg谢谢。 最佳答案 下载jpegtran将jpegtran.exe放在C:/ProgramFiles/ImageOptimization中(如果不存在则创建该文件夹)。打开您的文本编辑器,然后复制并粘贴下面的代码。保存为optimize.bat,然后将文件放在C:/ProgramFiles/ImageOptimiz