ディレクティブを入れるだけでGPGPUを動かす

出典: トータル・ディスクロージャ・サイト(事実をありのままに)

 CPU用行列積のプログラムを最小の手間でGPGPUで動かします。PGIコンパイラを使えば、CPUで動いているプログラムにディレクティブを入れるだけで、GPGPU用のプログラムになります。OpenMPを使うような感じですね。以下のプログラムをご覧ください。GPGPUで実行させたいDOループの前後をディレクティブではさんであります。これなら誰でもできそうです。こんな簡単な事で性能は上がるのでしょうか?

 コンパイルして実行してみると、実行時間は9.3秒に短縮されました。CPU1Coreの約5倍の速度です。何も苦労無しでこの速度が出るのであれば、GPGPUをお手軽に使うには十分ではないでしょうか。

$ cat matmul1.f95 
PROGRAM MATMUL1
  INTEGER, PARAMETER :: N = 4000
  REAL :: A(N, N), B(N, N)
  REAL*8 :: SUM
  DO J = 1, N
     DO I = 1, N
        A(I, J) = REAL(I * N + J) / REAL(N * N)
     END DO
  END DO
  CALL CPU_TIME(T1)
  !$ACC REGION COPYIN(A), COPYOUT(B)
  !$ACC DO PARALLEL PRIVATE(I, J, K)
  DO J = 1, N
     DO I = 1, N
        B(I, J) = 0.0
        DO K = 1, N
           B(I, J) = B(I, J) + A(I, K) * A(K, J)
        END DO
     END DO
  END DO
  !$ACC END REGION
  CALL CPU_TIME(T2)
  WRITE(*, *) T2 - T1, 'SEC'
  SUM = 0.0
  DO J = 1, N
     DO I = 1, N
        SUM = SUM + B(I, J)
     END DO
  END DO
  WRITE(*, *) 'CHECKSUM =', SUM
END PROGRAM MATMUL1
$ pgf95 -fastsse -ta=nvidia matmul1.f95 -o matmul1
$ ./matmul1
    9.288494     SEC
 CHECKSUM =    16017338556.46359     
$

--ケンちゃん 2010年3月6日 (土) 13:18 (JST)


この記事へのコメントをお寄せください

  • サイトへの書き込みに差し支えございましたら トータルディスクロージャーサイトサポート係へメールをお送りください
  • トータル・ディスクロージャ・サイトに投稿された文章と画像は、すべてその著作権がHPCシステムズ株式会社に帰属し、HPCシステムズ株式会社が著作権を所有することに同意してください。
  • あなたの文章が他人によって自由に編集、配布されることを望まない場合は、投稿を控えてください。
  • コメントを書き込む場合は名前にひらがなを織り交ぜてください。
  • あなたの投稿する文章と画像はあなた自身によって書かれたものであるか、パブリック・ドメインかそれに類する自由なリソースからの複製であることを約束してください。あなたが著作権を保持していない作品を許諾なしに投稿してはいけません!

<comments hideform="false" />


Comments

ノート:ディレクティブを入れるだけでGPGPUを動かす

個人用ツール