Определить процессор (ядро) используется конкретным потоком - PullRequest
6 голосов
/ 30 июля 2010

Я хотел бы знать, возможно ли идентифицировать физический процессор (ядро), используемый потоком, с конкретным thread-id?

Например, у меня есть многопоточное приложение, которое имеет два (2) потока (например, thread-id = 10 и thread-id = 20). Я запускаю приложение в системе с двухъядерным процессором (ядро 1 и ядро ​​2). Итак, как мне получить номер ядра, используемый потоком с thread-id = 20?

P.S. Платформы Windows.

Спасибо,

Денис.

Ответы [ 2 ]

7 голосов
/ 30 июля 2010

Если вы не используете привязку потоков, потоки не назначаются конкретным ядрам. С каждым отрезком времени поток может выполняться на разных ядрах. Это означает, что если бы существовала функция для получения ядра потока, к тому времени, когда вы получите возвращаемое значение, есть большая вероятность, что поток уже выполняется на другом ядре.

Если вы используете привязку к потоку, вы можете взглянуть на функции привязки к потоку Windows (http://msdn.microsoft.com/en-us/library/ms684847%28v=VS.85%29.aspx).

3 голосов
/ 19 декабря 2013

Существуют функции с именами GetCurrentProcessorNumber (доступны с Server 2003 и Vista) и GetCurrentProcessorNumberEx (доступны с Server 2008 R2 и Windows 7).

См. Также ответы на этот вопрос для получения информации о дополнительных параметрах и соображениях (включая Windows XP - в основном этот ответ, описывающий использование инструкции cpuid ).

Конечно, номер ядра может быть изменен планировщиком в любое время, поэтому, если Вам необходимо быть уверенным, возможно, это поможет за разумную сумму, если Вы проверяете номер ядра как до, так и после того, что Вы измерили или выполнили за короткую сумму времени, и если номер ядра остается прежним, то вы знаете, на каком ядре, скорее всего, также выполнялся промежуточный код.

...