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

iPhone 5s A7 arm64 전용 명령의 속도 (2) (ARMv8 AArch64)

(원문 : iPhone 5s A7 arm64 専用命令の速度 (2) (ARMv8 AArch64))

ARMv8의 AES 명령을 사용해보았기에 아래 CPU 벤치를 갱신했습니다.

이하 발췌

CPU            arch           GHz  time      MB/sec   1GHz당
---------------------------------------------------------------
Apple A7 CPU   ARMv8 + AES    1.3  0.13s   837.54MB/s  644.26MB
Apple A7 CPU   ARMv8 (arm64)  1.3  1.04s   104.27MB/s   80.21MB
Apple A7 CPU   ARMv7          1.3  1.16s    93.04MB/s   71.57MB
Cortex-A15     ARMv7          1.7  1.49s    72.61MB/s   42.71MB
A6 swift       ARMv7          1.3  1.87s    57.96MB/s   44.58MB
Krait          ARMv7          1.5  2.28s    47.64MB/s   31.82MB
A5 Cortex-A9   ARMv7          0.8  5.78s    18.76MB/s   23.44MB

Core i7 3930K  x64 + AES-NI   3.2  0.05s  2299.54MB/s  718.61MB
Core i7 3930K  x86 + AES-NI   3.2  0.06s  1682.35MB/s  525.74MB
Core i7 2600S  x64 + AES-NI   2.8  0.05s  2113.03MB/s  754.66MB
Core i7 2600S  x86 + AES-NI   2.8  0.06s  1683.66MB/s  601.31MB
Core i7 620M   x64 + AES-NI   2.7  0.08s  1410.61MB/s  528.32MB
Core i7 620M   x86 + AES-NI   2.7  0.10s  1064.06MB/s  398.53MB
Core i7 3930K  x64            3.2  0.48s   228.05MB/s   71.26MB
Core i7 3930K  x86            3.2  0.50s   216.50MB/s   67.66MB
Core2 duo x64  x64            2.4  0.75s   143.56MB/s   59.81MB
Core2 duo x86  x86            2.4  0.85s   127.99MB/s   53.33MB
Atom N270      x86            1.6  4.21s    25.74MB/s   16.09MB

 ・「MB/sec」가 높을수록 고속
 ・「1GHz당」은 동일 CPU 클럭에서의 비교

A7 ARMv8 + AES를 사용함으로써 명령을 사용하지 않을때의 약 8배, ARMv7 (32bit) 때의 9배 고속으로 실행되었습니다.

다만 AES-NI[각주:1] 모두 컴파일러의 intrinsic (builtin)[각주:2]을 늘어놓은 것 뿐이므로 실제로는 더욱 최적화될 가능성이 있습니다.

Intel의 AES-NI는 상당히 심플하여, 1 round 마다 1명령, 최종 round에서만 다른 명령이 할당되어있었습니다.

ARMv8의 경우에는 AddRoundKey, SubBytes, ShiftRows와 MixColumns가 나뉘어져 있습니다. 지원하는 명령수는 늘어났습니다만, 이 조합으로 최종 round도 표현할 수 있으므로 전용명령을 쓸 필요는 없습니다. 또, AES-NI와는 xor(eor)의 위치가 딱 하나 비껴있는 형태입니다

관련 글

  1. 인텔의 웨스트미어 프로세서에서 제공하는 AES 암호화-복호화를 처리하기 위한 명령어 집합 [본문으로]
  2. 컴파일러에서 지원하는 내장함수. 일반적으로 어셈블리와 1대 1로 대응되어 어셈블리 명령어를 C/C++에서 사용하기 쉽게 만들어줌 [본문으로]

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

iPhone 5s A7 CPU의 속도비교 arm64 (ARMv8 AArch64)

(원문 : iPhone 5s A7 CPU の速度比較 arm64 (ARMv8 AArch64))

아래 CPU 벤치 결과를 갱신했습니다. 이 결과만 보면 iPhone 5s는 iPhone 5 (A6)보다 약 1.8배 빠르며, Core2 duo의 1.74GHz에 상당합니다.

이하 발췌 (자세한 것은 위에 적은 페이지를 참조하시길)
CPU            arch           GHz  time     MB/sec   1GHz당
--------------------------------------------------------------
Apple A7 CPU   ARMv8 (arm64)  1.3  1.04s  104.27MB/s   80.21MB
Apple A7 CPU   ARMv8 (armv7s) 1.3  1.16s   93.04MB/s   71.57MB
Cortex-A15     ARMv7A         1.7  1.49s   72.61MB/s   42.71MB
A6 swift       ARMv7A(armv7s) 1.3  1.87s   57.96MB/s   44.58MB
Krait          ARMv7A         1.5  2.28s   47.64MB/s   31.82MB
A5 Cortex-A9   ARMv7A(armv7)  0.8  5.78s   18.76MB/s   23.44MB

Core i7 3930K  x64 (Win+VC)   3.2  0.48s  228.05MB/s   71.26MB
Core i7 3930K  x86 (Win+VC)   3.2  0.50s  216.50MB/s   67.66MB
Core2 duo x64  x64 (Win+VC)   2.4  0.75s  143.56MB/s   59.81MB
Core2 duo x86  x86 (Win+VC)   2.4  0.85s  127.99MB/s   53.33MB
Atom N270      x86 (Win+VC)   1.6  4.21s   25.74MB/s   16.09MB

 ・「MB/sec」가 높을수록 고속
 ・「1GHz당」은 동일 CPU 클럭에서의 비교

지난번 테스트와 달리 부동소수점 연산은 포함되어있지 않습니다. 그래도 역시 32bit (AArch32)보다도 64bit (AArch64) 쪽이 빠르며, 공식수치인 "A6의 2배"에 가까운 결과를 얻을 수 있습니다.

클럭차가 있음에도 Core2 시대의 PC와 비교가능한 영역에 달했으며, 조금 믿기 힘들지만 clock당 실행효율은 Core i 클래스입니다.

다만 링크한 곳에도 적혀있지만, 결과에는 컴파일러의 성능차나 실행환경의 차이도 포함되어 있다는 점에 주의바랍니다. x86/x64는 VC보다 clang 쪽이 스코어가 높으므로, 실제로는 좀더 차가 벌어질 것이라 예상됩니다.

또한 이 점수는 벤치마크용입니다. ARMv8에는 x86/x64와 마찬가지로 AES 전용명령이 탑재되어있어 실제 사용시에는 훨씬 더 고속으로 실행될 수 있습니다.

ARMv8의 AES 명령을 사용한 경우의 벤치마크 점수는 아직 계측하지 않았습니다. 여유가 있으면 좀 더 폭넓게 테스트해볼까 합니다.

관련 글

+ Recent posts