バックナンバーはこちら

today&tomorrow

What's New in DesignWare IP?

2017 Dec. vol.108

CCIXの概要

シノプシス テクニカル・マーケティング・マネージャー Richard Solomon

CCIX(Cache Coherent Interconnect for Accelerators)は新しい標準化団体CCIX Consortiumによって策定されている仕様セットです。CCIX仕様が必要とされるようになった背景には、現行のテクノロジよりも高速なインターコネクト、およびヘテロジニアス・マルチプロセッサ・システムにおけるメモリー・アクセスを高速化するキャッシュ・コヒーレンシに対する要求の高まりが挙げられます。このため、ハードウェア・アクセラレータがキャッシュ・コヒーレントな方法で複数のプロセッサとメモリーを共有できるようにすることがCCIX Consortiumの活動の重要な目標となっています。本稿ではCCIX規格の概要、および機械学習、ネットワーク・プロセッシング、ストレージ・オフロード、インメモリー・データベースなどの高性能アプリケーションにおけるCCIXの主な利点についてご説明します。

キャッシュ・コヒーレンシとは

複数のCPUで1つのメモリー空間を共有する場合、メモリーの各部分について「キャッシュ済み」「キャッシュ可能」のステート情報をCPU間で通信することにより、高い性能が得られます。この方法なら、ソフトウェア・セマフォによる低速なアクセス制御に頼る必要がなく、各CPUは共通データセットに対して安全に処理を実行できます。この通信により、CPU Aがメモリーの一部をキャッシュに格納した後にCPU Bが同じアドレスのメモリーに書き込みを実行したり、同じアドレスから古いメモリー内容を読み出したりするのを防ぐことができます。CCIXはCPU以外のエージェントもこの通信に参加できるように拡張したもので、これによりハードウェア・アクセラレータにも同じ利点がもたらされるようになります。また、CCIXのコヒーレンシ・プロトコルは特定のベンダに依存しないため、CPUやGPU、およびその他のアクセラレータが対等に参加でき、ライセンスにまつわる面倒な制約もありません。

ここでは、コヒーレンシ・プロトコルとして以前から使われているMESIを例に、キャッシュ・コヒーレンシについてご説明します。MESIとは、システムにおいて各キャッシュ・ラインがとりうる4つの状態(Modified、Exclusive、Shared、Invalid)の頭文字をとった用語です。Modifiedとは、そのキャッシュにしかキャッシュ・ラインが存在しておらず、しかもメイン・メモリーのデータとは異なっていること(キャッシュ用語で「ダーティ」)を意味します。システム内のいずれかのキャッシュでModifiedステートのアドレスに対して別のエージェントが読み出しを実行しようとすると、キャッシュ内に存在する変更済みデータがメイン・メモリーに書き戻された後、読み出しが実行されます。Exclusiveも同様にそのキャッシュにしかキャッシュ・ラインが存在しませんが、メイン・メモリー内のデータと一致していること(キャッシュ用語で「クリーン」)を意味します。このキャッシュ・ラインを所有しているエージェントがキャッシュ・ラインに変更を加えると、ステートはExclusiveからModifiedに変化します。SharedもExclusiveと同様に「クリーン」なキャッシュ・ラインですが、システム内の複数のキャッシュに同じキャッシュ・ラインが存在することを意味しています(これらのキャッシュ・ラインはすべてのキャッシュでSharedステートです)。もう1つのInvalidステートは、使用されていないか無効になったキャッシュ・ラインであることを意味します。当然、このようなシステムでは複数のキャッシュ間で互いに通信して情報を交換する必要があります。つまり他のエージェントによるバス・トランザクションを監視(スヌープ)して自身のキャッシュ・ステートを適宜変更し、このステート変更を何らかの方法でシステム内の他のキャッシュに通知する必要があります。

CCIXプロトコル仕様では、このような一般的な動作を実現するために必要ないくつかのキャッシュ・ステートおよび関連するメッセージとメカニズムを定義しています。仕様の詳細はCCIX Consortiumのメンバー以外には公開されていませんが、本稿ではこのプロトコル仕様の大まかな概要についてご説明します。

キャッシュ・コヒーレンシにCCIXを使う理由

CCIX仕様の最大の長所の1つは、PCI Express仕様をベースに定義されているという点です。CCIXのコヒーレンシ・プロトコルはPCI Expressリンクをそのままの形で(またはわずかな変更だけで)伝送できます。図1に示すように、PCI Expressコントローラの既存のインプリメンテーションにCCIXトランザクション層をインプリメントするロジックを追加するだけでCCIXへの拡張が可能です。CCIXトランザクション層の役割はコヒーレンシ・メッセージを伝送することにあります。CCIXプロトコル層とCCIXリンク層の2つのブロックはコヒーレンシ・プロトコル自体をインプリメントし、このプロトコルに基づいて動作します。これら2つのブロックはキャッシュ動作のために内部システム・オン・チップ(SoC)ロジックと密接に統合する必要があり、個々のSoCアーキテクチャに合わせて設計する必要があります。一般に、SoCデザインにCCIXを実装する際はCCIXプロトコル層とCCIXリンク層をCCIXトランザクション層から切り離し、内部SoCロジックとの緊密な統合を図っていくことになります。

画像(仮)

図1:CCIX仕様はPCI Expressプロトコルを利用してCCIXトランザクション層を実装

カテゴリートップ