Tag: 性能

我如何确定最快的链接顺序?

我有大约50个不同的静态库被链接到我的C + +项目和链接平均需要70年代。 我发现这次更改库的链接顺序。 如果链接器不需要在整个符号表中search一组符号,就可以预计到这一点。 我想我可以使用“nm”来获得静态库之间的依赖关系图。 但是,这只会给我一个“正确的”链接顺序。 获得最快链接顺序的因素是什么? 我觉得这将与上述依赖关系图有关,通过获得一个遍历,试图尽量减less一些数量,但我真的不知道是哪一个。 任何帮助,将不胜感激。 我现在主要是使用intel编译器和gcc编译器。 当我用top检查它们时,它们似乎都在使用GNU ld链接器。 希望这可以帮助… 所以为了澄清一下我想要问的东西,我已经知道如何从一组静态库中获得一个1遍的顺序。 我自己写了这个脚本,但是根据Olaf的回答,下面有这样的着名工具。 我的问题是,我已经有两个单程链接sorting,其中一个在〜85s内运行,另一个在〜70s内运行。 很明显,我们在1阶命令中还可以做更多的优化。

为什么memcpy()的速度每4KB急剧下降?

我testing了memcpy()的速度,注意到速度在i * 4KB下急剧下降。 结果如下:Y轴是速度(MB /秒),X轴是memcpy()的缓冲区大小,从1KB增加到2MB。 图2和图3详细描述了1KB-150KB和1KB-32KB的部分。 环境: CPU:Intel(R)Xeon(R)CPU E5620 @ 2.40GHz OS:2.6.35-22-generic#33-Ubuntu GCC编译器标志:-O3 -msse4 -DINTEL_SSE4 -Wall -std = c99 我想它必须与高速caching相关,但是我无法从以下高速caching不友好的情况中find原因: 为什么我的程序在循环8192个元素时变慢? 为什么转置512×512的matrix要比转置513×513的matrix慢得多? 由于这两种情况的性能下降是由不友好的循环引起的,这些循环将零散的字节读入高速caching,浪费了高速caching行的剩余空间。 这是我的代码: void memcpy_speed(unsigned long buf_size, unsigned long iters){ struct timeval start, end; unsigned char * pbuff_1; unsigned char * pbuff_2; pbuff_1 = malloc(buf_size); pbuff_2 = malloc(buf_size); gettimeofday(&start, NULL); for(int i = 0; […]

C代码循环性能

我的应用程序中有一个乘加内核,我想提高它的性能。 我使用Intel Core i7-960(3.2 GHz时钟),并已经使用SSE内部函数手动实现了内核,如下所示: for(int i=0; i<iterations; i+=4) { y1 = _mm_set_ss(output[i]); y2 = _mm_set_ss(output[i+1]); y3 = _mm_set_ss(output[i+2]); y4 = _mm_set_ss(output[i+3]); for(k=0; k<ksize; k++){ for(l=0; l<ksize; l++){ w = _mm_set_ss(weight[i+k+l]); x1 = _mm_set_ss(input[i+k+l]); y1 = _mm_add_ss(y1,_mm_mul_ss(w,x1)); … x4 = _mm_set_ss(input[i+k+l+3]); y4 = _mm_add_ss(y4,_mm_mul_ss(w,x4)); } } _mm_store_ss(&output[i],y1); _mm_store_ss(&output[i+1],y2); _mm_store_ss(&output[i+2],y3); _mm_store_ss(&output[i+3],y4); } 我知道我可以使用打包的fp向量来提高性能,而且我已经成功地做到了这一点,但是我想知道为什么单个标量代码无法满足处理器的峰值性能。 这个内核在我的机器上的性能是每个周期约1.6个FP操作,而每个周期最多可以有2个FP操作(因为FP + FP […]

数据属性的CSSselect器比类select器更快吗?

几个月前这篇文章指出,网站开发实际上可以避免所有的类。 我的问题是,数据select器与类select器相比有多高效? 一个简单的例子就是比较元素与data-component='something'与元素class='class1 class2 something anotherClass' 。 [data-<attr>='<value>']select器将检查整个值与应该分割的类string。 考虑到这一点,数据属性应该更快。 所以,为了改进这个问题,在CSS的情况下,我们最好使用类select器还是数据select器? 从javascript的angular度来看, jQuery("[data-component='something']")比jQuery(".something")更有效率吗?

iOS – 如何预加载键盘?

问题 在大多数iPhone应用程序中,第一次出现键盘时会有相当多的延迟(大概创build键盘需要相当多的时间,即使在iPhone 4上也是如此)。 大多数人似乎可以这样做。 我不是,它真的让我感到困惑 – 而且我的应用程序呈现的方式,用户会非常困惑,第一次点击文本字段时没有任何反应。 我所试过的 谷歌search带来了一个解决scheme – 不幸的是,这是无效的iOS 4( 见这里 )。 我不希望这个解决scheme很容易find,如果我可以立刻给我一个奖励。 如果有人想出一个解决scheme,我会非常兴奋。 所有的解决scheme需要做的就是加载键盘,而用户不知道。 所以.. 任何想法都表示赞赏。 完整的工作代码(对于iOS 4和5)是值得的(即使赏金必须迟到!)。 如果find了一个解决scheme,我打算创build一个自包含的“KeyboardPreloader”类,用户可以将其放入项目中,并用一行代码预加载键盘:)

