CUDA 6速報(2): CUBLAS/CUFFTの強化

出典: トータル・ディスクロージャ・サイト(事実をありのままに)

CUDA 6の目玉の新機能として、Unified MemoryDrop-in Libraries、そしてMulti-GPU Scalingの3つの機能が現在発表されているが、このうちDrop-in LibrariesMulti-GPU Scalingは、どちらもcuBLAScuFFTとで共通する強化部分であることを考え、今回の記事でまとめて紹介する。

Drop-in Libraries

CUDA 5.5で追加されたcuFFTのFFTW互換インターフェース(cufftw)に加え、cuBLASにもBLAS互換のインターフェース(nvblas)が提供され、既存のBLASを使っていたCPU向けプログラムは、nvblasとリンクしなおすだけで自動的にGPUを使った数値計算ができるようになる。Intelの競合製品Xeon Phiによる、同社のBLAS/FFTW互換の数値計算ライブラリMath Kernel LibraryOffload実行と呼んで実現している機能への、さらなる追随であろう。

従来は、cuBLASやcuFFTはBLASやFFTWと一定の対応関係のあるAPIを用意していたのだが、入出力はDevice Memoryが原則で、CPUとGPUとの間でのデータ転送をプログラマが明示的に管理しながらAPIを置き換えていくという、単純とは言えない移植作業が待っていた。もちろん、こういう作業をされた方ならご存知であろうが、データ転送のコストが意外に重く、データ転送を適度に最適化しないとAPIの置き換えだけでは性能が出ないケースがほとんどなのである。

データフローを把握したプログラマが実装した転送処理には敵わないものの、機械的にAPIを置き換えるよりは最適化された性能を示すようである。入出力データはCPU上のデータを使うのであるが、小さく分割されたデータを自動的に適宜GPUと転送するようで、GPUのメモリ容量によるデータサイズの制約が無いのもメリットである。

Multi-GPU Scaling

従来のcuBLASやcuFFTのもう一つの問題点として、マルチGPU未対応だったことが挙げられる。CUDA 6では、cublasXt/cufftXtと呼ばれる新しいAPIを使い、ノード内限定であるがこれらのライブラリでマルチGPU実行が実現される。既存のBLASの共有ライブラリファイルをcublasXtにパラメータとして渡すことで、GPUのみでなくCPUにも処理を分散させることができる。入出力データはCPU上に置かれ、各GPUへ処理の分散が行われる。

CUDA 6付属のライブラリは「Free Version」とされ、一枚のグラフィックスカードに搭載されている複数GPU(Tesla K10やGeForce GTX 690等)に対してのみ並列実行できる。「Premier Version」は有料版として発表される予定で、登録無料のCUDA Registered Developer Program会員向けに体験版が公開される予定である。

先述のnvblasのバックエンドはcublasXtで、そのままマルチGPUのプログラムとして動作するが、cufftwはRC版の時点ではシングルGPUでの動作となっている。

小規模なプログラムではノード内並列を前提に、BLASやFFTWのライブラリ側でのノード内並列機能を使って最適化を行っているものも多いが、このようなプログラムのGPGPU対応が楽になるのは間違いないだろう。


この記事へのコメントをお寄せください

  • サイトへの書き込みに差し支えございましたら トータルディスクロージャーサイトサポート係へメールをお送りください
  • トータル・ディスクロージャ・サイトに投稿された文章と画像は、すべてその著作権がHPCシステムズ株式会社に帰属し、HPCシステムズ株式会社が著作権を所有することに同意してください。
  • あなたの文章が他人によって自由に編集、配布されることを望まない場合は、投稿を控えてください。
  • コメントを書き込む場合は名前にひらがなを織り交ぜてください。
  • あなたの投稿する文章と画像はあなた自身によって書かれたものであるか、パブリック・ドメインかそれに類する自由なリソースからの複製であることを約束してください。あなたが著作権を保持していない作品を許諾なしに投稿してはいけません!

<comments hideform="false" />


Comments

ノート:CUDA 6速報(2): CUBLAS/CUFFTの強化

個人用ツール