NVIDIAは28日、東京オフィスで「高校生のためのCUDAサマーキャンプ」を開催。約50人の高校生が集まり、CUDAの基礎知識を学び、グループでプログラミングコンテストにも挑戦した。
このイベントは、次世代のIT業界の未来を切り開くGPUコンピューティングに関心のある学生の育成を目的としており、GPUアーキテクチャからCUDAの概要までを学び、プログラミングも体験するというもの。対象は現役の高校生および高等専門学校生で、最低限のC言語の知識が参加条件となる。参加費は無料。
募集人員は30名だったが、初日で28人の応募があり、週末の間にそれを超える47名の応募が集まったため、急遽枠を拡大し、47人全員が参加できることになった。中には大阪や滋賀からの参加者もあった。NVIDIAは世界各地で大学と協力し、パラレルコンピューティングの講座などを行なっているが、高校生を対象としたものは、日本が初だという。
NVIDIA日本代表の細井洋一氏 |
イベントの冒頭では、NVIDIA日本代表の細井洋一氏が挨拶した。細井氏は自信が高校生だった頃、アポロ11号が月面着陸を成功したのを見て、アメリカという国に対し、驚きとあこがれを持ち、最終的にはアメリカ留学を決意したという。
そう言いながら、細井氏は皆に当時NASAが月面で撮影したビデオを見せたのだが、現在NASAにはそのマスターテープがないため、最近になり、TVで放映された映像を元に復元が試みられたという経緯がある。実は、これに用いられたのがNVIDIAのCUDA対応ソフトなのだ。
細井氏は、CUDAを利用したソフト/技術は現在、コンシューマ向けにも大きく広がりを見せており、CUDAを習得することでどんなことが可能になるのかを知って帰って欲しいと語った。また、現在CUDA対応ソフトの9割は欧米のものだが、今回の参加者が今後、日本から対応ソフトを発信できるようになることを願っていると締めくくった。
続いて同社ソリューションアーキテクトの馬路徹氏がGPUアーキテクチャについて解説を行なった。その内容は本誌で過去に何度も扱っているものなので、ここでは詳細は割愛するが、単純なフラットシェーディングしかできなかったGPUが、今では汎用性を持つようになり、グラフィック以外の大規模な演算にも活用できるアーキテクチャに進化したことなどが解説された。また、CUDAが登場する前のGPUコンピューティングでは、グラフィックAPIを使って、冗長なコーディングが必要だったものが、C with CUDA Extensionにより、より簡単に記述できるようになったことなどが紹介された。
NVIDIAの馬路徹氏 | 同社GPUの歴史 | 最新GPUではGPUコンピューティングを実現するアーキテクチャに進化した |
続いて、株式会社フィックスターズプラットフォーム事業部事業部長の浅原明広氏が、マルチコアプロセッサについて概説した。Pentium 4まで、クロックを上げることで性能を引き上げてきたCPUは、消費電力の問題により、マルチコア化で性能を上げることに方針転換を図った。
しかし、マルチコア化には、アムダールの法則により、プログラムの中に並列化できない部分が10%でもあると、コア数が増えれば増えるほど、マルチコア化による効率が伸び悩むという問題がある。そのため、マルチコアを活用するには、いかに並列化の割合を増やすかが大きな鍵となる。
もう1つ考慮しないといけないのが、CPUにx86プロセッサなどを使い、並列処理にGPUを使うという、構造の問題だ。いくらGPUが高速に処理をできても、システムのメインメモリなどとの通信が多いと、バスがボトルネックになる。そのため、なるべくGPUのVRAM上で処理を行なうよう、プログラム側で工夫する必要があるという。
ちなみに、解説の合間合間には休憩があったが、そのときも参加者達は講師に熱心に質問を投げかけていた。
フィックスターズの浅原明広氏 | アムダールの法則により、少しでも非並列部分があると、コア数が増えても効率が上がらない | 並列化には、データ並列とタスク並列の2通りがある |
続いて、同じくフィックスターズのOpenCLチームエンジニアである飯塚拓郎氏が、実際のCUDAプログラミングについて解説を行なった。飯塚氏は、並列化とメモリアクセスの最適化について分かりやすい例を挙げながら、実際のコーディング方法を説明した。
一通りの解説が行なったところで、参加者は8つのグループに分けられ、3つの課題を与えられた。1つは、与えられた2次元のグレースケール画像を128を閾値として2値化するもの。2つめは、2次元の画像に3×3のメディアンフィルタを適用するもの。3つめは、2次元の画像を左上から右下への対角を中心に反転するといもの。
参加者はVisual Studioでコーディングを行なうことになったが、基本的な部分はすでにコーディングされており、GPUを使う部分だけのコーディングを行なった。また、CPUによるコーディングはすでになされていたので、それを参考にして、並列化を組み込んでいった。各チームは、課題ごとに担当者を割り振ったり、相談したりしながら、進めていったが、かなり苦戦していたようだった。
最終的には、1つの課題を実装するごとに50点と、最適化によるボーナス点という形で各チームが評価され。1位のチームは190点、2位と3位のチームはそれぞれ130点を獲得した。
参加者からは、「CUDAを使うのは初めてだったが、思ったより書きやすく、楽しかった」、「CUDAはたくさんのコアを扱うので難しかった」、「CUDAはこれからどんどん発展していく技術だと思った」など、各者各様の感想の声が上がった。
まだ具体的な予定は出ていないが、NVIDIAでは今後も学生の休みの時期に合わせて、こういったイベントを続けて行きたいとしている。
フィックスターズの飯塚拓郎氏 | 並列化の考え方 | 実際のコーディング例も解説される |
最後に与えられた課題の1つ | 参加者はチームに分かれて課題に取り組んだ |
(2009年 8月 31日)
[Reported by 若杉 紀彦]