“函数调用很贵”与“保持函数很小”

一方面,我读到或听说“函数调用是昂贵的”,并且影响效率(例如, Nicholas Zakas的Google技术讲座 )。 但另一方面,似乎认为function/方法最好是保持简短,只能真正执行一项任务,正如在这里通常所接受的那样。 我在这里错过了些什么,或者这两条build议是否相互矛盾呢? 是否有一些经验法则可以让人们保持禅宗般的平衡?

最新的Dapper VS Entity Framework 6的性能考虑

Dapper之间有一些性能比较(似乎是最快,最受欢迎的“微型ORM工具”)。 现在是2014年9月,我们有Entity Framework 6(不是5或者4),而且Dapper还在。 我们将开始开发一个庞大的数据库n层应用程序(数据库有700个表)。 还有一些需要运行的查询是相当时间敏感的。 有没有人有任何关于EF 6.1.x的性能更新? 这涉及在DbContext中进行的一般查询。 我想我不能用Dapper使用格式良好的LINQ查询。 你有这方面的经验吗? 是否值得失去LINQ的额外速度? 小巧玲珑还在积极,不断发展吗? GitHub告诉我是的,但是与Subsonic一样,它可以相当快地改变。 把Dapper和EF混合起来是可行的还是可行的? 当我们需要速度时,小巧玲珑,否则EF。 谢谢!

高性能的JavaScript对象池?

我正在写一些JavaScript代码,需要运行速度快,并使用了很多短暂的对象。 我最好使用一个对象池,或只是创build对象,因为我需要他们? 我写了一个JSPerftesting ,这表明使用对象池没有任何好处,但是我不确定是否jsperf基准testing运行足够长的时间来浏览器的垃圾回收器。 代码是游戏的一部分,所以我不关心旧版浏览器的支持。 无论如何,我的graphics引擎不能在旧版浏览器上运行。

FSharp运行我的algorithm比Python慢

几年前,我通过dynamic编程解决了一个问题: https://www.thanassis.space/fillupDVD.html 该解决scheme是用Python编码的。 作为扩展我的视野的一部分,我最近开始学习OCaml / F#。 有什么更好的方法来testing水域,而不是通过直接移植我在Python中编写的命令代码到F#,然后从那里开始,逐步向function性编程解决scheme迈进。 这第一个直接港口的结果是令人不安的: 在Python下: bash$ time python fitToSize.py …. real 0m1.482s user 0m1.413s sys 0m0.067s 在FSharp下: bash$ time mono ./fitToSize.exe …. real 0m2.235s user 0m2.427s sys 0m0.063s (如果你注意到上面的“单声道”:我也在Windows下testing,与Visual Studio – 相同的速度)。 我很困惑,至less可以说。 Python比F#更快地运行代码? 使用.NET运行库的已编译二进制文件比Python的解释代码运行SLOWER?!?! 我知道VM的启动成本(在这种情况下是单声道),以及JIT如何改进像Python这样的语言的东西,但仍然…我期望加速,而不是放缓! 我可能做错了吗? 我已经在这里上传了代码: https://www.thanassis.space/fsharp.slower.than.python.tar.gz 请注意,F#代码或多或less是对Python代码的直接逐行转换。 PS当然还有其他的收益,例如F#提供的静态types安全性,但是如果F#下的命令式algorithm的结果速度更糟……我很失望,至less可以说。 编辑 :直接访问,在评论中的要求: Python代码: https : //gist.github.com/950697 FSharp代码: https : //gist.github.com/950699

fastcall真的更快吗?

快速调用约定是否比其他调用约定更快,如cdecl? 那里是否有任何基准显示如何通过调用约定来影响性能?