元半導体設計屋 筑秋 景のシリコン解体新書

Meteor Lakeはどのように3種類のコアを制御するのか

 前回の記事で、Intelの次期プロセッサ「Meteor Lake(コードネーム)」での“最も電力効率の高いクライアントSoCを構築することを目指す”という開発目標について、そのアーキテクチャを4タイル構成の観点から解説した。今回はこのアーキテクチャがどのように動作していくのかを解説する。

 Meteor Lakeの前世代Alder Lake、Raptor LakeでP-コアとE-コアファミリーが導入された。P-コアはシングルスレッドでの高パフォーマンスを提供し、スレッドあたりの性能は最速と言える。一方、E-コアは、スケーラビリティを実現するマルチスレッド向けで電力的に高効率なコアであるため、同じ電力予算でのマルチスレッドのパフォーマンスが必要な場合など、状況に合わせて拡張できる。

 これにMeteor Lakeでは、SoC タイルE-コア(LP E-コア)を追加した。これらは、新たにアーキテクチャに追加したLP E-コアであり、低電力とエネルギー効率を実現するために用意された。

 これらのコア(P-コア、E-コア、LP E-コア)は、異なるコード階層に対して同じ命令セットを使用する。ISA(命令セットアーキテクチャ)は同じである第12世代Coreで、インテル・スレッドディレクターとともに導入されたこれらのコアは、マイクロアーキテクチャの違いにより、パフォーマンスが異なる場合がある。スレッドディレクターがOSに、どのコアをどのタスクに推奨するかでパフォーマンスが変化するということのようだ。

 OSにはすでにMeteor Lake向けのCPU電力管理の改善が加えられている。そして、その全てのアルゴリズムを使用して、OSが持っている電力とパフォーマンスの目標を満たすため、追加のガイダンス(ハードウェア側からの推奨)が提供されるという仕組みだ。

 SoCにはNPU、グラフィックスユニット、CPUがありいずれも動的であるため、SoCからOSに提供されるこれらのガイダンスは全て動的になる。システムの電力・放熱特性に応じて状況は変化し、スレッドディレクターからのガイダンスは更新され、そのガイダンスをOSに提供する。これは、OSのスケジュール決定を最適化するための最良のテクノロジの1つとなる。

3種類の新コアの構成要素

 3DハイブリッドパフォーマンスアーキテクチャとP-コアとE-コアの構成要素を見てみよう。Meteor Lakeには、レッドウッドコーブコア(P-コア)とクレストモントコア(E-コア)というコアがある。LP E-コアもクレストモントコアで、同じマイクロアーキテクチャではあるが違うデザインになっているという。

P-コアのブロックダイヤグラム

 新しいPコアファミリーのレッドウッドコーブコアは、第12~13世代のマイクロアーキテクチャで導入したゴールデンコーブコアよりも強化されている。IPC(Instruction Per Cycle: 1サイクルあたりの実行命令数)は以前のアーキテクチャと似ているようだが、Meteor Lakeでは、より大きなL2キャッシュを投入している。

 設計とプロセス改善により電力効率も向上している。キャッシュレベルとメモリ帯域幅レベルの両方でコアあたりの帯域幅が増加している。これはプロセス技術の進化によるP-コアファミリーに対してのマイクロアーキテクチャリソースの追加によるものらしい。

 レッドウッドコーブのアーキテクチャの進化点は、ソフト開発者が自動的(コードの変更なしに)にそのメリットを受けられること。また、ソフト開発者が新アーキテクチャ上でコードを簡単にデバッグして最適化できるようにし、パフォーマンスをさらに向上させあれるように設計されている。スレッドディレクターも改善され、P-コアなどからのテレメトリカウンターの使用方法に関するいくつかの機能も強化されている。

