t*****z 发帖数: 812 | 1 m[2000][2000] x v[2000]性能差这么多,叫c++情何以堪啊。。。
测试环境
AMD Athlon(tm) 64 FX-53 Processor
Memory: 8GB
测试结果
[~]$javac jmatrix.java
[~]$/usr/bin/time -p java jmatrix
java allsum=1.8658666E16
real 27.90
user 26.82
sys 0.17
[~]$g++ cmatrix.cpp
[~]$/usr/bin/time -p ./a.out
c++ allsum=1.86587e+16
real 70.89
user 69.99
sys 0.32
测试代码见
http://ping80life.blogspot.com/2012/01/java-c.html |
h*******s 发帖数: 8454 | 2 你电脑咋好慢
我的2年旧本本上跑cpp那个不用40s
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : m[2000][2000] x v[2000]性能差这么多,叫c++情何以堪啊。。。 : 测试环境 : AMD Athlon(tm) 64 FX-53 Processor : Memory: 8GB : 测试结果 : [~]$javac jmatrix.java : [~]$/usr/bin/time -p java jmatrix : java allsum=1.8658666E16 : real 27.90 : user 26.82
|
f*******n 发帖数: 12623 | 3 你忘了optimize
试试
g++ -O2 cmatrix.cpp
或
g++ -O3 cmatrix.cpp |
g*****y 发帖数: 7271 | 4 FT, 我机器上C++的10秒钟不到就算完了。VC2008
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : m[2000][2000] x v[2000]性能差这么多,叫c++情何以堪啊。。。 : 测试环境 : AMD Athlon(tm) 64 FX-53 Processor : Memory: 8GB : 测试结果 : [~]$javac jmatrix.java : [~]$/usr/bin/time -p java jmatrix : java allsum=1.8658666E16 : real 27.90 : user 26.82
|
t*****z 发帖数: 812 | 5 还是java快一点点
[~]$ /usr/bin/time -p ./a.out
c++ allsum=1.86587e+16
real 29.73
user 29.17
sys 0.16 |
t*****z 发帖数: 812 | 6 你的java呢?
【在 g*****y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : FT, 我机器上C++的10秒钟不到就算完了。VC2008
|
t*****z 发帖数: 812 | 7 你的java呢?
【在 g*****y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : FT, 我机器上C++的10秒钟不到就算完了。VC2008
|
x****u 发帖数: 44466 | 8 这是正常结果,本来java就不比CPP慢,因为现在都是预编译后执行了。而且GC的效率
比C++自己分配释放要高点。
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你的java呢?
|
g*****y 发帖数: 7271 | 9 I don't have java installed.
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你的java呢?
|
t*****z 发帖数: 812 | 10 还是java快一点点
[~]$g++ -O3 cmatrix.cpp
[~]$/usr/bin/time -p ./a.out
c++ allsum=1.86587e+16
real 29.73
user 29.17
sys 0.16 |
|
|
w****i 发帖数: 964 | 11 JVM会用SSE指令优化,特别是这种矩阵运算。这种类型的操作C++的源码做一下simd和
cache优化,可以快几倍 |
S**I 发帖数: 15689 | 12 我的测试结果:
Java:
real 15.39
user 15.22
sys 0.17
g++
real 46.52
user 45.65
sys 0.13
g++ -O2
real 15.40
user 14.97
sys 0.07
g++ -O3
real 14.91
user 14.68
sys 0.07
icpc
real 13.66
user 13.38
sys 0.07
icpc -O2
real 13.46
user 13.26
sys 0.06
icpc -O3
real 13.22
user 13.13
sys 0.05
Java只比没有优化过的g++快,和g++ -O2相当,g++ -O3和icpc都比Java快。
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : m[2000][2000] x v[2000]性能差这么多,叫c++情何以堪啊。。。 : 测试环境 : AMD Athlon(tm) 64 FX-53 Processor : Memory: 8GB : 测试结果 : [~]$javac jmatrix.java : [~]$/usr/bin/time -p java jmatrix : java allsum=1.8658666E16 : real 27.90 : user 26.82
|
x****u 发帖数: 44466 | 13 C++要是想战胜java,可以考虑上GPU。
【在 w****i 的大作中提到】![](/moin_static193/solenoid/img/up.png) : JVM会用SSE指令优化,特别是这种矩阵运算。这种类型的操作C++的源码做一下simd和 : cache优化,可以快几倍
|
S**I 发帖数: 15689 | 14 不用GPU,Intel C++ Compiler就比Java快了。
【在 x****u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : C++要是想战胜java,可以考虑上GPU。
|
t*****z 发帖数: 812 | 15 如果在所有的问题上性能都差不多,c++就没有搞头了。
java比c++开发起来快多了(不用考虑指针),更不用说跨平台了。
【在 x****u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这是正常结果,本来java就不比CPP慢,因为现在都是预编译后执行了。而且GC的效率 : 比C++自己分配释放要高点。
|
x****u 发帖数: 44466 | 16 你说的太对了,现在的行情就是几乎所有通用问题都用java,C#,python之类的语言解
决。C++不用说别的,光是内存和线程就有成千上万的陷阱。
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 如果在所有的问题上性能都差不多,c++就没有搞头了。 : java比c++开发起来快多了(不用考虑指针),更不用说跨平台了。
|
m*******l 发帖数: 12782 | 17 我得机器上,怎么这java死循环了?好几分钟了...
也没有结果
c的那个大约37秒
当然我正在听英语,看球赛...
【在 x****u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你说的太对了,现在的行情就是几乎所有通用问题都用java,C#,python之类的语言解 : 决。C++不用说别的,光是内存和线程就有成千上万的陷阱。
|
m*******l 发帖数: 12782 | 18 另外为什么c++的那个要用New?
2000的数组的那个不用吧.
2000*2000的可能要
【在 m*******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我得机器上,怎么这java死循环了?好几分钟了... : 也没有结果 : c的那个大约37秒 : 当然我正在听英语,看球赛...
|
x****u 发帖数: 44466 | 19 这种测试你得保证内存充分大,不然一个换页就说不清了。
【在 m*******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我得机器上,怎么这java死循环了?好几分钟了... : 也没有结果 : c的那个大约37秒 : 当然我正在听英语,看球赛...
|
m*******l 发帖数: 12782 | 20 java的那个确实司机了...
还没有出结果
【在 m*******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 另外为什么c++的那个要用New? : 2000的数组的那个不用吧. : 2000*2000的可能要
|
|
|
m*******l 发帖数: 12782 | 21 我估计可能这样...
【在 x****u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这种测试你得保证内存充分大,不然一个换页就说不清了。
|
x****u 发帖数: 44466 | 22 因为java的也是new出来的,为了公平。
【在 m*******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 另外为什么c++的那个要用New? : 2000的数组的那个不用吧. : 2000*2000的可能要
|
m*******l 发帖数: 12782 | 23 那为什么c++的那个没有问题?
【在 x****u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这种测试你得保证内存充分大,不然一个换页就说不清了。
|
m*******l 发帖数: 12782 | 24 java为什么不能静态分配?
【在 x****u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 因为java的也是new出来的,为了公平。
|
x****u 发帖数: 44466 | 25 java消耗内存大阿。
【在 m*******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 那为什么c++的那个没有问题?
|
m*******l 发帖数: 12782 | 26 靠,这个就是用内存换速度了吧?
【在 x****u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : java消耗内存大阿。
|
x****u 发帖数: 44466 | 27 现在何止这个,还有用机器数量换开发测试时间的思路呢。
【在 m*******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 靠,这个就是用内存换速度了吧?
|
m*******l 发帖数: 12782 | 28 java allsum=1.8658666E16
real 783.07
user 781.82
sys 0.20
【在 x****u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 现在何止这个,还有用机器数量换开发测试时间的思路呢。
|
m*******l 发帖数: 12782 | 29 c++ allsum=1.86587e+16
real 37.14
user 37.08
sys 0.02
【在 m*******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : java allsum=1.8658666E16 : real 783.07 : user 781.82 : sys 0.20
|
m*******l 发帖数: 12782 | 30 从系统调用上看,c++明显用的少阿
【在 m*******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : c++ allsum=1.86587e+16 : real 37.14 : user 37.08 : sys 0.02
|
|
|
M**********n 发帖数: 432 | 31 I tested on my laptop.
java:
real 0m16.171s
user 0m17.925s
sys 0m10.277s
g++ with -O2
real 0m13.354s
user 0m13.289s
sys 0m0.024s
my g++ version is 4.6.1.
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : m[2000][2000] x v[2000]性能差这么多,叫c++情何以堪啊。。。 : 测试环境 : AMD Athlon(tm) 64 FX-53 Processor : Memory: 8GB : 测试结果 : [~]$javac jmatrix.java : [~]$/usr/bin/time -p java jmatrix : java allsum=1.8658666E16 : real 27.90 : user 26.82
|
n******t 发帖数: 4406 | 32 喀喀喀,问题是你这个问题,java 哪里比C++开发起来快了?
而且真的care 矩阵运算速度,都是用lapack之类的东西。
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 如果在所有的问题上性能都差不多,c++就没有搞头了。 : java比c++开发起来快多了(不用考虑指针),更不用说跨平台了。
|
x****u 发帖数: 44466 | 33 你上印度去雇个团队,开发一个多模块交互的web应用,用C++能活活玩死你。
【在 n******t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 喀喀喀,问题是你这个问题,java 哪里比C++开发起来快了? : 而且真的care 矩阵运算速度,都是用lapack之类的东西。
|
B******5 发帖数: 4676 | 34 这个比较有意思,我电脑上的结果
java allsum=1.8658666E16
real 13.31
user 14.86
sys 7.54
c++ allsum=1.86587e+16
real 35.99
user 35.89
sys 0.01
c++ allsum=1.86587e+16
real 14.50
user 14.44
sys 0.02
O2的
c++ allsum=1.86587e+16
real 14.08
user 14.03
sys 0.00
O3的
c++ allsum=1.86587e+16
real 14.50
user 14.44
sys 0.02 |
n*w 发帖数: 3393 | |
g*****y 发帖数: 7271 | 36 interesting, 怎么还没见到比我的机器上C++快的?
还是说VC优化做得好?
【在 B******5 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这个比较有意思,我电脑上的结果 : java allsum=1.8658666E16 : real 13.31 : user 14.86 : sys 7.54 : c++ allsum=1.86587e+16 : real 35.99 : user 35.89 : sys 0.01 : c++ allsum=1.86587e+16
|
t****t 发帖数: 6806 | 37 你也不说你是什么机器, 那能比较吗
我机器上还只算7.3秒呢, gcc
【在 g*****y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : interesting, 怎么还没见到比我的机器上C++快的? : 还是说VC优化做得好?
|
B******5 发帖数: 4676 | 38 忘记说了,g++ 4.6.1
【在 B******5 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这个比较有意思,我电脑上的结果 : java allsum=1.8658666E16 : real 13.31 : user 14.86 : sys 7.54 : c++ allsum=1.86587e+16 : real 35.99 : user 35.89 : sys 0.01 : c++ allsum=1.86587e+16
|
g*****y 发帖数: 7271 | 39 这个比我的快,我的就是i7 something而已。gcc -O2 ?
【在 t****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你也不说你是什么机器, 那能比较吗 : 我机器上还只算7.3秒呢, gcc
|
t****t 发帖数: 6806 | 40 O2 O3 都差不多, 我的是2500K @4.6G, 但是由于VM的限制, 没有AVX支持
再折腾折腾估计还能搞快一点, 现在不但没有AVX, 连SIMD都没用到
【在 g*****y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这个比我的快,我的就是i7 something而已。gcc -O2 ?
|
|
|
a******8 发帖数: 660 | |
r********3 发帖数: 2998 | 42 Java在内存管理上远胜于一般的C/C++。只有极少数经验老道的C/C++程序员才能写出
Java Virtual Machine那样高效的内存管理器。
这点在Apache Tomcat服务器上比较已经很多了。
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : m[2000][2000] x v[2000]性能差这么多,叫c++情何以堪啊。。。 : 测试环境 : AMD Athlon(tm) 64 FX-53 Processor : Memory: 8GB : 测试结果 : [~]$javac jmatrix.java : [~]$/usr/bin/time -p java jmatrix : java allsum=1.8658666E16 : real 27.90 : user 26.82
|
n******s 发帖数: 78 | 43 为啥没有人测试C#?c#的性能是不是比较差?
【在 x****u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你说的太对了,现在的行情就是几乎所有通用问题都用java,C#,python之类的语言解 : 决。C++不用说别的,光是内存和线程就有成千上万的陷阱。
|
l*********s 发帖数: 5409 | 44 那为啥一般java程序感觉不如C/C++程序snappy呢? |
t*****z 发帖数: 812 | 45 因为C#没有linux版本 :(。要不你弄一个比较一下(最好贴个代码出来)?我不会C#
【在 n******s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 为啥没有人测试C#?c#的性能是不是比较差?
|
t*****z 发帖数: 812 | 46 我正想问这个呢。
eclipse编程的时候慢的要命。输入了“." 之后要好久才反应过来。对常用的函数
,自己早就输入完了。
还有xmind也是用java写的吧。慢的要命
【在 l*********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 那为啥一般java程序感觉不如C/C++程序snappy呢?
|
t*****z 发帖数: 812 | 47 你看看那个c++二维数组的指针定义,不是不是觉得java比较make sense?
还有如果c++上了stl,那个用gdb调试起来可不是一般的难受。。。
【在 n******t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 喀喀喀,问题是你这个问题,java 哪里比C++开发起来快了? : 而且真的care 矩阵运算速度,都是用lapack之类的东西。
|
t*****z 发帖数: 812 | 48 这个如何做?有没有文章可以参考?
【在 w****i 的大作中提到】![](/moin_static193/solenoid/img/up.png) : JVM会用SSE指令优化,特别是这种矩阵运算。这种类型的操作C++的源码做一下simd和 : cache优化,可以快几倍
|
t*****z 发帖数: 812 | 49 就GPU那点内存(特别是local memory)。。。有钱还不如多买几台机器,弄个cluster。
不知道java的MPI性能怎么样
【在 x****u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : C++要是想战胜java,可以考虑上GPU。
|
t*****z 发帖数: 812 | 50 这个。。。你机器的内存多大?
其实这个程序10^4×10^4×8=800M空间就够了啊
【在 m*******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : java allsum=1.8658666E16 : real 783.07 : user 781.82 : sys 0.20
|
|
|
N********n 发帖数: 8363 | 51
Java copied all their performance tricks from C#.
【在 n******s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 为啥没有人测试C#?c#的性能是不是比较差?
|
l*********s 发帖数: 5409 | 52 I am about to buy a laptop with 2G video memory, hahahaha.
cluster。
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 就GPU那点内存(特别是local memory)。。。有钱还不如多买几台机器,弄个cluster。 : 不知道java的MPI性能怎么样
|
t****t 发帖数: 6806 | 53 GPU那点内存往往就比10个CPU都管用, 这个没什么可不服的
都不用很高档的GPU, 一两百块的就已经很快了
cluster。
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 就GPU那点内存(特别是local memory)。。。有钱还不如多买几台机器,弄个cluster。 : 不知道java的MPI性能怎么样
|
t*****z 发帖数: 812 | 54 看应用吧。
试试16G大小的矩阵的乘法,光copy来copy去就够你受的
或者试试10000次调用Cublas算32X32的(不同)小矩阵运算,看看cublas快还是mkl快
【在 t****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : GPU那点内存往往就比10个CPU都管用, 这个没什么可不服的 : 都不用很高档的GPU, 一两百块的就已经很快了 : : cluster。
|
w****i 发帖数: 964 | 55 cpu也差不多吧,L2 cache比L1慢5-10倍,L2 miss比L1慢几十到上百倍,L1 cache才
64K
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 看应用吧。 : 试试16G大小的矩阵的乘法,光copy来copy去就够你受的 : 或者试试10000次调用Cublas算32X32的(不同)小矩阵运算,看看cublas快还是mkl快
|
L***n 发帖数: 6727 | 56 建议本版搞个不限规则竞赛,java和cpp都允许在源代码上任何级别优化,然后比比运
算速度
mkl快
【在 w****i 的大作中提到】![](/moin_static193/solenoid/img/up.png) : cpu也差不多吧,L2 cache比L1慢5-10倍,L2 miss比L1慢几十到上百倍,L1 cache才 : 64K
|
B******5 发帖数: 4676 | 57 同感gdb调试的难受。。。
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你看看那个c++二维数组的指针定义,不是不是觉得java比较make sense? : 还有如果c++上了stl,那个用gdb调试起来可不是一般的难受。。。
|
d****n 发帖数: 1637 | 58 SSE and Not SSEed are big difference.
And I can't believe that JVM has no SSE optimization.
It makes no sense to compare hand code in C/C++ with Java JVM.
Link from Java:http://www.oracle.com/technetwork/java/javase/6u18-142093.html
"""
Code generation improvements
New intrinsics using SSE 4.2
New intrinsics for Integer/Long bit operations - leading/trailing zeros, bit
count
Unsigned byte and integer loads
Integer load shortening
Elision of needless conversions between integer primitive types
Optimization of common string concatenation patterns
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这个如何做?有没有文章可以参考?
|
t****t 发帖数: 6806 | 59 装pretty printer了吗
【在 B******5 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 同感gdb调试的难受。。。
|
t****t 发帖数: 6806 | 60 来个完整的. 不要说不优化, 就是优化得不对, 也差远了. 这个换了台机器, Xeon
5670 @2.93G
EDIT: 加个cache aware的.
######## 不优化
$ g++461 11.C
$ time a.out
c++ allsum=1.86587e+16
37.868u 0.010s 0:37.88 99.9% 0+0k 0+0io 0pf+0w
######## -O2, 最普通的
$ g++461 -O2 11.C
$ time a.out
c++ allsum=1.86587e+16
10.012u 0.018s 0:10.03 99.9% 0+0k 0+0io 0pf+0w
######## -O3, 且允许SIMD
$ g++461 -O3 -funsafe-math-optimizations 11.C
$ time a.out
c++ allsum=1.86587e+16
8.649u 0.010s 0:08.66 99.8% 0+0k 0+0io 0pf+0w
######## -O3, 允许SIMD, 再unroll loop
$ g++461 -O3 -funsafe-math-optimizations -funroll-loops 11.C
$ time a.out
c++ allsum=1.86587e+16
7.909u 0.015s 0:07.92 99.8% 0+0k 0+0io 0pf+0w
######## 最后再加个cache-aware的.
$ g++461 -O3 -funsafe-math-optimizations -funroll-loops -fprefetch-loop-arrays 11.C
$ time a.out
c++ allsum=1.86587e+16
6.953u 0.007s 0:07.00 99.2% 0+0k 0+0io 0pf+0w
【在 t****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : O2 O3 都差不多, 我的是2500K @4.6G, 但是由于VM的限制, 没有AVX支持 : 再折腾折腾估计还能搞快一点, 现在不但没有AVX, 连SIMD都没用到
|
|
|
B******5 发帖数: 4676 | 61 那是什么?
【在 t****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 装pretty printer了吗
|
t****t 发帖数: 6806 | 62 gdb 现在支持python的script, 可以把container之类的元素显示得很清楚
理论上每个.so可以带一套script, gdb可以按类型自动选择. 比如说vector, 你本来只
是显示首尾指针, 现在就可以自动显示每个元素, 长的还可以截断.
fedora自动装好的, 别的dist不清楚
【在 B******5 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 那是什么?
|
w***g 发帖数: 5958 | 63 真有这么好?自从上C++以来我都不怎么用gdb了。
【在 t****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : gdb 现在支持python的script, 可以把container之类的元素显示得很清楚 : 理论上每个.so可以带一套script, gdb可以按类型自动选择. 比如说vector, 你本来只 : 是显示首尾指针, 现在就可以自动显示每个元素, 长的还可以截断. : fedora自动装好的, 别的dist不清楚
|
w***g 发帖数: 5958 | 64 好久没见这么牛的贴了。100大洋给你转过去了。
你把ATLAS也加了吧,我再发你100大洋。
还有,你那个-funsafe-math-optimizations算出来结果还对吗?
【在 t****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 来个完整的. 不要说不优化, 就是优化得不对, 也差远了. 这个换了台机器, Xeon : 5670 @2.93G : EDIT: 加个cache aware的. : ######## 不优化 : $ g++461 11.C : $ time a.out : c++ allsum=1.86587e+16 : 37.868u 0.010s 0:37.88 99.9% 0+0k 0+0io 0pf+0w : ######## -O2, 最普通的 : $ g++461 -O2 11.C
|
t****t 发帖数: 6806 | 65 ...看你怎么定义"好"了, 我觉得就是那么回事, 说好也谈不上, 但是也不至于很难用
STL的大部分类型都支持, 特别是container, iterator, smart pointer, 够用就可以
了. 你也可以针对自己的类型写script.
这个对于调试好的库很有用, 你只关心一些特定的成员, 辅助成员不关心. 比如你写个
定点数类型, 主要就是值和精度, 别的辅助值都不用显示.
【在 w***g 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 真有这么好?自从上C++以来我都不怎么用gdb了。
|
t****t 发帖数: 6806 | 66 没装atlas, 下次吧.
unsafe-math-optimization的目的是允许对double使用交换律和结合律, 要不然没法
vectorize. 比如说a+b+c+d应该是(((a+b)+c)+d), 但是你想vectorize, 一般就要计算
((a+c)+(b+d)), 你得允许这个.
【在 w***g 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 好久没见这么牛的贴了。100大洋给你转过去了。 : 你把ATLAS也加了吧,我再发你100大洋。 : 还有,你那个-funsafe-math-optimizations算出来结果还对吗?
|
g****v 发帖数: 971 | |
y***d 发帖数: 2330 | 68 Don't forget -ffast-math...
java allsum=1.8658666E16
real 0m9.719s
g++ -O3 test.cpp
c++ allsum=1.86587e+16
real 0m9.116s
g++ -O3 -ffast-math test.cpp
c++ allsum=1.86587e+16
real 0m6.029s
g++ -O3 -march=native -mtune=native -ffast-math test.cpp
c++ allsum=1.86587e+16
real 0m4.888s
g++ -O3 -march=native -mtune=native -ffast-math test.cpp -funsafe-math-
optimizations -funroll-loops -fprefetch-loop-arrays
c++ allsum=1.86587e+16
real 0m4.235s
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : m[2000][2000] x v[2000]性能差这么多,叫c++情何以堪啊。。。 : 测试环境 : AMD Athlon(tm) 64 FX-53 Processor : Memory: 8GB : 测试结果 : [~]$javac jmatrix.java : [~]$/usr/bin/time -p java jmatrix : java allsum=1.8658666E16 : real 27.90 : user 26.82
|
y***d 发帖数: 2330 | 69 恩,基本上前面说的 -funsafe-math-optimizations, cache optimization 加上
navtie 就够了
g++ -O3 test.cpp -funsafe-math-optimizations -funroll-loops -fprefetch-loop
-arrays -march=native -mtune=native
c++ allsum=1.86587e+16
real 0m4.253s
real 0m4.300s
real 0m4.296s
【在 y***d 的大作中提到】![](/moin_static193/solenoid/img/up.png) : Don't forget -ffast-math... : java allsum=1.8658666E16 : real 0m9.719s : g++ -O3 test.cpp : c++ allsum=1.86587e+16 : real 0m9.116s : g++ -O3 -ffast-math test.cpp : c++ allsum=1.86587e+16 : real 0m6.029s : g++ -O3 -march=native -mtune=native -ffast-math test.cpp
|
t****t 发帖数: 6806 | 70 for this case, fast-math means unsafe-math-optimizations, because others do
not apply
and arch=native means tune=native
i tried arch=native, doesn't improve much, maybe depends on platform
loop
【在 y***d 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 恩,基本上前面说的 -funsafe-math-optimizations, cache optimization 加上 : navtie 就够了 : g++ -O3 test.cpp -funsafe-math-optimizations -funroll-loops -fprefetch-loop : -arrays -march=native -mtune=native : c++ allsum=1.86587e+16 : real 0m4.253s : real 0m4.300s : real 0m4.296s
|
|
|
B******5 发帖数: 4676 | 71 大牛给个教程吧,我都是用pvector一类的
【在 t****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : gdb 现在支持python的script, 可以把container之类的元素显示得很清楚 : 理论上每个.so可以带一套script, gdb可以按类型自动选择. 比如说vector, 你本来只 : 是显示首尾指针, 现在就可以自动显示每个元素, 长的还可以截断. : fedora自动装好的, 别的dist不清楚
|
x****u 发帖数: 44466 | 72 语法高亮主要瓶颈是算法。
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我正想问这个呢。 : eclipse编程的时候慢的要命。输入了“." 之后要好久才反应过来。对常用的函数 : ,自己早就输入完了。 : 还有xmind也是用java写的吧。慢的要命
|
x****u 发帖数: 44466 | 73 GPU性价比最高,有的运算利润低,必须考虑性价比。
cluster。
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 就GPU那点内存(特别是local memory)。。。有钱还不如多买几台机器,弄个cluster。 : 不知道java的MPI性能怎么样
|
g*****y 发帖数: 7271 | 74 I enabled openmp in VC2008 and added the following line
before the loop and recompile:
#pragma omp parallel for default(none) \
private(k,i,j,sum) shared(m,x,y,allsum)
Now it takes 2 seconds (previous 10 secs). But the result
is quite different because of the multithreading.
In JVM, how to utilize multi-core?
others
do
【在 t****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : for this case, fast-math means unsafe-math-optimizations, because others do : not apply : and arch=native means tune=native : i tried arch=native, doesn't improve much, maybe depends on platform : : loop
|
t****t 发帖数: 6806 | 75 这也要教程啊, 直接google一下就好了嘛, 我就用的fedora自带的, 你要别的dist看这里
http://sourceware.org/gdb/wiki/STLSupport
【在 B******5 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 大牛给个教程吧,我都是用pvector一类的
|
B******5 发帖数: 4676 | 76 thx~
这里
【在 t****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这也要教程啊, 直接google一下就好了嘛, 我就用的fedora自带的, 你要别的dist看这里 : http://sourceware.org/gdb/wiki/STLSupport
|
y***d 发帖数: 2330 | 77 mine is i3-2100
do
【在 t****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : for this case, fast-math means unsafe-math-optimizations, because others do : not apply : and arch=native means tune=native : i tried arch=native, doesn't improve much, maybe depends on platform : : loop
|
D*******a 发帖数: 3688 | 78 nice
also beware which gcc you are using (linux vs osx). I had this experience
still unexplained:
发信人: DrumMania (嫑跑,兲), 信区: Programming
标 题: 运行时间比较
发信站: BBS 未名空间站 (Sat Apr 26 14:06:50 2008), 转信
有两台机器:
A: P4-2.6GHT, 512M memory, Fedora 8, GCC 4.1.2
B: P4-2.8GHT, 1.5G memory, Mac OS X 10.5.2, GCC 4.0.1 (Xcode)
用-O3编译同一个程序(min cut graph partitioning using simulated annealing)
运行时间差很远
A只用了2:21,但是B却用了5:51
按道理B应该运算能力更强,可是实际上却差那么远,怎么解释呢?
【在 t****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 来个完整的. 不要说不优化, 就是优化得不对, 也差远了. 这个换了台机器, Xeon : 5670 @2.93G : EDIT: 加个cache aware的. : ######## 不优化 : $ g++461 11.C : $ time a.out : c++ allsum=1.86587e+16 : 37.868u 0.010s 0:37.88 99.9% 0+0k 0+0io 0pf+0w : ######## -O2, 最普通的 : $ g++461 -O2 11.C
|
t****t 发帖数: 6806 | 79 如果是native的, 很好理解啊, 有AVX支持了嘛, 正常的x64应该是enable到SSE3
【在 y***d 的大作中提到】![](/moin_static193/solenoid/img/up.png) : mine is i3-2100 : : do
|
t****t 发帖数: 6806 | 80 blame OSX! haha
seriously, gcc 4.0 and 4.1 are different. and you need to list your CPU
model number. depending on your application (how much kernel call?), OS
sometimes does matter, too.
【在 D*******a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : nice : also beware which gcc you are using (linux vs osx). I had this experience : still unexplained: : 发信人: DrumMania (嫑跑,兲), 信区: Programming : 标 题: 运行时间比较 : 发信站: BBS 未名空间站 (Sat Apr 26 14:06:50 2008), 转信 : 有两台机器: : A: P4-2.6GHT, 512M memory, Fedora 8, GCC 4.1.2 : B: P4-2.8GHT, 1.5G memory, Mac OS X 10.5.2, GCC 4.0.1 (Xcode) : 用-O3编译同一个程序(min cut graph partitioning using simulated annealing)
|
|
|
n******t 发帖数: 4406 | 81 那种东西,我可以保证C/C++ 比java快的不止这么一点点。
【在 x****u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你上印度去雇个团队,开发一个多模块交互的web应用,用C++能活活玩死你。
|
n******t 发帖数: 4406 | 82 二维数组到底难在哪里我一直没搞明白。。。
分一个一维数组自己寻址不就完了。
而且C/C++缺损库比较少,但是serious的开发都会用自己或这工业级的库函数。
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你看看那个c++二维数组的指针定义,不是不是觉得java比较make sense? : 还有如果c++上了stl,那个用gdb调试起来可不是一般的难受。。。
|
t*****z 发帖数: 812 | 83 我想他指的是开发快。
【在 n******t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 那种东西,我可以保证C/C++ 比java快的不止这么一点点。
|
x****u 发帖数: 44466 | 84 哈,等你见过印度团队的代码再来说。
【在 n******t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 那种东西,我可以保证C/C++ 比java快的不止这么一点点。
|
x****u 发帖数: 44466 | 85 有了工业级的库,那上点python之类的胶水语言就足够了。
【在 n******t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 二维数组到底难在哪里我一直没搞明白。。。 : 分一个一维数组自己寻址不就完了。 : 而且C/C++缺损库比较少,但是serious的开发都会用自己或这工业级的库函数。
|
L***n 发帖数: 6727 | 86 试了下gotoblas2,我的机器
$ cat /proc/cpuinfo | grep model\ name | head -1
model name : Intel(R) Core(TM) i7 CPU Q 740 @ 1.73GHz
$ time -p java jmatrix
java allsum=1.8658666E16
real 11.69
user 12.68
sys 6.65
C++ 和优化flags
$ g++ -O3 -funsafe-math-optimizations -funroll-loops -fprefetch-loop-arrays
-march=native cmatrix.cpp -o cmatrix
$ time -p ./cmatrix
c++ allsum=1.86587e+16
real 8.04
user 8.00
sys 0.03
trivially在最外层循环里用gotoblas(就是把里面的二重循环换成Blas Level2)
g++ -O2 -funroll-loops -fprefetch-loop-arrays -march=native -msse4 matrix.
cpp -o matrix -lgfortran -lgoto2
$ time -p ./matrix
c++ allsum=1.86587e+16
real 7.34
user 27.78
sys 0.90
如果把最外层循环也去掉(因为里面算矩阵和向量乘法的部分完全和外层循环变量k无关
)当然会提高很多,但是这样和原来的算法完全不同了,所以比较有点unfair,我猜
java这么处理速度应该差不多。
$g++ -O2 -funroll-loops -fprefetch-loop-arrays -march=native -msse4 matrix.
cpp -o matrix -lgfortran -lgoto2
$ time -p ./matrix
c++ allsum=1.86587e+16
real 0.46
user 0.74
sys 0.54
GotoBLAS应该是最快的BLAS之一了,另外我注意到jvm用了两个core, 没用BLAS的C++只
用了一个core(所以可以用openmp优化,但是要考虑synchronization,不然结果可能不
正确,所以就算了), GotoBLAS似乎用了4个core(太快了一闪而过,我是看着htop猜的
,每个core最多用到40%)
【在 t****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 没装atlas, 下次吧. : unsafe-math-optimization的目的是允许对double使用交换律和结合律, 要不然没法 : vectorize. 比如说a+b+c+d应该是(((a+b)+c)+d), 但是你想vectorize, 一般就要计算 : ((a+c)+(b+d)), 你得允许这个.
|
t****t 发帖数: 6806 | 87 最外层本来就是为了白做功写的(反复运行N次), 要不然测的时间不准. 去掉就没的玩
了.
arrays
【在 L***n 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 试了下gotoblas2,我的机器 : $ cat /proc/cpuinfo | grep model\ name | head -1 : model name : Intel(R) Core(TM) i7 CPU Q 740 @ 1.73GHz : $ time -p java jmatrix : java allsum=1.8658666E16 : real 11.69 : user 12.68 : sys 6.65 : C++ 和优化flags : $ g++ -O3 -funsafe-math-optimizations -funroll-loops -fprefetch-loop-arrays
|
g*****y 发帖数: 7271 | 88 Modified the openmp directive a little bit and now
the result is correct and it takes about 2 seconds
on i7 860 @ 2.8GHz (4 cores).
just put the following line before the k loop:
#pragma omp parallel for reduction(+:allsum) \
private(k,i,j,sum) shared(m,x,y)
There seems to be JOMP developed for java. Anybody tested
its performance?
【在 g*****y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : I enabled openmp in VC2008 and added the following line : before the loop and recompile: : #pragma omp parallel for default(none) \ : private(k,i,j,sum) shared(m,x,y,allsum) : Now it takes 2 seconds (previous 10 secs). But the result : is quite different because of the multithreading. : In JVM, how to utilize multi-core? : : others : do
|
t*****n 发帖数: 4908 | 89 gotoblas2最少支持2核吧。应该说速度快一倍啊。可是不明显。
arrays
【在 L***n 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 试了下gotoblas2,我的机器 : $ cat /proc/cpuinfo | grep model\ name | head -1 : model name : Intel(R) Core(TM) i7 CPU Q 740 @ 1.73GHz : $ time -p java jmatrix : java allsum=1.8658666E16 : real 11.69 : user 12.68 : sys 6.65 : C++ 和优化flags : $ g++ -O3 -funsafe-math-optimizations -funroll-loops -fprefetch-loop-arrays
|
t*****n 发帖数: 4908 | 90 楼主的代码有些问题:
1 数组y没用到,不影响结果
2 矩阵m乘向量x可以放到循环外面。如果是商业代码的话这些优化肯定要做。
3 blas库有gemv()专门做矩阵乘向量,质量肯定比手写的高。
我理解这些代码是做测试用的。但是测试最好是来自实例。
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : m[2000][2000] x v[2000]性能差这么多,叫c++情何以堪啊。。。 : 测试环境 : AMD Athlon(tm) 64 FX-53 Processor : Memory: 8GB : 测试结果 : [~]$javac jmatrix.java : [~]$/usr/bin/time -p java jmatrix : java allsum=1.8658666E16 : real 27.90 : user 26.82
|
|
|
t*****n 发帖数: 4908 | 91 照楼主的测试例子我用dgemv()和dsum()改写了一下。没有减少循环层次。另外用
gotoblas做blas库。在我的athlon双核机器上速度是gcc -03两倍。
那位在linux上跑一下看看。多谢
#include
#include
#include
#include
#define size 2000
int main(void)
{
double *m;
double x[size], k[size];
long begin, end;
double sum = 0.0;
int i, j;
begin = time(0);
m = malloc(size * size * sizeof(*m));
for (i = 0; i < size; i++)
{
for (j = 0; j < size; j++)
{
m[i * size + j] = i + j;
}
x[i] = i;
}
for (i = 0; i < size; i++)
{
for (j = 0; j < size; j++)
{
k[j] = size * i;
}
cblas_dgemv( CblasRowMajor, CblasNoTrans, size, size, 1, m, size, x,
1,
1, k, 1);
sum = sum + cblas_dasum( size, k, 1 );
}
end = time(0);
printf( "Wall time = %d, Result = %g\n", (int)(end - begin), sum );
free(m);
return 0;
}
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : m[2000][2000] x v[2000]性能差这么多,叫c++情何以堪啊。。。 : 测试环境 : AMD Athlon(tm) 64 FX-53 Processor : Memory: 8GB : 测试结果 : [~]$javac jmatrix.java : [~]$/usr/bin/time -p java jmatrix : java allsum=1.8658666E16 : real 27.90 : user 26.82
|
w*********l 发帖数: 1337 | 92 我的g++ -O3大概9秒,java11秒。
我想说的是,你如果光比这些纯计算,java基本没有劣势。最后不就是相同的那几条指
令吗?比来比去就是比编译器了,而且这种情况可能java还更有优势一点点,因为虚拟
机可以做profiling,动态adapt to code behavior。java最头疼的地方是内存管理。
我曾经试图用eclipse编译Linux内核,结果导入project直接jvm就崩掉了。你要测怎么
也要写个东西迫使java反复做gc啊。
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : m[2000][2000] x v[2000]性能差这么多,叫c++情何以堪啊。。。 : 测试环境 : AMD Athlon(tm) 64 FX-53 Processor : Memory: 8GB : 测试结果 : [~]$javac jmatrix.java : [~]$/usr/bin/time -p java jmatrix : java allsum=1.8658666E16 : real 27.90 : user 26.82
|
y**f 发帖数: 32 | 93 主要还是看算法吧
俺当年读书时的一个作业是用HSL库来算大型稀疏矩阵的特征值,就算你在cluster上跑
计算(无论用Java还是C++)时申请的内存动不动就是一个完全矩阵,那和一些专用库算
法比较也快不起来 |
a********m 发帖数: 15480 | 94 那个指针定义第一眼有点别扭,不过反应过来也很make sense,语言特征而已。
template的调试大多很恶心,stl,boost啥的。俺最讨厌复杂的template和宏。可是有
不少人非常喜欢。。。。
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你看看那个c++二维数组的指针定义,不是不是觉得java比较make sense? : 还有如果c++上了stl,那个用gdb调试起来可不是一般的难受。。。
|
a********m 发帖数: 15480 | 95 这个比较不公平吧。印度团队的java也可以很烂。。。。
【在 x****u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 哈,等你见过印度团队的代码再来说。
|
a****l 发帖数: 8211 | 96 对的,说到底就是比编译器.
【在 w*********l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我的g++ -O3大概9秒,java11秒。 : 我想说的是,你如果光比这些纯计算,java基本没有劣势。最后不就是相同的那几条指 : 令吗?比来比去就是比编译器了,而且这种情况可能java还更有优势一点点,因为虚拟 : 机可以做profiling,动态adapt to code behavior。java最头疼的地方是内存管理。 : 我曾经试图用eclipse编译Linux内核,结果导入project直接jvm就崩掉了。你要测怎么 : 也要写个东西迫使java反复做gc啊。
|
a********m 发帖数: 15480 | 97 闹得。
【在 a****l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 对的,说到底就是比编译器.
|
x****u 发帖数: 44466 | 98 烂java绝对比烂cpp好,烂cpp的随机资源泄漏或者随机崩溃是人类无法阻止的。
【在 a********m 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这个比较不公平吧。印度团队的java也可以很烂。。。。
|
a********m 发帖数: 15480 | 99 是。可是比较语言需要在正常情况下比呀。
【在 x****u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 烂java绝对比烂cpp好,烂cpp的随机资源泄漏或者随机崩溃是人类无法阻止的。
|
t*****n 发帖数: 4908 | 100 没人试一试我写的程序?看来大家都不愿意看代码。我以前给商业软件写slover的时候
,就是用的blas库。MKL也用过。
JAVA就不用提了。目前为止商用有限元软件没有一个是用JAVA写的。Fortran/C/C++是
主流。
【在 t*****n 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 照楼主的测试例子我用dgemv()和dsum()改写了一下。没有减少循环层次。另外用 : gotoblas做blas库。在我的athlon双核机器上速度是gcc -03两倍。 : 那位在linux上跑一下看看。多谢 : #include : #include : #include : #include : #define size 2000 : int main(void) : {
|
|
|
c****p 发帖数: 6474 | 101 没有JVM咋办。
【在 t*****z 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 如果在所有的问题上性能都差不多,c++就没有搞头了。 : java比c++开发起来快多了(不用考虑指针),更不用说跨平台了。
|
w*********l 发帖数: 1337 | 102 这个自然。两种语言面对的程序员门槛不一样。
【在 x****u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 烂java绝对比烂cpp好,烂cpp的随机资源泄漏或者随机崩溃是人类无法阻止的。
|
i*****o 发帖数: 1714 | 103 呵呵, 用javascript做了一下,竟然只用了不到三分钟,而没有优化的 C++用了48秒
$ time node main.js
js allsum: 18658666000000000
real 2m54.334s
user 2m54.260s
sys 0m0.998s
$ time ./a.out
c++ allsum=1.86587e+16
real 0m48.793s
user 0m48.720s
sys 0m0.061s
java 和 O3 的C++分别是17 和 15秒。 |
t****t 发帖数: 6806 | 104 "只用了"三分钟?
【在 i*****o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 呵呵, 用javascript做了一下,竟然只用了不到三分钟,而没有优化的 C++用了48秒 : $ time node main.js : js allsum: 18658666000000000 : real 2m54.334s : user 2m54.260s : sys 0m0.998s : $ time ./a.out : c++ allsum=1.86587e+16 : real 0m48.793s : user 0m48.720s
|
i*****o 发帖数: 1714 | 105 我本来以为要几个小时来算的。现在只是比最快的慢十倍。javascript是JIT,其他呢
俩都是事先编译加优化好了的,差十倍是可以理解的。
我对这个感兴趣主要是因为数组是javascript的软肋,尤其这个计算用的还是两维数组
。如果这个例子只差十倍,其它的会差的很少。
【在 t****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : "只用了"三分钟?
|
g*****g 发帖数: 34805 | 106 我见过的例子,C++不做优化比Java慢是很常见的。做优化之后一般比Java快个20%-50%。
但问题不在这里,把一个大程序扔到集群上工作,C++在开发上的要花时间要比Java多
几倍。所以使用什么语言跟啥行业是很有关系的,对于大多数商业开发,通常的要求是
性能满足要求,成本越低越好(包括开发和硬件成本),时间越短越好。这个时候Java的
优势就大太多了。OS,学术,某些特定行业(如gaming), C++是合适的选择。 |
g*****y 发帖数: 7271 | 107 JVM好像不用multi-core啊,丢cluster上有什么帮助么?还是说假设
很多矩阵求和的问题,丢不同机器上算?
50%。
【在 g*****g 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我见过的例子,C++不做优化比Java慢是很常见的。做优化之后一般比Java快个20%-50%。 : 但问题不在这里,把一个大程序扔到集群上工作,C++在开发上的要花时间要比Java多 : 几倍。所以使用什么语言跟啥行业是很有关系的,对于大多数商业开发,通常的要求是 : 性能满足要求,成本越低越好(包括开发和硬件成本),时间越短越好。这个时候Java的 : 优势就大太多了。OS,学术,某些特定行业(如gaming), C++是合适的选择。
|
g*****g 发帖数: 34805 | 108 JVM当然用multi-core,multi-threading向来是java的强项,clustering更是了。
【在 g*****y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : JVM好像不用multi-core啊,丢cluster上有什么帮助么?还是说假设 : 很多矩阵求和的问题,丢不同机器上算? : : 50%。
|
g*****y 发帖数: 7271 | 109 为什么我run那个java version好像只用了一个core呢?要设置什么东西么?
【在 g*****g 的大作中提到】![](/moin_static193/solenoid/img/up.png) : JVM当然用multi-core,multi-threading向来是java的强项,clustering更是了。
|
g*****g 发帖数: 34805 | 110 因为那是个单线程程序。顺便说一下,从性能的角度讲,显式地建议GC
(System.gc())是影响性能的,并且不是一个常见的做法。JVM可以
在大多数情况下做到需要内存的时候才去做GC,而且有很多可调的算法
和参数可以优化,并且有些GC算法是可以在一个或多个并行的线程
上进行的,而System.gc()则是一个blocking call。返回的时候GC已经
做完了。
换句话说,在多核环境,和多次调用这个程序段的情况下,这个benchmark
都低估了Java的性能。
【在 g*****y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 为什么我run那个java version好像只用了一个core呢?要设置什么东西么?
|
|
|
t*****n 发帖数: 4908 | 111 好虫这个说到点子上了。补充一点,游戏行业只是冰山一角。对程序有性能要求的商业
软件多的很,比如天气预报、碰撞仿真、有限元计算、生物计算等等。我以前在超级计
算中心上过班,从来没见过JAVA的程序在集群上跑过。常见的是Fortran/C/C++的程序。
就软件工程来说,C++也不会比Java多50%以上的开发和维护时间。两者应该差不多。问
题是C++进化的现在,已经有些走火入魔了。C++对编程者的要求很高,需要知道那些是
精华,那些是糟粕。
50%。
【在 g*****g 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我见过的例子,C++不做优化比Java慢是很常见的。做优化之后一般比Java快个20%-50%。 : 但问题不在这里,把一个大程序扔到集群上工作,C++在开发上的要花时间要比Java多 : 几倍。所以使用什么语言跟啥行业是很有关系的,对于大多数商业开发,通常的要求是 : 性能满足要求,成本越低越好(包括开发和硬件成本),时间越短越好。这个时候Java的 : 优势就大太多了。OS,学术,某些特定行业(如gaming), C++是合适的选择。
|
g*****g 发帖数: 34805 | 112 很多中大型web应用,比如几乎所有的银行网站,比如ebay都是Java的程序在集群上
跑。大部分商业应用是计算复杂度低,但逻辑复杂或者繁多。你说的那些则相反,
基本属于科学计算的范畴。
序。
【在 t*****n 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 好虫这个说到点子上了。补充一点,游戏行业只是冰山一角。对程序有性能要求的商业 : 软件多的很,比如天气预报、碰撞仿真、有限元计算、生物计算等等。我以前在超级计 : 算中心上过班,从来没见过JAVA的程序在集群上跑过。常见的是Fortran/C/C++的程序。 : 就软件工程来说,C++也不会比Java多50%以上的开发和维护时间。两者应该差不多。问 : 题是C++进化的现在,已经有些走火入魔了。C++对编程者的要求很高,需要知道那些是 : 精华,那些是糟粕。 : : 50%。
|
a9 发帖数: 21638 | 113 你们的超级计算中心的超级计算机上,装jre了吗?哈哈
序。
Java多
求是
Java的
【在 t*****n 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 好虫这个说到点子上了。补充一点,游戏行业只是冰山一角。对程序有性能要求的商业 : 软件多的很,比如天气预报、碰撞仿真、有限元计算、生物计算等等。我以前在超级计 : 算中心上过班,从来没见过JAVA的程序在集群上跑过。常见的是Fortran/C/C++的程序。 : 就软件工程来说,C++也不会比Java多50%以上的开发和维护时间。两者应该差不多。问 : 题是C++进化的现在,已经有些走火入魔了。C++对编程者的要求很高,需要知道那些是 : 精华,那些是糟粕。 : : 50%。
|
y**b 发帖数: 10166 | 114 看需求了,我们有台专用的supercomputer,
就特意装了java,因为有个模块是java编写
的,慢的一塌糊涂。
另外一台通用的supercomputer就没装。
【在 a9 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你们的超级计算中心的超级计算机上,装jre了吗?哈哈 : : 序。 : Java多 : 求是 : Java的
|
c****r 发帖数: 576 | 115 Matlab矩阵计算也就零点几秒,不用循环。
tic;
s = m * repmat((0:1999)',1,2000);
allsum = sum(s(:)) + sum(0:1999);
toc
Elapsed time is 0.478149 seconds |
t****t 发帖数: 6806 | 116 你这个是作弊了, 程序里那个外层循环是故意放在那里作重复计算等时间用的, 你给手
工优化掉了算什么?
【在 c****r 的大作中提到】![](/moin_static193/solenoid/img/up.png) : Matlab矩阵计算也就零点几秒,不用循环。 : tic; : s = m * repmat((0:1999)',1,2000); : allsum = sum(s(:)) + sum(0:1999); : toc : Elapsed time is 0.478149 seconds
|