ITPub博客

首页 > IT职业 > IT生活 > ZT - 怎样提高调用数学函数的程序的性能(4)

ZT - 怎样提高调用数学函数的程序的性能(4)

原创 IT生活 作者:saintsiro 时间:2010-08-08 18:45:27 0 删除 编辑

结论

本文向您提供了对 IBM MASS 库以及 IBM XL C/C++ 和 XL Fortran 汇编器的自动向量化功能的描述。另外,本文演示了对范例程序(离散 Fourier 转变)使用各种汇编器选项的操作,向您展示了通过使用 MASS 自动向量化的自动调用功能,使得与以前版本相比速度提高了 8.94 倍的效果。

[@more@]

结论

本文向您提供了对 IBM MASS 库以及 IBM XL C/C++ 和 XL Fortran 汇编器的自动向量化功能的描述。另外,本文演示了对范例程序(离散 Fourier 转变)使用各种汇编器选项的操作,向您展示了通过使用 MASS 自动向量化的自动调用功能,使得与以前版本相比速度提高了 8.94 倍的效果。

这种演示想要通过一种程序来鼓励用户,这种程序会访问数学函数以验证可用的汇编器选项,并从 IBM XL C/C++ 或者 XL Fortran 汇编器的自动向量化加速中获益。


附录 1 – Fortran DFT 源程序

  subroutine dft (x, a, phi , n)
    real*8 x(n), a(n), phi(n)
    integer n

    ! Compute discrete Fourier transform of real inputs         
    ! x(i) and convert to polar form.

    real*8, parameter :: pi=3.1415926535897932384d0
    real*8 y_re(n), y_im(n), t, term_re, term_im
    intrinsic exp, cos, sin, sqrt, atan

    y_re(1:n) = 0.d0
    y_im(1:n) = 0.d0
    do k=1,n
      ! compute y(k), k-th DFT output
      do i=1,n
        ! compute i-th term of y(k):
        ! x(k)*exp(-2*pi*I*(k-1)*(i-1)/n)
        ! compute real and imaginary parts of i-th term
        ! using exp(I*t)=exp(t)*(cos(t)+I*sin(t))

        t = -2.d0*pi*(k-1)*(i-1)/n
        term_re = x(i) * cos(t) * exp(t)
        term_im = x(i) * sin(t) * exp(t)

        ! add term to sum
        y_re(k) = y_re(k) + term_re
        y_im(k) = y_im(k) + term_im
      end do
    end do

    ! transform y to polar coordinates
    do k=1,n
      ! compute amplitude of y(k)
      a(k) = sqrt (y_re(k)**2 + y_im(k)**2)
      ! compute phase of y(k)
      phi(k) = atan (y_im(k) / y_reim(k))
    end do

  end subroutine

  ! initialize input data
  subroutine init (a, n)
    real*8 a(n)
    integer n
    intrinsic sin,sqrt
    
    do j=1,n
      a(j)=sin(1.d0/sqrt(real(j,8)))
    end do
  end subroutine

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16896827/viewspace-1036477/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    30
  • 访问量
    13375