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

OpenGL ES 2.0 Tegra2/3/4의 Fragment Shader와 동적루프

(원문 : OpenGL ES 2.0 Tegra2/3/4 の Fragment Shader と動的ループ)

Desktop GPU에서 Vertex Shader와 Pixel Shader의 사양이 완전히 통일된 것은 Direct3D 10의 ShaderModel 4.0 이후입니다. 그때까지는 쓸 수 있는 명령이나 Constant 영역, 레지스터 수, 프로그램 사이즈, 텍스처 명령등 여러가지 차이가 남아있었습니다.

Hardware의 Unified Shader화는 ATI의 Xbox360 GPU가 먼저 시작하였습니다. 이것이 지금의 Qualcomm Adreno로 이어집니다. 그 후 일반적인 Desktop PC용으로도 NVIDIA GeForce 8800 (G80)이 등장하여, 이후 Unified Shader Model이 당연해지게 됩니다.

OpenGL ES 2.0의 Shader 세대는 Direct3D 9의 Shader Model 3.0에 해당합니다만, 많은 Mobile GPU가 이미 Unified Shader화되어있습니다. 그렇기에 딱히 Vertex와 Fragment Shader의 성능차를 의식할 필요는 없었습니다.

그 중, Tegra2/3/4는 G70 베이스의 GPU로, Unified Shader화되기 전의 제한이 남아있는 드문 케이스입니다.

코멘트에서 Tegra의 Fragment Shader는 동적 루프를 쓸 수 없다는 지적을 받았기에 테스트해보았습니다.

// (1) 동적 루프
int loop= int( uniform_value );
for( int i= 0 ; i < loop ; i++ ){
   ...
}

↑루프 회수를 동적으로 구하는 경우, Vertex Shader는 통과하지만 Fragment Shader에서는 컴파일 시에 에러가 발생합니다.

예전에 적었듯 Uniform 배열의 index 접근↓(2)도 Tegra의 Fragment Shader에서는 에러가 뜹니다. 둘 다 Direct3D 9 세대의 제한이라 생각됩니다.

// (2) Uniform 배열
uniform vec4 src_color[30];
~
int index= int(tex_color.x);
vec4 color= src_color[ index ]; // Tegra의 Fragment Shader에서는 Error

Tegra 4에서도 마찬가지이므로, 기능은 대폭 확장되었지만 GPU의 베이스는 같다는 것을 알 수 있습니다. 참고로 Tegra와 같은 Discrete Type의 Shader Unit을 갖춘 Mali-400MP에서는 작동합니다.

	     Vertex Shader            Fragment Shader
	     동적Loop  Uniform배열    동적Loop  Uniform배열
-----------------------------------------------------------
Unified      ◯         ◯              ◯         ◯
Mali-400MP   ◯         ◯              ◯         ◯
Tegra2/3/4   ◯         ◯              ERROR     ERROR

하지만 Tegra에서도 동적 분기는 가능하기에, 실행시에 루프 횟수가 변동하는 경우에도 동등한 처리를 실현할 수는 있습니다.

// (3) Tegra용 동적분기에 의한 루프
for( int i= 0 ; i< 100 ; i++ ){
    if( i >= Loop ){
        break;
    }
    ~ 동적 루프에 해당하는 부분
}

이하 정리 (모두 Fragment Shader의 경우)

컴파일 시에 루프 횟수가 정해져 있지 않으면 에러.

// (4) 루프횟수 미정  -- Tegra에서 ERROR
for( int i= start ; i< end ; i++ ){
    ~
}

루프 범위가 정해저 있으면 컴파일 가능

// (5) 상한이 정해져있는 경우 -- Tegra에서도 OK
for( int i= 0 ; i< 100 ; i++ ){
    if( i >= start && i < end ){
        ~ 동적 루프에 해당하는 부분
    }
}

아마도 아래와 같이 전개되지 않을까 생각됩니다.

i= 0;
if( i >= start && i < end ){
    ~
}
i= 1;
if( i >= start && i < end ){
    ~
}

~

i= 99;
if( i >= start && i < end ){
    ~
}

Tegra K1 이후는 ShaderModel 5.0 세대의 GPU core가 되므로 이런 하드웨어적 제한은 없어질 것입니다.

관련글

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

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는 배정밀도 실수의 덧곱셈 명령 [본문으로]

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

VFP Benchmark v1.1 부동소수점 연산 명령의 속도 (NEON/SSE/AVX)

(원문 : VFP Benchmark v1.1 浮動小数点演算命令の速度 (NEON/SSE/AVX))

x86의 SSE/AVX 명령에 대응했습니다. ARM CPU와 마찬가지로 SSE/AVX의 명령속도를 계측할 수 있습니다.

위는 Android입니다만, iOS판에서는 ARMv8A (arm64)에 대응합니다. 다음은 갖고 있는 디바이스에서의 결과입니다.

Device           CPU                             sp GFLOPS  dp GFLOPS
---------------------------------------------------------------------
MacBookRetina13  Core i5-3210M Ivy    2.5GHz x2       90.2       45.2
Kindle HDX 7     MSN8974  Krait 400   2.2GHz x4       67.5       16.9
Tegra Note 7     Tegra4   Cortex-A15  1.8GHz x4       51.3        9.8
Nexus 7 (2013)   AQP8064  Krait       1.5GHz x4       47.8       11.8
iPhone 5s        A7 arm64 Cyclone     1.3GHz x2       40.9       20.5
iPhone 5s        A7 arm7s Cyclone     1.3GHz x2       40.9        8.0
Mac mini 2009    Core2 Duo P7350      2.0GHz x2       31.7       12.7
Nexus 10         Exynos5D Cortex-A15  1.7GHz x2       26.7        5.3
iPad 4           A6X      Swift       1.4GHz x2       21.5        3.6
iPhone 5         A6       Swift       1.3GHz x2       20.1        3.4
Nexus 7 (2012)   Tegra3   Cortex-A9   1.3GHz x4       18.9        4.7
EVO 3D ISW12HT   MSM8660  Scorpion    1.2GHz x2       16.6        1.3
VAIO Type P      Atom Z540 Bonnell    1.8GHz x1       10.9        1.9
Desire X06HT     QSD8250  Scorpion    1.0GHz x1        7.1        0.9
iPad 2           A5       Cortex-A9   1.0GHz x2        7.8        2.0
iPod touch 4     A4       Cortex-A8   0.8GHz x1        3.1        0.1
Raspberry Pi     BCM2835  ARM1176JZFS 0.7GHz x1        0.7        0.7

 * 수치가 클수록 빠름
 * sp= 단정밀도, dp= 배정밀도

최대치를 측정한 것이므로 실제 애플리케이션 속도와는 차이가 있습니다. 자세한 것은 이곳을 참조하시기 바랍니다. 다음 페이지의 이론치 거의 그대로 나오는 경향을 보입니다.

배정밀도 테스트는 아직 개량의 여지가 있습니다. 스칼라에서 mul+add의 페어링을 측정하지 않으므로, 일부 CPU에서 점수가 좀 더 늘어나리라 생각됩니다.

Core i5 Ivy Bridge는 예상한 것 보다 높은 수치가 나왔는데, TurboBoost 효과로 더 높은 클럭으로 동작하는 것 같습니다. single-thread 시에는 3.0GHz, multi-thread 시에는 2.85GHz에 상당하는 결과가 나왔습니다.

실제 측정결과는 명령단위의 수치를 나타내므로, CPU 동작을 보다 자세하게 조사할 수 있습니다.

SSE2/AVX1에는 덧곱셈명령[각주:1]이 없습니다만, Intel CPU는 가산과 승산명령을 병렬로 실행할 수 있는 듯합니다. ↓를 보면 실제로 addps/mulps의 Interleave는 절반 시간으로 실행합니다.

Ivy Bridge Core i5-3210M
* SSE/AVX (single fp)                sec     MFLOPS     MFLOPS
AVX vmulps (32bit x8) n8      :    1.322    24205.7    24205.7
AVX vaddps (32bit x8) n8      :    1.319    24256.0    24256.0
AVX vmul+addps (32bit x8) n8  :    0.658    48604.4    48604.4

↓ Atom (Bonnell)의 경우는 조금 특수합니다. SSE 명령의 승산이 가산보다 2배의 시간이 걸립니다. 동작 클럭을 생각하면 SSE의 add가 128bit이고 mul를 64bit 폭으로 연산하고 있다고 생각됩니다.

Atom Z540 (Bonnell)
* SSE/AVX (single fp)                sec     MFLOPS     MFLOPS
SSE mulps (32bit x4) n8       :    4.307     3715.2     3715.2
SSE addps (32bit x4) n8       :    2.207     7248.1     7248.1
SSE mul+addps (32bit x4) n8   :    2.155     7424.2     7424.2

ARM NEON의 경우, 같은 SIMD라도 64bit 명령이 있습니다. 예를 들어 「vadd.f32 d0,d1,d2」는 단정밀도 32bit x2의 64bit 가산을 처리하므로, Cortex-A8/A9처럼 64bit 폭이라도 1cycle로 실행합니다. 128bit 명령 「vadd.f32 q0,q1,q1」의 경우에는 2cycle 걸립니다.

SSE는 항상 4요소 = 128bit 단위이므로 Pentium 3 등 64bit 폭의 SIMD Unit에서는 최소 2cycle이 걸리게 됩니다. 마찬가지로 Atom의 승산도 최소치는 2cycle입니다. 다만 mulps + addps의 Interleave라도 addps만 쓸 때와 같은 시간에 완료되므로, 가산과 승산은 비대칭이면서도 Overlap될 수 있는 듯 합니다.

Atom에는 HT가 있어 Multi-thread 시에 불필요한 빈틈을 메울 수 있습니다. 메인스레드에서 mulps + addps의 페어를 실행하고, 서브스레드에서 addps만 돌리면 아마도 128bit + 64bit의 비대칭 파이프라인이 메워질 것입니다.

mulps + addps + addps 조합을 2스레드 돌린 결과가 아래로, 점수가 늘어났음을 알 수 있습니다.

Atom Z540 (Bonnell)
* SSE/AVX (single fp) multi-thread   sec     MFLOPS     MFLOPS
SSE ml+ad+addps (32bit x4) n6 :    3.075    10926.6    10926.6

이 측정 결과를 통해 CPU의 개별 연산능력을 정리한 것이 아래의 표입니다. 배정밀도 값은 좀 더 변동될 가능성이 있습니다.

스칼라

                  단정밀도                    배정밀도
CPU               mul    add    mad   fma     mul    add    mad    fma
-----------------------------------------    -------------------------
ARM1176JZF-S      0.5    0.5      1    --     0.5    0.5      1     --
Cortex-A8        0.14   0.14   0.18    --     0.1    0.1    0.1     --
Cortex-A9           1      1      2    --     0.5      1      1     --
Cortex-A15          1      1    1.4     2       1      1    1.4    1.4
Scorpion            1      1      2    --     0.5      1      1     --
Krait 400           1      1      2     2       1      1    1.6      2
A6 Swift            1      1      1     1       1      1      1      1
A7 Cyclone arm7s    1      1      2     2       2      3      3      3
A7 Cyclone arm64    2      3     --     4       2      3     --    1.6
Atom Bonnell        1      1     --    --     0.5      1     --     --
Core2 Penryn        1      1     --    --       1      1     --     --
Core i5 Ivy Bridge  1      1     --    --       1      1     --     --

 * 수치는 1 cycle에 실행가능한 연산수
 * 값이 클수록 고속

