Apple이 선택한 ARM

IT 2010.04.28 20:08

Apple은 iPhone 초기부터 ARM Core를 넣은 CPU를 사용하고 있습니다. 맞습니다. Apple은 ARM을 선택한 것이죠. 최근에는 (ARM 코어를 기반으로) 자체 개발한 칩을 사용한다고 발표하기도 했습니다. 어떤 칩을 사용하고 있는 지 궁금합니다.

여기서 CPU는 특정 아키텍쳐 코어와 이를 보조(?)해주는 주변 장치들을 모아놓은 칩을 말합니다. 초창기 CPU는 정말 코어 역할만 했었습니다. 그러나 그 코어를 이용하려면 반드시 있어야 하는 회로나 대부분 많이 사용하는 주변 장치들이 있습니다. 이런 장치들은 한 칩에 모아 놓을 수 있으면 여러 가지 면에서 좋습니다. 즉 특정 코어를 사용하기 위한 공간도 줄어들고 전체 회로 구성 가격도 싸지게 됩니다. CPU를 이용해서 뭔가를 만드는 입장에서는 굉장한 장점이 되겠지요?


iPhone 1세대

CPU: ARM1176JZF @ 412MHz (620MHz) - Samsung S5L8900
GPU: PowerVR MBX Lite + VGP Lite



iPhone 3G

CPU: ARM1176JZF @ 412MHz (620MHz) - Samsung S5L8900
GPU: PowerVR MBX Lite + VGP Lite


이 플랫폼은 OpenGL ES 1.1까지 돌릴 수 있습니다. 정확하게는 GPU인 MBX가 OpenGL ES 1.1 까지 돌릴 수 있는 사양입니다. 중요한 점은 대부분의 제품이 MBX 등의 GPU를 가지고 있지만 이를 잘(!) 이용하는 드라이버를 제품에 넣지 않습니다. 넣더라도 특이한 형태로 넣어서 다른 어플리케이션이 이용할 수 없는 경우가 일반적입니다. 그러나 Apple은 OpenGL ES 1.1을 돌릴 수 있는 드라이버와 SDK를 배포했습니다. 이를 정말 잘 이용할 수 있게 만들어 놓은 것이죠. 이를 이용하는 대표적인 어플리케이션들이 게임일 것입니다. 물론 iPhone OS와 자체 어플리케이션들도 OpenGL을 잘 이용해서 사용자들에게 굉장한 성능을 맛볼 수 있게 만든 것은 사실입니다.

여기서 중요한 점은 하드웨어는 거의 동일하지만 Apple은 다른 가치를 더 중요시 한 것 같습니다.
사용자들이 원하는 것을 만들어 줄 수 있는 환경을 제공할 수 있는가? 
다른 말로 하면 ...
사용자(개발자)들에게 어필할 수 있는 기능을 제공할 수 있는가?
제품을 사게 만들 기능을 넣을 수 있는가?


iPhone 3GS

CPU: Cortex-A8 @ 600MHz (833MHz) - Samsung S5PC100
GPU: PowerVR SGX 535 + VXD


GPU 성능은 Intel GMA500 과 같은 것이라고 합니다. 더 자세하게는 인텔이 SGX535를 라이센스하여 GMA500 이라는 이름으로 팔고 있다고 합니다. (참고)

iPhone 3G에 비해 GPU 가 SGX로 높아졌습니다. 이 SGX 코어는 OpenGL ES 2.0까지 돌릴 수 있습니다. 뭐... 휴대용 게임기를 만들기에 딱 좋아졌다고 생각하면 되겠습니다. VXD 엔진은 HD 비디오를 디코딩할 수 있는 능력이 있다고 합니다. 종합해보면 멀티미디어 성능을 개선했다고 하면 되겠습니다.


Apple이 iPhone 3GS를 내놓으면서 어플리케이션에 따라 2배까지 성능 향상이 있다고 했는데 3D를 많이 사용하는 게임이나 비디오 디코딩 성능을 보면 크게 잘못된 말이 아닙니다. 또한 코어 자체의 동작 클럭도 높아졌지만 Cortex-A8로 코어 자체를 업그레이드하여 얻는 성능 향상도 무시할 수 없습니다.


iPad - WiFi 버전

CPU: Cortex-A8 @ 1GHz - Apple A4
GPU: PowerVR SGX 535 + VXD375

