ユーザ用ツール

サイト用ツール


app:vfpbench

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
app:vfpbench [2014/11/09 18:02] – [更新履歴] ogaapp:vfpbench [2019/06/07 20:58] (現在) – [Link] oga
行 2: 行 2:
  
  
-  * FPU 用のベンチマークソフト ARMv7A, ARMv8A (arm64), x86, x64(x86_64) 対応 (ARM VFPv3, VFPv4, NEON, AArch64 NEON, SSE2, AVX1)+  * FPU 用のベンチマークソフト ARMv7A, ARMv8A (arm64), x86, x64(x86_64), MIPS32/MIPS64 対応 (ARM VFPv3, VFPv4, NEON, AArch64 NEON, SSE2, AVX1, MIPS-FPU)
   * iOS 7.0〜   * iOS 7.0〜
     * [[https://itunes.apple.com/jp/app/vfp-benchmark/id806083725?mt=8|Download (App Store): "VFP Benchmark" iOS iPhone / iPod touch / iPad]]     * [[https://itunes.apple.com/jp/app/vfp-benchmark/id806083725?mt=8|Download (App Store): "VFP Benchmark" iOS iPhone / iPod touch / iPad]]
-  * Android 3.0+  * Android 2.2
     * [[https://play.google.com/store/apps/details?id=jp.flatlib.flatlib3.vfpbench|Download (Google Play): "VFP Benchmark" Android Smartphone / Tablet]]     * [[https://play.google.com/store/apps/details?id=jp.flatlib.flatlib3.vfpbench|Download (Google Play): "VFP Benchmark" Android Smartphone / Tablet]]
     * [[https://play.google.com/store/apps/details?id=jp.flatlib.flatlib3.vfpbenchw|Download (Google Play): "VFP Benchmark for Android Wear" Android Wear]]     * [[https://play.google.com/store/apps/details?id=jp.flatlib.flatlib3.vfpbenchw|Download (Google Play): "VFP Benchmark for Android Wear" Android Wear]]
行 18: 行 18:
 ===== Link ===== ===== Link =====
  
 +  * [[https://github.com/hiroog/vfpbench|GitHub]]
   * [[https://itunes.apple.com/jp/app/vfp-benchmark/id806083725?mt=8|Download "VFP Benchmark" (App Store)]]   * [[https://itunes.apple.com/jp/app/vfp-benchmark/id806083725?mt=8|Download "VFP Benchmark" (App Store)]]
   * [[https://play.google.com/store/apps/details?id=jp.flatlib.flatlib3.vfpbench|Download "VFP Benchmark" (Google Play)]]   * [[https://play.google.com/store/apps/details?id=jp.flatlib.flatlib3.vfpbench|Download "VFP Benchmark" (Google Play)]]
行 32: 行 33:
   * [[:opengl:cpuflops|CPU Flops(理論値)]]   * [[:opengl:cpuflops|CPU Flops(理論値)]]
  
 +もともとこのアプリが作られたきっかけは、Cortex-A8 ではスカラーの浮動小数点演算ユニット VFP の性能が著しく低かったことです。
 +fmuls, fadds, fmacs などの命令単位で速度を比較すれば一目瞭然で、VFP 命令を使うと他の CPU core の 1/5~1/10 程度の速度しか出ません。
 +Cortex-A8 では VFP の代わりに NEON 命令 vmul, vadd, vmla を使うことで十分な実行速度を保つことが分かりました。
  
-モバイルデバイスの性能は大く向上しています。 +このベンチマークアプリを使うと、命令単位で CPU core の浮動小数点演算速度やサ数を割り出すことができます。 
-性能自分の端末で確認することが目的です。+プログラマがコード最適化方針決定したり、目標にすることができま。 
 +アプリケーション最適化時のヒントとして活用してください
  
-このベンチマークアプリを使うと CPU core の浮動小数点演算速度の理論的なピーク値を実際に計測ことができます。 +またそ結果から理論的なピーク値を割り出すことが可能です。 
-そのためコードはすべてオンキャッシュによる動作が前提となっています。 +テスト結果を比較することで、演算ユニットのパイプライン構造などもある程度わかってくるかもしれません。 
-テスト結果を比較することで、演算ユニットのパイプライン構造命令の速度など調べることができます。 +なお純粋に命令の速度を計測することが目的なのコードはすべてオンキャッシュ動作前提となっています。
-プログラマはコード最適化の方針を決定し、目標ことできます。+
  
   * モバイルデバイスの性能を確認する   * モバイルデバイスの性能を確認する
   * CPU の演算ユニットやパイプラインの特性を調べて最適化に利用する   * CPU の演算ユニットやパイプラインの特性を調べて最適化に利用する
   * ピーク性能を調べて最適化の目標値にする   * ピーク性能を調べて最適化の目標値にする
- 
  
 ストレージやメモリなど外部 I/O の影響を受けないので、実際のアプリケーションなど実用時の速度結果にはなりませんのでご注意ください。 ストレージやメモリなど外部 I/O の影響を受けないので、実際のアプリケーションなど実用時の速度結果にはなりませんのでご注意ください。
 このテストの結果とシステム全体の速度は必ずしも一致しません。 このテストの結果とシステム全体の速度は必ずしも一致しません。
- 
  
  
行 54: 行 56:
  
   * [[:opengl:vfpbenchlog|VFP Benchmark Log 測定結果]]   * [[:opengl:vfpbenchlog|VFP Benchmark Log 測定結果]]
 +
 +
 +注意点: 現在のバージョンでは非対称マルチコア CPU (Cortex-A15 + Cortex-A7 等) の場合、スレッド実行時の結果が正しいものになりませんのでご注意ください。
 +
  
 ===== 更新履歴 ===== ===== 更新履歴 =====
  
 +  * 2019/06/01 v2.0 : console version。big.LITTLE 対応, Loop scale 対応, half-precision fp (fullhp) 対応
 +  * 2015/07/12 v1.3.5 : x86/x64 FMA3 対応
 +  * 2015/03/06 v1.3.4 : Android TV 対応
 +  * 2015/01/18 v1.3.3 : Android 版で MIPS の FPU 命令に対応
 +  * 2015/01/15 v1.3.2 : Android 2.2/2.3 対応
 +  * 2014/11/30 v1.3.1 : Android 4.3 以前で動作しなくなっていたバグ修正。default loop 値の調整
   * 2014/11/09 v1.3 : Android 64bit 対応 (arm64-v8a, x86_64, mips64 対応), iOS 版は最初から arm64 対応済み   * 2014/11/09 v1.3 : Android 64bit 対応 (arm64-v8a, x86_64, mips64 対応), iOS 版は最初から arm64 対応済み
   * 2014/07/24 Wear : Android Wear 版追加   * 2014/07/24 Wear : Android Wear 版追加
行 86: 行 98:
  
  
-^ Arch            ^ iOS ^ Android ^ cmd  ^ FPU / SIMD        ^ Scalar sp Instructions         ^ Scalar dp Instructions        ^ SIMD sp Instructions                    ^ SIMD dp Instructions          ^ +^ Arch               ^ iOS ^ Android ^ cmd  ^ FPU / SIMD        ^ Scalar sp Instructions         ^ Scalar dp Instructions        ^ SIMD sp Instructions                    ^ SIMD dp Instructions          ^ 
-| ARMv5TE         |  --  |  ◎    |  --  | --                | --                             | --                            | --                                      | --                            | +| ARMv5TE            |  --  |  ◎    |  --  | --                | --                             | --                            | --                                      | --                            | 
-| ARMv6           |  --  |  --    |  ◎  | VFPv2             | fmuls, fadds, fmacs            | fmuld, faddd, fmacd           | --                                      | --                            | +| ARMv6 (armv6)      |  --  |  --    |  ◎  | VFPv2             | fmuls, fadds, fmacs            | fmuld, faddd, fmacd           | --                                      | --                            | 
-| ARMv7A          |  --  |  ◎    |  --  | VFPv3-D16         | fmuls, fadds, fmacs            | fmuld, faddd, fmacd           | --                                      | --                            | +| ARMv7A             |  --  |  ◎    |  --  | VFPv3-D16         | fmuls, fadds, fmacs            | fmuld, faddd, fmacd           | --                                      | --                            | 
-| ARMv7A (armv7)  |  ◎  |  ◎    |  ◎  | VFPv3-D32 / NEON  | fmuls, fadds, fmacs            | fmuld, faddd, fmacd           | vmul.f32, vadd.f32, vmla.f32            | --                            | +| ARMv7A (armv7)     |  ◎  |  ◎    |  ◎  | VFPv3-D32 / NEON  | fmuls, fadds, fmacs            | fmuld, faddd, fmacd           | vmul.f32, vadd.f32, vmla.f32            | --                            | 
-| ARMv7A (armv7s) |  ◎  |  ◎    |  ◎  | VFPv4-D32 / NEON  | fmuls, fadds, fmacs, vfma.f32  | fmuld, faddd, fmacd, vfma.f64 | vmul.f32, vadd.f32, vmla.f32, vfma.f32  | --                            | +| ARMv7A (armv7s)    |  ◎  |  ◎    |  ◎  | VFPv4-D32 / NEON  | fmuls, fadds, fmacs, vfma.f32  | fmuld, faddd, fmacd, vfma.f64 | vmul.f32, vadd.f32, vmla.f32, vfma.f32  | --                            | 
-| ARMv8A (arm64)  |  ◎  |  --     --  | AArch64 / NEON    | fmul s, fadd s, fmadd s        | fmul d, fadd d, fmadd d       | fmul.4s, fadd.4s, fmla.4s               | fmul.2d, fadd.2d, fmla.2d     | +| ARMv8A (arm64)     |  ◎  |  ◎     --  | AArch64 / NEON    | fmul s, fadd s, fmadd s        | fmul d, fadd d, fmadd d       | fmul.4s, fadd.4s, fmla.4s               | fmul.2d, fadd.2d, fmla.2d     | 
-| x86 (IA-32)     |  --  |  ◎    |  ◎  | SSE2 / AVX1       | mulss, addss                   | mulsd, addsd                  | mulps, addps, vmulps, vaddps            | mulpd, addpd, vmulpd, vaddpd +| x86 (IA-32)        |  --  |  ◎    |  ◎  | SSE2 / AVX1 / FMA3 | mulss, addss, vfmaddss        | mulsd, addsd, vfmaddsd        | mulps, addps, vmulps, vaddps, vfmaddps  | mulpd, addpd, vmulpd, vaddpd, vfmaddpd  | 
-| x64 (x86_64)    |  --  |  --     ◎  | SSE2 / AVX1       | mulss, addss                   | mulsd, addsd                  | mulps, addps, vmulps, vaddps            | mulpd, addpd, vmulpd, vaddpd  |+| x64 (x86_64)       |  --  |  ◎     ◎  | SSE2 / AVX1 / FMA3 | mulss, addss, vfmaddss        | mulsd, addsd, vfmaddsd        | mulps, addps, vmulps, vaddps, vfmaddps  | mulpd, addpd, vmulpd, vaddpd, vfmaddpd  
 +| MIPS32-R2 (mips)    --  |  ◎    |  --  | FPU               | mul.s, add.s, madd.s           | mul.d, add.d, madd.d          | --                                      | --                            | 
 +| MIPS64-R6 (mips64) |  --  |  ◎    |  --  | FPU / PS / MSA    | mul.s, add.s, madd.s           | mul.d, add.d, madd.d          | --                                      | --                            |
  
  
行 103: 行 117:
 | ARMv8A AArch64 NEON   | 3 operand      | 3 operand (FMA3)  | | ARMv8A AArch64 NEON   | 3 operand      | 3 operand (FMA3)  |
 | x86 / x64             | 3 operand      | 3 operand (FMA3)  | | x86 / x64             | 3 operand      | 3 operand (FMA3)  |
 +| MIPS32/MIPS64         | 3 operand      | 4 operand (FMA4)  |
  
  
行 110: 行 125:
   * x86/x64 の fma には未だ対応しておりません。その代わり加算器と乗算器を並列実行できるように mul/add の interleave に対応しています。   * x86/x64 の fma には未だ対応しておりません。その代わり加算器と乗算器を並列実行できるように mul/add の interleave に対応しています。
   * x64 の内容は x86 同様ですがレジスタ数が多いためコードが異なっています。   * x64 の内容は x86 同様ですがレジスタ数が多いためコードが異なっています。
 +  * ARMv5TE では Matrix Test のみ実行できます。
 +  * 現在 MIPS32/MIPS64 の Paired Single (PS), Mips SIMD Architecture (MSA) には非対応です。
  
  
app/vfpbench.1415523724.txt.gz · 最終更新: 2014/11/09 18:02 by oga

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki