|
몇 달 전 아래와 같은 기사를 볼 수 있었다 (파코즈 또는 관련 해외 기사):
하이퍼스레딩은 하나의 CPU가 마치 두 개처럼 보이게 하지만, 대부분의 실행 자원과 캐시는 공유된 채 스레드 문맥 교환 비용만 없어지도록 한다. 그래서 운영체제가 똑같은 CPU로 간주하고 스케쥴링을 하면 별로 좋지 않은 성능이 나올 수 있을 것이다. 예를 들어, 바쁘게 돌아가는 두 스레드를 하이퍼스레딩 관계의 두 논리 CPU에 할당하면 얘들 끼리 한정된 캐시나 실행 자원을 가지고 서로 경쟁하기 때문에 오히려 성능 하락이 있을지도 모른다. 따라서 운영체제가 하이퍼스레딩을 인지하여 더 똑똑하게 스케쥴링 로직을 짜는 것은 합당한 일이다. 윈도우 7을 이제 본격적으로 쓰기 시작했는데, 비스타와는 다른 스케쥴링을 목격할 수 있었다. ![]() 좌로부터 각각 한 쌍의 CPU 중 한 녀석에게 주로 일감이 있음을 볼 수 있다. Core i7은 쿼드 코어지만 하이퍼스레딩으로 총 8개의 논리 CPU가 보인다. 좌로부터 0, 1, …, 7로 번호를 붙이면, 0번과 1번 CPU가 서로 하이퍼스레딩 관계다. 마찬가지로 2와 3, 4와 5, 6과 7도 그러하다. 위 그림을 보면 최대한 하이퍼스레딩으로 만들어진 두 코어에 동시에 작업을 주지 않고, 물리적으로 다른 코어에 작업을 배치함을 알 수 있다. 0-1을 보면 0번이 주로 사용되고 있다. 비슷하게 1-2, 3-4, 5-6에서도 각각 한 녀석만 주로 스케쥴링 되고 있다. 어차피 전체 CPU 사용률이 20%도 안되기에 여유가 많다. 이럴 때는 하이퍼스레딩의 부작용을 막고자 최대한 물리적으로 다른 코어에 우선 순위를 주어 스케쥴링 함을 쉽게 유추할 수 있다. 물론 정확한 스케쥴링 알고리즘은 알 수 없다. 그런데 전체 사용율을 대략 40%까지 올려보며 테스트 해보았는데 충분히 이러한 사실을 확인할 만큼 CPU 사용율이 잘 분배되었다. 비스타에서는 이러하지 않았다. 같은 상황이라면 8개 CPU가 고르게 분배되곤 했다. 이 예에서 보듯, 윈도우 7은 이제는 기본이 된 멀티 코어를 더 효율적으로 이용한다. 몇 가지 예는 더 찾아 볼 수 있다. 윈도우 7은 멀티 코어를 적극 활용해 하드웨어 초기화 시간을 줄여 부팅 시간을 단축했다고 한다. 또, 비스타부터 도입된 새로운 데스크탑 그래픽 엔진(DWM)도 병행성을 늘리도록 프로그램을 개선하여, 여러 프로그램을 돌렸을 때 더 나은 확장성을 얻을 수 있었다.
윈도우 7의 구현은 더욱 똑똑해졌습니다(라고 쓰고 비스타의 구현은 참 멍청했구나라고 이해합니다) 이렇게 하드웨어가 멀티 코어화 되니 운영체제도 여기에 대응을 하고 있다. 맥 OS X의 최신 버전 Snow Leopard도 OpenCL(솔직히 거의 CUDA를 그냥 베낀 것 같은데)이라는 GPU를 보다 활용할 수 있는 녀석을 제공한다. 솔직히 일반 사용자에게 큰 영향을 주는 것은 아니다. 비유하자면, 그냥 nVidia CUDA 같은 녀석이나 DirectX가 그냥 깔려 배포된다고 보면 된다. 그러나 어쨌든 OS X 개발자들이 OpenCL에 더 쉽게 다가갈 수 있게 되었다. 여러분의 소프트웨어는 어떻게 좀 멀티 코어를 고려하고 있습니까?
최근 등록된 덧글
개발자 입장에서의 수많은 ..
by Jiyoon at 02/04 저도 아들 돌잔치때 돌잡이 .. by 박상욱 at 01/18 미국 대학원 원서 작성중에 p.. by 태클사이야 at 01/13 TO: 박PD 로그인 하지 않아.. by 박응용 at 01/10 http://gigglehd.com/zbx.. by dhunter at 12/28 우와.. 좋네요. 태반이 .. by 윤광배 at 12/17 항상 좋은 글 잘 보고 있습니.. by y2k at 11/23 글이 좋아서 제 블로그에 담.. by 쏭섭 at 11/23 최근 등록된 트랙백
메뉴릿
이글루 파인더
|