精度を高めると演算が遅くなる
精度と速度のどちらを重視する?
ということでここまでが枕。冒頭の質問に戻ると、なぜこのように複数のフォーマットが用意されているのかというと、精度と速度のトレードオフがあるからである。
前述のように、単精度では有効数字7桁である。これは一般的な用途であれば十分であるが、科学技術計算などでは全然足りない。
特に長時間のシミュレーションをかける分野、たとえば流体解析や天候予測など、あるタイミングからの変化を短い時間刻みで延々と計算していくようなケースでは誤差の累積が多くなりすぎる。
先のパトリオットでも、カウンターを単精度の浮動小数点演算で実装した結果、100時間ほど経過すると0.34秒ほどずれ、これが致命的な結果を招いている。こうしたことを避ける一番簡単な方法は有効数字の桁数を増やすことである。
実は筆者も大学時代、ソリトンの変動をやはりシミュレーションで計算したことがあるのだが、シミュレーションが10万ステップを過ぎるあたりで単精度はもとより倍精度でも誤差が大きくなりすぎてしまい、4倍精度を使う羽目に陥ったことがある。精度が命の分野においては、単精度の浮動小数点は不十分とみなされることが多い。
ただ単精度と倍精度を比べると、ざっくり2~4倍ほど倍精度が遅くなる。これは扱うべきデータの量が倍になっているから、加算だと2倍で済むが乗算だと4倍遅い計算だ。
このあたりは実装の仕方にもよる部分で、昔のx86のように64bit演算に32bit演算器を使いまわす方式では、64bitの乗算=32bitの乗算×4+32bitの加算が必要になるので、5倍以上遅いことも珍しくなかった。
すると、「精度はそこそこでいいから、とりあえず高速に演算を」というニーズにはそぐわないことになる。これを極端に追求したのが3DグラフィックスのZバッファや、最近では機械学習の際に利用されるCNN(Convolutional Neural Network)の処理である。
CNNの場合、極端なことを言えば1bit(0か1)でもそこそこの精度が出せ、8bitで実用的な精度が確保できるとされる。そうした用途に23bitもの仮数部を持つ単精度浮動小数点を使うのは無駄以外の何者でもなく、実は半精度でもまだ無駄が多い。
NVIDIAがPascalで半精度(FP16)をサポートしてCNNを高速化したと言いつつ、Volta世代では8bitのTensolコアを搭載してさらに高性能にした、というあたりは精度よりも速度が重要だからということになる。
つまるところなんで単精度と倍精度が両方あるか?というと、両方のニーズがそれぞれあり、しかもそれが融合する見込みがないから、ということである。
本記事はアフィリエイトプログラムによる収益を得ている場合があります

この連載の記事
-
第886回
PC
CFETの足を引っ張るPMOSを救え! imecが提案する新絶縁層と、あえて精度を緩める「Notch Alignment」の妙手 -
第885回
PC
TSMCも次世代「CFET」の全貌を披露! Forksheetスキップの背景と、世界最小6T SRAM実証で見えた2030年への布石 -
第884回
PC
Samsungが次世代CFETの試作に成功! IBMの10万ドル方式に対抗する、量産重視な「一括形成プロセス」のリアリティ -
第883回
PC
TSMCのA16プロセスの詳細が判明! 性能向上の主因はトランジスタではなく裏面電源供給(SPR)にあり? -
第882回
PC
IBMが0.7nmチップの製造に成功! 変態的CFET構造NanoStackの凄みと、あまりに高すぎる製造コストの壁 -
第881回
PC
同一周波数で消費電力18%削減! 進化した「Intel 18A-P」はどこが変わったのか? -
第880回
PC
次世代NVLinkの布石か? TSMCの光電融合技術「COUPE」がもたらすAIサーバーの光接続 -
第879回
PC
なぜAIには「光」が必要なのか? NVIDIAが解説するスケールアップネットワークの低遅延・省電力化戦略 -
第878回
PC
もはや銅配線は限界? 3200Gイーサネット実現に立ちはだかる200GT/秒の壁 -
第877回
PC
「不良品ゼロ」と「水冷NG」の狭間で。ルネサスが明かした車載チップレットSoCのリアル -
第876回
PC
このままではメモリーが燃える! HBM4/5世代に向けた電力供給の限界と、Samsungが示すパッケージ協調設計の解 - この連載の一覧へ