E-コアのブロックダイヤグラム

 新しいE-コアアーキテクチャとなるクレストモントについては、前世代のE-コアと比較して平均して約4〜6%のIPC改善があるという。また、クライアントで最も新しい使用法の1つとなるAIワークロードについては、Meteor LakeにはNPUも搭載されているが、CPUベースのAI処理が依然として重要であるため、VNNI命令のパフォーマンスを大幅に向上させたという。

 スレッドディレクターの機能強化で、最も期待できるのは、以前のアーキテクチャでは、E-コアからの拡張テレメトリの全てが、スレッドディレクターの決定には反映されていなかった点が改善されること。Meteor LakeのE-コアでは、拡張テレメトリイベント、パフォーマンス監視イベントが多数反映され、ワークロードの種類の分類が改善されることになった。

 3つの異なるタイプのコア階層が、電力パフォーマンスの観点からどのように見えるかが以下の図だ。一番上にコンピュートタイルのP-コアが来る。群を抜いて最もパフォーマンスの高いコアになる。X軸は右に行くほどパワーの増加を、Y軸は上に行くほどパフォーマンスの向上を意味する。十分な電力予算がある場合は、P-コアを使用することがパフォーマンス目的では最適になる。

 次にコンピュートタイルのE-コアはエリア効率が高く、マルチスレッドでの高スループットアーキテクチャになる。第12~13世代のアーキテクチャでは、このE-コアとP-コアでの最適化を行なってきた。図の中では上の2と3になる。

 これを見ていると、青い水色の線と黄色い線が交わる交差点が確認できる。つまり、何らかの理由でコアに供給する十分な電力予算がない場合、そのクロスオーバーポイントを下回ると、E-コアの方がP-コアよりパフォーマンスを発揮する可能性があるということになる。従って、P-コアが常にパフォーマンスを発揮していると仮定する(静的な特性)と、ハイブリッドアーキテクチャではうまく機能しない。ここで、スレッドディレクターの動的なヒントが役に立つということになる。

 最下部には、SoCタイルEコア(LP E-コア)がある。これは、エネルギーと電力効率を最大化するためのものだ。Meteor Lakeでのディレクター機能強化により、SoCタイルでの作業を統合可能と判断すると、その旨をOSに動的に通知する。

新しいスレッドディレクターの挙動

 次にスレッドディレクターのアーキテクチャを掘り下げてみる。スレッドディレクターは第12世代から搭載され、以降も改善を重ねてきている。スレッドディレクターそのものはスレッドを動かさない。スレッドのスケジューリングはOSが管理していているからだ。OSは優先度、サービス品質、フォアグラウンド、バックグラウンド、ACDCなど、より多くの情報をもっている。

 一方、ハードウェアには、電力/放熱特性、電力を消費しているIP、十分な電力予算など、実行中の命令セット、内部関連パラメータに関する情報が存在する。その情報の全てをOSが簡単に利用できるわけではないので、スレッドディレクターが、ハードウェア側が持っている全ての有効な情報を組み合わせて、スレッドをどこにスケジュールすべきかについてのヒントメカニズムとしてOSに通知する。

 OSはこれらの情報を全て参照し、どこにスケジュールするかを決定する。OSはハードウェアからのヒントを使うが、OS独自の情報を追加する形だ。つまり、スレッドディレクターはOSとハードウェアの間のレイヤーと考えられ、熱動作条件などに基づいて動的に調整を行ない、動作に最適な推奨事項を提供する。

 上の図でスレッドディレクターの1番目の部分は、上位のパーツに分類すると、コア部分になる。P-コアとE-コア部分とそれが何をするかは、プログラムがコア上で実行されている作業を常に分類して、どのような種類の命令が実行されているかを把握し、それを4つのクラスに分けて確認する。チャート上ではクラス0からクラス3があり、基本的にY軸はP-コアとE-コア間のIPC比率になる。X軸は、さまざまなワークロードの束(まとまり)になる。

 次にクラスの区分の例を挙げて確認してみよう。レガシー命令、スカラー命令を実行している場合は、P-コアとE-コア間のIPCの差がそれほど大きくなく(おそらく10%、15%の範囲か何かである場合)、クラス0として配置する。AVX2、FP32タイプの命令など実行し、P-コアとE-コア間のIPCにより大きな性能な差がある場合は、クラス1に入れる。VNNI命令、AI命令など、内部のマイクロアーキテクチャの違いに基づいてP-コアが大きな利点をもたらす場合はクラス2に入れる。

 クラス3は、基本的に多くのクライアントアプリケーションが持つ共通の特性を示すために追加された。このアプリケーションはいつも仕事をしているわけではなく、仕事が現れるのを待っている待ち状態の回転に費やされる。実際の作業としてはスピニングスレッド(待ち状態の回転)を実行していて、P-コアでのパフォーマンスが高いタスク発生した場合は、その実際の作業スレッドがP-コアに移動される。つまり、実際の作業とスピニングスレッドで作業を待っているビジーな作業を区別できるようにしている。

 この情報はOSに通知されるため、OSはどのクラスの作業が実行されているかを認識し、これははるかに低い粒度で行なわれるという。今回はスレッドディレクター内でのクラス分けのところまでさせていただく、次回はクラス分けとインデックス情報を使ってOSに通知する仕組みについて説明したい。