최근 iPad 발매로 시끌시끌합니다. iPad에는 Apple이 자체 디자인한 새로운 A4 칩을 사용했다고 합니다. 
자체 개발한 A4칩은 삼성의 45nm 공정에서 생산된다고 합니다. 특이한 점은 칩에 DDR SDRAM을 64bit 단위로 억세스할 수 있게 칩에 얹어 놓았다는 것입니다. 그래픽에서 램을 많이 사용하는 텍스쳐 등을 더 많이 사용할 수 있습니다. 더 부드러운 그래픽 효과들을 낼 수 있습니다. 다른 말로는 성능이 굉장히 향상된 것을 느낄 수 있습니다. ^^; 그래픽 성능을 더 우수하게 만들고 이를 효과적으로 전달하면 되는 것입니다.

이 칩을 찾아보면 재밌습니다.
 
왼쪽은 Apple이 FCC에 제출한 제품에 들어간 CPU
오른쪽은 발매된 iPad를 분해한 제품에 들어간 CPU

오! 드디어 칩에도 레이저 마킹으로 예술을 하려고 하는 Apple! ARM 코어를 사용한 칩들은 ARM 코어를 사용했음을 알리는 마크(글자 또는 로고)를 넣게되어 있는데, 발매된 iPad의 A4 칩에는 이게 보이지 않습니다. 왼쪽 FCC에 제출한 제품에는 ARM이라는 글자가 보입니다. ARM과 딜이 있었겠죠?


칩 사진은 iFixit에서 ...

신고

'IT' 카테고리의 다른 글

Apple이 선택한 ARM  (0) 2010.04.28
CPU + GPU 인텔의 딜레마  (1) 2010.04.27
top

Trackback Address :: http://arozin.tistory.com/trackback/5 관련글 쓰기

Write a comment



사실상 데스크탑, 서버, 넷북, 노트북을 비롯한 대부분의 CPU 시장은 몇년 전부터 인텔이 접수했다고 해도 과언이 아닐 것입니다. 이중 중저가 제품은 GPU를 내장한 CPU를 사용한 시스템이 많습니다. 과연 인텔은 GPU를 내장한 CPU를 어떤 제품으로 생각하고 있는 것일까요? 

아마도 인텔이 CPU 입장에서 GPU를 바라보는 관점은 이걸 겁니다. 
저가로 시스템을 만들 수 있는 칩을 제공하겠소.
그러나 선택은 당신들 몫이오.
선택을 완벽하게 제조사(사용자!)의 몫으로 돌리는 상황이라고 생각됩니다. 인텔 입장에서도 이런 정책이 말이 됩니다.

2007년 정보이기는 하지만 전세계 판매되는 PC의 90% 정도가 내장형 그래픽 시스템을 사용한다고 합니다. 이중 상당 수는 보드 내장형 그래픽 시스템이라 CPU에 GPU가 붙어 있는 시스템은 아닐 것이라고 생각됩니다. 하지만 이런 시장이 굉장한 규모로 존재한다는 것을 알 수 있습니다. 보드 내장형이건 CPU에 GPU가 붙어있는 형태건 그래픽 시스템을 내장하는 수요가 있다면 당연히 그래픽 시스템을 CPU에 올릴 수만 있다면 시장이 있다는 것 입니다.



인텔은 CPU에 하이엔드 그래픽 시스템을 ... ?

그러나 인텔은 CPU에 고성능 GPU를 올릴 수는 없을 것입니다.

먼저, 인텔은 고성능 GPU 솔루션을 가지고 있지 않다는 문제점이 있습니다. 라라비가 있기는 하지만 아직 공개되지 않은 상황입니다. 그 성능 또한 나와 봐야 알겠죠? 물론 이미 공개된 정보는 어느 정도 있지만 현재 시장에 나와있는 하이엔드 비디오 카드와 견주어 어느 정도 성능이 나올 지는? 

또 다른 문제점은 하이엔드 그래픽 시스템을 올렸을 때 발생하는 열은 어떻게 처리할 것이냐라는 문제입니다. 이 문제 때문이어도 하이엔드 그래픽 시스템을 올리기에는 문제가 있을 것입니다. 아래 그림은 Wikipedia에서 Core i5를 설명하는 페이지에서 가져온 표입니다. 여기서 보면 GPU를 내장한 CPU는 전력 소모가 확실히 적다는 것을 알 수 있습니다. CPU 자체의 동작 클럭도 낮아 전체적으로 저사양 CPU라고 보는 게 맞습니다. 물론 6xx 시리즈는 전력 소모도 꽤 높은 편입니다. CPU와 GPU 동작 속도도 높습니다.


위 표만 봐도 비교적 저사향 시스템을 위한 GPU 탑재된 CPU를 공급하는 인텔의 전략을 알 수 있습니다.

또한 하이엔드 그래픽 시스템을 얹었는데 가격을 어느 정도까지 올릴 수 있을까요? 하이엔드 그래픽 시스템을 위해서 투자할 사용자 또는 제조사는 별도의 카드 또는 칩셋을 구매할 것이 분명한 상황에서 무리수를 둘 필요는 없을 것입니다. 이 부분이 문제가 되는 게, 이 하이엔드 그래픽 시장은 정말 빨리 변하죠? 지원하지 않는 것이 답이라고 생각하는 것일 겁니다.


