진정한 128비트 SSE 구현

그렇다면 RS, 그리고 스케쥴러를 지나 이제 연산 유닛을 비교해보자.

코어 아키텍쳐의 경우 RS를 지나 본격적으로 벡터(Vector ALU), 스칼라(Scalar ALU), 그리고 메모리 연산(Store와 Load를 실행) 유닛으로 접속하는 포트를 6개를 제공한다. 코어를 있게 한 P6의 경우(펜티엄3)의 경우에는 5개의 포트를 제공하고 있으며 넷버스트의 경우에는 4개를 가지고 있다.

코어의 경우 포트 수가 액면상 늘어난 것을 제외하더라도 일단 가장 눈에 띄는 것은 연산 유닛으로 에 할당된 포트 수가 3개라는 것이다. P6의 경우에는 2개가 할당되었었으며 넷버스트의 경우에도 2개만이 ALU에 할당되었고 나머지는 메모리 연산 부분으로 할당되었었다. 코어의 경우에는 3개의 포트로 인해서 사이클당 3개의 연산을 지속적으로 처리가 가능하다.

애초에 펜티엄 프로로 시작하고 이후에 펜티엄 III로 진화하면서 벡터 연산 유닛, 즉 MMX와 SSE를 연산 유닛 부분에 추가하면서 문제는 RS에서 ALU로 오는 포트수가 작아서 이 부분에서 병목 현상이 발생할 수 있다는 것이었다. (특히 2 사이클을 필요로 하는 SSE 명령어의 처리 경우에는 포트의 대역폭이 부족했을 것이다.) 이 문제는 여전히 ALU에 2개 포트만을 가지고 있는 넷버스트에서도 잔존했다. 넷버스트의 ALU(Fast ALU 유닛)는 다른 부분에 비해서 2배속도의 클럭으로 동작한다. 즉 이론상으로는 클럭당 처리할 수 있는 최대 명령어는 넷버스트에서는 4개이다. 그러나 4개가 되어야할 경우에는 반드시 이 ALU에서 처리할 수 있는 단순(Simple) 연산일 경우에만 클럭 사이클당 4개를 처리할 수 있다. 즉 지속적으로 처리가 가능하다는 면에서는 코어가 더 균형잡힌 구조를 가지고 있다.

코어의 연산 유닛중 가장 뛰어난 부분은 바로 SSE 유닛이다. 인텔의 SSE(Streaming SIMD Extension)는 128비트 벡터의 지원이라는 것으로 호평을 듣기도 했지만 반면 P6 코어, 그리고 최근의 넷버스트까지도 64비트의 내부 데이터경로로 인해서 완전하지 못하다는 평을 들어야 했다. 코어의 3개의 SSE 유닛은 128 비트로 동작한다. 즉 128비트의 SSE 명령어를연산하는데 있어 유닛당 당 1개의 클럭 사이클만을 필요로 한다는 것이다. 이와 비교해서 넷버스트의 SSE 유닛은 64비트로 동작하는 것 2개를 가지고 있으며 128비트 연산시에 2개의 클럭 사이클을 필요로 한다. 코어의 전신인 요나도 64비트 SSE 유닛을 가지고 있다.

이와 비교해서 코어는 최대  4개의 배정밀도(DP, Double Precision, 64비트) 부동 소수 연산을 한 사이클에 처리할 수 있다. 인텔은 이를 어드밴스드 디지털 미디어 부스트(Advanced Digital Media Boost)라는 이름으로 코어 아키텍쳐의 핵심 기능으로 내세우고 있다.

이 역시 처리되는 Micro-Op의 단위수를 줄여서 더욱 빠른 성능을 도모함과 동시에 연산 유닛 입장에서는 해당 연산부하에 대해서 전력 소모량을 줄일 수 있는 것이다.

* SSE4

한편 인텔은 이번 코어 아키텍쳐에서 새로운 SSE 명령어를 추가하였으나 이를 적극적으로 홍보하고 있지는 않다. 아직까지 SSE4라고 알려진 이 명령어는 기존 SSE/SSE2/SSE3에 16개의 새로운 명령어가 추가된 것이며 필자의 질문에 인텔 엔지니어는 이것이 꼭 필요한 사람에게만 유용한 것이라고 그다지 부각되는 기능은 아니라는 식으로만 답했다. 이 명령어들은 원래 4GHz의 장벽을 넘을 기대주였지만 좌초된 테자스(Tejas)에서 적용할 예정이었던 것으로 추정된다.

이에 대한 구체적인 내용은 코어2 듀오가 정식 발표되는 시점에서 인텔이 공개할 것으로 전망된다. SSE4 명령어에 대한 추측 사항이 이미 인터넷을 통해서 공개된 바 있는데 이것은 어디까지나 추측이고 정확한 것은 아니다. 관심있는 사람은 방문해보기 바란다(일본어)

http://dango.kousaku.in/hiki/SSE4.html 

코어 아키텍쳐, P6, 그리고 넷버스트의 연산 유닛을 표로 정리해 보았다.

 

P6(요나)

넷버스트(펜티엄4)

코어 

포트(연산유닛할당 포트)

5(2)

4(2)

6(3)

정수(Int) 유닛

2개 

3개

3개

부동소수(FP) 유닛

2개 (64bit)

1개 (64bit)

2개(128bit) 

SSE 유닛

2개(64bit)

1개 (64bit)

3개 (128bit)


댓글(0) 먼댓글(0) 좋아요(2)
좋아요
공유하기 북마크하기찜하기