Integrating interactive performance analysis in Jupyter Notebooks for parallel programming education

IEEE IPDPS Workshops (IPDPSW), EduPar 2024(2024) · 論文 · oden2024integrating

📅 この論文を見た日

初回 2026-06-10 / 最終 2026-06-10 / 計 1 回更新

AI解説

情報源:本文 PDF(https://tcpp.cs.gsu.edu/curriculum/sites/default/files/EduPar-06.pdf,全8ページ)を全文取得して精読。図(Fig.4/5/8/10/11 の実画像)も同 PDF から抽出して掲載。著者:Lena Oden, Klaus Nölp(FernUniversität Hagen),Philipp Brauner(RWTH Aachen)。ソースコード・データ公開:https://zenodo.org/records/10573107。本ノートの記述は上記本文に書かれた内容のみに基づく。

一言で

並列プログラミング教育で、学生が MPI/OpenMP の C/C++ コードのベンチマーク・プロファイリング・トレーシングを Jupyter(JupyterLab)の中で完結して行えるようにする統合学習環境を作った話。コマンドラインのプロ用解析ツール(Score-P / Scalasca / Cube)を内部で叩き、結果の可視化までノートブック内に出す。GUI の JupyterLab 拡張C++ API の2経路を用意。19名の学生評価で、ツールを使った学生ほど(自己申告ベースの)習熟度が高まる正の効果が見られた。

背景・問題

並列プログラミングを教えるには、コードや並列アルゴリズムだけでなく 並列性能・スケーラビリティ・性能解析まで扱う必要があり、ベンチマークやスケーラビリティテストを演習に組み込むことが求められる。ところがここに、教育現場特有の 問題(困りごと) が積み重なる。

ここでの 問題 は「学生がプロ用のプロファイラ/トレーサを使いこなせない・環境構築でつまずく」ことであり、それに対する 課題(やること) が「これらの解析を JupyterLab に統合し、ワンクリック/数行で使えるようにする」ことである。

なぜ Jupyter なのか(採用理由)

論文が挙げる Jupyter の教育上の利点:

著者の大学は通信制(distance learning)大学で、学生は社会人が多く年齢層も広い(後述の評価で 23〜66 歳、中央値 35)。非同期・自習中心が前提なので、教材は自己完結・自己説明的である必要があり、ツールの使い方も動画とサンプルノートブックで説明している。

Jupyter での C/C++ 並列プログラミングの土台

ただしインタプリタ実行は遅く、プロファイラも使いにくい。そこで次節の「コンパイルしてから解析する」仕組みを作る。

提案手法:Jupyter でのベンチマーク・性能解析

著者は統合にあたり6つの要件を立てた:(1) ベンチマーク/プロファイル用コードはコンパイルする(インタプリタのボトルネック回避。多くのプロファイラは再コンパイルが必須)、(2) ユーザが問題サイズ並列実行単位数(スレッド/プロセス)を変えられる、(3) 複数の計測区間(timing region)をマークできる、(4) 可視化を Jupyter にシームレス統合、(5) 中間結果すべてにアクセス可能、(6) GUI 拡張と C++ API の両方で使える。

ノートブックをコンパイル可能ファイルに変換

この「実行時は無視されるコメントを目印に、後からコンパイル可能な C++ を組み立てる」発想が肝で、同じセルが(ツールが無くても)普通に対話実行でき、かつ解析のときだけ意味を持つという二重性を実現している。

ベンチマーク用マーカー

問題サイズ・並列実行単位の振り分け(スケーラビリティテスト)

プロファイリング・トレーシング

2つの入口:C++ API と JupyterLab 拡張 GUI

JupyterLab 拡張のメニュー項目

Figure 4: JupyterLab 拡張を起動するメニュー項目。「C++ Performance」メニューの「Create Performance Diagram for the current notebook」を選ぶ。

解析開始パネル

Figure 5: 拡張のパネル。解析種別(Timing/Profiling/Tracing/Compiler Optimization)とパラメータ(実行単位数・問題サイズ・反復回数・コンパイラフラグ)を選ぶと、下部の「Resulting Code」に対応する C++ API 呼び出し(performance p(...) / display_timing(...))が生成・表示される。

授業での使い方と可視化例

著者の大学は通信制で、「並列プログラミング」は学部生向けだが他修士課程の学生にも開かれる選択科目。全6ユニット(並列入門/並列化のアプローチ/OpenMP/MPI/並列アルゴリズム/ビッグデータ(Hadoop, Spark))で、本研究が主に対象とするのはユニット3・4・5のノートブックとツール。出力(ソースコード・計測結果・プロファイル/トレースデータ)はすべて学生のユーザ空間内の専用フォルダに保存され、直接アクセスして further analysis できる。

ベンチマーク(Timing)— 演習3:πの数値積分

πベンチマークの自動計測出力

Figure 8: OpenMP による π 計算の自動ベンチマーク出力。上が実行時間 vs 問題サイズ、下がスピードアップ。色は実行単位数(1/2/4/8)。マーカー(critical_0 / reduction_0 / atomic_0)を切り替えて比較でき、点にカーソルを合わせると実行単位数・問題サイズ・時間が表示される。

プロファイリング — 演習5:CSR 疎行列ベクトル積(SpMV)

SpMV のプロファイル出力

Figure 10: OpenMP(動的スケジューリング)による疎行列ベクトル積のプロファイル出力。関数ごと・実行単位ごとの時間を横棒で表示。!$omp implicit barrier @SPMV_OMP.cpp:40 で実行単位2/3/4 が長く待っており(バリア待ち)、負荷の偏りが読み取れる。

トレーシング — 演習4:MPI による素数計算

MPI 素数計算のトレース出力

Figure 11: MPI 素数計算(版1)のトレース出力。p.display_tracing(5,"-O3") を呼ぶと Scalasca がトレース収集・解析を行い、プロセス:スレッドごとの MPI 関数(MPI_Send/Recv/Barrier 等)の時間軸タイムラインが出る。worker(1:0)が MPI_Recv(紫)で長くブロックしている様子が見える。

評価(19名の学生評価)

方法

量的結果

表I(回帰):(Intercept) Estimate 2.233 (p<.001);TOOLUSE 0.417, t=2.05, p=.059, std.β=0.687;COMPETENCE(pre) 0.540, t=3.51, p=.003, std.β=0.602。

要するに、提供した性能解析ツールの使用は(あくまで主観的に測った)習熟度に正の影響を与えると示唆された。

質的フィードバック(自由記述の主題分析)

限界(著者自身が挙げる)

結論・今後

新しい性能ツールは JupyterLab に統合され、対話的環境で C/C++ の性能解析を可能にした。学生はツールを気に入り、並列プログラミング・ベンチマーク・性能解析の理解が深まった。ただし全員が Jupyter を好むわけではないため、コードスケルトンや Makefile といった「従来型」教材も Jupyter 外で使えるよう引き続き提供する。今後は C++ ラッパクラスの他言語への移植、Python 可視化の対応解析ツール拡張、設計済み事前・事後テストによる学習成果の本格的測定を計画。あわせて、ドキュメント・UI 設計の不備に起因する問題に取り組む立場から、性能解析ツール開発者にセットアップの簡素化・例示・UI とドキュメントのベストプラクティス(Diátaxis 等)を呼びかけている。計算機科学者の育成を超えて、生産変革など他分野での需要にも言及。

関連研究との関係(論文が挙げるもの)

Q&A

(まだなし)

自分のコメント

(まだなし)