ARM11의 mul은 0.5연산/cycle입니다. 다시 말해 단정밀도의 가산이나 승산은 2cycle 걸립니다.

mad/fma는 명령당 2연산이므로, 이 란이 2의 경우에는 1cycle로 실행할 수 있음을 의미합니다.

Cortex-A8의 최대 FLOPS는 NEON 덕분에 ARM11 보다 높지만, 위에 적은 대로 VFP의 스칼라 연산에서는 ARM11에 집니다.

A7 Cyclone (ARMv8A)은 AArch32 (32bit mode)와 AArch64 (64bit mode)에 상당한 차이가 있습니다. 단정밀도 연산은 64bit mode 쪽이 수배 빠르게 실행되는 것 같습니다. 아마도 VFP가 요구하는 사양이 NEON과 다르기 때문이라 생각됩니다. AArch64는 NEON으로 통일되었기에, NEON과 동등한 속도로 동작되는 것 같습니다. VFP가 발을 붙잡는 것처럼 보이는 경향은 Cortex-A15등 다른 ARMv7A CPU에서도 보입니다.

SIMD 단정밀도

                   SIMD2 (32bit x 2)         SIMD4 (32bit x4)
CPU                mul   add   mad   fma     mul   add   mad   fma  
----------------------------------------    ----------------------
ARM1176JZF-S        --    --    --    --      --    --    --    --
Cortex-A8            2     2     4    --       2     2     4    --
Cortex-A9            2     2     4    --       2     2     4    --
Cortex-A15           4     4     8     8       4     4     8     8 
Scorpion             2     2     4    --       4     4     8    -- 
Krait 400            2     2     4     4       4     4     8     8 
A6 Swift             2     2     4     4       4     4     8     8 
A7 Cyclone arm7s     4     6     8     8       8    12    16    16 
A7 Cyclone arm64     4     6    --     8       8    12    --    16
Atom Bonnell        --    --    --    --       2     4    (6)   --
Core2 Penryn        --    --    --    --       4     4    (8)   --
Core i5 Ivy Bridge  --    --    --    --       4     4    (8)   --

Cortex-A8/A9는 64bit 폭이라 SIMD2에서는 Scorpion/Krait/Swift와 차이가 없습니다. SIMD4에서는 128bit의 Scorpion/Krait/Swift의 절반이라는 것을 알 수 있습니다.

특이한 것은 Cortex-A15로, SIMD4에서는 같은 128bit인 Scorpion/Krait/Swift와 동등합니다만 SIMD2에서는 2배의 수치를 나타냅니다. Cortex-A15는 64bit폭 2pipe라서 2명령 동시실행이 가능하기 때문입니다. 스칼라에서는 단정밀도도 1명령/cycle이기 때문에, 절반밖에 쓰지 못한다고 해도 NEON 쪽이 빠릅니다.

Ivy Bridge는 AVX에 대응하므로, 위의 표에서는 생략되어 있지만 SIMD8이 있습니다. 아래 페이지에 SIMD8과 배정밀도 SIMD를 포함한 표를 정리했습니다.

제일 위쪽에 있는 GFLOPS 리스트에서는 Quad core 및 동작 클럭이 높은 Snapdragon 800 (MSM8974)가 상위였습니다. CPU의 cycle 단위 명령수를 내보면, 유일한 ARMv8 CPU이기도 한 A7 Cyclone이 발군의 고성능임을 알 수 있습니다.

계측결과를 보면 mul, mad/fma는 2명령, add는 3명령을 동시에 실행할 수 있는 듯 합니다. NEON의 경우에는 AArch32와 AArch64에 딱히 차이는 없었습니다.

A7 Cyclone의 설계는 DEC Alpha나 StrongARM 출신의 엔지니어가 관련되어있다고 합니다. (Wikipedia P.A.Semi)

Benchmark는 어디까지나 부동소수점 연산능력의 최대치를 실측하는 것이 목적이므로, 반드시 종합적인 우세와 일치하지 않음을 미리 양해바랍니다.

관련 글

  1. 積和의 의역. 두 수를 곱한 후 다른 수에 더하는 명령 [본문으로]

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

ARM CPU의 VFP Benchmark앱 부동소수점 연산속도 계측

(원문 : ARM CPU の VFP Benchmark アプリ 浮動小数点演算速度の計測)

지금까지 ARM CPU의 부동소수점 연산속도에 관해서 조사해왔는데, 그 계측 프로그램을 앱으로 만들어보았습니다.

지금까지의 계측결과를 정리한 결과는 아래와 같습니다.

VFP Benchmark 앱의 표시결과는 위의 표와 호환성이 있습니다. 거기에 FLOPS 표시, 배정밀도 부동소수점 연산의 계측, 멀티스레드 실행에 대응했습니다. 아래는 몇가지 단말의 결과(일부)입니다.

MSN8974 Krait 400 2.2GHz x4 quad
---------------------------------------
SingleT SP max : 16.619 GFLOPS
MultiT  SP max : 67.185 GFLOPS (이론치: 70.4 GFLOPS)
                               = 2(mad) x 4(simd) x 4(core) x 2.2(clock)


Tegra4 Cortex-A15 1.8GHz x4 quad
---------------------------------------
SingleT SP max: 13.371 GFLOPS
MultiT  SP max: 51.345 GFLOPS  (이론치: 57.6 GFLOPS)
                        = 2(mad) x 2(simd) x 2(unit) x 4(core) x 1.8(clock)


APQ8064 Krait 1.5GHz x4 quad
---------------------------------------
SingleT SP max: 11.947 GFLOPS
MultiT  SP max: 47.808 GFLOPS  (이론치: 48.0 GFLOPS)
                               = 2(mad) x 4(simd) x 4(core) x 1.5(clock)

Exynos5D Cortex-A15 1.7GHz x2 dual
---------------------------------------
SingleT SP max: 13.483 GFLOPS
MultiT  SP max: 26.724 GFLOPS  (이론치: 27.2 GFLOPS)
                        = 2(mad) x 2(simd) x 2(unit) x 2(core) x 1.7(clock)


