半精度浮動小数点数とは? わかりやすく解説

Weblio 辞書 > 固有名詞の種類 > 製品 > コンピュータ > プログラミング言語 > データ型 > 半精度浮動小数点数の意味・解説 

半精度浮動小数点数

(半精度浮動小数点 から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/07/28 06:44 UTC 版)

半精度浮動小数点数(はんせいどふどうしょうすうてんすう、: half-precision floating point number)は浮動小数点方式で表現された数(浮動小数点数)の一種で、16ビット(2オクテット)の形式によりコンピュータ上で表現可能な浮動小数点数である。

IEEE 754-2008ではbinary16と名づけられている他、処理系や文脈によってs10e5やhalf、fp16などと表記される。

歴史

FP16は当初、主にコンピュータグラフィックス用として提唱された、浮動小数点数フォーマットのひとつである[1]

GPUにおいては、リアルタイム3次元コンピュータグラフィックス処理において単精度浮動小数点数に対するスループット向上などを目的に、DirectX 9.0 (Direct3D 9.0) APICg/HLSLシェーディング言語)で利用可能なデータ形式として、NVIDIAマイクロソフトが共同で策定し、GeForce FXQuadro FXで採用したのが始まりである。ただし当時のFP16の主な目的は浮動小数テクスチャのデータ量を削減するためのフォーマットであり、FP16のハードウェアアクセラレーションをサポートしないハードウェアにおけるhalf型の演算はfloat型と同じく32ビットの単精度浮動小数点数用の演算器を利用して実行されていたため、演算の速度性能自体には寄与しなかった[2]

インダストリアル・ライト&マジック社の研究の中で、広いダイナミックレンジと浮動小数点数の特徴を生かして光量の調整に向いていることが分かり、OpenEXRで採用された。

その後、IEEE 754rを経てIEEE 754-2008でbinary16として、データ交換とデータ容量削減を主目的とした保存用フォーマットとして採用された。

近年[いつ?]では、ハードウェアサポート(SIMD: Packed FP16)があれば高い演算性能 (FLOPS) が見込める上に、メモリ容量やディスク容量が節約できることから、ディープラーニングにおいて利用が活発化している。

用途

誕生の経緯から、リアルタイムグラフィックス用途で利用されているほか、HDRレンダリング (High-Dynamic-Range Rendering) などプロダクション用途で利用が可能である。ダイナミックレンジを広くとることができることから、アニメーションやCGなどの用途で利用されることが多いが、一般的な画像ファイルフォーマットとして対応しているものは少なく、OpenEXRDDSといった特殊な形式に限られる。

また、ハードウェアの支援があればスループットが劇的に向上し、かつ、nビットの乗算器の回路規模はn2log(n)に比例するので、仮数部11ビットの半精度浮動小数点数の乗算器の規模、すなわちチップに占める面積は、16ビットの整数乗算器の半分程度であり(ただし加減算に必要な、正規化のためのシフト処理は別途必要)、同一面積のチップに実装できる積和演算器の数も大幅に増やすことができる。モバイル向けGPUでは消費電力と性能と精度のバランスの観点から、既定でFP32よりもFP16が使われることが多い。重み付け係数を格納するストレージ容量の節約になることも相まって、並列度の高いディープラーニング用途において注目が集まっており、パーソナルコンピュータ/ワークステーション/サーバー向けにおいても対応GPUが増加し、FPGAでの実装や汎用的な信号処理用のアクセラレータの研究も進んでいる。

IEEE 754 半精度2進浮動小数点表現: binary16

IEEE 754標準はbinary16を以下のように定めている。

  • 符号ビット: 1 ビット
  • 指数部の幅: 5 ビット
  • 仮数部の幅=精度: 11 (明示的には10ビット)

他のIEEE754浮動小数点表現と同様、指数部が全0でない限り黙示的な「1」のビットを仮数部に持つ(いわゆる「ケチ表現」)。このため仮数部に記録するのは10ビットだが11ビットの精度を持つ。

指数部のエンコーディング

半精度2進浮動小数点数の指数部はオフセット2進表現でエンコードされており、オフセット(IEEE 754における指数部バイアス)は15である。

  • Emin = 0x01−0x0f = −14
  • Emax = 0x1e−0x0f = 15
  • 指数部バイアス = 0x0f = 15

