※ 이 글은 오가사와라 히로유키(小笠原博之) 씨가 블로그에 적은 글을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.

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(덧곱셈[각주:1])은 승산과 동등한 속도로 연산되긴 하지만, vfma(FMA)는 병렬화되지 않아 5배(1 add + 4 mul cycle)나 걸리는 것 같습니다.

* 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

관련 글

  1. 실수 두 값을 곱한 후 그 결과를 목표값에 더하는 연산(fd += fn * fm)의 의역. fmacd는 배정밀도 실수의 덧곱셈 명령 [본문으로]

+ Recent posts