Tegra3 Cortex-A9 1.2GHz x4 quad (TB1.3GHz)
---------------------------------------
SingleT SP max:  4.783 GFLOPS  (이론치:  5.2 GFLOPS
MultiT  SP max: 18.905 GFLOPS  (이론치: 19.2 GFLOPS)
                               = 2(mad) x 2(simd) x 4(core) x 1.2(clock)

K3V2 Cortex-A9 1.2GHz x4 quad
---------------------------------------
SingleT SP max:  4.694 GFLOPS
MultiT  SP max: 18.662 GFLOPS  (이론치: 19.2 GFLOPS)
                               = 2(mad) x 2(simd) x 4(core) x 1.2(clock)


MSN8260 Scorpion 1.2GHz x2 dual
---------------------------------------
SingleT SP max:  8.898 GFLOPS
MultiT  SP max: 16.560 GFLOPS  (이론치: 19.2 GFLOPS)
                               = 2(mad) x 4(simd) x 2(core) x 1.2(clock)


QSD8250 Scorpion 1.0GHz x1
---------------------------------------
SingleT SP max:  7.098 GFLOPS  (이론치:  8.0 GFLOPS)
                               = 2(mad) x 4(simd) x 1.0(clock)

Tegra 2 Cortex-A9 1.0GHz x2 dual
---------------------------------------
SingleT SP max:  1.973 GFLOPS
MultiT  SP max:  3.913 GFLOPS  (이론치:  4.0 GFLOPS)
                               = 2(mad) x 2(core) x 1.0(clock)

비교적 이론치에 가까운 수치를 내고 있습니다. 각 CPU의 이론치는 아래에 정리했습니다.

이 출력결과는 어디까지나 최대치에 의한 비교이므로, 실제 애플리케이션 실행속도와는 차이가 있습니다.

예를 들어 스칼라 VFP 연산에서 n8과 n1의 결과를 비교하면 Cortex-A9에서는 명령순에 따라 속도가 5배나 떨어지는 경우가 있습니다. 같은 조건에서 Krait/Cortex-A15은 거의 속도가 떨어지지 않으므로, 파이프라인의 실행효율이 향상되었다는 것을 알 수 있습니다.

따라서 실제 애플리케이션에서는 Cortex-A9과 Krait/Cortex-A15은 최대치보다도 훨씬 차이가 날 것이라는 것을 예상할 수 있습니다.

multi-thread는 같은 테스트를 CPU core의 수만큼 돌립니다. Tegra 3처럼 single thread 시에 동작 클럭이 올라가는 것도 있으므로, single-thread의 값을 core 수만큼 곱해도 바른 값이 나오지는 않기 때문입니다.

앱의 출력결과를 보면 Cortex-A15는 VFP의 스칼라 연산보다도 NEON의 64bit (float x2) 쪽이 2배 빠르게 실행된다는 것을 알 수 있습니다.

// Exynos 5 Dual Cortex-A15 1.7GHz dual (Nexus 10)

* VFP/NEON (single fp)         sec    MFLOPS    최대
----------------------------------------------------
VFP fmuls     (32bit x1) n8 :  2.675  1495.4  1555.9
VFP fadds     (32bit x1) n8 :  2.392  1672.1  1672.1
VFP fmacs     (32bit x1) n8 :  3.171  2523.2  2523.2
VFP vfma.f32  (32bit x1) n8 :  2.985  2679.9  2679.9
NEON vmul.f32 (32bit x2) n8 :  1.187  6740.5  6740.5  **
NEON vadd.f32 (32bit x2) n8 :  1.187  6740.7  6740.7  **
NEON vmla.f32 (32bit x2) n8 :  1.187 13480.8 13480.8  **
NEON vfma.f32 (32bit x2) n8 :  1.187 13480.3 13480.3  **
NEON vmul.f32 (32bit x4) n8 :  2.373  6741.8  6741.8
NEON vadd.f32 (32bit x4) n8 :  2.374  6740.7  6740.7
NEON vmla.f32 (32bit x4) n8 :  2.373 13482.7 13482.7
NEON vfma.f32 (32bit x4) n8 :  2.373 13482.3 13482.3

이전에 예상했듯이 아마도 NEON의 연산 unit은 64bit의 2pipe이지만, VFP는 1명령밖에 실행하지 못할 가능성이 있습니다. Cortex-A8에서 그랬듯이 VFP 명령을 NEON 연산으로 바꾸면 Cortex-A15에 최적화될지도 모릅니다.

관련글

※ 이 글은 impress watch 에 실린 컬럼을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.

최근의 태블릿/스마트폰용 SoC 제 3회 ~ 로우엔드~미드레인지를 노리는 플레이어

(원문 : 今どきのタブレット/スマートフォン向けSoC 第3回 ~ローエンド~ミドルレンジを狙うプレーヤー)

제 3회에서는 시장을 석권하는 Qualcomm/Samsung의 자리를 위협하는 「기타」세력을 소개할까 한다.

모바일용 SoC 시장의 근황

본 내용에 들어가기 앞서, 12월 6일에 도쿄에서 개최된 ARM Technology Symposia Tokyo 2013 기조강연의 슬라이드를 봐주기 바란다(그림1). 이것은 모바일용 제품이 앞으로 어떻게 전개되어갈지 가격대별로 예상한 것이다.


그림1. ARM Technolgy Symposia Tokyo 2013에서 보인 모바일용 SoC의 동향 예상

현재는 2013년이지만, 아직 올해가 끝나지 않았으므로 지난해(2012년)까지의 것을 정량 데이터로 삼는다.

이것을 베이스로 생각하면 하이엔드, 즉 최종제품가격이 400달러를 넘는 제품들은 앞으로 커다란 성장을 보이지 않으며, 오히려 그 밑인 200~350달러의 가격대가 크게 성장함을 알 수 있다.

이 미드레인지, 미국의 예를 들면 「Nexus 4」가 8GB에 199달러, 16GB도 249달러이니 여기에 해당하는데, 결국 이 클래스가 크게 설장할 것이라고 판단하고 있다는 이야기이다. 물론 가장 크게 성장하는 것은 150달러 미만의 로우엔드 제품이지만.

실은 이 전개 내용은 ARM이 투자가 대상으로 내놓은 프리젠테이션에 좀 더 자세하게 나와있다. 이 프리젠테이션은 2013년 3/4분기(2013년 10월)에 내놓은 것이지만, 앞서 이야기한 대로 2013년의 집계가 아직 끝나지 않은지라 마켓의 숫자는 2012년을 베이스로 하고 있다.

먼저 그림 2를 보자. 각 SoC의 마켓별 제품가격과 각자의 매상수량예측이다. 여기에 있는 프리미엄, 즉 하이엔드는 2012년이 3억대 중후반, 2017년에는 4억대이므로 성장하긴 하지만 어느 정도 한계에 달했다는 느낌이 강하다. 그에 반해 미드레인지는 2012년이 2억대 정도인데 2017년은 5억대 이상으로 2.5배로 늘어난다. 거기에 엔트리 레벨, 즉 로우엔드는 2억대가 8억대 이상으로 늘어나 4배를 넘는다.

각 구성을 좀 더 상세하게 본 것이 그림 3이다. "Voice Only", 즉 통화와 SMS밖에 안되는 휴대폰은 이 시점에서도 아직 7억1천만대라는 거대한 마켓이지만, 지금까지 그 상위에 있던 피처폰은 2017년까지는 엔트리 레벨의 스마트폰에 흡수되리라는 것이라는 것이 ARM의 견해이다.


그림 2. 시장별 SoC 가격과 매상수량예측


그림 3. 제품 세그먼트별 장래예측

자, 지난회에 소개했던 Qualcomm이라던가 Samsung의 SoC는 그림 3으로 보면 미드레인지에서 프리미엄 대상에 자리잡게 된다. 그림 2에서는 각자 SoC의 칩 가격을

  • 엔트리 레벨 : 5달러 미만
  • 미드레인지 : 5~15달러
  • 프리미엄 : 15~20달러

로 추정하고 있다. 다만 이것은 어디까지나 2017년 기준의 가격이고, 지금은 좀 더 가격이 높아서

  • 엔트리 레벨 : 10달러 미만
  • 미드레인지 : 10~20달러
  • 프리미엄 : 20달러 이상

정도. 애초에 SoC의 가격에 정가라는 건 존재하지 않는다. 그건 당연히 발주수량에 따라 가격이 변하는 상대매매가 기본이기 때문인데, 그래도 하이엔드 대상 SoC의 예를 들면 40달러 이상이라는 숫자를 들은 적이 있다. 적당히 이야기하자면 제품의 최종가격의 5% 전후가 SoC 가격의 일반적 시세라고 하니, 스마트폰의 가격에서 역산하면 SoC의 가격을 대충 예상할 수 있을 것이다.

지난회 언급했던, Snapdragon을 사용하면 100달러의 스마트폰을 만드는 건 어렵다고 했던 건, 현재 Snapdragon 200 시리즈도 5달러를 조금 넘는 정도의 가격이 붙어있기 때문이 아닐까 생각한다. 이건 장래적으로 공정미세화 등을 통해 원가를 낮추면 이야기가 달라지는 부분이지만, 사실 최근에는 공정미세화가 원가에 별 영향을 미치지 않게 되고 있다. 초기투자비용이 너무 막대하여 이것을 회수하기 위한 비용추가가 공정미세화에 따른 원가삭감분을 넘어서고 있는 것이다. 근본적으로 사고방식을 바꾸지 않으면, 이런 미드레인지~로우엔드용 SoC를 만드는 것은 어렵다는 이야기다.

미드레인지의 왕자 : MediaTek과 Broadcom

그럼, 이런 마켓에서 존재감을 내뿜고있는 것은 어디인가? 하면 대만 MediaTek과 미국 Broadcom이다.

우선 MediaTek. 동사는 원래 CD-ROM 드라이브의 컨트롤러등에 손을 대던 회사였지만, 여러 회사의 매수를 반복하면서 차차 광범위한 제품 포트폴리오를 갖기에 이르렀다. PC 관련으로는 칩셋 사업을 ULi로 분사화한 후의 ALi나, 카메라용 SoC인 NuCore Technology를 산하로 둔 것으로 유명하다.

그 MediaTek이 휴대폰 시장에 진출한 것은 2007년. ADI(Analog Devices Inc.)의 휴대폰 사업을 매수함으로써 시작된다. 이를 통해 동사는 GSM/GPRS/EDGE/WCDNA/TD-SCDMA 등의 통신방식에 대응하는 「SoftFone」시리즈 베이스밴드 모뎀이나, 「Othello」칩셋을 입수한다. 당초에는 SoftFone이나 Othello을 그대로 판매(참고로 지금도 판매한다)했지만, 이것을 기반으로 우선 피처폰용 SoC 시장에 참가한다. 이 시절의 프로세서는 ARM7이나 ARM9로, 피처폰은 둘째치고 스마트폰에는 성능적으로 상당히 부족했던 것이 사실이다. 애초에 이 시절에는 아직 동사에서 "스마트폰 대상"이라고 대놓고 출시한 건 없었다.

그런 MediaTek의 첫 스마트폰 대상 제품이라고 할만한 것이 「MT6573」이다. 2011년의 MWC(Mobile World Congress)에서는 이 MT6573을 탑재한 레퍼런스를 전시하기도 했다. 프로세서는 ARM11 650MHz로, 그래도 Android 2.2가 잘 돌아가던 물건이었다. 특필할만한 것은, MediaTek은 이 시점에 최종제품가격 80달러를 예정하고 있었다는 것이다. 이후에도 동사는 이 노선을 계속 밀고 나간다. 하지만, 트렌드에 맞춰 더 빠른 통신에 대응할 필요가 생기고, 듀얼/쿼드코어 프로세서에 대한 수요가 높아지는 등의 동향을 영향을 받아, 2010년 8월에는 NTT 도코모에서 LTE 모뎀의 라이선스를 받고 2012년 8월에는 쿼드코어 프로세서 SoC 개발을 표명하는 등의 고기능화로 나아가지 않을수 없게 된다. 이것은 후술하겠지만 로우엔드에서의 경쟁이 과열화된 결과, 나름대로의 고기능/고가격 마켓으로 옮길수밖에 없었다, 라는게 속사정이다.

원래 동사는 팹리스였지만, 기본적으로는 취급하는 전제품을 내부에 안고 있는 개발부대를 통해 스스로 갖춘다는 Qualcomm에 가까운 비즈니스 모델을 취하고 있는지라, 아무래도 후발의 저가격 벤더와 비교하면 가격면에서의 경쟁력이 낮아지는 것이 그런 상황이 된 주요원인이다. 동사가 TI(Texas Instruments)와 나란히하는 SoC 벤더로서 HSA Foundation의 창설 멤버에 처음부터 이름을 올린 것은, HSA가 후발의 저가격 벤더와의 차별화 요인이 될 수 있다, 라고하는 생각이 있었기 때문이다.

애초에 밀리고 있다고는 하지만 MediaTek은 틀림없는 미드레인지의 왕자이다. 이렇게 말하는 이유는 중화권의 단말기기 메이커만이 아니라, HTC나 소니등 글로벌 마켓 대상 제품에의 채용도 달성했기 때문이다. IC Insight에 의한 2013년 상반기 매상에서 동사의 랭킹은 18위이지만 성장률은 33%로 매우 높으며, 2013년 후반에는 16위까지 상승할 것이라는 예측도 나와있다. 이 IC Insight의 예측에 따르면 MediaTek은 2013년 중에 2억개의 스마트폰용 애플리케이션 프로세서를 출하하는 것으로 되어있어(201년 실적은 1억 8백만개), 이 수치가 바르다는 것이 전제이긴 하지만, 미드레인지의 왕자라 칭해도 틀리지 않을 것이라 생각한다.

참고로 설계팀을 그대로 안고 있다고는 하지만, 아키텍처 라이선스를 받아 CPU 코어를 자사에서 생산할 정도의 팀은 아니고, 타겟으로 삼고 있는 시장 세그먼트를 생각하면 그렇게까지 할 필요도 없다. 이용하는 IP도, CPU 코어를 예로 들면 고가격인 Cortex-A15가 아닌, 염가의 Cortex-A7 정도다. 고가 IP를 구입해서, 이것이 제품가격을 상승시키는 것은 가능한 피하고 싶다는 것이리라.

MediaTek이 동쪽의 왕자라면 서쪽의 왕자는 Broadcom이다. Broadcom이라고 하면 네트워크 관련제품을 폭넓게 커버하고 있는 반도체 메이커로, 동사 또한 여러 기업을 매수함으로써 제품 포트폴리오를 늘려왔다. 스마트폰 관련으로 이야기하자면 2002녀에 Mobilink Telecom, 2004년의 Zyray Wireless, 201년의 Beceem Communication 등이 직접 관계되는 곳으로, 2013년에 매수한 르네사스 모바일이 여기에 더해지는 형태가 되었다.

애초에 Broadcom은 모바일용 SoC에 해당하는 상품은 있지만 채용예가 그다지 많지 않다. 오히려 모뎀을 자사에서 준비할 수 없는 SoC 벤더(예를 들면 TI의 OMAP이나 Tegra 3까지의 NVIDIA 등)용으로 베이스밴드 모뎀을 제공하는 것이 중심이었다. 이 베이스밴드 모뎀의 쉐어를 후술할 HiSilicon Technologies나 RDA Microelectronics 등의 신흥 메이커에게 조금씩 빼앗기고 있었다.

Broadcom은 르네사스 모바일에서 매수한 LTE 모뎀으로 이를 만회함과 동시에, 일체형 SoC의 쉐어를 늘리고자하는 생각이다. 다만 현재 하이엔드에 위치하는 「BCM23550」의 스펙을 보면, 쿼드코어 Cortex-A7라는 구성이나 듀얼 SIM을 지원하는 부분등 MediaTek의 「MT6589」과 구성이 비슷하며 실제로 비슷한 마켓을 노리고 있다고 생각된다.

MediaTek도 Broadcom도 기본적인 전략은 거의 같아, LTE 대응을 차별화요인으로 삼으면서도 Qualcomm이나 Samsung보다도 싼 가격으로 미드레인지 대상 SoC의 마켓 쉐어를 단단히 붙잡는 것이 아닐까 한다.

아마도 2014년 중에는 양사 모두 64bit의 솔루션을 내놓으리라 보여진다. 참고로 Broadcom은 네트워크용으로 이미 ARM v8A의 아키텍처 라이선스를 받았지만, 이것을 이용해서 모바일용 애플리케이션을 내지는 않으리라 추측된다. Broadcom의 64bit ARM 코어는 기존의 MIPS 64 베이스의 코어를 바꾼것이며, 4명령의 수퍼스칼라/아웃 오브 오더 구성으로, 그것도 4스레드의 SMT라는 물건이다. 모바일용치고는 확실히 오버스펙이다. 이쪽도 아마 Cortex-A53의 라이선스를 받는 방향이 되리라 생각된다.

로우엔드의 유력후보 : Spreadtrum, Rockchip & RDA, HiSilicon

드디어 이야기는 격전지구인 로우엔드 시장이다. 이곳은 중국계 메이커의 독무대다.

우선, 비교적 조기에 이름을 알린 것이 중국 Spreadtrum Communications로, 이곳은 모뎀 단체과 통합 SoC 양쪽 모두 제공한다. Spreadtrum의 특징은 어쨌든 모든 비용을 낮게 짜낸다는 것. 살 수 있는 것은 일단 사서 개발비용을 억누르는 방향으로, CPU 코어의 예를 들면 살수 있으면 하드 IP, 그렇지 않으면 POP, 그것도 무리라면 소프트 IP라는 상당히 명쾌한 전략이다.

그래도 제조공정은 2010년에 이미 40nm, 2012년 후반부터는 28nm로 이행하고 있다. 또 동사는 모뎀 단독과, 모뎀 통합 SoC의 양쪽을 출시한다는 Qualcomm과 비슷한 제품 라인업을 준비하고 있다. 아무래도 LTE에 관해서는 아직 모뎀뿐이고 통합제품은 존재하지 않지만, 3G 대응 제품의 예를 들자면 「Shark」라는 코드명의 「SC8835S」는 그림 4의 구성으로, Snapdragon 400 클래스와 붙을 수 있을만한 스펙이다. 이것을 Qualcomm보다도 염가에 출시한다는 이야기다.

물론 이 클래스가 되면 가격은 로우엔드용의 5~10달러 미만이라는 가격대에는 들어가기 힘들지만, 동사의 「SC7710」은 그림 5처럼 상당히 명확한 구성이다. 그래도 CPU는 1GHz로 동작하며 GPU는 ARM의 Mali-400으로, 나름대로의 성능을 갖고 있어 로우엔드 스마트폰용으로는 충분하다.


그림 4. Spreadtrum SC8835의 블록 다이어그램

그림 5. Spreadtrum SC7710의 블록 다이어그램


Spreadtrum은 모뎀을 제공하는 것을 가치로 삼고 있지만, 이와는 다른 솔루션을 구축한 것이 Rockchip Electronics와 RDA Microelectronics 두 회사다. Rockchip은 모뎀을 포함하지 않는 애플리케이션 프로세서만의 SoC를 제공하고, 다른 한쪽인 RDA는 베이스밴드 모뎀을 제공하는 보완관계에 있다.

Rockchip은 현재 완전히 무르익어 가격이 낮은 Cortex-A9을 중심에 두어, 하이엔드인 RK3188조차 쿼드코어 Cortex-A9 + Mali-400 MP4라는 구성이다. 요는 POP 또는 하드 IP를 사용할 수 있는 구성 안에서 가장 싸게 맞춘다, 는 모양새다. 모뎀을 내장하지 않는 만큼 가격도 누를 수 있고 제조도 편해진다. 어쨌든 쓸데없는 짓은 하지 않고, 소프트웨어나 개발환경은 ARM의 생태계에 맡긴다,는 명쾌한 방법이다.

원래 RK3188은 로우엔드 안에서도 고가 부류에 들어가는 제품이고, 싼 제품으로는 「RK292X」처럼 짜낼대로 짜낸 구성을 견실하게 묶어놓은 것도 있다. 공정도 55nm으로 오래되어, 생산비용(특히 마스크를 포함한 초기투자)를 상당히 줄이는 것도 가능해진다. 이 클래스라면 어느 정도의 수량이라면 1~2달러 범위로 제공된다는 이야기를 들은 적이 있다(이때는 10만개 주문이라는 이야기였다). 제품가격이 50달러 이하인 로우엔드 스마트폰에서는 이정도가 아니면 무리일 것이다.

다른쪽인 RDA는 베이스밴드 프로세서를 포함한 여러 부품을 제공한다. 사실 RDA의 제품은 예를 들자면 Qualcomm의 Gobi만큼 세련되지도 못하고, LTE 대응도 이제 시작하는 단계지만, 그 대신 가격이 상당히 싸게 책정되어있다. 실제로 구성에 따라서는 Rockchip의 SoC의 합계 BoM(Bill of Material : 부품원가)를 3~5달러 범위로 줄이는 것도 가능하다고 하며, 그 결과 저가격 스마트폰 시장에서 존재감을 점차 늘려가고 있다.

제 3의 세력은 HiSilicon Technologies다. 이 메이커는 Qualcomm과 Samsung의 장점을 모은 듯한 사업모델로 성립되었다.

동사의 Wireless Terminal 페이지를 보면, 「Balong 310/520/710」이라는 3종류의 모뎀과 「K3V2」라는 애플리케이션 프로세서가 나와있다. SoC는 이 K3V2가 현재 공표되어있는 유일한 물건으로, 쿼드코어 Cortex-A9에 16코어 GPU(상세는 불명)을 통합하여 40nm 공정으로 제조되었음을 밝히고 있다. 이 SoC는 딱히 눈에 띄는 물건이라고는 할 수 없지만, 모뎀 Balong은 특징적이다. 특히 「Balong 710」은 2012년에 투입된 물건인데, 이 시점에서는 LTE Cat 4에 대응하는 유일한 모뎀이었다.

이것이 실현된 이유는, 동사가 원래 중국 Huawei Technologies의 사업부문중 하나였으며, 이것이 분사화된 것이라는 사실과 관계가 있다. Huawei Technologies는 모두들 아는대로 네트워크 기기 업계의 거물로, 이 LTE 모뎀을 개발할 때 모회사가 전면적으로 협력했다는 소문이다. 2회에서도 설명했지만, 모뎀의 개발에는 캐리어 인증이 불가결하며, 게다가 복수의 캐리어에 대한 처리를 동시에 하려고 하면 그만큼 인증에 드는 인원이나 테스트 기재가 늘어나게 된다. 이 부담이 굉장히 큰데, 같은 일을 모회사가 해주었기(일본을 예를 들면 소프트뱅크는 Huawei Technologies의 제품을 다수 도입하고 있다) 때문에, 그 자원을 유용할 수 있었던 것이다. 그러한 결과 모뎀에 관해서는 Qualcomm을 넘어설 기세로 개발과 인증이 끝났다고 한다. 결국 HiSilicon은 후발주자이면서도 캐리어 인증 비용을 부모회사에 오프로드한 관계로, Qualcomm과 같은 토대에 서는데 성공한 것이다.

거기에 동사에는 메리트를 한가지 더 갖고 있다. K3V2나 Balong을 처음 탑재한 것은 역시 부모회사인 Huawei Technologies가 판매하는 「Ascend D2」였다. 이것은 글로벌 모델(일본에서는 NTT 도코모용으로 커스텀 모델이 판매되었다)로, 글로벌 모델인 이상 나름대로의 수량은 확실하게 나오게 된다. 이 점은 Samsung의 사업모델 그대로다. 이미 후계제품 이야기도 나오고 있으며, Huawei의 미발표 모델 「Ascend P6S」에는 「K3V2 Pro」라는 SoC가 탑재될 모양이다.

지금까지의 내용으로 알 수 있듯, HiSilicon이라는 회사는 로우엔드라고 하기보다도 미드레인지에서(기회가 되면) 하이엔드를 노리는 사업모델이지만, 현재의 라인업은 로우엔드~미드레인지에 머무르고 있다. 앞으로 동사가 어느쪽으로 향할지는 지금으로서는 확실하지 않다.

제 4의 세력

실은 아직까지 설명하지 않은 메이커가 산더미처럼 있다. 바로 떠오르는 범위에서 열거해보면,

  • Actions Semiconductor : Cortex-A9 기반 및 MIPS32 기반의 SoC를 제공중
  • Allwinner Technology : Cortex-A8/A7 기반의 SoC를 제공중
  • Amlogic : 회사 자체는 미국에 있지만 중국계의 기업. MID(Mobile Internet Device) 용으로 「AML8726-M」라는 Cortex-A9 기반의 SoC를 제공중
  • GeneralPlus : 어째서인지 동사의 제품 페이지를 찾을 수 없지만, 「GP3300x」라는 Cortex-A8 기반 SoC를 제공중
  • Ingenic Semiconductor : MIPS32 기반 XBurst CPU를 탑재한 SoC를 널리 제공중. 현재 MIPS64 기반의 XBurst 2를 탑재한 제품을 개발중이라고 함.
  • Intomic(InfoTM Microelectronics) : ARM11/Cortex-A5 기반의 SoC를 제공중
  • WonderMedia : 대만 VIA의 자회사로 ARM 기반의 SoC를 제공중

등 줄줄이 나온다.

이런 벤더는 어디든 모뎀 솔루션이 없어서, 모뎀이 전혀 필요없는 태블릿 등을 대상의 중심에 두고 있다. 구성도 비슷하여 초기비용이 억눌려진 55~65nm 공정을 사용하고, Cortex-A5~A9 클래스를, 경우에 따라서는 POP를 사용하면서 도입하여 무조건 저비용화. 차별화는 차라리 소프트웨어라던가 도입 서비스등으로 한다는 방향성이다.

이론상으로는 이런 SoC에 RDA 등의 모뎀칩을 갖추면 스마트폰도 만들 수 있지만, 그러면 설계도 능숙하고 실적도 있는 Rockchip의 SoC가 안전한 선택이 된다고 한다.

※ 이 글은 impress watch 에 실린 컬럼을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.

최근의 스마트폰/태블릿용 SoC 제2회 ~ Qualcomm, Samsung의 강함은 어디에서 오는가

(원문 : 今どきのタブレット/スマートフォン向けSoC 第2回 ~Qualcomm、Samsungの強さはどこにあるのか )

제 2회는 Android 탑재 스마트폰/태블릿용의 2대 SoC 벤더라고 할 수 있는 Qualcomm과 Samsung에 대해서 성장과 전략을 설명할까 한다.


LTE 모뎀 통합으로 우위성을 높인 Qualcomm

지난회에도 설명한대로, Qualcomm은 원래 CDMA 방식의 통신규격 성립과, 이것을 이용한 모뎀 사업으로 커진 벤더다. 「cdmaOne」으로 알려진 「IS-95」라는 통신규격도 원래는 Qualcomm의 사내 프로젝트의 성과에 기반한 것이다. 이런 점은 USB나 PCI/PCI Express같은 규격이 Intel 사내 프로젝트를 시작으로 퍼진 경위와 많이 닮았다.

물론 Qualcomm“만”으로 CDMA나 이에 이어지는 CDMA2000, 나아가서 LTE라는 통신규격이 만들어진 것은 아니고, 많은 벤더나 캐리어를 끼고 개발된 것이지만, 역시 표준화작업을 주도하는 입장을 잡으면 그 후의 제품개발에서 다소간이나마 경합 메이커를 리드할 수 있게 된다.

그 결과 동사는 CDMA용 모뎀칩을 개발하고, 이것은 CDMA 방식을 채용한 휴대기기 메이커에게 널리 받아들여지게 된다. 당시의 모뎀은 공정기술 문제로 1칩에 수납할 수는 없어 복수칩으로 구성되었지만, 당시 휴대폰 크기로는 그렇게 큰 문제는 되지 않았다.

그 후 동사는 이어서 성능 개선이나 신기술(CDMA→CDMA2000→WCDMA) 대응, 패키지의 소형화등에 힘쓰는 한편, 여러 요소기술을 가진 회사의 매수를 진행한다.

예를 들면 2004년에는 디스플레이 기술을 가진 Iridigm Display Corporation을 매수하거나, 2006년에 RF CMOS 기술을 가진 Berkana Wireless을 매수한다던가하는 상황이었다. 2009년에는 AMD에게서 Imageon의 자산을 개발부대째로 매수한다. 이렇게 차근차근 기술을 집적한 결과, 모뎀칩 「Gobi」가 등장. 그리고 Gobi를 내장한 SoC인 「Snapdragon S1」이 2007년에 투입되면서 이야기가 여러가지로 변하기 시작한다.

원래 Qualcomm은 모뎀 사업으로 주요 휴대폰 메이커와 찰싹 달라붙어 있었다. 이것은 지난회에도 살짝 설명했지만, 누가 뭐래도 CDMA 방식은 Qualcomm이 총본산이고, 그 이외에도 GPRS/EDGE/HSPA등의 방식에 대응한 모뎀을 라인업하고 있었으므로 (애플리케이션 프로세서는 둘째치고) 모뎀은 Qualcomm, 이라고 정해놓은 메이커가 적지 않았다. 거기에 Snapdragon으로 애플리케이션 프로세서와 모뎀까지 통합한 SoC를 내놓게 되면, 만약 애플리케이션 프로세서의 성능이 다른 곳이랑 차이가 없다면 실장면적이나 부품비용 관점에서 커다란 메리트가 된다. 특히 Qualcomm의 모뎀 통합 SoC의 부품 코스트가 타사의 애플리케이션 프로세서+Qualcomm을 밑도는 순간, 이건 커다란 어드밴티지가 된다.

Qualcomm은 Qualcomm대로 모뎀 단독으로 파는 것보다 매상이 높아지는지라, 과점화가 진행되는 것도 어찌 보면 당연한 일이다. Snapdragon S1의 초기제품은 CPU가 ARM11의 528MHz, GPU는 없이 2D의 프레임버퍼+α 정도의 기능밖에 갖고 있지 않았지만, 2008년에 투입된 「MSM7227/7627」은 CPU가 ARM11 800MHz으로 파워업되고, GPU도 AMD에서 Imageon의 라이선스를 받아 만들어진 Adreno 200이 되어, 타사제품에 뒤떨어지지 않게 된다. 이리하여 Snapdragon의 시장제패가 시작되게 되는 것이다.

그리고 여기서 손을 빼지 않는 것이 참으로 Qualcomm다웠다. 2005년에 ARM은 「Cortex-A8」을 발표하고, TI(Texus Instruments)나 Samsung 등 주요한 애플리케이션 프로세서 벤더(Qualcomm에게 있어서는 경합 벤더)는 일제히 Cortex-A8의 채용을 결정하고, 물리실장에 들어갔다.

하지만 Qualcomm은 Cortex-A8가 마음에 들지 않았던(?) 듯, 2007년의 ARM Developer Conference에서 Scorpion 코어를 발표한다.


Scorpion 코어의 개요. 20~25 FO4라는 고속동장을 상정하지 않은 타겟 사이클로 설계되어 있어, 확실하게 저전력용이라는 것을 알 수 있다.

파이프라인은 정수연산이 10~12스테이지, 로드/스토어가 13스테이지이므로 Cortex-A8와 그다지 다르지 않지만, 디코드 2명령/사이클, 명령발행이 사실상 3명령/사이클이라는 수퍼 스칼라/아웃 오브 오더 실장은 Cortex-A9과 비교할 수 있는 구조이다. 실제로 1GHz 동작에서 2,100 DMIPS(2.1 DMIPS/MHz)라는 설계목표는 Cortex-A8의 2 DMIPS/MHz를 웃돈다(Cortex-A9의 2.5 DMIPS/MHz정도는 아니지만).

2007년이라고 하면 ARM도 Cortex-A9을 발표한 해인데, 경합 메이커는 거기서 라이선스를 받아 실장에 들어간 것에 반해, 이미 Qualcomm은 이 시점에서 논리설계만이 아니라 물리설계도 거의 마치고 있었다. 그 결과, 다른 애플리케이션 프로세서 벤더는 2009년에 들어서고 나서야 Cortex-A9 탑재 SoC의 발표를 시작한 것에 반해, Qualcomm은 2008년중에 이 Scorpion 코어를 탑재한 「QSD82500/8650」의 출하를 개시한다. 결국, 여기서 한번 더 타사제품과의 차별화가 가능해져, 이것이 Snapdragon의 과점화에 한층 박차를 가하게 된 것이다.

이 구도는 LTE 세대에 다시 한번 반복되게 된다. Qualcomm은 제 4세대 Gobi에서 LTE 대응을 완료한다. 이 시점에서 제대로 된 LTE 대응 모뎀은 Qualcomm, NTT 도코모와 국내 메이커가 공동개발한 통칭 「사쿠라 칩」밖에 없었으며, 거기에 사쿠라칩은 대응주파수가 일본 대상이었기에 결국 전세계에서 대응할 수 있는 것은 사실상 Gobi 밖에 없었다. 이에 맞춰 Qualcomm은 새롭게 「Krait」코어를 개발, 이것을 탑재한 「Snapdragon S4」의 샘플 출하를 2011년 중순부터 개시한다.

Krait 코어 그 자체의 내부구조는 파이프라인이 11스테이지 정도로 단축되고 디코드가 3명령/사이클, 발행이 4명령/사이클이 되는, 역시 수퍼 스칼라/아웃 오브 오더 실장으로 구성면에서는 Cortex-A15에 가깝다. Krait도 몇개의 버전이 있어, 성능은 초대 Krait가3.3 DMIPS/MHz 정도, 최신 Krait 450가 3.51 DMIPS/MHz 정도가 나온다. Cortex-A15이 3.5 DMIPS/MHz니, 동등하다고 생각해도 될 것이다. 동등하지 않은 것은 투입시기로, Cortex-A15를 처음 실장한 Samsung의 「Exynos 5」의 샘플 출하가 2012년 후반임에 반해, 거의 그 1년 전에 Cortex-A15와 거의 동등한 코어를 집적한 SoC를 모뎀 포함으로 제공할 수 있었던 것이다. 이렇게 되면 Qualcomm을 쓰지 말아야할 이유를 찾는 쪽이 오히려 어려울 정도다.

결국 Qualcomm은,

  • 첨단 통신방식에 대응한 모뎀을 캐리어 인증을 취득한 형태로, 거기에 SoC 통합해서 제공할 수 있다.
  • CPU 코어나 GPU 코어는 경합제품과 비교해서 성능이 높지는 않다. 프로세스가 같고 한계소비전력이 같다면, 아키텍처를 연구했다고해서 그렇게 성능차가 나는 건 아니다. 하지만 경합제품보다 조기에 제공할 수 있다

라는 두 점에서 큰 가치를 가지고 있는 것이다.

갖고 있는 Nexus 4에서 규제정보를 표시하면, 유럽/아메리카/한국/오스트레일리아/뉴질랜드/필리핀/러시아/멕시코/카자흐스탄/인도/일본의 국가별 인증코드가 줄줄이 표시된다

일반적인 휴대폰의 경우, 우선은 일반적으로 통신규격이나 표준에 합치되는지 아닌지하는 인증을 그 국가의 기관에서 받을 필요가 있다. 일본을 예로 들면 총무성에서 기술기준적합증명등마크(통칭 적합마크)를 받지 않으면 애초에 그 나라 안에서 이용할 수 없다는 것은 주지의 사실이다.

이것을 취득하는 것도 고생이지만, 이건 시작일뿐이다. 어디까지나 발신하는 전파가 그 나라의 규제에 따르고 있는지를 나타내는 것뿐, 통신할 수 있는지를 보증하는 것은 아니다. 국내라면 NTT 도코모, au(KDDI), 소프트뱅크 모바일 등의 각 통신 캐리어별로 그 캐리어에서 문제없이 통신할 수 있는지를 개별적으로 확인할 필요가 있다. 귀찮은건 캐리어별로 기지국의 기재도 다르고, 통신방식(전파레벨, 그 위의 핸드쉐이크 레이어라던가, 더 위의 프로토콜 레이어같은 것도 포함하여)에 커스터마이즈가 가해진 경우도 있으므로, 그 모든 것에 입각하여 제대로 통신이 되는지 확인하여야 된다.

이것을 완료하고, 통신 캐리어에서 「이 휴대폰은 우리쪽이랑 제대로 통신할 수 있는 물건」이라는 딱지를 받는 것이 캐리어 인증이다. 이게 귀찮은 것은 나라별이 아니라, 통신 캐리어별이라는 점으로, LTE 정도되면 취득하기 위한 수고와 금액도 장난이 아니다.

여기서 Qualcomm의 강점이 드러난다. Qualcomm의 Gobi를 사용하면 이 캐리어 인증 처리가 굉장히 편해진다. 왜냐하면 Gobi 그 자체가 각 통신 캐리어에서 인증 취득을 마쳤으므로, 탑재 기기는 원칙적으로 캐리어 인증을 얻기 위한 테스트를 다시 하는 수고가 필요없기 때문이다. 현재 LTE 모뎀 대부분이 Qualcomm제인 가장 큰 요인이자 타사가 쫓아갈 수 없는 부분이기도 하다. 실제 어느 반도체 벤더는 「물론 기술적으로 LTE 모뎀을 제공하는 것은 가능하지만, 캐리어 인증에 필요한 수고와 비용을 생각하면, 후발주자들은 이미 비즈니스가 성립되지 않는다」고 이야기했다. 당연히 Qualcomm도 같은 수고와 비용을 치뤘지만, 이것은 Gobi가 시장을 거의 점유함으로써 충분히 상각되었다. 하지만 후발주자들은 같은 비용을 들여도 겨우 Gobi와 같은 위치에 서는 것이고, 거기서 비용을 상각할 수 있을 정도의 매상을 올리기 위한 무기는 되지 않는다…고 한다.

그럼, 이대로 Qualcomm이 시장을 계속 과점화할 것인가? 라는 의문에 대해서는 장기적으로는 불명료하다.

첫번째 문제는 모뎀이다. 확실히 현시점에서 LTE 모뎀을 제공할 수 있는 벤더는 많지 않지만 장기적으로는 일찌기 2G/3G/3.5G와 마찬가지로 LTE 기술 그 자체가 일반적으로 되어가면서 제공하는 벤더가 늘어날 것임을 상상할 수 있다. 그런 상황에서 Qualcomm의 히든카드는 통신에 관계된 많은 특허기술을 얻어두는 것이었지만, 앞으로는 그걸 회피할 수 있는 방식, 예를 들자면 Google은 Motorola Mobility를 매수하여 대항할 특허기술을 확보하였기에 「Android를 사용하는 한(Google이 보유한 특허로 받아치는 등) Qualcomm에서 라이선스를 받지 않아도 사용할 수 있다」같은 샛길이 생겨날 가능성이 크다. 애초에 LTE의 사양을 책정하고 있는 3GPP 스스로 "LTE의 보급을 위해서는 각사가 갖고 있는 특허가 병목이 된다"고 인식하여, 저가격의 특허로 이용할 수 있게 하는 기술개발을 추진하고 있는 상황이다.

이렇게 되면 앞으로도 Gobi로 시장을 점유할 수 있으리라고는 장담할 수 없다. Qualcomm도 이것을 알고 있기에, 올해 재빨리 차세대규격인 LTE Advanced 대응을 표명했지만, 그 후의 LTE-Advanced Evolution(LTE-B)이나 LTE-X에 관해서는 아직 동향을 확실히 하지 않았다. 만약 이런 신기술의 도입이 끊겨버린다면, Qualcomm의 우위성은 점차 옅어져가게 된다.

두번째 문제는 동사가 팹리스라는 점이다. 이로 인해 파운드리의 생산상황에 큰 영향을 받게 된다. 실제로 2012~2013년 초에 걸쳐 Snapdragon의 공급이 굉장히 핍박되어, 휴대기기 메이커가 어쩔 수 없이 Snapdragon 이외의 칩을 찾는 형태가 되었던 기억이 아직 새롭다. 이것은 당시 TSMC의 28nm 공정의 공급능력이 업계의 수요에 전혀 대응하지 못할 정도로 낮았던 것이 원인이었지만, 앞으로도 이런 일이 반복될 가능성은 낮지 않을 것이다.

세번째 문제는 제품이 고가격대로 치우쳐 있다는 점이다. Scorpion/Krait 둘다 ARM에서 아키텍처 라이선스를 취득하여 자사에서 구현한 것으로, 이에는 막대한 엔지니어링 비용이 들어갔다. 또, Gobi 모뎀의 개발비(그 절반은 거의 캐리어 인증이나 국가인증에 든 비용이지만)도 절대 싸지는 않다. 이런 개발비가 들어간 만큼 Snapdragon의 SoC 가격은 높은 편이다. 예를 들면 로우엔드인 Snapdragon 200을 사용해도 100달러 클래스의 스마트폰을 만드는 것은 매우 힘든 일(필자가 이야기를 들은 어느 메이커의 담당자 말로는 「무리」)로, 앞으로 이런 마켓을 어떻게 공략할 것인지에 관한 명확한 로드맵은 아직까지 동사에서 제시하고 있지 않다.

참고로 Krait 코어의 상미기한[각주:1]은 슬슬 끝이 가까워진 것 같다. 지난달 하이엔드인 2.5Ghz 구동의 Krait 450을 탑재한 Snapdragon 805을 발표했는데, 현행의 28nm 공정에서는 이게 거의 한계일 것이다. 이것의 후속으로 동사가 현재 64bit CPU로 이행하고 있는 건 틀림없는 듯 하다. 관계자는 명확하게 이야기하지 않았지만, ARM v8의 아키텍처 라이선스와 Cortex-A50 시리즈(아마도 A53)의 프로세서 라이선스를 이미 취득한 모양이다.

원래 Scorpion/Krait는 그 시점에서의 하이엔드 계열(Cortex-A9/A15)급의 성능을 가진 독자 코어가 목표였기에, 로우엔드용으로는 동작주파수를 줄여도 오버스펙이라는 느낌이 있다. 그렇기에 Snapdragon에서도 로우엔드 계열은 Cortex-A5(MSM7627A/MSM7227A등)이나 Cortex-A7(8926/8612등)을 탑재하고 있다. 이에 따라 로우엔드용으로는 Cortex-A53 코어, 하이엔드 용으로는 독자 코어(아마도 Cortex-A57와 동등 이상의 성능을 노린 것)을 투입할 방향이 될 것이라 생각된다.

……라는 원고를 편집부에 제출한 다음날인 12월 10일에 Qualcomm은 64bit에 대응하는 「Snapdragon 410」을 발표했다. 410라는 형번에서 알 수 있듯 이것은 미들레인지 아래쪽으로, 실질판매가격 150달러 전후의 스마트폰이 타겟이다. 릴리즈에서는 명기되지 않았지만, 기존의 Snapdragon 400 시리즈가 Krait를 탑재한 것과 Cortex-A7를 탑재한 것이 혼재되어 있는 사실을 생각하면 Snapdragon 410은 Cortex-A53을 탑재하고 있음을 상상할 수 있다. 당면은 이 Snapdragon 410을 64bit 이행의 발판으로 삼아, 본격적으로 64bit로 이행하는 것은 현재 개발중인 독자 64bit 코어의 투입 후가 될 것이다.

자사제품, 자사 파운드리가 강점인 Samsung

Qualcomm과는 또다른 전략으로 스마트폰/태블릿용 SoC 시장에서 큰 존재감을 유지하고 있는 것이 Samsung이다.

원래 Samsung은 옛날부터 ARM의 파트너 기업으로, ARM7TDMI나 ARM9 코어를 베이스로 임베디드 용도로 많은 제품을 출시했다. 또 애플리케이션 프로세서 시장에도 ARM 코어를 베이스로 한 제품을 일찍부터 내보냈다. 현재도 ARM9 베이스나 ARM11 베이스의 애플리케이션 프로세서를 라인업하고 있는 모습은 아니나 다를까 싶다.

실은 이 ARM11 베이스의 「S3C6410」의 전모델이었던 「S3C6400」은, 초대 iPhone의 애플리케이션 프로세서의 베이스가 된 물건이다. 이 S3C6400는 POP(Package On Package) 옵션이 준비되어 있어, 이것을 사용하여 동사의 Mobile DDR SDRAM을 실장한 것이 초대 iPhone의 프로세서로 채용되었다. 이 S3C6400 베이스의 독자 프로세서는 그 후 약간 사양을 바꿔 iPhone 3G에도 채용되기에 이른다.


S3C6400

Samsung은 이를 잇는 세대로 ARM에서 Cortex-A8 코어의 프로세서 라이선스를 얻어 이것을 탑재한 제품을 새롭게 「Exynos」라는 명칭으로 라인업한다.

초대는 동사의 45nm 공정을 사용한 Cortex-A8 싱글코어의 「Exynos 3」이지만, 이어서 45nm는 그대로 두고 Cortex-A9 MP(멀티코어)로 전환한 제품을 「Exynos 4」로 투입. 뒤이어 동사의 32nm HKMG 공정을 사용함과 동시에 쿼드코어의 제품도 투입한다. 2012년에는 업계에서 가장 먼저 Cortex-A15를 베이스로 한 「Exynos 5」를 먼저 투입, 뒤이어 28nm HKMG 공정으로 전환한 제품을 투입한다.

이 패턴, 어디서 본 기억이 없는가? 완전 Intel의 Tick-Tock 모델 그 자체다. 이것을 가능하게 하기 위해서는 첨단 공정을 이용할 수 있는 파운드리와 대량제조를 받치는 수요 두가지가 필요하고, Samsung은 그 양쪽을 모두 보유하고 있다. TSMC나 GLOBALFOUNDRIES와 비교하면 그다지 눈에 띄진 않지만, Samsung도 자사에서 파운드리 사업을 진행하고 있으며, 현재는 28nm의 HKMG 공정을 제공하고 있지만 동사는 Common Platform의 일원으로 앞으로 20nm 공정이나14nm FinFET 공정을 제공해갈 것임을 올해의 Common Platform Technology Forum에서 밝힌 바 있다. 이런 최신 공정을 항상 이용할 수 있다는 것이 동사의 커다란 강점이다.

또 하나의 요소인 수요면은 뭐 말이 필요없다. Samsung의 「Galaxy」시리즈의 막대한 라인업과 그 매상대수의 크기는 모든 독자들이 알고 있을 것이다. 이 Galaxy 시리즈의 태반에 Exynos가 탑재되어 있다는 시점에서 수요 역시 막대함을 쉽게 상상할 수 있다. Tick-Tock과 같은 복수의 공정 노드에 한발씩 걸치는 형태로 첨단 SoC를 만드는 작업은 그 높은 초기비용(설계비용이나 생산을 위한 마스크 비용 등) 때문에 팹리스 기업에서는 좀처럼 손댈 수 없는 방법이다. 하지만 Samsung의 경우에는 Galaxy 시리즈 덕에 이 허들을 뛰어넘을 수 있었던 것이다.


Galaxy Note 3

Galaxy S4

한편, “SoC의 내부”라는 관점에서 이야기하면 이렇다할 특징이 없다 할 수 있다. 예를 들어 최신 모델인 Exynos 5의 경우

CPU코어: Cortex-A15 Dual/Cortex-A15 Quad+Cortex-A7 Quad(big.LITTLE) GPU코어: Mali-T600 시리즈 또는 PowerVR SGX

로, 여기에 동영상 인코더/디코더나 카메라 용 ISP 등을 끼워넣은 것 뿐이다. ARM의 IP 샘플같은 만듬새라고 해도 지장이 없다. 실은 이게 바로 Samsung의 가치라고 해도 될 것이다.

오해를 두려워하지말고 이야기하자면, Samsung에는 자사에서 CPU나 GPU를 설계할 능력이 없다. 여기서 말하는 "설계"라 함은 ASIC 등의 설계로 이야기하면 상류설계, 즉 논리 레벨의 디자인 능력을 가리킨다. 실제로 Samsung은 독자 아키텍처의 CPU를 전혀 갖고 있지 않다. 굳이 말하자면 올해 IXYS Corporation에 매각한 4/8bit MCU인 「S3」시리즈가 있지만, 원래는 「Z8」아키텍처 베이스의 「SAM8/SAM88」코어를 이용한 것으로, 주변회로는 둘째치고 코어 아키텍처를 제로부터 만든 건 아니다. 또 Samsung이 구 DEC과 공동으로 일으킨 API Networks(옛 이름은 API:Alpha Processor Inc.)도 그다지 성과를 낳지 못한채 해산되었고, 거기에 해산된 후 대부분의 엔지니어는 AMD로 이적하여 HyperTransport Link의 개발에 종사하게 된 결과, Samsung 측에(Alpha의 라이선스는 취득했지만) 그다지 설계 자원은 남지 않았다고 한다.

반면, 물리설계에 관해서는 풍부한 자원과 디자이너를 갖추고 있다. 그렇지 않다면 Apple의 역대 프로세서를 제조하는 것과 같은 일은 무리였을 것이다. 아니 애초에 앞서 후쿠다씨의 리포트에도 적혀있듯 GLOBALFOUNDRIES와 거의 동규모의 매상(2012년에는 세계 3위인 43억 3천만달러)을 올린 이상, 물리설계 능력이 없다는 건 말이 안된다. 앞서 ARM의 샘플이 Samsung의 가치라고 설명한 것은 이런 부분이다.

동사는 파운드리이면서 논리 IP 그 자체의 라인업 능력은 좀 떨어진다. 하지만 이것은 ARM 생태계에 들어가 있으면 손쉽게 얻을 수 있다. 그런 한편 물리설계에는 일가견이 있으니 IP만 있으면 그것을 칩으로 만들어내는 것은 쉬운 일이다. Samsung이 Exynos 5에서 타사에 앞서 Cortex-A15을 실장하여 출하를 개시할 수 있었던 것은, 가치있는 일이라 말하지 않을 수 없을 것이다.

한가지 더 이야기하자면, 이런 방법은 유저(여기서는 SoC를 사용하여 스마트폰/태블릿 등을 만드는 벤더)에게 굉장한 메리트가 있다. 메이커가 독자적으로 논리설계를 하는 케이스에서는 그 메이커가 문서나 SDK, 드라이버등을 준비해줄때까지 사실상 자기 설계를 개시할 수 없다. 또 시뮬레이션 용의 모델등도 그러하여, 단순히 SoC 칩만을 제공받아봐야 곤란해질 뿐이다. 이런 점에서 기존의 IP를 그대로 사용한 케이스에서는 이런 것의 태반은 IP 공급자에게서 공급받는다. Samsung이 자사에서 준비할 필요가 없는 건 아니지만, 적어도 Qualcomm과 비교하면 훨씬 적을 것이다. 이것은 최종적으로는 개발기간단축으로 이어지게 되므로, 이것을 가치라고 볼 수도 있을 것이다.


Exynos 4 Quad

탑재단말의 차별화라는 관점에서 보면, 특징없는 ARM 베이스라 SoC에서의 차별화는 어렵지만, 애초에 최종제품의 차별화를 SoC로 하려고 생각하는 것이 넌센스다. Exynos든 Snapdragon이든 이것을 채용한 최종제품은 세상에 산더미처럼 많아 차별화는 SoC 이외의 부분에서 할 수 밖에 없다. 그렇다면 SoC 그 자체는 곧바르고 만들기 쉬운 편이 오히려 고마운 편이다. 여러가지 독자기능등이 들어있으면 오히려 다루는데 고생하게 되리라 짐작할 수 있다.

굳이 말하자면, 이 외에도 자사의 파운드리에서 제조하고 있기에 생산의 우위도가 높다는 것도 부차적인 메리트가 될 것이다. TSMC 등 외부 파운드리에 제조를 위탁하는 경우에는 타사의 SoC등과 혼재되어 좀처럼 제품을 입수하지 못하는 케이스도 생각할 수 있다. 실제로 2012년에는 그런 상황이었다.

한편, Samsung은 메리트와 표리일체의 문제도 안고 있다. 우선 Tick-Tock을 성립시키고 있는 원동력은 자사의 Galaxy 시리즈에 의한 대량구매로, 동제품의 판매속도가 떨어지면 이 구도 역시 무너지게 된다. 실제로 그런 징조가 보이기 시작한 만큼 앞으로 주의가 필요하다.

또, 파운드리측의 첨단 공정이 예정대로 미세화되어 가면 괜찮지만, 어떤 이유로 미세화가 정체되면 Samsung의 강점이 크게 손실되게 된다. 이것은 같은 Tick-Tock 모델을 갖고 있는 Intel에도 공통되는 이야기다. 따라서 Samsung은 첨단 공정에 투자를 계속해야만 한다. 이것은 결과적으로 비용을 상승시키게 되고, 그 결과 아무래도 SoC의 가격이 높아지게 된다는 문제는 Qualcomm과 같다.

참고로, Samsung 역시 64bit로의 이행을 진행하고 있다. 다음 「Exynos 6」시리즈는 Cortex-A57 Quad와 Cortex-A53 Quad에 의한 big.LITTLE 구성이 되는 것이 거의 확정사항이고, 나머지는 언제 나올것인지하는 것만이 주목점이다. Samsung으로서 자존심때문에라도 가장 먼저 내놓는 것을 목표로 하고 있을 거라 생각하지만, 과연 무사히 샘플 출하를 개시할 수 있을지 주시하고 있다.

  1. 식품등에서 맛이 떨어지지 않는 기한. 일본에서는 주로 유통기한 대신 이것을 표기함 [본문으로]

※ 이 글은 impress watch 에 실린 컬럼을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.

최근의 스마트폰/태블릿용 SoC 제1회

원문 : 今どきのタブレット/スマートフォン向けSoC 第1回

이번회부터 시작되는 「1개월 집중강좌」는, 매월 정해진 테마에 대해서 1개월(4회 정도)에 걸쳐 파고들면서 깊게 이해하는 코너입니다.

첫회가 되는 이번달은 「태블릿/스마트폰용 SoC」에 대해서 오하라 유스케(大原雄介)씨가 해설해주시겠습니다. 요즘은 스마트폰, 태블릿에 SoC가 널리 사용되어 아주 가까운 존재가 되었습니다. 따라서 여러 SoC의 자리매김이나 각 벤더의 방향성 등 SoC 전반의 현재 동향을 4회에 걸쳐 보내드리겠습니다. (편집부)


애초에 왜 ARM 아키텍처인가

최근의 스마트폰/태블릿 대상 프로세서의 태반은 ARM 베이스다. 실제로 태블릿은 넘어가더라도, 스마트폰에 관해서는 국내를 보아도 전세계를 보아도 ARM 이외의 아키텍처를 채용한 케이스는 매우 적다. 왜 이런 상황이 되었는가, 그 이유는 역사적 경위라고 보는 견해가 강하다. 단적으로 이야기하자면 Nokia의 「Symbian OS」가 ARM 베이스였으니까라고 할 수 있는데, 좀 더 제대로 설명할까 한다.

초기…라고는 해도 1990년대 중반까지의 이야기지만, 당시의 휴대폰 내부를 대충 이야기하면 그림 1처럼 되어있었다. 아직 아날로그 방식이었던 시대였기에 간단해도 상관없었다고 할 수 있겠다. UI용 프로세서라는 것은 극히 간단한 액정표시나 키패드, 전화번호부 정도를 처리하는 것이었다. 32bit 프로세서가 아니라도 충분히 커버할 수 있었고, 실제로 16bit의 마이크로컴퓨터을 사용하던 제품도 있다(국내의 제품은 대체로 32bit 프로세서였던듯 하지만, 모두 그랬는지까지는 필자가 파악하지 못했다).

그림 1. 초기의 휴대폰 구성

하지만 디지털 통신으로 바뀌면서, 모뎀측에 통신처리를 담당하는 프로세서가 필요하게 되었다. 그래서 모뎀과 조합한 「베이스밴드 프로세서」라고 불리는 것이 등장한다. 이것은 ARM9 클래스의 CPU 코어에, 경우에 따라서는 DSP 등을 조합하여 실장된 것이 많았다. 이런 케이스에서는 화면의 표시나 키패드 제어는 베이스밴드 프로세서가 담당했다.

그림 2. 디지털 통신으로 전환된 무렵의 휴대폰 구성

하지만, 점차 휴대폰 위에서의 애플리케이션 성능이 요구되면서, 이것만으로는 따라갈 수 없게 되었다. NTT 도코모의 i모드가 그 대표적 예다. 또 카메라 기능이 널리 탑재되게 된 것도 이 무렵이라고 기억하고 있는데, 이런 기능들의 처리는 베이스밴드 프로세서에만 맡겨놓을 수 없게 되어 「애플리케이션 프로세서」라는 것이 새로 탑재되게 된다.

그림 3. 더 많은 성능이 요구된 결과 애플리케이션 프로세서가 등장

당초에는 여러 메이커가 이 애플리케이션 프로세서에 손을 댔다. 국내만 봐도 히다치(현 르네사스 일렉트로닉스)의 「SH」시리즈나, 마츠시타전기산업(현 파나소닉)의 「UniPhier」(유니피에)가 있다. 국외로 눈을 돌리면 여기에 MIPS 베이스의 프로세서가 탑재된 케이스도 있다.

하지만, 최종적으로는 이것들이 모두 ARM으로 통일되게 된다. 가장 큰 이유는 이런 휴대폰 OS가 개발기간등의 관계로 Symbian OS로 집약되어 갔기 때문이다. Nokia는 자사의 휴대폰만이 아니라 다른 회사의 휴대폰용으로도 Symbian OS를 적극적으로 OEM 공급하였는데, 이것을 이용하기 위해 필연적으로 CPU 아키텍처가 ARM으로 좁혀지게 된 것이다.

한번 마켓 쉐어를 잡으면, 여기에 진 아키텍처는 점점 쇠퇴해간다. 반면, 쉐어를 잡은 아키텍처가 점점 시장을 과점화하는 모습은 휴대폰에서도 현저하게 나타났으며, 그 결과 (초대 iPhone이 등장하기 직전인) 2006년에 Symbian OS(와 ARM)의 마켓 쉐어는 압도적이었다. 지역에 따라 다르지만, 2006년 당시의 휴대폰용 OS는 "북미 이외는" Symbian 계열이 6할 이상, 특히 동남아시아 등에서는 90%를 훨씬 넘었으며, 일본이나 중국에서도 6할이라는 수치였다.

북미가 특별했던 것은, Windows CE 베이스의 휴대폰에 더해 RIM(Research In Motion)의「BlackBerry」라는 유력한 제품이 있었기 때문이다. 하지만 BlackBerry나 Windows CE 베이스의 제품도 대부분 ARM 베이스의 프로세서를 채용하고 있었기에, 이미 휴대폰용으로는 승부가 결정난 것이나 마찬가지였다.

이후에는, Apple에 의한 iPhone의 투입과 Google에 의한 Android의 투입 등을 거쳐 현재에 이르게 되는데, 어느 것이나 ARM 베이스의 SoC라는 것은 이미 알고 있을 것이다. 실제로 SoC를 만드는 쪽에서도, SoC를 사용한 스마트폰을 만드는 쪽에서도 어지간한 이유가 아니면 아키텍처를 변경할 이유가 없다. 또, 아키텍처가 같은 쪽이 개발환경이나 소프트웨어 자산을 살리기 쉽다. 물론 ARM 측도 트렌드에 맞춰 유연하게 아키텍처를 진화시켜왔기에, "아키텍처를 변경할 어지간한 이유"가 생겨나지 않은 것도 사실이다.

ARM 아키텍처의 변천

그럼, 그 ARM 아키텍처가 얼마나 대단한가…하면 솔직히 말해 명령셋이 딱히 대단하거나 하진 않다. ARM v8의 64bit 명령에서는 상당히 깔끔한 명령체계가 되었지만, 32bit 명령은 립서비스라도 깔끔하다고는 하기 힘들다.

이에는 이유가 있는데, 원래 ARM v1(초대 ARM1 코어)가 명령수나 성능이나 아슬아슬했던 탓에 약간 변칙적인 구조를 채용했기 때문이다. 그것이 그대로 현재까지 이어져 내려오게 된 것이다. 이런 점은 「8080」의 명령체계를 그대로 이어받은 현재의 x86이나 x64에도 할 수 있는 이야기이다. 명령체계가 깔끔하다 운운하는 것은 취향이라고 해야할지 주관이 들어가는 부분이지만, 설계시점에 명령셋에 유연함이 있던 「MIPS」나 「SPARC」쪽이 명령체계가 깔끔하다고 생각한다.

무엇보다 깔끔하면 성능이 좋은가하면 그런것도 아니다. 애초에 요즘과 같이 명령을 내부변환함으로써 복수의 RISC 명령으로 분해하여 처리하는 방식이 주류가 되면, 명령셋 그 자체는 그다지 성능에 영향을 미치지 않는다고 해도 된다. 오랫동안 휴대기기나 소비전력이 낮은 임베디드 기기가 타겟이었기도 하고, 절대적인 파워 버짓(Power Budget)을 낮게 억누르고 그 안에서 성능개선을 꾀하는 것에 노력해온 것이 ARM의 강점이었으며, 이것을 회로기술에 살렸다. 단, 다른 아키텍처와 비교해서 크게 성능면에서 차이가 나면 앞서 이야기한 "어지간한 이유"가 되어버리므로, 트렌드를 파악하면서 이에 착실히 따라왔다.

그 ARM 아키텍처와 대표적인 코어를 묶은 것이 그림 4이다. 아무래도 ARM v5 이전의 아키텍처는 현재에는 거의 사용되지 않으며, ARM9를 포함한 ARM v6이 최저 레벨이 되었다.

그림 4. ARM 아키텍처와 대표적 코어

이에 기반하여 개발된 ARM11은 초대 iPhone에 채용되기도 하며, 최근에는 마이크로컴퓨터보드 「Raspberry Pi」에도 ARM11이 내장되는 등 아직도 널리 이용되고 있다. 기본적인 명령셋은 그 이전의 ARM v5까지와 크게 다르지 않지만, 「Thumb-2」라고 불리는 축소명령셋(명령 그 자체는 32비트지만, 물리적인 명령포맷을 축소하여 사이즈를 32bit 미만으로 만든 것)을 탑재한 것이 큰 차이다. 또 뒤따라 멀티프로세서 대응명령 등이 추가되었는데, 이것은 ARM과 NEC 일렉트로닉스(현 르네사스 일렉트로닉스)와의 공동개발로, ARM11을 베이스로 한 멀티프로세서 구성이 가능해진 것과 관계가 있다.

ARM v6과 ARM11 코어는 널리 사용되었지만, ARM v6 그 자체는 둘째치고 ARM11코어는 기본적으로 싱글 이슈의 인 오더 형(로드/스토어 쪽에서는 일부 아웃 오브 오더 형도 실장)으로, 동작주파수도 수백 Mhz 정도(초대 iPhone에 탑재된 것도 620Mhz 구동)이었기에, 2004년 경이 되면 아무래도 성능면에서 부족함이 보였다. 이때 투입된 것이 ARM v7A 아키텍처와 Cortex-A8 코어다.

이 세대에서 ARM은 아키텍처를 애플리케이션용(ARM v7A), 실시간용(ARM v7R), 마이크로컨트롤러용(ARM v7M) 3개로 나누었다. 이 머릿글자를 모으면 「ARM」이 되는 것을 노렸다는 걸 ARM은 "공식적으로는" 인정하고 있지 않지만, 뭐 아마 그렇지 않을까. 그건 그거고, 이 ARM v7A에서는 멀티코어 대응에 더해 본격적인 OS(주로 Linux)에 대응한 프로세서 리소스의 가상화, 「NEON」이라고 불리는 SIMD 연산 엔진등도 추가되었다. 또, Java 동작에 맞춰 「Jazelle」라는 Java의 바이트코드를 네이티브 실행할 수 있는 모드가 ARM v6부터 추가되었는데, ARM v7에서는 이것을 확장한 Jazelle RCT(Runtime Compilation Target)이 새롭게 실장되었다.

이 ARM v7A에 처음으로 대응한 것이 2005년의 Cortex-A8로, 인 오더 형이면서도 2명령의 수퍼 스칼라 구성이다. 2007년에는 이것을 아웃 오브 오더화한 Cortex-A9도 투입된다. 또, 당초부터 멀티프로세서를 고려하였으며, 현재에는 Cortex-A9 MP가 널리 이용되고 있음은 주지의 사실이다. 2009년에는 오히려 성능이 낮아도 좋으니 저소비전력/적은 다이사이즈의 제품이 필요하다는 요구에 맞춰 1명령에 인 오더 구성인 Cortex-A5도 투입되고 있다.

이 ARM v7은 실은 2010년에 약간 변경이 있었다. 2010년 8월의 Hot Chips 22에서 처음 발표되었는데, 하드웨어 레벨의 가상화 지원과 LPAE(Large Physical Address Extension)이라는 주소확장이 이루어졌다. 이 LPAE는 x86에서 말하는 PAE와 거의 같은 것으로, 개별 프로세스의 가상 주소 그 자체는 32bit(4GB)로 제한되어 있지만, 시스템 전체에서는 40bit(1TB)로 확장되어 있다. 사양적인 차이는 그 정도지만, ARM 자신은 이 변경 전의 아키텍처와 변경 후의 아키텍처를 나누어 취급하고 있으며, 이 이후에 투입된 코어는 모두 새로운 ARM v7에 준거하게 되어있다.

그 2010년에 발표된 것이 Cortex-A15과 Cortex-A7이다. Cortex-A15는 Cortex-A9의 상위에 해당하는, 3명령의 수퍼 스칼라/아웃 오브 오더 구성이다. Cortex-A7은 Cortex-A5의 후계가 되는 코어이지만, 큰 차이는 여기서 big.LITTLE이라는 구성을 취할 수 있다는 것이다. 2013년에는 Cortex-A7과 A15의 중간정도의 성능이 되는 Cortex-A12도 개발되게 된다.

이것과는 별도로, ARM은 2012년에 ARM v8 아키텍처를 발표, 64bit 로 이행함과 동시에, 이에 대응한 Cortex-A57/Cortex-A53의 양 코어를 발표하여 현재에 이르게 된다.

ARM 기반 SoC의 동향

그럼, 이것을 사용하는 SoC 벤더의 상황은 어떻게 되었을까. 앞서 적은대로, 1990년대는 Nokia가 가장 큰 쉐어를 쥐고 있었지만, 이에 과감하게 뛰어든 것이 Qualcomm이다. CDMA 방식의 총괄자라고 하면 알기 쉬우려나. 일본을 예로 들면 au가 전면적으로 채용한 것으로 유명하다.

이에 이어 2000년 전반에 여러 반도체 메이커가 휴대폰/스마트폰용으로 SoC를 투입했다. 예를 들어 TI(Texas Instruments)는「OMAP」패밀리를 팔았으며, Freescale은「MXC」라 불리는 SoC(정확히는 MCM:Multi Chip Module)을 개발했다. Intel도 「Manitoba」라 불리는 XScale 베이스의 SoC를 개발한다. 이 외에 Ericsson도 휴대폰용 칩을 제공했지만, STMicroelectronics과 함께 ST-Ericsson이라는 합자기업을 만들어 이곳으로 제품이나 개발을 이관한다.

국내에서도 주요 휴대폰 벤더는 자사에서 SoC를 개발했다. Android 등장 이전에는 iOS를 제외하면 사실상 Symbian OS밖에 없었으므로 ARM 베이스의 SoC를 만들어, 여기에 Symbian OS를 이식한 것이다. 물론 자사에서 OS까지 손대는 곳도 있었지만 괜찮은 결과가 나오지 않았다는 것은 모두가 아는 대로.

자, 이런 움직임은 아까 보여준 그림 3의 구조가 성립되는 한 문제가 없었다. 하지만 실제로는 그림 5를 거쳐 그림 6과 같이 변화해간다. 그 과정에서 점점 벤더가 떨어져나갔다.

그림 5. 베이스밴드와 애플리케이션 프로세서의 통합 그림 6. 베이스밴드, 애플리케이션 프로세서, 모뎀의 통합

우선 소형화와 저가격화가 진행된 결과, 베이스밴드 프로세서와 애플리케이션 프로세서를 따로 두는 것은 실장면적이나 부품원가의 관점에서 경제적이지 못하다는 이야기가 당연히 나오게 된다. 특히 모뎀의 규격이 2.5G에서 3G를 거쳐 3.5G(HSUPA/HSDPA), 3.9G/4G(LTE)로 진화해가면서, 이것을 제대로 따라가는 모뎀이나 베이스밴드 프로세서를 내놓을 수 있는 메이커가 줄어들어 갔다. 가장 확연한 예시가 TI로, 동사의 OMAP 그 자체는 널리 쓰여졌지만 모뎀 그 자체를 갖고 있지 않아 타사(딱잘라 말하면 Qualcomm)에서 모뎀칩을 구입해야만 했다. 그렇게 되면 휴대기기 벤더는 OMAP 프로세서와는 별도로 Qualcomm의 모뎀을 구입해야할 필요가 있으며, 부품값도 더 들고 실장면적도 늘어난다. Qualcomm의 Snapdragon 시리즈를 사용하면 모뎀 내장 타입도 있고, 모뎀을 빼놓는 경우에도 가격은 싼 편이다. 그렇다는 것은, TI가 Snapdragon에 대항하려면 모뎀분만큼 가격을 내리지 않으면 대항할 수 없다는 소리가 된다. 당연히 이에 따라 수익성은 맹렬히 내려간다.

이런 수익성의 악화에 따라 Intel이나 Freescale은 이른 타이밍에 휴대폰용 SoC의 개발을 포기해버렸고, TI도 마찬가지다. ST-Ericsson의 경우 모뎀의 개발비용을 흡수하지 못하고 2013년에 회사를 청산하고 만다. Nokia에게 모뎀부문을 매수하면서 Broadcom에 매각되어 버린 르네사스 일렉트로닉스도 마찬가지다.

그렇다고 해서 「Qualcomm의 단독승리인가」하면 당연히 거기서 기회를 엿보는 메이커도 있기 마련, 다음회부터 그런 사정을 개별적으로 소개해갈까 한다.

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

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++에서 사용하기 쉽게 만들어줌 [본문으로]

+ Recent posts