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 |
t*****z 发帖数: 812 | 2 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 |
s**x 发帖数: 7506 | 3 别自欺欺人了, java 的效率跟 c++ 根本没法比。 |
t***a 发帖数: 416 | 4 不至于。。。楼主这种纯计算型的小程序,差不了多少的
但只要c++实现的别太sb, 编译器别犯傻,java真不太不可能比c++快
【在 s**x 的大作中提到】 : 别自欺欺人了, java 的效率跟 c++ 根本没法比。
|
s******e 发帖数: 493 | 5 if you knew java history, you would know that Java was designed for
enterprise application rather than mathematical calculation. that is the
reason why almost nobody uses it for scientific programming. |
t***a 发帖数: 416 | 6 你说的前半段我同意,但1.6之后,纯计算的程序跑起来数据已经很接近了,你可以看
这个算pi的比较。
http://left404.com/2011/12/01/bytecode-v-native/
java在科学计算里的排名我没找到,但我估计c/c++后面也就fortran, java,c#这几个
,用的人也不会太少的
【在 s******e 的大作中提到】 : if you knew java history, you would know that Java was designed for : enterprise application rather than mathematical calculation. that is the : reason why almost nobody uses it for scientific programming.
|
N***m 发帖数: 4460 | 7 in general, fortran is faster than c
【在 t***a 的大作中提到】 : 你说的前半段我同意,但1.6之后,纯计算的程序跑起来数据已经很接近了,你可以看 : 这个算pi的比较。 : http://left404.com/2011/12/01/bytecode-v-native/ : java在科学计算里的排名我没找到,但我估计c/c++后面也就fortran, java,c#这几个 : ,用的人也不会太少的
|
z****e 发帖数: 54598 | 8 一个是这么多年硬件性能的飞跃使得纯粹软件运行速度上的差异越来越小
另外一个是这些年java本身虚拟机软件的优化,也使得这个class执行性能逼近甚至超
过菜鸟们自己写的程序
凡事讲究一个积累,就像汇编跟c一样,结构才是硬道理
【在 t***a 的大作中提到】 : 你说的前半段我同意,但1.6之后,纯计算的程序跑起来数据已经很接近了,你可以看 : 这个算pi的比较。 : http://left404.com/2011/12/01/bytecode-v-native/ : java在科学计算里的排名我没找到,但我估计c/c++后面也就fortran, java,c#这几个 : ,用的人也不会太少的
|
T****U 发帖数: 3344 | 9 听有人说,他们做的比较研究,java比c++的执行效率只低10%, 考虑到现在cpu的速度
,这个差别大多数情况都可以忽略或者被其他因素掩盖了。
【在 z****e 的大作中提到】 : 一个是这么多年硬件性能的飞跃使得纯粹软件运行速度上的差异越来越小 : 另外一个是这些年java本身虚拟机软件的优化,也使得这个class执行性能逼近甚至超 : 过菜鸟们自己写的程序 : 凡事讲究一个积累,就像汇编跟c一样,结构才是硬道理
|
g*****g 发帖数: 34805 | 10 取决定性作用的从来是类库和legacy code。就算java够快,
port类库和代码也是很大的工作量。所以任何领域是很难
改变开发语言的。只有mobile这样从wm,symbian到ios, android,
你才会看到C++程序员纷纷转行。
【在 T****U 的大作中提到】 : 听有人说,他们做的比较研究,java比c++的执行效率只低10%, 考虑到现在cpu的速度 : ,这个差别大多数情况都可以忽略或者被其他因素掩盖了。
|
|
|
t***a 发帖数: 416 | 11 这我信,fortran编译器可是盯着矩阵乘法这类东西猛做优化的。。。。
【在 N***m 的大作中提到】 : in general, fortran is faster than c
|
s********r 发帖数: 55 | 12 同一个程序我用Fortran写过,gfortran 和ifort 都编译过
Fortran比C慢不少,有接近10倍的速度差
【在 N***m 的大作中提到】 : in general, fortran is faster than c
|
a***n 发帖数: 538 | |
s*****u 发帖数: 164 | 14 $ javac jmatrix.java
$ time -p java jmatrix
java allsum=1.8658666E16
real 32.97
user 32.46
sys 0.23
$ g++ -O3 -arch x86_64 cmatrix.cpp
$ time -p ./a.out
c++ allsum=1.86587e+16
real 16.48
user 16.17
sys 0.10 |
G*F 发帖数: 427 | 15 比矩阵速度的话用matlab做基准就可以了,没matlab的话用python加MKL enabled的
numpy也可以np.dot(A, B)
不过java或c++真是很少用在数值计算上。前段时间我要算的一个11K*350K的矩阵,来
个A * A',要是用楼主那样用loop来算,那得算到哪年去啊。 |
g*****g 发帖数: 34805 | 16 try java -server
【在 s*****u 的大作中提到】 : $ javac jmatrix.java : $ time -p java jmatrix : java allsum=1.8658666E16 : real 32.97 : user 32.46 : sys 0.23 : $ g++ -O3 -arch x86_64 cmatrix.cpp : $ time -p ./a.out : c++ allsum=1.86587e+16 : real 16.48
|
b******y 发帖数: 9224 | 17 其实早就有说法,java的某些array操作比c++快。 |
r******n 发帖数: 4522 | 18 hotspot JVM带动态优化,你如果能根据硬件手动优化C++编译,最后结果还是C++快,
但这种纯运算差距不会太大。关键大多数人不会去手动优化C++, 也未必事先知道将来
deploy的硬件平台,这样JVM就有优势。速度只是一项指标,如果考虑其它资源,内存
啥的JVM肯定不如C++高效。你要是用-server跑Java会发现更快,当然内存也用得更多。 |
a***n 发帖数: 538 | 19 我也试了一下,发现java用180%的cpu。难道是自动并行了? |
n*******0 发帖数: 2002 | 20 扯淡。你要是真想test jit编译器的性能就-Xcomp,看看能快成啥样。
【在 b******y 的大作中提到】 : 其实早就有说法,java的某些array操作比c++快。
|
|
|
o*****n 发帖数: 94 | 21 正解
【在 G*F 的大作中提到】 : 比矩阵速度的话用matlab做基准就可以了,没matlab的话用python加MKL enabled的 : numpy也可以np.dot(A, B) : 不过java或c++真是很少用在数值计算上。前段时间我要算的一个11K*350K的矩阵,来 : 个A * A',要是用楼主那样用loop来算,那得算到哪年去啊。
|
S****h 发帖数: 558 | 22 The default garbage collector in hotspot jvm is in the different thread. So
yes, in that sense, java automatically does some parallel.
【在 a***n 的大作中提到】 : 我也试了一下,发现java用180%的cpu。难道是自动并行了?
|
m****u 发帖数: 3915 | |
C***U 发帖数: 2406 | 24 用blocking的办法能加快速度
不要直接去算
【在 G*F 的大作中提到】 : 比矩阵速度的话用matlab做基准就可以了,没matlab的话用python加MKL enabled的 : numpy也可以np.dot(A, B) : 不过java或c++真是很少用在数值计算上。前段时间我要算的一个11K*350K的矩阵,来 : 个A * A',要是用楼主那样用loop来算,那得算到哪年去啊。
|