< 目次

異種コアでのパフォーマンス管理

ハイブリッド・アーキテクチャーでは、異種の CPU コアを提供します。たとえば、第 12 世代インテル® Core™ プロセッサー (開発コード名 Alder Lake) には、次の 2 種類のコアが含まれています: パフォーマンス・コア (P-コア) とエフィシエント・コア (E-コア)。

異種コアによる負荷分散が複雑になるため、ハイブリッド・アーキテクチャーで最高のパフォーマンスを実現することは困難です。したがって、Alder Lake のようなハイブリッド・アーキテクチャーでは、スレッドを P-コアでのみ実行することを推奨します。このアプローチでは最高のパフォーマンスを得られないかもしれませんが、シンプルで予測可能です。

OpenMP* で P-コアを指定するには、環境変数 KMP_HW_SUBSET を使用できます。この環境変数の詳細な説明については、『インテル® C++ コンパイラー・クラシック・デベロッパー・ガイドおよびリファレンス』 (英語) を参照してください。8 つの P-コアを備えた Alder Lake プロセッサーの場合、次の 2 つのコマンドのどちらかを使用して、スレッドが P-コアでのみ実行されるように制限できます。

set KMP_HW_SUBSET=8c:intel_core

—または—

set KMP_HW_SUBSET=8c:eff1

さらに高いパフォーマンスを得るには、P-コア上のインテル® ハイパースレッディング・テクノロジーを無効にする必要があることに注意してください。これを実現するには、BIOS 設定を変更するか、次のコマンドで KMP_HW_SUBSET 環境変数を使用して P-コアとコアあたり 1 スレッドを指定します。

set KMP_HW_SUBSET=8c:intel_core,1t

—または—

set KMP_HW_SUBSET=8c:eff1,1t

ユーザーがパフォーマンスを最大化するため P-コアと E-コアの両方を使用するさらに複雑なアプローチの採用を決めた場合、いくつか考慮すべき点があります。

P-コアと E-コアの数が同数、または同数で両方のコアタイプが使用される場合、ワーク項目の分割に静的負荷分散を使用すると、E-コアが割り当てられたワーク項目の完了に時間がかかるため、パフォーマンスが低下する可能性があります。大規模な GEMM および {S,D}GETRF ルーチンの場合、oneMKL は OpenMP* による動的負荷分散により、最適な負荷分散スキームを自動的に選択します。問題のサイズが小さい、または通常である場合、P-コアでの静的負荷分散によりパフォーマンスが向上する可能性が高くなります。問題のサイズが非常に大きい場合、動的スケジュールのオーバーヘッドは全体の計算時間に比べて小さくなるため、動的負荷分散によって P-コアと E-コアがより効率良く使用できます。

P-コアの数が E-コアの数より少ない場合、すべてのコアで実行すると、計算を P-コアのみに制限するよりもパフォーマンスが向上する可能性があります。最善の方針を決定するには、さらにパフォーマンス測定が必要になります。

OpenMP* の代替として、ユーザーは oneTBB を選択することもできます。これにより、サポートされている特定の操作セットでより良い結果が得られる可能性があります。

製品および性能に関する情報

性能は、使用状況、構成、およびその他の要因によって異なります。詳細については、www.Intel.com/PerformanceIndex (英語) をご覧ください。

改訂 #20201201