Tag: 优化

禁用g ++的返回值优化

我需要在命令行上使用哪些标志来禁用g ++编译器自动启用的返回值优化?

计算例程的速度?

什么是确定处理例程花费多长时间的最好和最准确的方法,例如函数过程? 我问,因为我目前正在试图优化我的应用程序中的几个function,当我testing的变化很难确定只是通过看它,如果有任何改进。 所以,如果我能够返回一个准确的或接近准确的时间来处理一个例程,那么对代码的更改做得如何,我会有一个更清晰的认识。 我考虑过使用GetTickCount,但我不确定这是否接近准确? 有一个可重用的函数/过程来计算一个例程的时间是非常有用的,并使用如下所示: // < prepare for calcuation of code … ExecuteSomeCode; // < code to test … // < stop calcuating code and return time it took to process 我期待听到一些build议。 谢谢。 克雷格。

分支感知编程

我正在阅读这个分支,错误预测可能是应用程序性能的一个热点瓶颈。 正如我所看到的,人们通常会显示汇编代码,揭示了这个问题,并指出程序员通常可以预测分支可以走多远的时间,避免分支错误预测。 我的问题是: 1-是否可以避免使用一些高级编程技术(即没有汇编 )的分支预测错误? 2-我应该记住用高级编程语言(我主要对C和C ++感兴趣)生成支持分支的代码? 代码示例和基准值得欢迎!

为什么通过一个数组迭代更快,然后转发

给定这个代码 var arr = []; for (var i = 0; i < 10000; ++i) { arr.push(1); } 前锋 for (var i = 0; i < arr.length; ++i) {; } 向后 for (var i = arr.length – 1; i >= 0; –i) {; } 硬编码转发 for (var i = 0; i < 10000; ++i) {; } […]

使用静态Regex.IsMatch vs创build正则expression式的一个实例

在C#中你应该有这样的代码: public static string importantRegex = "magic!"; public void F1(){ //code if(Regex.IsMatch(importantRegex)){ //codez in here. } //more code } public void main(){ F1(); /* some stuff happens…… */ F1(); } 还是应该坚持一个包含重要模式的正则expression式的实例呢? 使用Regex.IsMatch的成本是多less? 我想在每个正则expression式中都有一个NFA。 从我的理解来看,这个NFA的创造并不是微不足道的。

GCC别名检查瓦特/限制指针

考虑以下两个片段: #define ALIGN_BYTES 32 #define ASSUME_ALIGNED(x) x = __builtin_assume_aligned(x, ALIGN_BYTES) void fn0(const float *restrict a0, const float *restrict a1, float *restrict b, int n) { ASSUME_ALIGNED(a0); ASSUME_ALIGNED(a1); ASSUME_ALIGNED(b); for (int i = 0; i < n; ++i) b[i] = a0[i] + a1[i]; } void fn1(const float *restrict *restrict a, float *restrict b, int n) { […]

最快的方法来sorting在JavaScript中的32位有符号整数数组?

