마이크로스레드(멀티코어)

Micro-thread (multi-core)

멀티코어 및 멀티코어 프로세서의 마이크로스레드는 멀티스레딩 아키텍처와 유사한 메모리 지연을 숨기기 위한 메커니즘입니다.단, Cell Broadband Engine 등의 멀티코어 프로세서용 소프트웨어에서는 메모리 지연 또는 I/O 동작으로 인해 발생하는 지연을 동적으로 숨깁니다.

서론

마이크로스레딩은 멀티코어 또는 멀티코어 프로세서 내부에 작은 스레드를 작성하는 소프트웨어 기반의 스레드 프레임워크입니다.각 코어는 아이돌 시간을 활용하는2개 이상의 작은 스레드를 가질 수 있습니다.인텔이 발명한 하이퍼스레딩이나 현대의 마이크로프로세서의 일반적인 멀티스레딩 아키텍처와 같습니다.멀티스레딩 하드웨어 로직이 없어도 시스템의 메인 메모리에 고가의 컨텍스트 전환을 수행하지 않고 동일한 코어로 여러 스레드를 실행할 수 있습니다.마이크로 스레드는 주로 메모리 요청에 연산을 오버랩하여 각 코어 내부의 메모리 지연을 숨깁니다.마이크로 스레드 모델과 현재의 스레드 모델의 주된 차이점은 마이크로 스레드 컨텍스트스위칭 오버헤드가 매우 작다는 것입니다.예를 들어 Cell Broadband Engine에서의 오버헤드마이크로스레드 실장은 160나노초입니다한편,코어(SPE) 스레드 전체의 컨텍스트스위칭 오버헤드는 약 2000 마이크로초입니다.이러한 낮은 오버헤드는 세 가지 주요 요인에 기인합니다.첫째, 마이크로 스레드는 매우 작습니다.각 마이크로 스레드는 간단하지만 중요한 기능을 1~2개 실행합니다.둘째, 마이크로 스레드 컨텍스트는 마이크로 스레드가 현재 실행되고 있는 코어의 레지스터 파일만을 포함한다.셋째, 마이크로 스레드는 코어의 전용 캐시로 컨텍스트 전환되므로 이 프로세스가 매우 빠르고 효율적입니다.

배경

마이크로프로세서의 속도가 빨라짐에 따라 주로 코어가 몇 개월마다 추가되기 때문에 메모리 레이텐시 갭은 더욱 커지고 있습니다.메모리 레이텐시는 1980년에는 몇 사이클이었지만 현재는 거의 1000 사이클에 달하고 있습니다.마이크로프로세서에 충분한 코어가 있고, 동시에 메인 메모리에 요구를 송신하고 있지 않은 경우는, 메모리 지연의 부분적인 애그리게이트 숨김이 발생합니다.일부 코어는 실행 중이고 다른 코어는 메모리 응답을 기다리는 중일 수 있습니다.이것은 멀티코어 프로세서에 최적인 상황은 아닙니다.하이 퍼포먼스 컴퓨팅의 전문가는, 모든 코어를 항상 비지 상태로 유지하기 위해서 노력하고 있습니다.따라서, 각 코어가 항상 비지 상태가 되어 있으면, 마이크로 프로세서 전체를 완전하게 사용할 수 있습니다.소프트웨어 기반의 스레드를 작성한다고 해서 문제가 해결되는 것은 아닙니다.컨텍스트 스레드를 메인 메모리로 전환하는 작업은 메모리 지연 시간에 비해 비용이 많이 듭니다.예를 들어 Cell Broadband Engine 컨텍스트 전환에서는 코어의 스레드 중 하나를 전환하는 데 최적의 경우 2000 마이크로초가 소요됩니다.더블 버퍼링이나 멀티 버퍼링 등의 소프트웨어 기술을 사용하면 메모리 지연 문제를 해결할 수 있습니다.단, 일반 알고리즘에서는 사용할 수 있습니다.이 알고리즘에서는 프로그램이 메모리에서 다음 데이터 청크가 어디에 있는지 알 수 있습니다.이 경우 이전 요청 데이터를 처리하는 동안 메모리에 요청을 보냅니다.그러나 프로그램이 메모리에서 검색할 다음 데이터 청크를 인식하지 못하면 이 기술은 작동하지 않습니다.즉, 트리 스패닝이나 랜덤리스트 랭킹과 같은 조합 알고리즘에서는 동작하지 않습니다.또, 멀티 버퍼링은, 메모리 지연이 일정하고, 정적으로 숨길 수 있는 것을 전제로 하고 있습니다.그러나 실제로는 메모리 지연 시간이 애플리케이션 간에 변경된다는 것을 알 수 있습니다.메모리 요구 공유 코어 상호 연결 속도 등 마이크로프로세서의 공유 리소스에 대한 전반적인 부하에 따라 달라집니다.

현재의 실장

현재 마이크로스레딩은 셀 광대역엔진[1]구현되어 있습니다.3~5배의 성능 향상을 달성할 수 있었습니다.현재는 정규 알고리즘과 조합 알고리즘에 대해 증명되어 있습니다.과학적 알고리즘의 실행 가능성을 증명하기 위한 다른 노력도 있다.

성능

마이크로스레드는 마이크로프로세서의 런타임 사용률에 따라 메모리 지연을 가장 잘 숨길 수 있는 매우 좋은 솔루션입니다.예를 들어 처리 및 컨텍스트 전환 시간에 비해 메모리 지연 시간이 매우 긴 경우 마이크로 스레드를 추가할 수 있습니다.이는 메모리로부터 대용량 데이터 청크가 요구되거나 메모리 핫 스팟이 많을 때 발생합니다.이 비율이 작을 경우 런타임에 도입되는 마이크로 스레드 수가 줄어들 수 있습니다.이는 구현된 애플리케이션 및 시스템의 런타임 요소와 관련된 요소에 따라 달라집니다.

비평

마이크로스레드는 멀티코어 및 멀티코어 프로세서의 메모리 레이텐시를 숨기기 위한 유망한 모델을 제공하지만 다음과 같은 중요한 문제를 해결해야 합니다.

  • 특별한 하드웨어 지원이 필요합니다.각 코어는 마이크로 스레드를 효율적으로 스케줄 하기 위해 자체 로컬 인터럽트 기능을 가져야 합니다.단, 비선제 스케줄링 정책을 따르는 경우 삽입 인터럽트 기능이 필요하지 않습니다.
  • 각 코어에 프로그래머가 수동으로 관리하는 자체 로컬 캐시가 있을 때 가장 잘 작동합니다.
  • 코어당 마이크로스레드를 추가하면 마이크로프로세서의 공유 리소스에 대한 부하가 대폭 증가합니다.메모리 및 동기화 요구가 증가하면 공유 리소스에 congestion가 발생할 수 있습니다.그러나 런타임 시스템이 메모리 지연 시간 등의 마이크로프로세서의 중요한 척도에 대한 모니터링을 통해 이 문제를 완화할 수 있으며, 따라서 마이크로 스레드를 줄이거나 스케줄링 정책을 수정하여 전체적인 실행 속도를 늦출 수 있습니다.

레퍼런스

  1. ^ Ahmed, M.; R. Ammar; S. Rajasekaran (2008), "SPENK: adding another level of parallelism on the cell broadband engine" (pdf), 1st international forum on Next-generation multicore/manycore technologies, Cairo, Egypt: ACM, pp. 1–10, retrieved 2009-03-04