윈도우 작업관리자에서 프로세스를 선택하고, 우클릭 버튼을 누르면 "선호도 설정 (A)"이라는 메뉴가 나오는데 해당 메뉴를 클릭하면 아래와 같이 프로세서 선호도 다이얼로그가 나타난다.
여기서 해당 프로세스를 처리할 CPU를 선택하게 되면 지정한 CPU만이 해당 프로세스를 실행하는데 관여하게 된다. 간혹 멀티 프로세서 처리가 원활하지 못한 프로세스의 경우 프로그램 실행도중 오류가 발생하게 되는데, 이런 경우 선호 CPU를 선택해 하나의 CPU에서만 처리하도록 지정하여 주면 오류율이 떨어지는 경우가 있다.
위와 같이 윈도우에서 매번 수작업으로 처리하기 번거로운 경우, 프로세스 런쳐를 이용하여 해당 프로세스가 실행되면 자동으로 지정 CPU를 사용할 수 있게 작업할수 있는데, 이와 관련된 Windows API가 아래의 2가지 API이다.
GetProcessAffinityMask( hProcess: Cardinal; var procAFMask, sysAFMask );
SetProcessAffinityMask( hprocess: Cardinal; ProcessAffinityMask: Cardinal );
예를들어 8개의 CPU가 있다고 가정하면, 각 CPU의 BitMask는 아래와 같다.
BitMask CPU's
========= =========
00000001 1st CPU
00000010 2nd CPU
00000100 3rd CPU
00001000 4th CPU
00010000 5th CPU
00100000 6th CPU
01000000 7th CPU
10000000 8th CPU
========= =========
00000001 1st CPU
00000010 2nd CPU
00000100 3rd CPU
00001000 4th CPU
00010000 5th CPU
00100000 6th CPU
01000000 7th CPU
10000000 8th CPU
여기서 1번 CPU만 활용하고자 할 경우 다음과 같이 처리해준다.
Example:
Var ProcAFMask, SysAFMask : Cardinal; Begin { 현재 설정되어 있는 내용 확인 } GetProcessAffinityMask( GetCurrentProcess, ProcAFMask, SysAFMask); SysAFMAsk := $00000001; // 1번 CPU만 사용하도록 Masking { CPU 설정 } SetProcessAffinityMask( GetCurrentProcess, SysAFMAsk); End;