ARMからv8、sve対応のHPC向けコンパイラ評価版出ましたね、、、flangのフロントエンドによってFortranも対応している、、、https://t.co/ZaOBKpgWwM
— インターネットの闇 (@no_maddo) 2017年6月23日
この前魔が差してJetson TX2を買っていたので評価ができる~。
が、割りと意味分からない感じだったので誰か教えてくれ。
評価方法
以下のテストプログラムをJetson TX2上で実行する。
ちなみにJetson TX2はCPUが2つついており(Cortex A-57, NVIDIA ual Denver)
性能の違うCPU同士の比較にならないようにsettask
によりCPU 0に固定して実行し、一応何回か実験して性能のあからさまな
ばらつきがないかどうか確かめる。
10回実行したうち最も実行時間が短いものを選ぶ。
- himeno bench (SMALL, MIDDLE)
- drystone (LOOP回数をマクロ定義を変更)
比較コンパイラ
評価
実行時間(全て秒)
| -------- | himeno small (-Ofast) | himeno middle (-Ofast) | drystone (-Ofast) | gcc | 4.21 | 18.76 | 2.73 | clang | 6.48 | 35.65 | 2.90 | armclang | 3.78 | 25.49 | 2.85
ちなみにx86のi7 6700@3.4GHz
でhimeno middleをgccでコンパイルしたら7秒切るくらいで実行が終わります。
感想
商用のコンパイラだと色々なコンパイラの解析・最適化情報(例えばどのループをベクトル化したのか・-Ofastならば計算精度を落とす最適化をどこに対して実行したのか) を出力してくれるのだけど、OSSのコンパイラはあまりそこは力を入れていないのでむつかしい。
armclang
の魅力はおそらくコンパイラ単体の1スレッド性能よりも
aarch64環境でちゃんとしたBLAS, LAPACK, OpenMP, MPIなどが使えることだと思うので、せめてライブラリの評価をするべきな気がする。
が、なかなかその知見はないので辛いところ。