...

スーパーコンピュータ利用の基礎 - 大阪大学レーザーエネルギー学研究

by user

on
Category: Documents
8

views

Report

Comments

Transcript

スーパーコンピュータ利用の基礎 - 大阪大学レーザーエネルギー学研究
スーパーコンピュータ利用の基礎
2007 年8月30日
2004 年9月 29 日
第3版
初版
大阪大学
レーザーエネルギー学研究センター
高性能計算機室
0
福田優子
はじめに
このテキストはコンピュータというものをよく知らないが、スーパーコンピ
ュータを始めて利用しようという方を対象に、スーパーコンピュータを利用し
て、その性能を引き出すために最低必要な基礎的な知識や概念を記載したいと
思っています。あくまで概念の記述に重点をおいていますので、最新の情報や
詳細はマニュアルや大阪大学サイバーメディアセンター(以下 CMC)&大阪大学
レーザーエネルギー学研究センター(以下レーザー研)発行のテキストなどを
参照してください。それらを理解できる下地を作りたいというのが、このテキ
ストの目標です。
レーザー研では計算機シミュレーションが研究の重要な役割を担っており、
現在の核融合科学研究所(当時名古屋大学プラズマ研究所)に設置された富士
通社製 VP100、VP200 をかわきりに、レーザー研に導入された計算機システムと
して 1977 年三菱電機社製 MELCOM COSMO700II、1985 年 NEC 社製 SAP、1996 年 NEC
社製 SX4/2C、2000 年日立社製 SR8000、また大阪大学サイバーメディアセンター
のスーパーコンピュータシステム 1997 年 SX-4/64M2、2001 年 SX5/128M8 などの
ベクトル型スーパーコンピュータや大型、小型の計算機システムを駆使して研
究を行ってきました。
このテキストは、上記のような計算機システムを利用して研究を行う研究者、
学生などのプログラム相談、講習会を通じて得た 20 年以上の経験とこれまでの
テキストをもとに、作成しており、随時バージョンアップしたいと思っていま
す。わかりにくい、このようなことを記載してほしいなどの要望がありました
らぜひご連絡下さい。2006 年の第 2 版の改訂にあたっては、アンケートに協力
していただいた方の声を参考にさせていただき、NQS の仕組みについての記述を
増やしました。その他、2 年間に質問の多かった項目の説明を入れるなどの変更
を行っています。2007 年第 3 版は 2007 年 1 月の CMC のシステム更新に伴い若干
記述を変更しました。
FORTRAN77 を基本に記載していますが、スーパーコンピュータを使ってシミュ
レーションしようとする人ばかりでなく、パーソナルコンピュータやクラスタ
を利用してシミュレーションを行う方にとっても参考になると思います。
スーパーコンピュータと一口で言いますが、定義は時代とともに変わります
し、種類もいろいろあります。大阪大学に導入されている NEC 製の SX というス
ーパーコンピュータはベクトル並列型と呼ばれるもので、システムについて特
殊なことを勉強しなくても、少し勉強して素直にプログラムを作ると簡単に性
能を引き出すことができます。ベクトル化は時代遅れという言い方をされる方
1
も多いですが、ベクトル化について理解してプログラミングを行うと、パーソ
ナルコンピュータなどのプログラミングの基礎にもなりますし、並列化への発
展も可能です。ベクトル化と並列化については、CMC でも毎年何回か、講習会が
開催されています。一度は勉強しておかれることを強くお薦めします。
2007/8/30 大阪大学
レーザーエネルギー学研究センター
高性能計算機室 福田優子
用語の説明:
このテキストでは以下の意味で用いています。分かりにくい用語は連絡いた
だいたら説明するようにしたいと思います。
計算機
スーパーコンピュータ、ワークステーション、パーソナルコンピュータの総
称として用いています。
パーソナルコンピュータ(以下パソコン)とはよくご存知の Windows やマッ
キントッシュの個人で利用されているもの。
ワークステーションとは OS が UNIX で複数の人で利用している計算機と、個
人で利用している Linux をインストールした計算機のことを示しています。
スーパーコンピュータ(以下スパコンと呼ぶこともあります)だけでなく、パ
ソコンやワークステーションも含めて説明したい場合に、計算機と呼びます。
CPU
計算機の心臓部分である演算をする装置のことを CPU(中央処理装置)と呼び
ます。
ジョブ
計算機に処理させるひとかたまりの仕事のことを意味し、ここでは主にプロ
グラムの実行のことを示します。
デフォルト(既定値)
計算機に何かやりなさいとか、ここを利用しなさいなどと指示する際に、様々
なオプションがありますが、明示的に指定しない時に、自動的に採択される
値をデフォルトと呼びます。
2
1
スパコンを利用する前に –基礎の基礎- ................................................................ 4
1.1
計算機は壊れる!セーブは常識 ......................................................................... 4
1.2
研究を始める前に自分の身体は自分で守る ...................................................... 4
1.3
プログラムを作る................................................................................................... 4
1.4
プログラミング上の注意事項 ............................................................................... 6
1.5
デバッグしましょう ................................................................................................. 8
1.6
自分のプログラムのメモリ容量に注意しましょう................................................. 8
1.7
メモリとスワップ ..................................................................................................... 9
1.8
システム全体のメモリ管理 ................................................................................. 10
1.9
CPU 時間とエラプス時間 ....................................................................................11
2
スパコン利用の概念............................................................................................... 13
2.1
利用の流れ.......................................................................................................... 13
2.2
コンパイル............................................................................................................ 13
2.3
セルフ環境とクロス環境 ..................................................................................... 15
2.4
スーパーコンピュータで計算させるにはバッチ処理 ......................................... 16
2.5
適切なクラス(キュー)を決定する。 ................................................................... 18
2.6
NQS ファイルを用意しましょう............................................................................ 19
2.7
いよいよスーパーコンピュータで計算させる(ジョブ実行) ............................... 19
3
要注意!長時間ジョブや大容量ファイルを使用する方....................................... 22
3.1
ディスク構成を知り、正しく工夫してディスクを使いましょう ............................. 22
3.2
リランとリスタート................................................................................................. 23
4
知っていると便利.................................................................................................... 25
4.1
make...................................................................................................................... 25
4.2
FORTRAN の基礎................................................................................................... 26
5
シミュレーションに最低必要な UNIX コマンド...................................................... 33
5.1
ディレクトリとファイル .......................................................................................... 33
5.2
ディレクトリの操作・表示に関するコマンド......................................................... 35
5.3
ファイルの操作・表示に関するコマンド.............................................................. 36
5.4
ファイルのアクセス許可に関するコマンド ......................................................... 37
5.5
パスワードを管理するコマンド ........................................................................... 38
5.6
その他の便利なコマンド ..................................................................................... 39
3
1
スパコンを利用する前に
–基礎の基礎-
1.1 計算機は壊れる!セーブは常識
火災や地震など思わぬことで壊れる可能性もありますが、計算機は壊れる
ものと思っていて間違いありません。プログラムや大事なデータなど消えた
ら困るものは必ずセーブするようにしましょう。セーブというと、テープに
保存する、CDにやくなど他のメディアに保存することと思われるかもしれ
ませんが、他の計算機にコピーしておき、物理的に2箇所以上においておく
こともセーブになります。自分の財産は自分で守る、危機管理意識を常に持
ちましょう。パソコンのハードディスクが壊れることはよくあります。災い
は忘れたころにやってきます。
1.2 研究を始める前に自分の身体は自分で守る
研究を始め、画面に向かって仕事をするようになると夢中になって時間を
忘れるかもしれません。ゲームやインターネットでも同じです。当然のこと
なら、長時間画面にむかって作業すると眼などに悪い影響があります。自分
の身体や眼は自分で守るしかありません。VDT 作業指針というものがあり、イ
スの高さや画面の高さ、適度に休憩をとるなどが紹介されています。Yahoo な
どで VTD 症候群とひくと、たくさんヒットしますし、参天製薬のホームペー
ジにも詳しく説明されています。一度は目を通しておき、1 時間画面に向かっ
て作業したら、10 分は眼を休めるなど、自分で工夫して、自分で自分の身体
を守ってください。長年、講習会では、頭は休めなくていいですよと話をし
てきましたが、最近は、頭も適当に休ませてあげないといけないと思います。
1.3 プログラムを作る
スーパーコンピュータに仕事をさせるためには、通常プログラムを作成し
ます。商用のプログラムを利用する場合もありますが、このテキストは基本
的に自分でプログラミングすることを前提にしています。先輩から引きつい
たものなど既存のプログラムを利用する場合も多いでしょうが、中身を理解
4
するようにしましょう。シミュレーションの条件を変える、測定する物理量
を追加するなどプログラムの修正、追加が必要な場合にもあてはまります。
図 1-1 に、よくない例としてあげているように、思いつくままにプログラ
ムを書くということは、設計図なしに家を建てるのと同じことです。あらか
じめ考えるべきことは紙に書き出し、簡単なフローチャート(流れ図)など
を作っておくと、プログラミング作業は楽になり、エラーも減ります。ドキ
ュメントはあとで作ろうと思う方も多いと思いますが、画面に向かうときに
は、ドキュメントは完成していて、ただタイピングするだけという状態が理
想です。
計算したい問題がある
同じこと
いきなりプログラムを
作って計算させる
家を建てたい
設計図なしで
家を建てる
何か
おかしいぞ
計 算 し たい問題
基
本
設
計
物 理 モ デ ル の 検 討
ア ルゴリズムの検討
外
部
設
計
プ ロ グ ラ ム の 構成
処理内容の分類など
内
部
設
計
C O M M O N 、 引 数
変
数
の
検
討
各プ ログラムの構成など
プ ロ グ ラミング
( コ ーディング)
きれいに
建ったぞ
図 1-1
プログラム作成の概念図
5
1.4 プログラミング上の注意事項
a)誰が見てもわかりやすいプログラムを書く
プログラミングには、それぞれ人の流儀がありますが、よいプログラムと
は誰が見ても分かりやすいプログラムです。計算機は年々速くなりますし、
少々回り道をさせても文句も言わず、言われたとおり(これが問題のときも
あるのですが、)計算してくれます。実際に計算機を使用した際に最も効率が
悪いのは人間です。
・コメントをたくさんつける
→
コメントとは、プログラムの実行とは関係ない注釈のことで、覚
えのために書いておくメモのことです。プログラムの半分がコメ
ントになるのが望ましい形です。特に単位はよく間違えますので、
m(メートル)なのかcm(センチメートル)なのか、g(グラ
ム)なのかkg(キログラム)なのかなどを、プログラム中にコ
メントで書くようにしましょう。修正箇所には日付とともに簡単
な概要を書くようにしましょう。
コメント例)f90 の形式(!以降行末までがコメント)
!
!
コメントをたくさん書きましょう
初期値設定
a=0.1
!
!
cm/s
収束条件変更(2004/9/10)
古い FORTRAN ではcで始まる行がコメントでした。
・メインプログラムは、call 文のみにする
→
大きなプログラムの場合、計算の内容をいきなりプログラムにず
6
らずら書くのではなく、いくつかの部分にわけて作ります。その
構成単位にはメインプログラム、副プログラム、モジュールと呼
ばれるものなどがあり、プログラムを実行したときに最も最初に
実行されるプログラムをメインプログラムと呼びます。副プログ
ラムを実行するには、このメインプログラムから call(呼び出し)
するのですが、メインプログラムを call 文のみにすることで、プ
ログラム全体の流れが分かりやすくなります。
プログラム例
C
C
コメント
(日付、何のプログラム、誰が作った
誰がいつどういう修正をした、などなど
call preset
!初期設定
call datain
!初期データ入力
call start
!初期値計算
do
istep=1,iend
call keisan
call output
call timstp
enddo
!時間ステップのループ
call
!終了処理
endrun
b)なるべく標準の規約に従い、機種に依存しないようにする
古い FORTRAN では、変数の最初の字によって、整数型か実数型かが決まる
暗黙の型宣言というものがありました。
a−h、o−z
i−n
:
:
実数
整数
( ni、ne などは、そのままでは整数型となるので悪い例です)
暗黙の型宣言に従い、変数の最初の字を決めることにより、見ただけで変
数の型がわかるので、間違いを減らすことができます。もちろん自分で型を
宣言することはよいことですが、自分の好みだけで決めるのではなく、ルー
7
ルは標準に従うようにしましょう。
c)ルールに従った変数名やファイル名をつける
レーザー研の西原研究室では、伝統的にローカル変数はZで始めるという
ルールがあります。このルールに従うことで、変数を見ただけで、他では使
われていないということが分かります。ファイル名、ディレクトリ名なども
一時的なものはzで始めるというルールに従うとよいでしょう。
1.5 デバッグしましょう
できたプログラムをいきなりスーパーコンピュータで実行させる人はいな
いと思いますが、正しく計算できているかどうかチェックしましょう。理論
計算で解が分かっている問題を計算させ、プログラムが正しいかどうかチェ
ックすべきです。プログラムを修正したときも、チェックする仕組みを入れ
ておくべきでしょう。また、部分ごとに思ったとおりの答えをだしているか
どうかチェックしてから全体をチェックしてください。いきなり全部動かし
て、どこでエラーがおこっているか分からないというようなことはやめてく
ださい。それらしく、計算機が答えをだしてくると「正しい」と思いがちで
すので、注意するようにしましょう。
1.6 自分のプログラムのメモリ容量に注意しましょう
スーパーコンピュータにかぎりませんが、計算機に計算させようという場
合には、いわゆる計算機の心臓 CPU(演算処理装置)の他に、メモリ(主記憶)
をどれだけ使うかということが重要です。計算のための変数、配列の他に、
計算機に対する命令などもすべてメモリ上に展開されます。計算機を使って
計算しようとする方は、メモリ容量にも注意を払うようにしてください。
一般的には以下のような方法で、メモリ容量を知ることができます。
・ UNIX 標準の size コマンドを用いる
(SX の場合は sxsize コマンドがあります)
8
・ 大規模なプログラムの場合は概算できる場合が多い。自分で大規模な配
列サイズを計算する。例:変数の数×配列数×8バイト+‥‥
・プログラム実行中の情報、あるいは終了後に出力される情報を参照する
(SX の場合は proginfo で詳細が表示されます)
1.7 メモリとスワップ
パーソナルコンピュータでいろいろ仕事をさせている場合も同様ですが、
多数の仕事を同時に計算機にさせると、メモリに入りきらない分は、メモリ
よりもはるかにアクセス速度の遅いディスク装置などに追い出されます。こ
の状態をスワップと呼びます。スワップがおこるとシステムの効率は非常に
悪くなります。スーパーコンピュータでは、1.7 で説明する「メモリ総枠制御」
という機能を利用し、スワップをおこさない運用を行っています。
CPU
超高速
メモリ(主記憶)
メモリからあふれたものは
スワップされる
低速
ディスク
図 1-2
CPU とメモリとスワップ
キャッシュやメモリバンクという言葉もよく聞きますが、スーパーコンピ
ュータに限ったことではありませんが、高速に計算させるためには、高速の
演算機にいかに速くデータを供給するかが重要です。計算速度(=計算時間)
にだけまどわされないように注意してください。
9
1.8 システム全体のメモリ管理
システムによって、考え方も方式も異なりますが、スーパーコンピュータ
では効率を重視し、スワップが起こらないようにプログラムを実行しようと
しています。CPU だけでなくメモリも貴重な資源であり、有効にシステム全体
を活用するように工夫して運用されています。
図 1-3 は、スーパーコンピュータにトータル 64GB のメモリが実装されてい
て、A と B の 2 つのジョブが各々30GB、20GB とあわせて 50GB を使うと宣言し
ている場合を示しています。この場合、実際には 20GB しか使っていませんが、
システムが空きとして認識している 14GB 以上を使うと宣言したジョブは実行
されません。
システムがあいていると思っている
メモリ容量は14GB
これ以上使うと指定した
ジョブは実行されない
14GB
10GB
トータル
メモリ容量
64GB
Bさんのジョブ
20GB使うと指定しているが、
10GB使用。
10GB
20GB
Aさんのジョブ
30GB使うと指定しているが、
10GB使用。
10GB
図 1-3
システム全体のメモリ容量とジョブのメモリ容量
大きすぎる値を指定すると自分も他の人も困ります。コンパイルしたあと
で調べた LM サイズで調べた目安や、SX で実行した場合は PROGINFO で表示さ
れた 実際に使用したメモリサイズに少し余裕をもたせたサイズを指定する
ようにしてください。動的アロケートを利用して大きなメモリを必要とする
かもしれないプログラムもありますので、どれだけのメモリを必要とするか
10
は、利用者の方でないと分かりません。適切にシステムに教えてあげるよう
にしましょう。だからと言って、あまりにぎりぎりの値を設定すると、ほん
の少し超えただけでもジョブがアボートするかもしれませんので、ご注意く
ださい。計算機は融通がききません。
1.9 CPU 時間とエラプス時間
スーパーコンピュータで計算させた場合に注意していただきたい項目に
CPU 時間とエラプス時間というものがあります。
CPU 時間は実際に CPU(計算機の演算処理装置)が処理した時間のことです。
エラプス時間は経過時間とも呼ばれ、計算機が処理を開始してから終了する
までの時間です。特に並列化したプログラムの場合は、このエラプス時間が
重要になります。複数の人間で利用するようなコンピュータでは、
「ひとつの
仕事が終わってから、次の仕事を実行する」というようなやり方ではなく、
「投
入された複数の仕事を少しずつ実行する」ことにより処理します。このよう
にして、同時にいろいろな処理がすすんでいるように見えます。
時間
(A)
(B)
(C)
(A)ジョブの計算にかかったCPU時間
(A)ジョブのエラプス時間(経過時間)
CPU時間
図 1-4
CPU 時間とエラプス時間
11
エラプス時間
実際のスーパーコンピュータは複数の CPU がありますが、ここではひとつ
の CPU で3つの仕事を実行する様子を使って CPU 時間とエラプス時間につい
て説明します。図 1-4 は、A、B、C の 3 個のジョブが実行されているときの計
算機の様子を示しています。それぞれボックスの部分が実際に CPU を使って
計算した時間を示し、その合計がそのジョブの CPU 時間となります。エラプ
ス時間は矢印で示される開始から終了までの時間を示します。複数の人のジ
ョブが同時に実行されているために、ひとつひとつのジョブの CPU 時間は短
くても、エラプス時間が長くなっていることが分かります。
同時に多数のジョブを実行させるほど、一個ずつのジョブにかかるエラプ
ス時間は長くなりますが、システム全体の効率はよくなります。同時に何本
実行させるかは多重度と呼びますが、どのくらいの値にするのがいいのかは、
難しいところです。システムの考え方によって決められています。
2006 年 12 月まで CMC で運用されていた SX5 は、上述のように同時に何本も
ジョブを実行させる多重運用されていましたが、2007 年 1 月に導入されたシ
ステムからは、JobManipulator と呼ばれるジョブスケジューリングが導入さ
れ、実行中は CPU を占有します。そのため、並列化されていないシングルジ
ョブでは、CPU 時間とエラプス時間がほぼ同時になるのが一般的です。
時間
(A)並列化されていないシングルジョブ(1CPU使用)の場合
CPU時間
エラプス時間
一般的にはエラプス時間とCPU時間は
ほぼ同じ。エラプス時間がCPU時間に比べ
て長い場合はプログラムに問題あり?
(B)並列化されたパラレルジョブ(4CPU使用)の場合
CPU時間
理想的には、
CPU時間はエラプス時間の4倍
エラプス時間
図 1-5
占有の場合の CPU 時間とエラプス時間
12
2
スパコン利用の概念
2.1 利用の流れ
スーパーコンピュータに仕事をさせるための、通常の作業手順は図 2-1 の
ようになります。ここでフロント端末と呼んでいるのは、スーパーコンピュ
ータを使うために用意されている端末のことです。
プログラムの作成・修正
プログラムの作成や修正は手元のパソコンなどで行うことも
フロント端末で行うことも可能
(注意)手元のパソコンなどで作業を行った場合は、フロント端末へのファイル
転送が必要。内部表現の形式が異なる場合が多いので注意が必要!
ファイル転送時に文字を扱うアスキーモードで行うと自動的に変換します。
コンパイル
スーパーコンピュータ用の実行形式を作成する
ジョブ投入
スーパーコンピュータで計算させる(qsub)
ジョブの状態確認
結果の確認
この間の作業はフ
ロント端末からの
み可能
(qsub、qdelなど)
標準エラー出力は必ず確認しましょう。
エラーはありませんか?
データ解析など
図 2-1
スーパーコンピュータ利用の流れ
データの解析をどこで、何を使って行うのがよいかは一概には決められま
せんが、大容量のファイルを解析したり、転送したりしたい方は、事前にシ
ステム管理者と相談するようにしてください。データ量に応じてふさわしい
使い方をしないと、システムに負荷をかけ他の人に迷惑をかけることがあり
ます。
2.2 コンパイル
プログラムを作成したあと、スーパーコンピュータやワークステーション
で計算させるには、機械語に翻訳する必要があります。
13
言語
FORTRANの場合
ソースプログラム
main.f
suba.f
subb.f
………
コンパイル(翻訳)
f90コマンド
sxf90コマンド
など、マシンに依存
オブジェクトモジュール
main.o
suba.o
subb.o
………
リンク(結合)
ロードモジュール(LM)
a.out
実行形式
UNIXの標準では、名前を指定しないと
「a.out」という名前で作成される。
これを実行すると結果が得られる
図 2-2
コンパイルの概念
図 2-2 はプログラムを作成してから、計算機で実行させるまでの翻訳する
作業(コンパイル)の概念を示しています。機械語に翻訳されたものをオブ
ジェクトモジュールと呼びます。これでもまだ実行できません。リンク(結
合)という作業をすると実行形式であるロードモジュール(LM、実行オブ
ジェクトファイル、実行形式、実行ファイルなどと呼ばれることもあります)
が作られます。
計算機はこのロードモジュールを実行することができます。UNIX では通常
14
コンパイルとリンクの作業をあわせてコンパイルと呼び、そのためのツール
をコンパイラと呼びます。
UNIX では、図 2-2 に示すように、メインプログラム、サブルーチンなどの
プログラム単位にソースプログラムを保存するようにすると、make というツ
ール(4.1 参照)を使うときに便利です。コンパイルすると「*.o」という名前
でオブジェクトモジュールができますが、それとの関連もわかり易くなりま
す。
一般に source.f というプログラムを作成し、UNIX 上で f90 source.f とす
るとコンパイルとリンクが行われ、a.out という名前のロードモジュールがで
きます。そのとき、source.o という名前のオブジェクトモジュールも同時に
作成されます。
2.3 セルフ環境とクロス環境
コンパイラは、計算機の機種に依存し、ワークステーションなどでは、2.2
で説明したコンパイルと実行は、通常同一の計算機上で行います。このよう
な使い方をセルフ環境と呼びます。しかし、スーパーコンピュータはロード
モジュール高速実行には適していますが、コンパイルという作業には不向き
です。そのためクロス環境と呼ばれる環境を利用します。
セルフ環境:コンパイルと実行までを同じ計算機で行うこと
セルフ環境のコンパイラをセルフコンパイラと呼ぶ
クロス環境:コンパイルと実行を異なる計算機で行うこと
クロス環境のコンパイラをクロスコンパイラと呼ぶ
CMC ではフロントと呼ばれる端末が SX のクロス環境のための端末であり、
Linux の計算機です。SX 用のロードモジュールを作るためのクロスコンパイ
ラは sxf90 というコマンドを利用します。図 2-3 にセルフコンパイラとクロ
スコンパイラの違いを示しています。
15
セルフコンパイルの場合
(ワークステーション)
クロスコンパイルの場合
(フロント端末)
sxf90 などで
コンパイル
g77 などで
コンパイル
スーパー
コンピュータ
用LM
ワークステーション用
LM
スーパーコンピュータ
で実行
SXで実行時のメモリの
大きさを調べるのは
sxsize
実行時のメモリの
大きさを調べるのは
size
NQSでジョブとして投入
(qsubコマンドを利用)
スーパーコンピュータで実行される
実行
図 2-3
セルフコンパイラとクロスコンパイラ
無事にコンパイルが終わったら、コンパイラが何をしているかを確認する
ようにしましょう。ベクトル化、並列化、最適化などを行います。Sxf90 でコ
ンパイルした場合は、-R5 オプションをつけると、編集リストが出力されコン
パイラが自分のプログラムをどういじったのかを調べることができます。
また、実際に実行させなくても、図 2-3 で示すように size コマンドや sxsize
コマンドを利用することにより、実行させたときに、どのくらいのメモリ容
量を必要とするかの目安を調べることができます。
2.4 スーパーコンピュータで計算させるにはバッチ処理
プログラムを計算機で実行させる(計算させる)方法には、以下の 2 通り
の方法があります。
・ 会話処理(インタラクティブや対話処理とも呼ばれる)
通常のパソコンやワークステーションの作業。利用者と計算機が、会話
をするように入出力を繰り返す処理方法で、デバッグや短時間の計算に
適している。
・ バッチ処理(一括処理)
16
それぞれ、表 2-1 に示すような特徴があります。
会話処理
実行のさせ方
計算機にむかってコマン コマンドなどを書いて、
ドを入力
いつ実行されるか
システムにわたす
コマンドを入力するとす 計算機システムが状況に
ぐに実行される
端末の画面
バッチ処理
応じて実行する
占有され、ログインした 計算機システムにまかせ
ままにしておく
ておけばよいので、ログ
アウトして帰ってもよい
計算機全体の効率
考慮できない
表 2-1
考慮できる
会話処理とバッチ処理
2.3 のクロスコンパイルにより、できたロードモジュールをスーパーコンピ
ュータで実行させるためには、バッチ処理(NQS)を用います。NQS とは Network
Queing System を略したもので、アメリカ航空宇宙局(NASA)で航空力学数値
シミュレーション計画の一環として開発されたシステムであり、UNIX システ
ムで、バッチ処理を行うシステムのことを言います。2003 年 8 月以降は NQS
を発展させ分散環境やグリッドコンピューティングにも対応した NQSII(PBS
に準拠したシステム)が利用されていますが、概念は同じです。2007 年 1 月
に更新予定の次期システムでも同じ概念で利用でき、スーパーコンピュータ
以外の高性能計算機にも同様の仕組みで計算させることができるようになる
予定です。
「どのクラスで計算させるのか」
「どのディレクトリにある、どのロードモジュールを実行させるのか」
「どのディレクトリにデータを吐き出すのか」
「計算を実行せよ」
などスーパーコンピュータにさせたい仕事の命令を記述しておくと、スーパ
ーコンピュータが自分の都合に合わせて実行します(スケジューリング)。こ
のひとかたまりの計算をジョブと呼びます。
17
2.5 適切なクラス(キュー)を決定する。
1 章にも記述しましたが、スーパーコンピュータで計算させる場合は、計算
時間(CPU 時間)だけでなくメモリ容量も重要なファクタとなります。以下は
CPU 時間とメモリ容量によって決められたクラス(キューとも呼びます)の例
です。どこのクラスで実行させるかを決めることが必要です。ジョブの特性
によってなるべく効率よく計算を行い、システム全体の効率を高め、利用者
全体がハッピーになるようにしたいと考えていますが、そのためには、利用
者が適切なクラスにジョブを投入することが必要です。
クラス
演算時間
主記憶
(時間)
(GB)
CPU 数
既定値
最大値
既定値
最大値
P1
10
360
1
2
1
P4
20
720
5
60
4
P8
40
1440
10
60
8
表 2-2
スーパーコンピューターのクラスの例
表 2-2 では、P1,P4,P8S という3つのクラスがあります。各々のクラスの演
算時間(CPU 時間)の既定値は、以下で述べる NQS ファイルで何も指定しない
とそのクラスの投入したジョブの制限値が 10 時間、20 時間、40 時間であり、
指定すれば最大値である 360 時間、720 時間、1440 時間までの CPU 時間が許
されていることを示しています。主記憶(メモリ)容量についても同様に、
指定しなければ、各々のクラスの既定値である1GB,5GB,10GB までしか利用で
きませんが、指定すれば各々2GB,60GB,60GB まで利用できます。また CPU 数
は並列化されたプログラムのときに必要です。くれぐれも並列化されていな
いプログラムを並列用のクラスに投入しないようにしてください。
なお、2007 年 1 月から CMC では JobManipulator と呼ばれるジョブスケジュ
ーリングが導入され、演算時間ではなく経過時間(エラプス時間)を指定す
るなど変更されていますので、注意してください。
18
2.6 NQS ファイルを用意しましょう
ロードモジュール、NQS ファイル、入力データなどが用意できたら
NQS ファイルとは以下のようなものです。それぞれのシステムにあわせてカ
スタマイズして利用してください。
例)
######
#PBS -q p1@cmc
#PBS -l cputim_job=1:00,memsz_job=0.5GB
set OUTD = "/fs/home/`id -un`/work"
set LM = "/fs/home/`id -un`/lm"
set JOBNAME = "job_name"
set NAMLIST = "namelist"
set LMNAME = "lmname"
echo "*******
echo ""
$JOBNAME *******"
クラス(キュー)の指
CPU時間とメモリの指
定(指定しない場合は
既定値の値となる)
こう指定しておくと自分のユーザー名が
自動的に入ります。
FORTRAN90/SX の実行時オプションの
指定、詳細は、「FORTRAN90/SX プロ
グラミングの手引」を参照。このままお
まじないで入れておいてもよい。
setenv F_PROGINF DETAIL
setenv F_FF05 $OUTD/$NAMLIST
setenv F_FF11 $OUTD/outdata11
echo ""
echo "------- $LMNAME Start -------"
echo ""
FORTRAN プログラム中で open
文を使用せずに write 文を利用
している場合の外部ファイル名
の事前設定方法
cd $OUTD
ワーキングディレクトリへ移動しておく
$LM/$LMNAME
if ( $status != 0 ) then
goto ABNORMAL
endif
echo
echo
echo
goto
""
"*******
""
END
ABNORMAL:
echo ""
echo "*******
echo ""
ロードモジュールの実行
EXEC NORMAL END
*******"
正常終了したかどうかを終了コ
ードにより判断して出力
ABNORMAL END
*******"
END:
2.7 いよいよスーパーコンピュータで計算させる(ジョブ実行)
ロードモジュール、NQS ファイル、入力データなどが用意できたら、いよい
19
よスーパーコンピュータに計算させます。図 2-4 は NQS を用いたジョブ実行
の概念を示します。
図 2-4
NQS を用いたジョブ実行の概要
①フロント端末から、用意した NQS ファイルを qsub コマンドを使ってスー
パーコンピュータに投入することを、ジョブの投入といいます。②NQS サーバ
ーはジョブを受け取ると各々のジョブにリクエスト id と呼ばれる番号をつけ
ます。この例では、999.cmc がリクエスト id(ジョブ番号と呼ぶこともある)
であり、ジョブの状態表示や、強制終了、結果の確認などに利用します。③
で、スーパーコンピュータがジョブを実行し、④で結果を投入ホストに返し
ます。これらの作業のためにスーパーコンピュータに入る(ログイン)必要
はありません。表 2-3 のコマンドをフロント端末から入力するだけでスーパ
ーコンピュータに仕事をさせることができるのです。
ジョブの投入
qsub NQSファイル
ジョブの状態表示
qstat
ジョブの強制終了
qdel リクエスト ID
表 2-3
よく使う NQS コマンドの例
20
④では特に指定しない限り、標準出力と標準エラー出力と呼ばれる2つの
ファイルが NQS ファイルを投入したディレクトリに返ってきます。
標準出力は、プログラム中で write(6,*)のように書かせたものです。思
ったようにプログラムが動いているか、確認してください。標準エラー出力
は、ゼロで割った(ゼロディビ)とか、計算機の内部表現で表せる大きさ以
上の数値になってしまった(オーバーフロー)などのエラーが表示されます
ので、ジョブ終了後、結果が返ってきたら必ず確認するようにしましょう。
SX では、2.6 の例題の NQS のように、F_PROGINFO DETAIL と書いていると、ど
のくらいの CPU 時間がかかった、メモリを利用したなどの実行時の詳細情報
もここに出力されますので、確認するくせをつけましょう。
front02 <106>%jobr
RequestID ReqName UserName Queue Pri STT S Memory
CPU Elapse R H Jobs
--------------- -------- -------- -------- ---- --- - -------- -------- -------- - - ---90160.cmc
cmc_job1 -------- P16
0 RUN - 2.46G 293216.1
90330.cmc
a1job
-------- P16
0 RUN - 16.91G 881704.69 220279 Y Y
90354.cmc
xbeam
-------- P16
0 RUN - 35.52G 473291.39 141749 Y Y
89428.cmc
param1 -------- P1
0 QUE - 0.00B 0.00
89429.cmc
param2 -------- P1
0 QUE - 0.00B 0.00
88278.cmc
Rabc111 -------- P4
0 RUN - 7.88G 829518.3
88286.cmc
Rabc112 -------- P4
0 RUN - 6.51G 795085.9
90232.cmc
job2
-------- P4
0 QUE - 0.00B 0.00
:
:
リクエストid
クラス(キュー)
ジョブの状態
RUN:実行中
QUE:実行待ち
使用しているメモリ容量
CPU時間
エラプス時間
自分でNQS中に書いたジョブの名前
(自分で分かりやすいものにすればいい)
図 2-5
スーパーコンピュータで実行中ジョブの確認例
標準の qstat コマンドでは、自分のジョブの状態しか表示されませんが、
CMC とレーザー研では、jobr というコマンドが用意されており、システムで
実行中の全てのジョブの状態を表示させることができ、図 2-5 はその表示例
です。コマンドを入力した時点の、各々のジョブのリクエスト id やクラス、
使用しているメモリ容量、CPU 時間、エラプス時間などが表示されます。
それぞれのシステムで若干異なりますが、スーパーコンピュータで計算さ
せるために必要な概念は終了です。イメージはつかめましたでしょうか?
21
3
要注意!長時間ジョブや大容量ファイルを使用する方
3.1 ディスク構成を知り、正しく工夫してディスクを使いましょう
スーパーコンピュータのような大規模なシステムでは、通常プログラムや
NQS ファイル、小さな入力データなどを保存するための領域と、スーパーコン
ピュータで計算したときに出力される膨大な出力データを保存するための領
域は別に用意されています。また、多人数で共有するのですから、一人当た
り使用できるディスク容量もquotaという機能を用いて制限されていま
す。自分のプログラムから出力される予定のデータ容量を把握し、正しくデ
ィスクを使うようにしましょう。大容量のファイルを必要とするのに、分か
らないという方はシステム管理者に問い合わせるようにしてください。
せっかくシミュレーションしたのだから、すべてのデータをいつまでも保
存したいと思われるでしょうが、スーパーコンピュータのディスクに、いつ
までも皆さんの大容量のデータを保存することはできません。データをどの
ように解析し、可視化し、保存する必要があるのかをよく考える必要があり
ます。以下のような方法がありますが、時代とともに状況は変化します。ス
ーパーコンピュータで計算させるのは意外に簡単なのですが、あとの処理が
実は難しいことなのです。どのような方法をとるとしても、プログラムや NQS
ファイルなどの実行するための環境を保存しておくということは重要なこと
です。
・ 必要になったときに再ランできるように、プログラム、ロードモジュー
ル、入力データファイル、NQSファイルなどを保存しておき、膨大な
生データは保存しない。
・ 手元のパソコンにファイル転送して保存しておく。
・ 生データは膨大なので、可視化して小さくなった画像データのみを保存
しておく。
22
・ 科学技術計算は倍精度(実数型の場合、有効桁数は 10 進で約 16 桁)で
行う必要があるが、単精度または工夫して精度を落として保存すること
により、ファイルの容量を小さくする。
(倍精度のまますべてを保存する
必要があるかよく考えましょう)
・ 計算領域すべてを保存するのではなく、注目している現象の部分のみを
保存する。
・ 時間発展による変化を観測したい場合、変化のみを保存する。
・ 現象に応じた圧縮方式を用いる。ここでいう圧縮は compress や gzip コ
マンドによる圧縮ではありません、プログラムなどによる工夫を意味し
ています。間違ってもスーパーコンピュータに compress や gzip の仕事
をさせないで下さい。
などです。もっといい方法をご存知の方はぜひ教えてください。
3.2 リランとリスタート
長時間のジョブを実行させようとする方は、リランとリスタートについて
知っておいて下さい。
リランとは:
スーパーコンピュータでは、何かの障害があってジョブが中断してしまっ
た場合は、通常は、自動的に最初から計算をやり直す設定になっています。
実行していたジョブがアボートし、最初からやり直すことをリランと言いま
す。せっかく途中まで計算していたのにリランになることで、ファイルが上
書きされる場合もあります。それは困るという方は、リランしない設定でジ
ョブを実行することができます。
リスタートとは:
実行中のジョブの状態を保存しておき(チェックポイント)
、途中からジョ
ブを再開することをリスタートと言います。チェックポイントはシステムに
負荷がかかるのでむやみには行いません。
23
CMC やレーザー研の SX では、3 日以上かかるようなジョブの場合には、シ
ステム側で自動的にチェックポイントをとっています。障害により 3 日以上
かかるようなジョブは、チェックポイントを採取した時点からリスタートす
ることができます。このような事態に陥った場合は、システム管理者から連
絡がありますので、あわてないようにしてください。リスタートするために
は、そのジョブが必要とするファイルがすべて残っていることが必要です。
あわててジョブに関連するファイルを削除してしまうと、せっかく途中から
リスタートできるはずだったのに、できなくなってしまうことがあります。
CMC では、フェアシェアという仕組みによって、負担金に応じて公平にジョ
ブを実行します。ジョブが自動的にホールドされて、リスタートされる場合
があります。この場合も、ジョブに関連するファイルがないと、リスタート
に失敗します。
長時間ジョブに関連するファイルは消したりしないようにしましょう。
長時間ジョブを実行しようとする方は、プログラムを工夫し、自分で定期
的にリスタートに必要なデータを保存する方もおられますが、あまり頻繁に
チェックポイントをとることはスーパーコンピュータにふさわしくない負荷
を与える場合がありますので注意しましょう。
24
4
知っていると便利
4.1 make
プログラムをコンパイルするのには、sxf90 というコマンドを利用すると説
明しましたが、UNIX では「make」というツールを利用するとプログラムの管
理が非常に便利です。makeには以下のような利点があります。
・
make
と入力するだけで、コンパイルとリンクを行う。
・ 修正したファイルのみを自動的に再コンパイルするので、2 度目以降のコ
ンパイルは時間が短縮できる。
(変更したファイルのみを自動的にコンパ
イルする)
・ プログラムの管理が容易
などです。2.2 で説明しましたように、プログラムは、機能別に複数のファ
イルから1つのプログラムが形成されています。
「makefile」によって、複数
のファイルを管理します。
「make」は奥が深いですが、ソースプログラムのあ
るディレクトリに Makefile という名前で以下のようなファイルを用意すると、
make とタイプするだけで使えます。
例)
##############################
### makefile sample for SX
### 2004/9/29
### Institue of Laser Engineering
### Osaka University
##############################
コンパイルコマンドを指定
F90 = sxf90
#FFLAGS = -P auto
コンパイルオプションを指定す
るときは、コメントをはずしここ
に指定
LD = $(F90)
LDFLAGS =
実行オブジェクトファイル
名の指定
LOAD = hello
25
SRCS = a.f b.f
OBJS = $(SRCS:.f=.o)
ソースプログラム名の指定
all:$(LOAD)
$(LOAD):$(OBJS)
$(LD) $(OBJS) $(LDFLAGS) -o $@
.f.o:
$(F90) $(FFLAGS) -c $<
行の先頭はタグ(スペースでは
ない)
4.2 FORTRAN の基礎
4.2.1 メモリのアクセスは連続に
スーパーコンピュータに限りませんが、なるべくメモリには連続的にアク
セスするようにプログラムをするのが基本です。FORTRAN では、1 次元配列は
a(100)のように宣言すると図 4-1 のように配置されます
a(1)
a(2)
a(3)
a(4)
・・・・・
図 4-1
FORTRAN 1 次元配列のメモリ上の配置
プログラムでは以下のように書くと、aに連続的にアクセスすることにな
ります。
do i=1,imax
a(i)=・・・
enndo
a(100,50)のような2次元以上の配列でも、メモリ上では2次元
ではなく、1次元に並んでいます。2次元以上の配列の場合には、以下のプ
ログラムのように、内側からループを回すようにすると、メモリに連続的に
アクセスすることになりますので、基本的には内側からループを回すように
しましょう。
do j=1,imax
do i=1,imax
a(i,j)=・・・
enndo
enddo
26
a(1,1)
a(2,1)
a(3,1)
:
:
a(100,1)
a(1,2)
a(2,2)
a(3,2)
:
:
a(100,50)
図 4-2
FORTRAN
2 次元配列のメモリ上の配置
4.2.2 計算機の内部表現
スーパーコンピュータといえども、数値を表すのはビット(1か0)が基
本です。1 バイトは 8 ビットで、単精度(シングル)の数値は 4 バイト(32
ビット)、倍制度(ダブル)の数値は 8 バイト(64 ビット)で表現されます。
4バイト(32ビット)
4バイトの
整数
(1)
0
S
31
単精度
有効数字 10進数 約7けた
約10−38から1037
※
4バイトの
実数
(1.0e0)
8バイトの
実数
(1.0d0)
01
S
89
31
※ 指数部
01
S
※
倍精度
有効数字 10進数 約16けた
約10−308から10308
仮数部
11 12
63
指数部
仮数部
8バイト(64ビット)
図 4-3
SX のデータ内部表現の例
27
計算機内部で1と0をどう組み合わせて、どう数値を表現するかを内部表
現と呼び、いろいろと流派があります。IEEE 形式、IBM 形式、クレイ形式、
SX では、float0 形式などとも呼ばれます。図 4-3 は SX の float0 形式(IEEE
形式と同じです)の整数と実数(単精度と倍制度)を説明したものです。単
精度と倍精度では有効桁数や表現範囲が異なり、科学技術計算は倍精度で行
うのが基本です。図で示す SX の float0 形式の場合は、単精度では有効桁数
が約 7 桁で 10-38 から 1038 までの範囲の数字が表せますが、倍制度では約 16 桁
の有効桁で、10-308 から 10308 の範囲の数字を表すことができることを示してい
ます。
気をつけていただきたいのは、整数の「1」と実数の「1.0」は内部表現が
異なり、実数の「1.0」は正確には「1」ではないということや、シングルの
「1.0e0」とダブルの「1.0d0」も異なるということです。このようなことは、
計算機で計算するときには、当然気をつけるべきことですが、案外意識しな
い方がおられるので、ご注意ください。もちろん、数字で表された「1」と
文字の「1」も異なります。
4.2.3 書式付データと書式なしデータ(アスキーとバイナリ)
FORTRAN から入出力するには read 文と write 文を利用しますが、その扱う
データには「書式つき」と「書式なし」と呼ばれる2種類のデータがありま
す。前者を「アスキー」、後者を「バイナリ」と呼ぶこともあります。
・書式つきファイル(文字形式)
テキストファイルのため、エディタで見ることができる。
機種に依存しないので、移植が容易。
編集処理が入るため、アクセスが遅い。
書式なしファイルに比べてファイル容量が2∼3倍大きくなる。
プログラム中で、以下のよう書式を指定して書き出したデータを書式付き
と呼びます。nは外部装置番頭と呼ばれる番号で、ファイルを指定します。
利用者が任意につけることができますが、番号は1−4,7−99を用い
ると、どんな機種でも使用できます。
28
write(n,*)a,b
write(n,100)a,b
・書式なしファイル
バイナリファイルのため、エディタで見ることができない。
機種に依存する。(計算機の内部表現形式)
編集処理が入らないため、アクセスが速い。
書式つきファイルに比べてファイル容量が小さくなる。
write(n)a,b
例えば、
「1.234567810」という数字を書式付きで文字として、有効
桁数 4 桁で出力すろという書式で、以下のようにプログラムの中に書いて
write(6,100)a
100
format(1x、e11.4)
出力すると、
「+0.1235E+11」となり、11文字(11バイト)も必
要です。これを、書式をつけずに、単精度のバイナリのままで出力すると、約
1/3 の 4 バイトで、有効数字約 7 桁を表すことができるのです。
ちなみに、
「write(6,*)a」 とすると「+1.23456778
E+10」のようになり、15文字(15バイト)と4倍も大きくなります。
(注:実際には+は表示されませんが、符号の文字も必要なので、ここではわ
ざと+と記載しています)
4.2.4 プログラム中の read&write とファイルの関係
プログラム中に、read 文があれば読みにいきますし、write 文があれば書き
ます。では、いったいどこのデータを読み書きするのでしょうか?Fortran プロ
グラム中では装置番号を用いてファイルを指定しています。その装置番号がど
のファイルに該当するかは、指定方法や、実行のさせ方によります。
29
Read(5,*)
標準入力ファイル
(FORTRANでは装置番号5番)
Write(6,*)
標準出力ファイル
(FORTRANでは装置番号6番)
図 4-4
標準入出力と READ,WRITE 文の関係
基本的に READ も WRITE も同じですが、FORTRAN では 5 番と 6 番の装置番号は
特別な意味があり、それぞれ標準入力、標準出力に対応します。ワークステー
ションやパソコンで会話処理で実行している場合や、スーパーコンピュータで
もインタラクティブで実行している場合は、それぞれキーボードと画面に相当
します。インタラクティブで実行する場合は、何も指定しなければ、READ 文に
なると、プログラムはそこでとまり、キーボードからのデータ入力を待ち、WRITE
文で書かせたものは、画面に表示されます。
NQSを利用して、ジョブとして実行する場合には、それぞれファイルが該
当します。Read(5、*)に対応するファイルは、
setenv
F_FF05
inputfile
のように指定すると、inputfile というファイルから読み込みます。Write した
ものは、ジョブを qsub で投入したディレクトリに、 jobname.o999
のように
o(オー)とリクエスト番号が付加されたファイルが標準出力として返ってき
ます。
Write(8,*)
一般の出力ファイル
図 4-5
WRITE 文とファイルの関係
一般的には5,6以外の 1-99 の任意の数字をその他の装置番号として用いま
す。プログラム中には、write(8,*)のように記載しておき、実行時
30
にどう指定するかによって、実際に入出力するファイルが決まります。
NQS ファイル中に
setenv
F_FF08
outdata1
のように指定すると「outdata1」というファイルに出力されます。
NQS ファイル中に何も指定しないで実行させると、「FORT.8」のように
装置番号が付加されたファイルが作成されます。
プログラム中に、open(8,file=
FILE8
) のように open 文を使って指定す
ることもできます。
ファイル名は上記のように指定しますが、どのディレクトリかという指定は、
インタラクティブ(会話型)の場合は、ロードモジュールを実行させたディレ
クトリにファイルが入出力されます。NQS の場合は何も指定しないとスーパーコ
ンピュータのホームディレクトリに入出力され、ディスク容量の制限でエラー
になったりしますので注意してください。NQS ファイル中で、cdで移動してい
ればそのディレクトリになります。どのディスク(ファイルシステム、ディレ
クトリ)を利用すべきかをよく考え、システムにふさわしい場所を使いましょ
う。
4.2.5 ビッグエンディアンとリトルエンディアン
スーパーコンピュータで計算した結果を再びスーパーコンピュータで使用
する大容量のデータの場合は書式なしファイル(バイナリ)を用いるのがよ
く、データサイズが小さくパソコンに持っていって処理する場合は書式つき
ファイルを用いるのが一般的ですが、バイナリデータも互換性のある場合が
多くなっています。同じ IEEE フォーマットと呼ばれる形式のバイナリを利用
している場合は、スーパーコンピュータでもワークステーションでも利用で
きる場合がありますから、容量の大きいデータを扱う方は、なるべくバイナ
リを利用するようにしましょう。ただ、同じ IEEE フォーマットと呼ばれるバ
イナリデータでもバイトの並びが異なるリトルエンディアン、ビッグエンデ
ィアンという形式があり、注意が必要です。変換方法は色々ありますが、こ
31
のような処理はスーパーコンピュータではなく、ワークステーションやパソ
コンでやるべきです。
いろいろな方法があり、皆さん案外苦労されています。2003 年 6 月にレー
ザー研の利用者にアンケートした変換方法の例を載せておきます。CMC の
SX(ビッグエンディアン)で計算したバイナリデータを他のワークステーショ
ンやパソコンで解析するなどの場合に利用されている方法です。ご自分の環
境にあわせて工夫してみてください。なお、以下の方法は csh という UNIX の
シェルを前提にしています。
・ IDL や AVS というソフトウェアを用いて可視化などの作業を行うときに、
ソフトウェアの機能を利用して変換。
・ インテル FORTRAN(Windows,Linux)の環境変数を利用。
(2007 年 1 月からサービス開始している CMC の front 端末にもインテル
の Fortran と C がインストールされています。SX と同じ方法です)
・ マック(ビッグエンディアン)Absoft fortran のコンパイルオプション
を利用。
・ Windows の Absoft Fortran の open 文の中で、
convert=
big_endian
と
指定する。
以下の2つの方法は、2007 年3月にサービス終了した CMC の旧システムで利
用していた方法ですが、参考のために残しておきます。
・ CMC のアプリケーションサーバー(リトルエンディアン)
efc コマンドを利用してコンパイルを行い、実行する前にnn番の装置番
号のファイルを
setenv F_UFMTENDIAN
nn
と指定すればよい。(SX と
同様の利用方法)
・ フロント端末(リトルエンディアン)
PGI コンパイラでコンパイルするときに pgf90 ‒byteswapio プログラム
のようにオプションを指定してコンパイルする。
以上のようなものですが、機種によって異なる場合があるということを知
っておくことが重要です。
32
5
シミュレーションに最低必要な UNIX コマンド
スーパーコンピュータの OS は UNIX をベースにしています。UNIX がわから
ないので、使えないという方もおられますが、UNIX は一度覚えるととても簡
単で便利です。スーパーコンピュータに計算させるためだけでしたら、それ
ほどたくさん知らなくても、大丈夫です。ここでは、最低これだけ知ってい
ればなんとかなるというコマンドをご紹介します。
UNIX といっても、実はいろいろな種類があります。システム管理者にとっ
ては、設定ファイルが異なるなどいろいろ違いがあるのですが、利用者にと
っては基本の使い方はほとんど同じです。ここでご紹介するようなコマンド
は非常に一般的ですので、どのような UNIX でもほとんどそのまま使えます。
なるべく基本的なコマンドを使うことで、システムが異なっても同様に使え
るというメリットがあります。Linux でも同様です。
5.1 ディレクトリとファイル
UNIX を使うためには、ディレクトリとファイルを理解しておく必要があり
ます。UNIX のファイル構造は分類、整理して、管理しやすいように、
「階層構
造」にあっています。ファイルとは、書類のことで文書、プログラム、デー
タなどのことです。
ディレクトリとは、Windows でいうフォルダのことで、ファイルやディレク
トリを格納します。それぞれのディレクトリの間は自由に移動することがで
きます。階層の一番上のディレクトリを「ルートディレクトリ」、ログインし
た時に最初にいるディレクトリを「ホームディレクトリ」と呼びます。ディ
レクトリ構造や、ホームディレクトリはシステム管理者によって決められて
います。
自分のホームディレクトリの下は、自由にディレクトリやファイルを作っ
たり消したりすることができます。自分で分かりやすいように名前をつけ管
理するようにしましょう。また、あとで述べるパーミッションに気をつけま
しょう。基本的には、自分しか「読めない、書けない、実行できない」とい
う設定にします。
33
/
ルートディレクトリ
home
user1
dir1
file2
user2
file1
あなたのホームディレクトリ
file3
ファイル
図 5-1
ディレクトリの概念図
UNIX ではファイルはディレクトリとファイル名で指定します。たとえば図
5-1 で、ホームディレクトリの下の dir1 の下のファイル file は
/home/user1/dir1/file
という指定をします。これを「絶対パス」と呼びます。
/home/user1というホームディレクトリからは
dir1/file
という指定方法も可能です。これを「相対パス」と呼びます。
[/]から始まると絶対パスでルートディレクトリからの指定、
[/]がなければ、現在いるディレクトリ(カレントディレクトリ)か
らの指定となります。
34
5.2 ディレクトリの操作・表示に関するコマンド
コマンド名
概略
pwd
Print
Working
Directory
カレントディレクトリの表示(今どこにいるの?)
cd
Change
Directory
ディレクトリの移動
mkdir
MaKe
DIRectory
ディレクトリの作成
rmdir
ReMove
DIRectory
ディレクトリの削除
ls
LiSt
(リスト)
ディレクトリの内容をリスト出力する
表 5-1
使用例)
・ カレントディレクトリを表示する
pwd
・ カレントディレクトリ下のworkディレクトリへ移動する
cd
work
・ ホームディレクトリへ移動する
cd
・ カレントディレクトリ下へworkディレクトリを作成する
mkdir
work
35
5.3 ファイルの操作・表示に関するコマンド
コマンド名
概略
cat
conCATenate
more
MORE
ファイルの内容の表示
ファイルの内容を画面単位にとめながら表示
(続きを見るのはスペース、終了はq)
vi
UNIXの標準的な画面エディタ
どこへいっても使えます
cp
CoPy
ファイルのコピー
mv
MoVe
ファイル名の変更
rm
ReMove
ファイルの削除
表 5-2
使用例)
・ カレントディレクトリのfileの内容の表示
cat
file
more
file
・ カレントディレクトリの file を file2 という名前でコピー
cp
file
file2
・ /home/user2/sample をカレントディレクトリの file という名前でコピー
cp
/home/user2/sample
file
・ カレントディレクトリの file を sample に名前を変える
mv
file
sample
・ カレントディレクトリの file を削除する
rm
file
36
5.4 ファイルのアクセス許可に関するコマンド
コマンド名
概略
ls
LiSt (ls
−lとするとファイルのオーナー、アク
セス権などの詳細が表示されます)
chmod
Change
MODe
ファイルやディレクトリのアクセス許可の変更
mkdir
MaKe
DIRectory
ディレクトリの作成
表 5-3
UNIX では、ファイルやディレクトリに対して
読み取り許可(Read)
書き込み許可(Write)
実行許可(eXecute)
の3つの権利を、利用者自身、同じグループの人、その他の人に対してそ
れぞれ設定されています。ls
−lとすると「drwxrwxrwx」の
ように表示されます。
「drw-------」に表示される最初の1文字がdはディレク
トリであることを示し、−ならファイルです。その次は3個ごとにrwxならそれぞ
れ Read 権、Write 権、実行権があり、―なら権利がないことを示します。
(ls
−lの出力例)
-rw-------
1 user
grp
21
9 月 16 日 13:58 filea
-rwx------
1 user
grp
21
9 月 16 日 13:58 fileb
-rw-r--r--
1 user
grp
276
9 月 16 日 13:58 filec
drwx------
3 user
grp
512 12 月 25
2003 dir1/
drwxr-xr-x
3 user
grp
512 12 月 25
2003 dir2/
上記の出力例の
fileaは自分のみ、
「Read」
「Write」可能
filebは自分のみ、
「Read」
「Write」
「実行」可能
filecは自分のみ、
「Read」
「Write」可能、
同じグループとその他の人は「Read」のみ可能
37
dir1は自分のみ「Read」
「Write」「実行」可能
そのディレクトリに移動して新規にファイルやディレクトリを作成可能
dir2は自分は「Read」「Write」
「実行」可能
その他の人は、そのディレクトリに移動はできるが、新規ファイルの作成は
できない。
rwxをそれぞれ許可を1、禁止を0で表すことができます。
−−−は
000
8進数では0
r−−は
100
4
rw−は
110
6
rwxは
111
7
となり、以下のようにアクセス許可を変更できます。
使用例)
・ fileaのアクセス許可を rwxr--r̶-に変更する
chmod
744
filea
・ failaのアクセス許可を rw-------に変更する
chmod
more
600
file
5.5 パスワードを管理するコマンド
パスワードは非常に重要です。登録が完了したときにもらった初期パスワ
ードはすぐ変更しましょう。また、定期的に変更することはよいことです。
システムによっては、一定期間以上同じパスワードを使用できない場合があ
ります。
パスワードの変更には、passwdコマンドを使用しますが、スーパー
コンピュータがあるようなセンターでは、通常NIS(Network Information
System)と呼ばれるシステムを利用して、複数の計算機が統一的に管理され
ています。どれかの計算機でパスワードを変更すると、すべての計算機のパ
スワードが変更されます。その場合は、yppasswdコマンドを用いま
す。
38
どちらも古いパスワードを入力し、確認のために新しいパスワードを2回
入力すると変更されます。パスワードは画面には表示されません。
%passwd
もしくは
yppasswd
Old password:
←今までのパスワードを入力する
New password:
←新しいパスワードを入力する
Re-enter new password:
←再度、新しいパスワードを入力
5.6 その他の便利なコマンド
コマンド名
概略
man
MANual
grep
文字列の検索(とっても便利!)
マニュアルの表示
Global Regular-Expression Print
head
HEAD
ファイルの先頭の表示
tail
TAIL
ファイルの末尾の表示
表 5-4
使用例)
・fileaの中で、文字列
grep
error
error
filea
・ grepの使い方を調べる
man
grep
39
を含む行を出力する
Fly UP