SQUIDのGPUノード群では、GPUを利用した数値計算が可能です。本ページではCUDAを用いた自作プログラムを、SQUIDで実行する方法について解説しています。
GPUについて
GPUとはGraphics Processing Unitの略称であり、PCにおいて画像処理を担うプロセッサのことを指します。GPUは3DCGのシェーディング処理に特化した性能を持ち、大量のデータを複数のプロセッサで同時かつ高速に並列処理することが出来ます。この特性を生かし、GPUを画像処理以外の用途に利用する技術のことを、GPGPU(General Purpose Computing on GPU)といいます。本ページでは、GPUを計算機での数値計算に利用する方法を解説します。
基本的な利用方法
GPUを利用して数値計算を行う場合は、基本的にNVIDIAが提供するGPU向けの統合開発環境である"NVIDIA HPC SDK"を利用する必要があります。NVIDIA HPC SDKはコンパイラやライブラリから構成され、プログラムはfortran言語、C言語、CUDA等で記述することが出来ます。画像処理の知識は不要です。
NVIDIA HPC SDKについての詳細は下記のNVIDIA公式ページをご覧ください。
NVIDIA HPC SDK
1.環境設定の読み込み
SQUIDでは、コンパイラ、ライブラリ、アプリケーション環境などの環境変数設定を Environment modules というツールで管理しています。まずは以下のコマンドを実行して、GPUノード向けの推奨環境を読み込んでください。
% module load BaseGPU
2.コンパイル方法
NVIDIA HPC SDK におけるコンパイルコマンドは以下のとおりです。
C言語 | C++言語 | Fortran言語 | CUDA |
---|---|---|---|
nvc | nvc++ | nvfortran | nvcc |
たとえばfortran言語で記述されたサンプルプログラム"sample.f90"をintelコンパイラでコンパイルする場合、フロントエンド上で以下のコマンドを実行してください。
% nvfortran sample.f90
3.ジョブスクリプトの作成
ジョブスクリプトを作成し、計算ノードにプログラムの実行を要求します。このような実行方法を「バッチ処理」と呼びます。「ジョブスクリプト」で実行を要求すると、すぐに計算が始まるわけではありません。計算機は沢山の人が同時利用しておりますので、混雑している状況であれば、待たされることもあります。当センターでは「スケジューラ」というシステムが、プログラムの実行の順序を管理しています。
-
※フロントエンド上でプログラムを実行することは原則禁止となっています。
※バッチ処理、もしくはインタラクティブバッチ利用での実行をお願いいたします。
以下にジョブスクリプトの例を示します。
SQUID GPUノードで a.out を GPU 4基で実行するジョブスクリプトです。
1 2 3 4 5 6 7 8 9 |
#!/bin/bash #PBS -q SQUID-S #PBS --group=【グループ名】 #PBS -l elapstim_req=1:00:00 #PBS -l cpunum_job=38 #PBS -l gpunum_job=4 module load BaseGPU cd $PBS_O_WORKDIR ./a.out |
【グループ名】の部分には自身のグループ名を記述してください。グループ名は id コマンドで確認できます。id コマンドの結果が以下の場合、G12345 がグループ名です。
uid=11111(u6a123) gid=12345(G12345) groups=12345(G12345)
このジョブスクリプトはプログラムの実行を行うだけのものになっていますが、オプションを追加で指定することで「ジョブ実行終了時にメールアドレスに通知を送信する」、「出力結果ファイルの名前を指定する」といった要求を行うことも可能です。
ジョブスクリプトの詳細やその他のオプションについては以下のページをご参照ください。
4.プログラムの実行、結果確認
ジョブスクリプトを計算機に投入し、プログラムを実行します。ジョブスクリプトの投入は下記のqsubコマンドで行います。(ここでは先ほど作成したジョブスクリプトのファイル名をnqs.shとしています)
% qsub nqs.sh
投入されたジョブの状況はqstatコマンド、sstatコマンドで確認可能です。
各コマンドや表示される内容の詳細は下記のページをご参照ください。
計算機での実行が終わると、計算結果がフロントエンドに転送されます。
計算結果は、スクリプト中で特別に指定しなければ、標準出力として出力されます。
標準出力は"ジョブスクリプト名.oリクエストID"
標準エラー出力は"ジョブスクリプト名.eリクエストID"
として出力されます。エディタなどでご確認ください。
おわりに
基本的な利用の流れは以上になります。
ここに書かれた内容でわからないことがある場合は、FAQページや利用相談をお気軽にご利用ください。
相談・お問い合わせ