主题:请教matmul效率, 跟Blas比较.
yeg001
[专家分:14390] 发布于 2010-04-22 00:44:00
请问有人把矩阵操作和向量操作运算跟BLAS的比较过吗? 如果有可不可以谈谈经验?
回复列表 (共56个回复)
41 楼
aliouying [专家分:1150] 发布于 2010-07-26 10:19:00
[quote]回楼上
是开源的, 要自己编译的.
近几天测试似乎MKL自带的BLAS也不差.[/quote]
MKL 库的blas是gotoblas.
网上看到的,也不知道对不对。
我去测试下windows平台下的gotoblas MKL文件夹里面的blas matmul 及自己写的矩阵乘法。
不知道有没有稀疏矩阵的blas? 基于CSR压缩的
42 楼
vehicle [专家分:310] 发布于 2010-07-26 10:26:00
MKL里有
43 楼
aliouying [专家分:1150] 发布于 2010-07-26 10:38:00
windows平台下,VS2008+IVF11.1.060,应用楼主的程序,/O3编译:
consumed CPU_time(s): 6.01562500000000
consumed CPU_time(s): 3.42187500000000
请按任意键继续. . .
采用命令行编译:
makefile:
FORTRAN = ifort
FFLAGS = /O3
LOADOPTS = mkl_intel_c.lib mkl_intel_thread.lib mkl_core.lib libiomp5md.lib
SRC = test_blas.obj
CDEFS =
test_blas: $(SRC)
$(FORTRAN) $(LOADOPTS) $(SRC) /exe:$@
@echo ====== compile test_blas ============
.f90.obj:
$(FORTRAN) $(FFLAGS) -c $< $(VERBOSE)
@echo ===== default Fortran compile =======
clean:
del -f *.obj *.mod test_blas.exe
@echo =========== Fortran clean finish =====================
reasult:
C:\Documents and Settings\Administrator\桌面\blas_test>test_blas.exe
consumed CPU_time(s): 5.98437500000000
consumed CPU_time(s): 3.43750000000000
改用/02:
IDE:VS2008
consumed CPU_time(s): 62.1093750000000
consumed CPU_time(s): 3.75000000000000
请按任意键继续. . .
make:
C:\Documents and Settings\Administrator\桌面\blas_test>test_blas.exe
consumed CPU_time(s): 58.8437500000000
consumed CPU_time(s): 3.43750000000000
另外,自己写的矩阵相乘应该很慢,等会把gotoblas编译后再测试测试
44 楼
aliouying [专家分:1150] 发布于 2010-07-26 10:43:00
[quote]
MKL里有[/quote]
这里面是有,但是不是开源的。
45 楼
aliouying [专家分:1150] 发布于 2010-07-26 11:29:00
啊..啊.. 头晕!!
windows下改linux的makefile 头晕乎乎的!!
看来linux还是王道啊!
期待某位仁兄改吧~
46 楼
aliouying [专家分:1150] 发布于 2010-07-26 20:55:00
晚上没事折腾,把gotoblas的源代码拿出来测试了下,嘿嘿,速度确实快!
FORTRAN = ifort
FFLAGS = /O3 /fast /QxHost
LOADOPTS = # mkl_intel_c.lib mkl_intel_thread.lib mkl_core.lib libiomp5md.lib
SRC = test_blas.obj dgemmf.obj lsamef.obj
CDEFS =
test_blas: $(SRC)
$(FORTRAN) $(LOADOPTS) $(SRC) /exe:$@
@echo ====== compile test_blas ============
.f90.obj:
$(FORTRAN) $(FFLAGS) -c $< $(VERBOSE)
@echo ===== default Fortran compile =======
.f.obj:
$(FORTRAN) /fixed $(FFLAGS) -c $< $(VERBOSE)
@echo ===== default Fortran compile =======
clean:
del -f *.obj *.mod test_blas.exe
@echo =========== Fortran clean finish =====================
自己写了个子程序XERBLA,可以注释掉,没用到,出错提示用的~。
reasult:
C:\Documents and Settings\Administrator\桌面\NR\blas_test>test_blas.exe
consumed CPU_time(s): 6.39062500000000
consumed CPU_time(s): 4.687500000000000E-002
47 楼
vehicle [专家分:310] 发布于 2010-07-26 21:21:00
[quote][quote]
MKL里有[/quote]
这里面是有,但是不是开源的。[/quote]
“SPARSKIT2”有源码
48 楼
aliouying [专家分:1150] 发布于 2010-07-26 23:28:00
[quote][quote][quote]
MKL里有[/quote]
这里面是有,但是不是开源的。[/quote]
“SPARSKIT2”有源码
[/quote]
sparselib++
petsc
都有~
49 楼
cgl_lgs [专家分:21040] 发布于 2010-07-30 21:55:00
用PBLAS试了一下,双核单CPU+MPICH2环境。
yeg001兄的大矩阵用PBLAS还行,效率又会有不稳定的提高:)
但用俺自己的小矩阵~~~~
俺滴妈呀,速度比用BLAS慢上了10倍~~~~~
时间全耗在通信上了。。。
明儿试试多机情况:)
50 楼
yeg001 [专家分:14390] 发布于 2010-07-31 01:30:00
GOTOBlas默认编译是前机器核心数相应并行版本.
我也不清楚它是基于什么做的并行了. 可能是更底层操作.
如果大家关心Blas并行情况的话, cgl_lgs测试PBLAS, 我也找个时间算算, 贴个GOTOBlas并行版本的测试结果.
我来回复