Tag Archives: 마이크로 프로세서

프로세서의 진화는 끊이지 않는다!

마이크로 프로세서의 개발이 한계에 부딛혔다는 말이 많습니다.

마이크로 아키텍쳐에서 많은 연구자들에게 즐거움을 주었던 [[trace architecture]](Intel에서 [[trace cache]]를 채용되었지요?)라든지 SMT이후에 별다른 혁신없이 몇년이 지속되고 있는듯 한 느낌입니다.
최근의 마이크로 프로세서는 공정기술을 앞세운 속도 향상이나 동일 코어를 많이 내장하는 방법, 좀더 큰 캐쉬를 내장시키는 방법등으로 발전하고 있어서, 일견 마이크로 아키텍쳐 자체에는 별다른 이슈가 없는듯한 생각까지 들게 합니다.

마이크로 프로세서 자체에는 여러가지 재미있는 시도들이 진행되고 있습니다.
[[IBM]] 진영에서는 [[powerPC]]에서 기존의 Power라는 이름으로 복귀한 후 최근에 Power6 프로세서를 선보였습니다.
이전에 애플에서 ‘Power PC가 개선되는 것을 도저히 못 기다리겠다’고 선언하고 intel 기반으로 전향한것에 충격을 받았는지, [[Cell]]에서 병렬성을 강조하던 것에서 Power에서는 다시 속도전에 돌입했습니다.
ISSCC의 발표에 의하면 65nm 공정에서 4GHz라고 하더니만, 어제 EEtimes 기사를 보면 dual core Power6가 8MB L2 cache를 내장하고도 4~5GHz를 넘어섰다고 합니다. (출처가 san jose라는 걸 보면 MPF fall의 내용인듯 한데요..국내에 좀 희안한 기사가 하나 떳습니다. 10진법 연산이라.. 이걸보고 제가 왠만한 power6관련 논문/기사를 둘러봤는데 이런 내용은 없더군요.. 아마도 다음주에 MPR에서 MPF fall 정리하면서 나오겠죠.. CNET원문에도 있는걸보니 뭔가 있을듯 한데, 실체는 나중에 MPR을 봐야겠네요. ^^;)

잠잠하던 Sun진영에서는 UltraSparc의 발전 방향을 좀더 깊고 넓은 Multithreading으로 잡은듯 합니다. MPR의 예전 기사를 보면 Niagara2는 프로세서당 32-64 thread를 지원하고, Dual Core를 내장해서 128 thread를 지원한다고 하더군요.
또한가지 Sun의 재미있는 실험은 Niagra에 사용된 UltraSPARC T1  Core가 GPL에 의거해서 open되었다는 점입니다. OpenSPARC이란 이름으로 말이죠. http://www.opensparc.net/ 에서 [[OpenSparcT1]]의 모든 소스코드와 합성 스크립트를 얻으실 수 있습니다. 저도 몇달전에 받아서 합성 스크립트 만드는데 (감동과 ^^;) 도움을 받고 있습니다. 적어도 open source processor보다는 잘 만들어야한다는 막중한 중압감에 눌리는 중입니다. -_-;

OpenSparc 프로세서

찬란하게 떠오르다 사멸한 Alpha아키텍쳐는 그 면면이 AMD의 Hammer 아키텍쳐로 연결되었고, 주변의 여러 아키텍쳐에 영향을 주었고…
SimpleScalar라는 프로세스 아키텍트들한테는 가장 중요한 시뮬레이션 툴의 기반 아키텍쳐로 사용되어 여전히 논문상에 회자되고 있습니다.

지금 또 어느 랩에서 어떤 혁신적인 아키텍쳐가 개발되고 있을지 모르지요.
다음주에 MPR에서 나올 MPF fall 소식이 궁금해지는 저녁시간입니다.

AMD Torrenza: 서버 통합의 방법을 모색하다.

