GPUプログラミング入門

 GPUプログラミングの本を編者として執筆しました。前評判は上々で、アマゾンでは発売初日の今日、在庫切れになり、書籍全体のランキングでも300位くらいに入りました。もちろん、本の評価はこれからですので、読者の方々にとって有用であればと願っています。
 本の執筆を引き受けた動機、目的は「はじめに」(下記)に書いた通りです。過度に期待することなく、過度に落胆することなく、GPUプログラミングを利用するユーザーの一助になればと思っています。

GPUプログラミング入門 -CUDA5による実装 (KS情報科学専門書)

GPUプログラミング入門 -CUDA5による実装 (KS情報科学専門書)

            • -

 はじめに

 2012年11月期のスパコンランキングTOP500で,世界で最も高速なスーパーコンピュータに輝いたのは,米国オークリッジ研究所のTitanである.Cray社製であるが,大きな特徴はNVIDIA社製の最新のGPU(グラフィックス・プロセッシング・ユニット)を用いたアクセラレータTesla K20Xが18,688個搭載されていることである.GPUは,その名のとおり,もともとはグラフィックス処理専用のプロセッサであったが,演算能力の高さから一般の数値計算にも使われるように発展し,近年ではスーパーコンピュータにも多く取り入れられている.日本では,東京工業大学のスーパーコンピュータTSUBAMEが採用していて有名である.
 スーパーコンピュータでも用いられているGPUは,私たちの日常で使用しているパソコンにもビデオカードとして搭載されていて,とても身近な存在である.したがって,初期投資をしなくても,自分のパソコンで今すぐGPUコンピューティングを始めることができる.もっとも広く使われているGPUコンピューティング環境であるCUDA(Computer Unified Device Architecture)も無償で入手できる.
 もともと,CUDAはNVIDIA社の並列計算アーキテクチャを意味しており,昨年,最新のKeplerアーキテクチャが公開され,対応するGPUも一新された.それにともなって,開発ツールとしてのCUDAも4.xから5にメジャーバージョンアップされた.本書では新しいバージョンであるCUDA5を用いて執筆しており,現行のCUDA入門書としては最適なものになっていると自負している.このような執筆が可能になったのは,CUDAを提供しているNVIDIA社の協力があったからであり,ここで謝辞を申し上げたい.

 本書の第一の目的は,GPUコンピューティングを手軽に行ってみたいという方々に,CUDAのインストールからプログラム実行までの手順を示すことである(第2章).CUDAプログラミングそのものは難しいものではないが,効果的なプログラミングには多少の知識が必要になる.特に,GPU内部で階層化されているプログラミング構造やメモリ構造である.このことについて第3章で解説する.続いて,CUDAプログラミングに有効なライブラリの使い方をマスターすれば(第4章),あとはご自身でGPUを用いたプログラミングが自在にできるはずである.

 本書の第二の目的は,GPUの効果を実際の数値計算で例示することである.GPUを用いると多くの数値計算で高速化されるが,その割合は扱う問題によって大きく変わる.
 GPUはもともとグラフィック処理専用に開発されたプロセッサであるので,もっとも有効に機能するものはグラフィックス関係である.画像処理の多くは,画素ごとに独立で計算できる.そのため,GPUの内部に多数搭載されている計算コアが独立に動作でき,GPU内の並列計算が最も効率良く働く.画像処理の1つであるホログラムの計算では,パソコンの計算と比べて100〜1,000倍という驚くほどの高速化が実現する(第5章).
 各計算コアが独立に動作できる数値計算でも,プログラミングの中に条件分岐が含まれると,効率が落ちる.このことをモンテカルロ法数値計算を例にとって解説する(第6章).それでも,パソコンと比較して100倍程度の高速化を達成している.
 ただし,実際に行われている数値計算では,計算コア間でデータのやり取りが必要な場合が多い.各計算コアを独立で動作させることができないために,計算コア間での通信が必要になる.具体的には,各計算コアは頻繁にメモリとアクセスすることになる.GPUでは,通信能力は計算能力よりも劣るので,多くの場合,計算速度よりも通信速度で理論性能が決まる.GPUを使っても高速化しないということを耳にすることもあるが,通信性能で決まる理論性能は計算性能で決まる理論性能に比べて大きく下がる.それでもパソコンに比べれば10倍程度の高速化が実現可能である.このことを電磁界シミュレーションでよく用いられているFDTD法を例にとって解説する(第7章).

 本書の第三の目的は,Fortranユーザに対しての解説である.Fortranは世界で最初に科学計算用として開発されたプログラム言語であり,今なお,科学計算においては多用されている.これまでGPUプログラミングはC言語で行うというイメージをもって様子見をしている方々も多かったように思われる.確かにプログラミング言語を変えるというのは手間がかかるうえに,これまで培ってきたノウハウを利用できないというリスクも伴う.そこで,FortranによるCUDAプログラミングを,熱伝導方程式を例にとって解説する(第8章).Fortran用のコンパイラを別途用意するという初期コストは必要になるが,FortranでもC言語とそん色のない効果が期待できることがわかる.

 本書はCUDAを前提とした入門書という位置づけを持っているが,GPUプログラミングはそれがすべてではない.第9章では,CUDA以外のGPUプログラミングとして,Open CLを用いた手法を紹介する.近年ではプロセッサのマルチコア化が進んでいる.GPU以外にも,ソニー製ゲーム機であるプレイステーション3東芝製テレビCellレグザに搭載されたCell Broadband Engineが有名であり,最近ではIntel社がリリースしたXeon Phiプロセッサが注目されている.

 本書の執筆では,それぞれの分野で精力的にGPUを活用している研究者が分担し,編者が全体の文章を取りまとめた.また,編集担当の横山真吾氏には企画から尽力いただき,ここで謝意を表したい.
 編者がGPUで研究を始めたのは2004年で,CUDAはまだなく,GPUのハードウェアを調べながら,高速化を模索した.現在では,ハードウェア構造まで意識する必要はない.そういう面では手軽になったのは事実である.ただし,内部構造がブラックボックス化することで,高速化の仕方がわかりにくくなってしまうこともある.本書において,まずGPUプログラミングの基本を身につけていただき,さらに余裕が出てきた後は,随所に記載されているノウハウを習得していただければ幸いである.

 本書の執筆では,それぞれの分野で精力的にGPUを活用している研究者が分担し,編者が全体の文章を取りまとめた.また,編集担当の横山真吾氏には企画から尽力頂き,ここで謝意を表したい.
 編者がGPUで研究を始めたのは2004年で,CUDAはまだなく,GPUのハードウェアを調べながら,高速化を模索した.現在ではハードウェア構造まで意識する必要はない.そういう面では手軽になったのは事実である.ただし,内部構造がブラックボックス化することで,高速化の仕方がわかりにくくなってしまうこともある.本書において,まずGPUプログラミングの基本を身につけていただき,さらに余裕が出てきた後は,随所に記載されているノウハウを習得していただければ幸いである.

 2013年1月 著者を代表して[編者] 伊藤智義

            • -