回 帖 发 新 帖 刷新版面

主题:请教matmul效率, 跟Blas比较.

请问有人把矩阵操作和向量操作运算跟BLAS的比较过吗? 如果有可不可以谈谈经验?

回复列表 (共56个回复)

41 楼

[quote]回楼上
是开源的, 要自己编译的.
近几天测试似乎MKL自带的BLAS也不差.[/quote]

MKL 库的blas是gotoblas.
网上看到的,也不知道对不对。

我去测试下windows平台下的gotoblas MKL文件夹里面的blas  matmul 及自己写的矩阵乘法。

不知道有没有稀疏矩阵的blas? 基于CSR压缩的

42 楼


MKL里有

43 楼

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 楼

[quote]
MKL里有[/quote]

这里面是有,但是不是开源的。

45 楼

啊..啊.. 头晕!!
windows下改linux的makefile 头晕乎乎的!!
看来linux还是王道啊!
期待某位仁兄改吧~

46 楼

晚上没事折腾,把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 楼

[quote][quote]
MKL里有[/quote]

这里面是有,但是不是开源的。[/quote]
“SPARSKIT2”有源码

48 楼

[quote][quote][quote]
MKL里有[/quote]

这里面是有,但是不是开源的。[/quote]
“SPARSKIT2”有源码
[/quote]

sparselib++
petsc
都有~

49 楼

用PBLAS试了一下,双核单CPU+MPICH2环境。
yeg001兄的大矩阵用PBLAS还行,效率又会有不稳定的提高:)
但用俺自己的小矩阵~~~~
俺滴妈呀,速度比用BLAS慢上了10倍~~~~~
时间全耗在通信上了。。。

明儿试试多机情况:)

50 楼

GOTOBlas默认编译是前机器核心数相应并行版本.
我也不清楚它是基于什么做的并行了. 可能是更底层操作.
如果大家关心Blas并行情况的话, cgl_lgs测试PBLAS, 我也找个时间算算, 贴个GOTOBlas并行版本的测试结果.

我来回复

您尚未登录,请登录后再回复。点此登录或注册