デッドロックフリーのマルチコアSoCを如何にして作成するか?

  • By Eric Esteve
  • 19th 1 2016
  • 3

現在の複雑なマルチコアSoCのデッドロックの意味を正確に説明します。最初に、1988年6月26日のデモ飛行中に最新のエアバスA320型が墜落した、あのエールフランス296便の事故を見てみましょう。このエアバスA320型は、FADECフライトシステムのおかげで完全自動化された最初の飛行機であり、デモ飛行中でした。パイロットは、実際には着陸せず、空港上空で着陸のまねをすることにしました。目標は、飛行機のすばらしさを実証することでした。残念なことに、このような操作はFADECとフライトシステムによって認識されず、ブロックされたため、システム自体をリセットすることにしました。問題は、1988年においてはリセット/再始動に7秒かかり、このリセット時間中に、パイロットはエンジンの回転を上げ上昇しようと試みました(一世代前の飛行機では問題なかったでしょう)。結果は下の図に印刷してあるとおりです。当時(1988年)SoCは存在せず68020プロセッサだけが頼りで、起きたことは現在のSoCのデッドロックに相当します。システムがブロックされ、リセットする以外にこの状況を逃れる術はないのです。
Article: Intel Goes Vertical to Guarantee PC Growth-slide_412538_5208412_compressed-jpg

時が過ぎて2016年になると、電子システムは、現在ではそう多くはなくても複数のプロセッサコア(CPU/GPU/DSP)と数十個のIPを搭載したシステムオンチップが基本です。このような複雑なマルチコアSoCアーキテクチャを設計すると同時に、複数のエージェント間でデータを交換するためにインターコネクトIPの使用と設計が必要になります。バスベースにしたり内部定義のインターコネクトIPにしてもかまいませんが、傾向としてはNocStudioが作成したNetSpeed SoCインターコネクトIPなど、市販のネットワークオンチップ(NoC)IPに移行しています。

2つのエージェントが同じインターコネクトを共有する単純化した事例を下の図でご覧ください。一方のエージェント(agent0)がタスクを完了するためにデータを読み取る必要があり、そのデータは、agent0が実行した動作の結果を読み取ることになっていた他方のエージェント(agent1)によって生成されたレスポンスである場合、デッドロックが発生すると直感的に理解できます。この場合、赤い矢印で示す依存関係が生じます。依存関係は、読み取りリクエストが読み取りレスポンスを逆方向に発行した場合にもに実行されるというものです。バッファが両方向とも読み取りリクエストで満杯になり、読み取りレスポンスを送信できないときにデッドロックが発生します。鶏と卵の関係が依存関係をうまく説明しています。デッドロックが発生すると、システムは立ち往生し、この状況を脱するにはリセット/再始動する以外になく、アーキテクチャ設計者はこのタイプのイベントを予測して適切なテスト構造を組み込んでいたと想定できます。このブログの冒頭を思い起こせば、大半の電子システムの場合、リスクは生命を失うことではなくデータを失うことであるとしても、システムのリセットが大事に至る可能性があります。
Article: Intel Goes Vertical to Guarantee PC Growth-simple-interconnect-deadlock-jpg

NetSpeedのNocStudioを利用する前に、自家製のインターコネクトを使用するSoCアーキテクチャ設計者は、SoC検証キャンペーン計画を実施して可能性のあるデッドロックを検出する必要がありました。この方法の問題は、シミュレーションに関連するリードタイムが長時間に及ぶことです。機能シミュレーションを実行する必要があり、コンピュータを駆使した検証で最初のデッドロックの検出に数か月とはいかないまでも数週間かかり、実際のシステムにSoCを統合しても数時間または数日かかるでしょう。プロセス全体(デッドロックの特定、設計修正、シミュレーションの再実行)では6か月もかかり、市場投入までの期間(TTM)条件を考慮すると受け入れられないように思われます。

アーキテクチャ設計者が通信プロトコルをSoC内で指定する場合、NetSpeedのNocStudioはアーキテクチャの定義レベルで使用されます。NetSpeed IPは、1つのエンドポイントから次のエンドポイントへと単純化したサブフローに複雑なプロトコル処理を分割することで、デッドロックをすべて検出して解決します。図2のデッドロックは、バーチャルチャンネルをネットワークに追加して別の読み取り-レスポンスパスを作成し、読み取りパケットと読み取り-レスポンスパケットのリソースを分離することで回避できます。機械学習アルゴリズムを使用し、サブフローを処理してバーチャルネットワークにマッピングする際の正しい処理順序を自動的に学習します。

プロトコルのデッドロックを検出するには、すべてシステムコンポーネントのプロパティがどのようにネットワークパケットを生成して消費し、これらのパケットがどのように相互に関連するかを解明する必要があります。設計者は柔軟な形式言語を使用して、さまざまなシステムコンポーネントのデッドロック関連プロパティを捕捉します。NocStudioでは依存関係を2つの方法で指定できます。トラフィック記述内で暗示するか、または明示的に指定できます。また、後にこの情報を使用してネットワークレベルのデッドロックフリーNoCを構築することもできます。NetSpeedが、NocStudioによって生成されたNoCを説明するときに「構成と同時に修正」スローガンを使用するのはこのためです。

私達は何十年も前から、ステートマシンがロックしてチップに問題が生じると、電子システム全体をリセットせざるを得ないということを承知していました。アーキテクチャ設計者は常に複雑な異機種混在SoCを定義しようとするため、依存関係が入り込む可能性が非常に大きくなり、その結果SoCが直接デッドロックに巻き込まれます。シミュレーションを実行し設計を修正してデッドロックを検出できたとしても、このプロセスの繰り返しはTTM要件を満たすには長すぎます。NetSpeedが提案するソリューションは、NocStudioを使用してデッドロックフリーNoC、Orionを生成し、「構成して同時に修正可能な」インターコネクトIPを設計することです。

Request A Demo

ajaxloader

Crafted @ Lollypop.biz