Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

cgiosy.dev

하이퍼스레딩 본문

카테고리 없음

하이퍼스레딩

cgiosy 2022. 7. 8. 21:45

현대 CPU는 코어 당 한 사이클에 최대 3 - 4개 정도의 micro intrinsics를 처리 가능하다. 하지만 고도로 최적화된 프로그램이 아닌 한, 상당수가 기껏해야 0.5개 정도를 쓰는 것에 그친다.
여기엔 여러 이유가 있으나, 보통 메모리 레이턴시가 주 원인이다. CPU가 아무리 병렬화, OoO를 위해 노력해도 메모리를 읽어와야 해서 흐름이 끊기거나, 명령어들이 서로 아주 긴밀하게 얽혀 있는 등의 상황에선 성능을 완전히 활용할 수 없는 것이다.

이를 위해 메모리 읽기를 비롯한 각종 연산 사이에 동일 코어에 배정된 다른 스레드를 실행하는 기술이 고안됐고, 이것이 하이퍼스레딩이다.
활성화할 경우 한 코어 위에서 여러 프로그램들이 돌아갈 때나, 멀티스레드 프로그램의 경우 성능이 유의미하게 향상되는 편이다. 이 때 CPU의 실제 코어를 물리(physical) 코어라 부르고, 각 코어에서 하이퍼스레딩이 적용되는 스레드 수를 고려한 값을 논리(logical) 코어 혹은 그냥 CPU의 스레드 수라고 한다.

따라서 멀티스레드 프로그램 개발 혹은 사용 시, 해당 프로그램의 성향에 따라 실행할 스레드 수를 물리 코어 기준으로 잡을지, 논리 코어 기준으로 잡을지 고려해보는 게 좋을 듯 하다.

만약 고도로 최적화된 프로그램의 경우, 메모리 레이턴시의 영향과 연산들 간의 간섭이 최소한이 되도록 설계됐을 가능성이 높다. 예로는 빠른 해시 / 압축 알고리즘 등이 있는데, 이 경우 하이퍼스레딩은 도움되지 않을 수 있다.
물론 하이퍼스레딩이 도움될 상황이 정말로 전혀 없는지는 면밀히 검토해봐야 할 것이다. 가령 압축의 경우, 압축 레벨을 높이고 더 큰 사전 파일을 사용할 수록 메모리(및 캐시) 레이턴시의 영향이 커져 하이퍼스레딩이 유의미해진다.

References

zstd GitHub - Issue #2071
Intel - What is Hyper-Threading?

Comments