講 習 会 概 略 開 催 日 : 2013 年 3 月 24 日 ( 月 )10:30-18:00 2013 年 3 月 25 日 ( 火 )10:30-18:00 場 所 : 東 京 大 学 情 報 基 盤 センター 4 階 413 遠 隔 講 義 室 講 習 会 プログラム: 3 月 24 日



Similar documents
内容に関するご質問は まで お願いします [Oakforest-PACS(OFP) 編 ] 第 85 回お試しアカウント付き並列プログラミング講習会 ライブラリ利用 : 科学技術計算の効率化入門 スパコンへのログイン テストプログラム起動 東京大学情報基盤セ

Microsoft PowerPoint - 阪大CMSI pptx

<4D F736F F D AC90D1955D92E CC82CC895E DD8C D2816A2E646F63>

(Microsoft Word - \221\346\202P\202U\201@\214i\212\317.doc)

一般競争入札について

質 問 票 ( 様 式 3) 質 問 番 号 62-1 質 問 内 容 鑑 定 評 価 依 頼 先 は 千 葉 県 などは 入 札 制 度 にしているが 神 奈 川 県 は 入 札 なのか?または 随 契 なのか?その 理 由 は? 地 価 調 査 業 務 は 単 にそれぞれの 地 点 の 鑑 定

<4D F736F F D208E52979C8CA78E598BC68F5790CF91A390698F9590AC8BE08CF D6A2E646F6378>


PowerPoint プレゼンテーション

Microsoft Word - 佐野市生活排水処理構想(案).doc

弁護士報酬規定(抜粋)

<4D F736F F F696E74202D B E E88E68C9A90DD8BC65F E DC58F4994C52E >

私立大学等研究設備整備費等補助金(私立大学等

続 に 基 づく 一 般 競 争 ( 指 名 競 争 ) 参 加 資 格 の 再 認 定 を 受 けていること ) c) 会 社 更 生 法 に 基 づき 更 生 手 続 開 始 の 申 立 てがなされている 者 又 は 民 事 再 生 法 に 基 づき 再 生 手 続 開 始 の 申 立 てがなさ

平 成 27 年 11 月 ~ 平 成 28 年 4 月 に 公 開 の 対 象 となった 専 門 協 議 等 における 各 専 門 委 員 等 の 寄 附 金 契 約 金 等 の 受 取 状 況 審 査 ( 別 紙 ) 専 門 協 議 等 の 件 数 専 門 委 員 数 500 万 円 超 の 受

4 参 加 資 格 要 件 本 提 案 への 参 加 予 定 者 は 以 下 の 条 件 を 全 て 満 たすこと 1 地 方 自 治 法 施 行 令 ( 昭 和 22 年 政 令 第 16 号 ) 第 167 条 の4 第 1 項 各 号 の 規 定 に 該 当 しない 者 であること 2 会 社

2016 年 度 情 報 リテラシー 三 科 目 合 計 の 算 出 関 数 を 用 いて 各 教 科 の 平 均 点 と 最 高 点 を 求 めることにする この2つの 計 算 は [ホーム]タブのコマ ンドにも 用 意 されているが 今 回 は 関 数 として 作 成 する まず 表 に 三 科

<4D F736F F D E598BC68A8897CD82CC8DC490B68B7982D18E598BC68A8893AE82CC8A C98AD682B782E993C195CA915B C98AEE82C382AD936F985E96C68B9690C582CC93C197E1915B927582CC898492B75F8E96914F955D89BF8F915F2E646F6

表紙

Taro-08国立大学法人宮崎大学授業

[ 組 合 員 期 間 等 の 特 例 ] 組 合 員 期 間 等 については 年 齢 職 種 などにより 過 去 の 制 度 からの 経 過 措 置 が 設 けられ ており 被 用 者 年 制 度 の 加 入 期 間 ( 各 共 済 組 合 の 組 合 員 期 間 など)については 生 年 月 日

3. 選 任 固 定 資 産 評 価 員 は 固 定 資 産 の 評 価 に 関 する 知 識 及 び 経 験 を 有 する 者 のうちから 市 町 村 長 が 当 該 市 町 村 の 議 会 の 同 意 を 得 て 選 任 する 二 以 上 の 市 町 村 の 長 は 当 該 市 町 村 の 議

( 別 紙 ) 以 下 法 とあるのは 改 正 法 第 5 条 の 規 定 による 改 正 後 の 健 康 保 険 法 を 指 す ( 施 行 期 日 は 平 成 28 年 4 月 1 日 ) 1. 標 準 報 酬 月 額 の 等 級 区 分 の 追 加 について 問 1 法 改 正 により 追 加

検 討 検 討 の 進 め 方 検 討 状 況 簡 易 収 支 の 世 帯 からサンプリング 世 帯 名 作 成 事 務 の 廃 止 4 5 必 要 な 世 帯 数 の 確 保 が 可 能 か 簡 易 収 支 を 実 施 している 民 間 事 業 者 との 連 絡 等 に 伴 う 事 務 の 複 雑

Microsoft PowerPoint - 経営事項審査.ppt

中根・金田台地区 平成23年度補償説明業務

R4財務対応障害一覧

