Поделиться через


Функция GetLogicalProcessorInformationEx (sysinfoapi.h)

Извлекает сведения о связях логических процессоров и связанного оборудования.

Синтаксис

BOOL GetLogicalProcessorInformationEx(
  [in]            LOGICAL_PROCESSOR_RELATIONSHIP           RelationshipType,
  [out, optional] PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Buffer,
  [in, out]       PDWORD                                   ReturnedLength
);

Параметры

[in] RelationshipType

Тип извлекаемой связи. Этот параметр может быть одним из следующих LOGICAL_PROCESSOR_RELATIONSHIP значений .

Значение Значение
RelationProcessorCore
0
Извлекает сведения о логических процессорах, использующих одно ядро процессора.
RelationNumaNode
1
Извлекает сведения о логических процессорах, которые являются частью одного узла NUMA.
RelationCache
2
Извлекает сведения о логических процессорах, которые совместно используют кэш.
RelationProcessorPackage
3
Извлекает сведения о логических процессорах, которые совместно используют физический пакет.
RelationGroup
4
Извлекает сведения о логических процессорах, которые совместно используют группу процессоров.
RelationProcessorDie
5
Извлекает сведения о логических процессорах, которые совместно используют процессор.
RelationNumaNodeEx
6
Извлекает сведения о логических процессорах, которые являются частью одного узла NUMA (с полным сходством).
RelationProcessorModule
7
Извлекает сведения о логических процессорах, которые совместно используют процессорный модуль.
RelationAll
0xffff
Извлекает сведения о логических процессорах для всех типов связей (кэш, узел NUMA, ядро процессора, физический пакет, группа процессоров, размер процессора и модуль процессора).

[out, optional] Buffer

Указатель на буфер, который получает последовательность структур SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX переменной величины. Если функция завершается сбоем, содержимое этого буфера не определено.

[in, out] ReturnedLength

На входных данных указывает длину буфера, на который указывает buffer, в байтах. Если буфер достаточно велик, чтобы содержать все данные, эта функция выполняется успешно, и для параметра ReturnedLength задается количество возвращаемых байтов. Если буфер недостаточно велик, чтобы вместить все данные, функция завершается сбоем, GetLastError возвращает ERROR_INSUFFICIENT_BUFFER, а returnedLength имеет длину буфера, необходимую для хранения всех данных. Если функция завершается ошибкой, отличной от ERROR_INSUFFICIENT_BUFFER, значение ReturnedLength не определено.

Возвращаемое значение

Если функция выполняется успешно, возвращаемое значение равно TRUE, и по крайней мере одна SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX структура записывается в выходной буфер.

Если функция завершается сбоем, возвращается значение FALSE. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Если 32-разрядный процесс, выполняющийся в WOW64, вызывает эту функцию в системе с более чем 64 процессорами, некоторые маски сходства процессоров, возвращаемые функцией, могут быть неверными. Это связано с тем, что DWORD высокого порядка 64-разрядной структуры KAFFINITY , представляющей все 64 процессора, "сложено" в 32-разрядную структуру KAFFINITY в буфере вызывающего объекта. В результате маски сходства для процессоров от 32 до 63 неправильно представлены как дубликаты масок для процессоров от 0 до 31. Кроме того, маски сходства для процессоров с 32 по 63 неправильно представлены как дубликаты масок для процессоров от 0 до 31. Кроме того, сумма всех значений ActiveProcessorCount и MaximumProcessorCount для каждой группы, указанных в PROCESSOR_GROUP_INFO структурах, может исключить некоторые активные логические процессоры.

При вызове этой функции с типом связи RelationProcessorCore она возвращает PROCESSOR_RELATIONSHIP структуру для каждого активного ядра процессора в каждой группе процессоров в системе. Это связано с тем, что неаффинизованный 32-разрядный поток может выполняться на любом логическом процессоре в заданной группе, включая процессоры от 32 до 63. 32-разрядный вызывающий объект может использовать общее количество PROCESSOR_RELATIONSHIP структур для определения фактического числа активных ядер процессора в системе. Однако сходство 32-разрядного потока нельзя явно задать для логического процессора от 32 до 63 любой группы процессоров.

Чтобы скомпилировать приложение, использующее эту функцию, задайте _WIN32_WINNT >= 0x0601. Дополнительные сведения см. в разделе Использование заголовков Windows.

Поведение, начиная с Windows Server 2022 (21H2, сборка 20348)

Поведение этой и других функций NUMA было изменено для улучшения поддержки систем с узлами, содержащими более 64 процессоров. Дополнительные сведения об этом изменении, включая сведения о включении старого поведения этого API, см. в разделе Поддержка NUMA.

Запросы для RelationNumaNode будут возвращать NUMA_NODE_RELATIONSHIP структуры, содержащие только сходство узла в его основной группе. Значение GroupCount будет равно 1, а размер структуры является фиксированным.

Запросы RelationNumaNodeEx или RelationAll будут возвращать NUMA_NODE_RELATIONSHIP структуры, содержащие массив сходств для узла во всех группах. GroupCount сообщает о количестве сходств, а размер структуры является переменным.

Требования

Требование Значение
Минимальная версия клиента Windows 7 [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 R2 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header sysinfoapi.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX