2010/6/22 qiaojie <qia...@gmail.com>:
--
regards,
laogao
http://laogao.me | http://twitter.com/laogao
--
Milo Yip
Twitter @miloyip
http://www.cnblogs.com/miloyip/
http://miloyip.seezone.net/
另外還有Profile-Guided Optimizations
http://msdn.microsoft.com/en-us/library/e7k32f4k.aspx
--
2010/6/22 Yingjie XU <jdkl...@gmail.com>:
寫這類博文真難啊... 不過也想試試Java,沒有value type (C# struct),用GC應該一定沒命,哈哈。
C++ LCG | 17.365 | |
(g)* | C# LCG | 59.623 |
L1 Cache miss高是因为这段C#代码里有很多vec, ray之类的临时变量,C#编译器会老老实实的生成这些临时变量,导致运行栈内存占用超过L1大小,而C++编译器的一个很重要的优化是把临时变量通过内联等手段合并优化掉,所以运行栈占用会小很多。不过其实.net不是没有办法优化的,用unsafe代码是可以做到的,只是用C#改起来比较麻烦,所以我偷了个懒,直接把C++代码用C++/CLI来编译,这样虽然代码是C++的,但是生成的代码还是地道的.net IL代码,然后再进行了一次比较,成绩如下:代码是用的Milo的LCG版本代码可于此下载,编译器是vs2010,测试用的CPU是E6550 2.3GHzc++ LCG : 42s
C++ LCG 17.365 (g)* C# LCG 59.623 c# LCG: 115sc++/CLI LCG: 62s从这个例子可以看到,native code与IL code之间的性能差距并不是很大。