2 県 公 立 高 校 の 合 格 者 は このように 決 まる (1) 選 抜 の 仕 組 み 選 抜 の 資 料 選 抜 の 資 料 は 主 に 下 記 の3つがあり 全 高 校 で 使 用 する 共 通 の ものと 高 校 ごとに 決 めるものとがあります 1 学 力 検 査 ( 国 語 数

KINGSOFT Office 2016 動 作 環 境 対 応 日 本 語 版 版 共 通 利 用 上 記 動 作 以 上 以 上 空 容 量 以 上 他 接 続 環 境 推 奨 必 要 2

第 1 条 適 用 範 囲 本 業 務 方 法 書 は 以 下 の 性 能 評 価 に 適 用 する (1) 建 築 基 準 法 施 行 令 ( 以 下 令 という ) 第 20 条 の7 第 1 項 第 二 号 表 及 び 令 第 20 条 の 8 第 2 項 の 認 定 に 係 る 性 能 評

別 紙 第 号 高 知 県 立 学 校 授 業 料 等 徴 収 条 例 の 一 部 を 改 正 する 条 例 議 案 高 知 県 立 学 校 授 業 料 等 徴 収 条 例 の 一 部 を 改 正 する 条 例 を 次 のように 定 める 平 成 26 年 2 月 日 提 出 高 知 県 知 事 尾

は 固 定 流 動 及 び 繰 延 に 区 分 することとし 減 価 償 却 を 行 うべき 固 定 の 取 得 又 は 改 良 に 充 てるための 補 助 金 等 の 交 付 を 受 けた 場 合 にお いては その 交 付 を 受 けた 金 額 に 相 当 する 額 を 長 期 前 受 金 とし

容 積 率 制 限 の 概 要 1 容 積 率 制 限 の 目 的 地 域 で 行 われる 各 種 の 社 会 経 済 活 動 の 総 量 を 誘 導 することにより 建 築 物 と 道 路 等 の 公 共 施 設 とのバランスを 確 保 することを 目 的 として 行 われており 市 街 地 環

する ( 評 定 の 時 期 ) 第 条 成 績 評 定 の 時 期 は 第 3 次 評 定 者 にあっては 完 成 検 査 及 び 部 分 引 渡 しに 伴 う 検 査 の 時 とし 第 次 評 定 者 及 び 第 次 評 定 者 にあっては 工 事 の 完 成 の 時 とする ( 成 績 評 定

説 明 内 容 料 金 の 算 定 期 間 と 請 求 の 単 位 について 分 散 検 針 制 日 程 等 別 料 金 料 金 の 算 定 期 間 と 支 払 義 務 発 生 日 日 程 等 別 料 金 の 請 求 スケジュール 料 金 のお 支 払 い 方 法 その 他 各 種 料 金 支 払

目 次 1. Web メールのご 利 用 について Web メール 画 面 のフロー 図 Web メールへのアクセス ログイン 画 面 ログイン 後 (メール 一 覧 画 面 ) 画 面 共 通 項 目

1 総 合 設 計 一 定 規 模 以 上 の 敷 地 面 積 及 び 一 定 割 合 以 上 の 空 地 を 有 する 建 築 計 画 について 特 定 行 政 庁 の 許 可 により 容 積 率 斜 線 制 限 などの 制 限 を 緩 和 する 制 度 である 建 築 敷 地 の 共 同 化 や

H28記入説明書(納付金・調整金)8

代 議 員 会 決 議 内 容 についてお 知 らせします さる3 月 4 日 当 基 金 の 代 議 員 会 を 開 催 し 次 の 議 案 が 審 議 され 可 決 承 認 されました 第 1 号 議 案 : 財 政 再 計 算 について ( 概 要 ) 確 定 給 付 企 業 年 金 法 第

通 知 カード と 個 人 番 号 カード の 違 い 2 通 知 カード ( 紙 )/H27.10 個 人 番 号 カード (ICカード)/H28.1 様 式 (おもて) (うら) 作 成 交 付 主 な 記 載 事 項 全 国 ( 外 国 人 含 む)に 郵 送 で 配 布 希 望 者 に 交

1 林 地 台 帳 整 備 マニュアル( 案 )について 林 地 台 帳 整 備 マニュアル( 案 )の 構 成 構 成 記 載 内 容 第 1 章 はじめに 本 マニュアルの 目 的 記 載 内 容 について 説 明 しています 第 2 章 第 3 章 第 4 章 第 5 章 第 6 章 林 地

. 負 担 調 整 措 置 8 (1) 宅 地 等 調 整 固 定 資 産 税 額 宅 地 に 係 る 固 定 資 産 税 額 は 当 該 年 度 分 の 固 定 資 産 税 額 が 前 年 度 課 税 標 準 額 又 は 比 準 課 税 標 準 額 に 当 該 年 度 分 の 価 格 ( 住 宅

2 1.ヒアリング 対 象 (1) 対 象 範 囲 分 類 年 金 医 療 保 険 雇 用 保 険 税 備 考 厚 生 年 金 の 資 格 喪 失 国 民 年 金 の 加 入 老 齢 給 付 裁 定 請 求 など 健 康 保 険 の 資 格 喪 失 国 民 健 康 保 険 の 加 入 健 康 保 険

第4回税制調査会 総4-1

スライド 1

スライド 1

その 他 事 業 推 進 体 制 平 成 20 年 3 月 26 日 に 石 垣 島 国 営 土 地 改 良 事 業 推 進 協 議 会 を 設 立 し 事 業 を 推 進 ( 構 成 : 石 垣 市 石 垣 市 議 会 石 垣 島 土 地 改 良 区 石 垣 市 農 業 委 員 会 沖 縄 県 農

1 書 誌 作 成 機 能 (NACSIS-CAT)の 軽 量 化 合 理 化 電 子 情 報 資 源 への 適 切 な 対 応 のための 資 源 ( 人 的 資 源,システム 資 源, 経 費 を 含 む) の 確 保 のために, 書 誌 作 成 と 書 誌 管 理 作 業 の 軽 量 化 を 図

総合評価点算定基準(簡易型建築・電気・管工事)

1 変更の許可等(都市計画法第35条の2)

別 表 1 土 地 建 物 提 案 型 の 供 給 計 画 に 関 する 評 価 項 目 と 評 価 点 数 表 項 目 区 分 評 価 内 容 と 点 数 一 般 評 価 項 目 立 地 条 件 (1) 交 通 利 便 性 ( 徒 歩 =80m/1 分 ) 25 (2) 生 活 利 便

為 が 行 われるおそれがある 場 合 に 都 道 府 県 公 安 委 員 会 がその 指 定 暴 力 団 等 を 特 定 抗 争 指 定 暴 力 団 等 として 指 定 し その 所 属 する 指 定 暴 力 団 員 が 警 戒 区 域 内 において 暴 力 団 の 事 務 所 を 新 たに 設

PowerPoint プレゼンテーション

事前チェック提出用現況報告書作成ツール入力マニュアル(法人用)

募集新株予約権(有償ストック・オプション)の発行に関するお知らせ

(1) 率 等 一 覧 ( 平 成 26 年 度 ) 目 課 客 体 及 び 納 義 務 者 課 標 準 及 び 率 法 内 に 住 所 を 有 する ( 均 等 割 所 得 割 ) 内 に 事 務 所 事 業 所 又 は 家 屋 敷 を 有 する で 内 に 住 所 を 有 し ないもの( 均 等

現 行 工 業 地 域 準 工 業 地 域 商 業 地 域 近 隣 商 業 地 域 改 正 後 準 工 業 地 域 ( 特 別 業 務 地 区 ( 第 2 種 ) 及 び 指 定 集 積 区 域 を 除 く) 近 隣 商 業 地 域 2 / 7

2 役 員 の 報 酬 等 の 支 給 状 況 平 成 27 年 度 年 間 報 酬 等 の 総 額 就 任 退 任 の 状 況 役 名 報 酬 ( 給 与 ) 賞 与 その 他 ( 内 容 ) 就 任 退 任 2,142 ( 地 域 手 当 ) 17,205 11,580 3,311 4 月 1

「1 所得税及び復興特別所得税の確定申告書データをお持ちの方」からの更正の請求書・修正申告書作成編

平成17年度高知県県産材利用推進事業費補助金交付要綱

(4) 給 与 制 度 の 総 合 的 見 直 しの 実 施 状 況 について 概 要 国 の 給 与 制 度 の 総 合 的 見 直 しにおいては 俸 給 表 の 水 準 の 平 均 2の 引 下 げ 及 び 地 域 手 当 の 支 給 割 合 の 見 直 し 等 に 取 り 組 むとされている.

PowerPoint プレゼンテーション

住宅改修の手引き(初版)

入 札 参 加 者 は 入 札 の 執 行 完 了 に 至 るまではいつでも 入 札 を 辞 退 することができ これを 理 由 として 以 降 の 指 名 等 において 不 利 益 な 取 扱 いを 受 けることはない 12 入 札 保 証 金 免 除 13 契 約 保 証 金 免 除 14 入

平成16年年金制度改正 ~年金の昔・今・未来を考える~

4. その 他 (1) 期 中 における 重 要 な 子 会 社 の 異 動 ( 連 結 範 囲 の 変 更 を 伴 う 特 定 子 会 社 の 異 動 ) 無 (2) 簡 便 な 会 計 処 理 及 び 四 半 期 連 結 財 務 諸 表 の 作 成 に 特 有 の 会 計 処 理 の 適 用 有

様式(補助金)

(4) ラスパイレス 指 数 の 状 況 ( 各 年 4 月 1 日 現 在 ) ( 例 ) ( 例 ) 15 (H2) (H2) (H24) (H24) (H25.4.1) (H25.4.1) (H24) (H24)

預 金 を 確 保 しつつ 資 金 調 達 手 段 も 確 保 する 収 益 性 を 示 す 指 標 として 営 業 利 益 率 を 採 用 し 営 業 利 益 率 の 目 安 となる 数 値 を 公 表 する 株 主 の 皆 様 への 還 元 については 持 続 的 な 成 長 による 配 当 可

第 40 回 中 央 近 代 化 基 金 補 完 融 資 推 薦 申 込 み 公 募 要 綱 1 公 募 推 薦 総 枠 30 億 円 一 般 物 流 効 率 化 促 進 中 小 企 業 高 度 化 資 金 貸 付 対 象 事 業 の 合 計 枠 2 公 募 期 間 平 成 28 年 6 月 20

(2) 広 島 国 際 学 院 大 学 ( 以 下 大 学 という ) (3) 広 島 国 際 学 院 大 学 自 動 車 短 期 大 学 部 ( 以 下 短 大 という ) (4) 広 島 国 際 学 院 高 等 学 校 ( 以 下 高 校 という ) ( 学 納 金 の 種 類 ) 第 3 条

(5) 給 与 制 度 の 総 合 的 見 直 しの 実 施 状 況 について 概 要 の 給 与 制 度 の 総 合 的 見 直 しにおいては 俸 給 表 の 水 準 の 平 均 2の 引 き 下 げ 及 び 地 域 手 当 の 支 給 割 合 の 見 直 し 等 に 取 り 組 むとされている

01.活性化計画(上大久保)

PowerPoint Presentation

Microsoft Word 印刷ver 本編最終no1(黒字化) .doc

Microsoft PowerPoint - 報告書(概要).ppt

Microsoft Word - 不正アクセス行為の禁止等に関する法律等に基づく公安

2. 会 計 規 程 の 業 務 (1) 規 程 と 実 際 の 業 務 の 調 査 規 程 や 運 用 方 針 に 規 定 されている 業 務 ( 帳 票 )が 実 際 に 行 われているか( 作 成 されている か)どうかについて 調 べてみた 以 下 の 表 は 規 程 の 条 項 とそこに

学校教育法等の一部を改正する法律の施行に伴う文部科学省関係省令の整備に関する省令等について(通知)

<6D313588EF8FE991E58A778D9191E5834B C8EAE DC58F4992F18F6F816A F990B32E786C73>

平成24年度 業務概況書

演習準備

6 構 造 等 コンクリートブロック 造 平 屋 建 て4 戸 長 屋 16 棟 64 戸 建 築 年 1 戸 当 床 面 積 棟 数 住 戸 改 善 後 床 面 積 昭 和 42 年 36.00m m2 昭 和 43 年 36.50m m2 昭 和 44 年 36.

Microsoft Word - 建築基準法第42条第2項道路後退整備のあらまし

Microsoft Word - 第3章.doc


(2) 単 身 者 向 け 以 外 の 賃 貸 共 同 住 宅 等 当 該 建 物 に 対 して 新 たに 固 定 資 産 税 等 が 課 税 される 年 から 起 算 して5 年 間 とする ( 交 付 申 請 及 び 決 定 ) 第 5 条 補 助 金 の 交 付 を 受 けようとする 者 は

募集要項

演習準備 2014 年 3 月 5 日神戸大学大学院システム情報学研究科森下浩二 1 RIKEN AICS HPC Spring School /3/5

既 存 建 築 物 の 建 替 市 街 化 調 整 区 域 で 許 可 を 不 要 とする 取 扱 いについて 既 存 建 築 物 の 建 替 は 以 下 の1)~3)をすべて 満 たしている 場 合 に 可 能 です 1) 建 替 前 の 建 築 物 ( 以 下 既 存 建 築 物 という )につ

<8BB388F58F5A91EE82A082E895FB8AEE967B95FB906A>

1

(1)1オールゼロ 記 録 ケース 厚 生 年 金 期 間 A B 及 びCに 係 る 旧 厚 生 年 金 保 険 法 の 老 齢 年 金 ( 以 下 旧 厚 老 という )の 受 給 者 に 時 効 特 例 法 施 行 後 厚 生 年 金 期 間 Dが 判 明 した Bは 事 業 所 記 号 が

定款  変更

第8回講義(2016年12月6日)

3 独 占 禁 止 法 違 反 事 件 の 概 要 (1) 価 格 カルテル 山 形 県 の 庄 内 地 区 に 所 在 する5 農 協 が, 特 定 主 食 用 米 の 販 売 手 数 料 について, 平 成 23 年 1 月 13 日 に 山 形 県 酒 田 市 所 在 の 全 国 農 業 協

平成22年度

m07 北見工業大学 様式①

全設健発第     号

●幼児教育振興法案

Transcription:

内 容 に 関 するご 質 問 は katagiri @ cc.u-tokyo.ac.jp まで お 願 いします 第 35 回 お 試 しアカウント 付 き 並 列 プログラミング 講 習 会 ライブラリ 利 用 : 高 性 能 プログラミング 初 級 入 門 東 京 大 学 情 報 基 盤 センター 3

講 習 会 概 略 開 催 日 : 2013 年 3 月 24 日 ( 月 )10:30-18:00 2013 年 3 月 25 日 ( 火 )10:30-18:00 場 所 : 東 京 大 学 情 報 基 盤 センター 4 階 413 遠 隔 講 義 室 講 習 会 プログラム: 3 月 24 日 ( 月 ) 10:00-10:30 受 付 10:30-12:30 ノートパソコンの 設 定 テストプログラム(MPI)の 実 行 など( 演 習 ) ( 講 師 : 片 桐 ) 14:00-15:00 並 列 プログラミングの 基 本 ( 座 学 )( 講 師 : 片 桐 ) 15:15-16:15 プログラム 実 習 Ⅰ(BLAS)( 演 習 )( 講 師 : 片 桐 ) 16 :30-18:00 プログラミング 実 習 Ⅱ(LAPACK, ScaLAPACK)( 演 習 )( 講 師 : 片 桐 ) 3 月 25 日 ( 火 ) 10:00-10:30 ppopen-hpcの 概 要 ( 座 学 ) ( 講 師 : 中 島 ) 10:30-12:00 ppopen-appl/fvmの 概 要 と 並 列 データ 構 造 ( 座 学 )( 講 師 : 中 島 ) 13:30-14:30 ppopen-appl/fvmによるプログラム 開 発 例 ( 座 学 )( 講 師 : 中 島 ) 14:30-15:15 ppopen-appl/fvm 実 習 ( 実 習 )( 講 師 : 中 島 ) 15:30-18:00 差 分 法 による 弾 性 波 動 並 列 シミュレーション(ppOpen-APPL/FDM)( 演 習 )( 講 師 : 森 ) 4

有 償 トライアルユース 制 度 の 開 始 について 2012 年 4 月 より 安 価 に 当 センターのFX10スーパーコンピュータシステムが 使 える 無 償 トライアルユース および 有 償 トライアルユース 制 度 が 開 始 予 定 です アカデミック 利 用 パーソナルコース グループコースの 双 方 (1ヶ 月 ~3ヶ 月 ) 企 業 利 用 パーソナルコース(1ヶ 月 ~3ヶ 月 )( 最 大 24ノード 最 大 96ノード) 本 講 習 会 の 受 講 が 必 須 審 査 無 グループコース 無 償 トライアルユース:(1ヶ 月 ~3ヶ 月 ): 無 料 (12ノード 1 口 ) 有 償 トライアルユース:(1ヶ 月 ~ 最 大 通 算 9ヶ 月 ) 有 償 (12ノード 1 口 ) スーパーコンピュータ 利 用 資 格 者 審 査 委 員 会 の 審 査 が 必 要 ( 年 4 回 実 施 ) 双 方 のコースともに 簡 易 な 利 用 報 告 書 の 提 出 が 必 要 料 金 体 系 や 利 用 条 件 の 詳 細 は 以 下 のHPをご 覧 ください http://www.cc.u-tokyo.ac.jp/service/trial/fx10.html 5

スパコンへのログイン テストプログラム 起 動 東 京 大 学 情 報 基 盤 センター 准 教 授 片 桐 孝 洋 28

講 義 の 流 れ 1. スパコン 利 用 の 仕 方 単 純 な 並 列 プログラムの 実 行 2. 総 和 演 算 29

テストプログラム 起 動 31

UNIX 備 忘 録 Emacsの 起 動 : emacs < 編 集 ファイル 名 > ^x ^s (^はcontrol) :テキストの 保 存 ^x ^c : 終 了 ( ^z で 終 了 すると スパコンの 負 荷 が 上 がる 絶 対 にしないこと ) ^g : 訳 がわからなくなったとき ^k : カーソルより 行 末 まで 消 す 消 した 行 は 一 時 的 に 記 憶 される ^y : ^kで 消 した 行 を 現 在 のカーソルの 場 所 にコピーする ^s 文 字 列 : 文 字 列 の 箇 所 まで 移 動 する ^M goto-line : 指 定 した 行 まで 移 動 する (^MはESCキーを 押 す) 32

UNIX 備 忘 録 rm ファイル 名 : ファイル 名 のファイルを 消 す rm *~ : test.c~ などの ~がついたバックアップファイルを 消 す ls : 現 在 いるフォルダの 中 身 を 見 る cd フォルダ 名 : フォルダに 移 動 する cd.. : 一 つ 上 のフォルダに 移 動 cd ~ :ホームディレクトリに 行 く 訳 がわからなくなったとき cat ファイル 名 : ファイル 名 の 中 身 を 見 る make : 実 行 ファイルを 作 る (Makefile があるところでしか 実 行 できない) make clean : 実 行 ファイルを 消 す (clean がMakefileで 定 義 されていないと 実 行 できない) 33

サンプルプログラムの 実 行 初 めての 並 列 プログラムの 実 行 34

サンプルプログラム 名 C 言 語 版 Fortran90 版 共 通 ファイル: Samples-fx.tar tarで 展 開 後 C 言 語 とFortran90 言 語 の ディレクトリが 作 られる C/ : C 言 語 用 F/ : Fortran90 言 語 用 上 記 のファイルが 置 いてある 場 所 /home/z30082 35

並 列 版 Helloプログラムをコンパイルしよう (1/2) 1. /home/z30082 にある Samples-fx.tar を 自 分 のディレクトリにコピーする $ cp /home/z30082/samples-fx.tar./ 2. Samples-fx.tar を 展 開 する $ tar xvf Samples-fx.tar 3. Samples フォルダに 入 る $ cd Samples 4. C 言 語 : $ cd C Fortran90 言 語 : $ cd F 5. Hello フォルダに 入 る $ cd Hello 36

並 列 版 Helloプログラムをコンパイルしよう (2/2) 6. ピュアMPI 用 のMakefileをコピーする $ cp Makefile_pure Makefile 7. make する $ make 8. 実 行 ファイル(hello)ができていることを 確 認 する $ ls 37

FX10スーパコンピュータシステムでの ジョブ 実 行 形 態 以 下 の2 通 りがあります インタラクティブジョブ 実 行 PCでの 実 行 のように コマンドを 入 力 して 実 行 する 方 法 スパコン 環 境 では あまり 一 般 的 でない デバック 用 大 規 模 実 行 はできない FX10では 以 下 に 限 定 1ノード(16コア)(2 時 間 まで) 8ノード(128コア)(10 分 まで) バッチジョブ 実 行 バッチジョブシステムに 処 理 を 依 頼 して 実 行 する 方 法 スパコン 環 境 で 一 般 的 大 規 模 実 行 用 FX10では 最 大 1440ノード(23,040コア)(6 時 間 ) 38

インタラクティブ 実 行 のやり 方 ( 本 講 習 会 では 使 えません 一 般 利 用 者 のみ) コマンドラインで 以 下 を 入 力 1ノード 実 行 用 $ pjsub --interact 8ノード 実 行 用 $ pjsub --interact -L node=8 インタラクティブ 用 のノード 総 数 は50ノードです もしユーザにより50ノードすべて 使 われている 場 合 資 源 が 空 くまで ログインできません 39

コンパイラの 種 類 とインタラクティブ 実 行 およびバッチ 実 行 インタラクティブ 実 行 およびバッチ 実 行 で 利 用 するコンパイラ (C 言 語 C++ 言 語 Fortran90 言 語 )の 種 類 が 違 います インタラクティブ 実 行 では オウンコンパイラ(そのノードで 実 行 する 実 行 ファイルを 生 成 するコンパ イラ)を 使 います バッチ 実 行 では クロスコンパイラ(そのノードでは 実 行 できないが バッチ 実 行 する 時 の ノードで 実 行 できる 実 行 ファイルを 生 成 するコンパイラ)を 使 います それぞれの 形 式 オウンコンパイラ: <コンパイラの 種 類 名 > クロスコンパイラ: <コンパイラの 種 類 名 >px 例 ) 富 士 通 Fortran90コンパイラ オウンコンパイラ: frt クロスコンパイラ: frtpx 40

バッチ 処 理 とは スパコン 環 境 では 通 常 は インタラクティブ 実 行 (コマンドラ インで 実 行 すること)はできません ジョブはバッチ 処 理 で 実 行 します バッチキュー ジョブの 依 頼 バッチ 処 理 システムが ジョブを 取 り 出 す 実 行 ユーザ スパコン 41

バッチキューの 設 定 のしかた バッチ 処 理 は 富 士 通 社 のバッチシステムで 管 理 されていま す 以 下 主 要 コマンドを 説 明 します ジョブの 投 入 : pjsub <ジョブスクリプトファイル 名 > -g <プロジェクトコード> 自 分 が 投 入 したジョブの 状 況 確 認 : pjstat 投 入 ジョブの 削 除 : pjdel <ジョブID> バッチキューの 状 態 を 見 る: pjstat --rsc バッチキューの 詳 細 構 成 を 見 る: pjstat rsc -x 投 げられているジョブ 数 を 見 る: pjstat -b 過 去 の 投 入 履 歴 を 見 る: pjstat --history 同 時 に 投 入 できる 数 / 実 行 できる 数 を 見 る: pjstat --limit 42

本 お 試 し 講 習 会 でのキュー 名 本 演 習 中 のキュー 名 : tutorial 最 大 15 分 まで 最 大 ノード 数 は12ノード(192コア) まで 本 演 習 時 間 以 外 (24 時 間 )のキュー 名 : lecture 利 用 条 件 は 演 習 中 のキュー 名 と 同 様 43

pjstat --rsc の 実 行 画 面 例 $ pjstat --rsc RSCGRP STATUS NODE:COORD debug [ENABLE,START] 480:10x3x16 short [ENABLE,START] 480:10x3x16 regular ---- small [ENABLE,START] 3840:20x12x16 ---- medium [ENABLE,START] 3840:20x12x16 ---- large [ENABLE,START] 3840:20x12x16 `---- x-large [ENABLE,START] 3840:20x12x16 interactive ---- interactive_n1 [ENABLE,START] 50 `---- interactive_n8 [ENABLE,START] 50 使 える キュー 名 (リソース グループ) 44 現 在 使 えるか ノードの 物 理 構 成 情 報

pjstat --rsc -x の 実 行 画 面 例 $ pjstat --rsc -x RSCGRP STATUS MIN_NODE MAX_NODE ELAPSE MEM(GB) PROJECT debug [ENABLE,START] 1 240 00:30:00 28 gcxx, gcyy short [ENABLE,START] 1 72 06:00:00 28 gcxx, gcyy regular ---- small [ENABLE,START] 12 216 48:00:00 28 gcxx, gcyy ---- medium [ENABLE,START] 217 372 48:00:00 28 gcxx, gcyy ---- large [ENABLE,START] 373 480 48:00:00 28 gcxx, gcyy `---- x-large [ENABLE,START] 481 1440 24:00:00 28 gcxx, gcyy interactive ---- interactive_n1 [ENABLE,START] 1 1 02:00:00 28 gcxx, gcyy `---- interactive_n8 [ENABLE,START] 2 8 00:10:00 28 gcxx, gcyy 使 える キュー 名 (リソース グループ) 45 現 在 使 えるか ノードの 実 行 情 報 課 金 情 報 ( 財 布 ) 実 習 では1つのみ

pjstat -b の 実 行 画 面 例 $ pjstat b RSCGRP STATUS TOTAL RUNNING QUEUED HOLD OTHER NODE:COORD debug [ENABLE,START] 3 2 0 0 1 480:10x3x16 short [ENABLE,START] 1 1 0 0 0 480:10x3x16 regular ---- small [ENABLE,START] 165 81 84 0 0 3840:20x12x16 ---- medium [ENABLE,START] 25 4 20 0 1 3840:20x12x16 ---- large [ENABLE,START] 0 0 0 0 0 3840:20x12x16 `---- x-large [ENABLE,START] 4 0 4 0 0 3840:20x12x16 interactive ---- interactive_n1 [ENABLE,START] 2 2 0 0 0 50 `---- interactive_n8 [ENABLE,START] 1 1 0 0 0 50 使 える キュー 名 (リソース グループ) 現 在 使 え るか ジョブ の 総 数 実 行 して いるジョブ の 数 待 たされて いるジョブ の 数 ノードの 物 理 構 成 情 報 46

JOBスクリプトサンプルの 説 明 (ピュアMPI) (hello-pure.bash, C 言 語 Fortran 言 語 共 通 ) #!/bin/bash #PJM -L "rscgrp=lecture" #PJM -L "node=12" #PJM --mpi "proc=192" #PJM -L "elapse=1:00" mpirun./hello MPIジョブを16*12 = 192 プロセスで 実 行 する リソースグループ 名 :lecture 利 用 ノード 数 利 用 コア 数 (MPIプロセス 数 ) 実 行 時 間 制 限 :1 分 47

ピュアMPIの 実 行 状 況 (ノード 内 ) Core #0 MPIプロセス Core #1 Core #2 Core #3 各 CPUの 内 部 構 成 1ソケットのみ L1 L1 L1 L1 : L1データキャッシュ32KB L1 L1 L1 L1 Core #12 Core #13 Core #14 20GB/ 秒 Core #15 TOFU Network ICC L2 (16コアで 共 有 12MB) 85GB/ 秒 =(8Byte 1333MHz 8 channel) Memory Memory Memory Memory 4GB 2 枚 4GB 2 枚 4GB 2 枚 4GB 2 枚 DDR3 DIMM 48 ノード 内 合 計 メモリ 量 :8GB 4=32GB FX10 計 算 ノードの 構 成

並 列 版 Helloプログラムを 実 行 しよう (ピュアMPI) このサンプルのJOBスクリプトは hello-pure.bash です 配 布 のサンプルでは キュー 名 が lecture になっています $ emacs hello-pure.bash で lecture tutorial に 変 更 してください 49

並 列 版 Helloプログラムを 実 行 しよう (ピュアMPI) 1. Helloフォルダ 中 で 以 下 を 実 行 する $ pjsub hello-pure.bash 2. 自 分 の 導 入 されたジョブを 確 認 する $ pjstat 3. 実 行 が 終 了 すると 以 下 のファイルが 生 成 される hello-pure.bash.exxxxxx hello-pure.bash.oxxxxxx (XXXXXXは 数 字 ) 4. 上 記 の 標 準 出 力 ファイルの 中 身 を 見 てみる $ cat hello-pure.bash.oxxxxxx 5. Hello parallel world! が 16プロセス*12ノード=192 表 示 されていたら 成 功 50

バッチジョブ 実 行 による 標 準 出 力 標 準 エラー 出 力 バッチジョブの 実 行 が 終 了 すると 標 準 出 力 ファイルと 標 準 エラー 出 力 ファイルが ジョブ 投 入 時 のディレクトリに 作 成 されます 標 準 出 力 ファイルにはジョブ 実 行 中 の 標 準 出 力 標 準 エ ラー 出 力 ファイルにはジョブ 実 行 中 のエラーメッセージが 出 力 されます ジョブ 名.oXXXXX --- 標 準 出 力 ファイル ジョブ 名.eXXXXX --- 標 準 エラー 出 力 ファイル (XXXXX はジョブ 投 入 時 に 表 示 されるジョブのジョブID) 51

並 列 版 Helloプログラムをコンパイルしよう 1. ハイブリッドMPI 用 の Makefile をコピーする $ cp Makefile_hy16 Makefile 2. make する $ make clean $ make 3. 実 行 ファイル(hello)ができていることを 確 認 する $ ls 4. JOBスクリプト 中 (hello-hy16.bash)のキュー 名 を 変 更 する lecture tutorial に 変 更 する $ emacs hello-hy16.bash 52

並 列 版 Helloプログラムを 実 行 しよう (ハイブリッドMPI) 1. Helloフォルダ 中 で 以 下 を 実 行 する $ pjsub hello-hy16.bash 2. 自 分 の 導 入 されたジョブを 確 認 する $ pjstat 3. 実 行 が 終 了 すると 以 下 のファイルが 生 成 される hello-hy16.bash.exxxxxx hello-hy16.bash.oxxxxxx (XXXXXXは 数 字 ) 4. 上 記 標 準 出 力 ファイルの 中 身 を 見 てみる $ cat hello-hy16.bash.oxxxxxx 5. Hello parallel world! が 1プロセス*12ノード=12 個 表 示 されていたら 成 功 53

JOBスクリプトサンプルの 説 明 (ハイブリッドMPI) (hello-hy16.bash, C 言 語 Fortran 言 語 共 通 ) #!/bin/bash #PJM -L "rscgrp=lecture" #PJM -L "node=12" #PJM --mpi "proc=12" #PJM -L "elapse=1:00" export OMP_NUM_THREADS=16 mpirun./hello MPIジョブを1*12 = 12 プロセスで 実 行 する リソースグループ 名 :lecture 利 用 ノード 数 利 用 コア 数 (MPIプロセス 数 ) 実 行 時 間 制 限 :1 分 1MPIプロセス 当 たり 16スレッド 生 成 54

ハイブリッドMPIの 実 行 状 況 (ノード 内 ) Core #0 Core #1 Core #2 Core #3 各 CPUの 内 部 構 成 Core #12 1ソケットのみ L1 L1 L1 L1 : L1データキャッシュ32KB L1 L1 L1 L1 Core #13 Core #14 20GB/ 秒 Core #15 TOFU Network ICC L2 (16コアで 共 有 12MB) 85GB/ 秒 =(8Byte 1333MHz 8 channel) Memory Memory Memory Memory DDR3 DIMM 4GB 2 枚 4GB 2 枚 4GB 2 枚 4GB 2 枚 MPIプロセス ノード 内 合 計 メモリ 量 :8GB 4=32GB スレッド 55 FX10 計 算 ノードの 構 成

並 列 版 Helloプログラムの 説 明 (C 言 語 ) #include <stdio.h> #include <mpi.h> このプログラムは 全 PEで 起 動 される int main(int argc, char* argv[]) { int int myid, numprocs; ierr, rc; MPIの 初 期 化 ierr = MPI_Init(&argc, &argv); ierr = MPI_Comm_rank(MPI_COMM_WORLD, &myid); ierr = MPI_Comm_size(MPI_COMM_WORLD, &numprocs); 自 分 のID 番 号 を 取 得 : 各 PEで 値 は 異 なる } printf("hello parallel world! Myid:%d n", myid); rc = MPI_Finalize(); exit(0); 56 MPIの 終 了 全 体 のプロセッサ 台 数 を 取 得 : 各 PEで 値 は 同 じ ( 演 習 環 境 では 192 もしくは12)

並 列 版 Helloプログラムの 説 明 (Fortran 言 語 ) program main common /mpienv/myid,numprocs integer myid, numprocs integer ierr このプログラムは 全 PEで 起 動 される MPIの 初 期 化 call MPI_INIT(ierr) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierr) call MPI_COMM_SIZE(MPI_COMM_WORLD, numprocs, ierr) 自 分 のID 番 号 を 取 得 : 各 PEで 値 は 異 なる print *, "Hello parallel world! Myid:", myid call MPI_FINALIZE(ierr) stop end MPIの 終 了 全 体 のプロセッサ 台 数 を 取 得 : 各 PEで 値 は 同 じ ( 演 習 環 境 では 192 もしくは12) 57

