よくあるご質問


一般技術 | その他の技術との関連 | 規格のバージョン | バースト | シミュレーションとテスト | スレッドと接続

スレッドと接続

1. スレッドとは正確にはどのようなものですか。
2. なぜスレッドを使用するのですか。
3. 1つのコアが所有できるスレッドの最大数はいくつですか。
4. なぜ複数のスレッドが必要になるのですか。
5. MThreadID信号の(フェーズを基準とした)タイミングとは何ですか。
6. マスター/スレーブをリセットすると実行中のスレッドにどのような影響を及ぼしますか。
7. コアはどのようにして優先処理を実現するのですか。
8. OCPの接続IDは何に使用するのですか。
9. スレッドはコネクションとはどう違うのですか。
10. 1つのスレーブを複数のマスターに接続することができますか。できない場合、メモリーの共有はどのようにして行われるのですか。OCPをポイントツーポイントで接続した状態で、複数のプロセッサをメモリーコントローラに接続するためのプロトコルがOCPにありますか。
11. タグ付けとは何ですか。
12. タグとスレッドとはどう違うのですか。
13. スレッドではどのようなフロー制御を使用することができますか。
14. マルチスレッドを使用する際、ブロックを回避するにはどうすればよいですか。




1: スレッドとは正確にはどのようなものですか。
A: スレッドとはリクエストシーケンスであり、常にその順序を保持しています。つまり、スレッドはリクエストの送信、実行、または応答の順序が決して狂わないということです。

2: なぜスレッドを使用するのですか。
A: スレッドを使用すると、コアで利用可能なコア固有のコンカレンシーを表すことができます。これは一般的に、パフォーマンスの低下を防ぐために行なうものです。スレッドがなければ、同時発生する複数リクエストシーケンスを交互に割当てるか、1つのシーケンス内で時分割多重する必要があります。いずれかのリクエストに遅延が生じると、その後のリクエストのすべてに影響し、したがってすべての同時発生シーケンスに影響することになります。各リクエストが、別々のスレッドに割り当てられてラベリングされることにより、ターゲットコアはそれらの実行を自由に並べ替え最適化することができます。

OCPでは、コアが持てるスレッドの最小数は1つです。また、すべてのリクエストはスレッドに関連付けられていますが、イニシエータコアは、生成されると思われる他のリクエストよりも前に、優先順位の高いリクエストを解決するためのターゲットコアを必要とする場合があります。ただし、1つのスレッド内では、すべてのリクエストとそのレスポンスは順序どおりでなければなりません。

したがって、1つだけのスレッドでは、優先順位の高いリクエストであっても、先行するすべてのリクエストが処理された後に初めて処理されます。優先されるリクエストのためにスレッドを予約しておくことで、2番目のスレッドの順序を維持することができると同時に、前からあるリクエストや優先順位の低いリクエストが実行される前に優先されるリクエストを実行できるようになります。

他の例としては、マルチバンクDRAMコントローラの設定があり、各DRAMバンクには一意のスレッドが関連付けられています。この場合、理論的にはすべてのバンクを同時にアクティブにすることができるので、DRAMコントローラはDRAMアクセスのコンカレンシーを大幅に向上することができます。

3: 1つのコアが所有できるスレッドの最大数はいくつですか。
A: OCPアーキテクチャでは、コアが所有できるスレッドの数は制限されません。ただし、実際には他の要因によって制限が生じます。マスターコアは同時に1つのコマンドしか発行することができません。したがって、複数のスレッドがアクティブの場合、内部でアービトレーションを行なうことによってOCPに存在するスレッドを1つ選択する必要があります。IPコアの性能は、スレッド数が増加するに従って低下します。同様に、スレーブは多くの場合、スレッドに伴うストレージのコストを背負うことになります。つまり、ゲート数がスレッドの数を適正な数に保持する要因となります。

4: なぜ複数のスレッドが必要になるのですか。
A: 複数スレッドは主に複数の、ただし関連性のない処理を同時に実行するために使用します。典型的な例としては、送信と受信の両方のストリームを備えたイーサネットのMACなどがあり、ここでは各ストリームが一意のスレッド上に存在することになります。

5: MThreadID信号の(フェーズを基準とした)タイミングとは何ですか。
A: データハンドシェークが有効でないときのライトリクエストに伴うフェーズの数は1つです。ここでは、ライトコマンドが有効なときにスレッドID信号が有効になります(MThreadID信号はリクエストグループの中にあります)。データハンドシェークを有効にすると、ライトデータが有効なときにデータスレッドID信号が有効になります(MDataThreadID信号はデータハンドシェークグループの中にあります)。

リード転送では、リードコマンドが有効なときにスレッドID信号が有効になります(この場合も、MThreadID信号はリクエストグループの中にあります)。スレーブがデータを戻すと、リードデータが有効なときにスレッドID信号は有効になります(SThreadID信号はレスポンスグループの中にあります)。

6: マスター/スレーブをリセットすると実行中のスレッドにどのような影響を及ぼしますか。
A: ペンディングされているマスターによるリクエスト、およびスレーブによるレスポンスは、リセットにより全てキャンセルまたは終了されます。そうしなければ、リセットの前に送信されたコマンドに応答して、リセット後にスレーブがデータを返した場合、リセットによってシステムの状態が正しく初期化されなくなるからです。またOCPの仕様では、少なくとも16クロックサイクルの間、リセットをアクティブにすることも必要となります。これは、マスターとスレーブの両方が、内部的に安定した状態に達するようにするためです。