よって、真の指数を得るためには、記録された指数から15を引けばよい。

記録された指数の0x00と0x1fは特別に扱われる。

指数 仮数=0 仮数≠0
0x00 0, −0 非正規化数
この節は検証可能な参考文献や出典が全く示されていないか、不十分です。 出典を追加して記事の信頼性向上にご協力ください。このテンプレートの使い方
出典検索?"半精度浮動小数点数" – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL
(2019年4月)

ハードウェア

  • NVIDIA: Pascalアーキテクチャ以降のGeForce/Quadro/Teslaシリーズ[3][注釈 1]、またMaxwellアーキテクチャ以降のTegraシリーズにてPacked FP16をサポート[4]
  • ARM VFPv3のオプションとしてfp16が利用可能。
  • AMD: AMD Radeon RX Vegaシリーズにてサポート。Radeonとしては初めてbinary16の並列処理が可能になる。

ソフトウェア

  • OpenCL - OpenCL 1.0の拡張として、cl_khr_fp16が有効であれば利用可能。
  • OpenCV - 3.3.0以降でfloatとhalfの変換が利用可能。
  • Cg - 組み込みのhalf型として実装されている。
  • CUDA - half型を直接扱う演算子のサポートはないが、float型などとの相互変換関数[5]や各種演算用の組み込み関数[6]が用意されている。
  • Direct3D/HLSL - Direct3D 9以降のテクスチャフォーマットとしてFP16をサポート。また、Direct3D 9以降のHLSLでhalf型をサポート。Direct3D 10ではhalfは常にfloatとして扱われる[7]。DirectX 11.1 (Direct3D 11.1) 以降では低精度シェーダー(最低精度シェーダー)をサポートし[8]min16floatとして対応ハードウェア上で利用できるが、この低精度シェーダー機能はMicrosoft Windows 8以降でしか動作しない[9]
  • OpenGL/OpenGL ES/GLSL - OpenGL 3.0以降のテクスチャフォーマットとしてFP16をサポート[10]。GLSLではmediumpとして利用可能。
  • C++ - s10e5として実装例[要出典][要説明]がある。
  • OpenEXR - C++向けのhalfクラス型が提供されている[11]
  • macOSではMac OS X v10.4以降にて、RGBA各チャンネルが16ビット浮動小数点数(ピクセルあたり64ビット)のピクセルフォーマットkCIFormatRGBAhがサポートされている[12]

脚注

注釈

  1. ^ ただしPascalアーキテクチャにおいてダブルレートのFP16をサポートするのは、GP100コアを採用する一部製品(Tesla P100およびQuadro GP100)に限られる。

出典

  1. ^ 3Dグラフィックス・マニアックス(42) HDRレンダリング(2)~HDRレンダリングの第一の効能 | マイナビニュース
  2. ^ GeForce FXシリーズのパフォーマンスの核心に迫る
  3. ^ 【後藤弘茂のWeekly海外ニュース】倍精度浮動小数点演算性能を引き上げた新GPUアーキテクチャ「Pascal」 - PC Watch
  4. ^ 【後藤弘茂のWeekly海外ニュース】1TFLOPSのNVIDIAモバイルSoC「Tegra X1」 - PC Watch
  5. ^ CUDA Math API :: CUDA Toolkit Documentation
  6. ^ Mixed-Precision Programming with CUDA 8 | NVIDIA Developer Blog
  7. ^ Scalar Types - Windows applications | Microsoft Docs
  8. ^ 【GDC2012】西川善司の3Dゲームファンのための「DirectX 11.1」講座 - GAME Watch
  9. ^ Using HLSL minimum precision - Windows applications | Microsoft Docs
  10. ^ glTexImage2D - OpenGL 4 Reference Pages
  11. ^ openexr/half.h at master · AcademySoftwareFoundation/openexr
  12. ^ kCIFormatRGBAh - Core Image | Apple Developer Documentation

外部リンク





固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「半精度浮動小数点数」の関連用語

半精度浮動小数点数のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



半精度浮動小数点数のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの半精度浮動小数点数 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2025 GRAS Group, Inc.RSS