時 間 計 測 方 法 (C 言 語 ) double t0, t1, t2, t_w;.. ierr = MPI_Barrier(MPI_COMM_WORLD); t1 = MPI_Wtime(); バリア 同 期 後 時 間 を 習 得 し 保 存 <ここに 測 定 したいプログラムを 書 く> ierr = MPI_Barrier(MPI_COMM_WORLD); t2 = MPI_Wtime(); t0 = t2 - t1; ierr = MPI_Reduce(&t0, &t_w, 1, MPI_DOUBLE,MPI_MAX, 0, MPI_COMM_WORLD); 各 プロセッサーで t0の 値 は 異 なる この 場 合 は 最 も 遅 いものの 値 をプロセッサ0 番 が 受 け 取 る 58

時 間 計 測 方 法 (Fortran 言 語 ) double precision t0, t1, t2, t_w double precision MPI_WTIME.. call MPI_BARRIER(MPI_COMM_WORLD, ierr) t1 = MPI_WTIME(ierr) バリア 同 期 後 時 間 を 習 得 し 保 存 <ここに 測 定 したいプログラムを 書 く> call MPI_BARRIER(MPI_COMM_WORLD, ierr) t2 = MPI_WTIME(ierr) t0 = t2 - t1 call MPI_REDUCE(t0, t_w, 1, & MPI_DOUBLE_PRECISION, & MPI_MAX, 0, MPI_COMM_WORLD, ierr) 各 プロセッサーで t0の 値 は 異 なる この 場 合 は 最 も 遅 いも のの 値 をプロセッサ0 番 が 受 け 取 る 59

MPI 実 行 時 のリダイレクトについて FX10スーパーコンピュータシステムでは MPI 実 行 時 の 入 出 力 のリダイレクトができません 例 )mpirun./a.out <./in.txt >./out.txt リダイレクトを 行 う 場 合 以 下 のオプションを 指 定 してくだ さい 例 ) mpirun --stdin./in.txt --stdout./out.txt./a.out 60

依 存 関 係 のあるジョブの 投 げ 方 (ステップジョブ) あるジョブスクリプト go1.sh の 後 に go2.sh を 投 げたい さらに go2.shの 後 に go3.shを 投 げたい ということがある 以 上 を ステップジョブという FX10におけるステップジョブの 投 げ 方 1. $pjsub --step go1.sh [INFO] PJM 0000 pjsub Job 800967_0 submitted. 2. 上 記 のジョブ 番 号 800967を 覚 えておき 以 下 の 入 力 をする $pjsub --step --sparam jid=800967 go2.sh [INFO] PJM 0000 pjsub Job 800967_1 submitted 3. 以 下 同 様 $pjsub --step --sparam jid=800967 go3.sh [INFO] PJM 0000 pjsub Job 800967_2 submitted 61

並 列 プログラミングの 基 礎 ( 座 学 ) 東 京 大 学 情 報 基 盤 センター 准 教 授 片 桐 孝 洋 62

教 科 書 ( 演 習 書 ) スパコンプログラミング 入 門 - 並 列 処 理 とMPIの 学 習 - 片 桐 孝 洋 著 東 大 出 版 会 ISBN978-4-13-062453-4 発 売 日 :2013 年 3 月 12 日 判 型 :A5, 200 頁 本 書 の 特 徴 C 言 語 で 解 説 C 言 語 Fortran90 言 語 のサンプルプログラムが 付 属 数 値 アルゴリズムは 図 でわかりやすく 説 明 本 講 義 の 内 容 を 全 てカバー 内 容 は 初 級 初 めて 並 列 数 値 計 算 を 学 ぶ 人 向 けの 入 門 書 63

参 考 書 並 列 数 値 処 理 - 高 速 化 と 性 能 向 上 のために - 金 田 康 正 東 大 教 授 理 博 編 著 片 桐 孝 洋 東 大 特 任 准 教 授 博 士 ( 理 学 ) 著 黒 田 久 泰 愛 媛 大 准 教 授 博 士 ( 理 学 ) 著 山 本 有 作 神 戸 大 教 授 博 士 ( 工 学 ) 著 五 百 木 伸 洋 日 立 製 作 所 著 コロナ 社 発 行 年 月 日 :2010/04/30, 判 型 : A5, ページ 数 :272 頁 ISBN:978-4-339-02589-7, 定 価 :3,990 円 ( 本 体 3,800 円 + 税 5%) 本 書 の 特 徴 Fortran 言 語 で 解 説 数 値 アルゴリズムは 数 式 などで 厳 密 に 説 明 本 講 義 の 内 容 に 加 えて 固 有 値 問 題 の 解 法 疎 行 列 反 復 解 法 FFT ソート など 主 要 な 数 値 計 算 アルゴリズムをカバー 内 容 は 中 級 ~ 上 級 専 門 として 並 列 数 値 計 算 を 学 びたい 人 向 き 64

本 講 義 の 流 れ 1. 東 大 スーパーコンピュータの 概 略 2. 並 列 プログラミングの 基 礎 3. 性 能 評 価 指 標 4. 基 礎 的 なMPI 関 数 5. データ 分 散 方 式 6. ベクトルどうしの 演 算 7. ベクトル- 行 列 積 8. リダクション 演 算 65

東 大 スーパーコンピュータの 概 略 66

東 京 大 学 情 報 基 盤 センター スパコン(1/2) HITACHI SR16000 Total Peak performance : 54.9 TFLOPS Total number of nodes : 56 Total memory : 11200 GB Peak performance per node : 980.4 GFLOPS Main memory per node : 200GB Disk capacity : 556 TB IBM POWER7 3.83GHz (30.64GFLOPS) 2014 年 3 月 10 日 運 用 終 了 T2K 東 大 (HA8000クラスタシステム) Total Peak performance : 140 TFLOPS Total number of nodes : 952 Total memory : 32000 GB Peak performance per node : 147.2 GFLOPS Main memory per node : 32 GB, 128 GB Disk capacity : 1 PB AMD Quad Core Opteron 2.3GHz (9.2GFLOPS) 2011 年 10 月 ~ 試 験 運 用 開 始 ノード 製 品 名 :HITACHI HA8000-tc/RS425 67 67

