私はコンピュータサイエンスに不慣れで、半精度が単精度または倍精度と同じように現代建築でサポートされているかどうか疑問に思いました。 IEEE-754標準の2008年の改訂では、4倍と半分の両方の精度が導入されたと思いました。

コメント

  • これはMATLABのタグが付けられていますが、MATLABは’ t(まだ)16ビットをサポートしていません浮動小数点。
  • これに関する詳細情報が記載されているスタック交換の質問を参照してください: stackoverflow.com/questions/49995594/ …
  • CPUだけを意味するのか、CPUとGPUの両方を意味するのかを明確にする価値があります。
  • コメントありがとうございますMaxBarraclough。グラフィックスプロセッシングユニット(GPU)だけで精度を変更できることを知りませんでした。私はそれが両方で行われなければならないと思った。コメントは非常に役立ちます。

回答

IEEE float16 ストレージ形式のIntelサポート em

Intelは、Ivy Bridge(2013)以降、プロセッサのストレージタイプとしてIEEEhalfをサポートしています。ストレージタイプは、メモリ/キャッシュ容量/帯域幅の利点を得ることができることを意味しますが、計算は、IEEE半精度形式との間で変換した後、単精度で実行されます。

BFloat16のIntelサポート

IntelはCooperでのBF16のサポートを発表しましたレイクアンドサファイアラピッズ。

私はインテルで働いています。私は公式の情報源を引用しており、噂などについてはコメントしません。

IEEEFP16とBF16の相対的なメリットについて知りたいと思います。このトピックには多くの分析があります。 https://nhigham.com/2018/12/03/half-precision-arithmetic-fp16-versus-bfloat16/

インテル以外のハードウェアサポート

以下他のプロセッサに関する情報です。必要に応じてベンダーに確認してください。

http://on-demand.gputechconf.com/gtc/2017/presentation/s7676-piotr-luszcek-half-precision-bencharking-for-hpc.pdf には、次のハードウェアサポートが記載されています。

  • AMD-MI5、MI8、MI25
  • ARM-V8.2-AのNEONVFP FP16
  • NVIDIA-PascalおよびVolta

NVIDIA AmpereはFP16もサポートしています( https://devblogs.nvidia.com/nvidia-ampere-architecture-in-depth/ )。

コメント

  • この回答の最初の部分は少し誤解を招く可能性があります。 Ivy Bridgeは確かにF16Cのサポートを導入しましたが、これは技術的には半精度浮動小数点数が”サポートされていることを意味します”、唯一の手順提供されているのは、半精度浮動小数点数との間で変換するものです。それらに対して操作を行うことはまったくできないため、質問の要件をほとんど満たしていません。 “半精度が現代のアーキテクチャでサポートされているのと同じ方法であるかどうか疑問に思いました。単精度または倍精度はです。” これは単なるストレージ形式です。 ‘ ALU変換サイクルをメモリ帯域幅/フットプリントと交換しています。
  • 文字通り、これはストレージタイプであり、すべての節約はより狭いデータからもたらされ、計算は単精度で行われます。少しでも誤解を招くことはありません。可能なサポートの半分である、どのようなサポートが存在するかを述べました。
  • ありがとうございました。私は実際にこれらのコメントのそれぞれが役に立ったと感じました。質問をする最初の理由は、この正確なことについて他の人が議論しているのを聞いたためです。
  • @AsadMehasi:スタックオーバーフローにも関連しています:半精度Intelチップでの浮動小数点演算 -Skylake以降の統合GPUでは可能ですが、IAコアでは、ストア/ロードでfloatとの間で変換する場合のみです。 (今後のHWでBFloatがサポートされるまで)

回答

私の意見では、あまり均一ではありません。低精度の算術演算は機械学習である程度の牽引力を得たようですが、低精度の意味についてはさまざまな定義があります。IEEE-754の半分(10ビットのマンティッサ、5ビットの指数、1ビットの符号)もあります。 bfloat16(7ビットマンティッサ、8ビット指数、1ビット符号)は、精度よりも動的範囲を優先し、その他のさまざまな形式(NVidiaの19ビットTensorFloat、AMDのfp24、多分それ以上?)。このようなもののほとんどは、特別な目的のGPGPUタイプのハードウェアで実行されています。

対照的に、floatとdoubleは、IEEE-754準拠、32ビット(23/8/1)および64ビット(52/11/1)表現として、一般的に合意された意味を持っています。

コメント

  • 間違いなく非標準ですが、光コンピューティングは効果的に半分を使用します-精度(またはそれ以下)の浮動小数点演算。

回答

受け入れられた回答は概要を提供します。 NVIDIAプロセッサでのサポートに関する詳細をいくつか追加します。ここで説明するサポートは、16ビット、IEEE 754準拠、浮動小数点演算のサポートであり、加算、乗算、乗算加算、および他の形式との変換が含まれます。 。

Maxwell (2015年頃)

最も古い IEEE 754 FP16( “binary16″または “halfprecision”)のサポートは、Maxwell世代のcc(計算機能)5.3デバイスで提供されましたが、この計算機能は Tegra TX1プロセッサ(SoC、例:Jetson)

Pascal (2016年頃)

Pascal の家族は、「フルレート」(cc 6.0、6.2 )または「低レート」(cc 6.1)FP16スループット。 cc6.2もTegraファミリー製品のTX2でした。 cc 6.0および6.1は、GeForce、Quadro、Teslaなどのさまざまな製品ファミリのさまざまなプロセッサで使用されています。ここでの「フルレート」とは、half2データタイプ(2つの半精度で処理される)を使用して操作が行われた場合の、問題のプロセッサのIEEE 754 FP32(「binary32」または「単精度」)レートの2倍に相当するレートを指します。同じレジスタと命令)。

Volta、Turing (2017、2018)

Volta およびツアーの家族(cc 7.x)は、「フルレート」に加えて、 TensorCore 操作でこの形式を使用します。

Ampere (2020年5月)

最近発表された AmpereアーキテクチャA100GPU もFP16をサポートしますVoltaやTuringと同様の方法で、 TF32データタイプの追加機能を導入します。これは、仮数が同じサイズ(ビット数)の形式です。 FP16仮数として、およびt指数はFP32指数と同じサイズです。 Bfloat16 機能もAmpereで発表されました。

最近発表されたAmpereアーキテクチャプロセッサとは別に、16ビット浮動小数点演算のサポートとスループットコンピューティング機能(アーキテクチャを含む)全体の(およびその他の操作)は、CUDAプログラミングガイドの表3にあります。スループットはクロックごと、マルチプロセッサごとであるため、GPUのタイプと仕様に応じてスケーリングする必要があります。これらのスループットはTensorCore操作用ではなく、ピークスループットは通常、half2データ型(2つの半分の量が1つの32ビットワードにまとめられている)で処理する場合にのみ適用されます。

回答

ハードウェアが半精度をサポートしているかどうかは、次の方法で確認できます。

$ lscpu | grep Flags | grep f16c Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 invpcid_single pti ssbd mba ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm mpx rdt_a avx512f avx512dq rdseed adx smap clflushopt clwb intel_pt avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req md_clear flush_l1d 

f16cの説明はここに記載されています。

コメント

  • F16CのCは変換を表すことに注意してください。 SIMD ALUスループットではなく、メモリ帯域幅/キャッシュフットプリントにのみ役立ちます。計算を行うにはfloatに変換する必要があるため、FMA演算のSIMDベクトルあたりの要素数は’改善されません。

コメントを残す

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