ベンダ・デバイスごとの OpenCL の倍精度浮動小数点数への対応状況

現行の OpenCL (OpenCL 1.1) は、標準では倍精度浮動小数点数 (double) の取り扱いをサポートしていません。標準で利用可能なのは単精度浮動小数点数 (float) のみであり、倍精度の利用には cl_khr_fp64 あるいは各ベンダ固有の拡張機能の導入が必要です。

CPU はまあ置いておくとして、GPU はベンダ・デバイスごとに倍精度浮動小数点への対応がまちまちで、同じベンダでも倍精度が利用できるデバイスとそうでないデバイスにわかれていたりと、わりと面倒な状態です。

CPU だけの端末やら Radeon 積んだ端末やら GeForce 積んだ端末やら、いろいろな環境でプラグインのテストをしているうちにわけがわからなくなってきたので、ベンダ・デバイスごとの倍精度浮動小数点数への現時点(2011年6月22日現在)での対応状況をコンシューマ向けGPUを対象にしてまとめてみました。

以下の資料をもとにまとめました。必要そうなところだけを抜き出して読んだので、おもいっきり間違っているかもしれません。参考程度にどうぞ。

GPU

AMD (Radeon)

いまのところ、Radeon シリーズではクロノスの倍精度浮動小数点数に関する拡張機能 cl_khr_fp64 は利用できません。かわりに、cl_amd_fp64 という AMD 独自の拡張機能があり、一部の GPU ではこちらが利用できるようです。

cl_amd_fp64 は、cl_khr_fp64 より要件をゆるくしたものといったところでしょうか。cl_khr_fp64 の場合、組み込み関数など、単精度浮動小数点で扱える機能を一通り倍精度で利用可能なように揃える必要がありますが、cl_amd_fp64 だと、デバイスごとに一部の組み込み関数が利用不可だったりと、かなり自由なようです。

cl_amd_fp64 が利用可能なのは、

  • Cayman (Radeon HD 6900 シリーズ)
  • Cypress (Radeon HD 5900/5800 シリーズ)
  • RV770 (Radeon HD 4800 シリーズ[4700 も?])

です。ハイエンドクラスの GPU のみのようですね。AMD のプログラミングガイドには各シリーズで利用可能な機能が列挙されていて、Cypress では、

  • 数学関数: acosh, acospi, asinh, asinpi, atan2, atanh, atanpi, atan2pi, cosh, fmod, hypot, lgamma, lgamma_r, log1p, remainder, sinh, tanh

サポートされていないようです。

RV770 では、これに加えてさらに

  • 数学関数: fma, rsqrt
  • 幾何関数: distance, length, normalize

がサポートされていないようです。また、サポートされている関数や型などについても、すべて対応状況が「ベータ」になっています。

Cayman については、そもそも対応状況の一覧に載っておらず不明です。ただ、SDK のリリースノートのほうに、既知の問題として、Radeon HD 6900 シリーズでは組み込み関数を利用した際に誤った結果が出ることがある、と記載されていて、やはり単精度と同じように利用することはできなさそうです。

nVIDIA (GeForce)

GeForce シリーズについては、一部の GPU で cl_khr_fp64 を利用した倍精度浮動小数点処理ができます。

さっそくまとめようと思ったら資料が古い・・・。プログラミングガイドの日付が2010年8月付で、それ以降にリリースされた GPU についての情報が反映されていません。これだけでは役に立たないので簡単に検索してみたところ、

  • GeForce GTX 260 以上
  • GeForce 400 シリーズ GeForce GTX 450 以上
  • GeForce 500 シリーズ GeForce GTX 550 Ti 以上

で利用可能ということになりました。まあ、そこらへんで見つけた各デバイスの Compute Capability の値があっていて、かつローエンドだろうがミドルレンジだろうが Compute Capability が1.3以降であれば cl_khr_fp64 が利用可能であるのであれば、ですが。

性能などはおいておくとして、OpenCL の倍精度に関しての対応は GeForce 系のほうがかなりすすんでいるようです。

2011年6月22日 追記: GeForce 系の対応状況が間違っていたようなので訂正。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>