次の方法で共有


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
1 つのプロセッサ コアを共有する論理プロセッサに関する情報を取得します。
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 で、少なくとも 1 つの SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX 構造体が出力バッファーに書き込まれます。

関数が失敗した場合、戻り値は FALSE になります。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

WOW64 で実行されている 32 ビット プロセスが、64 を超えるプロセッサを持つシステムでこの関数を呼び出した場合、関数によって返されるプロセッサ アフィニティ マスクの一部が正しくない可能性があります。 これは、すべての 64 プロセッサを表す 64 ビット KAFFINITY 構造体の高次 DWORD が、呼び出し元のバッファー内の 32 ビット KAFFINITY 構造体に "フォールド" されるためです。 その結果、プロセッサ 32 から 63 のアフィニティ マスクは、プロセッサ 0 から 31 のマスクの重複として正しく表されません。 さらに、プロセッサ 32 から 63 のアフィニティ マスクは、プロセッサ 0 から 31 のマスクの重複として正しく表されません。 さらに、PROCESSOR_GROUP_INFO構造体で報告されるすべてのグループごとの ActiveProcessorCount 値と MaximumProcessorCount 値の合計によって、一部のアクティブな論理プロセッサが除外される場合があります。

この関数が 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
ヘッダー sysinfoapi.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX