本項ではプログラムをIntelコンパイラでコンパイルし、SQUID 汎用CPUノードでのシリアル(1コア)実行を行うまでの手順を簡単にご説明いたします。
1.環境設定の読み込み
SQUIDでは、コンパイラ、ライブラリ、アプリケーション環境などの環境変数設定を Environment modules というツールで管理しています。まずは以下のコマンドを実行して、汎用CPUノード向けの推奨環境を読み込んでください。
% module load BaseCPU
2.コンパイル
プログラムのソースファイルを計算機で実行できる形式にすることを「コンパイル」と呼びます。SQUIDでは、Intelコンパイラ、GNUコンパイラ(それぞれC/C++/Fortran)などのコンパイラを利用することができます。コンパイルを行う際のコマンドは、利用するコンパイラ、プログラミング言語ごとに異なります。
C言語 | C++言語 | Fortran言語 | |
---|---|---|---|
Intelコンパイラ | icc | icpc | ifort |
GNUコンパイラ | gcc | g++ | gfortran |
たとえばfortran言語で記述されたサンプルプログラム"sample.f90"をintelコンパイラでコンパイルする場合、フロントエンド上で以下のコマンドを実行してください。
% ifort sample.f90
エラーが表示されず、a.outというファイルが生成されていれば、コンパイルが成功したことを意味しています。
-
※エラーが表示されている場合、プログラムを見なおしましょう。よくある間違いとしてはスペルミスが挙げられます。
3.ジョブスクリプトの作成
ジョブスクリプトを作成し、計算ノードにプログラムの実行を要求します。このような実行方法を「バッチ処理」と呼びます。「ジョブスクリプト」で実行を要求すると、すぐに計算が始まるわけではありません。計算機は沢山の人が同時利用しておりますので、混雑している状況であれば、待たされることもあります。当センターでは「スケジューラ」というシステムが、プログラムの実行の順序を管理しています。
-
※フロントエンド上でプログラムを実行することは原則禁止となっています。
※バッチ処理、もしくはインタラクティブバッチ利用での実行をお願いいたします。
以下にジョブスクリプトの例を示します。
SQUID 汎用CPUノードで a.out をシリアル(1コア)実行するジョブスクリプトです。
1 2 3 4 5 6 7 8 |
#!/bin/bash #PBS -q SQUID-S #PBS --group=【グループ名】 #PBS -l elapstim_req=1:00:00 #PBS -l cpunum_job=38 module load BaseCPU cd $PBS_O_WORKDIR ./a.out |
【グループ名】の部分には自身のグループ名を記述してください。グループ名は id コマンドで確認できます。id コマンドの結果が以下の場合、G12345 がグループ名です。
uid=11111(u6a123) gid=12345(G12345) groups=12345(G12345)
このジョブスクリプトはプログラムの実行を行うだけのものになっていますが、オプションを追加で指定することで「ジョブ実行終了時にメールアドレスに通知を送信する」、「出力結果ファイルの名前を指定する」といった要求を行うことも可能です。
ジョブスクリプトの詳細やその他のオプションについては以下のページをご参照ください。
3.プログラムの実行、結果確認
ジョブスクリプトを計算機に投入し、プログラムを実行します。ジョブスクリプトの投入は下記のqsubコマンドで行います。(ここでは先ほど作成したジョブスクリプトのファイル名をnqs.shとしています)
% qsub nqs.sh
投入されたジョブの状況はqstatコマンド、sstatコマンドで確認可能です。
各コマンドや表示される内容の詳細は下記のページをご参照ください。
計算機での実行が終わると、計算結果がフロントエンドに転送されます。
計算結果は、スクリプト中で特別に指定しなければ、標準出力として出力されます。
標準出力は"ジョブスクリプト名.oリクエストID"
標準エラー出力は"ジョブスクリプト名.eリクエストID"
として出力されます。エディタなどでご確認ください。
おわりに
基本的な利用の流れは以上になります。
ここに書かれた内容でわからないことがある場合は、FAQページや利用相談をお気軽にご利用ください。
相談・お問い合わせ