Tag: 优化

为什么代码会主动尝试阻止尾部呼叫优化?

这个问题的标题可能有点奇怪,但事实是,就我所知,根本就没有什么能说明跟尾部优化有关。 然而,在浏览开源项目时,我已经遇到了一些主动尝试阻止编译器进行尾部调用优化的函数,例如CFRunLoopRef的实现,它充满了这样的黑客攻击 。 例如: static void __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__() __attribute__((noinline)); static void __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__(CFRunLoopObserverCallBack func, CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *info) { if (func) { func(observer, activity, info); } getpid(); // thwart tail-call optimization } 我很想知道为什么这看起来如此重要,是否有任何情况下我作为​​一个正常的开发人员应该保持这种心态呢? 例如。 尾部呼叫优化有常见的缺陷吗?

减去/增加值,没有溢出或下溢

想象一下,我有两个无符号的字节b和x 。 我需要计算bsub作为b – x和badd作为b + x 。 但是,在这些操作过程中,我不想发生下溢/溢出。 例如(伪代码): b = 3; x = 5; bsub = b – x; // bsub must be 0, not 254 和 b = 250; x = 10; badd = b + x; // badd must be 255, not 4 明显的做法包括分支: bsub = b – min(b, x); badd […]

为什么GDB在行间跳转不可预知,并将variables打印为“<value optimized>”?

任何人都可以解释gdb的这种行为? 900 memset(&new_ckpt_info,'\0',sizeof(CKPT_INFO)); (gdb) **903 prev_offset = cp_node->offset;** (gdb) **905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb->shm_addr.ckpt_addr+sizeof(CKPT_** HDR),i_offset); (gdb) **903 prev_offset = cp_node->offset;** (gdb) **905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb->shm_addr.ckpt_addr+sizeof(CKPT_ HDR),i_offset);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);** (gdb) 913 […]

std :: map插入或std :: map查找?

假设您想要保存现有条目的地图。 20%的时间,你插入的条目是新的数据。 是否有利用做std :: map :: find然后std :: map :: insert使用返回的迭代器? 还是更快尝试插入,然后根据迭代器是否指示logging是否插入?

优化Kohana网站的速度和可扩展性

我和Kohana一起build造的一个地方昨天遭到了大量的交通,让我退后一步,评估一些devise。 我很好奇什么是一些优化Kohana应用程序的标准技术? 我也对基准感兴趣。 我是否需要为每个控制器方法设置Benchmark::start()和Benchmark::stop() ,以便查看所有页面的执行时间,还是能够快速地应用基准testing? 我会更及时地使用Cache-library,但是我可以提供更多的build议,因为我确信有很多我可以做的事情,目前我根本没有意识到。

通过最大可能性将系数估计到一个观星表中

Stargazer为lm(和其他)物品生产非常好的乳胶桌子。 假设我已经最大可能地拟合了一个模型。 我想要观星者为我的估计制作一个类似于lm的桌子。 我怎样才能做到这一点? 虽然这有点不好意思,但是有一种方法可能是创build一个包含我的估计的“虚假”lm对象 – 我认为只要summary(my.fake.lm.object)有效,就会工作。 这很容易做到吗? 一个例子: library(stargazer) N <- 200 df <- data.frame(x=runif(N, 0, 50)) df$y <- 10 + 2 * df$x + 4 * rt(N, 4) # True params plot(df$x, df$y) model1 <- lm(y ~ x, data=df) stargazer(model1, title="A Model") # I'd like to produce a similar table for the model […]

为什么操作员比方法调用慢得多? (结构只在较早的JIT上变慢)

