パソコン&スパコンで 計 算 するための 基 礎 知 識 2014.6.9 大 阪 大 学 レーザーエネルギー 学 研 究 センター 高 性 能 計 算 機 室 福 田 優 子 (ile-comp@mail.ile.osaka-u.ac.jp) スーパーコンピュータ 利 用 の 基 礎 として 2004 年 より CMC の 講 習 会 で 実 施 し てきたテキストを パソコンのみ 利 用 される 方 にも スーパーコンピュータの 知 識 を 生 かして 参 考 になるテキストとして 多 くの 専 門 家 の 方 にアドバイスいただいて 改 版 したものを 2011 年 より レーザー 研 のホームページで 公 開 しています さらに 2012 年 4 月 には 東 北 大 学 サイバーサイエンスセンターの 機 関 紙 SENAC にも 掲 載 していただきました 掲 載 にあたり 東 北 大 学 の 関 係 者 の 方 に 丁 寧 にチェッ クと 修 正 をしていただき 分 かりやすいテキストになりましたので 本 日 はその 記 事 をテキストとしてお 配 りします UNIX 入 門 の 部 分 は 省 略 しましたが CMC の 講 習 会 で 実 習 も 交 えて 説 明 がありま すし 東 北 大 学 のホームページには テキストが 公 開 されていますので 参 考 にして ください FORTRAN 入 門 のよいテキストがなかったのですが レーザー 研 の 共 同 研 究 者 で ある 摂 南 大 学 の 田 口 先 生 が 研 究 室 用 に 作 成 されていたものを 一 般 的 に 書 き 直 したも のをレーザー 研 に 提 供 いただき レーザー 研 のホームページで 公 開 しています さらに 一 般 的 に 書 き 直 されたものが 2012 年 7 月 号 の SENAC から 3 回 連 載 さ れました 2013 年 5 月 に さらに 加 筆 され 演 習 問 題 も 追 加 された 2013 年 版 をレー ザー 研 のホームページで 公 開 しています 実 際 に 自 分 でプログラムを 長 年 書 いてこら れた 研 究 者 の 記 事 ですので 大 変 参 考 になると 思 います 参 考 URL) 大 阪 大 学 サイバーメディアセンター 大 規 模 計 算 機 システム http://www.hpc.cmc.osaka-u.ac.jp/j/index.html 大 阪 大 学 レーザーエネルギー 学 研 究 センター 高 性 能 計 算 機 室 http://www.ile.osaka-u.ac.jp/research/cmp/ ( 公 開 テキスト) 東 北 大 学 サイバーサイエンスセンター 大 規 模 科 学 計 算 システム http://www.ss.isc.tohoku.ac.jp/
初 めてプログラムするための 基 礎 知 識 パソコンもスパコンも 基 礎 は 同 じ- 福 田 優 子 大 阪 大 学 レーザーエネルギー 学 研 究 センター 1.はじめに 大 学 もしくは 大 学 院 で 初 めてパーソナルコンピュータ( 以 下 パソコン) 場 合 によってはスー パーコンピュータ( 以 下 スパコン)などを 用 いて 計 算 しようという 方 を 対 象 に 知 っておいて いただきたい 基 礎 知 識 を 説 明 します 京 が 2011 年 6 月 と 11 月 に Top500 で 世 界 一 になりまし たが 急 激 にパソコンや 研 究 室 のクラスタマシンなどが 進 展 し ほとんどの 方 が 大 規 模 なシステ ムを 利 用 せず パソコンで 研 究 を 進 められ 正 しい 基 礎 を 勉 強 されないままに 大 学 を 卒 業 してい かれることを 残 念 に 感 じています せっかく 大 学 にいるのだから その 間 に 最 先 端 のスパコン (HPC: High Performance Computer)につながる 知 識 も 勉 強 してください あくまで 概 念 の 記 述 に 重 点 をおいていますので 最 新 の 情 報 や 詳 細 は マニュアルや 各 センターなどの WEB やテキスト などを 参 照 してください それらを 理 解 できる 下 地 を 作 りたいというのが この 記 事 の 目 的 です プロセッサのマルチコア 化 や 分 散 メモリによる 並 列 化 は 世 の 中 の 流 れになっています 手 元 のパソコンだけで 当 面 はこと 足 りそうだとしても 最 初 に 読 んでいただければ 参 考 になるテキス トとしてホームページで 公 開 しているものから 抜 粋 し 加 筆 修 正 しました 元 のテキスト [1] も 機 会 があればご 参 照 いただけたら 幸 いです 私 は 理 工 系 の 情 報 系 以 外 の 学 生 の 方 がスパコンを 使 ってシミュレーションをされるのをサポ ートしてきましたが 基 礎 的 なことは 学 習 したことがない あるいは 習 ったことはあるけど 忘 れ たなど 基 礎 的 な 概 念 がつかめていない 方 も 多 いです ほんの 10 年 前 までは パソコンがパワフ ルだったわけではないので 計 算 しようとされる 初 心 者 の 皆 さんには 端 末 室 に 来 て 作 業 していた だき 分 からないことをその 都 度 説 明 することができました しかし 最 近 はみなさん 研 究 室 (ひ ょっとしたら 自 宅 )からネットワーク 経 由 で 利 用 されるので 直 接 指 導 する 機 会 が 減 っています また 分 からないことは 研 究 室 の 先 輩 に 教 えてもらうというのが 難 しい 方 も 増 えているように 感 じています たとえ 大 型 の 計 算 機 を 使 う 必 要 がなくても 気 軽 に 質 問 していただきたいと 思 って いますが 質 問 するのも 難 しいですよね 講 習 会 も 活 用 していただくとよいのですが 都 合 があ わなくて 受 講 する 機 会 がないままに 卒 業 される 方 も 多 いでしょう スパコンや 計 算 機 システム は どんどん 変 化 しています 研 究 室 のまわりの 方 が(たとえ 教 授 の 先 生 でも) 最 新 の 正 しい 情 報 をご 存 じとは 限 りません 気 楽 に 各 センターのシステム 管 理 者 や 相 談 窓 口 にお 問 い 合 わせくだ さい スパコンと 一 口 で 言 いますが 定 義 は 時 代 とともに 変 わりますし 種 類 もいろいろあります 東 北 大 学 に 導 入 されている NEC 製 の SX というスパコンはベクトル 並 列 型 と 呼 ばれるもので シス テムについて 特 殊 なことを 勉 強 しなくても 少 し 勉 強 して 素 直 にプログラムを 作 ると 簡 単 に 性 能 を 引 き 出 すことができます ベクトル 化 は 簡 単 です 理 解 してプログラミングを 行 うと パソコ ンなどのプログラミングの 基 礎 にもなりますし 並 列 化 への 発 展 も 可 能 です ベクトル 化 と 並 列
化 については 東 北 大 学 サイバーサイエンスセンターや 大 阪 大 学 サイバーメディアセンターでも 毎 年 何 回 か 講 習 会 が 開 催 されています 一 度 は 勉 強 しておかれることを 強 くお 薦 めします Fortran の 超 初 心 者 用 のテキストの 重 要 性 も 感 じていましたが 摂 南 大 学 の 田 口 先 生 が ご 自 分 の 研 究 室 の 学 生 のために 作 られていた 入 門 書 の 研 究 室 独 自 の 部 分 をはぶき Fortran の 初 歩 か ら 説 明 したテキスト [2] を 提 供 してくださいました レーザー 研 のホームページ [3] でも 公 開 してい ますし 次 号 以 降 の SENAC に 投 稿 させていただく 予 定 ですので ぜひ 一 度 目 を 通 してください 2. 計 算 機 はややこしい? - 用 語 の 説 明 - 計 算 機 は 難 しいという 方 と 話 をしていると 用 語 が 混 乱 しているためと 思 われることがよくあ ります メーカーによって 同 じものを 違 う 用 語 で 呼 んだり 場 合 によっては 同 じ 用 語 を 異 なる 意 味 で 用 いるなど たしかに 分 かりにくいと 思 われることが 多 々あります みな 自 分 の 用 語 がデ ファクトスタンダードだと 思 われているようですし 計 算 機 の 世 界 はどんどん 変 化 していますの でそのようなものだと 思 わないと 仕 方 ないと 思 います ただ この 記 事 は 概 念 をつかんでいた だくことを 目 的 としていますので この 記 事 内 の 用 語 は 以 下 のように 統 一 いたします 計 算 機 スパコン クラスタマシン ワークステーション パソコンの 総 称 として 用 いています ワー クステーションとは OS が Linux や UNIX で 複 数 の 人 で 利 用 している 計 算 機 を 示 し パソコンやワ ークステーションも 含 めて 説 明 したい 場 合 に 計 算 機 と 呼 ぶことにします また 複 数 の 計 算 機 を 並 べて ひとつのシステムとしたものをクラスタマシンと 呼 びます CPU プロセッサ コア( 中 央 処 理 装 置 ) 計 算 機 の 心 臓 部 分 であり 演 算 をする 装 置 のこと プロセッサと 呼 ばれることもあります チ ップの 周 波 数 をあげることで 計 算 機 の 性 能 は 向 上 してきましたが 近 年 では CPU をたくさん 並 べることで 性 能 を 向 上 しようという 動 きが 加 速 してきており CPU の 中 のコアが 2 つあるのはデ ュアルコア 複 数 のコアをもつものはマルチコアと 呼 ばれます メモリ( 主 記 憶 装 置 ) 計 算 するときにデータやプログラムを 記 憶 するところ 電 源 が 落 ちるとデータは 消 えてしまい ますが CPU と 高 速 に 通 信 できます 電 源 が 切 れても 保 存 したいデータは ディスクなどに 保 存 します ジョブ 計 算 機 に 処 理 させるひとかたまりの 仕 事 のことを 意 味 し ここでは 主 にプログラムの 実 行 のこ と デフォルト( 既 定 値 ) 計 算 機 に 何 かやりなさいとか ここを 利 用 しなさいなどと 指 示 する 際 に 様 々なオプションが ありますが 明 示 的 に 指 定 しない 時 に 自 動 的 に 採 択 される 値 のこと サイバーサイエンスセンター 阪 大 CMC SX 東 北 大 学 サイバーサイエンスセンター 大 阪 大 学 サイバーメディアセンター(CMC) もしくはそ のスパコンシステムのこと SX は サイバーサイエンスセンター 阪 大 CMC に 設 置 されているス パコンのこと
3.パソコンやスパコンを 利 用 する 前 に( 基 礎 の 基 礎 ) 3.1 ハードディスクは 壊 れる!セーブは 常 識 ハードディスクは 壊 れるものと 思 っていて 間 違 いありません プログラムや 大 事 なデータなど 消 えたら 困 るものは 必 ずセーブするようにしましょう セーブというと USB や DVD に 保 存 する など 他 のメディアに 保 存 することと 思 われるかもしれませんが 他 のハードディスクにコピーし ておき 物 理 的 に 2 箇 所 以 上 においておくこともセーブになります 地 理 的 に 離 れた 箇 所 に 保 存 するのがよいかもしれません 自 分 の 財 産 は 自 分 で 守 る 危 機 管 理 意 識 を 常 に 持 ちましょう パ ソコンのハードディスクが 壊 れることはよくあります 3.2 研 究 を 始 める 前 に 自 分 の 身 体 は 自 分 で 守 る 研 究 を 始 め 画 面 に 向 かって 仕 事 をするようになると 夢 中 になって 時 間 を 忘 れるかもしれませ ん ゲームやインターネットでも 同 じです 当 然 のことながら 長 時 間 画 面 に 向 かって 作 業 する と 眼 などに 悪 い 影 響 があります 自 分 の 身 体 や 眼 は 自 分 で 守 るしかありません VDT 作 業 指 針 と いうものがあり イスの 高 さや 画 面 の 高 さ 適 度 に 休 憩 をとるなどが 紹 介 されています WEB で VDT 症 候 群 VDT 作 業 対 策 などで 調 べると たくさんヒットしますので 一 度 は 目 を 通 し ておき 1 時 間 画 面 に 向 かって 作 業 したら 10 分 は 眼 を 休 めるなど 自 分 で 工 夫 して 自 分 で 自 分 の 身 体 を 守 ってください 長 年 講 習 会 では 頭 は 休 めなくていいですよと 話 をしてきました が 最 近 は 頭 も 適 当 に 休 ませてあげないといけないと 思 っています 3.3 プログラムを 作 る パソコンやスパコンに 仕 事 をさせるためには 通 常 プログ ラムを 作 成 します 商 用 のプロ グラムやソフトを 利 用 する 場 合 もありますし エクセルで 大 抵 のことを 済 ます 方 もいます が ここでは 基 本 的 に 自 分 でプ ログラミングすることを 前 提 にしています 先 輩 から 引 き 継 いだものなど 既 存 のプログラ ムを 利 用 する 場 合 も 多 いでし ょうが 中 身 を 理 解 するように しましょう シミュレーション の 条 件 を 変 える 測 定 する 物 理 量 を 追 加 するなどプログラム の 修 正 追 加 が 必 要 な 場 合 にも あてはまります (よくない 例 ) (よい 例 ) 図 1 プログラム 作 成 の 概 念 図
図 1に よくない 例 としてあげているように 思 いつくままにプログラムを 書 くということは 設 計 図 なしに 家 を 建 てるのと 同 じことです あらかじめ 考 えるべきことは 紙 に 書 き 出 し 簡 単 な フローチャート( 流 れ 図 )などを 作 っておくと プログラミング 作 業 は 楽 になり エラーも 減 り ます ドキュメントはあとで 作 ろうと 思 う 方 も 多 いと 思 いますが 画 面 に 向 かうときには ドキ ュメントは 完 成 していて ただタイピングするだけという 状 態 が 理 想 です 3.4 誰 が 見 ても 分 かりやすいプログラムを 作 りましょう プログラミングには それぞれ 人 の 流 儀 がありますが よいプログラムとは 誰 が 見 ても 分 かり やすいプログラムです 計 算 機 は 年 々 速 くなりますし 少 々 回 り 道 をさせても 文 句 も 言 わず 言 われたとおり(これが 問 題 のときもあるのですが) 計 算 してくれます 実 際 に 計 算 機 を 使 用 した 際 に 最 も 効 率 が 悪 いのは 人 間 です コメントをたくさんつける コメントとは プログラムの 実 行 は 行 なわれ ない 注 釈 のことで 覚 えのために 書 いておくメ モのことです 特 に 単 位 はよく 間 違 えますので m(メートル)なのか cm(センチメートル)なの か g(グラム)なのか kg(キログラム)なのか などを プログラム 中 にコメントで 書 くように しましょう 修 正 箇 所 には 日 付 とともに 簡 単 な 概 要 を 書 くようにしましょう コメント 例 )! 以 降 行 末 までコメント ルールに 従 った 変 数 名 やファイル 名 をつける レーザー 研 の 西 原 研 究 室 では 伝 統 的 にローカルな 変 数 は Z で 始 めるというルールがありま した このルールに 従 うことで 変 数 を 見 ただけで 他 では 使 われていないということが 分 かり ます ファイル 名 ディレクトリ 名 なども 一 時 的 なものは z で 始 めるというルールに 従 うこと で あとで 安 心 して 消 すことができます 核 融 合 科 学 研 究 所 の 坂 上 先 生 は ローカル 変 数 に 加 えて 仮 引 数 COMMON 変 数 や 変 数 の 型 (REAL*4,REAL*8,INTEGER,CHARACTER)などでも 区 別 するルールを 作 り 分 かりやすくされている そうです 参 考 にしてください 3.5 自 分 のプログラムのメモリ 容 量 に 注 意 しましょう 計 算 機 に 計 算 させようという 場 合 には 速 さが 気 になりますが いわゆる 計 算 機 の 心 臓 である CPU の 他 に メモリをどれだけ 使 うかということも 重 要 です 計 算 のための 変 数 配 列 の 他 に 計 算 機 に 対 する 命 令 などもすべてメモリ 上 に 展 開 されます 計 算 機 を 使 って 計 算 しようとする 方 は メモリ 容 量 にも 注 意 を 払 うようにしてください 2G バイトのメモリを 搭 載 しているパソコンで 5G バイトのメモリを 必 要 とする 計 算 をしようとしたら 動 かない もしくは 動 いてもとても 遅 いと いうことになります
一 般 的 には 以 下 のような 方 法 で プログラムが 実 行 に 必 要 とするメモリ 容 量 を 知 ることができ ますが これはファイルのサイズとは 異 なりますので 注 意 してください Linux,UNIX 標 準 の size コマンドを 用 いる (SX の 場 合 は sxsize コマンド) 大 規 模 なプログラムの 場 合 は 概 算 できる 場 合 が 多 い 自 分 で 大 規 模 な 配 列 サイズを 計 算 す る 例 : 変 数 の 数 配 列 数 8 バイト+ 実 際 には 処 理 系 が 勝 手 にとる 一 時 メモリも 無 視 できない 場 合 がありますし 配 列 の 動 的 割 付 けという 機 能 を 用 いた 場 合 も size コマンドではわかりません 以 下 のような 方 法 で 調 べることが できる 場 合 もあります Linux の top コマンド プログラム 実 行 中 の 情 報 あるいは 終 了 後 に 出 力 される 情 報 を 参 照 する(SX の 場 合 は 実 行 終 了 時 の program information に 詳 細 が 表 示 されます) 3.6 メモリとスワップとキャッシュ パソコンでいろいろ 仕 事 をさせている 場 合 も 同 様 ですが 多 数 の 仕 事 を 同 時 に 計 算 機 にさせる と メモリに 入 りきらない 分 は メモリよりもはるかにアクセス 速 度 の 遅 いディスク 装 置 などに 追 い 出 されます この 状 態 をスワップと 呼 びます( 図 2) スワップが 発 生 するとシステムの 効 率 は 非 常 に 悪 くなります 前 節 で 2G バイトのメモリを 搭 載 しているパソコンで 5G バイトのメモリ を 必 要 とする 計 算 をしようとしたら とても 遅 い 場 合 があると 書 きました このような 場 合 は メモリに 入 りきらない 分 をディスクに 入 れたり 出 したりしながら 計 算 しようとしますので 遅 くな ります メモリを 増 設 したら パソコンが 速 くなったとい う 経 験 をお 持 ちの 方 も 多 い のではないでしょうか さらに キャッシュとい う 言 葉 も 聞 いたことがあり ますか CPU で 高 速 に 計 算 す るためには メモリからいか に 高 速 にデータを 供 給 する 図 2 CPU とメモリとスワップの 概 念 図 かが 重 要 ですので CPU とメ モリの 間 のデータ 転 送 の 遅 延 を 隠 ぺいするために 用 いられます パソコンなどでは 特 に ここを 効 率 よく 利 用 することも 高 速 化 では 重 要 です 計 算 速 度 (= 計 算 時 間 )にだけまどわされないように 注 意 してください
4.プログラミングするときに 気 をつけてほしいこと 4.1 メモリのアクセスは 連 続 に 3 章 の 最 後 で 説 明 したように メモリやキャッシュを 有 効 に 利 用 することはプログラミングの 基 本 ですが 実 際 にプログラムを 作 るときには 極 力 メモリに 連 続 アクセスするように 心 がけてく ださい そうすれば 難 しいことは 考 えなくても 有 効 利 用 できます ここでは Fortran の 説 明 は しませんので Fortran がわからないという 方 は 詳 細 は 田 口 先 生 のテキスト [2] などを 勉 強 してください プログラムのイメージを 紹 介 します Fortran では 1 次 元 配 列 はa (100)のように 宣 言 すると メモリ 上 には 図 3 上 のように 配 置 されます プログラムでは 図 3 下 のように 書 くと aに 連 続 的 にアクセ スすることになります 図 3 1 次 元 配 列 のメモリ 上 の 配 置 ( 上 )と a(100,50)のような 2 次 元 以 上 の 配 列 でも プログラム( 下 ) メモリ 上 では 2 次 元 ではなく 1 次 元 に 並 ん でいます 2 次 元 以 上 の 配 列 の 場 合 には 図 4 の 左 のプログラムのように 配 列 の 1 次 元 目 を 内 側 の ループにすると メモリ に 連 続 的 にアクセスする ことになります しかし 右 のように 配 列 の 2 次 元 目 の 内 側 のループに 書 く と 100 個 おきに 不 連 続 図 4 Fortran 2 次 元 配 列 のメモリ 上 の 配 置 にアクセスすることにな りますので 配 列 の 1 次 元 目 を 内 側 ループで 回 すようにしましょう C 言 語 の 場 合 は Fortran と 異 なりますので 注 意 してください 4.2 ループ 長 は 長 くなるように マルチコアプロセッサが 時 代 の 流 れとなり パソコンでも 4 コア 搭 載 などが 当 たり 前 になって きました ベクトル 化 という 概 念 はスパコンだけでなく パソコンでプログラムする 際 にも 知 っ ておいた 方 がよい 知 識 です パソコンのコンパイラでも ベクトル 化 できました のようにメッ セージを 表 示 する 場 合 があります 詳 細 は 4.1 に 記 したようにメモリに 連 続 にアクセスするだ けでなく ループ 長 が 長 くなるように 気 をつけることも 重 要 です たとえば(3,3,10000)のような 配 列 を 宣 言 したほうが 物 理 的 にピッタリくる 場 合 でも (10000,3,3)のように 配 列 を 宣 言 し 1 次 元 目 の 10000 でループを 回 すようにしてください そう
することで メモリに 連 続 にアクセスしますし ループ 長 も 長 くなり 効 率 のよいプログラムとな ります ( 注 意 :ベクトルマシンは 上 記 のことがあてはまりますが スカラーマシンの 場 合 は キャッシ ュメモリにデータがのるかどうかの 影 響 が 大 きいので 一 概 には 言 えない 場 合 もあります [1] ) 4.3 バンクコンフリクトは 避 けましょう メモリは バンクと 呼 ばれる 幾 つかのグループに 分 かれており 異 なるバンク 間 を 並 列 にアクセスできるようになっていますが 同 じバンクへのアクセスが 集 中 するとメモリアクセスの 性 能 が 低 下 します バンクの 数 は 機 種 によって 異 なりますが 2 のべき 乗 の 場 合 が 多 いので 一 般 的 には 2 のべき 乗 の 間 隔 でのアクセス は 避 けた 方 がよいでしょう 具 体 的 には 2 次 元 目 以 降 で a とい う 配 列 にアクセスする 場 合 は 右 のように 1 次 元 目 の 配 列 の 宣 言 を 奇 数 にします 1 次 元 目 でアクセスする 場 合 は 連 続 アクセス になりますので このようなことは 不 要 です 4.4 入 出 力 は 効 率 的 に 入 出 力 (read write print など)は 効 率 が 悪 いものです はじめのうちは 分 かりやすいよ うに いたるところに write 文 を 挿 入 してもいいと 思 いますが 本 格 的 に 計 算 するようになった ら 注 意 してください 図 5 左 のようにループの 一 番 内 側 に write 文 を 書 くと 15 回 write 文 を 実 行 し 15 レコード 出 力 され ますが 右 のように 書 けば 1 回 の 実 行 で 1 レコードで 出 力 されま す なるべくこのように 書 くほう が 効 率 はよくなります 図 5 write 文 の 形 式 と 効 率 さらに 本 格 的 に 計 算 するよう になると 計 算 の 重 いループの 中 に 入 出 力 文 を 入 れるのも 効 率 が 悪 くなります 配 列 を 宣 言 して その 中 に 格 納 し 上 のように まとめて 出 力 するようにしましょう 配 列 ( 変 数 )に 格 納 すると いうことは メモリ 上 にデータを 保 存 するということであり メモリ 容 量 がその 分 必 要 になりま す しかし 最 近 はメモリ 容 量 も 大 きくなりましたので 入 出 力 の 効 率 化 を 意 識 したほうがより 実 効 性 能 があがります 5.プログラム 実 行 の 概 念 プログラムができあがり 計 算 機 で 計 算 させるためには 機 械 語 に 翻 訳 する 必 要 があります プ ログラム 言 語 は 人 間 に 分 かる 言 語 になっており 標 準 的 な Fortran の 仕 様 で 書 いていれば 機 種 依 存 はありません パソコンでもスパコンでも 実 行 させることができます という 意 味 で なるべ
く 標 準 的 な 仕 様 でプログラミングするほうがいいでしょう 機 械 語 に 翻 訳 するためには コンパ イラを 利 用 しますが これは 機 種 によって 対 応 するものが 異 なります パソコン 用 の 機 械 語 は スパコンでは 動 かないことは 言 うまでもありません 機 種 だけでなく コンパイラのバージョン や 32 ビット 用 か 64 ビット 用 かなども 注 意 が 必 要 です 自 分 が 実 行 しようとしている 計 算 機 の ハードウェアとソフトウェアの 概 要 は 知 っておいてください 5.1 コンパイル 図 6 はプログラムを 作 成 してから 計 算 機 で 実 行 させるまでの 翻 訳 する 作 業 (コンパイル)の 概 念 を 示 しています 機 械 語 に 翻 訳 されたものをオブジェクトモジュールと 呼 びます これでも まだ 実 行 はできません リンク( 結 合 )という 作 業 をすると 実 行 形 式 であるロードモジュール(LM 実 行 オブジェクトファイル 実 行 形 式 実 行 ファイル パソコンでは exe(エグゼ)などと 呼 ば れることもあります)が 作 られます 計 算 機 はこのロードモジュールを 実 行 することができます 通 常 コンパイルとリンクの 作 業 をあわせてコンパイルと 呼 び そのためのツールをコンパイラと 呼 びます 図 6 に 示 すように メイ ンプログラム サブルーチ ンなどのプログラム 単 位 にソースプログラムを 保 存 したときは make とい うツールを 使 うと 便 利 で す コンパイルすると フ ァイル 名.o という 名 前 で オブジェクトモジュール ができますが それとの 関 連 もわかり 易 くなります 図 6 コンパイルの 概 念 例 えば source.f90 とい うプログラムを 作 成 し Linux 上 で gfortran source.f90 のように 実 行 するとコンパイルとリンクが 行 われ a.out という 名 前 のロードモジュールができます オブジェクトモジュール(source.o)は 明 示 的 に 残 すと いう 指 定 をしないと 残 らない 場 合 もあります コンパイルしたのに a.out ができないという 場 合 は 何 かエラーが 発 生 しています 原 因 をきちんと 調 べて 対 処 してください よく 使 う 関 数 など 汎 用 的 なものはライブラリとして 保 存 し リンクするだけで 再 利 用 するとい うようなことも 行 われています 個 人 的 にオブジェクトの 形 でライブラリ( 例 :libabc.a など) として 保 存 して 利 用 されている 方 も 多 いですし 科 学 技 術 計 算 のための 複 雑 な 関 数 などは 市 販 されているものや フリーのものもいろいろあります
5.2 デバッグしましょう できたプログラムは 正 しく 計 算 できているかどうか 必 ずチェックしましょう 理 論 計 算 で 解 が 分 かっている 問 題 を 計 算 させ プログラムが 正 しいかどうかチェックすべきです プログラム を 修 正 したときのために チェックする 仕 組 みを 入 れておくべきでしょう また 部 分 ごとに 思 ったとおりの 答 えをだしているかどうかチェックしてから 全 体 をチェックしてください いきな り 全 部 動 かして どこでエラーがおこっているか 分 からないというようなことは 避 けてください それらしく 計 算 機 が 答 えをだしてくると 正 しい と 思 いがちですので 注 意 するようにしま しょう 5.3 CPU 時 間 とエラプス 時 間 計 算 機 で 計 算 させたときの 時 間 には CPU 時 間 とエラプス(Elapse) 時 間 と 呼 ばれるものがあ ります CPU 時 間 は 実 際 に CPU が 演 算 処 理 した 時 間 のことです エラプス 時 間 は 経 過 時 間 とも 呼 ばれ 計 算 機 が 処 理 を 開 始 してから 終 了 するまでの 時 間 です 特 に 並 列 化 したプログラムの 場 合 は このエラプス 時 間 が 重 要 になります 複 数 の 人 間 で 利 用 するような 計 算 機 では ひとつの 仕 事 が 終 わってから 次 の 仕 事 を 実 行 する というようなやり 方 ではなく 投 入 された 複 数 の 仕 事 を 少 しずつ 実 行 する ことにより 処 理 します このようにして 同 時 にいろいろな 処 理 がすすん でいるように 見 えます これをタイムシェアリングと 呼 びます もともとは 大 型 計 算 機 で 開 発 さ れた 手 法 ですが 現 在 ではパソコンでもこのような 手 法 が 用 いられています そのため 計 算 時 間 を 考 えるときに この 両 方 の 時 間 に 注 意 を 払 う 必 要 があります 他 に 何 も 計 算 していないはず なのに CPU 時 間 と エラプス 時 間 に 大 き な 違 いがある 場 合 は 入 出 力 の 効 率 が 悪 い とか メモリが 足 り なくてスワップが 発 生 しているなどが 考 えられます ここではひとつの CPU で 3 個 のジョブ を 実 行 する 様 子 を 使 って CPU 時 間 とエラ プス 時 間 について 説 図 7 CPU 時 間 とエラプス 時 間 明 します 図 7 は (A) (B) (C)の 3 個 のジョブが 実 行 されているときの 計 算 機 の 様 子 を 示 しています それぞれ ボックスの 部 分 が 実 際 に CPU を 使 って 計 算 した 時 間 を 示 し その 合 計 がそのジョブの CPU 時 間 と なります エラプス 時 間 は 矢 印 で 示 される 開 始 から 終 了 までの 時 間 を 示 します 複 数 のジョブが 同 時 に 実 行 されているために ひとつひとつのジョブの CPU 時 間 は 短 くても エラプス 時 間 が 長
くなっていることが 分 かります 同 時 に 多 数 のジョブを 実 行 させるほど 一 個 ずつのジョブの 終 了 までにかかるエラプス 時 間 は 長 くなります 6.スパコンの 動 向 とプログラミング(ベクトル 化 & 並 列 化 の 概 念 ) 6.1 スパコンとは スパコン の 定 義 は 時 代 とともに 変 化 します あまりにも 多 様 化 したので 高 性 能 コンピュ ータ(High Performance Computer) と 呼 ばれるようにもなりました その 時 代 で 最 も 高 速 な 処 理 能 力 をもつコンピュータの 総 称 主 に 科 学 技 術 分 野 に 利 用 される スーパーコンピュータセンターに 設 置 されているコンピュータ などと 思 うとイメージがわくかもしれません プロセッサの 単 体 性 能 は 限 界 に 達 してきていますので マルチコア& 超 並 列 が 時 代 の 流 れと 言 わざるをえません 2011 年 6 月 と 11 月 に 2 期 連 続 で 世 界 一 となった 京 は 864 筐 体 (CPU 数 88128 個 )の 構 成 で LINPACK(リンパック)と 呼 ばれるベンチマークにおいて 世 界 最 高 性 能 の 10.51 ペタフロップス( 毎 秒 1 京 510 兆 回 の 浮 動 小 数 点 演 算 数 )を 達 成 しました しかし こ のような 超 並 列 の 計 算 機 を 研 究 で 使 いこなすためには 並 列 化 プログラミングが 必 要 であり 相 当 の 技 術 力 を 必 要 とします ここではそのイメージとプログラミングについて 紹 介 しますが ベクトル 化 ( 自 動 並 列 化 ) 分 散 メモリ 並 列 化 を 考 えるのが 基 本 です ( 注 意 :パソコンでもベクトル 化 を 活 用 すべき 方 向 になってきていますが キャッシュの 影 響 の 方 が 大 きいので パソコンの 場 合 は まずベクトル 化 はちょっと 言 い 過 ぎかもしれません しかし 今 後 の 計 算 機 の 動 向 はそういう 方 向 に 進 むように 思 いますし ベクトル 化 は 基 本 的 にシ ンプルにプログラミングすればよいので 作 業 の 効 率 を 考 えてまず ベクトル 化 をお 勧 めしま す そうしておけば パソコンでは 時 間 がかかって 困 るようになったときに サイバーサイエン スセンターや 阪 大 CMC のスパコンを 使 えば 簡 単 に 高 速 化 が 期 待 できます ) 6.2 ベクトル 化 とは ベクトル 化 は 繰 り 返 し 処 理 される 配 列 データを 一 括 で 演 算 させることです SIMD 演 算 とプ ログラミングの 考 え 方 は 基 本 的 に 同 じですし ベクトル 化 は ループの 演 算 で 性 能 を 発 揮 します イメージは 図 8 に 示 すようなもので 配 列 データを 一 括 して 演 算 し 計 算 を 高 速 化 するもので すが コンパイルによりベクトル 化 前 とは 計 算 順 序 が 異 なることもあり プログラミング 上 注 意 すべきことがあります ベクトル 化 できるようにプログラムするのが 基 本 と 思 って 間 違 いありません ベクトル 化 につ いては 一 度 は 講 習 会 などで 勉 強 されることを 強 くお 勧 めします
図 8 ベクトル 化 のイメージ 6.3 並 列 化 とは 図 9に 並 列 実 行 した 場 合 の CPU 時 間 とエラプス 時 間 のイメージを 示 します 並 列 化 の 目 的 は CPU 時 間 を 短 くすることではなく エラプス 時 間 を 短 くしようとするものです ある 計 算 を 4 並 列 で 実 行 したときは 理 想 的 には 図 に 示 すようにエラプス 時 間 が 1/4 になるはずです 並 列 化 を 考 えるときには メモリが 共 有 か 分 散 かでプログラミングが 大 きく 変 わります メモ リが 共 有 ということは どの CPU からも 同 じメモリが 見 えているので 変 数 のアクセスが 簡 単 で すが 分 散 メモリのときは CPU から 見 えている 変 数 がどのメモリにあるかを 意 識 してプログラミ ングしないといけないので いろいろ 気 をつけないといけません 図 10 に CPU と 主 記 憶 (メモリ)とノード のイメージを 示 してい ます 一 つの CPU を 使 って 計 算 する 場 合 はシ ングル 実 行 と 呼 びます この 場 合 は ベクトル 化 でスピードをかせぎ ます ノード 内 の 複 数 の CPU を 使 って 並 列 計 算 するときには メモ 図 9 並 列 実 行 の CPU 時 間 とエラプス 時 間 リが 共 通 ですので 自 動 並 列 や OpenMP など で 並 列 化 できます
図 10 共 有 メモリと 分 散 メモリ 並 列 のプログラム 方 法 複 数 のノードを 利 用 する 分 散 メモリに 対 応 した 並 列 化 プログラムを 作 成 するためには 現 在 のところ MPI(Message Passing Interface)と 呼 ばれるメッセージ 通 信 のためのライブラリを 用 い るのが 主 流 です 最 初 から 並 列 プログラムとしてプログラムを 記 述 する 必 要 があり 初 心 者 には かなりハードルは 高 いと 言 わざるをえません HPF と 呼 ばれる 言 語 もあります [4][5][6] ので 興 味 の ある 方 は 参 考 文 献 を 参 照 してください また ノード 内 は 自 動 並 列 や OpenMP で 並 列 化 し ノード 間 は MPI で 並 列 するような ハイブリ ッド 並 列 と 呼 ばれる 方 法 もあります 7.スパコンセンターなどを 利 用 するための 概 念 と 基 礎 知 識 ここからは サイバーサイエンスセンターや 阪 大 CMC のスパコンのように 多 数 の 利 用 者 で 共 有 する 大 規 模 なシステムを 利 用 するための 基 礎 知 識 を 説 明 します パソコンで 利 用 するための 基 礎 知 識 があれば それほど 新 しい 知 識 が 必 要 なわけではありません 詳 細 は 各 センターの 説 明 を 参 照 し 不 明 点 はそれぞれのセンターにお 問 い 合 わせください 利 用 者 からの 質 問 は シス テム 管 理 者 にとっても 勉 強 になりますので 遠 慮 はいりませんよ スパコンの OS は UNIX をベースとしています UNIX が 分 からないから 使 えないという 声 もきき ますが スパコンを 利 用 するだけなら 必 要 なコマンドはそれほど 多 くはありません UNIX Linux はいろいろ 種 類 がありますが 利 用 者 にとって 基 本 的 な 使 い 方 は 同 じですし 一 度 覚 えるととて も 簡 単 で 便 利 です 東 北 大 学 では UNIX 入 門 という 講 習 会 も 開 催 されていますので 一 度 勉 強 され るとスパコンセンターの 敷 居 はうんと 低 くなります レーザー 研 のテキスト [1] でもすこし 紹 介 し ていますので 参 考 にしていただけたら 幸 いです
7.1 利 用 の 流 れ スパコンに 仕 事 をさせるための 通 常 の 作 業 手 順 は 図 13 のようになります ここでフロント 端 末 と 呼 んでいるのは 並 列 コンピュータを 指 します スパコンの 作 業 用 端 末 として 利 用 します データの 解 析 をどこで 何 を 使 って 行 うのがよいかは 一 概 には 決 められませんが 大 容 量 のフ ァイルを 解 析 したり 転 送 したりしたい 方 は 事 前 にシステム 管 理 者 と 相 談 するようにしてくだ さい データ 量 に 応 じてふさわしい 使 い 方 をしないと システムに 負 荷 をかけ 他 の 人 に 迷 惑 をか けることがあります 図 13 スーパーコンピュータ 利 用 の 流 れ 7.2 リモートログインとファイル 転 送 7.1 のような 利 用 の 流 れですが 今 やセンターの 端 末 室 に 行 って 利 用 するということはほとん どなく 手 元 のパソコンからリモートログインして 遠 隔 地 のセンターのシステムを 利 用 するのが 一 般 的 です そのために 手 元 のパソコンに リモートログインとファイル 転 送 するための 環 境 を 用 意 する 必 要 があります 一 般 的 には リモートログインには SSH クライアント ソフト ファイル 転 送 には sftp や scp を 利 用 します それをキーワードにご 自 分 のパソコンにあ う 適 当 なソフトをインストールしてください まわりの 方 に 聞 いてみるのもよいかもしれません レーザー 研 では Windows では Tera Term と Winscp を 利 用 している 人 が 多 いようです Mac OS X はデフォルトで ssh sftp が 搭 載 されていますので terminal を 起 動 して 以 下 のように 入 力 すればサイバーサイエンスセンターにログインすることができます Windows に Cygwin をインストール して 利 用 されている 方 も 多 いですが 初 心 者 にはインストールにちょっと 手 間 がかかるかもしれません
7.3 セルフ 環 境 とクロス 環 境 コンパイラは 計 算 機 の 機 種 に 依 存 し Linux 端 末 などでは 5.1 で 説 明 したコンパイルと 実 行 は 通 常 同 一 の 計 算 機 上 で 行 います このような 環 境 をセルフ 環 境 と 呼 びます 一 方 スパコン はロードモジュールを 高 速 に 実 行 するには 適 していますが コンパイルという 作 業 には 不 向 きで す そのためクロス 環 境 と 呼 ばれる 環 境 を 利 用 します セルフ 環 境 :コンパイルと 実 行 までを 同 じ 計 算 機 で 行 うこと セルフ 環 境 のコンパイラを セルフコンパイラと 呼 ぶ クロス 環 境 :コンパイルと 実 行 を 異 なる 計 算 機 で 行 うこと クロス 環 境 のコンパイラを クロスコンパイラと 呼 ぶ サイバーサイエンスセンターではフロントと 呼 ばれる 端 末 ( 並 列 コンピュータ)が SX のクロス 環 境 のための Linux 端 末 です SX 用 のロードモジュールを 作 るためのクロスコンパイラは sxf90 というコマンドを 利 用 します 図 14 にセルフコンパイラとクロスコンパイラの 違 いを 示 していま す 無 事 にコンパイルが 終 わったら ベクトル 化 並 列 化 最 適 化 などコンパイラが 何 をしている かを 確 認 するようにしましょう sxf90 でコンパイルした 場 合 は -R5 オプションをつけると 編 集 リストが 出 力 されコンパイラが 自 分 のプログラムをどう 変 形 したのかを 調 べることができます 図 14 セルフコンパイラとクロスコンパイラ また 実 際 に 実 行 させなくても 図 14 で 示 すように size コマンドや sxsize コマンドを 利 用 することにより 実 行 させたときに どのくらいのメモリ 容 量 を 必 要 とするかの 目 安 を 調 べるこ とができます
7.4 スパコンで 計 算 させるにはバッチ 処 理 プログラムを 計 算 機 で 実 行 させる( 計 算 させる) 方 法 には 以 下 の 2 通 りの 方 法 があります 会 話 処 理 (インタラクティブや 対 話 処 理 とも 呼 ばれる) 通 常 のパソコンやワークステーションの 作 業 利 用 者 と 計 算 機 が 会 話 をするように 入 出 力 を 繰 り 返 す 処 理 方 法 で デバッグや 短 時 間 の 計 算 に 適 している バッチ 処 理 ( 一 括 処 理 ) イメージは 図 14 に 特 徴 は 表 1に 示 します 7.3 のクロスコンパイルにより できたロードモ ジュールをスパコンで 実 行 させるためには バッチ 処 理 (NQS2 など)を 用 います 表 1 会 話 処 理 とバッチ 処 理 会 話 処 理 バッチ 処 理 実 行 のさせ 方 計 算 機 に 向 かってコマンド を 入 力 コマンドなどを 書 いて システ ムにわたす いつ 実 行 されるか コマンドを 入 力 するとすぐ に 実 行 される 計 算 機 システムが 状 況 に 応 じ て 実 行 する 端 末 の 画 面 占 有 され ログインしたまま にしておく 計 算 機 システムにまかせてお けばよいので ログアウトして 帰 ってもよい 計 算 機 全 体 の 効 率 考 慮 できない 考 慮 できる どのクラスで 計 算 させるのか どのディレクトリにある どのロードモジュールを 実 行 させるのか どのディレクトリにデータを 吐 き 出 すのか 計 算 を 実 行 せよ などスパコンにさせたい 仕 事 の 命 令 を 記 述 しておくと スパコンが 自 分 の 都 合 に 合 わせて 実 行 し ます(スケジューリング) このひとかたまりの 計 算 をジョブと 呼 びます ここでは スパコンに させる 命 令 を 記 述 したものを NQS ファイルと 呼 びます 以 下 に 簡 単 な NQS ファイルの 例 をのせ ます このファイルは それぞれのセンターの 指 示 に 従 って 作 成 してください
考 え 方 は システムにより 異 なりますので それぞれのセンターの 説 明 を 参 照 して 自 分 のプ ログラムに 合 わせて 適 切 に 指 定 するようにしてください 7.5 いよいよスパコンで 計 算 させましょう(ジョブ 実 行 ) ロードモジュール NQS ファイル 入 力 データなどが 用 意 できたら いよいよスパコンに 計 算 させます 図 15 は NQS を 用 いたジョブ 実 行 の 概 念 を 示 します 1は 用 意 した NQS ファイルを qsub コマンドを 使 ってフロント 端 末 からスパコンに 投 入 します これをジョブの 投 入 と 言 います 2NQS サーバーはジョブを 受 け 取 ると 各 々のジョブにリクエス 図 15 NQS を 用 いたジョブ 実 行 の 概 念 ト id と 呼 ばれる 番 号 をつけます この 例 では 999.job がリクエスト id(ジョブ 番 号 と 呼 ぶこと もある)であり ジョブの 状 態 表 示 や 強 制 終 了 結 果 の 確 認 などに 利 用 します 3で スパコ ンがジョブを 実 行 し 4で 結 果 を 投 入 ホストに 返 します これらの 作 業 のためにスパコンに 入 る (ログインする) 必 要 はありません 表 2 のコマンドをフロント 端 末 から 入 力 するだけでスパコ ンに 仕 事 をさせることができるのです 表 2 よく 使 う NQS コマンドの 例 ジョブの 投 入 qsub NQS ファイル ジョブの 状 態 表 示 qstat ジョブの 強 制 終 了 qdel リクエスト ID 4では 特 に 指 定 しない 限 り 標 準 出 力 と 標 準 エラー 出 力 と 呼 ばれる 2 つのファイルが NQS ファ イルを 投 入 したディレクトリに 返 ってきます
標 準 出 力 は プログラム 中 で write(6,*)のように 書 かせたものです 思 ったようにプログラ ムが 動 いているか 確 認 するための 小 容 量 の 出 力 に 利 用 してください 基 本 的 には 画 面 に 出 力 さ せるイメージですので ここに 大 量 に 出 力 すると システムによっては 全 て 出 力 できない 場 合 が あります 大 容 量 の 出 力 は 別 ファイルにするようにしてください 標 準 エラー 出 力 には ゼロ 割 りや 計 算 機 の 内 部 表 現 で 表 せる 大 きさ 以 上 の 数 値 になってしまったなどのエラーが 記 録 されま すので ジョブ 終 了 後 結 果 が 返 ってきたら 必 ず 確 認 するようにしましょう SX では どのくら いの CPU 時 間 がかかった メモリを 利 用 したなどの 実 行 時 の 詳 細 情 報 もここに 出 力 されますので 確 認 するようにしましょう 7.6 ディスク 構 成 を 知 り 正 しく 工 夫 してディスクを 利 用 しましょう スパコンのような 大 規 模 なシステムでは 多 人 数 で 共 有 するのですから 自 分 のプログラムか ら 出 力 される 予 定 のデータ 容 量 を 把 握 し 正 しくディスクを 使 うようにしましょう 大 容 量 のフ ァイルを 必 要 とするのに 分 からないという 方 はシステム 管 理 者 に 問 い 合 わせるようにしてくだ さい せっかくシミュレーションしたのだから すべてのデータをいつまでも 保 存 したいと 思 われる でしょうが スパコンのディスクに いつまでも 皆 さんの 大 容 量 のデータを 保 存 することはでき ません データをどのように 解 析 し 可 視 化 し 保 存 する 必 要 があるのかをよく 考 える 必 要 があ ります 時 代 とともに 状 況 は 変 化 しますが 現 在 は 以 下 のような 方 法 が 考 えられます スパコン で 計 算 させるのは 意 外 に 簡 単 なのですが あとのデータ 処 理 が 実 は 難 しい 場 合 があります どの ような 方 法 をとるとしても プログラムや NQS ファイルなど 実 行 するための 環 境 を 保 存 してお くということは 重 要 なことです 必 要 になったときに 再 実 行 できるように プログラム ロードモジュール 入 力 データフ ァイル NQS ファイルなどを 保 存 しておき 膨 大 な 生 データは 保 存 しない 手 元 のパソコンにファイル 転 送 して 保 存 しておく 生 データは 膨 大 なので 可 視 化 して 小 さくなった 画 像 データのみを 保 存 しておく 科 学 技 術 計 算 は 倍 精 度 ( 実 数 型 の 場 合 有 効 桁 数 は 10 進 で 約 16 けた)で 行 う 必 要 がある が 単 精 度 または 工 夫 して 精 度 を 落 として 保 存 することにより ファイルの 容 量 を 小 さく する ( 倍 精 度 のまますべてを 保 存 する 必 要 があるかよく 考 えましょう) 計 算 領 域 すべてを 保 存 するのではなく 注 目 している 現 象 の 部 分 のみを 保 存 する 時 間 発 展 による 変 化 を 観 測 したい 場 合 変 化 のみを 保 存 する 現 象 に 応 じた 圧 縮 方 式 を 用 いる ここでいう 圧 縮 は compress や gzip コマンドによる 圧 縮 ではありません プログラムなどによる 工 夫 を 意 味 しています 間 違 ってもスパコンに compress や gzip の 仕 事 をさせないでください などです もっといい 方 法 をご 存 知 の 方 はぜひ 教 えてください それぞれのシステムで 若 干 異 なりますが スパコンで 計 算 させるために 必 要 な 概 念 は 終 了 です イメージはつかめましたでしょうか?
8.よくある 質 問 今 までに 質 問 の 多 かった 項 目 です より 詳 しい 説 明 は 田 口 先 生 のテキスト [2] にも 掲 載 されてい ますし WEB などで 調 べることもできます 8.1 計 算 機 の 内 部 表 現 スパコンといえども 数 値 を 表 すのはビット(1 か 0)が 基 本 です 1 バイトは 8 ビットで 単 精 度 (シングル)の 数 値 は 4 バイト(32 ビット) 倍 精 度 (ダブル)の 数 値 は 8 バイト(64 ビッ ト)で 表 現 されます 計 算 機 内 部 で 1 と 0 をどう 組 み 合 わせて ど う 数 値 を 表 現 するかを 内 部 表 現 と 呼 びます 図 16 は SX の float0 形 式 の 整 数 と 実 数 ( 単 精 度 と 倍 精 度 )を 説 明 したもので す 単 精 度 と 倍 精 度 では 有 効 けた 数 や 表 現 範 囲 が 異 なり 科 学 技 術 計 算 は 倍 精 度 で 行 うのが 基 本 です 単 精 度 では 有 効 けた 数 が 約 7 けたで 10-38 図 16 SX のデータの 内 部 表 現 の 例 から 10 37 までの 範 囲 の 数 字 が 表 せますが 倍 精 度 では 約 16 けたの 有 効 けた 数 で 10-308 から 10 308 の 範 囲 の 数 字 を 表 すこと ができることを 示 しています 気 をつけていただきたいのは 整 数 の 1 と 実 数 の 1.0 は 内 部 表 現 が 異 なり 実 数 の 1.0 は 正 確 には 1 ではないということや シングルの 1.0e0 とダブルの 1.0d0 も 異 なるとい うことです このようなことは 計 算 機 で 計 算 するときには 当 然 気 をつけるべきことですが 案 外 意 識 しない 方 がおられるのでご 注 意 ください もちろん 数 字 で 表 された 1 と 文 字 の 1 も 異 なります 8.2 書 式 つきデータと 書 式 なしデータ(アスキーとバイナリ) Fortran から 入 出 力 するには read 文 と write 文 を 利 用 しますが その 扱 うデータには 書 式 つ き と 書 式 なし と 呼 ばれる 2 種 類 のデータがあります 前 者 を アスキー 後 者 を バイナ リ と 呼 ぶこともあります 書 式 つきファイル( 文 字 形 式 ) テキストファイルのため テキストエディタで 見 ることが できる 書 式 つき write 文
機 種 に 依 存 しないので 移 植 が 容 易 編 集 処 理 が 入 るため アクセスが 遅 い 書 式 なしファイルに 比 べてファイル 容 量 が 2~3 倍 大 きくなる プログラム 中 で (n,*),(n,100)のように 書 式 を 指 定 して 書 き 出 したデータを 書 式 付 きと 呼 びます nは 外 部 装 置 番 号 と 呼 ばれる 番 号 で ファイルを 指 定 します 利 用 者 が 任 意 につけ ることができますが 番 号 は 1-4,7-99 を 用 いると どんな 機 種 でも 使 用 できます 書 式 なしファイル バイナリファイルのため テキストエディタで 見 ることが できない 機 種 に 依 存 する ( 計 算 機 の 内 部 表 現 形 式 ) 編 集 処 理 が 入 らないため アクセスが 速 い 書 式 つきファイルに 比 べてファイル 容 量 が 小 さくなる 書 式 なし write 文 プログラム 中 では 右 上 のように ファイルの 番 号 nのみを 指 定 し 書 式 つきの 時 に 指 定 した * や 100 の 書 式 の 指 定 をせずに a,b のデータを 書 き 出 すと 書 式 なしと 言 われるバイナリ の 形 式 でデータを 出 力 します 例 えば 1.2345678 10 という 数 字 を 書 式 つきで 文 字 とし て 有 効 けた 数 4 けたで 出 力 しろという 書 式 で プログラ ムに 書 いて 出 力 すると +0.1235E+11 となり 11 文 字 (11 バイト)も 必 要 です これを 書 式 をつけずに 単 精 度 の 有 効 数 字 4 けたの 書 式 つき 指 定 バイナリのままで 出 力 すると 約 1/3 の 4 バイトで 有 効 けた 数 約 7 けたを 表 すことができるのです ちなみに write(6,*) a とすると +1.2345678E+10 のようになり 15 文 字 (15 バイト) と 4 倍 も 大 きくなります ( 注 : 実 際 には+は 表 示 されませんが 符 号 の 文 字 も 必 要 なので ここ ではわざと+と 記 載 しています) 8.3 プログラム 中 の read write とファイルの 関 係 プログラム 中 に read 文 があれば 読 みにいきますし write 文 があれば 書 きます では いっ たいどこのデータを 読 み 書 きするのでしょうか?Fortran プログラム 中 では 装 置 番 号 を 用 いてフ ァイルを 指 定 しています その 装 置 番 号 がどのファイルに 該 当 するかは 指 定 方 法 や 実 行 のさ せ 方 によります 基 本 的 に read も write も 同 じですが Fortran では 5 番 と 6 番 の 装 置 番 号 は 特 別 な 意 味 があり それぞれ 標 準 入 力 標 準 出 力 に 対 応 します ワークステーションやパソコンで 会 話 処 理 で 実 行 し ている 場 合 や スパコンでもインタラクティブで 実 行 している 場 合 は それぞれキーボードと 画 面 に 相 当 します インタラクティブで 実 行 する 場 合 は 何 も 指 定 しなければ read 文 になると プログラムはそこでとまり キーボードからのデータ 入 力 を 待 ち write 文 で 書 かせたものは
画 面 に 表 示 されます NQS を 利 用 して ジョブとして 実 行 する 場 合 には それぞれファイルが 該 当 します read(5,*) に 対 応 するファイルは NQS ファイル 中 で setenv F_FF05 inputfile のように 指 定 すると inputfile というファイルから 読 み 込 みます write(6 *) のように 出 力 したものは ジョブを qsub で 投 入 したディレクトリに jobname.o999 のように o(オー)とリクエスト 番 号 が 付 加 されたファイルが 標 準 出 力 として 返 ってきます 一 般 的 には 5,6 以 外 の 1-99 の 任 意 の 数 字 をその 他 の 装 置 番 号 として 用 います プログラム 中 に は write(8,*) のように 記 載 しておき 実 行 時 にどう 指 定 するかによって 実 際 に 入 出 力 する ファイルが 決 まります 図 17 標 準 入 出 力 と READ,WRITE 文 の 関 係 NQS ファイル 中 に setenv F_FF08 outdata1 のように 指 定 すると outdata1 というファイ ルに 出 力 されます NQS ファイル 中 に 何 も 指 定 しないで 実 行 させると fort.8 のように 装 置 番 号 が 付 加 されたフ ァイルが 作 成 されます プログラム 中 に open(8,file= FILE8 ) のように open 文 を 使 って 指 定 することもできます ファイル 名 は 上 記 のように 指 定 しますが どのディレクトリかという 指 定 は インタラクティ ブ( 会 話 型 )の 場 合 は ロードモジュールを 実 行 させたディレクトリにファイルが 入 出 力 されま す NQS の 場 合 は 何 も 指 定 しないとスパコンのホームディレクトリに 入 出 力 され ディスク 容 量 の 制 限 でエラーになったりしますので 注 意 してください どのディスク(ファイルシステム デ ィレクトリ)を 利 用 すべきかをよく 考 え システムにふさわしい 場 所 を 使 いましょう 8.4 ビッグエンディアンとリトルエンディアン スパコンで 大 容 量 のデータを 扱 う 場 合 は 書 式 なしファイル(バイナリデータファイル)を 用 い ますが データサイズが 小 さい またはパソコンにダウンロードして 処 理 する 場 合 は 書 式 つきフ ァイルを 用 いるのが 一 般 的 です 容 量 の 大 きいデータを 扱 う 場 合 は バイナリデータを 利 用 する
ようにしましょう ただ 同 じ IEEE フォーマットと 呼 ばれるバイナリデータでもバイトの 並 びが 異 なるリトルエンディアン ビッグエンディアンという 形 式 があり 注 意 が 必 要 です ビッグエンディアンとリトルエンディアンの 変 換 方 法 はいろいろありますが 以 下 のようにソ フトウェアの 機 能 を 使 う 方 法 や コンパイルオプションや 環 境 変 数 を 利 用 するなどの 方 法 があり ます サイバーサイエンスセンターと 阪 大 CMC の SX(ビッグエンディアン)で 計 算 したバイナリデ ータを 他 のワークステーションやパソコン(リトルエンディアン)で 解 析 するなどの 場 合 に 利 用 している 方 法 です 種 々Fortran のコンパイルオプションを 利 用 Fortran の 環 境 変 数 を 利 用 (SX もこの 方 法 で 変 換 できます) IDL や AVS というソフトウェアを 用 いて 可 視 化 などの 作 業 を 行 うときに ソフトウェアの 機 能 を 利 用 して 変 換 以 上 のようなものですが 機 種 によってエンディアンが 異 なるということを 知 っておくことが 重 要 です 自 分 の 利 用 している 環 境 や ファイルの 大 きさ 用 途 にもよりますので 分 からない ときは システム 管 理 者 などにご 相 談 ください 謝 辞 この 記 事 のもとになるテキストの 作 成 にあたっては 東 北 大 学 サイバーサイエンスセンター 大 阪 大 学 サイバーメディアセンター 地 球 シミュレータセンター NEC の 皆 様 の 応 援 とご 助 言 を いただきました 摂 南 大 学 の 田 口 先 生 と 核 融 合 研 究 所 (NIFS)の 坂 上 先 生 からもコメントをいただ きました 東 北 大 学 サイバーサイエンスセンターの 共 同 利 用 支 援 係 共 同 研 究 支 援 係 の 皆 様 には 丁 寧 に 原 稿 のチェックと 修 正 をしていただきました 最 後 に 執 筆 の 機 会 を 与 えていただきました 東 北 大 学 サイバーサイエンスセンター 小 林 広 明 センター 長 に 謝 意 を 表 します 参 考 文 献 [1] パソコン&スーパーコンピュータで 計 算 するための 基 礎 知 識 福 田 優 子 ( ) [2] Fortran でシミュレーションしよう 摂 南 大 学 理 工 学 部 田 口 俊 弘 ( ) [3] 大 阪 大 学 レーザーエネルギー 学 研 究 センター 公 開 テキスト( を 公 開 しています) http://www.ile.osaka-u.ac.jp/research/cmp/text.html [4] HPF 推 進 協 議 会 http://www.hpfpc.org/ [5] PC クラスタで 並 列 プログラミング High Performance Fortran で 楽 々 並 列 化 津 田 孝 夫 監 修 岩 下 英 俊 坂 上 仁 志 妹 尾 義 樹 林 康 晴 共 著 培 風 館 2011 年 3 月 初 版 [6] HPF 講 習 会 テキスト 6 種 類 ( ) [7] 東 北 大 学 サイバーサイエンスセンター http://www.ss.isc.tohoku.ac.jp/ [8] 大 阪 大 学 サイバーメディアセンター http://www.hpc.cmc.osaka-u.ac.jp/