東京大学のスーパーコンピュータを用いた並列プログラミング教育― 工学部・工学系研究科共通科目「スパコンプログラミング（１）および（Ⅰ）」（2013 年度夏・冬学期）、および、全学ゼミ「スパコンプログラミング研究ゼミ」（2013 年度冬学期）を通じて

―

片桐孝洋

東京大学情報基盤センター

准教授

１��じ��
計算科学・工学、ハードウェアの急速な発達を背景に、「第 3 の科学」としての大規模並列シミュレーションへの期待は、産学において一層高まっている。最新ハードウェアを駆使し、大規模並列シミュレーションプログラムを開発するための体系的な教育プログラムの事例は、世界的に見ても少ない。東京大学では 2008 年初頭から、「T2K オープンスパコン、次世代スーパーコンピュータ等を駆使した大規模シミュレーションを実施し、新しい科学を開拓する人材」を育成するための全学的な教育プログラムとして「学際計算科学・工学 人材育成プログラム」を実施している[1][2]。
一方、東京大学情報基盤センター（以降、センター）では、スーパーコンピュータ（以降、スパコン）の潜在的な新規ユーザである東京大学工学部を主とする学部学生と大学院生に対して高性能計算（HPC）教育の支援を行ってきた。センターのスパコン啓発と、ユーザの研究分野(主として大規模数値シミュレーション分野)における高性能並列プログラム開発の長期的支援を行なうことが目的である。
以上の背景から、本講義は工学部および工学系研究科の共通科目「スパコンプログラミング（１）および（Ⅰ）」を通年科目（夏学期、冬学期）として開講している。2013 年冬学期で1４回連続の開講となる。本講義は、工学部や工学系研究科以外の学生も受講している。
一方、天才的な学際領域の研究者を早期から養成し、高性能計算分野における優秀な人材を発掘する目的で、東京大学教養学部の学生に対し工学部と同様の講義を行う「スパコンプログラミング研究ゼミ」を開講している。2007 年度冬学期に「全学ゼミ」として開講して以来、2013年度夏学期で 7 回目の開講となった。
双方の受講生に対し、2012 年夏学期からは、2012 年 4 月に試験運転を開始した Fujitsu
PRIMEHPC FX10（FX10 スーパーコンピュータシステム、以降、FX10)の教育利用を、日本において先駆けて開始している。これらは、スーパーコンピューティング系の「教育利用」サービスの一環である[3]。
FX10 では、12 ノード（192 コア）の利用が可能となり、教育利用で使える並列数が大幅に増加した。
本報告は 2012 年度の報告[4]に引き続き、2013 年度冬学期までの教育利用報告である。

������������ータ（１）����
本講義は 2007 年度から夏学期、冬学期と年 2 回、連続して開講している。講義に事前登録した上でスパコンアカウントを発行した数（登録者数）と、単位を取得した人数（単位取得者数）を図 1 にのせる。

スーパーコンピューティングニュース- -271 --Vol.16,No.4

2014

(a)スパコンプログラミング（１）および（Ⅰ）(b)全学ゼミ：スパコンプログラミング研究ゼミ
図1

講義登録者数および単位取得者数の累計

図１から、工学部の講義においては登録者数の累計は 445 名、単位取得者数は 151 名に達している。

㸦㸰㸧 ཷㅮ⪅ࡢᡤᒓࡢ⣼ィ
スパコンプログラミング（１）および（Ⅰ）において、いままでアカウントを発行した学生の所属は、以下のとおりである（順不同）。
工学部


産業機械、機械情報、機械、精密、電気電子、電子情報、計数、システム創成、社会基盤、航空宇宙、マテリアル工学科

スーパーコンピューティングニュース- -282 --Vol.16,No.4

2014



理学部


経済学部




生命化学・工学

法学部




経済農学部




天文学、地球惑星物理、化学、物理

第３類

工学系研究科

システム創成、社会基盤、原子力国際、精密機械、物理工学、航空宇宙、機械情報、電気系、先端学際、応用化学、技術経営、金融、化学システム工学、精密、バイオエ
ンジニアリング、機械

情報理工学系研究科


新領域創成科学研究科


情報生命、先端エネルギー

理学系研究科コンピュータ科学、電子情報学、知能機械情報、数理、創造情報学

地球惑星科学、天文学

農学生命科学

応用生命

数理科学研究科

学際情報学府

経済学研究科

現代経済学、統計理論、金融システム

医学研究科




学際情報学

国保

総合文化学研究科


広域科学

以上から、本学の多種の学科から受講がなされている。本講義は、学際領域研究の支援になっているものと期待される。

㸱㸬03, ࢆ⏝࠸ࡓ୪ิࣉࣟࢢ࣑ࣛࣥࢢᩍ⫱㸦㸯㸧ㅮ⩏ࡢ᪉㔪
本講義を開講するに当たり、以下の指針を示している。

