草庐IT

OPTIMIZATION

全部标签

c++ - 即使禁用了优化,Visual Studio 也会优化吗?

我正在研究移动和复制构造函数只是为了更多地了解它们,遇到了让我有点摸不着头脑的这个小怪事。基本上,我已经创建了一个类,其中覆盖了构造函数、析构函数、复制构造函数和移动构造函数,并且我正在以不同的方式构造它们以查看如何调用构造函数。我找到了一个调用订单,但它没有产生我期望的结果。请记住,我在这里完全禁用了优化,并且我正在VS2012中进行编译。在这种情况下内联是否仍然可行?这是我写的源代码。classRvalueTest{public:RvalueTest(){printf("CONSTRUCTOR\n");}RvalueTest(constRvalueTest&r){printf("C

c++ - 使用二维或一维,哪个最快?

我一直在网络(和stackoverflow)上搜索有关一维数组(或vector)是否比对应的二维数组更快的意见。一般的结论似乎是一维是最快的。然而,我自己写了一个简短的测试程序,结果表明二维是最好的。任何人都可以在我的测试中找到错误,或者至少解释为什么我得到这个结果吗?我用它来存储矩阵,因此需要对具有行和列的一维数组进行索引。#include#include#includeuint64_ttimestamp(){namespacesc=std::chrono;staticautostart=sc::high_resolution_clock::now();returnsc::durat

c++ - MASM 使用 VS 击败未优化的 .cpp 但不是未优化的 .c

我有一个非常简单的函数,它使用行主矩阵(float**)转换vector(float*):intvector_by_matrix(float**m,float*v,float*out,intsize){inti,j;floattemp;if(!m||!v||!out)return-1;for(i=0;i代码最初是使用VisualStudio(2013)C++编译器编译为C++(x64);并且没有优化非常慢(该函数在运行期间被调用数百次/数千次并且系统的大小通常很大c.size=10000)。通过将优化设置为高(O2)并将浮点模式设置为快速,性能提升非常大(x20)。但是,我决定将文件转

c++ - 如何优化打印出两个整数中较大者和较小者之间的差异?

UVAProblemno.10055,HashmattheBraveWarrior,可能是那里最简单的问题。输入由一系列≤2^32的无符号整数对组成(因此强制使用64位整数……)对于每一对,任务是打印出较大整数和较小整数之间的差值。根据thestatistics,最快的解决方案运行时间低于0.01秒。然而,我解决这个问题的所有尝试通常都在0.02秒内运行,随机偏差可能为±0.01秒。我试过:#include#includeusingnamespacestd;intmain(){ios_base::sync_with_stdio(false);cin.tie(nullptr);uint_

c++ - 从二阶导数计算的曲线的 SIMD 优化

这个问题真的很让人好奇。我正在将一个例程转换为SIMD指令(我对SIMD编程还很陌生),并且在使用以下代码时遇到了麻烦://args:uint32_tphase_current;uint32_tphase_increment;uint32_tphase_increment_step;for(inti=0;i问题:假设USEFUL_FUNC有一个SIMD实现,我只是想计算一个正确的vectorphase_current对于处理,处理phase_current的正确方法是什么?依赖于其先前的值(value)?反过来,一个函数式编程fold-like实现将同样有用,因为我试图了解如何提升数据

c++ - 创建一个始终返回零但优化器不知道的函数

我想创建一个总是返回零的函数,但这个事实对优化器来说不应该是显而易见的,因此使用该值的后续计算不会由于“已知零”状态而不断消失。在没有链接时优化的情况下,这通常就像将其放入自己的编译单元一样简单:intzero(){return0;}优化器无法跨单元查看,因此不会发现此函数的始终为零的性质。但是,我需要一些可以与LTO一起使用的东西,以及尽可能多的future可能的智能优化。我考虑过从全局阅读:intx;intzero(){returnx;}...但在我看来,一个足够聪明的编译器可能会注意到x从未被写入并且仍然决定zero()始终为零。我考虑过使用volatile,例如:intzero

c++ - 如何优化这段代码?

Profiler表示总时间的50%花费在这个函数中。你会如何优化它?它将BMP配色方案转换为YUV。谢谢!更新:平台为ARMV6(为iPhone编写)#defineY_FROM_RGB(_r_,_g_,_b_)((66*_b_+129*_g_+25*_r_+128)>>8)+16#defineV_FROM_RGB(_r_,_g_,_b_)((112*_b_-94*_g_-18*_r_+128)>>10)+128#defineU_FROM_RGB(_r_,_g_,_b_)((-38*_b_-74*_g_+112*_r_+128)>>10)+128/*!*\brief*Converts24

c++ - 需要缓存友好的数据结构来将字母的邻居存储在二维数组中

假设以下是我们正在操作的二维数组abcdefghijklmnop“f”的周围邻居是[abcegijk]。我正在尝试创建一个缓存友好的数据结构来存储节点的邻居。现在我有这样的东西structNeighbor{size_tneighborPosition[8][2];size_tsize;};typedefsize_tPosition[2];typedefNeighbor**NeighborTable;请注意,一个节点最多可以有8个邻居。有人有什么建议吗?我需要该结构是一个恒定时间的邻居查找,所以我将预先计算每个节点的邻居。 最佳答案

c++ - C++ 优化级别是否影响 Swig Python 模块性能

我有一个大型SwigPython模块。C++包装器最终大约有320,000LoC(我猜包括标题)。我目前使用-O1编译它,g++生成一个大小为44MiB的二进制文件,编译它大约需要3分钟。如果我关闭优化(-O0),二进制文件大小为40MiB,编译需要44秒。使用-O0编译包装器是否会显着损害python模块的性能?在我分析模块在不同优化级别下的性能之前,是否有人做过此类分析或了解它是否重要? 最佳答案 -O0停用gcc执行的所有优化。优化很重要。因此,如果您对您的应用程序了解不多,我可以建议这会损害您的应用程序的性能。通常可以安全使

c++ - 将 vector 更改为数组会使我的程序变慢

我分析了我的一个程序,发现热点是levenshtein_distance,递归调用。我决定尝试优化它。lvh_distancelevenshtein_distance(conststd::string&s1,conststd::string&s2){constsize_tlen1=s1.size(),len2=s2.size();std::vectorcol(len2+1),prevCol(len2+1);constsize_tprevColSize=prevCol.size();for(unsignedinti=0;i(s1i!=s2[j])));}col.swap(prevCol)