全体概要

本セミナーは、「マルチコア・メニコアの時代において、爆発的に増大する計算資源をいかにプログラマが使いこなすか」という問いを中心に据えています。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年以降に特に顕著になったことが、歴史的データとともに示されます。

■ Part 2: メニコア・チップの2方向への進化と異種混合環境

メニコアチップの進化はIntel Xeon PhiとNVIDIA Teslaという二つの方向性に収斂しており、両者の詳細なアーキテクチャが解説されます。世界のトップ500スーパーコンピューターがこれらを採用していることが示され、「CPUとGPUを組み合わせる異種混合環境」の有効性が論じられます。モバイルデバイスもまた同様の異種混合アーキテクチャへと進化していることが確認されます。

■ Part 3: メニコアとパラレル・プログラミング

メニコアのパワーを引き出すために必要なパラレル・プログラミングの主要なアプローチ(MPI・OpenMP・OpenACC・CUDA・OpenCL)が整理されます。タスク・パラレルとデータ・パラレルという基本概念を軸に、各モデルの位置づけと相互関係が明確に示されます。

■ Part 4: Xeon PhiのプログラミングとOpenMP

Intel Xeon PhiをOpenMPで活用する具体的なプログラミング手法が示されます。OffloadモデルとNativeモデルという二つの実行モデルが提示され、スレッドのAffinityや実際のメモリ帯域測定結果を通じて、コア数増大によるスケーリング効果が実証されます。

■ Part 5: TeslaのプログラミングとCUDA

NVIDIA TeslaをCUDAでプログラミングする方法が、GPU コンピューティングの歴史(固定パイプライン→GPGPU→GPUコンピューティング)から説き起こされ、データ・パラレルの具体的な実装(グリッド・ブロック・スレッドの階層構造)とメモリ管理APIが丁寧に解説されます。

■ Part 6: OpenCL

OpenCLは、CUDAの影響を受けつつAppleが主導しKhronosグループが標準化した、異種混合デバイスを横断するポータブルな並列プログラミングAPIです。Platform Model・Memory Model・Execution Model・Programming Modelという4つの概念モデルを軸に、CUDAとの対応関係を明確にしながら、具体的なAPIとコードとともに解説されます。

■ Part 7: WebCL

WebCLは、OpenCLの能力をWebブラウザ上のJavaScript環境から呼び出すための標準APIです。Khronosグループが仕様を策定し(2013年10月時点でWorking Draft段階)、Nokia・Samsungがプロトタイプを公開しています。モバイルプラットフォームを含む広範なデバイスで、ハードウェア加速されたWebアプリを実現するビジョンが示されます。