정리하면 ...

인텔은 저가 시스템을 만들 수 있는 칩은 공급하지만 선택은 제조사(사용자)의 몫으로 남겨 놓은 것 같습니다. 그러면서 라라비를 열심히 개발하고 있겠죠? 올해 말이면 시장에 라라비를 얹은 CPU를 볼 수 있을까요?

이럴 때 AMD가 좀 뛰어주면 좋을 텐데... ^^;

신고

'IT' 카테고리의 다른 글

Apple이 선택한 ARM  (0) 2010.04.28
CPU + GPU 인텔의 딜레마  (1) 2010.04.27
top

Trackback Address :: http://arozin.tistory.com/trackback/4 관련글 쓰기

  1. Tracked from 칫솔_초이의 IT 휴게실 2010.04.28 09:57 삭제

    Subject: 그래픽 통합 CPU, 코어 i5에 담겨진 아쉬움

    인텔은 올해 초, 그래픽 코어를 통합한 코어 i5 CPU를 선보였습니다. 전에는 CPU 따로, 그래픽 기능을 가진 어댑터를 따로 썼는데, 이제는 따로 쓸 필요가 없는 고성능 CPU가 나온 것이죠. 이 CPU를 내놓으면서 인텔은 "더 이상 싸구려 그래픽 카드를 꽂지 않아도 된다"라고 말하고 있습니다. 그러니까 5만 원이 채 안되는 그래픽 카드를 꽂아서 슬롯과 전력을 낭비할 바에야 그냥 그래픽 기능을 내장한 CPU 하나로 해결하자는 이야기지요. 나름...
  1. 칫솔 2010.04.28 09:57 신고 댓글주소 | 수정/삭제 | 댓글

    라라비에 대한 향후 행보, 저도 궁금합니다. 인텔이 어떻게 결과물을 내놓을지 함께 지켜보아요~ ^^

Write a comment


Windows XP에서 시스템 등록 정보에 보면 컴퓨터에 대한 정보가 나옵니다.
방법은?
  1. 탐색기 -> 마우스 포인터를 "내 컴퓨터" 위로 옮기고 마우스 오른쪽 버튼 -> 속성(R)
  2. 키보드 윈도 버튼 + Pause Break 버튼

XP는 위의 그림과 같이 아주 간단한 CPU 정보(위 그림의 빨간 상자안)를 보여줍니다.
Intel(R) Core(TM)2 Quad CPU
 Q9400 @ 2.66GHz

이와 같은 정보를 프로그램적으로 얻을 수 있는 방법은 없을까?


레지스트리를 보면?

다음 레지스트리의 ProcessorNameString 문자열 키값을 보면 동일한 정보("Intel(R) Core(TM)2 Quad CPU    Q9400  @ 2.66GHz")가 들어 있습니다.
[HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0]


레지스트리 정보는 왠지 누군가(?) 바꿔 놓을 수도 있을 것 같다는 생각이 듭니다. 근데 누가 왜 이걸 바꾸죠? 여하튼 누군가 이걸 바꿔 놓는다면 힘들게(?) 얻어온 값이 의미가 없어지겠군요.  프로그램적으로 레지스트리를 보지 않고 이런 정보를 얻을 수 있는 방법이 없을 까요?


프로그램에서 얻을 수 있는 방법

동영상에 관심이 있으신 분들은 키플님이 만드신 바닥이라는 프로그램을 아실 것입니다. 한 시대를 풍미했던 유명한 동영상 변환 프로그램입니다. 그런데 바닥이라는 프로그램은 mencoder를 사용합니다. mencoder는 MPlayer라는 유명한 오픈소스 동영상 재생/인코딩 소프트웨어에 들어 있는 프로그램입니다. 여기서 잠깐 바닥에 들어있는 mencoder를 실행해보면 다음과 같은 결과가 나옵니다. (키플님 고맙습니다.)

C:\BADAK>mencoder.exe
MEncoder dev-SVN-r28034 (for BADAK) (C) 2000-2008 MPlayer Team
CPU: Intel(R) Core(TM)2 Quad CPU    Q9400  @ 2.66GHz (Family: 6, Model: 23, Stepping: 10)
CPUflags: Type: 6 MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1
Compiled with runtime CPU detection.
No file given

Exiting... (error parsing command line)

C:\BADAK>

