本項では初心者を対象に、ログインから、Fortranのサンプルプログラム"sample.f90"を作成、実行、確認するまでを簡単にご説明いたします。
1.ログイン
計算機は、基本的には遠隔地から利用することになります。お手持ちのパソコンから、当センターのフロントエンドノードに接続します。フロントエンドノードは計算機を利用するための窓口となっており、プログラム作成や、計算機での実行指示、結果確認などを行います。通常の利用方法では計算機自身に直接接続することはありません
フロントエンドノードへの接続方法については、WindowsとMac,Linuxで異なりますので、まずは以下をご覧ください。
2.プログラムの作成
計算機を利用するためには、まずプログラムを作成する必要があります。
世界には様々なプログラム言語がありますが、OCTOPUSではFortran言語とC言語、C++言語を利用することが可能です。
プログラムは以下の方法で作成することができます。
フロントエンドノード上で作成する
フロントエンドノードでプログラム(ソースコード)を作成・編集・修正するには、emacsやviなどのエディタを用いて行います。エディタの利用方法は以下に記載しております。
エディタ利用方法
WindowsやMacで作成する
普段ご利用いただいているWindowsやMacでプログラムを作成し、フロンエンドノードに転送する方法です。プログラム作成には、メモ帳などのエディタをご利用ください。
ファイル転送方法
プログラム作成例
emacsを使って、Fortranプログラム”sample.f90”を作成します。
1. emacsを起動し、sample.f90を作成します
フロントエンドノードで、以下のコマンドを入力してください。
% emacs sample.f90
2. sample.f90を編集します
以下のように入力してください。
1 2 3 |
program hello print *, 'Hello World!' end program hello |
コピーなどの編集操作はコマンドを使って行うことが可能ですので、徐々に覚えていくとよいでしょう。emacsが固まってしまった場合は、まずCtrl-gコマンドを入力することをお勧めします。
3. ファイルを保存します
Ctrl-x、Ctrl-sを順番に入力してください。
4. emacsを終了します
Ctrl-x、Ctrl-cを順番に入力してください。
3.コンパイル
サンプルプログラムを作成しましたが、そのままではただ文字列を記しただけの状態なので、計算機はどのように実行してよいかわかりません。まず作成したプログラムを、計算機上で実行できる形式に生成する必要があります。この生成の過程を「コンパイル」と呼びます。
※厳密には様々な呼び方があります。詳細は下記ページの「コンパイル」をご覧ください。
OCTOPUSでは、intel コンパイラ、intel MPIコンパイラ、GNU コンパイラ、PGI コンパイラ(それぞれC/C++/Fortran)という種類のコンパイラを利用することができます。
コンパイル例
サンプルプログラムをintel Fortranコンパイラを使ってコンパイルします。
1. コンパイルの実行
フロントエンドで以下のコマンドを入力してください
% ifort sample.f90
2. 実行結果の確認
エラーが表示されず、a.outというファイルが生成されていれば、コンパイルが成功したことを意味しています。
※エラーが表示されている場合、プログラムを見なおしましょう。よくある間違いとしてはスペルミスが挙げられます。
【参考情報】
4.プログラムの実行
計算機でプログラムを実行させる方法は、以下の2通りの方法があります。
・バッチ処理
コンピュータにまとめて処理を命令し実行する方法です。
処理の命令が終われば、ログアウトしても構いません。
基本的には、バッチ処理での実行をお願いいたします。
・インタラクティブ処理
コマンド等を通してコンピュータに直接命令し、リアルタイムで処理を実行する方法です。操作として手軽です。
バッチ処理では、計算機に実行させたい処理を「ジョブスクリプト」に記述し、実行を要求します。
この「ジョブスクリプト」が命令となり、計算機が実行する仕組みとなっています。
「ジョブスクリプト」で実行を要求すると、すぐに計算が始まるわけではありません。計算機は沢山の人が同時利用しておりますので、混雑している状況であれば、待たされることもあります。当センターでは「スケジューラ」というシステムが、プログラムの実行の順序を管理しています。
5.ジョブスクリプトの作成
ジョブスクリプトは2段構成となっており、
・利用する計算機のリソースや環境の指定(#PBSから始まる個所)
・計算機に実行させる処理の記述(シェルスクリプト)
に分かれます。
以下のジョブスクリプトの例を示します。
1 2 3 4 5 6 |
#!/bin/bash #PBS -q OCTOPUS #PBS -l elapstim_req=1:00:00 #PBS --group=hp123456 cd $PBS_O_WORKDIR ./a.out |
#PBSから始まる行が、利用する計算機のリソースや環境の指定となります。
それ以外は、計算機に実行させる処理の記述(シェルスクリプト)となります。
#PBS –q OCTOPUSは、投入する計算機資源の指定をしています。
ジョブスクリプトでは、ジョブクラスで計算機資源を指定する必要があり、
ここではOCTOPUSの「OCTOPUS」というジョブクラスに対して、実行を要求しています。
ジョブクラスは、用途に応じて分かれておりますのでご注意ください。
「OCTOPUS」は受け付け用のジョブクラスとなっておりまして、
投入後に実行用のジョブクラスに自動的に転送されるようになっております。
詳細は下記をご覧ください。
OCTOPUS ジョブクラス表
#PBS –l elapstim_req=1:00:00は、計算機資源量の指定をしています。
ここでは経過時間(elapstim_req)1時間いう指定となっています。OCTOPUSにおいては、経過時間のみを指定すればよいでしょう。
計算が実行されているときに、指定した資源量の値を超えると、計算は停止してしまいます。計算に応じた最適な値を見つけ、設定していく必要があります。
#PBS --group=hp123456は、HPCI課題IDを指定しています。
HPCI利用やJHPCN-HPCI利用でジョブを投入する場合、必ず記載する必要があります。
前年度より継続している課題についても、当年度の課題IDを指定してください。
cd $PBS_O_WORKDIRは「ジョブ投入時のディレクトリに移動する」といった操作を行います。$PBS_O_WORKDIRは環境変数で、ジョブ投入時のディレクトリが自動で設定されるようになっています。自分自身で特別なディレクトリを指定しないのであれば、この文をそのまま記載するようにしてください。
./a.outは「3.コンパイル」で生成された実行ファイルを実行する操作になっています。
「2.プログラムの作成」で利用したemacsエディタを使って、nqs.shを作成しましょう。
1.emacsを起動し、nqs.shを作成します
フロントエンドノードで、以下のコマンドを入力してください。
% emacs nqs.sh
2.nqs.shを編集します
以下のように入力してください。
#!/bin/bash
#PBS –q OCTOPUS
#PBS –l elapstim_req=1:00:00
#PBS --group=hp123456
cd $PBS_O_WORKDIR
./a.out
3.ファイルを保存します
Ctrl-x、Ctrl-sを順番に入力してください。
4.emacsの終了します
Ctrl-x、Ctrl-cを順番に入力してください。
6.ジョブスクリプトの投入
「ジョブスクリプト」を使って、計算機に対して実行を要求します。
これを「ジョブスクリプトを投入する」と表現します。
ジョブスクリプトの投入は、qsubコマンドを使用します。
5で作成したジョブスクリプトを投入してみましょう
% qsub nqs.sh
上記のコマンドを入力すると
Request 12345.oct submitted to queue: OCTOPUS.
のようなメッセージが表示されます。これは、ジョブスクリプトが正常に受け付けられたことを表しています。
投入し、受け付けられたジョブスクリプトには リクエストID が付けられます。
上記の例では12345.octというリクエストIDが付いています。
上記のようなメッセージが表示されない場合、スクリプトに間違いがある可能性が高いです。再度見直しましょう。
投入中のジョブスクリプトの状態を表示するには、qstatコマンドを使用します。
% qstat
RequestID ReqName UserName Queue Pri STT S Memory CPU Elapse R H M Jobs 12345.oct nqs.sh user-id OCTOPUS 0 RUN – 1.01M 0.2 1 Y Y Y 1
この情報で着目する点は、STTという項目です。主な状態は以下の2つですが、これら以外にもいくつか状態があります。
QUE queued:実行待ち状態
RUN running:実行中
qsubやqstatコマンドの詳細やその他のコマンドについて知りたい方は、以下をご覧ください
7.実行結果の確認
計算機での実行が終わると、計算結果がフロントエンドに転送されます。
計算結果は、スクリプト中で特別に指定しなければ、標準出力として出力されます。
標準出力は"ジョブスクリプト名.oリクエストID"
標準エラー出力は"ジョブスクリプト名.eリクエストID"
として出力されます。(ファイル名を変更することも可能です。)
サンプルプログラムの場合は、nqs.sh.o12345とnqs.sh.e12345という名前のファイルが出力されます。中身を確認してみましょう。
1. 標準出力を確認する
% cat nqs.sh.o12345
結果例
%NQSII(INFO): ------- Output from job:0000 -------
Hello World!
2. 標準エラー出力を確認する
% cat nqs.sh.e12345
結果例
%NQSII(INFO): ------- Output from job:0000 -------
上記のように標準出力に意図通りの結果が表示されており、標準エラー出力に何もエラーが表示されていなければ、実行は成功です。
おわりに
初心者向けの利用方法は以上となりますが、
ここに書かれた内容でわからないことがある場合は、FAQページや利用相談をお気軽にご利用ください。
相談・お問い合わせ