由于我想在具有200多个子程序的现有软件中实现英特尔MKL库中的英特尔VML功能,因此我进行了时序比较测试。 子程序是用Fortran90编写的,通常使用大小(10 ^ 6)的数组运行。 我使用do循环和VML函数vsmul()实现了乘法的测试代码。我还测量了do循环和VML功能的时间。 结果是VML函数比do循环慢。我不确定我的方法是否正确。
所以我想要一些评论。我读了其他成员的帖子,但没有足够的信息。所以我再次在这里问。 我已经读过英特尔MKL库更快,但在我的情况下改变200个子程序中的方法之前我需要非常肯定。
我的代码如下:
PROGRAM TIME
IMPLICIT NONE
INCLUDE 'mkl.fi'
INTEGER :: i = 1000000, L
REAL, DIMENSION (1000000) :: z, y, O, a
INTEGER :: t1, t2, t3, t4
call system_clock(t1)
call rand_ms(z,i)
call rand_ms(y,i)
call system_clock(t2)
DO L=1,i
a(L)=z(L)*y(L)
ENDDO
!在这里,我使用do循环来计算时间 !乘以2个数组
call system_clock(t3)
call vsmul(i,z,y,O)
call system_clock(t4)
PRINT *, t2-t1, t3-t2, t4-t3
END PROGRAM TIME
!以下子程序用于生成随机数
!那些随机数将存储在一个数组中。
subroutine rand_ms(vec,vecsiz)
INTEGER :: L, vecsiz
REAL, DIMENSION (vecsiz) :: z, vec
INTEGER, DIMENSION (2) :: seed = (/1,2/), k=1
REAL :: num
CALL RANDOM_SEED (PUT=seed)
DO L = 1, vecsiz
CALL RANDOM_NUMBER(num)
vec(L)=num
END DO
end subroutine
输出如下:
t3-t2(Do loop)= 8秒
t4-t3(VML函数)= 49秒