2010-07-29 1 views
5

특정 스레드 ID로 스레드가 사용하는 실제 프로세서 (코어)를 식별 할 수 있는지 알고 싶습니다.프로세서 (코어)가 특정 스레드에 의해 사용됨

예를 들어 2 개의 스레드 (threadid = 10 및 threadid = 20)가있는 다중 스레드 응용 프로그램이 있습니다. 듀얼 코어 프로세서 (코어 1 및 코어 2)가있는 시스템에서 응용 프로그램을 실행합니다. 그래서 코어 수를 알 수있는 방법은 threadid = 20 인 쓰레드에 의해 사용됩니까?

P. Windows 플랫폼.

감사합니다.

데니스.

답변

3

스레드 선호도를 사용하지 않는 한 스레드는 특정 코어에 할당되지 않습니다. 매 시간 슬라이스마다 스레드를 다른 코어에서 실행할 수 있습니다. 즉, 스레드의 핵심을 가져 오는 함수가 있으면 반환 값을 얻을 때까지 스레드가 이미 다른 코어에서 실행되고있을 가능성이 큽니다.

스레드 선호도를 사용하는 경우 Windows 스레드 유사성 기능 (http://msdn.microsoft.com/en-us/library/ms684847%28v=VS.85%29.aspx)을 살펴볼 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. Patrick! 그래서 또 다른 질문이 나타납니다 - 특정 스레드가 특정 코어에서 얼마나 많은 시간을 실행하는지 알 수 있습니까? (예를 들어, 일부 스레드는 코어 1에서 타임 슬라이스의 20 %를 실행하고 타임 슬라이스의 80 %는 코어 2에서 실행 함) – DenisL

+0

Denis에 대해 알고 있습니다. 당신이 할 수있는 것은 특정 코어로 스레드를 제한하는 것입니다 (이것을 스레드 선호도라고합니다). 어쩌면 각 스레드가 하나의 코어에 할당 된 여러 스레드에서 프로세스를 분할 할 수 있습니다. 원래 문제가 무엇인지 설명 할 수 있습니까? (원래의 질문으로 이어진다) 어쩌면 당신의 문제는 다른 방법으로 해결 될 수도있다. – Patrick

+0

두 개의 함수를 작성해야합니다. 1. 첫 번째 함수는 특정 스레드 ID별로 총 멀티 코어 프로세서 사용을 반환합니다. 성능 카운터 기능을 사용하여이 기능을 구현했습니다. 2. 두 번째 함수는 특정 스레드 ID별로 특정 코어 사용을 반환합니다. 나는 함수를 만드는 방법을 모른다. 불가능하다. – DenisL

2

GetCurrentProcessorNumber (Server 2003 및 Vista 이후 사용 가능) 및 GetCurrentProcessorNumberEx (Server 2008 R2 및 Windows 7 이후 사용 가능)이라는 기능이 있습니다.

관련 옵션 및 고려 사항 (Windows XP - 주로 this answer describing the use of cpuid instruction 포함)은 this question's answers을 참조하십시오.

물론 코어 번호는 스케줄러에서 언제든지 변경할 수 있습니다. 따라서 필요한 경우 코어 번호를 확인하기 전에 확인해야 할 수도 있습니다. 시간의 양, 그리고 코어 넘버가 여전히 동일하다면 중간 코드가 가장 많이 실행 된 코어를 알 수 있습니다.