NvidiaのIanBuckに会う
本日はお時間を割いていただきありがとうございます。いくつかの基本から始めましょう。読者にあなた自身とあなたが現在Nvidiaで何をしているのかについて少し話してみませんか?
私はここNvidiaのGPUコンピューティングのソフトウェアディレクターです。私の主な焦点は、システムソフトウェア、開発者ツール、言語とコンパイラの方向性、ライブラリ、および対象となるアプリケーションとアルゴリズムを含む、完全なGPUコンピューティングプラットフォームを構築および進化させることです。優れたチームの助けを借りて、エンドユーザーソフトウェアを開発するだけでなく、Nvidia内のGPUコンピューティングの方向性を設定します。
最初から始めてみませんか?あなたがGPGPUに興味を持ったのは、5歳のときではなかったと思います。プリンストンやスタンフォードで起こっていた出来事から、GPGPUに興味を持ったきっかけは何でしたか。
私はプリンストン大学時代にGPUコンピューティングに手を出し、グラフィックスハードウェア(当時はSGI O2)で熱対流と流体シミュレーションを実験しました。物事は非常に制約されていましたが、それを主張するのは困難でした。
スタンフォード大学で博士号を取得しているときに、GPUコンピューティングを真剣に検討し始めました。スタンフォード大学で、私は研究コミュニティの他の人たちと一緒に、プログラマブルグラフィックスの自然な進歩がGPUのより汎用的なプロセッサへの進化であることに気づきました。この点を証明するために、DX9クラスのGPUハードウェアを使用したレイトレーシングに関する最初のSIGGRAPHペーパーの1つを作成しました。この作業で非常にやる気を起こさせたのは、すべてのPCで利用可能なこのコモディティプロセッサが、CPUよりもはるかに速いムーアの法則の3乗パフォーマンス成長率に従っていることでした。これは疑問を投げかけました:PCが今日よりも数桁多い計算馬力を持っていたら、PCは何ができるでしょうか?計算科学だけでなく、コンピュータービジョン、AI、データマイニング、グラフィックスの総合的なゲームチェンジャー。
ブルックでのあなたの役割は何でしたか?
GPUでレイトレーシングを行う機能に取り組んだ後、スタンフォード大学での私の研究の焦点は、GPUコンピューティングに適したプログラミングモデルの理解に切り替わりました。当時、他の多くの人がGPUがさまざまな異なるアプリケーションに優れていることを示していましたが、GPUをコンピューティングデバイスとしてどのように考えるかについての優れたフレームワークやプログラミングモデルはありませんでした。当時、アプリケーションをGPUに移植できるようにするには、コンピューターグラフィックスの博士号が必要でした。そこで私は、GPUコンピューティングのプログラミング言語を定義することを目標にブルックプロジェクトを開始しました。これにより、GPUのグラフィックス主義がより一般的なプログラミング概念に抽象化されました。Brookの基本的なプログラミングの概念は、同様の作業を必要とするデータ要素のコレクションである「ストリーム」でした。ブルックは最終的にスタンフォード大学で私の博士号を取得しました。
あなたの仕事は、スタンフォードストリーミングスーパーコンピューターであるメリマックから始まりました。これはテスラのようなものとどう違うのですか?
Brookのプログラミングモデルの概念は、GPUだけにとどまりませんでした。スタンフォードでは、ブルックプログラミングモデルの2つの異なる実装に取り組みました。1つはGPU用で、もう1つはスタンフォードで開発された研究アーキテクチャであるMerrimac用です。Merrimacの一部として開拓されたアイデアの多くは、汎用コンピューティング用にGPUを改善する方法に影響を与えました。スタンフォード大学のメリマックの主任研究員であったビル・ダリーが現在、Nvidiaの主任研究員であることにも注意する必要があります。
CUDAはジェラートにルーツがありましたか?GPGPUの最初の学術的調査は何でしたか?最初の商用利用はどうですか?
スタンフォード大学で研究を終えながらCUDAを始めました。Nvidiaはすでに私の研究に非常に協力的であり、ハードウェア側でGPUコンピューティングをより有効にする可能性を明確に認識していました。私は2005年にCUDAプロジェクトを開始するためにNvidiaに参加しました。当時、それは私と他の1人のエンジニアだけでした。これで、プロジェクトは現在の組織に成長し、今日のNvidiaのGPUの中心的なコンポーネントになりました。
www.gpgpu.orgは、2002年にさかのぼるGPUコンピューティングの素晴らしい歴史を提供します。
現在、AMDはブルックをGPGPUのプログラミング言語として採用していますが、NvidiaにはCUDA拡張機能を備えたCがあります。両方の長所/短所をどのように比較しますか?
Nvidiaから始めて、私たちはブルックの基本的な設計上の決定のいくつかを再検討する機会がありました。これは主にDX9クラスのハードウェアが達成できることに基づいていました。重要な制限の1つは、メモリモデルの制約でした。これにより、プログラマーは、かなり制限されたメモリアクセスパターンにアルゴリズムをマッピングする必要がありました。C with CUDA拡張機能を使用して、これらの制約を緩和しました。基本的に、プログラマーはスレッドの大規模なプールを単に与えられ、彼または彼女が望む方法でメモリにアクセスすることができました。この改善と他のいくつかの改善により、GPUに完全なC言語セマンティクスを実装できるようになりました。