(57)【要約】  アウトオブオーダープロセッサ(OOP)によるループ命令のデータフロー実行のより低オーバーヘッドの管理を提供すること、ならびに関連の回路、方法、およびコンピュータ可読媒体が開示される。一態様では、各々がコンピュータプログラムループのループ命令を記憶する、複数の予約ステーションセグメントを含む、予約ステーション回路が提供される。各予約ステーションセグメントは、対応するループ命令がデータフロー実行のために提供されてもよいかどうかを示す命令実行クレジットインジケータをさらに記憶する。予約ステーション回路は、各ループ命令のためのエントリを提供するデータフローモニタをさらに含み、各エントリは消費者カウントインジケータと予約ステーション(RS)タグカウントインジケータとを備える。データフローモニタは、ループ命令のすべての消費者命令が、ループ命令に関する消費者カウントインジケータおよびRSタグカウントインジケータに基づいて実行されたかどうかを判定するように構成される。そうであれば、データフローモニタは、ループ命令に命令実行クレジットを発行する。
2018508908.tif 000002
【特許請求の範囲】
【請求項１】
アウトオブオーダープロセッサ(OOP)におけるループ命令のデータフロー実行を管理するための予約ステーション回路であって、
複数の予約ステーションセグメントであって、各々が、
ループ命令を記憶するように構成されるループ命令レジスタと、
前記ループ命令がデータフロー実行のために提供されてもよいかどうかを示す命令実行クレジットを記憶するように構成される命令実行クレジットインジケータと
を備える、複数の予約ステーションセグメントと、
前記複数の予約ステーションセグメントの前記ループ命令に対応する複数のエントリを備えるデータフローモニタであって、各エントリが、
対応するループ命令の消費者命令の数を示す消費者カウントインジケータと、
前記消費者命令の実行数を示す予約ステーション(RS)タグカウントインジケータと
を備える、データフローモニタと
を備え、
前記データフローモニタが、
第1のループ命令の前記消費者命令のすべてが、前記第1のループ命令に関する前記消費者カウントインジケータおよび前記RSタグカウントインジケータに基づいて実行されたかどうかを判定することと、
前記第1のループ命令の前記消費者命令のすべてが実行されたと判定したことに応答して、前記第1のループ命令の予約ステーションセグメントに命令実行クレジットを発行することと
を行うように構成される、
予約ステーション回路。
【請求項２】
前記データフローモニタは、前記第1のループ命令に関する前記消費者カウントインジケータと前記RSタグカウントインジケータとが等しいかどうかを判定することによって、前記第1のループ命令の前記消費者命令のすべてが実行されたかどうかを判定するように構成される、請求項1に記載の予約ステーション回路。
【請求項３】
前記データフローモニタは、前記第1のループ命令の前記消費者命令のすべてが実行されたと判定したことに応答して、前記第1のループ命令に関する前記RSタグカウントインジケータを0にリセットするようにさらに構成される、請求項1に記載の予約ステーション回路。
【請求項４】
第2のループ命令が実行されると、前記データフローモニタが、
前記第2のループ命令に関する1つまたは複数のオペランドソースRSタグを受け取ることと、
前記1つまたは複数のオペランドソースRSタグによって示された前記複数のエントリの各エントリの前記RSタグカウントインジケータをインクリメントすることと
を行うようにさらに構成される、請求項1に記載の予約ステーション回路。
【請求項５】
前記データフローモニタが、前記複数の予約ステーションセグメントの各予約ステーションセグメントの前記命令実行クレジットインジケータに初期命令実行クレジットを配信するようにさらに構成される、請求項1に記載の予約ステーション回路。
【請求項６】
前記複数の予約ステーションセグメントの各予約ステーションセグメントが、
前記ループ命令がデータフロー実行のために提供される場合があることを前記予約ステーションセグメントに関する前記命令実行クレジットインジケータの前記命令実行クレジットが示すかどうかを判定することと、
前記ループ命令がデータフロー実行のために提供される場合があることを前記命令実行クレジットが示すと判定したことに応答して、
データフロー実行のための前記予約ステーションセグメントの前記ループ命令を提供することと、
前記予約ステーションセグメントの前記命令実行クレジットをデクリメントすることと
を繰り返し行うように構成される、請求項1に記載の予約ステーション回路。
【請求項７】
集積回路(IC)に組み込まれる、請求項1に記載の予約ステーション回路。
【請求項８】
セットトップボックス、エンターテイメントユニット、ナビゲーションデバイス、通信デバイス、固定位置データユニット、モバイルロケーションデータユニット、モバイルフォン、セルラーフォン、コンピュータ、ポータブルコンピュータ、デスクトップコンピュータ、携帯情報端末(PDA)、モニタ、コンピュータモニタ、テレビジョン、チューナ、ラジオ、衛星ラジオ、音楽プレーヤ、デジタル音楽プレーヤ、ポータブル音楽プレーヤ、デジタルビデオプレーヤ、ビデオプレーヤ、デジタルビデオディスク(DVD)プレーヤ、およびポータブルデジタルビデオプレーヤからなるグループから選択されたデバイスに組み込まれる、請求項1に記載の予約ステーション回路。
【請求項９】
アウトオブオーダープロセッサ(OOP)におけるループ命令のデータフロー実行を管理するための方法であって、
データフローモニタによって、第1のループ命令のすべての消費者命令が、前記第1のループ命令の前記消費者命令の数を示す前記第1のループ命令の消費者カウントインジケータと、前記消費者命令の実行数を示す前記第1のループ命令の予約ステーション(RS)タグカウントインジケータとに基づいて実行されたかどうかを判定するステップと、
前記第1のループ命令の前記消費者命令のすべてが実行されたと判定したことに応答して、前記第1のループ命令に対応する予約ステーションセグメントに命令実行クレジットを発行するステップと
を備える、方法。
【請求項１０】
前記第1のループ命令の前記消費者命令のすべてが実行されたかどうかを判定するステップは、前記第1のループ命令に関する前記消費者カウントインジケータと前記RSタグカウントインジケータとが等しいかどうかを判定するステップを備える、請求項9に記載の方法。
【請求項１１】
前記第1のループ命令の前記消費者命令のすべてが実行されたと判定したことに応答して、前記第1のループ命令に関する前記RSタグカウントインジケータを0にリセットするステップをさらに備える、請求項9に記載の方法。
【請求項１２】
第2のループ命令が実行されると、
前記第2のループ命令に関する1つまたは複数のオペランドソースRSタグを受け取るステップと、
前記1つまたは複数のオペランドソースRSタグによって示された1つまたは複数のループ命令に関する前記RSタグカウントインジケータをインクリメントするステップと
をさらに備える、請求項9に記載の方法。
【請求項１３】
前記第1のループ命令に対応する前記予約ステーションセグメントに初期命令実行クレジットを配信するステップをさらに備える、請求項9に記載の方法。
【請求項１４】
複数の予約ステーションセグメントの各ループ命令に関して、
前記ループ命令がデータフロー実行のために提供される場合があることを前記ループ命令に関する前記予約ステーションセグメントの前記命令実行クレジットが示すかどうかを判定するステップと、
前記ループ命令がデータフロー実行のために提供される場合があることを前記ループ命令に関する前記予約ステーションセグメントの前記命令実行クレジットが示すと判定したことに応答して、
データフロー実行のための前記ループ命令を提供するステップと、
前記ループ命令に関する前記予約ステーションセグメントの前記命令実行クレジットをデクリメントするステップと
をさらに備える、請求項9に記載の方法。
【請求項１５】
コンピュータ実行可能命令を記憶した非一時的コンピュータ可読記録媒体であって、前記コンピュータ実行可能命令が、プロセッサによって実行されたとき、前記プロセッサに、
データフローモニタによって、第1のループ命令のすべての消費者命令が、前記第1のループ命令の前記消費者命令の数を示す前記第1のループ命令の消費者カウントインジケータと、前記消費者命令の実行数を示す前記第1のループ命令の予約ステーション(RS)タグカウントインジケータとに基づいて実行されたかどうかを判定することと、
前記第1のループ命令の前記消費者命令のすべてが実行されたと判定したことに応答して、前記第1のループ命令に対応する予約ステーションセグメントに命令実行クレジットを発行することと
を行わせる、非一時的コンピュータ可読記録媒体。
【請求項１６】
前記プロセッサによって実行されたとき、前記第1のループ命令に関する前記消費者カウントインジケータと前記RSタグカウントインジケータとが等しいかどうかを判定することによって、前記第1のループ命令の前記消費者命令のすべてが実行されたかどうかを前記プロセッサにさらに判定させるコンピュータ実行可能命令を記憶する、請求項15に記載の非一時的コンピュータ可読記録媒体。
【請求項１７】
前記プロセッサによって実行されたとき、前記第1のループ命令の前記消費者命令のすべてが実行されたと判定したことに応答して、前記プロセッサに、前記第1のループ命令に関する前記RSタグカウントインジケータを0にさらにリセットさせるコンピュータ実行可能命令を記憶する、請求項15に記載の非一時的コンピュータ可読記録媒体。
【請求項１８】
前記プロセッサによって実行されたとき、第2のループ命令が実行されると、前記プロセッサに、
前記第2のループ命令に関する1つまたは複数のオペランドソースRSタグを受け取ることと、
前記1つまたは複数のオペランドソースRSタグによって示された1つまたは複数のループ命令に関する前記RSタグカウントインジケータをインクリメントすることと
をさらに行わせるコンピュータ実行可能命令を記憶する、請求項15に記載の非一時的コンピュータ可読記録媒体。
【請求項１９】
前記プロセッサによって実行されたとき、前記プロセッサに、前記第1のループ命令に対応する前記予約ステーションセグメントに初期命令実行クレジットをさらに配信させるコンピュータ実行可能命令を記憶する、請求項15に記載の非一時的コンピュータ可読記録媒体。
【請求項２０】
前記プロセッサによって実行されたとき、複数の予約ステーションセグメントの各ループ命令に関して、前記プロセッサに、
前記ループ命令がデータフロー実行のために提供される場合があることを前記ループ命令に関する前記予約ステーションセグメントの前記命令実行クレジットが示すかどうかを判定することと、
前記ループ命令がデータフロー実行のために提供される場合があることを前記ループ命令に関する前記予約ステーションセグメントの前記命令実行クレジットが示すと判定したことに応答して、
データフロー実行のための前記ループ命令を提供することと、
前記ループ命令に関する前記予約ステーションセグメントの前記命令実行クレジットをデクリメントすることと
をさらに行わせるコンピュータ実行可能命令を記憶する、請求項15に記載の非一時的コンピュータ可読記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
優先権出願
本出願は、その内容全体が参照により本明細書に組み込まれる、2015年3月20日に出願された"PROVIDING LOWER-OVERHEAD MANAGEMENT OF DATAFLOW EXECUTION OF LOOP INSTRUCTIONS BY OUT-OF-ORDER PROCESSORS (OOPS), AND RELATED CIRCUITS, METHODS, AND COMPUTER-READABLE MEDIA"と題する米国仮特許出願第62/135,738号の優先権を主張する。
【０００２】
本出願はまた、その内容全体が参照により本明細書に組み込まれる、2015年6月18日に出願された"PROVIDING LOWER-OVERHEAD MANAGEMENT OF DATAFLOW EXECUTION OF LOOP INSTRUCTIONS BY OUT-OF-ORDER PROCESSORS (OOPs), AND RELATED CIRCUITS, METHODS, AND COMPUTER-READABLE MEDIA"と題する米国特許出願第14/743,198号の優先権も主張する。
【０００３】
本開示の技術は、一般に、アウトオブオーダープロセッサ(OOP)によるループ命令のデータフロー実行に関する。
【背景技術】
【０００４】
多くの現代のプロセッサは、プログラム命令のデータフロー実行が可能なアウトオブオーダープロセッサ(OOP)である。データフロー実行アプローチを使用する際、OOPによるプログラム命令の実行順序は、プログラム命令のプログラム順序ではなく、各プログラム命令の入力データの利用可能度(「データフロー順序」)によって判定される場合がある。したがって、OOPは、プログラム命令のすべての入力データが生成されるとすぐ、プログラム命令を実行する場合があり、このことは、性能向上をもたらす場合がある。たとえば、より以前のプログラム命令のために入力データが検索されている間、「停止」する(すなわち、意図的に処理の遅延を導入する)必要があるのではなく、OOPは、直ちに実行可能な、より新しくフェッチされた命令を実行することを進める場合がある。このようにして、場合によっては浪費されるプロセッサクロックサイクルは、OOPによって生産的に利用される場合がある。
【０００５】
従来のOOPは、順序がばらばらに(out-of-order)実行される場合があるプログラム命令のセットを指定する、命令ウィンドウを使用する場合がある。命令ウィンドウ内のプログラム命令の実行が完了すると、実行の結果が、「コミット」されるか、または非投機的にされる場合があり、そのプログラム命令は、実行のための新規のプログラム命令用の空間を作るために命令ウィンドウから退出させられる場合がある。しかしながら、いくつかの状況では、命令ウィンドウからのプログラム命令の退去は、OOPの非効率的な動作をもたらす場合がある。たとえば、プログラム命令がループの一部である場合、同じプログラム命令は、複数のループ反復にわたって繰り返し実行される場合がある。結果として、プログラム命令は、ループが実行されるとき、命令ウィンドウから繰り返しフェッチされ、実行され、退出させられる場合がある。
【０００６】
上記の状況におけるOOPの性能は、予約ステーションセグメントの使用によって改善される場合がある。予約ステーションセグメントは、オペランドなどの、実行に必要な関連情報とともにプログラム命令を記憶する場合がある、OOPマイクロアーキテクチャ特徴部である。OOPは、ループに関連する各プログラム命令を対応する予約ステーションセグメント内にロードする場合がある。各予約ステーションセグメントは、ループが完了する前にプログラム命令を退出させるのではなく、指定された数のループ反復の間、プログラム命令を保持するように構成される場合がある。そのプログラム命令のすべての入力データが利用可能であると予約ステーションセグメントが判定すると、予約ステーションセグメントは、そのプログラム命令およびその入力データを実行用のプロセッサに提供する。ループがすべての反復を完了した後にのみ、対応する予約ステーションセグメントから退出させられたループに関連するプログラム命令が存在する。
【０００７】
予約ステーションセグメントの使用とともに生じる1つの問題は、入力データの消費に対するプログラム命令の入力データの生成を管理することである。生産者命令がデータを生成するレートが、消費者命令が入力としてデータを利用することができるレートよりも大きい場合、データは失われる場合がある。代替的に、プロセッササイクルおよび/または電力消費の点で費用がかかる場合がある、追加のストレージ機構またはバッファ機構の使用が必要となる場合がある。
【発明の概要】
【課題を解決するための手段】
【０００８】
発明を実施するための形態で開示する態様は、アウトオブオーダープロセッサ(OOP)によるループ命令のデータフロー実行のより低オーバーヘッドの管理を提供することを含む。関連する回路、方法、およびコンピュータ可読媒体も開示される。この点について、一態様では、OOPにおけるループ命令のデータフロー実行を管理するための予約ステーション回路が提供される。予約ステーション回路は、複数の予約ステーションセグメントを備える。各予約ステーションセグメントは、ループ命令を記憶するように構成されるループ命令レジスタを含む。各予約ステーションセグメントは、ループ命令がデータフロー実行のために提供されてもよいかどうかを示す命令実行クレジットを記憶するように構成される命令実行クレジットインジケータをさらに含む。予約ステーション回路は、複数の予約ステーションセグメントのループ命令に対応する複数のエントリを備えるデータフローモニタをさらに備える。複数のエントリの各エントリは、対応するループ命令の消費者命令の数を示す消費者カウントインジケータと、消費者命令の実行数を示す予約ステーション(RS:reservation station)タグカウントインジケータとを備える。データフローモニタは、第1のループ命令の消費者命令のすべてが、第1のループ命令に関する消費者カウントインジケータおよびRSタグカウントインジケータに基づいて実行されたかどうかを判定するように構成される。データフローモニタは、第1のループ命令の消費者命令のすべてが実行されたと判定したことに応答して、第1のループ命令の予約ステーションセグメントに命令実行クレジットを発行するようにさらに構成される。ループ命令のすべての消費者命令が実行されたとき、消費者命令の実行を追跡し、ループ命令に命令実行クレジットを発行することによって、データフローモニタは、追加のバッファ空間などの追加のオーバーヘッドを負うことのないループ命令のデータフロー実行の管理を可能にする場合がある。
【０００９】
別の態様では、OOPにおけるループ命令のデータフロー実行を管理するための方法が提供される。本方法は、データフローモニタによって、第1のループ命令のすべての消費者命令が実行されたかどうかを判定するステップを備える。この判定は、第1のループ命令の消費者命令の数を示す第1のループ命令の消費者カウントインジケータと、消費者命令の実行数を示す第1のループ命令のRSタグカウントインジケータとに基づく。本方法は、第1のループ命令の消費者命令のすべてが実行されたと判定したことに応答して、第1のループ命令に対応する予約ステーションセグメントに命令実行クレジットを発行するステップをさらに備える。
【００１０】
別の態様では、コンピュータ実行可能命令を記憶した非一時的コンピュータ可読媒体が提供される。コンピュータ実行可能命令は、プロセッサによって実行されたとき、プロセッサに、第1のループ命令のすべての消費者命令が実行されたかどうかを判定させる。この判定は、第1のループ命令の消費者命令の数を示す第1のループ命令の消費者カウントインジケータと、消費者命令の実行数を示す第1のループ命令のRSタグカウントインジケータとに基づく。コンピュータ実行可能命令は、さらに、プロセッサに、第1のループ命令の消費者命令のすべてが実行されたと判定したことに応答して、第1のループ命令に対応する予約ステーションセグメントに命令実行クレジットを発行させる。
【図面の簡単な説明】
【００１１】
【図１】ループ命令のデータフロー実行を管理する予約ステーション回路を含む例示的なアウトオブオーダープロセッサ(OOP)を示すブロック図である。
【図２】例示的な予約ステーションセグメントを示す図である。
【図３】複数の予約ステーションセグメントと、各予約ステーションセグメント間のデータ依存性とを示すブロック図である。
【図４】消費者命令の実行を追跡するために図3の予約ステーションセグメントのための例示的なデータフローモニタによって提供されるエントリを示すブロック図である。
【図５】例示的なループ実行中の図3の各予約ステーションセグメントに関する命令実行クレジットおよび消費者命令カウントを示すチャートである。
【図６Ａ】図1の例示的なOOPにおけるループ命令のより低オーバーヘッドの管理を提供するための例示的な動作を示すフローチャートである。
【図６Ｂ】図1の例示的なOOPにおけるループ命令のより低オーバーヘッドの管理を提供するための例示的な動作を示すフローチャートである。
【図７】図1の予約ステーション回路を含むことができる例示的なプロセッサベースのシステムのブロック図である。
【発明を実施するための形態】
【００１２】
次に図面を参照しながら、本開示のいくつかの例示的な態様について説明する。本明細書において、「例示的」という語は、「例、実例、または例証としての働きをする」ことを意味するために使用される。本明細書で「例示的」として記述されるどんな態様も、他の態様よりも好ましいかまたは有利であると解釈されるべきとは必ずしも限らない。
【００１３】
発明を実施するための形態で開示する態様は、アウトオブオーダープロセッサ(OOP)によるループ命令のデータフロー実行のより低オーバーヘッドの管理を提供することを含む。関連する回路、方法、およびコンピュータ可読媒体も開示される。この点について、一態様では、OOPにおけるループ命令のデータフロー実行を管理するための予約ステーション回路が提供される。予約ステーション回路は、複数の予約ステーションセグメントを備える。各予約ステーションセグメントは、ループ命令を記憶するように構成されるループ命令レジスタを含む。各予約ステーションセグメントは、ループ命令がデータフロー実行のために提供されてもよいかどうかを示す命令実行クレジットを記憶するように構成される命令実行クレジットインジケータをさらに含む。予約ステーション回路は、複数の予約ステーションセグメントのループ命令に対応する複数のエントリを備えるデータフローモニタをさらに備える。複数のエントリの各エントリは、対応するループ命令の消費者命令の数を示す消費者カウントインジケータと、消費者命令の実行数を示す予約ステーション(RS)タグカウントインジケータとを備える。データフローモニタは、第1のループ命令の消費者命令のすべてが、第1のループ命令に関する消費者カウントインジケータおよびRSタグカウントインジケータに基づいて実行されたかどうかを判定するように構成される。データフローモニタは、第1のループ命令の消費者命令のすべてが実行されたと判定したことに応答して、第1のループ命令の予約ステーションセグメントに命令実行クレジットを発行するようにさらに構成される。ループ命令のすべての消費者命令が実行されたとき、消費者命令の実行を追跡し、ループ命令に命令実行クレジットを発行することによって、データフローモニタは、追加のバッファ空間などの追加のオーバーヘッドを負うことのないループ命令のデータフロー実行の管理を可能にする場合がある。
【００１４】
この点について、図1は、プログラム命令のアウトオブオーダーデータフロー実行のより低オーバーヘッドの管理を提供するように構成されるOOP100のブロック図である。詳細には、OOP100は、ループ命令のデータフロー実行を管理するための予約ステーション回路102を含む。OOP100は、数ある要素の中でも、既知のデジタル論理要素、半導体回路、処理コア、および/またはメモリ構造のうちのいずれか1つ、またはその組合せを含む場合がある。本明細書で説明する態様は、要素の任意の特定の構成には限定されず、開示される技法は、半導体ダイまたはパッケージ上の様々な構造およびレイアウトに容易に拡張することができる。図1は単一のOOP100を示すが、いくつかの態様は通信可能に結合する複数のOOP100を提供してもよいことを理解されたい。
【００１５】
いくつかの環境では、アプリケーションプログラムは、カーネルの「パイプライン」(すなわち、機能の固有の領域)として概念化される場合があり、各カーネルは、パイプラインを通過するデータトークンの流れにおいて動作する。図1のOOP100は、1つまたは複数のカーネルの機能を実装し、OOP100にストリーミングされる様々なデータセットにその機能を繰り返し適用するためのプログラム可能なコアを具現化してもよい。エネルギー効率が高い方式でカーネル機能を提供するために、OOP100は、本明細書では「命令再活性化」と呼ぶプロセス機能を提供してもよい。命令再活性化は、プログラム命令のセットが、一度にOOP100内にともにロードされることと、OOP100から退出または退去されることなく複数回続けて実行されることとを可能にする。このように、OOP100は、OOP100にストリーミングされた連続するデータ項目に対して命令のセットを反復して実行してもよい。したがって、命令再活性化は、マルチステージ実行パイプラインの必要性を除去することによって、エネルギー消費を低減し、OOP100のプロセッサ性能を改善する場合がある。ループなどのプログラミング構造の反復的な性質のために、命令再活性化により、OOP100が、ループ命令を備えるカーネルを処理するのに特に適するようになってもよい。
【００１６】
OOP100は、1つまたは複数の予約ステーションブロック(本明細書では"RSB"とも呼ぶ)内に編成され、予約ステーションブロックの各々は、一般のタイプのプログラム命令に対応する場合がある。たとえば、ストリームRSB104は、矢印108で示されるように、チャネルユニット106を介してデータストリームを受け取るための命令を処理する場合がある。計算RSB110は、矢印114で示されるように、計算動作を実行するための1つまたは複数の機能ユニット112(たとえば、論理演算ユニット(ALU)および/または浮動小数点演算ユニット)にアクセスする命令を処理する場合がある。計算RSB110内の命令によって生成された結果は、計算RSB110内の他の命令によって入力として消費される場合がある。ロードRSB116は、矢印120および122で示されるように、メモリ118などのデータ記憶装置からデータをロードし、データ記憶装置にデータを出力するための命令を処理する。OOP100が、ストリームRSB104、計算RSB110、および/またはロードRSB116の各々のうちの2つ以上内に編成されてもよいことを理解されたい。ストリームRSB104、計算RSB110、およびロードRSB116は、1つまたは複数の予約ステーションセグメント(本明細書では"RSS"とも呼ぶ)124(0〜X)、126(0〜Y)、および128(0〜Z)をそれぞれ含む。予約ステーションセグメント124(0〜X)、126(0〜Y)、および128(0〜Z)の各々は、常駐命令のデータフロー実行に必要な関連データとともに、単一の命令を記憶する。
【００１７】
典型的な動作において、入力通信バス130は、矢印134で示されるように、OOP100の命令ユニット132に、OOP100によって実行されるカーネルのための命令を通信する。命令ユニット132は、次いで、命令タイプに基づいて、(矢印136で示されるように)ストリームRSB104の1つまたは複数の予約ステーションセグメント124(0〜X)内に、(矢印138で示されるように)計算RSB110の1つまたは複数の予約ステーションセグメント126(0〜Y)内に、および/または(矢印140で示されるように)ロードRSB116の1つまたは複数の予約ステーションセグメント128(0〜Z)内に命令をロードする。データフローモニタ142はまた、矢印143で示されるように、実行すべきいくつかのループ反復などの初期化データを受け取る場合もある。
【００１８】
OOP100は、次いで、任意の適切な順序で、予約ステーションセグメント124(0〜X)、126(0〜Y)、および/または128(0〜Z)の常駐命令を実行する場合がある。非限定的な例として、OOP100は、データフロー実行順序で、予約ステーションセグメント124(0〜X)、126(0〜Y)、および/または128(0〜Z)の常駐命令を実行する場合がある。各常駐命令の実行によって生成された結果(もしあれば)および常駐命令の識別子は、矢印144、146、および148でそれぞれ示されるように、予約ステーションセグメント124(0〜X)、126(0〜Y)、および/または128(0〜Z)によってブロードキャストされる。予約ステーションセグメント124(0〜X)、126(0〜Y)、および/または128(0〜Z)は、次いで、(それぞれ矢印150、152、および154で示されるように)入力ストリームとしてブロードキャストデータを受け取る。予約ステーションセグメント124(0〜X)、126(0〜Y)、および/または128(0〜Z)は、入力オペランド(図示せず)として必要とされる以前実行された命令からの結果を識別するために、矢印150、152、および154で示されるそれぞれの入力ストリームを監視してもよい。入力オペランドは、検出されると、記憶される場合があり、結局はすべての必要なオペランドが受け取られ、予約ステーションセグメント124(0〜X)、126(0〜Y)、および/または128(0〜Z)に関連する常駐命令が、データフロー実行のために提供されてもよい。したがって、ループのためのループ命令は、ループのすべての反復が完了したことをデータフローモニタ142が検出するまで、データフロー方式で反復して実行されてもよい。データは、矢印158で示されるように、OOP100から出力通信バス156にストリーミングされてもよい。
【００１９】
図1のOOP100とともに生じる場合がある1つの問題は、入力データの消費に対する命令の入力データの生成の管理である。生産者命令が、消費者命令が入力としてデータを利用することができるレートを超えるレートでデータを生成する場合、データは失われる場合がある。この問題は、入力データのための中間のストレージ機構または他のバッファ機構を使用することによって緩和される場合があるが、追加のプロセッササイクルおよび/またはエネルギー消費の費用がかかる。
【００２０】
この点について、図1の予約ステーション回路102が提供される。予約ステーション回路102のデータフローモニタ142ならびに予約ステーションセグメント124(0〜X)、126(0〜Y)、および/または128(0〜Z)は、1ループ反復中の所与の時間に各命令を実行するのが可能になるときを判定するクレジットベースのシステムを提供するように連係する。詳細には、図1のデータフローモニタ142は、ループ反復中に、消費者命令のすべてが実行を完了した場合にのみ、(たとえば、命令実行クレジットが発行されることによって)確実にループ命令を実行することが可能になるように動作する。本明細書で使用する「消費者命令」は、入力として前のループ命令(「生産者命令」)の出力に依存するループ命令を指す。したがって、所与のループ命令は、消費者命令と生産者命令の両方である場合がある。
【００２１】
予約ステーションセグメント124(0〜X)、126(0〜Y)、および128(0〜Z)の各々は、図2に関して以下でさらに詳細に説明するように、命令実行クレジットインジケータに関連付けられる。いくつかの態様では、各命令実行クレジットインジケータは、カウンタを備える場合があり、かつ/またはフラグ状態インジケータおよび/もしくは他の状態インジケータである場合がある。OOP100によって実行されるべきカーネルの初期化の一部として、データフローモニタ142は、矢印163、164、および166でそれぞれ示されるように、予約ステーションセグメント124(0〜X)、126(0〜Y)、および128(0〜Z)の各々に初期命令実行クレジット160を配信してもよい。予約ステーションセグメント124(0〜X)、126(0〜Y)、および128(0〜Z)の各々は、関連の命令実行クレジットインジケータに応じて、その関連の常駐ループ命令の実行を行う。様々に述べるように、関連の常駐ループ命令は、対応する命令実行クレジットインジケータによって示される場合にのみ、予約ステーションセグメント124(0〜X)、126(0〜Y)、および128(0〜Z)によって実行するために提供される場合がある。命令実行クレジットインジケータがカウンタであるいくつかの態様では、関連の常駐ループ命令は、命令実行クレジットインジケータの値が0よりも大きい場合にのみ、実行のために提供される場合がある。このようにして、生産者命令は、消費者命令が生産された入力データを消費することによって「キャッチアップ」することができるまで、実行することを防止される場合がある。
【００２２】
データフローモニタ142は、関連の常駐ループ命令に関するすべての消費者命令が実行されたとき、予約ステーションセグメント124(0〜X)、126(0〜Y)、および128(0〜Z)の各々に追加の命令実行クレジット162を発行するように構成される。追加の命令実行クレジット162が予約ステーションセグメント124(0〜X)、126(0〜Y)、および128(0〜Z)に配信されてもよいときを判定するために、データフローモニタ142は、予約ステーションセグメント124(0〜X)、126(0〜Y)、および128(0〜Z)に関連する各ループ命令に対応するエントリ(図示せず)を維持する。各エントリは、ループ命令の出力に応じて消費者命令の数を示す、消費者カウントインジケータ(図示せず)を含む。各エントリは、エントリに対応するループ命令の消費者命令が実行された回数を示す、RSタグカウントインジケータ(図示せず)をさらに含む。予約ステーションセグメント124(0〜X)、126(0〜Y)、および128(0〜Z)のループ命令が実行されるとき、データフローモニタ142は、矢印168、170、および172で示されるように、予約ステーションセグメント124(0〜X)、126(0〜Y)、および128(0〜Z)から1つまたは複数のオペランドソースRSタグ(図示せず)を受け取る。各オペランドソースRSタグは、ループ命令によって使用されるオペランドを生成する「生産者」ループ命令に関連付けられた予約ステーションセグメント124(0〜X)、126(0〜Y)、および128(0〜Z)を識別する。データフローモニタ142は、「生産者」ループ命令の消費者命令が実行されたことを示すために、各オペランドソースRSタグに対応する「生産者」ループ命令のためのRSタグカウントインジケータをインクリメントする。
【００２３】
データフローモニタ142は、次いで、各ループ命令の消費者カウントインジケータを対応するRSタグカウントインジケータと比較することによって各ループ命令のすべての消費者命令が実行されたかどうかを判定するためにエントリを評価してもよい。消費者カウントインジケータとRSタグカウントインジケータとが等しい場合、データフローモニタ142は、ループ命令のすべての消費者命令が実行されたと結論付ける場合がある。データフローモニタ142は、次いで、ループ命令のRSタグカウントインジケータを0にリセットし、ループ命令の予約ステーションセグメント124(0〜X)、126(0〜Y)、および128(0〜Z)に実行クレジットを発行してもよい。このようにして、ループ命令は、その消費者命令のすべてが実行されるまで、再び実行されるのが可能でない場合がある。これは、たとえば、様々なループ反復の様々なオペランド値を追跡するための追加のバッファストレージ空間を必要としないことによって、ループ命令のデータフロー実行のより低オーバーヘッドの管理を可能にする場合がある。データフローモニタ142によって記憶されたエントリの要素は、図4に関して以下でさらに詳細に説明し、RSタグカウントインジケータを調整し追加の実行クレジットを発行するためのデータフローモニタ142の例示的な動作は、図5に関して以下でさらに詳細に説明する。
【００２４】
データフローモニタ142、ストリームRSB104、計算RSB110、および/またはロードRSB116の態様は、1ループ反復の完了を検出するための様々な技法を使用してもよい。いくつかの態様では、RSB(すなわち、ストリームRSB104、計算RSB110、およびロードRSB116のうちの1つ)は、ループ反復Iの間に実行された命令のカウントを維持する場合がある。ループ反復Iのために実行された命令のカウントがRSB内の命令の数に等しくなるとき、RSBは、エンドループ反復Iステータス(図示せず)をデータフローモニタ142に通信する。データフローモニタ142がすべてのRSBからエンドループ反復Iステータスを受け取ると、データフローモニタ142は、ループ反復Iのすべての命令が実行を終了したことを知る。データフローモニタ142は、次いで、追加の命令実行クレジット162を発行してもよい。
【００２５】
いくつかの態様は、各常駐命令が命令のデータフロー順序付けにおける「リーフ」命令(すなわち、データ依存性がない命令)であるかどうかを示すエンドビット(図示せず)を各予約ステーションセグメント124(0〜X)、126(0〜Y)、および128(0〜Z)が含むことを提供する場合がある。すべての終了フラグ命令が実行されたとき、1ループ反復は完了する。したがって、各常駐命令は、実行されると、その終了フラグをブロードキャストする。データフローモニタ142は、特定のループ反復Iに関する終了フラグ命令実行の数のカウントと、ループ反復I内の終了フラグ命令の総数とを維持する。ループ反復Iに関する終了フラグ命令実行の数が終了フラグ命令の総数に等しくなると、データフローモニタ142は、ループ反復Iのすべての命令が実行を完了したと結論付ける場合がある。データフローモニタ142は、次いで、追加の命令実行クレジット162を発行してもよい。
【００２６】
図2は、図1の予約ステーションセグメント124(0〜X)、126(0〜Y)、および128(0〜Z)のうちの1つなどの、例示的な予約ステーションセグメント200の要素を示す図である。図2に示す要素は説明の目的でのみ示されており、図1の予約ステーションセグメント124(0〜X)、126(0〜Y)、および/または128(0〜Z)のいくつかの態様は、図2に示すよりも多くの、または少ない要素を含んでもよいことを理解されたい。
【００２７】
図2の予約ステーションセグメント200は、予約ステーションセグメント200のための一意の識別子として役立つRSタグ202を含む。予約ステーションセグメント200は、予約ステーションセグメント200に関連するループ命令("instr")206を記憶するループ命令レジスタ204も含む。非限定的な例として、ループ命令206は命令オペコードであってもよい。図2の例では、RSタグ202は、7ビット識別子(ID)タグ208および1ビット終了フラグ210を含む。終了フラグ210は、設定されると、予約ステーションセグメント200に関連するループ命令206が「リーフ」命令であることを示す。実行されたループ命令206のRSタグ202内に設定された終了フラグ210を検出することによって、図1のデータフローモニタ142は、1ループ反復が完了したと判定する場合がある。いくつかの態様では、1ループ反復は、2つ以上のリーフ命令を含む場合がある。したがって、データフローモニタ142は、1ループ反復内に実行されたリーフ命令のカウントを追跡するように構成されてもよい。予約ステーションセグメント200の他の態様は、1ループ反復が完了したと判定するための他の技法を使用してもよいことを理解されたい。非限定的な例として、予約ステーションセグメント200がその一部であるRSBは、各ループ反復中に実行された命令のカウントを維持してもよい。
【００２８】
予約ステーションセグメント200は、実行すべきループ命令206によって必要とされる場合があるデータのためのストレージも提供する。図2の例では、ループ命令206は、第1のオペランドおよび第2のオペランドに関連付けられる。したがって、第1のオペランドに関連するデータを記憶するために、予約ステーションセグメント200は、オペランドソースRSタグ212およびオペランドバッファ214(0)を提供する。オペランドソースRSタグ212は、第1のオペランドを生成する「生産者」命令(図示せず)に関連付けられた予約ステーションセグメント(図示せず)を識別する場合がある。オペランドバッファ214(0)は、1つまたは複数のオペランドバッファエントリ216(0)〜216(N)と、対応する1つまたは複数のオペランドレディフラグ218(0)〜218(N)とを含む。オペランドバッファエントリ216(0)〜216(N)の各々は、対応するループ反復0〜N(図示せず)の間に生成されたオペランド値を記憶する場合があるが、各オペランドレディフラグ218(0)〜218(N)は、関連のオペランドバッファエントリ216(0)〜216(N)がループ命令206による消費の準備が整っているときを示す場合がある。
【００２９】
同様に、第2のオペランドに関連するデータを記憶するために、予約ステーションセグメント200は、オペランドソースRSタグ220およびオペランドバッファ214(1)を提供する。オペランドバッファ214(1)は、1つまたは複数のオペランドバッファエントリ222(0)〜222(N)と、対応する1つまたは複数のオペランドレディフラグ224(0)〜224(N)とを含む。オペランドソースRSタグ220、オペランドバッファエントリ222(0)〜222(N)、およびオペランドレディフラグ224(0)〜224(N)は、それぞれ、オペランドソースRSタグ212、オペランドバッファエントリ216(0)〜216(N)、およびオペランドレディフラグ218(0)〜218(N)の機能に対応する方式で機能する場合がある。
【００３０】
予約ステーションセグメント200は、反復カウンタ226も含む。反復カウンタ226は、初期値0に設定される場合があり、続いてループ命令206の各実行とともにインクリメントされる場合がある。反復カウンタ226の現在値は、ループ命令206がデータフロー実行のために提供されるとき、予約ステーションセグメント200によって提供される場合がある。このようにして、反復カウンタ226の現在値は、ループ命令206が実行されたループ反復を判定するために、後で実行される消費者命令によって使用されてもよい。
【００３１】
予約ステーションセグメント200は、図1のデータフローモニタ142によって予約ステーションセグメント200に配信された命令実行("instr ex")クレジット230を記憶する、命令実行クレジットインジケータ228をさらに含む。予約ステーションセグメント200は、ループ命令206が実行されてもよいことを命令実行クレジットインジケータ228が示す場合にのみ、実行のためのループ命令206を提供するように構成される場合がある。たとえば、いくつかの態様では、命令実行クレジットインジケータ228は、カウンタを備える場合があり、カウンタの値は、ループ命令206の各実行の後、デクリメントされる場合がある。したがって、予約ステーションセグメント200は、命令実行クレジットインジケータ228が0よりも大きい値を現在記憶している場合にのみ、実行のためのループ命令206を提供するように構成される場合がある。
【００３２】
図3〜図5は、図1の予約ステーション回路102によって実装されるように、命令実行クレジットに基づいて命令を実行する例示的な予約ステーションセグメントが、ループ命令のデータフロー実行のより低オーバーヘッドの管理をどのように提供する場合があるかを示す。図3は、予約ステーションセグメントと、その間のデータ依存性とを示す。図4は、図3の予約ステーションセグメントに対応するデータフロー監視エントリの初期ステータスを示す。図5は、1ループ反復中にループ命令のデータフロー実行を管理するために命令実行クレジットが図3の予約ステーションセグメントにどのように配信される場合があるかを示す。
【００３３】
図3では、合計6つの予約ステーションセグメント(RSS)が示される。各RSS300、302、および304は、図1のチャネルユニット106などのチャネルユニットからデータトークン(図示せず)を取り出す常駐ストリーム命令(図示せず)に関連付けられる。明確のために、各RSS300、302、および304の常駐ストリーム命令の入力が常にチャネルユニット106からすぐに利用可能であることが仮定される。RSS306およびRSS308は各々、2つのオペランド(図示せず)の積を計算する乗算命令(図示せず)に関連付けられる。RSS306は、それぞれ矢印310および312で示されるように、オペランドとして、RSS300およびRSS302によって提供されたデータを受け取る。同様に、RSS308は、それぞれ矢印314および316で示されるように、オペランドとして、RSS302およびRSS304によって提供されたデータを受け取る。したがって、データ依存性は、RSS306と各RSS300および302との間、ならびにRSS308と各RSS302および304との間に存在する。RSS318は、2つのオペランドの和を計算する加算命令(図示せず)に関連付けられる。RSS318は、それぞれ矢印320および322で示されるように、オペランドとして、RSS306およびRSS308によって生成された結果を受け取る。
【００３４】
図3の例では、RSS318に関連する加算命令によって生成された結果に依存する命令が存在しない。したがって、RSS318は、RSS318の加算命令の実行が1ループ反復の終了を表すことを図1のデータフローモニタ142に示すための終了フラグ324を含む。いくつかの態様では、終了フラグ324は、図2のRSタグ202の終了フラグ210などの、RSS318のRSタグの一部として記憶された1ビットインジケータを備えてもよい。
【００３５】
図4は、図1のデータフローモニタ142によって提供される場合がある、図3のRSS300、302、304、306、308、および318にそれぞれ対応する、例示的なデータフロー監視エントリ402、404、406、408、410、および412のブロック図400を示す。図4に見られるように、エントリ402〜412の各々は、消費者カウントインジケータ414およびRSタグカウントインジケータ416を含む。各エントリ402〜412の消費者カウントインジケータ414は、対応するRSS300〜308および318に関連するループ命令(図示せず)の消費者命令の数を示す。したがって、RSS300、304、306、308、および318に対応するループ命令は各々、1つの消費者命令を有するが、RSS302に関連するループ命令は、2つの消費者命令を有する。エントリ402〜412の各々に関するRSタグカウントインジケータ416は0に初期化される。
【００３６】
ループ命令のデータフロー実行を管理するために図3の各RSS300、302、304、306、308、および318に命令実行クレジットを配信するように図1の予約ステーション回路102が図4のエントリ402〜412をどのように利用する場合があるかを示すために、図5が提供される。図5は、命令実行クレジット(図2の命令実行クレジット230など)のチャート500と、ループ反復にわたって変化するときのRSタグカウントインジケータ(図4のRSタグカウントインジケータ416など)のチャート502とを示す。図3の各RSS300、302、304、306、308、および318は、チャート500および502の各々における列によって表されるが、チャート500および502の行は、ループ反復中の時間間隔504を表す。図5では、各RSS300、302、304、306、308、および318に関連する、図2の命令実行クレジットインジケータ228などの命令実行クレジットインジケータがカウンタであると仮定される。明確のために、図5について説明する際に図1〜図4の要素が参照される。
【００３７】
時間間隔0において、予約ステーション回路102のデータフローモニタ142は、図1の初期命令実行クレジット160などの初期命令実行クレジットを各RSS300、302、304、306、308、および318に配信する。この例では、初期命令実行クレジット160は値1を有する。データフローモニタ142は、関連の常駐ループ命令のいずれの消費者命令も実行されなかったことを示すために、さらに、各RSS300、302、304、306、308、および318のRSタグカウントインジケータを0に初期化する。次いで、ループ命令の実行が開始する。
【００３８】
RSS300、RSS302、およびRSS304の常駐ストリーム命令の入力データがすぐに利用可能なので、常駐ストリーム命令は、有効にデータ依存性を有しない。したがって、RSS300、RSS302、およびRSS304に関連する常駐ストリーム命令は、データフロー実行にふさわしい。図5の例では、時間間隔1において、RSS300は、実行のためのその常駐ストリーム命令を提供する。その際、RSS300は、その命令実行クレジットを0にデクリメントする。RSS300に関連するストリーム命令の実行の結果は、他のRSS302、304、306、308、および318にブロードキャストされ、図2のオペランドバッファエントリ216などのオペランドバッファエントリ内のRSS306によって検出および記憶される。同様に、RSS302は、実行のためのその常駐ストリーム命令を提供し、時間間隔2においてその命令実行クレジットを0にデクリメントする。RSS302に関連するストリーム命令の実行の結果は、RSS306とRSS308の両方によってオペランドとして検出および記憶される。RSS306およびRSS308に関連する命令がオペランドを取るので、これらの命令はデータフローモニタ142にいかなるオペランドソースRSタグも供給せず、したがって、チャート502に示すRSタグカウントインジケータは、時間間隔2を通して変化しない。
【００３９】
時間間隔3において、RSS306の常駐乗算命令の両オペランドが受け取られ、したがって、常駐乗算命令は、データフロー実行にふさわしい。RSS304の常駐ストリーム命令も、0よりも大きい命令実行クレジットを有し有効なデータ依存性を有しない、データフロー実行にふさわしい。この例では、RSS306は、実行のために、図1の機能ユニット112などの機能ユニットにその常駐乗算命令を提供する。その際、RSS306は、その命令実行クレジットを0にデクリメントする。RSS306の乗算命令の実行の結果は、RSS318によってオペランドとして受け取られる。RSS306のオペランドソースRSタグ(すなわち、RSS300およびRSS302のRSタグ)も、データフローモニタ142によって受け取られ、データフローモニタ142は、RSS300およびRSS302のRSタグカウントインジケータを1にインクリメントする。時間間隔3において、RSS308に関連する常駐乗算命令およびRSS318に関連する常駐加算命令のデータ依存性は満足されず、したがって、これらの命令は、データフロー実行にはふさわしくないことに留意されたい。
【００４０】
時間間隔4において、データフローモニタ142は、RSS300の消費者カウントインジケータ(図4に見られるように値1を有する)が、チャート502に見られるように、RSS300のRSタグカウントインジケータに等しいと判定する。したがって、データフローモニタ142は、RSS300に関連するループ命令のすべての消費者命令が実行されたと結論付ける。したがって、データフローモニタ142は、RSS300に追加の実行クレジットを発行し、その命令実行クレジットを1にし、RSS300のRSタグカウントインジケータを0にリセットする。
【００４１】
時間間隔5において、RSS300およびRSS304に関連する常駐ストリーム命令の各々は、データフロー実行にふさわしい。図5の例では、RSS304は、実行のためのその常駐ストリーム命令を提供し、その命令実行クレジットを0にデクリメントする。その結果、時間間隔6において、RSS308の常駐乗算命令の(RSS302およびRSS304からの)両オペランドが受け取られ、したがって、常駐乗算命令は、データフロー実行にふさわしい。したがって、この例では、RSS308は、実行のために、図1の機能ユニット112などの機能ユニットにその常駐乗算命令を提供する。その際、RSS308は、その命令実行クレジットを0にデクリメントする。RSS308の乗算命令の実行の結果は、RSS318によってオペランドとして受け取られる。RSS308のオペランドRSタグ(すなわち、RSS302およびRSS304のRSタグ)も、データフローモニタ142によって受け取られ、データフローモニタ142は、RSS302のRSタグカウントインジケータを2にインクリメントし、RSS304のRSタグカウントインジケータを1にインクリメントする。
【００４２】
時間間隔7において、データフローモニタ142は、RSS302の消費者カウントインジケータ(図4に見られるように値2を有する)が、チャート502に見られるように、RSS302のRSタグカウントインジケータに等しいと判定する。したがって、データフローモニタ142は、RSS302に関連するループ命令のすべての消費者命令が実行されたと結論付ける。したがって、データフローモニタ142は、RSS302に追加の実行クレジットを発行し、その命令実行クレジットを1にし、RSS302のRSタグカウントインジケータを0にリセットする。同様に、データフローモニタ142は、RSS304の消費者カウントインジケータ(すなわち、図4に見られるように1)が、チャート502に示すように、RSS304のRSタグカウントインジケータに等しいと判定する。データフローモニタ142は、RSS304に関連するループ命令のすべての消費者命令が実行されたと結論付け、RSS304に追加の実行クレジットを発行し、その命令実行クレジットを1にする。データフローモニタ142はまた、RSS302のRSタグカウントインジケータを0にリセットする。
【００４３】
時間間隔8において、RSS300、RSS302、およびRSS304に関連する常駐ストリーム命令ならびにRSS318に関連する常駐加算命令は各々、実行にふさわしい。図5の例では、RSS300、RSS302、およびRSS304に関連する常駐ストリーム命令は、それぞれ時間間隔8、9、および10の間、実行のために選択される。RSS300、RSS302、およびRSS304の各々に関する命令実行クレジットは0にデクリメントされる。
【００４４】
最後に、時間間隔11において、RSS318に関連する常駐加算命令は、0よりも大きい命令実行クレジットを有する命令のみである。その結果、入力データはRSS300、RSS302、RSS306、RSS308、および/またはRSS318の常駐命令にとって利用可能である場合があるが、常駐命令のいずれも、追加のクレジットがデータフローモニタ142によって配信されるまで、再び実行されない場合がある。これは、生産者命令によって生成されたデータを消費する時間を提供することによってRSS318の常駐命令が「キャッチアップ」することを可能にする。したがって、時間間隔11において、RSS318は、実行のためのその常駐加算命令を機能ユニット112に提供し、その命令実行クレジットを0にデクリメントする。RSS318のオペランドRSタグ(すなわち、RSS306およびRSS308のRSタグ)も、データフローモニタ142によって受け取られ、データフローモニタ142は、RSS306およびRSS308のRSタグカウントインジケータを1にインクリメントする。
【００４５】
いくつかの態様では、RSS318の常駐加算命令が実行されると、データフローモニタ142は、RSS318の終了フラグ324を検出する場合があり、ループの1反復が完了したと判定する場合がある。したがって、時間間隔11において、データフローモニタ142は、RSS300、RSS302、RSS304、RSS306、RSS308、およびRSS318の各々に追加の命令実行クレジットを配信する場合がある(図示せず)。この場合、追加の命令実行クレジットの配信は、各RSS300、302、304、306、308、および318に関連する命令実行クレジットを1にインクリメントする効果を有する。RSS300、RSS302、RSS304、RSS306、RSS308、およびRSS318の常駐命令のデータフロー実行は、次いで、このようにして継続される。
【００４６】
図1の例示的なOOP100におけるループ命令のより低オーバーヘッドの管理を提供するための例示的な動作を示すために、図6Aおよび図6Bが提供される。図6Aは、初期命令実行クレジットを配信し、図4のRSタグカウントインジケータ416などのRSタグカウントインジケータを使用して消費者命令の実行を追跡するための動作を示すフローチャートである。図6Bは、ループ命令のすべての消費者命令が実行されたかどうか、したがって命令実行クレジットが発行される場合があるかどうかを判定するための動作を示す。明確のために、図6Aおよび図6Bについて説明する際に図1〜図4の要素が参照される。
【００４７】
図6Aでは、動作は、データフローモニタ142が、場合によっては、ループ命令206に対応する予約ステーションセグメント200などの予約ステーションセグメントに初期命令実行クレジット160を配信することで開始する(ブロック600)。上記で説明したように、各予約ステーションセグメント300、302、304、306、308、318は、ループのループ命令206を記憶する場合がある。予約ステーションセグメント200は、次いで、ループ命令206がデータフロー実行のために提供される場合があることを予約ステーションセグメント200の命令実行クレジット230が示すかどうかを判定する(ブロック602)。ループ命令206がデータフロー実行のためには提供されない場合があることを命令実行クレジット230が示す場合、処理は、図6Aのブロック602において継続する場合がある。しかしながら、ブロック602において、ループ命令206がデータフロー実行のために提供される場合があることを命令実行クレジット230が示すと予約ステーションセグメント200が判定する場合、予約ステーションセグメント200は、データフロー実行のための予約ステーションセグメント200のループ命令206を提供する(ブロック604)。いくつかの態様では、ブロック604の動作は、予約ステーションセグメント200の1つまたは複数のオペランドバッファ214がループ命令206によって必要とされる1つまたは複数のオペランドを含むと判定する予約ステーションセグメント200を含んでもよい。予約ステーションセグメント200は、次いで、データフロー実行のためのループ命令206および1つまたは複数のオペランドを提供する場合がある。
【００４８】
ループ命令206がデータフロー実行のために提供された後、予約ステーションセグメント200は、ループ命令206の命令実行クレジット230をデクリメントする場合がある(ブロック606)。データフローモニタ142は、次いで、ループ命令206の1つまたは複数のオペランドソースRSタグ212、220を受け取る場合がある(ブロック608)。データフローモニタ142は、次に、1つまたは複数のオペランドソースRSタグ212、220によって示された1つまたは複数のエントリ402〜412のRSタグカウントインジケータ416をインクリメントする場合がある(ブロック610)。次いで、処理は図6Bのブロック612において再開する。
【００４９】
次に図6Bを参照すると、データフローモニタ142は、ループ命令206のすべての消費者命令が、ループ命令206の消費者カウントインジケータ414およびRSタグカウントインジケータ416に基づいて実行されたかどうかを判定する(ブロック612)。いくつかの態様では、消費者カウントインジケータ414は、ループ命令206の消費者命令の数を示すが、RSタグカウントインジケータ416は、消費者命令の実行数を示す。データフローモニタ142は、ループ命令206のすべての消費者命令が、ループ命令206の消費者カウントインジケータ414とRSタグカウントインジケータ416が等しいかどうかを判定することによって実行されたかどうかを判定することをいくつかの態様は提供する場合がある。ブロック612において、ループ命令206のすべての消費者命令が実行されたとは限らないとデータフローモニタ142が判定する場合、処理は、図6Aのブロック602において再開する場合がある。しかしながら、ブロック612において、ループ命令206のすべての消費者命令が実行されたとデータフローモニタ142が判定する場合、データフローモニタ142は、ループ命令206に対応する予約ステーションセグメント200に追加の命令実行クレジット162を発行する(ブロック614)。データフローモニタ142は、次いで、ループ命令206のRSタグカウントインジケータ416を0にリセットする場合がある(ブロック616)。このようにして、データフローモニタ142は、ループ命令の消費者命令の実行を追跡し、ループ命令のすべての消費者命令が実行されたとき、ループ命令に命令実行クレジットを発行することによって、ループ命令のデータフロー実行の低オーバーヘッドの管理を提供する場合がある。
【００５０】
本明細書で開示する態様による、OOPによるループ命令のデータフロー実行のより低オーバーヘッドの管理を提供すること、ならびに関連の回路、方法、およびコンピュータ可読媒体は、任意のプロセッサベースのデバイスにおいて提供されるか、または任意のプロセッサベースのデバイスに組み込まれてもよい。例としては、限定はしないが、セットトップボックス、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、固定位置データユニット、モバイルロケーションデータユニット、モバイルフォン、セルラーフォン、コンピュータ、ポータブルコンピュータ、デスクトップコンピュータ、携帯情報端末(PDA)、モニタ、コンピュータモニタ、テレビジョン、チューナ、ラジオ、衛星ラジオ、音楽プレーヤ、デジタル音楽プレーヤ、ポータブル音楽プレーヤ、デジタルビデオプレーヤ、ビデオプレーヤ、デジタルビデオディスク(DVD)プレーヤ、およびポータブルデジタルビデオプレーヤが含まれる。
【００５１】
この点について、図7は、図1に示す予約ステーション回路102を使用することができる、プロセッサベースのシステム700の一例を示す。この例では、プロセッサベースのシステム700は、1つまたは複数の中央処理ユニット(CPU)702を含み、各CPUが図1の予約ステーション回路(RSC)102を備える場合がある1つまたは複数のプロセッサ704を含む。CPU702は、一時的に記憶されたデータへの高速アクセスのためにプロセッサ704に結合されたキャッシュメモリ706を有する場合がある。CPU702は、システムバス708に結合され、プロセッサベースのシステム700内に含まれるマスターデバイスとスレーブデバイスとを相互結合することができる。よく知られているように、CPU702は、システムバス708を介してアドレス情報、制御情報、およびデータ情報を交換することによって、これらの他のデバイスと通信する。たとえば、CPU702は、メモリユニット712(0)〜712(N)を提供するメモリシステム710にバストランザクション要求を通信することができる。
【００５２】
他のマスターデバイスおよびスレーブデバイスをシステムバス708に接続することができる。図7に示すように、これらのデバイスは、例として、メモリコントローラ714、1つまたは複数の入力デバイス716、1つまたは複数の出力デバイス718、1つまたは複数のネットワークインターフェースデバイス720、および1つまたは複数のディスプレイコントローラ722を含むことができる。入力デバイス716は、限定はしないが、入力キー、スイッチ、音声プロセッサなどを含む、任意のタイプの入力デバイスを含むことができる。出力デバイス718は、限定はしないが、オーディオインジケータ、ビデオインジケータ、他の視覚インジケータなどを含む、任意のタイプの出力デバイスを含むことができる。ネットワークインターフェースデバイス720は、ネットワーク724との間のデータ交換を可能にするように構成される任意のデバイスとすることができる。ネットワーク724は、限定はしないが、ワイヤードまたはワイヤレスネットワーク、専用または公衆ネットワーク、ローカルエリアネットワーク(LAN)、ワイドローカルエリアネットワーク(WLAN)、およびインターネットを含む、任意のタイプのネットワークとすることができる。ネットワークインターフェースデバイス720は、必要に応じて、任意のタイプの通信プロトコルをサポートするように構成することができる。
【００５３】
CPU702はまた、1つまたは複数のディスプレイ726に送信される情報を制御するために、システムバス708を介してディスプレイコントローラ722にアクセスするように構成されてもよい。ディスプレイコントローラ722は、1つまたは複数のビデオプロセッサ728を介して、表示されるべき情報をディスプレイ726に送信し、ビデオプロセッサ728は、表示されるべき情報を、ディスプレイ726に適したフォーマットになるように処理する。ディスプレイ726は、限定はしないが、陰極線管(CRT)、液晶ディスプレイ(LCD)、プラズマディスプレイなどを含む任意のタイプのディスプレイを含むことができる。
【００５４】
本明細書において開示される態様に関して説明される種々の例示的な論理ブロック、モジュール、回路、およびアルゴリズムは、電子ハードウェア、メモリもしくは別のコンピュータ可読媒体に記憶され、プロセッサもしくは他の処理デバイスによって実行される命令、またはその両方の組合せとして実現できることは、当業者はさらに理解されよう。本明細書において説明するマスターデバイスおよびスレーブデバイスは、例として、任意の回路、ハードウェア構成要素、集積回路(IC)、またはICチップにおいて利用されてもよい。本明細書において開示するメモリは、任意のタイプおよびサイズのメモリであってもよく、所望の任意のタイプの情報を記憶するように構成されてもよい。この互換性を明確に説明するために、上記では、種々の例示的な構成要素、ブロック、モジュール、回路、およびステップは、概してそれらの機能に関して説明してきた。そのような機能がどのように実現されるかは、特定の適用例、設計上の選択、および/またはシステム全体に課された設計制約によって決まる。当業者は、説明した機能を特定の適用例ごとに様々な方法で実現することができるが、そのような実施態様の判定は、本開示の範囲からの逸脱を引き起こすものと解釈されるべきではない。
【００５５】
本明細書において開示される態様に関して説明される種々の例示的な論理ブロック、モジュール、および回路は、プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理デバイス、個別ゲートもしくはトランジスタロジック、個別ハードウェア構成要素、または本明細書において説明される機能を実行するように設計されるそれらの任意の組合せを用いて実現または実行されてもよい。プロセッサは、マイクロプロセッサである場合があるが、代替としてプロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、またはステートマシンであってもよい。プロセッサは、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサの組合せ、複数のマイクロプロセッサ、DSPコアと連携した1つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成として実装される場合もある。
【００５６】
本明細書で開示する態様は、ハードウェアにおいて、また、ハードウェアに記憶された命令において具現される場合があり、命令は、たとえば、ランダムアクセスメモリ(RAM)、フラッシュメモリ、読取り専用メモリ(ROM)、電気的プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または当技術分野において知られている任意の他の形態のコンピュータ可読媒体内に存在する場合がある。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み取ること、および記憶媒体に情報を書き込むことができるようにプロセッサに結合される。代替として、記憶媒体は、プロセッサに一体化される場合がある。プロセッサおよび記憶媒体は、ASICに存在する場合がある。ASICは、遠隔局内に存在してもよい。代替では、プロセッサおよび記憶媒体は、遠隔局、基地局、またはサーバ内に個別構成要素として存在してもよい。
【００５７】
本明細書の例示的な態様のいずれかにおいて説明される動作ステップは、例および検討を提供するために説明されることにも留意されたい。説明される動作は、図示されるシーケンス以外の多数の異なるシーケンスにおいて実行される場合がある。さらに、単一の動作ステップにおいて説明される動作は、実際には複数の異なるステップにおいて実行される場合がある。さらに、例示的な態様において論じられる1つまたは複数の動作ステップが組み合わせられる場合がある。フローチャート図に示された動作ステップは、当業者には容易に明らかであるように、多数の異なる変更を受ける場合があることが理解されるべきである。当業者は、情報および信号が様々な異なる技術および技法のいずれかを使用して表される場合があることも理解するであろう。たとえば、上記の説明全体にわたって参照される場合があるデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁場もしくは磁性粒子、光場もしくは光学粒子、またはそれらの任意の組合せによって表される場合がある。
【００５８】
本開示の上記の説明は、当業者が本開示を実施するかまたは使用することを可能にするために与えられている。本開示に対する様々な修正は、当業者には容易に明らかになり、本明細書で定義した一般原理は、本開示の趣旨または範囲から逸脱することなく他の変形形態に適用されてもよい。したがって、本開示は、本明細書に記載の例および設計に限定されることを意図するものではなく、本明細書で開示される原理および新規の特徴と一致する最も広い範囲が与えられるべきである。
【符号の説明】
【００５９】
100  アウトオブオーダープロセッサ、OOP
102  予約ステーション回路、RSC
104  ストリームRSB
106  チャネルユニット
110  計算RSB
112  機能ユニット
116  ロードRSB
118  メモリ
124  予約ステーションセグメント、RSS
126  予約ステーションセグメント、RSS
128  予約ステーションセグメント、RSS
130  入力通信バス
132  命令ユニット
142  データフローモニタ
156  出力通信バス
200  予約ステーションセグメント、RSS
202  RSタグ
204  ループ命令レジスタ
206  ループ命令
208  識別子タグ、IDタグ
210  終了フラグ
212  オペランドソースRSタグ
214  オペランドバッファ
216  オペランドバッファエントリ
218  オペランドレディフラグ
220  オペランドソースRSタグ
222  オペランドバッファエントリ
224  オペランドレディフラグ
226  反復カウンタ
228  命令実行クレジットインジケータ
230  命令実行クレジット
300  RSS(ストリーム)
302  RSS(ストリーム)
304  RSS(ストリーム)
306  RSS(乗算)
308  RSS(乗算)
318  RSS(加算)
324  終了フラグ
402  データフロー監視エントリ
404  データフロー監視エントリ
406  データフロー監視エントリ
408  データフロー監視エントリ
410  データフロー監視エントリ
412  データフロー監視エントリ
414  消費者カウントインジケータ
416  RSタグカウントインジケータ
500  命令実行クレジットのチャート
502  RSタグカウントインジケータのチャート
504  時間間隔
700  プロセッサベースのシステム
702  中央処理ユニット、CPU
704  プロセッサ
706  キャッシュメモリ
708  システムバス
710  メモリシステム
712  メモリユニット
714  メモリコントローラ
716  入力デバイス
718  出力デバイス
720  ネットワークインターフェースデバイス
722  ディスプレイコントローラ
724  ネットワーク
726  ディスプレイ
728  ビデオプロセッサ
【図１】
2018508908.tif 000003
【図２】
2018508908.tif 000004
【図３】
2018508908.tif 000005
【図４】
2018508908.tif 000006
【図５】
2018508908.tif 000007
【図６Ａ】
2018508908.tif 000008
【図６Ｂ】
2018508908.tif 000009
【図７】
2018508908.tif 000010
【国際調査報告】
2018508908.tif 000011
2018508908.tif 000012