SMTC(Symmetric Multi Thread Context)란 무엇인가

휴대형 단말기기에서 요구되는 멀티미디어 및 3D의 처리와 같은 시스템 성능이 커져 갈 수록 병렬 컴퓨팅의 필요가 점증하고 있다. 여기서는 그중에 하나의 시도를 보여주고 있는 SMTC에 대해 소개의 형식을 빌려 간단하게 얘기할까 합니다.

 

Symmetric Multi-thread Context의 의미를 알려면 먼저 multi thread multi processing의 차이점을 알아야 합니다. 이들에 차이는 인터넷에 잘 나와 있기 때문에 여기서는 좀 다른 시각으로 설명해볼까 합니다.

 

세상에 존재하는 어떠한 컴퓨터에서도 일관되게 적용될 수 있는 프로세스, 쓰레드 같은 단어의 엄밀한 정의는 사실 없다고 봐도 무방합니다. 하지만 여기서는 리눅스와 같이 시스템 내에 프로세스와 쓰레드가 같이 존재하는 시스템으로 국한해서 일반적으로 인식되는 각각의 특성을 확인해 보도록 하겠습니다.

 

프로세스: 넓은 의미에서의 하나의 일관된 작업. 리눅스에서 ls와 같이 프로그램을 실행하면 하나의 프로세스가 생성되게 되는데 이러한 하나의 프로세스는 일반적으로 다른 프로세스에 의해 침해 당하지 않는 메모리 영역을 가지는 특성이 있다. 즉 원칙적으로 하나의 프로세스의 코드가 자신과 다른 프로세스의 코드를 접근할 수 없도록 차단하여 시스템의 안정성을 확보할 수 있다.

 

프로세스에서의 context라 함은 프로세스를 시작과 끝이 있는 하나의 원기둥이라 가정할 때 가로로 원기둥을 자른 단면을 context라 합니다. 쉽게 얘기해서 멀티 프로세스 시스템에서 실행중인 프로세스는 다른 프로세스에게 제어권을 넘기고 휴면상태에 들어 갔다가 다시 제어권을 받아오면 예전과 동일한 상태로 돌아가야지 향후 프로그램이 의도했던 방향으로 흘러가게 되는데 원상복구에 필요한 모든 정보를 context라 얘기합니다. 이들 정보는 그림에 나와있는 것 이외에 추가적으로 필요하지만 이들을 모두 하드웨어에서 처리하는 것은 비용대비 효율성 측면에서 바람직하지 않기에 필요한 내용만을 하드웨어에서 처리하도록 되어 있습니다.

 

예를 들어 스택의 경우 프로세스간 보호를 위해 독자적인 영역을 가지고 있기 때문에 스택 전체가 context의 구성원이지만 프로세스 전환시 스택 전체를 백업하는 것이 아니라 stack pointer정보만 보관하고 있으면 프로세스 복구시 정확한 상태복원이 가능합니다. 또한 리눅스 시그널 관련 상태값도 프로세스의 정확한 복구에 필요한 사항이지만 이것을 하드웨어적으로 지원하지는 않고 소프트웨어적으로 지원하도록 하고 있습니다.

 

 

 

쓰레드:  쓰레드는 실행 루프 단위로 얘기할 수 있는데 프로그래머에 의해 선택된 작업 묶음이다. 하나의 프로세스가 한개의 쓰레드를 가질 수도 있지만 성능향상을 위해서 여러개의 쓰레드로 나누어 프로세스를 진행시킬수도 있다. 하나의 프로세스안에 여러개의 쓰레드를 가질 수 있는데 이런 시스템에 대해 MultiThread를 지원한다고 말하며, 쓰레드의 전환시에는 보다 적은 정보만을 저장했다가 이어진행시에 복원해서 사용하기 때문에 속도가 빠르다. 


Thread context로는 Register file들과 그외 Thread 복구에 필요한 정보들이 포함됩니다이들 정보로는 TLB 관련 내용도 넓은 의미에서 포함할 수 있지만 이는 CPU제조업체의 판단에 따라 하드웨어적으로 지원하기도 하고 소프트웨어로 처리할 것을 요구하기도 한다.

 

SMP SMTC의 차이점은

 

Symmetric Multi Processing은 동등한*(Symmetric) CPU가 여러 개 있어서 프로세스가 각각의 CPU에서 동작하는 것을 의미합니다. 각각의 CPU가 독자적으로 MMU, ALU, 각종 PIPE line 등을 가지고 있습니다. 그래서 2개의 cpu가 있고 2개의 프로세스가 돌아가는 시스템이 있다면 프로세스 전환시에 context switch가 필요없게 되니 그만큼 성능면에서 이득을 봅니다.

 


 

 

 

그러면 Symmetric* Multi-Thread Context는 무엇일까요? Thread context가 하나의 코어안에 여러벌을 보관할 수 있게 하드웨어가 지원하는 것을 의미하는 것으로, SMTC를 지원하는 시스템은 멀티쓰레드를 전환할때 소프트웨어로 처리해야 될 부분이 하드웨어에서 처리해준다는 점에서 성능향상을 보여줄 수 있습니다. 다른말로는 하드웨어 쓰레드를 지원하는 것으로 주로 Register Set들이 CPU내부에 여러 벌 준비되어 있는 경우를 의미합니다그 외 아래의 그림에서 나와 있다시피 interrupt mask와 같은 내용도 별도의 레지스터를 통해 보관할 수 있습니다.

 

여기에 나타난 그림을 보면 더욱 명료하게 보여지는데 단색의 주황색부분은 하드웨어의 실체가 존재하는 것을 의미하고 색이 섞인 블록은 한 개의 하드웨어를 시분할해서 사용하는 것으로 나타나 있음을 볼 수 있습니다.

 

 

SMTC의 지원을 위해서는 CPU가 이 기능을 지원해야 할 것이고 거기에 따른 사용방법도 제조업체에서 지원해야 합니다. 위의 그림의 출처는 다음을 참고. http://elinux.org/upload/7/7b/CELF_SMTC_April_2006_v0.3.pdf

 

자 그러면 왜 SMP가 나온 후 SMTC 시스템이 나왔을까요? 간단합니다. SMP는 복수개의 하드웨어를 장착해야 하므로 성능이 좋은 반면 CPU의 설계가 복잡해지고 다이크기가 커지고 파워를 많이 잡아먹는 여러가지 약점이 있는 반면, SMTC 시스템은 어느 정도 multi thread의 하드웨어적인 지원을 통해 성능향상 대비 제조단가 및 전원 소모량의 trade off를 고려하여 내놓은 절충선이라 할 수 있습니다. 향후 모바일 장비에서도 성능향상의 요구에 따라 병렬 프로세싱의 요구가 커질텐데 비용과 전력요구량 면에서 이점을 보이는 SMTC 기능을 지원하는 CPU가 대안이 될 수 있을지 기대됩니다.



추가 참고 자료:

1.     http://www.ddj.com/hpc-high-performance-computing/194500234;jsessionid=ZFTD05R2STNC5QE1GHRSKH4ATMY32JVN?_requestid=107789


2.     http://elinux.org/upload/7/7b/CELF_SMTC_April_2006_v0.3.pdf


3.   리눅스에서의 thread 관련 자료: http://www.ibm.com/developerworks/kr/library/l-threading.html






free counters
Posted by kevino
,