简介:我用C#编写高性能的代码。 是的,我知道C ++会给我更好的优化,但我仍然select使用C#。 我不想辩论这个select。 相反,我想听听那些和我一样,试图在.NET Framework上编写高性能代码的人。 问题: 为什么下面的代码中的运算符比等效的方法调用慢? 为什么在下面的代码中传递两个双精度的方法比传递一个内部有两个双精度的结构的等价方法快呢? (答:老JITs优化结构不佳) 有没有办法让.NET JIT编译器像结构体的成员一样有效地对待简单结构体? (答:得到更新的JIT) 我想我知道:原始的.NET JIT编译器不会内联任何涉及结构的东西。 奇怪的给定的结构应该只用于你需要小的值types,应该像内置优化,但是真实的。 幸运的是,在.NET 3.5SP1和.NET 2.0SP2中,他们对JIT Optimizer进行了一些改进,包括对内联的改进,特别是对结构的改进。 (我猜他们是这样做的,否则他们所引入的新复杂结构将会执行非常糟糕的事情……所以复杂团队可能正在冲击JIT Optimizer团队。)因此,.NET 3.5 SP1之前的任何文档可能这个问题不太相关。 我的testing显示:我已经通过检查C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ mscorwks.dll文件是否具有> = 3053版本来validation我是否具有较新的JIT Optimizer,因此应该有这些改进到JIT优化器。 但是,即使如此,我的时间表和反汇编看起来都是: JIT生成的用于传递两个双精度结构的代码比直接传递两个双精度的代码效率低得多。 与传递结构作为参数相比,JIT为struct方法生成的代码传递“this”的效率要高得多。 如果你传递两个双打而不是传递一个带有两个双精度结构的JIT,则JIT仍然更好,即使乘法器由于清楚地处于一个循环中也是如此。 定时:实际上,在反汇编中,我意识到循环中的大部分时间只是从列表中访问testing数据。 如果将循环的开销代码和数据的访问分解出来,那么进行相同调用的四种方法之间的区别是显着不同的。 我可以从5倍到20倍的任何地方做PlusEqual(double,double)而不是PlusEqual(Element)。 和10倍到40倍做PlusEqual(double,double)而不是operator + =。 哇。 伤心。 以下是一组计时: Populating List<Element> took 320ms. The […]

如何使用prefetchPlugin&分析工具来优化webpack的构build时间?

以前的研究: 正如webpack的wiki所说,可以使用分析工具来优化构build性能: 来自: https : //github.com/webpack/docs/wiki/build-performance#hints-from-build-stats 来自构build统计的提示 有一个可视化你的构build的分析工具 ,也提供了一些提示如何优化构build大小和构build性能 。 您可以通过运行webpack –profile –json> stats.json来生成所需的JSON文件 我生成的统计文件( 在这里可用 )上传到webpack的分析工具 并在提示标签下,我告诉使用prefetchPlugin: 来自: http : //webpack.github.io/analyse/#hints 长模块构build链 使用预取增加构build性能。 从链的中间预取一个模块。 我在里面挖了一个网页,find在prefechPlugin上可用的唯一文档是这样的: 来自: https : //webpack.github.io/docs/list-of-plugins.html#prefetchplugin PrefetchPlugin new webpack.PrefetchPlugin([context], request) 对正常模块的请求,即使在需要之前也会parsing和构build。 这可以提高性能。 尝试首先分析构build,以确定聪明的预取点 。 我的问题: 如何正确使用prefetchPlugin? 分析工具中使用的正确工作stream程是什么? 我如何知道prefetchPlugin是否工作? 我怎么测量它? 从链的中间预取模块意味着什么? 我会很欣赏一些例子 请帮助我使这个问题成为下一个想要使用prefechPlugin和Analyze工具的开发人员的宝贵资源。 谢谢。

生产Web应用程序的每秒“平均”请求数是多less?

就“快”而言,我没有任何参照系。 我一直想知道,但从来没有find一个直接的答案…

哪个更好,数字(x)或parseFloat(x)?

哪个更好? 我问这只是为了削减几个字节,因为我可以使用+ x而不是数字(x)。 parsefloat做的更好吗? 编辑: 判决 – parseFloat。 即使使用+(x)可以节省几个字节,parseFloat也尽可能地从string/数字组合中进行回收。