主题:[讨论]matmul对几种情况的测试报告,望指点
alsoran
[专家分:760] 发布于 2012-01-09 15:15:00
我的试验环境是 在/O3的速度优化条件下,用两个1000×1000的矩阵相乘
分4种情况:
1.固定矩阵之间相乘;
2.可分配矩阵相乘;
3.自定义数据的固定矩阵相乘;
4.自定义数据的可分配矩阵相乘。
测试代码在附件内,我的测试结果如下:
matmul(fixed,fixed) costs 0.4524 sec
matmul(alloc,alloc) costs 0.5460 sec
matmul(mytype.fixed,mytype.fixed) costs 0.4368 sec
matmul(mytype.alloc,mytype.alloc) costs 26.6606 sec
因为我的程序里都是自定义数据的可分配矩阵相乘,而测试结果显示其速度很慢
请教大家此缘由,如能提供有效措施解决该问题,不甚感谢
最后更新于:2012-01-09 16:42:00
回复列表 (共12个回复)
沙发
yeg001 [专家分:14390] 发布于 2012-01-09 15:56:00
可否简化或者提取出一个小程序供大家测试一下? 表上上找不到原因可能要雪球大哥反汇编来看看.
板凳
yeg001 [专家分:14390] 发布于 2012-01-09 16:13:00
我挺怀疑是不是因为矩阵的数据被分配在不连续的区域导致运算速度下降那么多.
3 楼
alsoran [专家分:760] 发布于 2012-01-09 16:20:00
但是单单用allocate一个矩阵也是不连续的存储,但是1、2两个时间对比并没有多少差距啊
已更新附件,里面有精简后的两个自定义数据类型矩阵的比较
4 楼
yeg001 [专家分:14390] 发布于 2012-01-09 20:37:00
楼主, 我在我们的工作站上编译测试了一下. 结果如下.
[haoxiang@w48G267 ForOutsideFirends]$ ifort -v
Version 12.0.5
[haoxiang@w48G267 ForOutsideFirends]$ ifort -O3 TESTmatmul.f90 -o matmul
[haoxiang@w48G267 ForOutsideFirends]$ ./matmul
matmul(fixed,fixed) costs 0.0440 sec
matmul(alloc,alloc) costs 0.0450 sec
matmul(mytype.fixed,mytype.fixed) costs 0.0660 sec
matmul(mytype.alloc,mytype.alloc) costs 0.0430 sec
[haoxiang@w48G267 ForOutsideFirends]$ ifort -O3 TESTmatmul_lite.f90 -o matmul_lite
[haoxiang@w48G267 ForOutsideFirends]$ ./matmul_lite
matmul(mytype.fixed,mytype.fixed) costs 0.3250 sec
matmul(mytype.alloc,mytype.alloc) costs 0.3429 sec
似乎在我的环境里面还是算的挺快的. 内存怎么分配我也不清楚.
5 楼
alsoran [专家分:760] 发布于 2012-01-09 21:53:00
谢谢了,我也换了几台电脑试了试,但还是这个很慢的结果。
难道是工作站的处理器和内存不一样的架构导致的?
6 楼
yeg001 [专家分:14390] 发布于 2012-01-09 23:01:00
我把非fortran标准的"."换成"%"之后.
用gfortran 4.5.2编译. TESTmatmul.f90 编译不通过:
[haoxiang@w48G267 Test_type_alloc]$ gfortran -O2 TESTmatmul.f90 -o matmul
f951: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
似乎是说遇到什么内部bug...
! *********************************************************
不过另一个文件编译通过.
[haoxiang@w48G267 Test_type_alloc]$ gfortran -O3 TESTmatmul_lite.f90 -o matmul_lite
[haoxiang@w48G267 Test_type_alloc]$ ./matmul_lite
matmul(mytype%fixed,mytype%fixed) costs 3.3425 sec
matmul(mytype.alloc,mytype.alloc) costs 3.3445 sec
运行时间比ifort慢主要是intel在-O3的时候对matmul进行了优化(这个在以前的一个测试贴大家有讨论到). 但在这个程序看来两种数据方式在时间上也没有拉开距离.
我windows已经很久没有装ivf了.没有在win里面试试. 工作站确实内存比较多,有48G. cpu当然二级缓存也相比台式机的大不少.具体是不是这些原因导致我说不清楚. ^_^
7 楼
alsoran [专家分:760] 发布于 2012-01-10 00:39:00
不能再加分了……谢谢继续关注本贴
也就是说普通的PC会得到这样的很大差异的结果,换工作站那种精简指令的处理器的话速度就没有差别了,继续请教大家并挖掘其中的原因~~
8 楼
yeg001 [专家分:14390] 发布于 2012-01-10 11:05:00
我们的工作站是intel的Xeon5600系列. 还不是精简指令的cpu. 其实就相当于增强版的桌面cpu.
9 楼
pasuka [专家分:670] 发布于 2012-01-10 11:32:00
差别没有那么明显
Q8200 win7 + ivf 12
E:\fortran_code>ifort /o3 /heap-arrays "TESTmatmul.f90" /o matmul
Intel(R) Visual Fortran Compiler XE for applications running on IA-32, Version 12.0.5.221 Build 20110719
E:\fortran_code>matmul
matmul(fixed,fixed) costs 0.2028 sec
matmul(alloc,alloc) costs 0.2184 sec
matmul(mytype.fixed,mytype.fixed) costs 0.1872 sec
matmul(mytype.alloc,mytype.alloc) costs 0.2496 sec
10 楼
alsoran [专家分:760] 发布于 2012-01-10 13:16:00
这样的话,你们的桌面处理器也得到相同的结果,那难道是我们这儿的电脑都有问题,我继续看看~
命令行编译和在IDE里编译是不是有区别……
我来回复