東 京 大 学 情 報 基 盤 センター スパコン(2/2) Fujitsu PRIMEHPC FX10 (FX10スーパーコンピュータシステム) Total Peak performance : 1.13 PFLOPS Total number of nodes : 4,800 Total memory : 150TB Peak performance per node : 236.5 GFLOPS Main memory per node : 32 GB Disk capacity : 2.1 PB SPARC64 IXfx 1.848GHz 2012 年 4 月 2 日 試 験 運 転 開 始 2012 年 7 月 2 日 正 式 運 用 開 始 68 68

Core #0 Core #1 Core #2 FX10 計 算 ノードの 構 成 Core #3 各 CPUの 内 部 構 成 1ソケットのみ L1 L1 L1 L1 : L1データキャッシュ32KB L1 L1 L1 L1 Core #12 Core #13 Core #14 20GB/ 秒 Core #15 TOFU Network ICC L2 (16コアで 共 有 12MB) 85GB/ 秒 =(8Byte 1333MHz 8 channel) Memory Memory Memory Memory DDR3 DIMM 4GB 2 枚 4GB 2 枚 4GB 2 枚 4GB 2 枚 ノード 内 合 計 メモリ 量 :8GB 4=32GB 69

FX10の 通 信 網 (1TOFU 単 位 ) 1TOFU 単 位 計 算 ノード 内 ノード ノード ノード ノード ノード ノード ノード ノード ノード 1TOFU 単 位 間 の 結 合 用 6 本 それぞれ 5GB/ 秒 ( 双 方 向 ) ノード ノード ノード ノード 70

1 TOFU 単 位 1 TOFU 単 位 1 TOFU 単 位 1 TOFU 単 位 1 TOFU 単 位 1 TOFU 単 位 FX10の 通 信 網 (1TOFU 単 位 間 の 結 合 ) 1 TOFU 単 位 1 1 TOFU 単 単 位 位 1 1 TOFU 単 単 位 位 1 TOFU 単 位 1 TOFU 単 位 1 TOFU 単 位 1 TOFU 単 位 3 次 元 接 続 1 TOFU 単 位 1 1 TOFU 単 単 位 位 1 1 TOFU 単 単 位 位 1 TOFU 単 位 1 TOFU 単 位 1 TOFU 単 位 1 TOFU 単 位 1 TOFU 単 位 1 TOFU 単 位 1 TOFU 単 位 71 ユーザから 見 ると X 軸 Y 軸 Z 軸 について 奥 の1TOFUと 手 前 の 1TOFUは 繋 がってみえます (3 次 元 トーラス 接 続 ) ただし 物 理 結 線 では X 軸 はトーラス Y 軸 はメッシュ Z 軸 はメッシュまたは トーラス になっています

東 大 情 報 基 盤 センターFX10スーパーコン ピュータシステムの 料 金 表 (2011 年 4 月 1 日 ) パーソナルコース( 年 間 ) コース1: 120,000 円 : 12ノード( 優 先 ) 最 大 24ノードまで コース2: 250,000 円 : 24ノード( 優 先 ) 最 大 96ノードまで グループコース 500,000 円 :1 口 12ノード( 優 先 ) 最 大 1440ノードまで 以 上 は トークン 制 で 運 営 申 し 込 みノード( 優 先 ノード) 360 日 24 時 間 の トークン が 与 えら れる 優 先 ノードまでは トークン 消 費 係 数 が1.0 優 先 ノードを 超 えると 超 えた 分 は 消 費 係 数 が2.0になる 72

FX10スーパーコンピュータシステムの 詳 細 以 下 のページをご 参 照 ください 利 用 申 請 方 法 運 営 体 系 料 金 体 系 利 用 の 手 引 などがご 覧 になれます http://www.cc.u-tokyo.ac.jp/system/fx10/ 73

並 列 プログラミングの 基 礎 74

並 列 プログラミングとは 何 か? 逐 次 実 行 のプログラム( 実 行 時 間 T)を p 台 の 計 算 機 を 使 って T / p にすること. T 素 人 考 えでは 自 明 実 際 は できるかどうかは 対 象 処 理 の 内 容 (アルゴリズム)で 大 きく 難 しさが 違 う 75 アルゴリズム 上 絶 対 に 並 列 化 できない 部 分 の 存 在 通 信 のためのオーバヘッドの 存 在 通 信 立 ち 上 がり 時 間 データ 転 送 時 間 T / p

並 列 と 並 行 並 列 (Parallel) 物 理 的 に 並 列 ( 時 間 的 に 独 立 ) ある 時 間 に 実 行 されるものは 多 数 T 並 行 (Concurrent) 論 理 的 に 並 列 ( 時 間 的 に 依 存 ) ある 時 間 に 実 行 されるものは1つ(=1プロセッサで 実 行 ) T 時 分 割 多 重 疑 似 並 列 OSによるプロセス 実 行 スケジューリング(ラウンドロビン 方 式 ) 76

並 列 計 算 機 の 分 類 Michael J. Flynn 教 授 (スタンフォード 大 )の 分 類 (1966) 単 一 命 令 単 一 データ 流 (SISD, Single Instruction Single Data Stream) 単 一 命 令 複 数 データ 流 (SIMD, Single Instruction Multiple Data Stream) 複 数 命 令 単 一 データ 流 (MISD, Multiple Instruction Single Data Stream) 複 数 命 令 複 数 データ 流 (MIMD, Multiple Instruction Multiple Data Stream) 77

並 列 計 算 機 のメモリ 型 による 分 類 1. 共 有 メモリ 型 (SMP Symmetric Multiprocessor) 2. 分 散 メモリ 型 (メッセージパッシング) 3. 分 散 共 有 メモリ 型 (DSM Distributed Shared Memory) 78

並 列 計 算 機 のメモリ 型 による 分 類 4. 共 有 非 対 称 メモリ 型 (ccnuma Cache Coherent Non- Uniform Memory Access) 79

並 列 プログラミングのモデル 実 際 の 並 列 プログラムの 挙 動 はMIMD アルゴリズムを 考 えるときは<SIMDが 基 本 > 複 雑 な 挙 動 は 理 解 できないので 80

並 列 プログラミングのモデル MIMD 上 での 並 列 プログラミングのモデル 1. SPMD(Single Program Multiple Data) 1つの 共 通 のプログラムが 並 列 処 理 開 始 時 に 全 プロセッサ 上 で 起 動 する MPI(バージョン1)のモデル 2. Master / Worker(Master / Slave) 1つのプロセス(Master)が 複 数 のプロセス(Worker)を 管 理 ( 生 成 消 去 )する 81

並 列 プログラムの 種 類 マルチプロセス MPI (Message Passing Interface) HPF (High Performance Fortran) 自 動 並 列 化 Fortranコンパイラ ユーザがデータ 分 割 方 法 を 明 示 的 に 記 述 マルチスレッド Pthread (POSIX スレッド) Solaris Thread (Sun Solaris OS 用 ) NT thread (Windows NT 系 Windows95 以 降 ) Java スレッドの Fork( 分 離 ) と Join( 融 合 ) を 明 示 的 に 記 述 言 語 仕 様 としてスレッドを 規 定 Open MP 82 ユーザが 並 列 化 指 示 行 を 記 述 プロセスとスレッドの 違 い メモリを 意 識 するかどうかの 違 い 別 メモリは プロセス 同 一 メモリは スレッド

並 列 処 理 の 実 行 形 態 (1) データ 並 列 並 列 化 CPU0 CPU1 CPU2 データを 分 割 することで 並 列 化 する データの 操 作 (= 演 算 )は 同 一 となる データ 並 列 の 例 : 行 列 - 行 列 積 1 2 3 9 8 7 1*9 2*6 3*3 4 5 6 6 5 4 = 4*9 5*6 6*3 7*9 8*6 9*3 7 8 9 3 2 1 1 4 7 2 3 9 8 7 5 6 6 5 4 8 9 3 2 1 全 CPUで 共 有 1*8 2*5 3*2 1*7 2*4 3*1 4*8 5*5 6*2 4*7 5*4 6*1 7*8 8*5 9*2 7*7 8*4 9*1 1*9 2*6 3*3 1*8 2*5 3*2 1*7 2*4 3*1 = 4*9 5*6 6*3 4*8 5*5 6*2 4*7 5*4 6*1 7*9 8*6 9*3 7*8 8*5 9*2 7*7 8*4 9*1 並 列 に 計 算 : 初 期 データは 異 なるが 演 算 は 同 一 83

並 列 処 理 の 実 行 形 態 (2) タスク 並 列 タスク(ジョブ)を 分 割 することで 並 列 化 する データの 操 作 (= 演 算 )は 異 なるかもしれない タスク 並 列 の 例 :カレーを 作 る 並 列 化 仕 事 1: 野 菜 を 切 る 仕 事 2: 肉 を 切 る 仕 事 3: 水 を 沸 騰 させる 仕 事 4: 野 菜 肉 を 入 れて 煮 込 む 仕 事 5:カレールゥを 入 れる 仕 事 1 仕 事 2 仕 事 4 仕 事 5 仕 事 3 時 間 84

MPIの 特 徴 メッセージパッシング 用 のライブラリ 規 格 の1つ メッセージパッシングのモデルである コンパイラの 規 格 特 定 のソフトウエアやライブラリを 指 すものではない! 分 散 メモリ 型 並 列 計 算 機 で 並 列 実 行 に 向 く 大 規 模 計 算 が 可 能 1プロセッサにおけるメモリサイズやファイルサイズの 制 約 を 打 破 可 能 プロセッサ 台 数 の 多 い 並 列 システム(MPPシステム Massively Parallel Processingシステム)を 用 いる 実 行 に 向 く 1プロセッサ 換 算 で 膨 大 な 実 行 時 間 の 計 算 を 短 時 間 で 処 理 可 能 移 植 が 容 易 API(Application Programming Interface)の 標 準 化 スケーラビリティ 性 能 が 高 い 通 信 処 理 をユーザが 記 述 することによるアルゴリズムの 最 適 化 が 可 能 プログラミングが 難 しい( 敷 居 が 高 い) 85

