本文向您提供了对 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 汇编器的自动向量化加速中获益。
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博客 ” ,链接:http://blog.itpub.net/16896827/viewspace-1036477/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/16896827/viewspace-1036477/