AMD에서 비지니스 환경을 위한 “Torrenza”, “Trinity”, “Raiden”의 세 가지 신기술을 발표했습니다. 보도자료를 보면 거의 마케팅적인 용어로 도배로 되어 있습니다만, Torrenza는 AMD64 프로세서와 이종(혹은 동종) 프로세서간의 서버 버스/소켓에 대한 공개 규약이고, Trinity는 보안,가상기술,관리를 통합하는 하나의 공개 전략이며, 코드명 “Radien”은 일종의 클라이언트 기술로 파악됩니다.
(보도자료 전문은 http://www.amd.com/us-en/Corporate/VirtualPressRoom/0,,51_104_543~109409,00.html)

하지만, Torrenza, Trinity, Raiden 모두 선언적 의미가 강했었으며 실체를 파악하기 힘들었는데, MPR에서 Torrenza에 대해서 어느정도 궁금증을 해소하게 해주는군요.

”]

MPR에 따르면, 토렌자 기술은 서버 환경을 위한 공개 버스/소켓 아키텍쳐로서 HyperTransport 2, HyperTransport 3 그리고, HTX 에드인 카드 인터페이스, HT3 기반의 1207 소켓을 구성요소로 취하고 있다고 합니다.
AMD는 이 토렌자 기술이 서버들에 있어서 표준 인터페이스 기술이 되도록 하기 위해서, 다른 파트너사들과 함께 Opteron Rev F에서 사용된 1207핀 소켓에 기반을 둔 Torrenza Innovation Socket(TIS)라는 공통 소켓 표준을 같이 개발하고 있다고 하네요.

현재 Common interface partner사로는 Tarari, RMI(알케미 인수한 회사죠?), Bay microsystems, DRC, Celoxica(셀록시카가 들어있다는 건 좀 의외네요..), XtremeData, Qlogic과 같은 많은 분야의 회사들이 망라되어 있고, Common Socket Partner사로는 IBM, Cray, Sun Microsystems가 있습니다 (인텔의 제외한 서버용 프로세서 규모가 있는 서버용 프로세서 회사는 다 모인거 아닌가요? ^^;)

토렌자 표준에 따르면, AMD의 opteron프로세서가 1207 소켓에 장착되어 HT 버스로 연결되는 것과 같이 타사의 프로세서 역시 1207핀 소켓에 장착되어 HT버스로 서로 직접 통신이 가능하고 (코프로세서로 인식되겠습니다만), 그 이외의 프로세서 역시  HTX를 이용하여 장착 가능하게 된다고 합니다.

즉, 토렌자가 실현되는 경우 서로 다른 이종간 멀티 프로세서 환경이 아주 쉽게 구축 가능하다는 장점이 있겠습니다. 이종간 멀티프로세서 시스템의 구축을 통한 가장 큰 장점은 아마도 virtualization이 아닐까 생각도 되는데, 한 시스템에 두가지 이종간 CPU를 설치하고 해당 CPU의 applicaiton을 자유롭게 실행시킨다는 점이 실현 가능하겠습니다.

소프트웨어가 어떻게/얼마나 지원해 줄지 미지수입니다만.. 아마도 Tirinity라는 플랫폼이 이러한 이종간의 시스템에서 자유로운 보안, 가상화, 관리을 해결하기 위한 방법론이 아닐까 생각됩니다. (AMD도 생각이 있을테니까요..)

처음으로 발표된 x86기반의 공개 소켓/인터페이스 표준이니 기대가 됩니다.
(인텔의 반격도 기대되는 건 사실입니다만, 인텔의 “플랫폼 맘대로 바꾸기”에는 나름의 철학이 있으니.. ^^;)

캐쉬를 신봉하지 말지어다.

가끔.. 정말 가끔.. 캐쉬를 신봉하시는 분들이 계십니다. 언제나 어디서나 누구에게나 캐쉬가 좋다! 라는 분들이지요.