_radixSort_0 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; /* RADIX SORT Use 256 bins Use shadow array – Get counts – Transform counts to pointers – Sort from LSB – MSB */ function radixSort(intArr) { var cpy = new Int32Array(intArr.length); var c4 = [].concat(_radixSort_0); var […]

位图性能优化模式

我发现了几种优化WPF中的位图处理的模式。 但是,我不知道何时使用每种模式。 正如我认为这是一个普遍的问题,我总结了我的理解和我的猜想,并寻求你的帮助。 如果你可以添加模式 ,解释它们的不同之处 ,说明它们是使用CPU还是使用GPU ,以及什么时候使用它们以及如何合并它们 ,那将会是一个巨大的帮助! 上下文 – 图片“网格”场景: 我的应用程序必须显示许多位图图像。 图像显示在屏幕上的行和列网格组织(不一定是网格或UniformGrid类,认为窗口媒体播放器的相册视图)。 图像可能会在不同的网格单元之间移 任意单元格中的一些图像可能被其他单元replace。 图像应该是可点击的,应该提供一个上下文菜单,应该是可select的,可拖拽的等等。换句话说,“将小编辑器合并成一个大的位图”是不适用的,至less不是天真的。 模式0:黑客 把这些小杂烩混合成一个位图(如何绘制上下文?),并将其作为背景。 覆盖这与图像与空的内容,将处理命中,上下文菜单,事件等 优点是我们只在这里讲两个位图:当前显示的和应该replace的位图。 这应该是非常快的。 但是,我多年的经验提高了危险的红旗。 你的评论? 模式1:缩小图像大小 当你事先知道要调整的图像大小,以及当你准备失去performance的细节(颜色)时,这是一个不容小觑的过程: 使用BitmapImage.DecodePixelWidth减小位图大小 使用FormatConvertedBitmap.DestinationFormat减less颜色信息 将控件的缩放行为设置Image.Stretch设置为Stretch.None 将图像的SetBitmapScalingMode设置为LowQuality。 冻结bug子手 在这里看代码。 模式2:背景预取 当您认为您可以利用用户凝视屏幕上的图像并准备好接下来要显示的图像时,此模式适用。 除了内存开销之外,项目的缺点是必须支持.Net Framework 4目标,而不仅仅是客户端configuration文件,因此可能会导致客户端上的安装。 你自己将不得不忍受asynchronous编程的痛苦。 在这种模式下,您可以创build所需数量的图像控件。 当需要添加,移动或删除位图时,只能修改图像控件的位图源。 BackgroundWorker任务负责预取BitmapSource(可能使用上面的“缩小图像大小”模式)并将其插入到MemoryCache中。 为此,您必须将BitmapImage的CacheOption设置为OnLoad,以便工作被卸载到后台工作者。 模式3:绘图上下文 这是Microsoft支持部门的Sheldon Ziao在MSDN WPF论坛上提出的build议。 请参阅Adam Nathan的WPF 4的第15章“2Dgraphics”中的494页,了解DrawingContext的描述。 我不能说我明白这一点。 根据这里的答案,我会认为这将改善处理几何图纸,而不是位图。 接下来,我不认为这将支持图像的焦点和事件要求(我不好意思,因为没有在论坛上更好地解释要求)而且,我担心这本书的总结性的句子:“请注意,使用DrawingContext不会改变您在保留模式系统中运行的事实。 指定的绘图不会立即发生; 这些命令被WPF所保留,直到需要为止。“这意味着,一旦我们的处理程序重新开始,我们就不能像”后台预取“那样利用并行性。 模式4:可写位图 这里的MSDN文档将其描述为双缓冲系统:您的UI线程更新缓冲区; […]

Python优化(-O或PYTHONOPTIMIZE)是做什么的?

文档只是说,Python解释器执行“基本优化”,而不会涉及任何细节。 显然,它是依赖于实现的,但有什么方法可以让我们了解哪些types的东西可以优化,以及可以产生多less运行时间节省? 使用-O有什么不好的地方吗? 我所知道的唯一的事情就是-O禁用assert ,但是大概不应该使用assert来表示在生产中可能会出错的东西。

知道C实际上会伤害你在高级语言中编写的代码吗?

这个问题似乎已经解决,甚至被打死了。 聪明的人在这个问题上说了很多聪明的事情 。 要成为一个非常好的程序员, 你需要知道C. 或者你呢? 这周我开了两次。 第一个让我意识到,我的假设并不比我背后的知识更进一步,考虑到我的机器上运行的软件的复杂性,这几乎是不存在的。 但真正把它带回家的是这个Slashdot的评论 : 最终的结果是,我注意到传统的C“裸机”程序员认为实现高级语言的许多天真的方式。 他们在他们影响的项目中做出了不好的“优化”决定,因为他们不知道编译器是如何工作的,或者他们所了解的天真的macros汇编器模型与良好的运行时系统有多大的不同。 然后它打击我:C只是一个抽象 ,像所有其他人一样。 即使CPU本身只是一个抽象! 我从来没有看到过这个问题,因为我没有工具去衡量它。 我很困惑。 Dijkstra对BASIC的评论是否让我的思想残缺不堪? 我是否处于不成熟的优化状态? 有没有希望我,现在我意识到我什么都不知道? 有什么可以知道的,甚至? 那么为什么这么迷人,我过去五年写的所有内容都可能是根本错误的? 总结一下:在知道API文档告诉我的时候有什么价值吗? 编辑:CW。 当然这也意味着现在你必须发布解释器/运行时优化的例子比我们更好:)