※ 이 글은 오가사와라 히로유키(小笠原博之) 씨가 블로그에 적은 글을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.
MediaTek MT8125/8389 Cortex-A7의 부동소수점 연산속도
(원문 : MediaTek MT8125/8389 Cortex-A7 の浮動小数点演算速度)
ARM Cortex-A7은 big.LITTLE에 사용될 때 저전력 CPU core에 해당합니다. 소비전력이 낮은 대신 고성능 CPU core보다 성능이 떨어집니다. VFP Benchmark의 결과를 보내드립니다.
결과를 보면, Cortex-A7의 NEON은 32bit 단위로 실행되고 있음을 알 수 있습니다. 연산속도는 NEON이 없는 CPU와 다르지 않습니다만, Cortex-A15와 페어로 기능하게 하기 위해 NEON 명령셋에 대응하는 것이라 생각됩니다.
SIMD (Vector) SIMD4 single fp (32bit x4) CPU mul add mad fma ------------------------------------------------------ ARM Cortex-A7 1 1 2 2 ARM Cortex-A8 2 2 4 – ARM Cortex-A9 2 2 4 – ARM Cortex-A15 4 4 8 8 Qualcomm Scorpion 4 4 8 – Qualcomm Krait 400 4 4 8 8 Apple A6 Swift 4 4 8 8 Apple A7 Cyclone 32 8 12 16 16 Apple A7 Cyclone 64 8 12 – 16 * 수치는 1 cycle당 연산수. 클수록 빠름
big.LITTLE에서 사용되는 경우에는 이런 연산을 Cortex-A15가 담당하므로 표면에 나올 일은 아마 없을 것입니다. 단독으로 사용되는 경우, 같은 Quad core CPU라고 쓰지만 성능차가 상당히 벌어지는 것을 고려하는 것이 좋을 듯 합니다. 부동소수점 연산속도만 봐도 최대연산속도에서 Cortex-A9의 절반, Krait/Cortex-A15의 1/4(동일클럭일 때)가 됩니다.
다음은 상세한 내용입니다.
Lenovo YOGA TABLET 8 (3G) MediaTek MT8389 1.2GHz Cortex-A7 Quad core SingleT SP max: 2.374 GFLOPS SingleT DP max: 1.165 GFLOPS MultiT SP max: 9.474 GFLOPS MultiT DP max: 4.653 GFLOPS * VFP/NEON (single fp) VFP fmuls (32bit x1) n8 : 3.634 1100.7 1100.7 VFP fadds (32bit x1) n8 : 3.450 1159.3 1159.3 VFP fmacs (32bit x1) n8 : 3.451 2318.1 2318.1 VFP vfma.f32 (32bit x1) n8 : 3.448 2319.9 2319.9 NEON vmul.f32 (32bit x2) n8 : 6.795 1177.3 1177.3 NEON vadd.f32 (32bit x2) n8 : 6.828 1171.7 1171.7 NEON vmla.f32 (32bit x2) n8 : 6.810 2349.6 2349.6 NEON vfma.f32 (32bit x2) n8 : 6.797 2354.1 2354.1 NEON vmul.f32 (32bit x4) n8 : 13.529 1182.7 1182.7 NEON vadd.f32 (32bit x4) n8 : 13.511 1184.2 1184.2 NEON vmla.f32 (32bit x4) n8 : 13.498 2370.7 2370.7 NEON vfma.f32 (32bit x4) n8 : 13.549 2361.8 2361.8
배정밀도의 경우에는 더욱 차이가 벌어져, 덧은 1 cycle에 실행할 수 있지만 곱셈은 4배 느립니다. 더욱이 fmacd(덧곱셈)은 승산과 동등한 속도로 연산되긴 하지만, vfma(FMA)는 병렬화되지 않아 5배(1 add + 4 mul cycle)나 걸리는 것 같습니다. 1
* VFP/NEON (double fp) VFP fmuld (64bit x1) n8 : 13.628 293.5 293.5 VFP faddd (64bit x1) n8 : 3.439 1163.0 1163.0 VFP fmacd (64bit x1) n8 : 13.508 592.2 592.2 VFP vfma.f64 (64bit x1) n8 : 16.895 473.5 473.5 VFP fmuld (64bit x1) ns4 : 13.434 297.8 297.8 VFP faddd (64bit x1) ns4 : 3.435 1164.6 1164.6 VFP fmacd (64bit x1) ns4 : 13.430 595.7 595.7 VFP vfma.f64 (64bit x1) ns4 : 16.823 475.5 475.5 VFP fmuld (64bit x1) n1 : 13.439 297.6 297.6 VFP faddd (64bit x1) n1 : 3.447 1160.6 1160.6 VFP fmacd (64bit x1) n1 : 26.856 297.9 297.9 VFP vfma.f64 (64bit x1) n1 : 26.860 297.8 297.8
관련 글
- VFP Benchmark v1.1 부동소수점 연산명령의 속도 (NEON/SSE/AVX)
- ARM CPU의 VFP Benchmark 앱 부동소수점 연산속도 계측
- iPhone 5s A7 CPU의 부동소수점 연산속도 (2) (arm64/AArch64/64bit)
- iPhone 5s A7 CPU의 부동소수점 연산속도 (32bit)
- Nexus 10 CPU Cortex-A15의 속도
- Nexus 10 CPU Cortex-A15의 부동소수점 연산속도
- Qualcomm APQ8064 GPU Adreno 320의 속도
- benchmark 관련
- 실수 두 값을 곱한 후 그 결과를 목표값에 더하는 연산(fd += fn * fm)의 의역. fmacd는 배정밀도 실수의 덧곱셈 명령 [본문으로]