캐쉬 메모리는 기본적으로 지역성의 원리(principle of locality)를 이용하는 메모리입니다.
즉, 이 세상의 대부분에 적용되는 80:20의 원리.. 이것이 캐쉬에서도 적용되어서 “메모리 접근중의 대부분은 특정한 부분에 이루어진다.”라는 특성을 지니게 됩니다.

세상의 일반적인 원리(?)를 이용한 것이니, 대부분의 어플리케이션에서는 캐쉬를 사용함이 타당합니다.
하지만, 항상 그러냐구요?
예외없는 법칙이 없듯이 캐쉬에서도 마찬가지 입니다.
캐쉬가 힘을 제대로 못쓰는 경우는 “지역성이 없는 데이터”입니다. 당연하겠죠? 지역성을 이용하는 메모리인 캐쉬이니, 지역성이 없는 데이터는 쥐약입니다.

그럼, 지역성 없는 데이터는 어떤것이 있을까요? 캐쉬의 1 라인이 4개 워드를 저장하는 구조라고 합시다.
4 x 4 배열 두개를 만들어봅시다. 배열에서 가장 많이 사용하는 연산이 뭐죠? 내적..
접근은  x(0,0) y(0,0) x(0,1) y(1,0) x(0,2) y(2,0) x(0,3) y(3,0) 이런식이죠? x는 비교적 순서대로 접근했으니 캐쉬 hit이 자주 납니다. 근데, y는 어떻죠? 계속 miss가 발생합니다. 공간적 지역성이 캐쉬에서 예측한 지역성의 수준보다 크기때문에, miss가 발생하는 겁니다.

좀더 심각하게 생각해 볼까요? 하나의 배열에서 저런 접근 하나만 하고, 더 이상 사용하지 않고 다른 배열을 씁시다. 이런 경우가 없다고요? 동영상이 연속된 배열의 입력이란건 알고 계시죠? ^^;

네, 멀티미디어 데이터는 많은 경우 시간적 지역성이 부족합니다. 동영상은 공간적 지역성도 부족할때가 많구요.
그래서, 멀티미디어 처리를 목적으로 하는 프로세서들에는 내장  램을 두고 캐쉬는 두지 않는 경우가 빈번합니다. 또한,  배열 데이터는 특정한 패턴이 있으므로 prefetcher라는 유닛을 두고 프로세서가 필요로 하기 전에 데이터를 내부 RAM에 넣어서, 접근을 빠르게 하는 경우가 많습니다.

이런 경우에 캐쉬가 영 잼병이냐구요?
음.. 네.. 솔직히 캐쉬가 멀티미디어 데이터에 있어서만은 잼병이 될때가 많습니다. 프로그래머분들께서 세심하게 다루어주지 않으시면 말입니다. 사실 캐쉬의 동작은 프로그래머가 프로그램을 얼마나 “캐쉬에 효과적으로” 짜 주시느냐에 따라 달라집니다.

캐쉬에 효과적이려면 어떤 것일까요?
당연히 “지역성의 원리”를 따를 수 있도록, 배열을 잘게 짤라서 공간적 지역성을 찾아수록 좋습니다.
또, 하나의 배열에 대해서 어떤 처리를 해야 한다면 최대한 그 배열에 대해서 어떤 동작을 많이 취해주는 것이 좋습니다.
예를 들어, 이미지의 화질을 개선하기 위해서 상호 보간하고, 밝기를 조정하는 동작을 한다면 모든 화면에 대해서 보간하고 난 이후에 밝기를 조절하는 것 보다는, 잘게 짜른 매크로 블럭에 대해서 보간, 밝기 조정을 같이 수행하는 것이 아무래도 캐쉬에게 좋습니다.

요즘처럼 프로세서가 빨리 도는 세상에, 캐쉬 동작까지 고려하시는 분이 어디있겠습니까만.. (엔진을 만든다던지 하시는 분 이외에는 말입니다.), 염두에 두면 아무래도 더 좋겠죠…
물론, 많은 분들께서 캐쉬도 잘 고려해주는 좋은 컴파일러를 찾으시겠지만 말입니다.