草庐IT

OPTIMIZATION

全部标签

c++ - Visual Studio 还能优化预编译代码吗?

好的,解释我的问题的最好方法是通过2个示例:示例1:您已经为自己创建了一个名为MyLibrary的框架或引擎,并且您构建的是一个具有最大优化选项的.lib。现在您包括标题并链接.lib在一个名为MyImplementation的新项目中。该项目使用了MyLibrary的大部分功能,完成后,您将构建该项目(再次进行最大优化)。示例2:您再次拥有相同的库,但不是构建它,而是让它开源。然后您创建相同的MyProject,包含标题并以最大优化构建MyProject已启用。那么,示例2会运行得更快吗,因为编译器可以访问整个源代码(框架/引擎+您在其中使用它的项目)?

java - cpu的矩阵访问和乘法优化

我正在用java(在JNI的帮助下)制作一些内在优化的矩阵包装器。需要确认这一点,你能给出一些关于矩阵优化的提示吗?我要实现的是:矩阵可以表示为四组缓冲区/数组,一组用于水平访问,一组用于垂直访问,一组用于对角线访问和一个命令缓冲区,仅在需要时计算矩阵元素。这是一个例子。Matrixsignature:0123456789133529First(hroizontal)set:horSet[0]={0,1,2,3}horSet[1]={4,5,6,7}horSet[2]={8,9,1,3}horSet[3]={3,5,2,9}Second(vertical)set:verSet[0]={

c++ - 阻止编译器优化的多态性示例?

不记得我现在在哪里看到它-但我在某处读到动态多态性阻止编译器进行各种优化。除了内联之外,有人可以用多态性阻止编译器进行的此类“错过”优化机会的任何示例来启发我吗? 最佳答案 与:Derivedd;d.vMethod();//thatwillcallDerived::vMethodstatically(allowinginlining).使用(除非Derived或Derived::vMethod之一在C++11中被声明为final):voidfoo(Derived&d){d.vMethod();//thiswillcallvirtua

c++ - 避免在数字 C++ 中调用虚函数

我正在用C++编写一些数值模拟代码。在这个模拟中,有些东西是“局部的”,在二维网格上的每个点都有一个浮点值,而另一些是“全局的”,只有一个全局浮点值。除了这种差异之外,两种类型的对象的行为相似,因此我希望能够拥有一个包含两种类型对象的数组。然而,因为这是一个数值模拟,我需要以一种方式来做到这一点:(a)尽可能避免虚函数调用开销,并且(b)允许编译器尽可能多地使用优化-特别是,允许编译器在可能的情况下进行SIMD自动矢量化。目前我发现自己正在编写这样的代码(我现在意识到,它实际上不会按预期工作):classBase{};classLocal:publicBase{public:float

c++ - 将位解压缩为单精度 float 的最快方法

这是特定于平台的问题。速度至关重要。将一个字节解包到一个由8个单精度float组成的数组中以便零映射到零和一映射到一的最快方法是什么?我最终使用8位掩码和7位移位解压缩为8个int32,然后使用AVX指令将int32转换为float。我的平台是在支持AVX(但没有AVX2)的CPU上运行的Windows64位。编译器:VisualStudio2013。谢谢。 最佳答案 预处理不是更快吗?2^8的可能性已经差不多了,不过话又说回来,把它分成两部分,它只有2^4=16个变量。使数组包含16个“值”,其中每个值都是用4个具有正确值的flo

c++ - 优化项目冲销

我有一个循环来反转数组中的元素。我已将问题简化并减少为以下内容:for(intx=0;x此代码反转元素,但速度相当慢。一方面,它不能自动矢量化,因为数组访问是不连续的。另一方面,右侧的访问与理想的缓存遍历相反。最后,可能存在一些停顿,因为下一个循环周期的加载不会在最后一个循环的数据提交之前发生,因为编译器可能无法判断自别名指针从未命中自身。在我的例子中,sizeof(type_copy)要么是4*sizeof(uint8_t)=4要么是4*sizeof(float)=4*4=16。因此,请注意字节级反转是NotAcceptable。我的问题是:如何优化这段代码,如果可以的话?

c++ - C++中void函数的重复计时

我正在尝试为void函数计时for(size_tround=0;round第一个计时产生300秒,而接下来的四个计时产生0.000002秒。这表明对assign_clusters的void函数调用已被优化。我怎样才能强制我的程序每次都执行这个耗时的函数调用,同时仍然对其余代码进行优化?我通常做的是保存相关函数的结果然后打印它,但由于这是一个void函数,我是否有相同的选项?我使用以下优化标志:-std=c++0x-march=native-O2 最佳答案 这取决于需要花时间进行修复。这可能是由于:-加载服务。您的集群可能是基于数据库

c++ - 是否有任何理由不将 assert() 包装在解析为 gcc 中的 __builtin_unreachable() 的宏中?

上下文:在这个answer,我了解到gcc的__builtin_unreachable()可能会对性能产生一些令人惊讶的影响,因为看起来如下:if(condition)__builtin_unreachable();被完全剥离,用作优化提示,只要condition可以保证没有任何副作用。所以我对此的直接react是我应该创建以下宏,并且绝对在我通常使用assert()的所有地方使用它,因为在assert中会产生副作用()首先会是一个主要错误://TODO:addhandlingofothercompilersasappropriate.#ifdefined(__GNUC__)&&def

c++ - 如何优化我的截屏实用程序?

我正在用C++开发截屏实用程序。它基本上捕获桌面帧并创建一个AVI文件。算法如下:创建线程:this->m_hThread=CreateThread(NULL,0,thScreenCapture,this,0,NULL);每秒在thScreenCapture中捕获桌面n次(例如5fps)。obj->Capture();在Capture()中,将位图数据附加到avi文件。this->appendBitmapToAvi(this->avifile,bmp);此实用程序还可以录制声音。因此,在thScreenCapture方法中,声音数据也被附加到avi文件中。问题是当每秒捕获超过6帧(这可

c++ - 将类型解析为 class::typedef 的更短方法

我有几个类(class)。现在它们被一个符号隔开。其中很少包含type(typedef),也很少没有。structA{...public:typedefsomeclasstype;}structB{...};我想实现一个SFINAE以这样的方式上课,Resolve::typeo1;//shouldresolveto'A::type'Resolve::typeo2;//shouldresolveto'B'一种方法是使用上一个链接中所示的基本SFINAE,它检查T是否包含type,然后使用bool检查器.例如,templatestructhas_type{typedefcharyes[3]