※ 이 글은 오가사와라 히로유키(小笠原博之) 씨가 블로그에 적은 글을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.
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 모두 컴파일러의 intrinsic (builtin) 1을 늘어놓은 것 뿐이므로 실제로는 더욱 최적화될 가능성이 있습니다. 2
Intel의 AES-NI는 상당히 심플하여, 1 round 마다 1명령, 최종 round에서만 다른 명령이 할당되어있었습니다.
ARMv8의 경우에는 AddRoundKey, SubBytes, ShiftRows와 MixColumns가 나뉘어져 있습니다. 지원하는 명령수는 늘어났습니다만, 이 조합으로 최종 round도 표현할 수 있으므로 전용명령을 쓸 필요는 없습니다. 또, AES-NI와는 xor(eor)의 위치가 딱 하나 비껴있는 형태입니다