イベント
ガンバレ高校生,NVIDIAと東京工業大学がスーパーコンピュータ「TSUBAME2.0」を使った「高校生のためのCUDAサマーキャンプ」を開催
会場には東京工業大学大岡山キャンパスが使用され,「CUDAの実習に東京工業大学が誇るスーパーコンピュータ「TSUBAME2.0」を利用する」という,高校生にとっては夢のような企画が実現した。ほぼ丸1日,張り付きで同イベントを取材してきたので,筆者の雑感も挟みつつレポートしてみたい。
39名の高校生が参加しTSUBAME2.0の見学ツアーも
残念ながら,スケジュールの都合がつかなくなり参加を取りやめた方が出たため,最終的には39名の高校生が参加。平均年齢は16.5歳とのことで(当然かもしれないが)高校1,2年生が中心,うち約1/3は高等工業専門学校の生徒が占めるという構成になっていた。
過去3回の本イベントでは,NVIDIAが都内の会場に機材を準備して行っていたが,今回は学習のための設備を含めて東京工業大学のものが使えるというのが大きな特徴だ。東京工業大学の青木尊之教授と下川辺隆史助教が講師を努め,高校生にとっては大学の授業を一足先に受けるというようなイメージにもなり,それだけでも有意義な1日になったのではないかと思う。
冒頭,NVIDIAスタッフがGPUの歴史やGPUコンピューティングへのNVIDIAの取り組みを紹介し,続いて青木教授と下川辺助教がスーパーコンピュータTSUBAME2.0を用いた研究内容を紹介。それらのイントロダクションが終了した午前10時ごろからTSUBAME2.0を用いたCUDAの実習が始まり,予定していた時刻を1時間以上も超過した午後6時すぎまで,ほぼ丸一日みっちりしごかれる? というスケジュールで進められた。
TSUBAME2.0のOSにはLinuxが採用されているので,実習の冒頭,まずその使い方を下川辺助教がレクチャー。その様子を後ろから見ていたのだが,参加者の1/3弱くらいはLinuxを使った経験があるようで,なかにはUNIX系OSを代表するエディタEmacsなんかまでバリバリ使う高校生がいる一方,少したどたどしい感じでコマンドを売っている学生も少なくなかった。
UNIX系のシェルは,使い慣れると補完機能やヒストリ機能を駆使して高速に操作できるので,習熟度に応じて操作速度が劇的に向上する特徴がある。経験者とそうでない人には操作速度にかなりの開きがあるので,そこで少し差がついてしまったかなという印象はある。
一方,CUDAそのものの解説は初心者向けで非常に丁寧だったのが印象的だった。CUDAプログラミングの基礎を担当した青木教授も,普段教えない高校生が相手ということもあるのか,講義には熱が入っていて,それだけに時間も超過気味になってしまったのだが,しっかり講義中の課題に取り組んだ高校生は得るものがあったはずだ。
また,昼食後にはTSUBAME2.0の実機見学ツアーも行われ,TSUBAME2.0を前に下川辺助教に熱心に質問する参加者もいた。GPUを使った国内最高レベルのスーパーコンピュータを見ることができた経験は高校生にとって大きな刺激になったことだろう。
グループワークではGPU向けの最適化が課題に
CUDAではスレッド数を(最大)3次元の一種の配列のような形で指定でき,スレッド群の扱いでもブロックとグリッドという二つの階層がある。また,GPUカーネル内では,その配列のインデックス(添え字)が並列データアクセスを行うためのインデックスになるので,スレッド数の指定の方法と,それをGPUカーネル内でインデックスとして扱う方法はCUDAプログラミングの基礎の基礎であると同時に鍵となるものだ。
というわけで,講義中の課題は重点的にそのあたりが扱われれた。C言語で多次元配列を扱ったことがあれば,そう難しい課題ではなかったと思うのだが,参加した高校生に話を聞いてみると「ついていけません……」と漏らす高校生もいた。
もっとも,慣れない大学の講義室で生まれて初めて(であろう)スーパーコンピュータにログインして操作するという場の雰囲気に飲まれて,普段ならできることもできなくなっていたのかもしれない。また,参加者にはCUDAの経験者もいて,そういう高校生は課題を瞬時にこなしていたりもした。
場の雰囲気といえば,講義の内容も後半は波動のシミュレーションと拡散のシミュレーションという高度なものになり,アルゴリズムそのものでは,概説のみとはいえ偏微分や2階微分とか高校数学を超える内容がバリバリでてきたし,先生も先生で微分は高校でやっているという前提で話をしたりもした……筆者の記憶では微分を本格的に習うのは高校3年だったはずなので,参加者のほとんどは微分の基礎概念しか知らなかったのではないだろうか。そういった雰囲気に気おされる高校生もいたような気もする。
講義の最後には,参加者を3人ずつに分けたグループワークが行われた。課題は,青木教授が作成した22.65GFLOPSという速度で拡散をシミュレーションするサンプルを「さらに高速にせよ」というもの。グループで最適化を競うことになったが,約35GFLOPSを記録したグループが優勝し,記念品の贈呈が行われた。
というわけで,「高校生のためのCUDAサマーキャンプ」をレポートしてみたが,高校生の時期というのは数学をはじめとする基礎知識が整うと同時に,頭も柔軟でプログラミングを学ぶのには最高の時期だと思う。
最近のゲーム開発では,数学,物理,工学といった幅広い知識と同時に高度なプログラミング技術が求められるようになっている。優秀な技術者はゲーム開発に欠かせないわけで,その卵になりうる高校生達には思いっきりプログラミングに取り組んでほしいものだ(もちろん道を踏み外さない程度に)というのが筆者の希望でもあったりする。「高校生のためのCUDAサマーキャンプ」は良いきっかけになるはずだ。来年も開催されると思うので,本稿を読んでいる中高生諸君はぜひ参加してみてほしい。
高校生のための CUDA サマーキャンプ 2012公式サイト
- 関連タイトル:
CUDA
- この記事のURL: