과거 펜티엄4 노스우드 시절에 반짝 떠올랐다가
블룸 필드의 등장과 함께 컴백한
하이퍼스레딩(Hyper-Threading)~!!!


인텔의 하이퍼 스레딩(HTT : Hyper-Threading Technology)을 설명 하기에 앞서서 먼저...

스레드(Thread)과... 인텔 CPU의 파이프라인(pipeline)에 대한 설명이 먼저 이루어져야
할것입니다.

스레드나 파이프라인에 대한 설명만 하더라도
꽤 많은 분량이 되겟지만...
될수 있으면 간략하게
저의 얕은 지식 안에서만 설명하도록하겠습니다. ^^

이미 많은 분들이 알고 계신 내용이지만
파이프라인(pipeline)이라는 것이 무엇이고 하이퍼스레딩 기술은 왜 인텔의 CPU에 적용되게
되었는지에 대한 이유입니다.

자동차 공장에서...
회색의 차량에.. 엔진을 탑재하고... 붉은색으로 도색해서 출고하는 4단계의 과정이 있다고 할때...
이것을 이미지화 시키면 아래와 같은 이미지가 됩니다.



위와같이 작업이진행된다면.... 차량이 도색후 출고되기까지 이전 과정들은 쉬게 됩니다.

즉 위의 시간의 흐름을 1T라고 한다면.. 1T에 생상하는 차량은 1대인것이죠.~!!!
이렇게 생산하는 방식은...장인의 숨결은 느낄수 있겟지만... 상당히 비효율적이라고 생각 되지
않으신가요? 하나의 차량이 완성되기 전의 이전 공정은 쉬고있게 됩니다.

그래서 이것을 보다 효율적인 작업환경으로 만들면...
하나의 작업이 끝나면 다음 작업을 미리 준비시켜 놓고 작업라인을 풀(Full)로 돌리면 보다
효율적이지 않을까요?
그래서 위의 과정을 조금더 효율적으로 바꾼것이 아래와 같은 과정입니다.
(컨베이어 밸트위로 생산품이 지나가면서 완성되는 과정을 떠올리시면 될것입니다.)

동일한 시간에...
완성된 차량한대붉은색 도장작업까지 한 차량 그리고 엔진까지 탑재 한 차량그리고 진입한 차량 더 많이 생산이 가능하게 됩니다.

파이프라이닝
컨베이어 밸트위에서 차량이 완성되듯이
각 명령어들을 풀(Full)로 돌리는 작업라인을 말합니다.


교과서 적으로 말하면... 한 명령어의 수행이 끝나기 전에 다른 명령어의 수행을 시작하는 연산 방법입니다.

CPU로 돌아와서...
파이프라인은 명령어를 처리하는데 있어 단계를 세분화하여 전체적인 처리 효율을 높힌 기술을
말합니다.

이러한 과정을 PC 전공서적에서 보게되면 아래와 같은 이미지가 대다수입니다.

(1) 읽기(Fetch) : 메모리에서 명령을 가져온다
(2) 해석(Decode) : 명령을 해석한다
(3) 실행(Excute) : 명령을 수행한다
(4) 기록(Write Back) : 수행한 결과를 기록한다

A는 파이프라인이 적용되지 않은 경우이고.. B는 파이프 라인이 적용된 경우 입니다.



파이프라인 비 적용시(A): 작업량 = 1/t

파이프라인 적용시(B): 작업량 = 4/4 + 3/4 + 2/4 + 1/4 = (4+3+2+1)/4 = 2.5/t

수치로만 따지면 파이프라인을 적용할 때 2.5배나 더 많은 일을 처리한 것입니다.
그런데 파이프라인을 적용한다고 해서 명령의 수행 시간이 단축되는 것이 아니라는 겁니다.
위의 그래픽에서도 명령 하나의 걸리는 시간은 둘 다 t 만큼으로 동일합니다.
다만 시간당 명령의 처리량을 늘렸다는 것이 파이프라인의 의미가 되겠습니다.

파이프라인의 단계를 늘릴수록 각 단계별 처리 방식은 점점 단순해집니다. 이는 단계별 처리 시간이 단축됨을 의미하며 더 나아가 연산 유닛이 좀 더 높은 클럭으로 동작할 수 있게끔 도와줍니다.  파이프라인의 길이가 길어지면 클럭 스피드도 덩달아 올려놓아야 상생 효과가 있는 것입입니다.
이것이 인텔의 CPU가 높은 클럭에 목숨걸었던 이유이기도 합니다. 인텔의CPU가 AMD보다
파이프라인이 길다는거죠. AMD는 폭이 더 넓습니다.
인텔은 길고 가늘게.. AMD는 굻고 짧게 ^^


그러나 무작정 늘리게 되면 문제가 발생하게 되는데...
바로 모든 연산 단계가 100% 성공률을 보이지 않는다는 것으로 만약 연산이 실패하여 잘못된 결과를 도출하면 이제까지 작업한 분량은 모두 폐기 처분됩니다. 그리고 전체적인 작업시간을 지연시키게 됩니다. 이를 해결하기 위해서 나온게 "지연로드", "분기예측기법"인데.. 이것에 대한 설명은 추후에
다루도록하겠습니다.
위의 내용은 파이프라인(Pipeline)과 그 특성만 말하기 위한것이니까요 ^^




멀티 태스킹(Multi tasking)과 멀티 스레드(Multi-threading)

멀티 스레딩 , Multi threading

간단하게 말하면...
하나의 운영 체계에서 여러 개의 프로세스가 동시에 실행되는
환경이 멀티태스킹(Multi tasking)이고,

하나의 프로세스 내에서 다수의 스레드가 동시에 수행되는 것이
멀티스레딩(Multi-threading)입니다.


프로그램 여려개 띄워서 작업하는걸 멀티 태스킹 이라고하고,
하나의 작업에 여러개의 스레드가 사용되는걸 멀티스레드 입니다.

스레드(Thread)는 컴퓨터 프로그램 수행 시 프로세스 내부에
존재하는 수행 경로로 프로세스보다 작은 단위의입니다.
멀티스레드(Multi-Thread)라 함은 프로세스 내부에 여러개의 스레드가 존재하는 개념입니다.

                       샌디브릿지 프로세서에 적용된 기술들
링크 ☞  샌디 브릿지 - 터보 부스트2.0 (Sandy Bridge Processor Turbo Boost 2.0)
링크 ☞  하이퍼스레딩과 멀티스레드 그리고 인텔의 파이프라인(Hyper-Threading & Pipeline)
링크 ☞  인텔의 AES-NI, TXT, VT-D (AES 명령어 세트, 신뢰 실행 기술, 가상화기술)
링크 ☞  샌디브릿지 AVX 명령어 세트 (Sandybridge AVX instruction set)

                         샌디브릿지 데스크탑 i 시리즈 프로세서의 구분
링크 ☞ 샌디브릿지 데스크탑 CPU 비교 1부 : 종류와 구분 (Sandy Bridge Processor)
링크 ☞ 샌디브릿지 데스크탑 CPU 비교 2부 : 샌디브릿지 내장 그래픽 HD 2000 & HD 3000
링크 ☞ 샌디브릿지 데스크탑 CPU 비교 3부 : 성능 비교 (SandyBridge Processor BenchMark)

                      
Core i3-2105
제품의 스펙과 내용 링크 
링크 ☞ Core i3 2105 & Core i5 2405S (새롭게 출시된 인텔 샌디브릿지 데스크탑 프로세서)

           샌디브릿지 데스크탑 펜티엄(Pentium) 시리즈 프로세서의 구분
링크 ☞ 샌디브릿지 펜티엄 프로세서의 비교와 차이 (Pentium G620, G620T, G840, G850)


     샌디 브릿지 노트북용 모바일 프로세서의 성능은 아래의 링크를 참고하세요.
링크 ☞  샌디브릿지 노트북 CPU (1부 : Core i3 & Core i5)
링크 ☞  샌디브릿지 노트북 CPU (2부 : Core i7)
링크 ☞  샌디브릿지 노트북 CPU (3부 : 내장 그래픽코어 HD Graphics 3000)


하이퍼 스레딩(HTT : Hyper-Threading Technology)
2개의 물리스레드는 4개의 논리 스레드로 만들고 4개의 물리스레드를 8개의 논리스레드로 만들어
주는 향상된 기술이라고 할수도 있지만...
어떻게 보자면 이전에 제대로 사용하지 못하던 CPU의
능력을 100% 뽑아내는 기술이라고 할수있습니다.

파이프라인의 길이가 길면 클럭도 높일 수 있고, 성능도 좋아지지만, 그렇다고 지나치게
길어지면 오히려 파이프라인의 활용 효율이 떨어진다 했습니다.
그래서 파이프라인의 중간 중간에 빈 공간이 생기게 됩니다. 즉 100% 활용을 못한다는 것이죠.


그래서 빈공간에 가상의 스레드를 하나더 만들어주어서 보다 활용도를 높히게
된것이고, 이것이하이퍼스레딩(Hyper-Threading)입니다.
하이퍼스레딩(Hyper-Threading)은 사용하지 않던 자원을 사용하는
기술인데....
가장 효과를 볼수 있는 대표적인 작업은 3D 렌더링입니다.

단점은... 일단 2개의 논리적 스레드가 생성되면 물리적 스레드는 의미가 없어지게
됩니다.
하이퍼스레드 적용 이전에는 단일작업을 할때 스레드 하나가 파이프
라인 전체를 다 독점할 수 있었지만, 이제는 서로 나눠써야 하기 때문입니다.

그리고 파이프라인의 가동율이 높아진건 좋아할 일이지만,
이게 노트북 CPU같은 곳에서는 '전력소모' 증가라는 문제를 일으키기도 합니다.


이러한 현상은 인텔의 CPU에서 더 많이두드러 지는데...  인텔의 파이프라인이 더 길고..
AMD쪽은 짧은대신 폭이 넓다고 했습니다. AMD는 파이프라인의 활용도가 이미 높기 때문에...
하이퍼스레딩의 적용이 어렵습니다.

하이퍼스레딩은 3D 렌더링에서는 큰효과를 보지만... 게임을 위해서 하이퍼스레딩이 적용되었다는
이유만으로 선택하는 것은 기준이 잘못되었습니다. 게임의 경우는 오히려 단일 물리스레드를 사용할때 보다 더 좋은 성능을 가지게 되는 경우가 더 많습니다.

하이퍼스레딩(Hyper-Threading)이 게임에서 효과를 보지 못하는 이유는
멀티 쓰레드를 제대로 활용하지 못하고 있기 때문입니다. 정확히는 멀티 쓰레드는 구현되어 있지만,
각 기능별로 사용할 수 있는 쓰레드가 따로 있거나 각 작업 단위에서의 분해가 제대로 이루어지지
않아 각 기능들이 활용 가능한 쓰레드가 싱글 쓰레드 정도 입니다.


게임 엔진의 완전한 멀티쓰레드 활용이 쉽지 않은 이유로 가장 먼저 꼽을 수 있는 것은
구현의 ‘난이도’ 인데... 실시간 처리로 결과까지 모두 내야 하는 상황에서 완벽하게 다중 쓰레드에서 규모가변성과 쓰레드간의 안정성을 보장하는 엔진을 구현하기는 대단히 힘듭니다.
또한 멀티쓰레드 프로그램의 특성상 쓰레드간의 충돌 등 상황이 계속 달라지는 덕분에
기존의 방법으로는 디버깅조차 어렵습니다.





Posted by Rapter
,