���能計�を学�た�には、計�機アー�テ���に��り、コン�イ�� �� といったシステム����エア、さらに�っているア�リ�ーシ�ンのアル�リ�ムに�る広�な��の知�が��となる。講義��れらす�てを���とは��ない。���、��された�用�
な��に�いて講義と��を��。本講義は、��講義の��に広い知�の��を�指すもの

スーパーコンピューティングニュース- -293 --Vol.16,No.42014

ではない。実�に��能プログラムを��センターのスーパーコン�ュータ�で��できるという、実用的でかつ、研究者として生き�るために必�な技能の習得を目�すものである。この技能の習得により、受講者の研究を�段に��さ�ることを目�とする。」
MPI(Message Passing Interface)を用いた並列プログラミングにおいて、MPI の機能を網羅的に紹介する従来のテキストのような方針ではなく、センターユーザの多数を占める数値シミュレーション研究者に必要な最低限の実装知識と、センターのスパコンを利用するための最低限の技術の習得を目的にする。

�����������������
並列プログラミング教育における最も重要な概念は、SIMD ( Single Instruction Multiple
Data stream )の概念であるという仮定のもとに教材を作成している。SIMD とは、並列計算機の分類の一つである。図 2 のように、同一の命令（たとえば、加算命令）がなされるが、加算する対象のデータは並列計算機の構成要素であるプロセッサ・エレメント（Processor Element,PE）で異なるというモデルである。

図 2

SIMD の概念

図 2 の SIMD の概念を、並列プログラミングの経験がない受講生に教えることは容易ではない。
理由は、いままで扱ってきた逐次プログラムと受講生の頭にある「逐次」プログラミングモデルとの乖離があるからである。そこで、SIMD の概念が自然に身につくように、以下のような段階を経て並列化ができる方針を立てた。
段階�

並列環境に慣れるため、簡単な並列プログラムを実行する。並列プログラムを眺める。
段階�

逐次プログラムを実行する。逐次プログラムを解析する。

段階�

逐次プログラムに存在するループに変更を施すだけで並列化ができる演習。

段階�

逐次プログラムに存在するループに変更を施し、かつ単純な MPI 関数を記述することで並列化できる演習。
段階�

データ構造の変更、多数の MPI 関数を記述することで並列化できる演習。

並列化のための段階 1 から 5 を通じて、逐次プログラムから並列プログラムを作成できる「方法論」を習得するというのが、本講義の最終的な目的である。この方法論は、一般的であり、スーパーコンピューティングニュース- -304 --Vol.16,No.42014

特に行列計算処理の並列化においては効果的である。この方法論を習得することで、ソフトウエア工学的によい並列化の作法を身に付けさせる。

�����本講義で行った授業内容を表１に示す。この内容は初めて開講された 2007 年度夏学期以来、大幅な変更は無い。表１のように、本講義で用いたアプリケーションは、行列-ベクトル積、べき乗法（行列-ベクトル積が使われている固有値・固有ベクトルの初等的な数値計算法）、行列行列積、LU 分解法の 4 種である。
表１ 授業内容
講義回数

内���

ガイダンス

初回ガイダンス、高性能計算の基礎

第１回講義

並列数値��の基�演算：性能評価指標、基礎的な MPI 関数、データ分散方式、ベクトルどうしの演算、ベクトル‐行列積、リダクション演算、数値計算ライブラリについて

第２回講義
スーパーコン�ュータを利用しよう：スパコンを利用しよう、並列プログラミングの基礎、二分木総和演算

第３回講義

高性能プログラミングの基礎（１）：階層キャッシュメモリ、演算パイプライン、ループアンローリング、配列連続アクセス、キャッシュとキャッシュライン、キャッシュライン衝突、サンプルプログラムの実行、演習課題、レポート課題

第４回講義

高性能プログラミングの基礎（２）：ブロック化、その他の高速化技術、OpenMP 超入門、サンプルプログラム（OpenMP）の実行、演習課題、レポート課題

第５回講義
行列-ベクトル積：サンプルプログラム（行列-ベクトル積）の実行、並列化の注意点

第６回講義
べき乗法：べき乗法とは、サンプルプログラム（べき乗法）の実行、並列化の注意点

行列‐行列積（１）：行列‐行列積とは、ループ交換法、ブロック化（タイリング）法、Ｃａｎｎｏｎのアルゴリズム、Ｆｏｘのアル第７回講義
ゴリズム、ＳＵＭＭＡ、ＰＵＭＭＡ、Ｓｔｒａｓｓｅｎのアルゴリズム、サンプルプログラム（行列‐行列積（１）：簡単版）の実行、並列化の注意点
第８回講義

