app:vfpbench
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン次のリビジョン両方とも次のリビジョン | ||
app:vfpbench [2014/07/24 23:47] – [VFP Benchmark] oga | app:vfpbench [2015/03/06 17:38] – [更新履歴] 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/ |
* iOS 7.0〜 | * iOS 7.0〜 | ||
* [[https:// | * [[https:// | ||
- | * Android | + | * Android |
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
行 20: | 行 20: | ||
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
+ | * [[https:// | ||
* [[: | * [[: | ||
行 31: | 行 32: | ||
* [[: | * [[: | ||
+ | もともとこのアプリが作られたきっかけは、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 の影響を受けないので、実際のアプリケーションなど実用時の速度結果にはなりませんのでご注意ください。 | ||
このテストの結果とシステム全体の速度は必ずしも一致しません。 | このテストの結果とシステム全体の速度は必ずしも一致しません。 | ||
- | |||
行 53: | 行 55: | ||
* [[: | * [[: | ||
+ | |||
+ | |||
+ | 注意点: 現在のバージョンでは非対称マルチコア CPU (Cortex-A15 + Cortex-A7 等) の場合、スレッド実行時の結果が正しいものになりませんのでご注意ください。 | ||
+ | |||
===== 更新履歴 ===== | ===== 更新履歴 ===== | ||
- | * v1.1: x86 SSE/AVX 対応, thread 実行時のメモリリーク修正 | + | * 2015/ |
+ | * 2015/01/18 v1.3.2b : 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/07/24 Wear : Android Wear 版追加 | ||
+ | * 2014/07/22 v1.2 : Android 版 UI の変更 | ||
+ | * 2014/01/28 v1.1 : Android 版 x86 SSE/AVX 対応, thread 実行時のメモリリーク修正 | ||
+ | * 2014/01/18 v1.0 : 初期版 | ||
行 80: | 行 95: | ||
- | ^ Arch ^ iOS ^ Android ^ cmd ^ FPU / SIMD ^ Scalar sp Instructions | + | ^ Arch |
- | | ARMv5TE | + | | ARMv5TE |
- | | ARMv6 | + | | ARMv6 (armv6) |
- | | ARMv7A | + | | ARMv7A |
- | | ARMv7A (armv7) | + | | ARMv7A (armv7) |
- | | ARMv7A (armv7s) | ◎ | ◎ | ◎ | VFPv4-D32 / NEON | fmuls, fadds, fmacs, vfma.f32 | + | | ARMv7A (armv7s) |
- | | ARMv8A (arm64) | + | | ARMv8A (arm64) |
- | | x86 (IA-32) | + | | x86 (IA-32) |
- | | x64 (x86_64) | + | | x64 (x86_64) |
+ | | MIPS32-R2 (mips) | ||
+ | | MIPS64-R6 (mips64) | -- | ◎ | -- | FPU / PS / MSA | mul.s, add.s, madd.s | ||
行 97: | 行 114: | ||
| ARMv8A AArch64 NEON | 3 operand | | ARMv8A AArch64 NEON | 3 operand | ||
| x86 / x64 | 3 operand | | x86 / x64 | 3 operand | ||
+ | | MIPS32/ | ||
行 104: | 行 122: | ||
* x86/x64 の fma には未だ対応しておりません。その代わり加算器と乗算器を並列実行できるように mul/add の interleave に対応しています。 | * x86/x64 の fma には未だ対応しておりません。その代わり加算器と乗算器を並列実行できるように mul/add の interleave に対応しています。 | ||
* x64 の内容は x86 同様ですがレジスタ数が多いためコードが異なっています。 | * x64 の内容は x86 同様ですがレジスタ数が多いためコードが異なっています。 | ||
+ | * ARMv5TE では Matrix Test のみ実行できます。 | ||
+ | * 現在 MIPS32/ | ||
app/vfpbench.txt · 最終更新: 2019/06/07 20:58 by oga