Tag: 优化

打印所有JVM标志

find一个有趣的JVM标志: java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version 它打印数以百计的各种选项,我从来没有听说过。 它还打印默认值,这有助于更好地诊断JVM行为。 另一个有趣的标志是: -XX:+UnlockExperimentalVMOptions 有没有人知道解释每一个他们的任何文件?

为什么lambda可以比普通函数更好地被编译器优化?

在他的书The C++ Standard Library (Second Edition) Nicolai Josuttis指出,编译器比普通函数可以更好地优化lambdaexpression式。 另外,C ++编译器比普通函数更好地优化lambdaexpression式。 (页213) 这是为什么? 我认为当谈到内联时,应该没有任何区别了。 我能想到的唯一原因是编译器可能有一个更好的lambdaexpression式的本地环境,这样可以做更多的假设和执行更多的优化。

切换大小写typesC#

可能重复: C# – 有没有比这更好的替代“打开types”? 你好,假设我得到一个大的if / else类types。 有一种方法可以用开关盒来做到这一点? 例如: function test(object obj) { if(obj is WebControl) { }else if(obj is TextBox) { } else if(obj is ComboBox) { } 等等 我想创build类似的东西 switch(obj) { case is TextBox: break; case is ComboBox: break; } }

与SSE有效的4x4matrix向量乘法:水平添加和点积 – 有什么意义?

我试图find使用SSE与vector(u)进行4×4matrix(M)乘法运算的最有效的实现。 我的意思是Mu = v。 据我所知,有两个主要方法可以解决这个问题: method 1) v1 = dot(row1, u), v2 = dot(row2, u), v3 = dot(row3, u), v4 = dot(row4, u) method 2) v = u1 col1 + u2 col2 + u3 col3 + u4 col4. 方法2在SSE2中很容易实现。 方法一可以用SSE3中的水平加法指令或SSE4中的点积指令来实现。 但是,在我所有的testing中,方法2总是优于方法1。 一个地方,我虽然方法1将有一个优势是在一个3×4的matrix,例如仿射变换。 在这种情况下,最后一个点产品是不必要的。 但即使在这种情况下,4x4matrix上的方法2比3x4matrix上的方法1更快。 我发现在4x4matrix上唯一比方法2快的方法是在4x3matrix上的方法2。 那么水平添加和点积指令有什么意义呢? 实际上,点生产指令在这种情况下performance最差。 也许这与数据格式有关? 如果不能定义matrix是如何sorting的,那么转置是必要的,在这种情况下,方法1可能会更好? 见下面的一些代码。 __m128 m4x4v_colSSE(const __m128 cols[4], const […]

MySQL不使用WHERE IN子句中的索引?

我试图优化我的Rails应用程序中的一些数据库查询,我有几个让我难住。 他们都在WHERE子句中使用了一个IN,并且即使恰当的索引似乎已经到位,他们也都在进行全表扫描。 例如: SELECT `user_metrics`.* FROM `user_metrics` WHERE (`user_metrics`.user_id IN (N,N,N,N,N,N,N,N,N,N,N,N)) 执行全表扫描和说明: select_type: simple type: all extra: using where possible_keys: index_user_metrics_on_user_id (which is an index on the user_id column) key: (none) key_length: (none) ref: (none) rows: 208 在使用IN语句时是不是使用了索引,还是我需要做一些不同的事情? 这里的查询是由Rails生成的,所以我可以重新审视我的关系是如何定义的,但是我想我会先从数据库级别的潜在修复开始。

PHP合并function?

许多编程语言都有一个合并函数(返回第一个非NULL值, 例如 )。 PHP,可悲的是,不。 什么是在PHP中实现一个好的方法?

在英特尔Sandybridge系列CPU中为pipe道优化一个程序

为了完成这个任务,我一直在想我的大脑一个星期,我希望这里有人能带领我走向正确的道路。 让我从讲师的指示开始: 你的任务与我们第一个实验任务相反,那就是优化素数程序。 你在这个任务中的目的是让程序变得悲观,也就是让它运行得更慢。 这两个都是CPU密集型的程序。 他们需要几秒钟在我们的实验室PC上运行。 你不能改变algorithm。 为了使程序最优化,请使用您对Intel i7pipe道运行方式的了解。 想象一下如何重新排列指令path来引入WAR,RAW和其他危险。 想想如何最大限度地减lesscaching的有效性。 是恶魔无能。 这项任务给了Whetstone或Monte-Carlo项目的select。 caching有效性评论大多只适用于Whetstone,但我select了Monte-Carlo模拟程序: // Un-modified baseline for pessimization, as given in the assignment #include <algorithm> // Needed for the "max" function #include <cmath> #include <iostream> // A simple implementation of the Box-Muller algorithm, used to generate // gaussian random numbers – necessary for the […]

我怎样才能更快速地对观察组进行排名呢?

我有一个非常简单的问题,但是我可能没有想到vector-y足以有效地解决这个问题。 我尝试了两种不同的方法,现在已经在两台不同的计算机上循环了很长一段时间。 我希望我能说比赛让比赛变得更加激动人心,但是……呃。 在组中排名观察 我有很长的数据(每人多行,每人观察一行),而且我基本上想要一个variables,告诉我这个人已经被观察到的频率。 我有前两列,想要第三个: person wave obs pers1 1999 1 pers1 2000 2 pers1 2003 3 pers2 1998 1 pers2 2001 2 现在我正在使用两个循环方法。 两个都极其缓慢(150k行)。 我确定我错过了一些东西,但我的search查询并没有真正帮助我(很难说出问题)。 感谢任何指针! # ordered dataset by persnr and year of observation person.obs <- person.obs[order(person.obs$PERSNR,person.obs$wave) , ] person.obs$n.obs = 0 # first approach: loop through people and assign range unp […]

__builtin_prefetch,它读多less?

我试图通过使用优化一些RK4 GCC C ++代码 __builtin_prefetch 我在试图弄清楚如何预取一整堂课时遇到一些麻烦。 我不明白有多less的const void *addr被读取。 所以我有from和加载的下一个值。 for (int i = from; i < to; i++) { double kv = myLinks[i].kv; particle* from = con[i].Pfrom; particle* to = con[i].Pto; //Prefetch values at con[i++].Pfrom & con[i].Pto; double pos = to->px- from->px; double delta = from->r + to->r – pos; double k1 = axcel(kv, […]

使用匿名函数会影响性能吗?

我一直在想,在Javascript中使用命名函数和匿名函数是否有性能差异? for (var i = 0; i < 1000; ++i) { myObjects[i].onMyEvent = function() { // do something }; } VS function myEventHandler() { // do something } for (var i = 0; i < 1000; ++i) { myObjects[i].onMyEvent = myEventHandler; } 第一个是整数,因为它不会使用很less使用的函数混淆你的代码,但是重要的是多次声明这个函数是否重要?