Daybreakin Things

Posted
Filed under 컴퓨터

...뭐 다 그런 법이다.

PS 인공지능 프로젝트를 할 때 멀티스레드를 썼었는데, 요즘 관심을 갖고 있는 게임인 Supreme Commander도 그렇고 하나의 CPU에 물리적으로 두 개의 연산 코어가 내장된 멀티코어 cpu를 지원하는 프로그램들이 점점 늘어나는 추세이다. 그래서, 단순히 스레드를 생성하는 것 외에, 정말로 코어별로 할당하는 API 같은 게 있나 궁금해졌다. -_-;

그래서 찾아낸 것은 SetThreadIdealProcessor 함수다. 아직 Linux에서는 어떻게 하는지 모르겠으나(OpenMP라는 것이 있는 것 같긴 한데.. 사실 서버 관련해서 리눅스 쪽에서 써먹을 일이 더 많을 것 같다), 윈도우 프로그래밍이라면 멀티코어를 지원하는 NT 계열에서는 다 써먹을 수 있으니 꽤 편리할 것 같다.

멀티코어 시스템에서 돌아가는 윈도우즈에서는 작업관리자에서 프로세스를 오른쪽 클릭하면 '선호도 설정'이라는 메뉴가 생긴다. 이것은 해당 프로세스가 어떤 코어에서 돌게 할 것인지 선택하는 것인데, 역시 API로도 존재한다. 자신이 어느 코어에서 돌도록 할당되었는지 알아내거나 설정하는 GetProcessAffinityMask 함수가 있었다. (Set 함수도 있음)

왜 .NET Framework에 포함이 안 되어 있는지는 모르겠으나(적어도 내가 찾아본 바로는 관련 클래스나 메소드/속성 등이 없었다) 앞으로 멀티스레드 프로그램을 짤 때 써먹으면 좋을 것 같다. 언제 한 번 테스트 프로그램이나 만들어봐야지;