導入

今回の実習ではFortranの圧縮性流体の有限体積法のコードをOpenACCを用いてGPU移植していく。移植を以下の3段階に分けて順次行う。

最初の段階ではデータの移動を考えたくないのでmanaged memoryを使ってデータの移動をコンパイラに任せる。ただし、managed mode ではページ単位(環境によるが例えばアドレス空間で4kB程度)で自動転送が起きるため、ループごとに小さな転送が発生する可能性がある。その場合は無駄なデータ転送が多くなり速度が出ないので、separate modeにして手動でデータ移動を書く。最後にMPIパートを書くという手順で進める。

最終的には MPI + OpenACC によるGPU並列流体コードを完成させることを目標とする。

<aside> 💡

流体学校の実習時間は限られており、作業が全部終わるとは想定していない。学校終了後にもしばらくアカウントは利用可能なのでその間に完成させてジョブを投げてみてほしい。

</aside>

準備

GPUサーバにログインする。以降hydro?? は自分のアカウント名に合わせて数字をいれる。

ssh [email protected]

/gwork0 の自分のディレクトリにいく。 /gwork0g00 からも anXX からも参照することができる。

cd /gwork0/hydro??

コードを準備する。GPUのディレクトリの中にあるファイルを確認すること。

git clone <https://github.com/cfcanaoj/CfCA_HydroSchool_FVM.git> HS2025GPU
cd HS2025GPU/GPU
ls

以下のディレクトリが見えるはず。

bw2d_acc_task/ # 課題を行うディレクトリ
bw2d_acc_ref/  # GPU移植を行ったお手
bw2d_acc_mpi_task/  # MPIパートの課題を行うディレクトリ
bw2d_acc_mpi_ref/ # MPIパートでGPU移植を行ったお手本

以降bw2d_acc_task で作業する。bw2d_acc_ref はお手本なので困った時は自分のファイルと diff をとってみよう。