英特尔VML与传统方法(Fortran)的性能比较

时间:2014-10-24 14:20:08

标签: fortran performance-testing intel-mkl

由于我想在具有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秒

0 个答案:

没有答案