「半精度浮動小数点数」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
15行目: 15行目:
  
 
=== 事の経緯 ===
 
=== 事の経緯 ===
その昔、[[RGB]]各8ビット整数の24ビット(穴埋めして32ビット)では色表現できる範囲が狭いという問題を叫ぶ人があらわれた。
+
その昔、[[RGB]]各8ビット整数の24ビット(穴埋めして32ビット)では「色表現できる範囲が狭い」という問題を叫ぶ人があらわれた。
 
かつて「人間の目で認識できる限界」と絶賛された「24ビットカラー(16,777,216色)とかショボいじゃん」という時代が到来したのである。
 
かつて「人間の目で認識できる限界」と絶賛された「24ビットカラー(16,777,216色)とかショボいじゃん」という時代が到来したのである。
 
これは本物の写真のような自然画ならともなく、色の偏ったアニメ調の絵や現実離れしたCGだと最悪256色しか表現できないケースがあったためである。
 
これは本物の写真のような自然画ならともなく、色の偏ったアニメ調の絵や現実離れしたCGだと最悪256色しか表現できないケースがあったためである。

2022年9月26日 (月) 02:29時点における版

半精度浮動小数点数(読み:はんせいどふどうしょうすうてん)とは、浮動小数点の表現方法のひとつで、16ビット形式のものをいう。巷では「FP16」や「Half」などとも呼ばれる。

IEEE 754-2008では「binary16」と命名されている。単に半精度浮動小数点数という場合はほぼ「binary16」を指している。

IEEE 754形式

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

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

概要

半精度浮動小数点数は主にコンピューターグラフィックス界隈で流行りの「HDR」で使われている数値形式である。

一方で機械学習とは若干相性が悪いらしく、別途「bfloat16」というもの作られ、現在ではそちらが主流らしいぞ。

事の経緯

その昔、RGB各8ビット整数の24ビット(穴埋めして32ビット)では「色表現できる範囲が狭い」という問題を叫ぶ人があらわれた。 かつて「人間の目で認識できる限界」と絶賛された「24ビットカラー(16,777,216色)とかショボいじゃん」という時代が到来したのである。 これは本物の写真のような自然画ならともなく、色の偏ったアニメ調の絵や現実離れしたCGだと最悪256色しか表現できないケースがあったためである。

これに対してNVIDIAは2002年ごろにRGB各16ビットの浮動小数点数で表すという手法を発表した。 この手法はRGB表現で32ビット整数より1.5倍の48ビットの帯域を必要とし、絵は綺麗になるがレンダリングが死ぬほど遅いという問題点を抱えていた。

一方、ATI(現AMD)からはRGB各10ビットの浮動小数点で表すという手法が登場した(Radeon X三桁シリーズ)。 この手法は計32ビットであるため現状のハードウェアへの負荷の差はなく有利であったが、10ビット刻みとか常識的に考えてプログラマが死ぬほど扱いにくいという問題点を抱えていた。

まさに典型的なNVIDIAとAMDの争いのひとつで時代背景的にはPS3Xbox 360がモロに直撃していた。最終的には当時ゲーム開発で広く使われていた「C言語に半精度浮動小数点数などない」という問題もあったが、NVIDIAが勝手に「half型」を拡張搭載した言語を出したりしたことと、ハードウェア技術が進歩したことでNVIDA方式を力押しする手法が一般化し、そのフォーマットを標準化したOpenEXRなるものが登場して現在に至っている。現在ではOpenGLDirect3Dにも採用されている。

関連項目