다중 코어 시스템의 단일 CPU에서만 실행되도록 Windows 환경에서 단일 프로세스 프로그램 실행을 제한하는 방법은 무엇입니까?
윈도우 프로그램과 명령 행 프로그램간에 동일합니까?
최신 정보:
- 이를 수행하는 이유 : 다양한 프로그래밍 언어 측면 벤치마킹
- 프로세스의 처음부터 작동 할 수있는 것이 필요하므로 @akseli의 대답은 다른 경우에는 훌륭하지만 내 경우를 해결하지 못합니다.
다중 코어 시스템의 단일 CPU에서만 실행되도록 Windows 환경에서 단일 프로세스 프로그램 실행을 제한하는 방법은 무엇입니까?
윈도우 프로그램과 명령 행 프로그램간에 동일합니까?
최신 정보:
답변:
Windows Vista / 7 (XP 일 수도 있지만 확실하지는 않음)을 실행하는 경우 실제로 간단합니다.
작업 관리자를 시작하려면 입력 Control+Shift+Esc
하십시오.
프로세스 탭을 클릭하십시오
프로세서 선호도를 변경해야하는 프로세스 찾기
프로세스를 마우스 오른쪽 버튼으로 클릭
"친 화성 설정"을 클릭하십시오
여기서 프로세스에서 사용할 프로세서를 선택할 수 있습니다.
행운을 빕니다!
편집 :이 작업을 수행하려면 관리자 여야합니다.
명령 행에서
/ affinity 1 program.exe 시작
"1"은 선호도 마스크 의 16 진수 값이므로 첫 번째 CPU에서 program.exe를 실행합니다.
CPU3 CPU2 CPU1 CPU0 Bin Hex
---- ---- ---- ---- --- ---
OFF OFF OFF ON = 0001 = 1
OFF OFF ON OFF = 0010 = 2
OFF OFF ON ON = 0011 = 3
OFF ON OFF OFF = 0100 = 4
OFF ON OFF ON = 0101 = 5
OFF ON ON OFF = 0110 = 6
OFF ON ON ON = 0111 = 7
ON OFF OFF OFF = 1000 = 8
ON OFF OFF ON = 1001 = 9
ON OFF ON OFF = 1010 = A
ON OFF ON ON = 1011 = B
ON ON OFF OFF = 1100 = C
ON ON OFF ON = 1101 = D
ON ON ON OFF = 1110 = E
ON ON ON ON = 1111 = F
당신이하고자하는 것에 달려 있습니다 :
방법 1 : 주문형
ImageCFG를 사용하십시오 . 이 유틸리티를 사용하면 여러 코어에서 실행되도록 실행 파일을 설정할 수 있습니다. 변경하기 전에 대상 실행 파일을 백업하고 재생이 끝나면 복원하십시오.
방법 2 : 전체 Windows 세션 강제 실행 (Vista / 7)
bcdedit /set onecpu on
명령 프롬프트에 입력bcdedit /set onecpu off
하고 다시 재부팅하십시오.방법 2 : 전체 Windows 세션 강제 실행 (XP)
파일에서 다음 (또는 유사한) 섹션을 찾을 수 있습니다.
[운영체제]
멀티 (0) 디스크 (0) rdisk (0) 파티션 (2) \ WINDOWS = "Microsoft Windows XP Professional"/ fastdetect
/ onecpu 플래그를 추가하여 변경하십시오.
[운영체제]
멀티 (0) 디스크 (0) rdisk (0) 파티션 (2) \ WINDOWS = "Microsoft Windows XP Professional"/ fastdetect / onecpu
재부팅하십시오. 재생이 끝나면 플래그를 제거하고 다시 재부팅하십시오.
방법 0 : 좋은 방법이 아님 (프로세서 선호도)
프로세서 선호도와 관련이있는 것은 좋은 선택이 아닙니다. 프로세서 선호도는 프로세서의 실마리입니다. 프로세서는 프로세서를 존중할 의무가 없으며 종종 그렇지 않습니다.
D:\>bcdedit /set onecpu
결과는 The set command specified is not valid.
....The parameter is incorrect.
파이썬 2.6의 프로그램에 다음 함수를 넣고 Windows 함수를 호출합니다. 내 컴퓨터에는 코어가 두 개뿐이므로 해당 부분을 변경해야 할 수도 있습니다. 의견은 현재 선호도가 무엇인지 확인하는 방법을 알려줍니다. 마스크를 1로 설정하거나 기본값으로 설정하면 단일 코어 시스템에 대해 "있는 그대로"작동합니다.
def setaffinitymask(pid = None, mask = 1):
""" Set The Affinity Mask of a Windows Process. Affinity Mask is a value between 1-3 where
1 is for core 0, 2 is for core 1, 3 is for both cores (it is a bitmap)
Default sets the Affinity Mask to core 0 only
python process can take any valid process ID. """
import win32api, win32process, win32con
if pid == None:
pid = win32api.GetCurrentProcessId()
if mask == None:
mask = 1
if mask < 1 or mask > 3:
mask = 1
print 'process affinity mask out of range [1..3] setting it to 1'
handle = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, True, pid)
# see what mask is currently set to
# processAffinityMask, systemAffinityMask = win32process.GetProcessAffinityMask(handle)
# print 'process affinity mask = ', processAffinityMask, ', system affinity mask = ', systemAffinityMask
# set affinity for process to mask value
win32process.SetProcessAffinityMask(handle, mask) # 1=core 0, 2=core 1, 3=both
processAffinityMask, systemAffinityMask = win32process.GetProcessAffinityMask(handle)
#print 'process affinity mask = ', processAffinityMask, ', system affinity mask = ', systemAffinityMask
Windows 8에서는 선호도 설정을 수행하려면 작업 관리자의 세부 사항 탭으로 이동해야합니다. 프로세스 탭에서 옵션을 제공하지 않습니다.
편집 : 또한 시작하려는 프로그램에 매개 변수가있는 경우이 스레드가 유용 할 수 있습니다. 'start'명령으로 Windows의 cmd에서 명령 줄 인수로 프로그램을 시작하는 방법은 무엇입니까?
PowerShell을 사용하여 매우 유사한 정보를 찾으려고 여기에서 필요한 정보를 찾았습니다. http://www.energizedtech.com/2010/07/powershell-setting-processor-a.html
사용중인 Windows OS에 대해서는 언급하지 않았습니다 (구형의 Windows OS는 PowerShell과 함께 제공되지 않았지만 설치할 수는 있지만).
가장 빠른 점은 PowerShell에서 프로세스 선호도는 단순히 변경할 수있는 속성이라는 것입니다.
프로세스의 속성 (및 기타 정보)을 보려면 (foo를 예제 프로세스로 사용) PowerShell 명령은 다음과 같습니다.
Get-Process foo | 회원 가입
ProcessorAffinity가 이러한 속성 중 하나임을 알 수 있습니다. 그것을 바꾸는 것은 사소한 것이며, 위의 Revolter의 테이블 / 링크 값을 사용하여 실행할 코어를 선택할 수 있습니다.
ProcessorAffinity 특성의 값이 foo인지 확인하려면 다음 명령을 사용하십시오.
(Get-Process foo) .ProcessorAffinity
따라서 CPU 4에서만 foo를 실행하려면 값을 다음과 같이 설정하십시오.
(Get-Process foo) .ProcessorAffinity = 8
start /affinity
. 당신의 기술이 그렇게 할 수 있습니까? 그렇다면 어떻게 설명하십시오.
Start-Process foo ; (Get-Process foo).ProcessorAffinity=8
그러나, 귀하의 의견을 읽고 Start-Process
누락 된 선호도 플래그가있는 것을 발견 한 후 , 나는 다음을 테스트했습니다. [System.Diagnostics.Process]::start("foo.exe").ProcessorAffinity=0x0010