p**o 发帖数: 3409 | 1 矩阵运算还是调BLAS/Lapack好了,提供了C的接口,调起来也方便。
考虑了对不同cpu的各种优化策略(尤其是对mem bus的优化),
光是矩阵相乘(level-3 BLAS)的实现就有十几万行fortran代码,
你自己裸写拿来练手可以,生产环境基本没法用的。 |
|
x*******1 发帖数: 28835 | 2 matlab就是一个壳,什么C阿,fortran阿,就是掉lapack |
|
p**o 发帖数: 3409 | 3 MATLAB用C++封装了Intel MKL的BLAS/LAPACK。
MKL是Fortran写的,要求调用者遵循Fortran conventions,
比如传地址而不是传值,存储用column-major,等等。 |
|
N******K 发帖数: 10202 | 4 在图像法分析领域 涉及到大矩阵运算 Java本身语言不支持 连续存储的多维矩阵(数
组)
所以Java要搞有效的线性代数运算 1. 从轮子开始造 2. JNI调用 eigen/Lapack等c++/
fortran库
就算用2, 大矩阵运算JNI本身的时间消费可以忽略,但是小矩阵用JNI还不如Java写
for循环。这个问题,还得自己造轮子来解决。
即是从轮子开始造,纯Java写的线性代数库比C++/fortran的慢了n倍(有人测试过10倍)
如果就搞搞小图片,你用纯Java的倒也无所谓。 搞大图像的复杂分析,比如配准、分
割、跟踪、识别,比如医学图像分析,C++无论从速度,还是现有的库的支持,都胜过
Java
再说机器学习领域
libsvm就是c++的 现在最火的spase coding得靠C++, deep neural network
learning 得靠C++和GPU
Java搞网站系统应用很好,但是到了算法这个层面,就是不如C++ |
|
x*******1 发帖数: 28835 | 5 扯什么蛋了。matlab 不就用Lapack在底层。没听说jack dongarra, clev moler |
|
h*******u 发帖数: 15326 | 6 一个lapack就全照了?要骂人我就撤了
★ 发自iPhone App: ChineseWeb 7.8 |
|
N******K 发帖数: 10202 | 7 哈哈 手误而已 int 32位
没有连续多维数组 造成的矩阵运算麻烦 以及调用lapack等线性代数库的速度问题 不
是你能想象的 |
|
g*****g 发帖数: 34805 | 8 得,你说话够不靠谱的。说的3句话,两个帖子下来就证明错了2句。就剩一句java性能
不如c/fortran,地球人都知道的废话。实在没啥好争的,java本来就不是针对科学计
算设计的。你干脆说java没有指针,没法做内存操作,是作茧自缚,直接把自己踢出了
系统编程的领域。
发信人: NatureOK (ok), 信区: Programming
标 题: Re: java在数组上的问题:作茧自缚
发信站: BBS 未名空间站 (Sat Mar 23 16:58:31 2013, 美东)
哈哈 手误而已 int 32位
没有连续多维数组 造成的矩阵运算麻烦 以及调用lapack等线性代数库的速度问题 不
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
是你能想象的 |
|
g*****g 发帖数: 34805 | 9 那是你自己的表达能力有问题,既然后面提到的是速度问题,还用了个以及,前面想必
说的是实现的麻烦。没听说过用麻烦来形容性能问题的。
发信人: NatureOK (ok), 信区: Programming
标 题: Re: java在数组上的问题:作茧自缚
发信站: BBS 未名空间站 (Sat Mar 23 16:58:31 2013, 美东)
哈哈 手误而已 int 32位
没有连续多维数组 造成的矩阵运算麻烦 以及调用lapack等线性代数库的速度问题 不
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
是你能想象的 |
|
N******K 发帖数: 10202 | 10 没有连续多维数组 造成的矩阵运算麻烦 以及调用lapack等线性代数库的速度问题 不
是你能想象的
这句话 你能推理出 java不能实现矩阵运算 说明你已经进化到那美克星人层次 |
|
N******K 发帖数: 10202 | 11 matlab oop 也很不错
只不过 多线程啥的 没有
如果你这个语言搞的 从计算层面看 语法=matlab 从程序结构和流程看 语法类似java
最好矩阵运算 能支持matlab那种语法 支持调用lapack等线性代数库 对c/c++接口用
起来简单
这样的话 至少研究机构都会采用这个语言 替代python |
|
N*******t 发帖数: 66 | 12
ok) 的大作中提到: 】
好久没碰matlab了,难道它的oop改进了
觉得现在通用语言必须支持并行计算,
没这个很难讲是门好的语言。
java
感觉java语法有点繁琐。
曾经支持过blas,lapack等,准备再重新做一下,
并增加对矩阵运算的支持。
另外还打算用opencl实现些并行的矩阵运算:)
希望能这样吧 |
|
N******K 发帖数: 10202 | 13 matlab 调用lapack等库 和c调用 没啥区别 |
|
|
w***g 发帖数: 5958 | 15 blitz++这东西用的不小心性能非常低(但是后来发现了能fix), 我受过其害.
C++的问题是BOOST的目的好像更多的是追求语言上的巧妙, 而不是追求解决实际问题的
方便和高效. 既然你上C++了, 最好的办法是用blitz++/ublas分配内存, 背后上blas和
lapack. |
|
N******K 发帖数: 10202 | 16 广泛使用的是 免费的lapack 或者intel版本的mtk
显然你不熟悉科学计算这个领域
Don' |
|
b*******s 发帖数: 5216 | 17 这个人说得差不多,供您参考:
java的问题不是复杂,而是java语言本身不够复杂。比如这个接口的问题,哪怕增加个
default value,都能简化至少一半的API。
就因对世界的复杂性而言,任何语言都是一样的。
世界是复杂的,而java语言是简单的,所以才导致设计和库的复杂,这才是java复杂性
的根源。
比如对于上述的没有default value的问题,就冒出一个builder pattern来解决。
当实现一个目的有几条路可以走的时候,有的语言会选择增加一个语法糖来支持,有的
语言会选择通过API来支持,
而java更倾向于弄一套framework,或者design pattern来支持。
你可以说这是作为一个enterprise级语言的考虑,但我想说的是,如果任何时候都需要
这么做,那overhead太大了。
Java语言的基本思路就是,人力是廉价的,所以即使有些overhead,只要这种设计能通
过堆人力来解决,那么就这么做。
这种思路只适合于工人,不适合于像我这样的另一类人。
至于java的生态圈积累,其实java是另一种思路。java为了跨平台,更倾向于从底层开
始... 阅读全帖 |
|
n****1 发帖数: 1136 | 18 只是subset of IEEE 754, 有些没支持的
还有就是python/matlab/R这些东西底层矩阵运算用的都是lapack那一套. 如果用scala
/closure,底层又不是这一套的话, 计算结果非常有可能和别人不一样. |
|
n****1 发帖数: 1136 | 19 在个人project里面动态语言是没啥问题的, 可是一旦牵涉到第三方类库问题就很严重
了。 因为动态语言的bug更多是公认的, 自己的code bug容易fix, 别人的code里面有
bug就只能求神拜佛了。
但动态语言做glue code优势巨大, 譬如jython可以很方便的load java class, 把他
们动态地组合在一起, 比起在java里面捣鼓reflection/classloader要方便多了。 我
觉得这样实现dependency injection比些XML更灵活, 效率更高,也更轻量。
python在科学技术里面也只是起到glue code的作用, 把lapack这些C库组合在一起,
既有性能也有灵活性。
JVM上的开源资源太丰富了,对于平时只是拿开源库搭积木的人来说, JVM上的动态语
言可以集两家之所长, 还能保证动态语言的危害在自己可控的范围之内。
Just my 2cents,欢迎拍砖。 |
|
s*****u 发帖数: 164 | 20 需要调用 lapack 的话,我都是写个 wrapper ,原地操作,基本上没有 overhead 。 |
|
z*******3 发帖数: 13709 | 21 read this
old man
Why Renjin?
We built Renjin, a new interpreter for the JVM because we wanted the beauty,
the flexibility, and power of R with the performance of the Java Virtual
Machine.
Bigger data
R has been traditionally limited by the need to fit data sets into memory,
and working with even modest sets of data can quickly exhaust memory due to
historical limitations in GNU R interpreter’s implementation.
Renjin will allow R scripts to transparently interact with data wherever it
’s stored,... 阅读全帖 |
|
c****t 发帖数: 19049 | 22 当然不用matlab和sas啦
工具弱当然也得用。小孩们又不懂最新的东东。不过现成的东东没法成明天的主流啊
renjin是肯定不用的。弄这玩意还要雇个码工admin/maintain。多买几个GPU账面上还
可以depreciation便宜多了
littlebirds老师觉得奇怪我倒不觉得。java近几年快了不少,不少没啥大用的
numerical测试都显试java/C++也就是个2.0,当然还比不上C。如果java这边用了blas,
lapack或intel那个专门做弊的mxl而另一边C/C++没用,那java这边快也不奇怪。不过
对于现在的modeling,这都没用。 |
|
N******K 发帖数: 10202 | 23 别激动 我没说不用你的 eigen
我的库 底层调用的是 armodillo 的一些函数 我不用自己lapack等的接口
最近要用 congjugate 算法 我就把eigen调用就行了
搜一搜我以前的文章 你就知道我搞这个库干啥了
矩阵表达式 我的库完全和matlab一致 方便把研究项目的代码 变为c++的代码 |
|
w***g 发帖数: 5958 | 24 go的concurrency跟scientific computing是两条路子,我觉得你可能等不来那天了。
科学计算的话我觉得还是MPI, openmp, C++, lapack, 外加外面包个scipy比较靠谱。 |
|
d********f 发帖数: 43471 | 25 作hpc的谁需要stl?这东西有什么用?blas/lapack,fft这些早就有了 |
|
N******K 发帖数: 10202 | 26 blas/lapack,fft 就是所有算法了?
最近搞几个新的图像分析算法 c++的 thread很好用 包装成并行for 不用openmp |
|
L***s 发帖数: 1148 | 27
I used to compile and install ATLAS,
and I was aware of two kinds of optimization:
1. Matrix/vector multiplication is done at the block-level,
as opposed to element-wise. So it has to be knowledgeable
on your memory hierarchy, e.g., speed and sizes of your
register, L1/L2/L3 caches, main memory, etc.
ATLAS picks the best preset parameters accordingly.
2. ATLAS performs local search on the best preset parameters,
conducts actual performance profiling, and picks the best set
of empirical paramet... 阅读全帖 |
|
L***n 发帖数: 6727 | 28 我倒是觉得可能,哈哈,但是需要时间让scipy的bug收敛到比较低的水平,
我希望你的五年的预言可以实现,其实基本的数值线性代数大家都用BLAS
LAPACK, blabla,这部分做好了起码我会转向Scipy,毕竟调用方式比MATLAB
方便多了。python作为语言也比matlab感觉强多了,哈哈 |
|
j****x 发帖数: 943 | 29 有人知道为什么numpy没有wrap LAPACK 和 ScaLAPACK吗? license问题吗? |
|
V*********r 发帖数: 666 | 30
你确认自己弄清楚lapack是什么了吗?
这就跟说“水果没有香蕉好吃”一样 |
|
j****x 发帖数: 943 | 31 LAPACK has driver routines that can solve standard eigenvalue problem or
singular value problem. The previous posts are discussing the eigenvalue
problem in numpy. What's your point? |
|
j****x 发帖数: 943 | 32 sparse:dense vs ARPACK:LAPACK vs orange:apple ? |
|
h**********c 发帖数: 4120 | 33 好象有的cpu /gpu 架构可以压缩array到处理单元
把lapack. linpack, tnt 挂上去 |
|
D***n 发帖数: 6804 | 34 netlib-java is a wrapper for low-level BLAS, LAPACK and ARPACK that performs
as fast as the C / Fortran interfaces.
只是个Java Warpper而已,真正干活的还是Fortran. 你好意思拿Warpper来比speed?
通过这个事情,鉴定你连大名鼎鼎的netlib都不知道,谈个毛的分布式计算。 |
|
|
|
w*x 发帖数: 518 | 37 也对…在底层应用还是很多的,lapack, 不过都是很老的东西了…
[发表自未名空间手机版 - m.mitbbs.com] |
|
h**********c 发帖数: 4120 | 38 you can try port lapack linpack to cuda. |
|
S****8 发帖数: 401 | 39 恩,多谢哈, 我也是身边没k40这种GPU所以想折腾下CPU的效率
你是说其实performance还是差在没能利用mkl或者atlas这种blas库上面是吧,
回头我试试, blas/lapack这块有很多c++ template library 挺高效的用起来也方便
, 看看能不能搞到 caffe里面去, 比如FLENS |
|
w***g 发帖数: 5958 | 40 对:用了blas,但是没用好。
如果真心要搞图像类的deep learning,一千块钱买个titan X,
能省你很多事,train整个imagenet都够了。
现在很多算法都还在剧烈地改,你折腾CPU优化从长远看很可能是
premature optimization。
blas/lapack的C++ template library我看过不少,都比较鸡肋。
你见过啥好的给推荐下吧。 |
|
S****8 发帖数: 401 | 41 恩,多谢哈, 我也是身边没k40这种GPU所以想折腾下CPU的效率
你是说其实performance还是差在没能利用mkl或者atlas这种blas库上面是吧,
回头我试试, blas/lapack这块有很多c++ template library 挺高效的用起来也方便
, 看看能不能搞到 caffe里面去, 比如FLENS |
|
w***g 发帖数: 5958 | 42 对:用了blas,但是没用好。
如果真心要搞图像类的deep learning,一千块钱买个titan X,
能省你很多事,train整个imagenet都够了。
现在很多算法都还在剧烈地改,你折腾CPU优化从长远看很可能是
premature optimization。
blas/lapack的C++ template library我看过不少,都比较鸡肋。
你见过啥好的给推荐下吧。 |
|
|
w***g 发帖数: 5958 | 44 现在折腾数据的主流是解释型语言,配个jupytor notebook。
这个要先编译到C,易用性上直接就被julia吊打啊。
折腾计算的,其实搞来搞去就是做了blas/lapack/fft这些的包装,
现在再加个cuda. 函数型语言最喜欢搞的类型系统其实对科学
计算帮助并不大。 |
|
y*j 发帖数: 3139 | 45 科学计算成功的语言就是Matlab,它能够存在多年不倒是有道理的。解释型语言,集成
环境,丰富的系统库,相当大的ecosystem。当然它不免费,不开源,所以现在Pyhthon
抢了不少市场。我对python取代Matlab感觉不足的地方是它缺少一个像Matlab那样好用
的IDE,现在Spyder算是比较接近的,但是好像还差一点,Debug功能非常差,画图的部
分比Matlab粗糙多了。
:现在折腾数据的主流是解释型语言,配个jupytor notebook。
:这个要先编译到C,易用性上直接就被julia吊打啊。
:折腾计算的,其实搞来搞去就是做了blas/lapack/fft这些的包装,
:现在再加个cuda. 函数型语言最喜欢搞的类型系统其实对科学
:计算帮助并不大。 |
|
h*i 发帖数: 3446 | 46 JVM主要是用来做企业应用的,Clojure也是。你说的这些统计ML之类,如果是搞来玩,
学术用用的话,JVM基本没有什么可用的。因为这些玩意,老实说企业应用很少需要的
,听起来很火,其实没啥用。真要用到统计ML之类,基本上都是自己搞,作一些简单实
用的算法。大体上都是线下训练,用R, python之类来训练,线上用自己写的生产代码
。现在DL很火,其实企业用的地方也很少。
Clojure现在有一些原生线性代数的库,比如neanderthal,可以直接调BLAS和LAPACK,
也可以直接用GPU,所以性能和别的语言差不多。
DL也有Clojure的框架,比如有个小公司搞了个叫cortex的,可以看看。
programming |
|
g****t 发帖数: 31659 | 47 现在整个软件practice的时代已经不同了。软件不是只coding.
设计和做软件之前就要先看好tools各种依赖性和了解各种坑。
这是技术含量非常高的一件事。
Python语言问题不少。但是库还是非常强大的。
除了python和c ,还有哪个通用语言有稳定可靠的BLAS,LAPACK之类的矩阵计算,5年历
史以上的封装库?Web后台开发等等也一样。
历史长不代表着没问题。但是往往代表着出问题后能找到
别人的解决办法。
: 说实话, python 大概是主流语言里设计最糟糕的一个
: 我有时候看到现在的新语言,老是怀念当年的pascal
|
|
发帖数: 1 | 48
blas lapack 哦, fortuna, 哈哈哈 |
|
g****t 发帖数: 31659 | 49 你不要笑
现在矩阵计算正热门
懂矩阵计算的马工和不懂的,现在大有区别
: blas lapack 哦, fortuna, 哈哈哈
|
|
发帖数: 1 | 50
我的意思是能用blas lapack 的还有fortran , 故意打成了 fortuna... 哈哈
我其实一直都这么觉得, 编程能力始终就是个技能,并不是核心的东西, 核心的东西
是对某个行业的真正理解, 如果只是刷刷leetcode的算法,其实真混不到什么牛逼的
地步
我知道有哥们拿vb编的小程序,照样卖几千万的, 因为基本是那行业的独一份 |
|