はじめに
最近久々に FPGA 使う仕事に復帰したので、これまた久々に最新のFPGAの性能を調べてみたいと思います。
過去にも何度かやっている FLOPS の見積もりを、現時点で Xilinx の最高峰の筈の VP1902 (TSMC 7nm )に対してもやってみます。
はたして Top500 に FPGA が入る日は来るのでしょうか?
VP1902 の浮動小数点演算能力を調べてみる
Versal シリーズは有償の Vivado でないと扱えないようですが、浮動小数点演算コアの性能は下記にありました。
https://download.amd.com/docnav/documents/ip_attachments/floating-point.html#versal
この表をもとに、VP1902 に入るだけ入れたら最大で何個入るかを各コア毎に大雑把にまとめてみました(間違いはあるかもしれません)。
型 | 演算 | 個数 | MHz | GFLOPS |
---|---|---|---|---|
FP64 | FMA | 686 | 531 | 729 |
FP32 | FMA | 3,432 | 590 | 4,050 |
FP16 | FMA | 6,864 | 620 | 8,511 |
FP64 | Mul | 3,676 | 516 | 1,897 |
FP32 | Mul | 13,178 | 554 | 7,301 |
FP16 | Mul | 46,741 | 590 | 27,577 |
FP64 | Add | 10,132 | 575 | 5,826 |
FP32 | Add | 22,989 | 665 | 15,288 |
FP16 | Add | 42,301 | 554 | 23,435 |
FP64 | Div | 2,607 | 516 | 1,345 |
FP32 | Div | 10,722 | 620 | 6,648 |
FP16 | Div | 35,251 | 658 | 23,195 |
FP64 | Reciprocal | 490 | 590 | 289 |
FP32 | Reciprocal | 858 | 643 | 552 |
FP16 | Reciprocal | 13,616 | 613 | 8,347 |
FP64 | Sqrt | 36,310 | 561 | 20,370 |
FP32 | Sqrt | 69,346 | 673 | 46,670 |
FP16 | Sqrt | 6,808 | 613 | 4,173 |
FP64 | Exp | 457 | 524 | 239 |
FP32 | Exp | 6,864 | 524 | 3,597 |
FP16 | Exp | 3,432 | 680 | 2,334 |
FP64 | Log | 361 | 502 | 181 |
FP32 | Log | 1,716 | 531 | 911 |
FP16 | Log | 3,432 | 583 | 2,001 |
FP64 | Cmp | 52,224 | 679 | 35,460 |
FP32 | Cmp | 99,532 | 679 | 67,582 |
FP16 | Cmp | 183,919 | 679 | 124,881 |
FP64 | Acc | 152 | 524 | 80 |
FP32 | Acc | 980 | 575 | 564 |
FP16 | Acc | 3,432 | 590 | 2,025 |
まあ、全部演算器にするなんてことは困難ではあるのですが、一応の理論限界という事で。
FP64 性能
Top500 で重要になるのは FP64 の FMA (積和) 演算かと思いますので、まずはこれだけ着目すればいいと思うのですが 最大で 686個を 531MHz で動かせるようです。FMA は 2命令としてカウントするのが通例のようですので 686個 × 2演算 x 531MHz で 729 GFLOPS が理論限界となりそうです。
現在 Top500 のトップにいるのは 同じく AMD の FRONTIERです。
調べたところ第3世代のEPYCの64コア2GHz が 2048GFLOPS, MI250Xは 45.3 TFLOPS のようです。
うーん、まだまだ、FP64 を主戦場とする分野では厳しそうです。
(Versal になってDSPも拡張され浮動小数点演算も強化されてそうだったのであるいはと思ったのですが)
一方で、 FP32 や FP16 は?
一方で、DeepLerning などで重要なFP32 や FP16 はどうでしょうか? AVX-512 命令は、FP32やFP16を倍々でこなせるはずなのでそこから見積もると下記のようになります。
FP32 や FP16 ぐらいになってくると案外 EPYC と同じ土俵に上ってきます。
INT8以下だと?
で、FP16 で追い抜き始めるので当然それ以下、つまり INT8 などでは EPYC に FPGA が圧勝できそうな予感はありますね。
Versal の CLB は UltraScale と同じなら LUTを 8個収めた CLB 内に CARRY8 が入っているはずなので加算だけなら 1,216,166 GOPs 行く計算の筈(多分)。
いっそバイナリなら?
はい、またしても手前味噌で拙作の LUT-Net とかを、引き合いに出すわけですが、そうでなくても今は BitNet (b.158) とかブームですよね。
VP1902 には 8,460,288 個の LUT があり、最大で 1,150MHz で駆動できるようです。 つまりバイナリ演算のようにこれ一個一個で収まる演算であれば 9,729,331 GOPs となり、OPs 単位であれば ペタのオーダーに乗ってしまうわけですね。このあたりで戦えたなら MI250 などにも勝てるかもしれません。
AI に使うなら FPGA はバイナリ系などの推論用に使うのが正解な気はしてきますが、これを学習させる GPGPU はかなりの規模が必要そうな気がします。
おわりに
久しぶりにこういうものを比較してみて面白かったです。 汎用CPUと専用ASICのはざまでスキマ産業的になりがちなFPGAですが、汎用計算機としての地位がもっと出てくると面白いのになと思う今日この頃です。