보이시나요? 위에서 봤던 동일한 정보가 보입니다. 추가로 CPU에 대한 자세한 정보가 나옵니다. 그렇습니다. mencoder 소스 코드를 보면 어떤 방법으로 구현이 가능한 지 알 수 있을 것 같습니다. 참고로 MPlayer는 윈도가 아닌 Linux 등 다른 환경에서도 잘 돌아가는 녀석이라 분명히 레지스트리 정보를 이용하지는 않았을 것이라고 생각했습니다.

실제 MPlayer 소스코드를 받아서 "CPU:"로 검색해 봤더니 cpudetect.c 파일에 관련 정보가 있었습니다. 코드를 보다보니 중요한 부분은 do_cpuid() 함수였습니다. 보시면 아시겠지만 인라인 어셈(inline assembly)으로 cpuid 명령(instruction)을 실행하고 있습니다.
static void
do_cpuid(unsigned int ax, unsigned int *p)
{
#if 0
	__asm__ volatile(
	"cpuid;"
	: "=a" (p[0]), "=b" (p[1]), "=c" (p[2]), "=d" (p[3])
	:  "0" (ax)
	);
#else
// code from libavcodec:
    __asm__ volatile
	("mov %%"REG_b", %%"REG_S"\n\t"
         "cpuid\n\t"
         "xchg %%"REG_b", %%"REG_S
         : "=a" (p[0]), "=S" (p[1]),
           "=c" (p[2]), "=d" (p[3])
         : "0" (ax));
#endif
}
여기서 cpuid라는 명령이 어떤 명령인지 알고 싶어졌습니다. Wikipedia관련 정보가 있습니다. 이 명령은 CPU에 대한 자세한 정보를 얻을 수 있는 명령이었습니다. 참고로 486 이상에서는 동작합니다. 

설명을 보면 "EAX = 80000002h, 80000003h, 80000004h: Processor Brand String" 이라는 부분이 있습니다. 그렇군요. 위의 간단한 CPU 정보가 Processor Brand String 이었던 것입니다.

이 정보를 이용해서 아래와 같이 간단히 코드를 만들어 실행해봅니다.
void do_cpuid(int idType, int *val)
{
	int reg_ax, reg_bx, reg_cx, reg_dx;
	__asm {
		mov eax, idType;
		cpuid;
		mov reg_ax, eax;
		mov reg_bx, ebx;
		mov reg_cx, ecx;
		mov reg_dx, edx;
	}
	*(val + 0) = reg_ax;
	*(val + 1) = reg_bx;
	*(val + 2) = reg_cx;
	*(val + 3) = reg_dx;
}

int main(int argc, char* argv[])
{
	printf("Hello World!\n");

	int val[5];
	val[4] = 0;
	do_cpuid(0x80000002, val);
	printf("%s\r\n", &val[0]);
	do_cpuid(0x80000003, val);
	printf("%s\r\n", &val[0]);
	do_cpuid(0x80000004, val);
	printf("%s\r\n", &val[0]);
	return 0;
}

결과는 다음과 같습니다.
Hello World!
Intel(R) Core(TM
)2 Quad CPU    Q
9400  @ 2.66GHz

그렇습니다. CPU 정보는 CPU에게 물어보면 되는 것이었습니다!!!

그런데 위 Wikipedia의 정보를 보다보면 MSDN에 이에 대한 정보가 있다고 합니다. 들어가봤더니 intrinsic으로 __cpuid()를 지원합니다. CPU한테 물어봐서 얻을 수 있는 정보도 잘 정리되어 있고 예제 코드도 있습니다. __cpuid()는 위의 간단한 예제 코드를 intrinsic으로 만들어 놓은 것이군요. 털썩! 

하나 더, __cpuid()는 VC++ 6.0 에서 동작하지 않습니다. 그렇습니다. 최근 툴을 쓰면 위와 같은 노가다를 뛸 필요없이 바로 실행되는 코드를 만들 수 있었던 것입니다. VC++ 2005 이상에서는 동작하네요. 그 사이 버전은 어떨 지 모르겠습니다. VC++ 6.0을 사용하지 말아야 하는 이유가 하나 더 늘었군요.


정리해보면 ...

CPU 정보를 얻고 싶으면 cpuid라는 명령을 사용해서 CPU에게 물어보면 된다. 노가다를 덜 뛰려면 최근 툴을 사용해라. (뭔가 결론이 이상하긴 합니다. ^^;)


그런데 여기서 궁금증이... CPU-Z로 유명한 CPUID는 이 명령을 가지고 놀다가 만들어진 회사일까?

신고

'프로그래밍' 카테고리의 다른 글

CPU 정보를 어떻게 알 수 있을까?  (0) 2010.04.23
Win32 API Multithreading 시 주의점  (0) 2010.04.20
top

Trackback Address :: http://arozin.tistory.com/trackback/3 관련글 쓰기

Write a comment





티스토리 툴바