講演資料
講義資料スライドの表紙です。スライド画像、または下の要約文中の青いページ番号リンクをクリックすると、別のタブで無駄なノイズのない、純粋なPDFビューア画面が起動し、指定されたページへ直接ジャンプして快適に閲覧できます。
全体概要
本セミナーは、「マルチコア・メニコアの時代において、爆発的に増大する計算資源をいかにプログラマが使いこなすか」という問いを中心に据えています。2013年時点における並列コンピューティングの最前線を体系的に整理し、ハードウェアの進化とプログラミングモデルの進化を有機的に結びつけて解説した、非常に密度の高い技術講演です。
まず背景として、スマートフォンの普及やインターネットの拡大に伴うICT需要の爆発的増大が示され [p.5]、それに呼応するようにムーアの法則に従ってトランジスター数が劇的に増加してきた歴史的経緯が確認されます [p.6], [p.7], [p.8]。しかし、トランジスター数の増加は自動的に性能向上をもたらすわけではなく、クロック周波数の頭打ちという物理的制約が顕在化しました [p.10], [p.11]。この制約への答えとして業界が選んだ道が「コアの多数化」であり、2005年以降その傾向が顕著になります [p.12]。
こうして登場したのが、IntelのXeon PhiとNVIDIAのTeslaという二つの方向性を代表するメニコア・チップです。CPUが「遅延を意識した設計」であるのに対し、GPUは「スループットを意識した設計」であるという根本的なアーキテクチャの差異 [p.49], [p.50] が、異種混合環境(ヘテロジニアスコンピューティング)の必然性を生み出しました [p.51]。
そのうえで本セミナーは、OpenMP、CUDA、OpenCL、そして新興のWebCLという複数のプログラミングモデルを具体的なコードとともに丁寧に解説します。特にOpenCLは、異なるデバイスを横断するポータブルな並列プログラミングの標準として、その4つのモデル(Platform・Memory・Execution・Programming)を軸に詳述されます [p.147]。さらにWebCLは、これらの並列計算能力をWebブラウザ上のJavaScriptから呼び出すという、モバイル・Web時代への橋渡し的ビジョンとして紹介されます [p.191]。
冒頭に引用されたSanjay J. Patelの言葉「スケーラブルなアルゴリズムとライブラリこそが、この時代の最良の遺産となりうる」 [p.2] が示すように、本セミナーの探求の結論は明確です。ハードウェアの進化を活かすためには、スケーラブルな並列プログラミングの技法を習得し、適切なツールを選択することが、現代のソフトウェアエンジニアに課された本質的な使命であるということです。
講義のロードマップ
■ Part 1: マルチコア・メニコアの時代へ
- この部の核心:
ICT需要の爆発的拡大とムーアの法則の継続が前提として示され、トランジスター数増大の恩恵をクロック周波数向上ではなくコア数増加へと振り向けるという、業界全体の設計思想の転換が論じられます。コアの増大が2005年以降に特に顕著になったことが、歴史的データとともに示されます。
- 論理展開:
- 2001〜2013年のICT拡大(携帯・スマートフォン・インターネット)とトランジスター数増大の相関 [p.5], [p.6], [p.7]
- チップ上のトランジスター数はムーアの法則に沿って増大を続けているが、クロックは頭打ち [p.8], [p.10]
- 消費電力・リーク電流・光速の物理限界によりクロック向上には原理的な壁がある [p.11]
- 解として「コア数を増やす」方向へシフト。2005年以降コア増大が顕著化 [p.12]
■ Part 2: メニコア・チップの2方向への進化と異種混合環境
- この部の核心:
メニコアチップの進化はIntel Xeon PhiとNVIDIA Teslaという二つの方向性に収斂しており、両者の詳細なアーキテクチャが解説されます。世界のトップ500スーパーコンピューターがこれらを採用していることが示され、「CPUとGPUを組み合わせる異種混合環境」の有効性が論じられます。モバイルデバイスもまた同様の異種混合アーキテクチャへと進化していることが確認されます。
- 論理展開:
- Top500リスト(2013年6月)に見る、Tianhe-2(Xeon Phi採用、1位)、Titan(NVIDIA K20x採用、2位)の事例 [p.17], [p.20], [p.21]
- Xeon Phiのアーキテクチャ:60コア、双方向リングバス、512bit SIMD、L2キャッシュ合計25MB超 [p.28], [p.29], [p.30]
- NVIDIA Kepler GK110のアーキテクチャ:SMX×15、各SMX内にCUDAコア192個、DP Unit×64 [p.41], [p.42], [p.43]
- CPUは遅延重視(大キャッシュ・分岐予測)、GPUはスループット重視(多スレッドで遅延を隠蔽) [p.49], [p.50]
- 両者を組み合わせる異種混合環境が性能向上の鍵 [p.51]
- iPhone 5s A7(Dual ARM + GPU×3)、Samsung Exynos 5420、NVIDIA Tegra 4などモバイルも同様の構成へ [p.54], [p.55], [p.58]
■ Part 3: メニコアとパラレル・プログラミング
- この部の核心:
メニコアのパワーを引き出すために必要なパラレル・プログラミングの主要なアプローチ(MPI・OpenMP・OpenACC・CUDA・OpenCL)が整理されます。タスク・パラレルとデータ・パラレルという基本概念を軸に、各モデルの位置づけと相互関係が明確に示されます。
- 論理展開:
- タスク・パラレル(粗粒度、マルチコアCPU向き)とデータ・パラレル(細粒度、メニコアGPU向き)の概念整理 [p.66]
- MPI(クラスター向け、明示的メッセージパッシング)、OpenMP(共有メモリ向け、ディレクティブ指定) [p.70], [p.71]
- OpenACCは抽象化によって細部を隠蔽するが、効率化には依然として深い理解が必要 [p.72]
- CUDAとOpenCLの類似性:CUDAで学んだ技法はOpenCLに応用可能 [p.80]
- データ転送の最適化(GMAC活用)がヘテロジニアス環境での重要課題 [p.78]
■ Part 4: Xeon PhiのプログラミングとOpenMP
- この部の核心:
Intel Xeon PhiをOpenMPで活用する具体的なプログラミング手法が示されます。OffloadモデルとNativeモデルという二つの実行モデルが提示され、スレッドのAffinityや実際のメモリ帯域測定結果を通じて、コア数増大によるスケーリング効果が実証されます。
- 論理展開:
- Offloadモデル(CPUが主体、一部をコプロセッサに委譲)とNativeモデル(両者で並列実行)の概念 [p.35]
- OpenMPによるベクター演算のパラレル化コード例(`#pragma omp parallel for`) [p.83], [p.84]
- Compact AffinityとScatter Affinityによるスレッド配置制御(OMP_NUM_THREADS、KMP_AFFINITY) [p.85]
- コア数増大に伴うメモリ帯域・演算性能のスケーリング実測値(61コアで138GB/s超) [p.88], [p.89], [p.90]
- Xeon Phi(61コア)がXeon(16コア)の性能を大幅に上回ることを実測で確認 [p.90]
■ Part 5: TeslaのプログラミングとCUDA
- この部の核心:
NVIDIA TeslaをCUDAでプログラミングする方法が、GPU コンピューティングの歴史(固定パイプライン→GPGPU→GPUコンピューティング)から説き起こされ、データ・パラレルの具体的な実装(グリッド・ブロック・スレッドの階層構造)とメモリ管理APIが丁寧に解説されます。
- 論理展開:
- GPU コンピューティングの歴史:固定パイプライン時代→GPGPU(グラフィックAPIを迂回した汎用計算)→Tesla世代での完全プログラマブル化 [p.93], [p.94], [p.97]
- CUDAのKernel・Grid・Block・Threadの階層構造とthreadIdx・blockIdx・blockDimによるインデックス計算 [p.107], [p.109], [p.110]
- `__global__`・`__device__`・`__host__`キーワードによるホスト/デバイスコードの分離 [p.116], [p.117]
- cudaMalloc・cudaMemcpy・cudaFreeによるデバイスメモリ管理 [p.132], [p.134], [p.135]
- ベクトル加算を例とした完全なCUDAコードの解説 [p.112], [p.136], [p.137]
■ Part 6: OpenCL
- この部の核心:
OpenCLは、CUDAの影響を受けつつAppleが主導しKhronosグループが標準化した、異種混合デバイスを横断するポータブルな並列プログラミングAPIです。Platform Model・Memory Model・Execution Model・Programming Modelという4つの概念モデルを軸に、CUDAとの対応関係を明確にしながら、具体的なAPIとコードとともに解説されます。
- 論理展開:
- OpenCLの4モデル:Platform Model(Host + Compute Device + CU + PE)、Memory Model(Global/Local/Private/Constant)、Execution Model(NDRange・Work Group・Work Item)、Programming Model [p.147], [p.148], [p.149], [p.150]
- CUDAとOpenCLの概念対応:Grid↔NDRange、Block↔Work Group、Thread↔Work Item [p.146], [p.166]
- Contextの役割(Devices・Kernels・Program Objects・Memory Objectsを束ねる実行環境) [p.162]
- Command Queueを通じたHostとDeviceの非同期通信(Kernel-enqueue・Memory・Synchronizationコマンド) [p.163], [p.164]
- OpenCLプログラムの流れ:Context生成→Command Queue生成→Program/Kernel生成→Memory Object生成→実行→結果読み出し [p.175]
- 具体的なAPI:clGetDeviceIDs・clCreateContext・clCreateBuffer・clEnqueueWriteBuffer・clBuildProgram・clCreateKernel・clEnqueueNDRangeKernel [p.179], [p.182], [p.185], [p.187]
■ Part 7: WebCL
- この部の核心:
WebCLは、OpenCLの能力をWebブラウザ上のJavaScript環境から呼び出すための標準APIです。Khronosグループが仕様を策定し(2013年10月時点でWorking Draft段階)、Nokia・Samsungがプロトタイプを公開しています。モバイルプラットフォームを含む広範なデバイスで、ハードウェア加速されたWebアプリを実現するビジョンが示されます。
- 論理展開:
- WebCLの目標:GPU/マルチコアによる高性能並列処理をWebアプリに開放し、純粋JavaScriptと比較して最大100倍の性能向上を実現 [p.193], [p.197]
- Nokia(Firefox向けプロトタイプ、LGPL公開)とSamsung(WebKit向けプロトタイプ、BSD公開)の先行実装 [p.196], [p.197]
- WebCL Working Draft(2013/10/23)におけるインターフェース定義:WebCL・WebCLPlatform・WebCLDevice・WebCLContext・WebCLCommandQueue・WebCLKernel・WebCLEvent [p.198], [p.199], [p.201], [p.202], [p.203], [p.206], [p.212], [p.213]
- JavaScriptからのWebCL利用コード例:初期化・Kernel生成・バッファ操作・NDRangeKernel実行・結果読み出し [p.216], [p.217], [p.218], [p.219], [p.220], [p.221]
- WebGLとの連携:GLBuffer・GLTexture2Dを介した頂点バッファ・テクスチャの共有による3Dレンダリングとの融合 [p.224], [p.225], [p.226], [p.227]