行列‐行列積（２）：コンテスト課題発表、コンテストプログラムの実行、サンプルプログラム（行列‐行列積（２）：ちょっと難しい完全並列版）の実行、並列化の注意点、並列化のヒント
LU 分解法（１）：LU 分解法（ガウス・ジョルダン法、ガウス消去法、枢軸選択、LU 分解法（外積形式、内積形式、クラウト

第９回講義
法、ブロック形式ガウス法、縦ブロックガウス法、前進・後退代入））、サンプルプログラム（LU 分解法）の実行、並列化のヒント、演習課題、レポート課題
第１０回講義LU 分解法（２）：LU 分解の逐次アルゴリズムの解説

第１１回講義LU 分解法（３）：レポート提出の注意、レポート課題採点基準、LU 分解の並列化のヒント（２）

第１２回講義非同期通信：１対１通信に関する MPI 用語、サンプルプログラム（非同期通信）の実行

スーパーコンピューティングニュース- -315 --Vol.16,No.42014

第１３回講義����題：ソフトウエア自動チューニング：背景、ソフトウエア自動チューニングとは、ＦＩＢＥＲ方式、自動チューニング
記述言語ＡＢＣLｉｂＳｃｒｉｐｔ、ソフトウエアデモ、レポート課題

演習課題を与える一方、受講生が参加できる「プログラミングコンテスト」を講義の一環として開催した。コンテストの参加者、すなわちコンテストにおける出題をすべて解答する並列プログラムを提出した場合、レポートに加点を与えた。コンテストにおいて入賞（1 位～3 位）した場合、無条件で「優」を与えるという条件を付した。
本講義の演習のために、表 2 に示すサンプルプログラム 9 本を教材として開発している。このサンプルプログラムは、受講生が講義中にダウンロードして実行確認をした上、演習で用いる。C 言語版と Fortran 言語版の 2 種を用意している。
表 2 サンプルプログラム一覧
サンプルプログラム

サンプルプログラムの��（並列化の段階）#1. Samples-fx.tar

並列版 Hello プログラム、並列円周率計算プログラム、逐次転送（段階 1、２）方式による並列総和演算プログラム、二分木通信方式による並列総和演算プログラム、時間計測方法の並列プログラム#2. Mat-Mat-noopt-fx.tar

行列-行列積の逐次プログラム（逐次チューニング用）（段階２）#3.Mat-Mat-openmp-fx.tar

行列-行列積の逐次プログラム（OpenMP 並列化用）（段階２、３）#4. Mat-vec-fx.tar

行列-ベクトル積の逐次プログラム（段階２、３）#5. PowM-fx.tar

べき乗法の逐次プログラム（段階３、４）#6. Mat-Mat-fx.tar

行列-行列積の逐次プログラム（お手軽並列化用）（段階３）#7. Mat-Mat-d-fx.tar

行列-行列積の逐次プログラム（完全分散並列化用）（段階３、４）#8. LU-fx.tar

LU 分解法による連立一次方程式の求解の逐次プログラム（段階４、５）#9. SP_Isend-fx.tar

非同期通信の並列プログラム（段階１、２）������
本講義の事前登録者は、2013 年度まで累算し 445 名にものぼる。最終的な単位取得者数は、累算で 151 名である。本講義を継続していくことで、本センターのスーパーコンピュータが利用できる人材にとどまらず、高性能計算分野に貢献できる多数の人材を輩出できる。学界にとどまらず産業界にも人材が提供される。高性能計算分野の経済発展に貢献し、センターの社会スーパーコンピューティングニュース- -326 --Vol.16,No.42014

貢献に資する礎となる教育を行っていく所存である。
本講義の授業資料は、平成 21 年度分から一般に公開している。以下のページを参照いただければ幸いである。
http://www.kata-lab.itc.u-tokyo.ac.jp/class-matr.htm

��

�

�

[1] 中島研吾、究極の「並列プログラミング教育」を目指して―地球惑星科学専攻での 4 年間と未来への提言―、スーパーコンピューティングニュース、Vol.11, No.4, pp.30-44, 2009年 7 月．
[2] 東京大学

学際計算科学・工学人材育成プログラム．

http://nkl.cc.u-tokyo.ac.jp/CSEedu/[3] 東京大学情報基盤センタースーパコンピューティング系教育利用．

http://www.cc.u-tokyo.ac.jp/service/education/[4] 片桐孝洋：東京大学のスーパーコンピュータを用いた並列プログラミング教育（５）― 工
学部・工学系研究科共通科目「スパコンプログラミング１およびⅠ」（2012 年度 夏学期）、および、全学ゼミ「スパコンプログラミング研究ゼミ」（2011 年度冬学期）を通じて、スーパーコンピューティングニュース、Vol.14, No.5, 2012 年 9 月．

スーパーコンピューティングニュース- -337 --Vol.16,No.42014