7: コアはどのようにして優先処理を実現するのですか。
A: 複数のスレッドがある場合、通常のトラフィックはある1つのスレッドを使用しますが、優先順位の高いリクエストは別のスレッドを使用することができます。ひとつのスレッドでは、リクエストは順に処理されますが、別のスレッドからのリクエストにはこれは適用されません。別のスレッドからのリクエストは、順序を入れ替えて処理することができ(アウトオブオーダー)、処理の優先順位を設定することができます。

8: OCPのコネクションIDは何に使用するのですか。
A: コネクションIDはスレッドによく似ていますが、その取り扱う範囲はローカルではなくグローバルになります。コネクションIDによってシステムのイニシエータコアとシステムのターゲットコア間での転送の識別が可能になります。ターゲットが受信するスレッドの情報はローカルのOCP接続のための情報ですが、コネクションIDは転送の媒介者を通じて保持されることに留意してください。

9: スレッドはコネクションとはどう違うのですか。
A: スレッドは、OCPインターフェースに関連付けられています。ただし、コアCに接続されたコアBにコアAが接続されている場合、コアCは、コアBがコアCに中継するリクエストに関して、コアAのOCPスレッド情報を受信することはありません。コアBとコアC間のOCP接続のコア情報だけが得られます。

OCPの信号のひとつであるコネクションは、コアAがリクエスト源を明確に識別できるグローバルな識別子を付ける機能を提供します。コネクションIDは、非常に多くのイニシエータとターゲットから成るSOC設計において非常に重要です。これによってOCPイニシエータコアは、OCPインターフェース送信の媒介者にまたがるリクエストに対して識別情報を割り当てることができるからです。

10: 1つのスレーブを複数のマスターに接続することができますか。できない場合、メモリーの共有はどのようにして行われるのですか。OCPをポイントツーポイントで接続した状態で、複数のプロセッサをメモリーコントローラに接続するためのプロトコルがOCPにありますか。
A: MicroNetworkは、以下の2つを実行します。すなわち、複数のスレーブをマスターに接続することと、複数のマスターを特定のスレーブに接続することです。後者の場合、単一のOCPポイントツーポイント接続により複数のマスターでスレーブを共有することができます。これは従来のコンピュータバスの機能にまさしく類似するものです。このMicroNetworkは、OCPを使用して、システム内のマスターとスレーブの各コアにインターフェース接続されます。

マルチポートのSRAMメモリーなど、スレーブが複数のOCPインターフェースを持つことはまったく問題ありません。

OCPインターフェース規格は、多くの従来のバスプロトコルとは異なり、スレッド機能をオプションで組み込みます。スレッド機能によってトランザクションにタグを付けることができ、そのタグに基づいて別々に処理することができます。これによって異なるマスターからのデータフローをスレーブコアで識別でき、また個別のデータストリームに対して個々のQoSを容易に実現できます。ほとんどの場合、サブシステムのタイミング制約(たとえばDRAMコントローラの制約)に合わせて転送の順序を変更することにより性能を向上することができます。

11: タグ付けとは何ですか。
A: OCP スレーブは通常、OCP マスタによる要求への応答を、OCP マスタにより要求が発行された順序で返します。ただし、応答を OCP マスタに返す順序を OCP スレーブが決定する方が適切な場合があります。タグを使用することで、OCP スレーブからの応答とそれをトリガした元の要求とを直接関連付けることができます。多くの場合、タグを使用することにより、システム全体のパフォーマンスを向上させることができます。

12: タグとスレッドとはどう違うのですか。
A: タグは、out-of-order 応答を返すことに関して、スレッドよりも「軽量」であると考えられます。特に、マルチスレッドではスレッドごとに独立したフロー制御を提供するのに対し、タグではすべてのタグに単一の共有フロー制御が使用されます。また、個々のスレッドにはトランザクションの順序に関するルールがないのに対し、タグ付けされたトランザクションの順序を変更することはできません。さらに、スレッドごとに独立したバッファが必要であるのに対し、タグにはバッファは必要ありません。これは、フロー制御がすべてのタグで共有されるためです。


13: スレッドではどのようなフロー制御を使用することができますか。
A: あるスレッドで要求の処理がビジー状態になっているときに、コアが別のスレッドで要求を処理できるようにするために、「thread busy」フロー制御信号がいくつか用意されています。スレーブでは、SThreadBusy 信号を使用して、特定のスレッドに対してそれ以上要求を作成しないようマスタに指示することができます。同様に、マスタでは、MThreadBusy 信号を使用して、特定のスレッドに対してそれ以上応答を発行しないようスレーブに指示することができます。さらに、スレーブ用に SDataThreadBusy 信号が用意されています。この信号は、特定のスレッドでそれ以上データ ハンドシェイク フェーズを受け入れないようマスタに指示するために使用されます。


14: マルチスレッドを使用する際、ブロックを回避するにはどうすればよいですか。
A: OCP プロトコルの観点では、個々の「thread busy」信号に段階的なタイミング要件はないため、マスタとスレーブ間でヒントとして扱うことしかできません。ブロックが発生しないようにするために、これらの各「thread busy」信号に構成パラメータが用意されています。その構成パラメータを使用することで、マスタまたはスレーブが正確な「thread busy」セマンティクスに従うように指定することができます。



一般技術 | その他の技術との関連 | 規格のバージョン | バースト | シミュレーションとテスト | スレッドと接続