(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-04-01
(54)【発明の名称】ホストとコプロセッサの動作を通信を介して同期させる方法
(51)【国際特許分類】
G06F 9/54 20060101AFI20220325BHJP
【FI】
G06F9/54 C
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2021547826
(86)(22)【出願日】2020-01-07
(85)【翻訳文提出日】2021-10-12
(86)【国際出願番号】 US2020012455
(87)【国際公開番号】W WO2020167388
(87)【国際公開日】2020-08-20
(32)【優先日】2019-02-14
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】521359737
【氏名又は名称】アクシス・セミコンダクター・インコーポレーテッド
【氏名又は名称原語表記】AXIS SEMICONDUCTOR,INC.
(74)【代理人】
【識別番号】110000028
【氏名又は名称】特許業務法人明成国際特許事務所
(72)【発明者】
【氏名】ワン・シャオリン
(72)【発明者】
【氏名】ウー・チエン
(57)【要約】
【課題】
【解決手段】
ホストと1つ以上のコプロセッサのスレッド実行を同期させる方法は、ホストによってイベントコマンドおよび少なくとも1つのコプロセッサ命令をFIFOに書き込むことと、イベントコマンドとコプロセッサの現在のイベントレジスタとを一致するまで比較することとを含み、FIFOエントリは、ポップされ、命令は、実行するためにコプロセッサに転送される。複数のエントリグループをFIFOに書き込むことができ、各エントリグループはイベントコマンドで始まる。命令は、共有メモリとデータを交換してそのスレッドを受信データに適用するようコプロセッサに指示できる。プロセッサと共有メモリとは、比較、ポップおよび命令の転送を行うコントローラを有するリングタイプのバスでつなぐことができる。コプロセッサは、スレッド実行中に現在のイベントレジスタを消去し、その後、処理が完了したときにイベントコマンドをレジスタに書き込む。
【選択図】
図2
【特許請求の範囲】
【請求項1】
ホストプロセッサとコプロセッサのプログラム実行を同期させる方法であって、本方法は、
A)アプリケーションをホスト部分とヘルパー部分とに分割する工程、
B)前記ホスト部分を前記ホストプロセッサに実装し、前記ヘルパー部分を前記コプロセッサに実装する工程、
C)前記ホストプロセッサによって、イベントコマンドとそれに続く少なくとも1つのコプロセッサ命令を含むFIFOエントリをFIFOに書き込む工程であって、前記イベントコマンドは、前記FIFOの先頭を占めている工程、
D)前記FIFOの先頭にある前記イベントコマンドを前記コプロセッサの現在のイベントレジスタにあるレジストリエントリと比較する工程、
E)前記現在のイベントレジスタにある前記レジストリエントリが前記FIFOの先頭にある前記イベントコマンドと一致するまで工程Dを繰り返す工程、
F)前記イベントコマンドおよび前記少なくとも1つのコプロセッサ命令を前記FIFOからポップし、前記ポップした少なくとも1つのコプロセッサ命令を前記コプロセッサに転送し、前記ポップは、すべての前記FIFOエントリがポップされるまで、または後続のイベントコマンドであるFIFOエントリが検出されるまで続く工程、
G)前記コプロセッサによって、残りのどのFIFOエントリイベントコマンドとも一致していないエントリを前記現在のイベントレジスタに書き込む工程、
H)前記コプロセッサによって前記アプリケーションの前記ヘルパー部分を実行する工程、
I)前記コプロセッサによって、前記ヘルパー部分の実行が完了したことを示すメッセージを前記ホストプロセッサに送信する工程、および
J)前記コプロセッサによって前記現在のイベントレジスタにイベントコマンドレジストリエントリを書き込む工程
を含む、方法。
【請求項2】
請求項1に記載の方法であって、前記FIFOと前記コプロセッサとは、バスコントローラを有するバスを介してつながり、工程D)、E)、およびF)は、前記バスコントローラによって実行される、方法。
【請求項3】
請求項2に記載の方法であって、前記バスは、リングアーキテクチャを有する、方法。
【請求項4】
請求項1~3のいずれか一項に記載の方法であって、前記現在のイベントレジスタ内の前記レジストリエントリは、前記FIFOの先頭にある前記イベントコマンドと同一であれば、前記FIFOの先頭にある前記イベントコマンドと一致しているとみなされる、方法。
【請求項5】
請求項1~4のいずれか一項に記載の方法であって、前記コプロセッサに含まれるコプロセッサメモリと、前記コプロセッサにアクセス可能な共有メモリとをさらに含み,前記少なくとも1つのポップされたコプロセッサ命令は、前記共有メモリから前記コプロセッサメモリにデータを読み出すよう前記コプロセッサに指示する命令を含む、方法。
【請求項6】
請求項5に記載の方法であって、前記少なくとも1つのポップされたコプロセッサ命令は、前記共有メモリとデータを交換するよう前記コプロセッサに指示するコマンドを含む、方法。
【請求項7】
請求項5に記載の方法であって、前記共有メモリは、前記ホストプロセッサにアクセス可能であり、前記アプリケーションの前記ホスト部分は、前記共有メモリと少なくとも1つの入力および/または出力チャネルとの間でデータを交換するよう前記ホストプロセッサに指示するコマンドを含む、方法。
【請求項8】
請求項1~7のいずれか一項に記載の方法であって、前記少なくとも1つのポップされたコプロセッサ命令は、データフローコマンドと同期コマンドの少なくとも一方を含む、方法。
【請求項9】
請求項1~8のいずれか一項に記載の方法であって、工程C)では、前記ホストによって前記FIFOに書き込まれた前記FIFOエントリは、複数のエントリグループを含み、各エントリグループは、イベントコマンドとそれに続く少なくとも1つのコプロセッサ命令を含む、方法。
【請求項10】
請求項9に記載の方法であって、工程F)は、後続のイベントコマンドであるFIFOエントリが検出された場合に前記後続のイベントコマンドが前記FIFOの先頭を占めているように前記FIFOエントリを前記FIFO内で進めることをさらに含む、方法。
【請求項11】
請求項1~10のいずれか一項に記載の方法であって、前記ホストプロセッサによって前記FIFOの先頭にある前記イベントコマンドを読み出し、前記ホストプロセッサによって前記イベントコマンドを前記コプロセッサの前記現在のイベントレジスタに書き込むことをさらに含む、方法。
【請求項12】
請求項1~11のいずれか一項に記載の方法であって、前記ヘルパー部分は、任意の対話型入力がなく、厳密に規定された入力順序を有する、方法。
【請求項13】
請求項1~12のいずれか一項に記載の方法であって、前記ホスト部分は、事前に設定されていないタイミングに従う、方法。
【請求項14】
請求項13に記載の方法であって、前記ホスト部分は、事前に設定されていない対話型のタイミングに従う、方法。
【請求項15】
請求項1~14のいずれか一項に記載の方法であって、前記アプリケーションは、パイプライン化したマルチバッチ実行プログラムである、方法。
【請求項16】
請求項1~15のいずれか一項に記載の方法であって、前記ヘルパー部分の実行が完了したことを示す前記メッセージは、コプロセッサ書き込みFIFOを介して前記コプロセッサによって前記ホストプロセッサに送信される、方法。
【請求項17】
請求項1~16のいずれか一項に記載の方法であって、
ホスト読み出しFIFOを介して前記ホストによって前記コプロセッサのレジスタを読み出すこと、
ホスト書き込みFIFOを介して前記ホストによって前記コプロセッサのレジスタを書き込むこと、および
コプロセッサ書き込みFIFOを介して前記コプロセッサによって前記ホストに書き込むこと
のうち少なくとも1つをさらに含む、方法。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、2019年2月14日に出願された米国特許第16/275,917号の利益を主張するものであり、本文献を参照してその全容をあらゆる目的のために本願に援用する。
本発明は、マルチスレッドプログラムの実行に関し、さらに詳細には、マルチスレッドプログラムの実行中にホストと少なくとも1つのコプロセッサとの挙動を同期させる方法に関する。
【背景技術】
【0002】
マルチコアおよびその他の複数のプロセッサコンピューティングデバイスの利用可能性が上昇し続け、そのコストが低下し続けているため、マルチスレッド処理は、とりわけ画像処理および音声符号化などの用途に対してコンピューティングデバイスがデータを処理できる速度および効率を最適化するますます効果的な手法になっており、この手法では、指定アルゴリズムが一定のタイミング順序で多数のデータフレームまたは「バッチ」に繰り返し適用され、個別のデータフレームの処理間での相互依存はほとんどないかまったくない。
【0003】
多くの場合、所与のアプリケーションによって実行される機能は、タイミング順序が不明で対話型入力を有していてよい「ホスト」機能または「制御」機能と、対話型入力を一切有しておらず、入力順序が厳密に規定されている1つ以上の「ヘルパー」機能とに分割できる。一例がコンピュータゲームである。コンピュータゲームでは、一部の機能は、タイミング順序が不明で、ユーザとの相互作用と直接関連している機能などの対話型入力を有していてよく、その他の機能は、ユーザとの相互作用なしでデータフレームを規定の順序で受け入れて処理する、画像処理または音声符号化など、ゲームに関連する特定のバックグラウンドタスクを実行するように仕向けられる。別の例が、スマート家電または携帯電話などのモバイル装置で実行される音声対応アプリケーションである。
【0004】
このような場合、ユーザとの相互作用をサポートする動作を含めて、タイミングが不明な動作を実行する機能を「ホスト」スレッドまたは「制御」スレッドに割り当てることによってマルチスレッド処理を実施でき、ヘルパー機能の少なくともいくつかは、1つ以上の「ヘルパー」スレッドに割り当てられる。多くの場合、コプロセッサが利用可能な場合、制御機能はホストプロセッサで実行され、ヘルパースレッドの一部または全部は、1つ以上のコプロセッサにオフロードされる。
【0005】
このマルチスレッド、ホスト/コプロセッサの手法は、非常に強力ではあるが、うまく実施するには、ホストプロセッサとコプロセッサとが行うプログラムの実行を同期させて調整する確実で効果的な方法が必要である。
【0006】
1つの手法が、ハードウェア割り込みを用いて、ホストプロセッサおよびコプロセッサの動作を同期させることである。ただし、この手法は、ハードウェアを使用するという点で「コストがかかり」、適切な機能を備えた十分な割り込みをハードウェアプラットフォームが提供できなければ制限される可能性がある。
【0007】
別の手法は、共有メモリに実装された「メッセージパッシングインターフェース」(「MPI」)プロトコルを使用することである。ただし、この手法は、実行時間の点でコストがかかる。
【0008】
したがって、必要なことは、割り込みに依存することなく、かつMPI実装の実行速度ペナルティを回避しながら、ホストプロセッサおよび1つ以上のコプロセッサのプログラム実行を同期させ調整する効果的な方法である。
【発明の概要】
【0009】
本発明は、割り込みに依存することなく、かつMPI実装の実行速度ペナルティを回避しながら、ホストプロセッサおよび1つ以上のコプロセッサのプログラム実行を同期させ調整する方法である。本発明は、「イベント」コマンドを格納できるとともに、データフローおよび同期命令などのコプロセッサ命令も格納できる少なくとも1つのFIFOを実装することによってこれらの目標を達成する。開示した方法によれば、ホストプロセッサは、FIFOの「先頭」に格納されているイベントコマンドで始まる一連のエントリをFIFOに書き込む。実施形態では、エントリは、複数のエントリグループを含むことが可能で、各エントリグループは、イベントコマンドとそれに続くコプロセッサ命令の関連グループを含む。
【0010】
複数のコプロセッサを含むいくつかの実施形態では、各々のコプロセッサに1つのFIFOが充てられる。その上、各々のコプロセッサは、コプロセッサが新たな入力を受け取る準備ができたときにイベントコマンドを格納する「現在のイベント」レジスタを保持する。
【0011】
開示した方法によれば、プログラム動作中に、FIFOの先頭エントリおよび関連するコプロセッサの現在のイベントレジスタは、連続的または疑似連続的に互いに比較される。コプロセッサの現在のイベントレジスタに格納されているイベントコマンドが、関連するFIFOの先頭エントリとして格納されているイベントコマンドと等しいか「一致している」ことがわかった場合、FIFOのイベントコマンドの直後に続くコプロセッサ命令は、次のイベントコマンドが検出されるまで、またはFIFOに書き込まれた最後のエントリがポップされるまで、FIFOから順番に「ポップ」される。実施形態では、FIFOエントリは、FIFOからポップされるときに消去され、残りのエントリは、後続のイベントコマンドが検出された場合にそれがFIFOの先頭に来るように進められる。
【0012】
ポップされたコプロセッサ命令は、実行するためにコプロセッサに転送される。通常、これらのポップされた命令がコプロセッサによって実行されると、コプロセッサは入力データを、コプロセッサのヘルパースレッドが必要としていることがわかっている種類と順序で取得する。実施形態では、コプロセッサ命令は、例えば共有DRAMとコプロセッサとの間のデータ転送コマンド、および/またはホストとコプロセッサとの間の同期コマンドであり得る。FIFOから受信したポップされたコプロセッサ命令を実行した後、コプロセッサは通常、コプロセッサに割り当てられたヘルパースレッドに含まれている適用可能なコマンドの実行に進む。例えば、FIFOからポップされた命令は、共有DRAMとデータを交換するようコプロセッサに指示してよく、その後、新たに受信したデータは、ヘルパースレッドの指示通りにコプロセッサによって符号化されるか処理される。
【0013】
ポップされた命令およびヘルパースレッドコマンドを実行している間、コプロセッサのシーケンサは、現在のイベントレジスタを消去するか、FIFOのどのイベントコマンドエントリにも該当したり「一致」したりしていない何らかの他のレジストリエントリを現在のイベントレジスタに書き込み、それによって追加のコプロセッサ命令は、コプロセッサの準備ができるまでFIFOからポップされない。コプロセッサがFIFOから受信したポップされた命令をすべて実行し、ヘルパースレッドによって指示された任意のすべての処理工程を実施し終えると、コプロセッサは、イベントコマンドを現在のイベントレジスタに書き込んで、さらなるポップされたコマンドをFIFOから受信する準備ができていることを示す。実施形態では、コプロセッサはまた、「完了(done)」メッセージをホストプロセッサに送信し、コプロセッサが以前にFIFOに書き込んだ命令を実行しているというコプロセッサの進捗をホストプロセッサが監視できるようにする。予想数の「完了」コマンドをホストプロセッサが受信すると、ホストプロセッサは、例えば、DRAMと関連する入力チャネルおよび出力チャネルとの間で追加のデータを交換でき、次に、新たな一連のエントリをFIFOに書き込むことができる。
【0014】
実施形態では、ホストプロセッサおよび1つ以上のコプロセッサは、本発明者が共同発明者である米国特許第8,181,003号(同文献をあらゆる目的のために参照によりその全容を本願に援用する)に開示されているバスアーキテクチャなどのリングタイプのバスを介して相互接続されている。これらの実施形態のいくつかでは、バスは、ハードウェアおよび/またはソフトウェアの有限状態機械(FSM)として実装できるバスコントローラを含む。実施形態では、バスコントローラは、FIFOの先頭部およびコプロセッサの現在のイベントレジスタのコンテンツを比較することと、FIFOからコプロセッサ命令をポップすることと、ポップされたコプロセッサ命令をコプロセッサへ送信して実行することとを担当する。
【0015】
実施形態は追加のFIFOを含み、上記のFIFOを「スケジュール化された」FIFOと称することができ、追加のFIFOは、例えば、1つ以上のホスト読み出しFIFO、ホスト書き込みFIFO、および/またはコプロセッサ書き込みFIFOを含むことができる。様々な実施形態では、ホスト読み出しFIFOは、コプロセッサのレジスタを読み出すようにホストが使用でき、ホスト書き込みFIFOは、コプロセッサレジスタに書き込むようにホストが使用でき、かつ/またはコプロセッサ書き込みFIFOは、「ホスト読み出し」コマンドなしでホストに書き込むようにコプロセッサが使用できる。特に、いくつかの実施形態では、「完了」メッセージは、コプロセッサ書き込みFIFOを介していずれかのコプロセッサがホストに送信できる。
【0016】
本発明は、ホストプロセッサとコプロセッサのプログラム実行を同期させる方法である。本方法は、
A)アプリケーションをホスト部分とヘルパー部分とに分割する工程、
B)ホスト部分をホストプロセッサに実装し、ヘルパー部分をコプロセッサに実装する工程、
C)ホストプロセッサによって、イベントコマンドとそれに続く少なくとも1つのコプロセッサ命令を含むFIFOエントリをFIFOに書き込む工程であって、イベントコマンドは、FIFOの先頭を占めている工程、
D)FIFOの先頭にあるイベントコマンドをコプロセッサの現在のイベントレジスタにあるレジストリエントリと比較する工程、
E)現在のイベントレジスタにあるレジストリエントリがFIFOの先頭にあるイベントコマンドと一致するまで工程Dを繰り返す工程、
F)イベントコマンドおよび少なくとも1つのコプロセッサ命令をFIFOからポップし、ポップした少なくとも1つのコプロセッサ命令をコプロセッサに転送し、前記ポップは、すべてのFIFOエントリがポップされるまで、または後続のイベントコマンドであるFIFOエントリが検出されるまで続く工程、
G)コプロセッサによって、残りのどのFIFOエントリイベントコマンドとも一致していないエントリを現在のイベントレジスタに書き込む工程、
H)コプロセッサによってアプリケーションのヘルパー部分を実行する工程、
I)コプロセッサによって、ヘルパー部分の実行が完了したことを示すメッセージをホストプロセッサに送信する工程、ならびに
J)コプロセッサによって現在のイベントレジスタにイベントコマンドレジストリエントリを書き込む工程
を含む。
【0017】
実施形態では、FIFOとコプロセッサとは、バスコントローラを有するバスを介してつながり、工程D)、E)、およびF)は、バスコントローラによって実行される。これらの実施形態のいくつかでは、バスは、リングアーキテクチャを有する。
【0018】
上記の実施形態のいずれにおいても、現在のイベントレジスタ内のレジストリエントリは、FIFOの先頭にあるイベントコマンドと同一であれば、FIFOの先頭にあるイベントコマンドと一致しているとみなせる。
【0019】
上記の実施形態のいずれも、コプロセッサの一部としてのコプロセッサメモリ、およびコプロセッサにアクセス可能な共有メモリをさらに含むことができ、少なくとも1つのポップされたコプロセッサ命令は、共有メモリからコプロセッサメモリにデータを読み出すようコプロセッサに指示する命令を含む。これらの実施形態のいくつかでは、少なくとも1つのポップされたコプロセッサ命令は、共有メモリとデータを交換するようコプロセッサに指示するコマンドを含む。これらの実施形態のいずれでも、共有メモリは、ホストプロセッサにアクセス可能とすることができ、アプリケーションのホスト部分は、共有メモリと少なくとも1つの入力および/または出力チャネルとの間でデータを交換するようホストプロセッサに指示するコマンドを含むことができる。
【0020】
上記の実施形態のいずれにおいても、少なくとも1つのポップされたコプロセッサ命令は、データフローコマンドと同期コマンドの少なくとも一方を含むことができる。
【0021】
上記の実施形態のいずれにおいても、工程C)では、ホストによってFIFOに書き込まれたFIFOエントリは、複数のエントリグループを含むことができ、各エントリグループは、イベントコマンドとそれに続く少なくとも1つのコプロセッサ命令を含む。これらの実施形態のいくつかでは、工程F)は、後続のイベントコマンドであるFIFOエントリが検出された場合にその後続のイベントコマンドがFIFOの先頭を占めるようにFIFOエントリをFIFO内で進めることをさらに含む。
【0022】
上記の実施形態のいずれも、ホストプロセッサによってFIFOの先頭にあるイベントコマンドを読み出し、ホストプロセッサによってイベントコマンドをコプロセッサの現在のイベントレジスタに書き込むことをさらに含むことができる。
【0023】
上記の実施形態のいずれにおいても、ヘルパー部分は、任意の対話型入力がなくてよく、厳密に規定された入力順序を有することができる。
【0024】
上記の実施形態のいずれにおいても、ホスト部分は、事前に設定されていないタイミングに従うことができる。これらの実施形態のいくつかでは、ホスト部分は、事前に設定されていない対話型のタイミングに従う。
【0025】
上記の実施形態のいずれにおいても、アプリケーションは、パイプライン化したマルチバッチ実行プログラムであってよい。
【0026】
上記の実施形態のいずれにおいても、ヘルパー部分の実行が完了したことを示すメッセージは、コプロセッサ書き込みFIFOを介してコプロセッサによってホストプロセッサに送信できる。
【0027】
また、上記の実施形態のいずれも、ホスト読み出しFIFOを介してホストによってコプロセッサのレジスタを読み出すこと、ホスト書き込みFIFOを介してホストによってコプロセッサのレジスタを書き込むこと、およびコプロセッサ書き込みFIFOを介してコプロセッサによってホストに書き込むことのうち少なくとも1つをさらに含むことができる。
【0028】
本明細書に記載した特徴および利点は、包括的ではなく、特に、図面、明細書、および特許請求の範囲の観点から当業者には多くの追加の特徴および利点が明らかであろう。さらに、本明細書で使用した言葉は、主に読みやすさおよび教育目的のために選択されており、本発明の主題の範囲を限定するものではないことに注意されたい。
【図面の簡単な説明】
【0029】
【
図1】単一のコプロセッサおよびFIFOを含む本発明の実施形態を示すブロック図である。
【0030】
【
図2】リングバスおよびバスコントローラを使用して、ホストとDRAMとコプロセッサとの間で通信を実現する本発明の実施形態のブロック図である。
【0031】
【
図3】本発明の実施形態でのホストとバスコントローラとコプロセッサとの間の動作および相互作用を示す流れ図である。
【0032】
【
図4】複数のFIFOを含む本発明の実施形態を示すブロック図である。
【0033】
【0034】
【
図6】
図5とほぼ同じブロック図だが、複数のコプロセッサおよびFIFOを含む本発明の実施形態を対象とする図である。
【発明を実施するための形態】
【0035】
図1を参照すると、本発明は、割り込みに依存することなく、かつMPI実装の実行速度ペナルティを回避しながら、ホストプロセッサ100および1つ以上のコプロセッサ102のプログラム実行を同期させ調整する方法である。本発明は、「イベント」コマンドを格納できるとともに、データフローおよび同期命令などのコプロセッサ命令も格納できる少なくとも1つのFIFO104を実装することによってこれらの目標を達成する。開示した方法によれば、ホストプロセッサ100は、FIFO104の「先頭」106に格納されている「イベント」コマンドで始まる一連のエントリをFIFO104に書き込む。その上、各々のコプロセッサ102は、コプロセッサ102が新たな入力を受信する準備ができたときにイベントコマンドを格納する「現在のイベント」レジスタ108を保持する。
【0036】
図2を参照すると、実施形態では、ホストプロセッサおよび全コプロセッサは、本発明者が共同発明者である米国特許第8,181,003号(同文献をあらゆる目的のために参照によりその全容を本願に援用する)に開示されているバスアーキテクチャなどのリングタイプのバス200を介して相互接続されている。これらの実施形態のいくつかでは、バス200は、ハードウェアおよび/またはソフトウェアの有限状態機械(FSM)として実装できるバスコントローラ202を含む。実施形態では、バスコントローラ202は、FIFOの先頭部106およびコプロセッサの現在のイベントレジスタ108のコンテンツを比較することと、FIFO104からコプロセッサ命令をポップすることと、コプロセッサ命令をFIFO104からコプロセッサ102へ送信して実行することとを担当する。図示した実施形態では、FIFO104は、ホスト100とコプロセッサ102の両方にアクセス可能なDRAMインターフェースユニット204に実装される。
【0037】
図3は、本方法の一実施形態を示す流れ図であり、ホスト100とコプロセッサ102のプログラム実行は、音声符号化アプリケーションの場合のように、複数のデータフレームを処理するためにFIFO104およびバスコントローラ202によって同期される。図示した例によれば、ホスト100は、入力チャネルからデジタル音声データのN個のフレームを受信し、それをホスト100とコプロセッサ102の両方にアクセス可能なDRAM204に格納する300。さらに、ホスト100は、処理した音声データのN個のフレームをDRAM204から出力チャネルに出力する302。このときDRAMには、符号化されるか処理される状態にある入力データのN個のフレームがあるため、ホスト100は次に、N個の連続したエントリグループをFIFO104に書き込み、各エントリグループは、イベントコマンド「Event=1」で始まる304。各エントリグループはコプロセッサ命令を含み、その命令で、DRAM204からの入力データのフレームをコプロセッサの内部メモリに入力し、そのデータを符号化するか処理し、その後、処理したデータを出力データとしてDRAM204に返信するようコプロセッサに指示するという点で、エントリグループは本質的に同じである。この時点で、ホスト100は他のタスクを進めるか、コプロセッサ102からNx「完了」メッセージを受信するのを単純に待ち306、このメッセージは、入力データのN個のフレームのすべてがコプロセッサ102によって処理されたことを示す。
【0038】
様々な実施形態で、ホスト100は、イベントコマンドをコプロセッサ102の現在のイベントレジスタ108に書き込んで、例えばエラー状態に対処するときにエントリのポップを強制ができることに注意されたい。一方、バスコントローラ202は、連続的または疑似連続的に、FIFOの先頭106をコプロセッサの現在のイベントレジスタ108のコンテンツと比較して308、それが互いに等しいか互いに「一致している」かを判断し310、この一致は、2つのエントリ間の何らかの規定された関係であり得る。コプロセッサ102の現在のイベントレジスタ108に格納されているイベントコマンドが、関連するFIFOの先頭エントリ106として格納されているイベントコマンドと等しいか一致していることがわかった場合、FIFOのイベントコマンドの直後に続くイベントコマンドおよびコプロセッサ命令は、次のイベントコマンドが検出されるまで314、またはFIFO104に書き込まれた最後のエントリがポップされるまで、FIFO104から「ポップ」される312。ポップされたコプロセッサ命令は、実行するためにコプロセッサに送信される。実施形態では、FIFOエントリは、FIFOからポップされるときに消去され、残りのエントリは、後続のイベントコマンドが検出されてポップ処理が停止した場合に後続のイベントコマンドがFIFO104の先頭106を占めるように進められる。
【0039】
イベントコマンドがFIFO104の先頭エントリ108と一致しているときに310、現在のイベントレジスタ108に「Event=1」などのイベントコマンドがある場合、それは、コプロセッサ102が準備できていて、バスコントローラ202からの命令を待っていることを指す316。ポップされたコプロセッサ命令を受信すると、コプロセッサ102は、「Event=0」または何らかの他のエントリを現在のイベントレジスタ108に書き込む318。現在のイベントレジスタは、FIFO100内のどのイベントコマンドエントリとも一致しないため、コプロセッサ102がビジーで、FIFO104からそれ以上コプロセッサ命令を受信する準備ができていないことを示す。
【0040】
図示した例では、ポップされたコプロセッサ命令は、DRAM204からの入力データフレームをコプロセッサ内部メモリの位置n+1に読み出し320、処理したデータフレーム322を位置n-1からDRAM204に出力するようコプロセッサ102に指示する。コプロセッサ102は、コプロセッサ102に割り当てられたヘルパースレッドに含まれているコードに従って入力データフレーム322を位置n+1で符号化するか処理することも進める。データフレームの処理が完了すると、コプロセッサ102は、「完了」メッセージをホスト100に送信し326、nの値を増分し328、現在のイベントレジスタ330をEvent=1に戻す設定をする。それによってFIFO104からさらに多くのポップされた命令を受信する準備ができていることを示す。
【0041】
予想数の「完了」メッセージがホストプロセッサ100によって受信されると306、例えば、追加のデータをDRAM204から読み出し300、DRAMに書き込むことができ302、次に、新たな一連のエントリをFIFO102に書き込むことができる304。
【0042】
図4を参照すると、実施形態は、追加のFIFO402~404を含み、ここではFIFO100を「スケジュール化された」FIFO100と称することができ、追加のFIFOは、例えば、1つ以上のホスト読み込みFIFO400、ホスト書き込みFIFO402、および/またはコプロセッサ書き込みFIFO404を含むことができる。様々な実施形態では、ホスト読み出しFIFO400は、コプロセッサ102のレジスタを読み出すためにホスト100が使用でき、ホスト書き込みFIFO402は、コプロセッサレジスタに書き込むためにホスト100が使用でき、かつ/またはコプロセッサ書き込みFIFO404は、「ホスト読み出し」コマンドなしでホスト100に書き込むためにコプロセッサ102が使用できる。いくつかの実施形態では、「完了」メッセージは、コプロセッサ102のいずれかがコプロセッサ書き込みFIFO404を介してホスト100に送信できる326。
【0043】
図5は、音声符号化アプリケーションに実装されている
図4の方法を描いた簡易ブロック図である。図示した例では、音声データフレームは、入力チャネルから20msあたり1フレームの割合で受信され500、DRAM204に格納される502。各フレームは、「バッチ」とみなされ、パイプラインマルチバッチ実行プロセスが、単一の入力チャネルから受信した複数の入力フレームに適用される。上記で考察したように、ホスト100は、入力チャネルから入力フレームを受信し300、500、それをDRAM204に格納し502、コプロセッサ102によって符号化された後にデータフレームをDRAM204から出力チャネルに出力する302、504ことを担当する。
【0044】
表1~3は、ホスト100によって実行されるコード(表1)およびコプロセッサ102によって実行されるコード(表2)、ならびに
図5の実施形態でバスコントローラ202によってポップされる前にホスト100によってFIFO104に書き込まれるエントリ(表3)を示している。
【0045】
表1:ホストCPUプログラム
while (! Done) {
receive input of F frames from
input channels(F個のフレームの入力を入力チャネルから受信)
send output of F frames tooutput channels(F個のフレームの出力を出力チャネルに送信)
write F frames of input/output pair each starting with event #1 to scheduled FIFO as shown(各々がイベント#1から始まる入力/出力のペアのF個のフレームを図示したようにスケジュール化されたFIFOに書き込む)
receive F frames of “end” from coprocessor (「終了」のF個のフレームをコプロセッサから受信する)}
Note: f = loop time / 20 ms(注:f=ループ時間/20ms)
【0046】
表2:コプロセッサプログラム
1. Set current Event = 1(現在のEvent=1に設定)
2. Start encoding algorithm(符号化アルゴリズムを開始)
3. Write to CPU to indicate frame processing “done”( フレーム処理の「完了」を示すようCPUに書き込む)
4. Goto 1(1に戻る)
【0047】
表3:スケジュール化されたFIFOのコンテンツ
Entries from Head of Scheduled
FIFO (スケジュール化されたFIFOの先頭からのエントリ
)-
001: Event = 1
002: Command for input of frame n+1 data transfer from dram Addr Xn+1 to coprocessor(dram Addr Xn+1からコプロセッサへのフレームn+1のデータ転送を入力するためのコマンド)
003: Command for output of frame n-1 data transfer from coprocessor to DRAM Addr Yn-1(コプロセッサからDRAM Addr Yn-1へのフレームn-1のデータ転送を出力するためのコマンド)
004: Event = 1
005: Command for input of frame n+2 data transfer from DRAM Addr Xn+2 to coprocessor(DRAM Addr Xn+2からコプロセッサへのフレームn+2のデータ転送を入力するためのコマンド)
006:Comand for output of frame n data transfer from coprocessor to DRAM Addr Yn(コプロセッサからDRAM Addr Ynへのフレームnのデータ転送を出力するためのコマンド)
......
【0048】
図示した例のバッチレートは、ループ時間をフレーム時間で割ったものであることに注意されたい。例えば、ループ時間が100msで、フレームが1フレームあたり20msのレートで受信されている場合、各ループに対してホスト100は、100/20=5フレームの音声データを受信して処理する能力があり、ホスト100によってFIFO104に書き込まれるエントリの各文字列は、エントリの5つのバッチを含み、各バッチは、イベントコマンドで始まり、その後ろに、コプロセッサ102によって実行されるデータ読み出し/書き込み命令が続く。
【0049】
したがって、図示した例では、ホスト100およびコプロセッサ102は、DRAM204への書き込みおよびその読み出しを含め、互いに別々に独立して動作することが可能である。なぜなら、FIFO104に格納されているイベントおよび関連するコプロセッサコマンドは、書き込み後の読み取り、または他の同期エラー、または他の問題がないことを確実にする役割を果たす。そのため、割り込みは必要なく、同期およびデータ転送のために追加のプロトコルも必要ない。
【0050】
図示した実施形態では、イベントコマンドは、本質的に「準備のできた」フラッグとして使用される。他の実施形態では、複数の様々な種類のイベントコマンド、例えば「Event=1」、「Event=2」などを実装できる。これは、例えばコプロセッサがデータ処理の様々な段階でFIFOからの入力を要求した場合、および/またはエラー状態を識別して対処するために有用となり得る。
【0051】
マルチコアプロセッサ環境では、パイプライン化したマルチバッチ実行のメモリ要件、およびそれに伴い電力消費は、各々の実行時間がほぼ同じである複数のサブ機能またはヘルパー「スレッド」の中で「ヘルパー」データ処理を分散することによってさらに軽減でき、各々のサブ機能は、別々のコプロセッサコアに割り当てられる。この手法によれば、各々のコプロセッサコアは、サブ機能のうちの1つに対してコードを含むよう要求されるだけである。
【0052】
例えばn個のコアがある場合、合計「ヘルパー」処理時間は、前例のようにコアが1つしかない実施と比較して1/nに短縮される。したがって、マルチコアの実施形態に要求されるクロックレートは、単一コアの実施形態よりもはるかに遅く、電力消費も大幅に少なくなり得る。あるいは、クロックレートが維持されれば、マルチコアの実施形態では、単一コアの実施形態と比較して所与のレートで多数のチャネルに対して符号化または他のデータ処理を実施できる。
【0053】
ただし注意すべきことは、マルチコアの実施形態では、サブ機能どうしの間、すなわちコア間ではデータフローが要求されることがあり、また、共有DRAMとコアとの間では入力および出力データフローが要求されることがあり、これによって、一部のマルチコアの実施形態に対するネットワーク要件が単一コアの実施形態よりもはるかに複雑になる。米国特許第8,811,387号(同文献をあらゆる目的のために参照によりその全容を本願に援用する)に記載されているネットワーク構造は、これらの実施形態のいくつかで良好な解決策となり得る。
【0054】
図6は、例えばパイプライン化したマルチバッチ実行をマルチコアコプロセッサで行う分割音声エンコーダに適用できるように、コプロセッサ324a~kの各々に専用のFIFO104a~kを有する複数のコプロセッサ324a~kを含んでいる本発明の実施形態を示している。表4、表5、および表6は、ホスト100によって
図6の実施形態で実行されるコード(表4)およびコプロセッサ102によって実行されるコード(表5)、ならびにバスコントローラ202によってポップされる前にホスト100によってFIFO104a~kに書き込まれるエントリ(表6)を示している。
【0055】
表4:ホストCPUプログラム
while (! Done) {
receive input of F frames from input channels(F個のフレームの入力を入力チャネルから受信)
send output of F frames to output channels(F個のフレームの出力を出力チャネルに送信)
write F frames of input/output pair each starting with event #1 to scheduled FIFO as shown(各々がイベント#1から始まる入力/出力のペアのF個のフレームを図示したようにスケジュール化されたFIFOに書き込む)
receive F frames of “end” from coprocessor(「終了」のF個のフレームをコプロセッサから受信する)}
Note: f = loop time / 20 ms(f=ループ時間/20ms)
【0056】
表5:コプロセッサプログラム
Program in core 1(コア1でのプログラム)
1. Set current Event = 1(現在のEvent=1に設定)
2. Start subvn k algorithm(subvn kアルゴリズムを開始)
3. If core == l. wrote to CPU to indicate batch processing “done”( コア==1であればバッチ処理の「完了」を示すようCPUに書き込む)
4. Goto 1(1に戻る)
….
Program in core k(コアkでのプログラム)
1. Set current Event = 1(現在のEvent=1に設定)
2. Start subvn k algorithm(subvn kアルゴリズムを開始)
3. If core == l. wrote to CPU to indicate batch processing “done”( コア==1であればバッチ処理の「完了」を示すようCPUに書き込む)
4. Goto 1(1に戻る)
【0057】
表6:スケジュール化されたFIFOのコンテンツ
Entries from head of Scheduled FIFO of Coprocessor Core 1(コプロセッサコア1のスケジュール化されたFIFOの先頭からのエントリ) -
001: Event = 1
002: Command for input of frame n-1 data transfer from Coprocessor Core k to DRAM Addr Yn-1(コプロセッサコアkからDRAM Addr Yn-1へのフレームn-1のデータ転送を入力するためのコマンド)
003: Event = 1
004: Command for input of frame n data transfer from Coprocessor Core k to DRAM Addr Yn(コプロセッサコアkからDRAM Addr Ynへのフレームnのデータ転送を入力するためのコマンド)
......
....
Entries from head of Scheduled FIFO of Coprocessor Core k (コプロセッサコアkのスケジュール化されたFIFOの先頭からのエントリ)-
001: Event = 1
002: Command for input of frame n-1 data transfer from Coprocessor Core k to DRAM Addr Yn-1(コプロセッサコアkからDRAM Addr Yn-1へのフレームn-1のデータ転送を入力するためのコマンド)
003: Event = 1
004: Command for input of frame n data transfer from Coprocessor Core k to DRAM Addr Yn(プロセッサコアkからDRAM Addr Ynへのフレームnのデータ転送を入力するためのコマンド)
......
【0058】
本発明の実施形態によって対処できるアプリケーションの別の例が、深層学習推論アプリケーションである。これらのアプリケーションは、音声および映像を推論する場合のフレーム構造が、入力のレートが一定である音声符号化アプリケーションの場合のフレーム構造に似ているという点で、音声符号化アプリケーションに似ている。ほとんどの場合、入力のレートは、他の推論プログラムにも対しても一定にできる。そのため、本発明は、スケジュール化されたFIFO104を用いて少なくとも3つの異なる方法で実装して、パイプライン化したマルチバッチ実行で以下の同期およびデータフロー機構を提供できる:
・単一のコプロセッサを使用する単一チャネル推論プログラム、
・複数のコプロセッサを使用するマルチチャネル推論プログラム、または
・プログラムがサブ機能に分割され、各々のサブ機能がコプロセッサコアに割り当てられる単一チャネルまたはマルチチャネル推論プログラム。
【0059】
実施形態では、現在のイベントレジスタは、ホストにアクセス可能である。これらの実施形態のいくつかでは、ホストは、必要に応じて、現在FIFOの先頭にあるイベントコマンドを読み出し、それをコプロセッサの現在のイベントレジスタに書き込むことによって、ヘルパースレッドのコプロセッサによって実行を開始できる。
【0060】
本発明の実施形態の上記の説明は、例示および説明を目的として提示したものである。この提示の各頁およびその全コンテンツは、特徴付け、識別、または番号付けがされていても、本出願内の形式または配置に関係なく、あらゆる目的で本出願の実質的な部分とみなされる。本明細書は、網羅的であることや、本発明を開示した正確な形式に限定することを意図するものではない。本開示に照らして、多くの修正および変形が可能である。
【0061】
本出願は、限られた数の形式で示されているが、本発明の範囲は、これらの形式のみに限定されるものではなく、その趣旨から逸脱しない限り、様々な変更および修正を受け入れることができる。本明細書に提示した開示は、本発明の範囲内に収まる特徴の可能な組み合わせをすべて明示的に開示しているわけではない。様々な実施形態に関して本明細書に開示した特徴は、概して、本発明の範囲を逸脱しないかぎり、入れ替え可能であり、自己矛盾しない任意の組み合わせに合わせることができる。特に、下記の従属請求項に提示した制限は、本開示の範囲を逸脱しない限り、従属請求項が論理的に互いに相容れない場合を除き、それに対応する独立請求項との組み合わせがいくつでもどのような順序でも可能である。
【国際調査報告】