2011-11-07 2 views
2

나는 멀티 스레드 프로그램을 가지고 있으며 모든 스레드를 자체 코어 (CPU, 프로세서, 뭐든간에)에 넣을 수있는 옵션을 추가하라는 요청을 받았습니다.각 스레드가 실행중인 프로세서를 어떻게 찾을 수 있습니까?

SetThreadAffinityMask()을 사용하여 코드를 작성했습니다. 프로세스의 기본 선호도 마스크를 얻고 충분한 프로세서가 있는지 확인한 다음 사용 가능한 프로세서 중 하나만 포함하도록 각 스레드의 선호도 마스크를 설정합니다 (각 스레드마다 다름).

이 모든 것이 컴파일 및 문제없이 실행되는 것처럼 보이지만 실제로 작동하는지 어떻게 확인합니까?

스레드가 실행중인 CPU를 보여주는 모니터링 도구가 있어야하지만 찾지 못하는 것 같습니다. ProcessExplorer은 스레드의 CPU 사용률을 표시하지만 발생한 CPU는 표시하지 않습니다. perfmon에서 사용할 수있는 가능한 카운터를 살펴 보았지만 다시 CPU 사용률 만 %를 찾을 수있었습니다.

GetThreadAffinityMask()를 수행하고이를보고했지만 나에게 SetThreadAffinityMask()를 올바로 호출했다고보고 할 것입니다.

그래서 나는 SetThreadAffinity()가 내가 원하는 것을 정확히 수행 할 것이라는 믿음으로 받아 들여야 만 할까?

(참고 : 겉보기에는 비슷한 질문이 있지만 실제로이 특정 질문에 대한 대답은 없습니다.)

답변

2
+1

전체 실행 중에 프로세서 번호가 유지되도록하려면이 함수로 샘플링해야 할 수 있습니다. – Tudor

+0

흠. 이렇게하려면 각 스레드를 수정하여이 스레드를 모니터해야합니다. 나는 그것을하기 위해 임시 디버그 코드를 작성할 수 있다고 생각한다. 최적은 아니지만 거지는 선택자가 될 수 없습니다. –

+1

... XP 수준 라이브러리로 컴파일 중이지만이 링크는 그 작은 문제를 해결했습니다. https://www.scss.tcd.ie/Jeremy.Jones/GetCurrentProcessorNumberXP.htm –

1

당신은 현재 실행중인 스레드의 프로세서 수를 얻을 수 GetCurrentProcessorNumber를 호출 할 수 있습니다.

관련 문제