怎样提高调用数学函数的程序的性能

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论


  结论
  本文向您提供了对 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

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答