MPIの 経 緯 (1/2) MPIフォーラム(http://www.mpi-forum.org/)が 仕 様 策 定 1994 年 5 月 1.0 版 (MPI-1) 1995 年 6 月 1.1 版 1997 年 7 月 1.2 版 および 2.0 版 (MPI-2) 米 国 アルゴンヌ 国 立 研 究 所 およびミシシッピ 州 立 大 学 で 開 発 MPI-2 では 以 下 を 強 化 : 並 列 I/O C++ Fortran 90 用 インターフェース 動 的 プロセス 生 成 / 消 滅 主 に 並 列 探 索 処 理 などの 用 途 片 方 向 通 信 RMA (Remote Memory Access) 86

MPIの 経 緯 (2/2)MPI3.0 策 定 以 下 のページで 経 緯 が 公 開 中 http://meetings.mpi-forum.org/mpi_3.0_main_page.php 注 目 すべき 機 能 ( 検 討 中 ) RMA (Remote Memory Access) サポート FT (Fault Tolerant) stabilization FT を 意 識 したMPIプログラム 作 成 のAPI 群 と セマンティクス MPIT (Performance Tool) デバッガやパフォーマンスモニタ 開 発 環 境 といった ツール 群 とのインターフェース 仕 様 Neighborhood collectives( 物 理 的 に 近 いノードを 対 象 にした 専 用 コレクティブ 通 信 ), 粗 通 信 モデルの 為 の 集 団 通 信 API Fortran bindings - improved Fortran bindings, taking into account Fortran 2003 and 2008 features. Non-blocking collective I/O - extend non-blocking collective support to include MPI-I/O Hybrid: Shared memory communicator, Threads, and Endpoint proposals 87

MPIの 実 装 主 要 なもの MPICH(エム ピッチ) 米 国 アルゴンヌ 国 立 研 究 所 が 開 発 LAM(Local Area Multicomputer) ノートルダム 大 学 が 開 発 その 他 OpenMPI (FT-MPI, LA-MPI, LAM/MPI, PACX-MPIの 統 合 プロジェクト) YAMPII( 東 大 石 川 研 究 室 )(SCore 通 信 機 構 をサポート) 注 意 点 ヘッダファイル 定 義 の 違 いにより 動 作 が 異 なることがある メーカ 独 自 機 能 の 拡 張 がなされていることがある 88

MPIによる 通 信 郵 便 物 の 郵 送 に 同 じ 郵 送 に 必 要 な 情 報 : 1. 自 分 の 住 所 送 り 先 の 住 所 2. 中 に 入 っているものはどこにあるか 3. 中 に 入 っているものの 分 類 4. 中 に 入 っているものの 量 5. ( 荷 物 を 複 数 同 時 に 送 る 場 合 の) 認 識 方 法 (タグ) MPIでは: 1. 自 分 の 認 識 ID および 送 り 先 の 認 識 ID 2. データ 格 納 先 のアドレス 3. データ 型 4. データ 量 5. タグ 番 号 89

MPI 関 数 システム 関 数 MPI_Init; MPI_Comm_rank; MPI_Comm_size; MPI_Finalize; 1 対 1 通 信 関 数 ブロッキング 型 MPI_Send; MPI_Recv; ノンブロッキング 型 MPI_Isend; MPI_Irecv; 1 対 全 通 信 関 数 MPI_Bcast 集 団 通 信 関 数 MPI_Reduce; MPI_Allreduce; MPI_Barrier; 時 間 計 測 関 数 MPI_Wtime 90

コミュニケータ MPI_COMM_WORLDは コミュニケータとよばれる 概 念 を 保 存 する 変 数 コミュニケータは 操 作 を 行 う 対 象 のプロセッサ 群 を 定 める 初 期 状 態 では 0 番 ~numprocs 1 番 までのプロセッサ が 1つのコミュニケータに 割 り 当 てられる この 名 前 が MPI_COMM_WORLD プロセッサ 群 を 分 割 したい 場 合 MPI_Comm_split 関 数 を 利 用 メッセージを 一 部 のプロセッサ 群 に 放 送 するときに 利 用 マルチキャスト で 利 用 91

性 能 評 価 指 標 並 列 化 の 尺 度 92

性 能 評 価 指 標 - 台 数 効 果 台 数 効 果 式 : S T S : 逐 次 の 実 行 時 間 P :P 台 での 実 行 時 間 P 台 用 いて のとき 理 想 的 な(ideal) 速 度 向 上 P 台 用 いて のとき スーパリニア スピードアップ 主 な 原 因 は 並 列 化 により データアクセスが 局 所 化 されて キャッシュヒット 率 が 向 上 することによる 高 速 化 並 列 化 効 率 式 : EP S 飽 和 性 能 93 P T 速 度 向 上 の 限 界 Saturation さちる P S / TP (0 Sp) T S P P S P P / P 100 (0 Ep) [%] P

アムダールの 法 則 逐 次 実 行 時 間 を K とする そのうち 並 列 化 ができる 割 合 を α とする このとき 台 数 効 果 は 以 下 のようになる 上 記 の 式 から たとえ 無 限 大 の 数 のプロセッサを 使 って も(P ) 台 数 効 果 は 高 々 1/(1-α) である (アムダールの 法 則 ) 全 体 の90%が 並 列 化 できたとしても 無 限 大 の 数 のプロセッ サをつかっても 1/(1-0.9) = 10 倍 にしかならない! 高 性 能 を 達 成 するためには 少 しでも 並 列 化 効 率 を 上 げる 実 装 をすることがとても 重 要 である 94 S P K /( K / PK(1 )) 1/( / P(1 )) 1/( (1/ P1) 1)

アムダールの 法 則 の 直 観 例 並 列 化 できない 部 分 (1ブロック) 並 列 化 できる 部 分 (8ブロック) 逐 次 実 行 =88.8%が 並 列 化 可 能 並 列 実 行 (4 並 列 ) 9/3=3 倍 並 列 実 行 (8 並 列 ) 9/2=4.5 倍 6 倍 95

略 語 とMPI 用 語 MPIは プロセス 間 の 通 信 を 行 います プロセスは( 普 通 は) プ ロセッサ (もしくは コア)に 一 対 一 で 割 り 当 てられます 今 後 MPIプロセス と 書 くのは 長 いので ここではPE (Processer Elementsの 略 )と 書 きます ただし 用 語 として PE は 現 在 はあまり 使 われていません ランク(Rank) 各 MPIプロセス の 識 別 番 号 のこと 通 常 MPIでは MPI_Comm_rank 関 数 で 設 定 される 変 数 (サンプ ルプログラムではmyid)に 0~ 全 PE 数 -1 の 数 値 が 入 る 世 の 中 の 全 MPIプロセス 数 を 知 るには MPI_Comm_size 関 数 を 使 う (サンプルプログラムでは numprocs に この 数 値 が 入 る) 96

基 本 的 なMPI 関 数 送 信 受 信 のためのインタフェース 97

C 言 語 インターフェースと Fortranインターフェースの 違 い C 版 は 整 数 変 数 ierr が 戻 り 値 ierr = MPI_Xxxx(.); Fortran 版 は 最 後 に 整 数 変 数 ierrが 引 数 call MPI_XXXX(., ierr) システム 用 配 列 の 確 保 の 仕 方 C 言 語 MPI_Status istatus; Fortran 言 語 integer istatus(mpi_status_size) 98

C 言 語 インターフェースと Fortranインターフェースの 違 い MPIにおける データ 型 の 指 定 C 言 語 MPI_CHAR ( 文 字 型 ) MPI_INT ( 整 数 型 ) MPI_FLOAT ( 実 数 型 ) MPI_DOUBLE( 倍 精 度 実 数 型 ) Fortran 言 語 MPI_CHARACTER ( 文 字 型 ) MPI_INTEGER ( 整 数 型 ) MPI_REAL ( 実 数 型 ) MPI_DOUBLE_PRECISION( 倍 精 度 実 数 型 ) MPI_COMPLEX( 複 素 数 型 ) 以 降 は C 言 語 インタフェースで 説 明 する 99

基 礎 的 なMPI 関 数 MPI_Recv(1/2) ierr = MPI_Recv(recvbuf, icount, idatatype, isource, itag, icomm, istatus); recvbuf : 受 信 領 域 の 先 頭 番 地 を 指 定 する icount : 整 数 型 受 信 領 域 のデータ 要 素 数 を 指 定 する idatatype : 整 数 型 受 信 領 域 のデータの 型 を 指 定 する MPI_CHAR ( 文 字 型 ) MPI_INT ( 整 数 型 ) MPI_FLOAT ( 実 数 型 ) MPI_DOUBLE( 倍 精 度 実 数 型 ) isource : 整 数 型 受 信 したいメッセージを 送 信 するPEの ランクを 指 定 する 任 意 のPEから 受 信 したいときは MPI_ANY_SOURCE を 指 定 する 100

基 礎 的 なMPI 関 数 MPI_Recv(2/2) itag : 整 数 型 受 信 したいメッセージに 付 いているタグの 値 を 指 定 する 任 意 のタグ 値 のメッセージを 受 信 したいときは MPI_ANY_TAG を 指 定 する icomm : 整 数 型 PE 集 団 を 認 識 する 番 号 であるコミュニケータ を 指 定 する 通 常 ではMPI_COMM_WORLD を 指 定 すればよい istatus : MPI_Status 型 ( 整 数 型 の 配 列 ) 受 信 状 況 に 関 する 情 報 が 入 る かならず 専 用 の 型 宣 言 をした 配 列 を 確 保 すること 要 素 数 がMPI_STATUS_SIZEの 整 数 配 列 が 宣 言 される 受 信 したメッセージの 送 信 元 のランクが istatus[mpi_source] タグが istatus[mpi_tag] に 代 入 される ierr( 戻 り 値 ) : 整 数 型 エラーコードが 入 る 101

基 礎 的 なMPI 関 数 MPI_Send ierr = MPI_Send(sendbuf, icount, idatatype, idest, itag, icomm); sendbuf : 送 信 領 域 の 先 頭 番 地 を 指 定 する icount : 整 数 型 送 信 領 域 のデータ 要 素 数 を 指 定 する idatatype : 整 数 型 送 信 領 域 のデータの 型 を 指 定 する idest : 整 数 型 送 信 したいPEのicomm 内 でのランクを 指 定 する itag : 整 数 型 受 信 したいメッセージに 付 けられたタグの 値 を 指 定 する icomm : 整 数 型 プロセッサー 集 団 を 認 識 する 番 号 である コミュニケータを 指 定 する ierr ( 戻 り 値 ) : 整 数 型 エラーコードが 入 る 102

Send-Recvの 概 念 (1 対 1 通 信 ) PE0 PE1 PE2 PE3 MPI_Send MPI_Recv 103

基 礎 的 なMPI 関 数 MPI_Bcast ierr = MPI_Bcast(sendbuf, icount, idatatype, iroot, icomm); sendbuf : 送 信 および 受 信 領 域 の 先 頭 番 地 を 指 定 する icount : 整 数 型 送 信 領 域 のデータ 要 素 数 を 指 定 する idatatype : 整 数 型 送 信 領 域 のデータの 型 を 指 定 する iroot : 整 数 型 送 信 したいメッセージがあるPEの 番 号 を 指 定 する 全 PEで 同 じ 値 を 指 定 する 必 要 がある icomm : 整 数 型 PE 集 団 を 認 識 する 番 号 である コミュニケータを 指 定 する ierr ( 戻 り 値 ) : 整 数 型 エラーコードが 入 る 104

MPI_Bcastの 概 念 ( 集 団 通 信 ) PE0 PE1 PE2 PE3 MPI_Bcast() MPI_Bcast() MPI_Bcast() MPI_Bcast() iroot 全 PEが 関 数 を 呼 ぶこと 105

1. 基 本 演 算 逐 次 処 理 では データ 構 造 が 重 要 並 列 処 理 においては データ 分 散 方 法 が 重 要 になる! 1. 各 PEの 演 算 負 荷 を 均 等 にする ロード バランシング: 並 列 処 理 の 基 本 操 作 の 一 つ 粒 度 調 整 2. 各 PEの 利 用 メモリ 量 を 均 等 にする 3. 演 算 に 伴 う 通 信 時 間 を 短 縮 する 4. 各 PEの データ アクセスパターン を 高 速 な 方 式 にする (= 逐 次 処 理 におけるデータ 構 造 と 同 じ) 行 列 データの 分 散 方 法 < 次 元 レベル>: 1 次 元 分 散 方 式 2 次 元 分 散 方 式 < 分 割 レベル>: ブロック 分 割 方 式 サイクリック( 循 環 ) 分 割 方 式 106

1.1.1 1 次 元 分 散 N/4 行 N/4 行 N/4 行 N/4 行 1 行 PE=0 PE=1 PE=2 PE=3 N 列 ( 行 方 向 ) ブロック 分 割 方 式 (Block, *) 分 散 方 式 ( 行 方 向 ) サイクリック 分 割 方 式 (Cyclic, *) 分 散 方 式 2 行 107 ( 行 方 向 )ブロック サイクリック 分 割 方 式 (Cyclic(2), *) 分 散 方 式 この 例 の 2 : <ブロック 幅 >とよぶ

1.1.2 2 次 元 分 散 N/2 N/2 N/2 N/2 PE=0 PE=2 PE=1 PE=3 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 2 2 3 3 2 2 3 3 2 2 3 3 2 2 3 3 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 2 2 3 3 2 2 3 3 2 2 3 3 2 2 3 3 ブロック ブロック 分 割 方 式 (Block, Block) 分 散 方 式 サイクリック サイクリック 分 割 方 式 (Cyclic, Cyclic) 分 散 方 式 二 次 元 ブロック サイクリック 分 割 方 式 (Cyclic(2), Cyclic(2)) 分 散 方 式 0 1 0 1 0 1 0 1 2 3 2 3 2 3 2 3 0 1 0 1 0 1 0 1 2 3 2 3 2 3 2 3 0 1 0 1 0 1 0 1 2 3 2 3 2 3 2 3 0 1 0 1 0 1 0 1 2 3 2 3 2 3 2 3 108

1.2 ベクトルどうしの 演 算 以 下 の 演 算 z ax y ここで αはスカラ z x y はベクトル どのようなデータ 分 散 方 式 でも 並 列 処 理 が 可 能 ただし スカラ α は 全 PEで 所 有 する ベクトルはO(n)のメモリ 領 域 が 必 要 なのに 対 し スカラは O(1)のメモリ 領 域 で 大 丈 夫 スカラメモリ 領 域 は 無 視 可 能 計 算 量 :O(N/P) あまり 面 白 くない = + z α x y 109

1.3 行 列 とベクトルの 積 < 行 方 式 >と< 列 方 式 >がある 1 2 <データ 分 散 方 式 >と< 方 式 > 組 のみ 合 わせがあり 少 し 面 白 い 1 2 = 12 12 = 12 1 2 for(i=0;i<n;i++){ y[i]=0.0; for(j=0;j<n;j++){ y[i] += a[i][j]*x[j]; } } < 行 方 式 >: 自 然 な 実 装 C 言 語 向 き 110 for(j=0; j<n; j++) y[j]=0.0; for(j=0; j<n; j++) { for (i=0; i<n; i++) { y[i] += a[i][j]*x[j]; } } < 列 方 式 >: Fortran 言 語 向 き

1.3 行 列 とベクトルの 積 < 行 方 式 の 場 合 > < 行 方 向 分 散 方 式 > : 行 方 式 に 向 く 分 散 方 式 PE=0 PE=1 PE=2 PE=3 右 辺 ベクトルを MPI_Allgather 関 数 を 利 用 し 全 PEで 所 有 する PE=0 PE=1 PE=2 PE=3 < 列 方 向 分 散 方 式 > :ベクトルの 要 素 すべてがほしいときに 向 く = 各 PE 内 で 行 列 ベクトル 積 を 行 う = + + + 111 各 PE 内 で 行 列 -ベクトル 積 を 行 う MPI_Reduce 関 数 で 総 和 を 求 める ( ある1PEにベクトルすべてが 集 まる)

1.3 行 列 とベクトルの 積 < 列 方 式 の 場 合 > < 行 方 向 分 散 方 式 > : 無 駄 が 多 く 使 われない PE=0 PE=1 PE=2 PE=3 = + + + = PE=0 PE=1 PE=2 PE=3 右 辺 ベクトルを MPI_Allgather 関 数 を 利 用 して 全 PEで 所 有 する < 列 方 向 分 散 方 式 > : 列 方 式 に 向 く 分 散 方 式 結 果 をMPI_Reduce 関 数 により 総 和 を 求 める = + + + 112 各 PE 内 で 行 列 -ベクトル 積 を 行 う MPI_Reduce 関 数 で 総 和 を 求 める ( ある1PEにベクトルすべてが 集 まる)

1.7 リダクション 演 算 < 操 作 >によって< 次 元 >を 減 少 (リダクション)させる 処 理 例 : 内 積 演 算 ベクトル(n 次 元 空 間 ) スカラ(1 次 元 空 間 ) リダクション 演 算 は 通 信 と 計 算 を 必 要 とする 集 団 通 信 演 算 (collective communication operation) と 呼 ばれる 演 算 結 果 の 持 ち 方 の 違 いで 2 種 のインタフェー スが 存 在 する 113

1.7 リダクション 演 算 演 算 結 果 に 対 する 所 有 PEの 違 い MPI_Reduce 関 数 リダクション 演 算 の 結 果 を ある 一 つのPEに 所 有 させる PE0 PE1 PE2 操 作 操 作 PE0 MPI_Allreduce 関 数 リダクション 演 算 の 結 果 を 全 てのPEに 所 有 させる PE0 操 作 PE0 PE1 PE2 PE1 PE2 114

基 礎 的 なMPI 関 数 MPI_Reduce ierr = MPI_Reduce(sendbuf, recvbuf, icount, idatatype, iop, iroot, icomm); sendbuf : 送 信 領 域 の 先 頭 番 地 を 指 定 する recvbuf : 受 信 領 域 の 先 頭 番 地 を 指 定 する iroot で 指 定 した PEのみで 書 き 込 みがなされる 領 域 と 受 信 領 域 は 同 一 であってはならない すなわち 異 なる 配 列 を 確 保 しなくてはならない icount : 整 数 型 送 信 領 域 のデータ 要 素 数 を 指 定 する idatatype : 整 数 型 送 信 領 域 のデータの 型 を 指 定 する < 最 小 / 最 大 値 と 位 置 >を 返 す 演 算 を 指 定 する 場 合 は MPI_2INT( 整 数 型 ) MPI_2FLOAT ( 単 精 度 型 ) MPI_2DOUBLE( 倍 精 度 型 ) を 指 定 する 115

基 礎 的 なMPI 関 数 MPI_Reduce iop : 整 数 型 演 算 の 種 類 を 指 定 する MPI_SUM ( 総 和 ) MPI_PROD ( 積 ) MPI_MAX ( 最 大 ) MPI_MIN ( 最 小 ) MPI_MAXLOC ( 最 大 と 位 置 ) MPI_MINLOC ( 最 小 と 位 置 ) など iroot : 整 数 型 結 果 を 受 け 取 るPEのicomm 内 で のランクを 指 定 する 全 てのicomm 内 のPEで 同 じ 値 を 指 定 する 必 要 がある icomm : 整 数 型 PE 集 団 を 認 識 する 番 号 である コミュニケータを 指 定 する ierr : 整 数 型 エラーコードが 入 る 116

MPI_Reduceの 概 念 ( 集 団 通 信 ) PE0 PE1 PE2 PE3 MPI_Reduce() MPI_Reduce() MPI_Reduce() MPI_Reduce() iroot データ1 データ2 データ3 データ4 iop( 指 定 された 演 算 ) 117

MPI_Reduceによる2リスト 処 理 例 (MPI_2DOUBLEとMPI_MAXLOC) PE0 PE1 PE2 PE3 MPI_Reduce() MPI_Reduce() MPI_Reduce() MPI_Reduce() 3.1 2.0 iroot 4.1 5.0 5.9 9.0 2.6 13.0 MPI_MAXLOC 5.9 9.0 LU 分 解 の 枢 軸 選 択 処 理 118

基 礎 的 なMPI 関 数 MPI_Allreduce ierr = MPI_Allreduce(sendbuf, recvbuf, icount, idatatype, iop, icomm); sendbuf : 送 信 領 域 の 先 頭 番 地 を 指 定 する recvbuf : 受 信 領 域 の 先 頭 番 地 を 指 定 する iroot で 指 定 した PEのみで 書 き 込 みがなされる 領 域 と 受 信 領 域 は 同 一 であってはならない すなわち 異 なる 配 列 を 確 保 しなくてはならない icount : 整 数 型 送 信 領 域 のデータ 要 素 数 を 指 定 する idatatype : 整 数 型 送 信 領 域 のデータの 型 を 指 定 する 最 小 値 や 最 大 値 と 位 置 を 返 す 演 算 を 指 定 する 場 合 は MPI_2INT( 整 数 型 ) MPI_2FLOAT ( 単 精 度 型 ) MPI_2DOUBLE( 倍 精 度 型 ) を 指 定 する 119

基 礎 的 なMPI 関 数 MPI_Allreduce iop : 整 数 型 演 算 の 種 類 を 指 定 する MPI_SUM ( 総 和 ) MPI_PROD ( 積 ) MPI_MAX ( 最 大 ) MPI_MIN ( 最 小 ) MPI_MAXLOC ( 最 大 と 位 置 ) MPI_MINLOC ( 最 小 と 位 置 ) など icomm : 整 数 型 PE 集 団 を 認 識 する 番 号 である コミュニケータを 指 定 する ierr : 整 数 型 エラーコードが 入 る 120

MPI_Allreduceの 概 念 ( 集 団 通 信 ) PE0 PE1 PE2 PE3 MPI_Allreduce() MPI_Allreduce() MPI_Allreduce() MPI_Allreduce() データ0 データ1 データ2 データ3 iop( 指 定 された 演 算 ) 演 算 済 みデータの 放 送 121

1.7 リダクション 演 算 性 能 について リダクション 演 算 は 1 対 1 通 信 に 比 べ 遅 い プログラム 中 で 多 用 すべきでない! MPI_Allreduce は MPI_Reduce に 比 べ 遅 い MPI_Allreduce は 放 送 処 理 が 入 る なるべく MPI_Reduce を 使 う 122

1.4 行 列 の 転 置 行 列 A A が(Block,*) 分 散 されているとする A 行 列 の 転 置 行 列 を 作 るには MPIでは 次 の2 通 りの 関 数 を 用 いる MPI_Gather 関 数 a bc a b c T MPI_Scatter 関 数 a b c a bc 123

基 礎 的 なMPI 関 数 MPI_Gather ierr = MPI_Gather(sendbuf, isendcount, isendtype, recvbuf, irecvcount, irecvtype, iroot, icomm); sendbuf : 送 信 領 域 の 先 頭 番 地 を 指 定 する isendcount: 整 数 型 送 信 領 域 のデータ 要 素 数 を 指 定 する isendtype : 整 数 型 送 信 領 域 のデータの 型 を 指 定 する recvbuf : 受 信 領 域 の 先 頭 番 地 を 指 定 する iroot で 指 定 し たPEのみで 書 き 込 みがなされる なお 原 則 として 送 信 領 域 と 受 信 領 域 は 同 一 であってはならない すなわち 異 なる 配 列 を 確 保 しなくてはならない irecvcount: 整 数 型 受 信 領 域 のデータ 要 素 数 を 指 定 する この 要 素 数 は 1PE 当 たりの 送 信 データ 数 を 指 定 すること MPI_Gather 関 数 では 各 PEで 異 なる 数 のデータを 収 集 することは できないので 同 じ 値 を 指 定 すること 124

基 礎 的 なMPI 関 数 MPI_Gather irecvtype : 整 数 型 受 信 領 域 のデータ 型 を 指 定 する iroot : 整 数 型 収 集 データを 受 け 取 るPEの icomm 内 でのランクを 指 定 する 全 てのicomm 内 のPEで 同 じ 値 を 指 定 する 必 要 がある icomm : 整 数 型 PE 集 団 を 認 識 する 番 号 である コミュニケータを 指 定 する ierr : 整 数 型 エラーコードが 入 る 125

MPI_Gatherの 概 念 ( 集 団 通 信 ) PE0 PE1 PE2 PE3 MPI_Gather() MPI_Gather() MPI_Gather() MPI_Gather() iroot データA データB データC データD 収 集 処 理 データA データB データC データD 126

基 礎 的 なMPI 関 数 MPI_Scatter ierr = MPI_Scatter ( sendbuf, isendcount, isendtype, recvbuf, irecvcount, irecvtype, iroot, icomm); sendbuf : 送 信 領 域 の 先 頭 番 地 を 指 定 する isendcount: 整 数 型 送 信 領 域 のデータ 要 素 数 を 指 定 する この 要 素 数 は 1PE 当 たりに 送 られる 送 信 データ 数 を 指 定 すること MPI_Scatter 関 数 では 各 PEで 異 なる 数 のデータを 分 散 することはで きないので 同 じ 値 を 指 定 すること isendtype : 整 数 型 送 信 領 域 のデータの 型 を 指 定 する iroot で 指 定 したPEのみ 有 効 となる recvbuf : 受 信 領 域 の 先 頭 番 地 を 指 定 する なお 原 則 として 送 信 領 域 と 受 信 領 域 は 同 一 であってはならない すなわち 異 なる 配 列 を 確 保 しなくてはならない irecvcount: 整 数 型 受 信 領 域 のデータ 要 素 数 を 指 定 する 127

基 礎 的 なMPI 関 数 MPI_Scatter irecvtype : 整 数 型 受 信 領 域 のデータ 型 を 指 定 する iroot : 整 数 型 収 集 データを 受 け 取 るPEの icomm 内 でのランクを 指 定 する 全 てのicomm 内 のPEで 同 じ 値 を 指 定 する 必 要 がある icomm : 整 数 型 PE 集 団 を 認 識 する 番 号 である コミュニケータを 指 定 する ierr : 整 数 型 エラーコードが 入 る 128

MPI_Scatterの 概 念 ( 集 団 通 信 ) PE0 PE1 PE2 PE3 MPI_Scatter() MPI_Scatter() MPI_Scatter() MPI_Scatter() iroot データA データB データC データD 分 配 処 理 データA データB データC データD 129

参 考 文 献 1. MPI 並 列 プログラミング P.パチェコ 著 / 秋 葉 博 訳 2. 並 列 プログラミング 虎 の 巻 MPI 版 青 山 幸 也 著 理 化 学 研 究 所 情 報 基 盤 センタ ( http://accc.riken.jp/hpc/training/text.html ) 3. Message Passing Interface Forum ( http://www.mpi-forum.org/ ) 4. MPI-Jメーリングリスト ( http://phase.hpcc.jp/phase/mpi-j/ml/ ) 5. 並 列 コンピュータ 工 学 富 田 眞 治 著 昭 晃 堂 (1996) 130

MPIプログラム 実 習 Ⅰ( 演 習 ) 東 京 大 学 情 報 基 盤 センター 准 教 授 片 桐 孝 洋 131

実 習 課 題 132

サンプルプログラムの 説 明 Hello/ Cpi/ 並 列 版 Helloプログラム hello-pure.bash, hello-hy16.bash : NQSジョブスクリプトファイル 円 周 率 計 算 プログラム cpi-pure.bash NQSジョブスクリプトファイル Wa1/ 逐 次 転 送 方 式 による 総 和 演 算 wa1-pure.bash NQSジョブスクリプトファイル Wa2/ 二 分 木 通 信 方 式 による 総 和 演 算 wa2-pure.bash NQSジョブスクリプトファイル Cpi_m/ 円 周 率 計 算 プログラムに 時 間 計 測 ルーチンを 追 加 したもの cpi_m-pure.bash NQSジョブスクリプトファイル 133

総 和 演 算 プログラム( 逐 次 転 送 方 式 ) 各 プロセスが 所 有 するデータを 全 プロセスで 加 算 し あるプロセス1つが 結 果 を 所 有 する 演 算 を 考 える 素 朴 な 方 法 ( 逐 次 転 送 方 式 ) 1. (0 番 でなければ) 左 隣 のプロセスからデータを 受 信 する; 2. 左 隣 のプロセスからデータが 来 ていたら; 1. 受 信 する; 2. < 自 分 のデータ>と< 受 信 データ>を 加 算 する; 3. (191 番 でなければ) 右 隣 のプロセスに<2の 加 算 した 結 果 を> 送 信 する; 4. 処 理 を 終 了 する; 実 装 上 の 注 意 左 隣 りとは (myid-1)のidをもつプロセス 右 隣 りとは (myid+1)のidをもつプロセス myid=0のプロセスは 左 隣 りはないので 受 信 しない myid=p-1のプロセスは 右 隣 りはないので 送 信 しない 134

逐 次 転 送 方 式 (バケツリレー 方 式 ) による 加 算 所 有 データ 所 有 データ 所 有 データ 所 有 データ 0 1 2 3 0 1 3 CPU0 CPU1 CPU2 CPU3 送 信 送 信 送 信 0 + 1 = 1 1 + 2 = 3 3 + 3 = 6 最 終 結 果 135

1 対 1 通 信 利 用 例 ( 逐 次 転 送 方 式 C 言 語 ) void main(int argc, char* argv[]) { MPI_Status istatus;. dsendbuf = myid; drecvbuf = 0.0; if (myid!= 0) { ierr = MPI_Recv(&drecvbuf, 1, MPI_DOUBLE, myid-1, 0, MPI_COMM_WORLD, &istatus); } dsendbuf = dsendbuf + drecvbuf; if (myid!= nprocs-1) { ierr = MPI_Send(&dsendbuf, 1, MPI_DOUBLE, myid+1, 0, MPI_COMM_WORLD); } if (myid == nprocs-1) printf ("Total = %4.2lf n", dsendbuf);. } 受 信 用 システム 配 列 の 確 保 自 分 より 一 つ 少 ない ID 番 号 (myid-1)から double 型 データ1つを 受 信 しdrecvbuf 変 数 に 代 入 自 分 より 一 つ 多 い ID 番 号 (myid+1)に dsendbuf 変 数 に 入 っ ているdouble 型 データ 1つを 送 信 136

1 対 1 通 信 利 用 例 ( 逐 次 転 送 方 式 Fortran 言 語 ) program main integer istatus(mpi_status_size). dsendbuf = myid drecvbuf = 0.0 if (myid.ne. 0) then call MPI_RECV(drecvbuf, 1, MPI_DOUBLE_PRECISION, & myid-1, 0, MPI_COMM_WORLD, istatus, ierr) endif dsendbuf = dsendbuf + drecvbuf if (myid.ne. numprocs-1) then call MPI_SEND(dsendbuf, 1, MPI_DOUBLE_PRECISION, & myid+1, 0, MPI_COMM_WORLD, ierr) endif if (myid.eq. numprocs-1) then print *, "Total = ", dsendbuf endif. stop end 受 信 用 システム 配 列 の 確 保 自 分 より 一 つ 少 ない ID 番 号 (myid-1)から double 型 データ1つを 受 信 しdrecvbuf 変 数 に 代 入 自 分 より 一 つ 多 い ID 番 号 (myid+1)に dsendbuf 変 数 に 入 っているdouble 型 データ1つを 送 信 137

総 和 演 算 プログラム( 二 分 木 通 信 方 式 ) 二 分 木 通 信 方 式 1. k = 1; 2. for (i=0; i < log2(nprocs); i++) 3. if ( (myid & k) == k) (myid k) 番 プロセスからデータを 受 信 ; 自 分 のデータと 受 信 データを 加 算 する; k = k * 2; 4. else (myid + k) 番 プロセスに データを 転 送 する; 処 理 を 終 了 する; 138

総 和 演 算 プログラム( 二 分 木 通 信 方 式 ) 3 段 目 =log2(8) 段 目 3 7 2 段 目 1 3 5 7 1 段 目 0 1 2 3 4 5 6 7 1 3 5 7 7 3 7 0 1 2 3 4 5 6 7 139

総 和 演 算 プログラム( 二 分 木 通 信 方 式 ) 実 装 上 の 工 夫 要 点 : プロセス 番 号 の2 進 数 表 記 の 情 報 を 利 用 する 第 i 段 において 受 信 するプロセスの 条 件 は 以 下 で 書 ける: myid & k が k と 一 致 ここで k = 2^(i-1) つまり プロセス 番 号 の2 進 数 表 記 で 右 からi 番 目 のビットが 立 っている プロセスが 送 信 することにする また 送 信 元 のプロセス 番 号 は 以 下 で 書 ける: myid + k つまり 通 信 が 成 立 するプロセス 番 号 の 間 隔 は2^(i-1) 二 分 木 なので 送 信 プロセスについては 上 記 の 逆 が 成 り 立 つ 140

総 和 演 算 プログラム( 二 分 木 通 信 方 式 ) 逐 次 転 送 方 式 の 通 信 回 数 明 らかに nprocs-1 回 二 分 木 通 信 方 式 の 通 信 回 数 見 積 もりの 前 提 各 段 で 行 われる 通 信 は 完 全 に 並 列 で 行 われる ( 通 信 の 衝 突 は 発 生 しない) 段 数 の 分 の 通 信 回 数 となる つまり log2(nprocs) 回 両 者 の 通 信 回 数 の 比 較 プロセッサ 台 数 が 増 すと 通 信 回 数 の 差 (= 実 行 時 間 )が とても 大 きくなる 1024プロセス 構 成 では 1023 回 対 10 回! でも 必 ずしも 二 分 木 通 信 方 式 がよいとは 限 らない( 通 信 衝 突 の 多 発 ) 141

性 能 プロファイラ 富 士 通 コンパイラには 性 能 プロファイラ 機 能 がある 富 士 通 コンパイラでコンパイル 後 実 行 コマンドで 指 定 し 利 用 する 以 下 の2 種 類 があります 基 本 プロファイラ 主 な 用 途 :プログラム 全 体 で 最 も 時 間 のかかってい る 関 数 を 同 定 する 詳 細 プロファイラ 主 な 用 途 : 最 も 時 間 のかかっている 関 数 内 の 特 定 部 分 において メモリアクセス 効 率 キャッシュヒット 率 スレッド 実 行 効 率 MPI 通 信 頻 度 解 析 を 行 う 142

性 能 プロファイラの 種 類 の 詳 細 基 本 プロファイラ コマンド 例 :fipp C 表 示 コマンド:fipppx GUI(WEB 経 由 ) ユーザプログラムに 対 し 一 定 間 隔 (デフォルト 時 100 ミリ 秒 間 隔 ) 毎 に 割 り 込 み をかけ 情 報 を 収 集 する 収 集 した 情 報 を 基 に コスト 情 報 等 の 分 析 結 果 を 表 示 詳 細 プロファイラ コマンド 例 :fapp C 表 示 コマンド:GUI(WEB 経 由 ) ユーザプログラムの 中 に 測 定 範 囲 を 設 定 し 測 定 範 囲 のハードウェアカウン タの 値 を 収 集 収 集 した 情 報 を 基 に MFLOPS MIPS 各 種 命 令 比 率 キャッシュミス 等 の 詳 細 な 分 析 結 果 を 表 示 143

基 本 プロファイラ 利 用 例 プロファイラデータ 用 の 空 のディレクトリがないとダメ /Wa2 に Profディレクトリを 作 成 $ mkdir Prof Wa2 の wa2-pure.bash 中 に 以 下 を 記 載 fipp -C -d Prof mpirun./wa2 実 行 する $ pjsub wa2-pure.bash テキストプロファイラを 起 動 $ fipppx A -d Prof 144

基 本 プロファイラ 出 力 例 (1/2) ------------------------------------------------------------------------------------------ Fujitsu Instant Profiler Version 1.2.0 Measured time : Thu Apr 19 09:32:18 2012 CPU frequency : Process 0-127 1848 (MHz) Type of program : MPI Average at sampling interval : 100.0 (ms) Measured range : All ranges Virtual coordinate : (12, 0, 0) ------------------------------------------------------------------------------------------ Time statistics Elapsed(s) User(s) System(s) --------------------------------------------- 2.1684 53.9800 87.0800 Application --------------------------------------------- 2.1684 0.5100 0.6400 Process 11 2.1588 0.4600 0.6800 Process 88 2.1580 0.5000 0.6400 Process 99 2.1568 0.6600 1.4200 Process 111 145

基 本 プロファイラ 出 力 例 (2/2) Procedures profile ************************************************************************************* Application - procedures ************************************************************************************* Cost % Mpi % Start End ---------------------------------------------------------------------- 475 100.0000 312 65.6842 -- -- Application ---------------------------------------------------------------------- 312 65.6842 312 100.0000 1 45 MAIN 82 17.2632 0 0.0000 -- -- GI sched_yield 80 16.8421 0 0.0000 -- -- libc_poll 1 0.2105 0 0.0000 -- -- pthread_mutex_unlock_usercnt ************************************************************************************* Process 11 - procedures ************************************************************************************* Cost % Mpi % Start End ---------------------------------------------------------------------- 5 100.0000 4 80.0000 -- -- Process 11 ---------------------------------------------------------------------- 4 80.0000 4 100.0000 1 45 MAIN 1 20.0000 0 0.0000 -- -- GI sched_yeld. 146

詳 細 プロファイラ 利 用 例 測 定 したい 対 象 に 以 下 のコマンドを 挿 入 Fortran 言 語 の 場 合 ヘッダファイル:なし 測 定 開 始 手 続 き 名 : call fapp_start(name, number, level) 測 定 終 了 手 続 き 名 : call fapp_stop(name, number, level) 利 用 例 : call fapp_start( region1,1,1) C/C++ 言 語 の 場 合 ヘッダファイル: fj_tool/fapp.h 測 定 開 始 関 数 名 : void fapp_start(const char *name, int number, int level) 測 定 終 了 関 数 名 : void fapp_stop(const char *name, int number, int level) 利 用 例 : fapp_start( region1,1,1); 147

詳 細 プロファイラ 利 用 例 空 のディレクトリがないとダメなので /Wa2 に Profディレクト リを 作 成 $ mkdir Prof Wa2のwa2-pure.bash 中 に 以 下 を 記 載 (キャッシュ 情 報 取 得 時 ) fapp -C -d Prof L 1 Ihwm Hevent=Cache mpirun./wa2 実 行 する $ pjsub wa2-pure.bash 148

詳 細 プロファイラGUIによる 表 示 例 プログラミング 支 援 ツール(FUJITSU Software Development Tools Version 1.2.1 for Windows) をインストール 以 下 をアクセス https://oakleaf-fx-1.cc.u-tokyo.ac.jp/fsdtfx10tx/ install/index.html ダウンロード をクリック Serverに oakleaf-fx-1.cc.u-tokyo.ac.jp Nameと passwordはセンターから 配 布 したものを 入 れる うまくいくと 右 のボックスがでる 149

詳 細 プロファイラGUIによる 表 示 例 MACの 場 合 は 以 下 をアクセス https://oakleaf-fx-1.cc.u-tokyo.ac.jp/fsdtfx10tx/ install/mac/index.html 150

詳 細 プロファイラGUIによる 表 示 例 右 のボックスで プロファイラ 部 分 をクリック プロファイルデータがある フォルダを 指 定 する うまくいくと 右 のような 解 析 データが 見 える 151

詳 細 プロファイラで 取 れるデータ プロセス 間 の 通 信 頻 度 情 報 (GUI 上 で 色 で 表 示 ) 各 MPIプロセスにおける 以 下 の 情 報 Cache: キャッシュミス 率 Instructions: 実 行 命 令 詳 細 Mem_access: メモリアクセス 状 況 Performance: 命 令 実 行 効 率 Statistics: CPU core 動 作 状 況 152

精 密 PA 可 視 化 機 能 (エクセル 形 式 ) 性 能 プロファイルは 見 にくい 7 回 程 度 実 行 しないといけないが 性 能 プロファイルデータ(マシン 語 命 令 の 種 類 や 実 行 時 間 に 占 める 割 合 など)を Excelで 可 視 化 してくれるツール( 精 密 PA 可 視 化 ツール)が 東 京 大 学 情 報 基 盤 センターのFX10では 提 供 さ れている 手 順 1. 対 象 箇 所 (ループ)を 専 用 のAPIで 指 定 する 2. プロファイルを 入 れるフォルダ7か 所 をつくる 3. プロファイルのためのコマンドで7 回 実 行 する 4. エクセル 形 式 に 変 換 する 5. 4のエクセル 形 式 を 手 元 のパソコンに 持 ってくる 6. 5のファイルを 指 定 のエクセルと 同 一 のフォルダに 入 れてから 指 定 のエ クセルを 開 く 153

精 密 PA 可 視 化 のための 指 示 API 以 下 のAPIで 対 象 となるループを 挟 む(Fortranの 場 合 ) call start_collection( region ) < 対 象 となるループ> call stop_collection( region ) region は 対 象 となる 場 所 の 名 前 なので 任 意 の 名 前 を 付 けることが 可 能 ( 後 で 専 用 エクセルを 開 くときに 使 う) 154

実 行 のさせ 方 a.out という 実 行 ファイルの 場 合 以 下 のように7 回 実 行 する 実 行 するディレクトリに pa1 pa2 pa7という ディレクトリを 作 っておく 必 要 がある 以 下 のように 実 行 する fapp -C d pa1 -Hpa=1 mpiexec a.out fapp -C d pa2 -Hpa=2 mpiexec a.out fapp -C d pa3 -Hpa=3 mpiexec a.out fapp -C d pa4 -Hpa=4 mpiexec a.out fapp -C d pa5 -Hpa=5 mpiexec a.out fapp -C d pa6 -Hpa=6 mpiexec a.out fapp -C d pa7 -Hpa=7 mpiexec a.out 155

エクセルデータへの 変 換 pa1 pa2 pa7の 中 に プロファイルデータがあることを 確 認 する 以 下 のコマンドを 実 行 する fapppx -A -d pa1 -o output_prof_1.csv -tcsv -Hpa fapppx -A -d pa2 -o output_prof_2.csv -tcsv -Hpa fapppx -A -d pa3 -o output_prof_3.csv -tcsv -Hpa fapppx -A -d pa4 -o output_prof_4.csv -tcsv -Hpa fapppx -A -d pa5 -o output_prof_5.csv -tcsv -Hpa fapppx -A -d pa6 -o output_prof_6.csv -tcsv -Hpa fapppx -A -d pa7 -o output_prof_7.csv -tcsv -Hpa 156

エクセルデータを 手 元 のPCに 転 送 以 下 のFX10 上 のエクセルデータを 手 元 のPCに 転 送 output_prof_1.csv output_prof_2.csv output_prof_7.csv 上 記 のエクセルデータが 入 ったフォルダで ポータル 上 で 公 開 されている 専 用 エクセルを 開 く 詳 細 なエクセルデータの 利 用 法 分 析 されたデータの 見 方 は マニュアル 参 照 J2UL-1490-04Z0(01) 2013 年 6 月 Technical Computing Suite V1.0 プロファイラ 使 用 手 引 書 (PRIMEHPC FX10 用 ) 157

性 能 最 適 化 情 報 の 提 示 (1/2) C Fortranを 問 わず コンパイラが 行 った 最 適 化 情 報 を 知 ることは 性 能 最 適 化 で 重 要 である 各 ファイルのソースコードごとに どのような 最 適 化 が 行 われたか 出 力 する コンパイラオプションがある C Fortranで 共 通 の 翻 訳 情 報 -Nlst=p : 標 準 の 最 適 化 情 報 を 出 力 (デフォルト) -Nlst=t : 詳 細 な 最 適 化 情 報 を 出 力 158

性 能 最 適 化 情 報 の 提 示 (2/2) Fortran のみ p t 以 外 も 指 定 可 能 -Nlst=a : 名 前 の 属 性 情 報 を 出 力 -Nlst=d : 派 生 型 の 構 成 情 報 を 出 力 -Nlst=I :インクルードされたファイルのプログラムリスト およびインクルードファイル 名 一 覧 を 出 力 を 出 力 -Nlst=m : 自 動 並 列 化 の 状 況 をOpenMP 指 示 文 によって 表 現 した 原 始 プログラムを 出 力 -Nlst=x : 名 前 および 文 番 号 の 相 互 参 照 情 報 を 出 力 詳 細 は オンラインマニュアルの 以 下 を 参 照 のこと C 言 語 使 用 手 引 書 : P.26 C++ 言 語 使 用 手 引 書 : P.28 Fortran 使 用 手 引 書 : P.46 P.52 P.53 159

演 習 課 題 1. 逐 次 転 送 方 式 のプログラムを 実 行 Wa1 のプログラム 2. 二 分 木 通 信 方 式 のプログラムを 実 行 Wa2のプログラム 3. 時 間 計 測 プログラムを 実 行 Cpi_mのプログラム 4. プロセス 数 を 変 化 させて サンプルプログラムを 実 行 5. Helloプログラムを 以 下 のように 改 良 MPI_Sendを 用 いて プロセス0からChar 型 のデータ Hello World!! を その 他 のプロセスに 送 信 する その 他 のプロセスでは MPI_Recvで 受 信 して 表 示 する 160

演 習 課 題 1. 逐 次 転 送 方 式 のプログラムを 実 行 Wa1 のプログラム 2. 二 分 木 通 信 方 式 のプログラムを 実 行 Wa2のプログラム 3. 時 間 計 測 プログラムを 実 行 Cpi_mのプログラム 4. プロセス 数 を 変 化 させて サンプルプログラムを 実 行 5. Helloプログラムを 以 下 のように 改 良 MPI_Sendを 用 いて プロセス0からChar 型 のデータ Hello World!! を その 他 のプロセスに 送 信 する その 他 のプロセスでは MPI_Recvで 受 信 して 表 示 する 161

プログラム 実 習 Ⅰ(BLAS)( 演 習 ) 東 京 大 学 情 報 基 盤 センター 准 教 授 片 桐 孝 洋 162

演 習 内 容 BLASとは GOTO BLASとは LAPACKとは ScaLAPACKとは BLASの 利 用 法 と 実 習 (DGEMM) 163

1.8 BLASとPBLAS BLAS(Basic Linear Algebra Subprograms 基 本 線 形 代 数 副 プログラム 集 ) 線 形 代 数 計 算 で 用 いられる 基 本 演 算 を 標 準 化 (API 化 )したもの 普 通 は 密 行 列 用 の 線 形 代 数 計 算 用 の 基 本 演 算 の 副 プログラムを 指 す 疎 行 列 の 基 本 演 算 用 の<スパースBLAS>というも のあるが まだ 定 着 していない 164

1.8 BLASとPBLAS 高 性 能 なライブラリの< 作 成 の 手 間 >と <プログラム 再 利 用 性 >を 高 める 目 的 で 提 案 BLAS 演 算 の 性 能 改 善 を 個 々のユーザが 個 々のプログラムで 独 立 して 行 うのは ソフトウエア 開 発 効 率 が 悪 い < 工 学 的 >でない 性 能 を 改 善 するチューニングは 経 験 のないユーザ には 無 理 < 職 人 芸 >!= < 科 学 工 学 > BLASは 数 学 ソフトウエアにおける <ソフトウエア 工 学 >のはしり 165

1.8 BLASとPBLAS BLASでは 以 下 のように 分 類 わけをして サブルーチンの 命 名 規 則 を 統 一 1. 演 算 対 象 のベクトルや 行 列 の 型 ( 整 数 型 実 数 型 複 素 型 ) 2. 行 列 形 状 ( 対 称 行 列 三 重 対 角 行 列 ) 3. データ 格 納 形 式 ( 帯 行 列 を 二 次 元 に 圧 縮 ) 4. 演 算 結 果 が 何 か( 行 列 ベクトル) 演 算 性 能 から 以 下 の3つに 演 算 を 分 類 レベル1 BLAS: ベクトルとベクトルの 演 算 レベル2 BLAS: 行 列 とベクトルの 演 算 レベル3 BLAS: 行 列 と 行 列 の 演 算 166

1.8 BLASとPBLAS レベル1 BLAS ベクトル 内 積 ベクトル 定 数 倍 の 加 算 など 例 : y α x + y データの 読 み 出 し 回 数 演 算 回 数 がほほ 同 じ データの 再 利 用 (キャッシュに 乗 ったデータの 再 利 用 による データアクセス 時 間 の 短 縮 )がほとんどできない 実 装 による 性 能 向 上 が あまり 期 待 できない ほとんど 計 算 機 ハードウエアの 演 算 性 能 レベル1BLASのみで 演 算 を 実 装 すると 演 算 が 本 来 持 ってい るデータ 再 利 用 性 がなくなる 例 : 行 列 -ベクトル 積 を レベル1BLASで 実 装 167

1.8 BLASとPBLAS レベル2 BLAS 行 列 -ベクトル 積 などの 演 算 例 : y α A x + β y 前 進 / 後 退 代 入 演 算 T x= y (Tは 三 角 行 列 )をxに ついて 解 く 演 算 を 含 む レベル1BLASのみの 実 装 よる データ 再 利 用 性 の 喪 失 を 回 避 する 目 的 で 提 案 行 列 とベクトルデータに 対 して データの 再 利 用 性 あり データアクセス 時 間 を 実 装 法 により 短 縮 可 能 ( 実 装 法 により) 性 能 向 上 がレベル1BLASに 比 べ しやすい(が 十 分 でない) 168

1.8 BLASとPBLAS レベル3 BLAS 行 列 - 行 列 積 などの 演 算 例 : C α A B + β C 共 有 記 憶 型 の 並 列 ベクトル 計 算 機 では レベル2 BLASでも 性 能 向 上 が 達 成 できない 並 列 化 により1PE 当 たりのデータ 量 が 減 少 する より 大 規 模 な 演 算 をとり 扱 わないと 再 利 用 の 効 果 がない O( n 2 ) 行 列 - 行 列 積 では 行 列 データ に 対 して 演 算 は O( n 3 ) なので データ 再 利 用 性 が 原 理 的 に 高 い 行 列 積 は アルゴリズムレベルでもブロック 化 できる さらにデータの 局 所 性 を 高 めることができる 169

典 型 的 なBLASの 性 能 性 能 [FLOPS] 理 論 性 能 の 限 界 BLAS3 BLAS2 BLAS1 行 列 サイズ 170

BLAS 利 用 例 倍 精 度 演 算 BLAS3 C := alpha*op( A )*op( B ) + beta*c A: M*K; B:K*N; C:M*N; CALL DGEMM( N, N, n, n, n, ALPHA, A, N, B, N, BETA, C, N ) Aが 転 置 しているか Bが 転 置 しているか Mの 大 きさ Nの 大 きさ Kの 大 きさ alpha の 値 Aの アドレス Aの1 次 元 目 の 要 素 数 Bの アドレス Bの1 次 元 目 の 要 素 数 beta の 値 Cの アドレス Cの1 次 元 目 の 要 素 数 引 数 が 多 すぎ! とても 使 いにくい! 171

1.8 BLASとPBLAS PBLAS 並 列 版 のBLAS BLASとほぼ 同 じインタフェースをもつ BLAS 利 用 者 が 容 易 に 移 行 できる ライブラリ 再 利 用 の 目 的 で 開 発 連 立 一 次 方 程 式 用 ライブラリ:LINPACK (リン パック) 固 有 値 計 算 用 ライブラリ:EISPACK (アイス パック) これらを 統 合 したライブラリ:LAPACK (エル エー パック) アルゴリズムレベルでブロック 化 して レベル3 BLASを 利 用 するアルゴリズムを 新 規 開 発 LAPACKを 分 散 メモリ 並 列 化 :ScaLAPACK (スカラ パック) 並 列 版 BLASとして PBLASを 利 用 172

BLASの 機 能 詳 細 詳 細 はHP: http://www.netlib.org/blas/ 命 名 規 則 : 関 数 名 :XYYYY X: データ 型 S: 単 精 度 D: 倍 精 度 C: 複 素 Z: 倍 精 度 複 素 YYYY: 計 算 の 種 類 レベル1: 例 :AXPY:ベクトルをスカラー 倍 して 加 算 レベル2: 例 :GEMV: 一 般 行 列 とベクトルの 積 レベル3: 例 :GEMM: 一 般 行 列 どうしの 積 173

インタフェース 例 :DGEMM (1/4) DGEMM (TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC) C := alpha*op( A )*op( B ) + beta*c の 計 算 をする op( X ) = X もしくは op( X ) = X (Xの 転 置 行 列 ) 引 数 TRANSA( 入 力 ) CHARACTER*1 TRANSA は op( A ) の 操 作 を 指 定 する 以 下 の 文 字 列 を 指 定 TRANSA = N もしくは 'n', op( A ) = A TRANSA = T もしくは 't', op( A ) = A' TRANSA = 'C' or 'c', op( A ) = A TRANSB( 入 力 ) CHARACTER*1 TRANSB は op( B ) の 操 作 を 指 定 する 以 下 同 様 174

インタフェース 例 :DGEMM (2/4) M( 入 力 ) - INTEGER op( A ) と 行 列 Cの 行 の 大 きさを 指 定 する N( 入 力 ) - INTEGER op( B ) と 行 列 Cの 列 の 大 きさを 指 定 する K( 入 力 ) - INTEGER op( A ) の 列 の 大 きさ および op( B ) の 行 の 大 きさを 指 定 する ALPHA( 入 力 ) - DOUBLE PRECISION スカラ 値 ALPHAの 値 を 設 定 する A( 入 力 ) - DOUBLE PRECISION 行 列 Aの 配 列 大 きさは ( LDA, ka )で ka はTRANSA = N or n のと きはk そうでないときは m TRANSA = N or n のときは m kの 配 列 の 要 素 に 行 列 Aを 含 まない といけない そうでないときは k mの 配 列 に 行 列 Aの 転 置 を 入 れる 175

インタフェース 例 :DGEMM (3/4) LDA( 入 力 ) - INTEGER 行 列 Aの 最 初 の 次 元 数 を 入 れる TRANSA = N もしくは n なら LDA は max( 1, m )でなくてはならない そうでないなら LDA はmax( 1, k )でなくてはならない B( 入 力 ) - DOUBLE PRECISION 行 列 Bの 配 列 大 きさは ( LDB, kb )で kb はTRANSA = N or n のと きはn そうでないときは k TRANSA = N or n のときは k nの 配 列 の 要 素 に 行 列 Bを 含 まない といけない そうでないときは n kの 配 列 に 行 列 Bの 転 置 を 入 れる LDB( 入 力 ) - INTEGER 行 列 Bの 最 初 の 次 元 数 を 入 れる TRANSA = N もしくは n なら LDA は max( 1, k )でなくてはならない そうでないなら LDB はmax( 1, n )でなくてはならない 176

インタフェース 例 :DGEMM (4/4) BETA ( 入 力 ) - DOUBLE PRECISION スカラ 値 BETAの 値 を 設 定 する C ( 入 力 / 出 力 ) - DOUBLE PRECISION 行 列 Cの 配 列 入 力 時 m n の 配 列 に 行 列 Cを 入 れる 配 列 には BETAが0でない 限 り 行 列 Cを 入 れる この 場 合 は Cの 入 力 は 必 要 ない 出 力 時 この 配 列 に m n 行 列 の 演 算 結 果 ( alpha*op( A )*op( B ) + beta*c )が 上 書 きされて 戻 る LDC ( 入 力 ) - INTEGER 行 列 Cの 最 初 の 次 元 数 を 入 れる LDC は max(1, m )でなくてはならない 177

BLASの 問 題 点 BLASの 問 題 点 1. BLASやPBLASを 用 いると データ 再 利 用 性 や 並 列 性 が 低 下 するかもしれない 例 :レベル1BLASにおける 行 列 -ベクトル 積 2. インタフェースに 合 わせるため 無 駄 な 処 理 ( 配 列 への 代 入 等 )が 必 要 になる 場 合 も <メモリ 浪 費 >や< 演 算 性 能 低 下 >の 要 因 に 3. ソースコードが 読 みにくくなる BLASのインタフェースを 熟 知 しないと かえって 処 理 が 理 解 できない まあ 再 利 用 性 性 能 とのトレードオフでしょうが 178

GOTO BLASとは 後 藤 和 茂 氏 により 開 発 された ソースコードが 無 償 入 手 可 能 な 高 性 能 BLASの 実 装 (ライブラリ) 特 徴 マルチコア 対 応 がなされている 多 くのコモディティハードウエア 上 の 実 装 に 特 化 等 Intel Nehalem and Atom systems VIA Nanoprocessor AMD Shanghai and Istanbul テキサス 大 学 先 進 計 算 センター(TACC)で GOTO BLAS2として ソースコードを 配 布 している HP:http://www.tacc.utexas.edu/tacc-projects/gotoblas2/ 179

LAPACK 密 行 列 に 対 する 連 立 一 次 方 程 式 の 解 法 および 固 有 値 の 解 法 の 標 準 アルゴリズムルーチンを 無 償 で 提 供 その 道 の 大 学 の 専 門 家 が 集 結 カリフォルニア 大 バークレー 校 : James Demmel 教 授 テネシー 大 ノックスビル 校 : Jack Dongarra 教 授 HP http://www.netlib.org/lapack/ 180

LAPACKの 命 名 規 則 命 名 規 則 : 関 数 名 :XYYZZZ X: データ 型 S: 単 精 度 D: 倍 精 度 C: 複 素 Z: 倍 精 度 複 素 YY: 行 列 の 型 BD: 二 重 対 角 DI: 対 角 GB: 一 般 帯 行 列 GE: 一 般 行 列 HE: 複 素 エルミート HP: 複 素 エルミート 圧 縮 形 式 SY: 対 称 行 列. ZZZ: 計 算 の 種 類 TRF: 行 列 の 分 解 TRS: 行 列 の 分 解 を 使 う CON: 条 件 数 の 計 算 RFS: 計 算 解 の 誤 差 範 囲 を 計 算 TRI: 三 重 対 角 行 列 の 分 解 EQU:スケーリングの 計 算 181

インタフェース 例 :DGESV (1/3) DGESV (N, NRHS, A, LDA, IPIVOT, B, LDB, INFO) A X = B の 解 の 行 列 Xを 計 算 をする A * X = B ここで A はN N 行 列 で X と B は N NRHS 行 列 と する 行 交 換 の 部 分 枢 軸 選 択 付 きのLU 分 解 でA を A = P * L * U と 分 解 する ここで P は 交 換 行 列 L は 下 三 角 行 列 Uは 上 三 角 行 列 である 分 解 されたA は 連 立 一 次 方 程 式 A * X = Bを 解 くのに 使 われる 引 数 N ( 入 力 ) - INTEGER 線 形 方 程 式 の 数 行 列 Aの 次 元 数 N >= 0 182

インタフェース 例 :DGESV (2/3) NRHS ( 入 力 ) INTEGER 右 辺 ベクトルの 数 行 列 Bの 次 元 数 NRHS >= 0 A ( 入 力 / 出 力 ) DOUBLE PRECISION, DIMENSION(:,:) 入 力 時 は N Nの 行 列 Aの 係 数 を 入 れる 出 力 時 は Aから 分 解 された 行 列 LとU = P*L*Uを 圧 縮 して 出 力 する Lの 対 角 要 素 は1であるので 収 納 されていない LDA ( 入 力 ) INTEGER 配 列 Aの 最 初 の 次 元 の 大 きさ LDA >= max(1,n) IPIVOT ( 出 力 ) - DOUBLE PRECISION, DIMENSION(:) 交 換 行 列 Aを 構 成 する 枢 軸 のインデックス 行 列 のi 行 がIPIVOT(i) 行 と 交 換 されている 183

インタフェース 例 :DGESV (3/3) B ( 入 力 / 出 力 ) DOUBLE PRECISION, DIMENSION(:,:) 入 力 時 は 右 辺 ベクトルの N NRHS 行 列 Bを 入 れる 出 力 時 は もし INFO = 0 なら N NRHS 行 列 である 解 行 列 Xが 戻 る LDB ( 入 力 ) -INTEGER 配 列 Bの 最 初 の 次 元 の 大 きさ LDB >= max(1,n) INFO ( 出 力 ) ーINTEGER = 0: 正 常 終 了 < 0: もし INFO = -i なら i-th 行 の 引 数 の 値 がおかしい > 0: もし INFO = i なら U(i,i) が 厳 密 に0である 分 解 は 終 わるが Uの 分 解 は 特 異 なため 解 は 計 算 されない 184

ScaLAPACK 密 行 列 に 対 する 連 立 一 次 方 程 式 の 解 法 および 固 有 値 の 解 法 の 標 準 アルゴリズムルーチンの 並 列 化 版 を 無 償 で 提 供 ユーザインタフェースはLAPACKに< 類 似 > ソフトウエアの< 階 層 化 >がされている 内 部 ルーチンはLAPACKを 利 用 並 列 インタフェースはBLACS データ 分 散 方 式 に 2 次 元 ブロック サイクリック 分 散 方 式 を 採 用 HP: http://www.netlib.org/scalapack/ 185

ScaLAPACKソフトウエア 構 成 図 ( 参 照 )http://www.netlib.org/scalapack/poster.html 186

BLACSとPBLAS BLACS ScaLAPACK 中 で 使 われる 通 信 機 能 を 関 数 化 したもの 通 信 ライブラリは MPI PVM 各 社 が 提 供 する 通 信 ライブラリを 想 定 し ScaLAPACK 内 でコード 修 正 せずに 使 うことを 目 的 とす る いわゆる 通 信 ライブラリのラッパー 的 役 割 でScaLAPACK 内 で 利 用 現 在 MPIがデファクトになったため MPIで 構 築 された BLACSのみ 現 実 的 に 利 用 されている なので ScaLAPACKはMPIでコンパイルし 起 動 して 利 用 する PBLAS BLACSを 用 いてBLASと 同 等 な 機 能 を 提 供 する 関 数 群 並 列 版 BLASといってよい 187

ScaLAPACKの 命 名 規 則 原 則 : LAPACKの 関 数 名 の 頭 に P を 付 けたもの そのほか BLACS PBLAS データ 分 散 を 制 御 するためのScaLAPACK 用 関 数 がある 188

インタフェース 例 :PDGESV (1/4) PDGESV ( N, NRHS, A, IA, JA, DESCA, IPIV, B, IB, JB, DESCB, INFO ) sub(a) X = sub(b) の 解 の 行 列 Xを 計 算 をする ここで sub(a) はN N 行 列 を 分 散 したA(IA:IA+N-1, JA:JA+N-1) の 行 列 X と B は N NRHS 行 列 を 分 散 したB(IB:IB+N-1, JB:JB+NRHS- 1)の 行 列 行 交 換 の 部 分 枢 軸 選 択 付 きのLU 分 解 でsub(A) を sub(a) = P * L * U と 分 解 する ここで P は 交 換 行 列 L は 下 三 角 行 列 Uは 上 三 角 行 列 である 分 解 されたsub(A) は 連 立 一 次 方 程 式 sub(a) * X = sub(b)を 解 くのに 使 われる 189

インタフェース 例 :PDGESV (2/4) N ( 大 域 入 力 ) INTEGER 線 形 方 程 式 の 数 行 列 Aの 次 元 数 N >= 0 NRHS ( 大 域 入 力 ) INTEGER 右 辺 ベクトルの 数 行 列 Bの 次 元 数 NRHS >= 0 A ( 局 所 入 力 / 出 力 ) DOUBLE PRECISION, DIMENSION(:,:) 入 力 時 は N Nの 行 列 Aの 局 所 化 された 係 数 を 配 列 A(LLD_A, LOCc( JA+N-1))を 入 れる 出 力 時 は Aから 分 解 された 行 列 LとU = P*L*Uを 圧 縮 して 出 力 する Lの 対 角 要 素 は1であるので 収 納 されていない IA( 大 域 入 力 ) -INTEGER :sub(a)の 最 初 の 行 のインデックス JA( 大 域 入 力 ) -INTEGER :sub(a)の 最 初 の 列 のインデックス DESCA ( 大 域 かつ 局 所 入 力 ) INTEGER 分 散 された 配 列 Aの 記 述 子 190