(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-12-19
(54)【発明の名称】コンベヤベルト処理のシステム、装置および方法
(51)【国際特許分類】
G06F 9/50 20060101AFI20221212BHJP
【FI】
G06F9/50 150Z
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022515521
(86)(22)【出願日】2020-09-04
(85)【翻訳文提出日】2022-04-26
(86)【国際出願番号】 US2020070502
(87)【国際公開番号】W WO2021046581
(87)【国際公開日】2021-03-11
(32)【優先日】2019-09-06
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】322013328
【氏名又は名称】インテロジェンス インコーポレイテッド
【氏名又は名称原語表記】INTELLOGENCE INC.
(74)【代理人】
【識別番号】100139723
【氏名又は名称】樋口 洋
(72)【発明者】
【氏名】シュライマン,ジア
(72)【発明者】
【氏名】シュライマン,ニコ
(57)【要約】
再構成可能なハードウェアプラットフォームは、ソフトウェアの一部の代わりに、再構成可能なハードウェア演算子ブロックのチェーンを使用し、データがチェーンを下って移動するときにデータを操作する。このコンベヤベルトアーキテクチャまたは演算子ブロックのチェーンは、演算子ブロックから演算子ブロックにデータを移動させる。このコンベヤベルトアーキテクチャプロセッサは、ソフトウェアとしてプログラムの残りの部分を処理しながら、ハードウェア内の複雑な情報またはクリティカルループを処理するために、従来のフロントエンドプロセッサと組み合わせることができる。
【特許請求の範囲】
【請求項1】
プロセッサを構成する方法であって、
ソフトウェアとして実行するように構成されたプログラムを受信する工程;
前記プログラムの第1の部分をハードウェアで実行し、前記プログラムの第2の部分をソフトウェアとして実行するように決定する工程;
前記第1の部分に基づいて、事前データバスから入力データを取り込み、該入力データに対して1つまたは複数の変換を実行し、変換された入力データを出力データバスを介して出力する、1つまたは複数の変換関数を含む複数の相互接続されたリプログラマブル演算子ブロックを決定する工程;
1つまたは複数のリプログラマブルプロセッサ上で実行するように、前記複数の相互接続されたリプログラマブル演算子ブロックを構成する工程;
1つまたは複数のフロントエンドプロセッサを介して前記第2の部分を実行する工程;
前記1つまたは複数のフロントエンドプロセッサから前記1つまたは複数のリプログラマブルプロセッサに前記第1のデータを送信する工程;
前記1つまたは複数のリプログラマブルプロセッサを介して前記第1の部分を実行する工程;
前記1つまたは複数のリプログラマブルプロセッサから前記1つまたは複数のフロントエンドプロセッサに第2のデータを送信する工程;および
前記第1のデータおよび第2のデータに基づいて、結果データを決定する工程
を含む、方法。
【請求項2】
第1の部分を決定する工程がさらに、計算の複雑さに基づいて、前記プログラムの前記第1の部分をハードウェアで実行することを決定する工程を含むことを特徴とする、請求項1に記載の方法。
【請求項3】
前記結果データが、前記プログラムの実行の結果であることを特徴とする、請求項1に記載の方法。
【請求項4】
前記第2のデータが、前記1つまたは複数の変換に基づいて前記第1のデータから導出されることを特徴とする、請求項1に記載の方法。
【請求項5】
前記結果データが、前記第2のデータから導出され、該第2のデータは、前記第1のデータから導出されることを特徴とする、請求項1に記載の方法。
【請求項6】
前記1つまたは複数のリプログラマブルプロセッサが、フィールドプログラマブルゲートアレイであることを特徴とする、請求項1に記載の方法。
【請求項7】
前記1つまたは複数のフロントエンドプロセッサから前記1つまたは複数のリプログラマブルプロセッサに前記第1のデータを送信する工程がさらに、拡張バスを介して、前記1つまたは複数のフロントエンドプロセッサから前記1つまたは複数のリプログラマブルプロセッサに前記第1のデータを送信する工程を含むことを特徴とする、請求項1に記載の方法。
【請求項8】
ソフトウェアとして実行するように構成されたプログラムを受信する工程がさらに、前記プログラムを、実行可能なソフトウェアコード、ハードウェア構成、および、前記実行可能なソフトウェアコードと前記ハードウェア構成との間でデータを転送するための通信コードにコンパイルする工程を含むことを特徴とする、請求項1に記載の方法。
【請求項9】
コンベヤベルトプロセッサであって、
入力データバス;
複数の相互接続されたリプログラマブル演算子ブロック;および
出力データバス
を備え、前記複数の相互接続されたリプログラマブル演算子ブロックが、
第2のリプログラマブル演算子ブロックの出力データバス、または前記入力データバスに結合された、第1のリプログラマブル演算子ブロックの入力データバス;
第3のリプログラマブル演算子ブロックの入力データバス、または出力データバスに結合された、第1のリプログラマブル演算子ブロックの出力データバス;および
事前データバスから入力データを取り込み、該入力データに対して1つまたは複数の変換を実行し、出力データバスを介して変換された入力データを出力する、1つまたは複数の変換機能
を含む、コンベヤベルトプロセッサ。
【請求項10】
前記相互接続された複数のリプログラマブル演算子ブロックのバス幅が、同じではないことを特徴とする、請求項9に記載のコンベヤベルトプロセッサ。
【請求項11】
後続ブロックの出力が、前のブロックの入力であることを特徴とする、請求項9に記載のコンベヤベルトプロセッサ。
【請求項12】
前記第2のリプログラマブル演算子ブロックおよび前記第3のリプログラマブル演算子ブロックが同じであることを特徴とする、請求項9に記載のコンベヤベルトプロセッサ。
【請求項13】
前記第3のリプログラマブル演算子ブロックが、実行順序において前記第1のリプログラマブル演算子ブロックの前にあることを特徴とする、請求項9に記載のコンベヤベルトプロセッサ。
【請求項14】
前記複数の相互接続されたリプログラマブル演算子ブロックを作成するための命令を受信するように構成されたプログラミングインターフェースをさらに含むことを特徴とする、請求項9に記載のコンベヤベルトプロセッサ。
【請求項15】
データを処理するためのシステムであって、
複数のプロセッサ;および
データを各プロセッサに割り当てるように構成される管理機能
を備え、
各プロセッサが、
入力データバス;
複数の相互接続されたリプログラマブル演算子ブロック;および
出力データバス
を備え、前記複数の相互接続されたリプログラマブル演算子ブロックが、
第2のリプログラマブル演算子ブロックの出力データバス、または前記入力データバスに結合された、第1のリプログラマブル演算子ブロックの入力データバス;
第3のリプログラマブル演算子ブロックの入力データバス、または出力データバスに結合された、第1のリプログラマブル演算子ブロックの出力データバス;および
事前データバスから入力データを取り込み、該入力データに対して1つまたは複数の変換を実行し、出力データバスを介して変換された入力データを出力する、1つまたは複数の変換機能
を含む、システム。
【請求項16】
前記管理機能が、前記複数の相互接続されたリプログラマブル演算子ブロックを再構成するようにさらに構成されることを特徴とする、請求項15に記載のシステム。
【請求項17】
前記管理機能が、前記複数のプロセッサの前記複数の相互接続されたリプログラマブル演算子ブロックを作成するための命令を記憶するメモリを備えることを特徴とする、請求項15に記載のシステム。
【請求項18】
前記複数のプロセッサとは異なるアーキテクチャを有する少なくとも1つのフロントエンドプロセッサをさらに含むことを特徴とする、請求項15に記載のシステム。
【請求項19】
前記少なくとも1つのフロントエンドプロセッサが、汎用プロセッサを備えることを特徴とする、請求項18に記載のシステム。
【請求項20】
前記管理機能が、
構成変更を受信するように構成された安全なインターフェース;および
前記複数のプロセッサのうちの1つまたは複数のプロセッサにデータを割り当てるように構成された安全でないインターフェース
を含むことを特徴とする、請求項15に記載のシステム。
【発明の詳細な説明】
【関連出願の相互参照】
【0001】
本出願は、その全体が参照により本明細書に組み込まれる、2019年9月6日出願の米国仮特許出願第62/896,682号に対する優先権の利益を主張する。
【技術分野】
【0002】
本開示は、コンピュータに関し、より詳細には、コンピュータプロセッサに関する。
【背景技術】
【0003】
ユニバーサルコンピューティング用に設計されたデジタルコンピュータは、フォンノイマン型アーキテクチャなどの標準アーキテクチャを使用することができる。1945年頃に、物理学者および数学者であるジョン・フォン・ニューマン(John von Neumann)によって設計されたフォンニューマン型アーキテクチャマシンは、記憶されたプログラムデジタルコンピュータのための理論的設計であり得る。
【発明の概要】
【課題を解決するための手段】
【0004】
本開示の実施形態に従ったシステムおよび方法の詳細な説明を以下に提供する。いくつかの実施形態が説明されるが、本開示は、任意の1つの実施形態に限定されず、代わりに、多くの代替、修正、および均等物を包含することを理解されたい。加えて、本明細書に開示される実施形態の完全な理解を提供するために、以下の説明では、多くの具体的詳細が説明されるが、いくつかの実施形態は、これらの詳細のうちのいくつかまたは全てを伴わずに実施されることができる。さらに、明確にする目的で、関連技術分野で知られている特定の技術的材料は、本開示を不必要に不明瞭にすることを回避するために、詳細に説明されていない。
【0005】
再構成可能なハードウェアプラットフォームを使用して、再構成可能なハードウェア演算子ブロック(Operator Blocks)のチェーンを相互接続し、データがチェーンを下って移動するときにデータを操作する技術、装置、および方法が開示される。このコンベヤベルトアーキテクチャまたは演算子ブロックのチェーンは、演算子ブロックから演算子ブロックにデータを移動する。ソフトウェアの一部の代わりに、再構成可能なハードウェア演算子ブロックのチェーンは、データがチェーンを下って移動するときにデータを操作することができる。
【図面の簡単な説明】
【0006】
【
図2】コンベヤベルトアーキテクチャコンピューティングシステムを示す図
【
図3】フィボナッチ数をプリントするプログラムソースコード
【
図4】フィボナッチ数をプリントするための標準アーキテクチャシステム上で実行するプログラムマシンコード
【
図5】フィボナッチ数をプリントするためのコンベヤベルトアーキテクチャシステム上で実行する演算子ブロックのフローチャート
【
図6】数字和を計算しプリントアウトするソースコード
【
図7】数字和を計算しプリントアウトする標準アーキテクチャシステム上で実行するマシンコードの第1クォータ
【
図8】数字和を計算しプリントアウトする標準アーキテクチャシステム上で実行するマシンコードの第2クォータ
【
図9】数字和を計算しプリントアウトする標準アーキテクチャシステム上で実行するマシンコードの第3クォータ
【
図10】数字和を計算しプリントアウトする標準アーキテクチャシステム上で実行するマシンコードの第4クォータ
【
図11】数字和を計算しプリントアウトするコンベヤベルトアーキテクチャシステム上で実行する演算子ブロックのフローチャート
【
図12】標準アーキテクチャコンピューティングシステムと組み合わせて使用されるコンベヤベルトアーキテクチャコンピューティングシステムを示すブロック図
【
図13】コンベヤベルトアーキテクチャコンピューティングシステムおよび標準アーキテクチャコンピューティングシステムにわたってプログラムが実行される方法を示すブロック図
【
図14】コンベヤベルトアーキテクチャを準備するための方法のフローチャート
【
図15】コンピューティングシステムおよびコンポーネントを示すブロック図
【発明を実施するための形態】
【0007】
いくつかの実施形態では、コンベヤベルトアーキテクチャコンピューティングシステムは、コンピューティングタスクを実行するために単独で使用されてもよい。
【0008】
例えば、コンピューティングシステム間で作業負荷を共有するために、複数のコンベヤベルトアーキテクチャコンピューティングシステムを直列または並列に使用してもよい。
【0009】
コンベヤベルトアーキテクチャコンピューティングシステムは、標準アーキテクチャコンピューティングシステムと組み合わせて使用されてもよく、例えば、作業負荷は、コンピューティングシステム間で共有され得る。
【0010】
例えば、コンピューティングシステム間で作業負荷を共有するために、複数のコンベヤベルトアーキテクチャコンピューティングシステムを、直列または並列に使用してもよく、標準アーキテクチャコンピューティングシステムと組み合わせて使用してもよい。
【0011】
コンベヤベルトアーキテクチャコンピューティングシステムは、複数の標準アーキテクチャコンピューティングシステムと組み合わせて使用されてもよく、例えば、作業負荷は、コンピューティングシステム間で共有され得る。
【0012】
図1は、フォンニューマン型アーキテクチャコンピューティングシステムに類似するまたはそれを備えるコンピューティングシステムの実施例を示す線図を示す。コンピューティングシステムは、入力102、コンピューティングシステム104、および出力106を備える。入力102は、コンピューティングシステム104によって(例えば、バス等を介して)受信され、そこで、出力106としてコンピューティングシステム104から(例えば、バス等を介して)送信される前に処理される。コンピューティングシステム104内には、共通バス110を介して中央演算処理装置(CPU)112に結合されたランダムアクセスメモリ(RAM)108が含まれる。さらに、CPU112は、算術論理演算装置(ALU)116、制御ユニット114、およびレジスタ118およびスタック120を備える。
【0013】
標準アーキテクチャコンピューティングシステム上で実行するプログラムは、データを操作するために特定のシーケンスで実行される命令のセットを含み得る。
【0014】
プログラムがRAM108にロードされると、CPU112は一連の「フェッチ-デコード-実行」サイクルを行うことができ、それにより、RAM108のロケーションの内容が読み出され、解読され、次いで、プログラムによって指示されるように特定のシーケンスで実行される。RAM108内のロケーションは命令およびデータを含むので、CPU112は、命令を読み取り、解読して、情報を用いて何を行うかを決定し、次いで、結果に対して実行する。いくつかの命令は、動作の結果をRAM108のロケーションに書き戻すようにCPU112に指示し、他の命令は、前の命令の結果に応じて、RAM108の特定のロケーションにジャンプするようにCPU112に指示する。
【0015】
このアーキテクチャの問題は、プログラム命令およびデータが同じRAM108に含まれることであり得る。RAM108内の情報は、一度に1つずつ読み取られ、解読され、アーキテクチャにおける非効率性および性能制限につながり得る。さらに、共通バス110によって、CPU112が情報の読出しおよび書込みを同時に行うことができない場合がある。これはボトルネックと呼ばれ、システムの性能をさらに制限し得る。
【0016】
図2は、入力202、コンピューティングシステム204、および出力206を備えるコンベヤベルトアーキテクチャコンピューティングシステムを示す線図を示す。入力202は、コンピューティングシステム204によって(例えば、バス等を介して)受信され、そこで、出力206としてコンピューティングシステム204から(例えば、バス等を介して)送信される前に処理される。コンピューティングシステム204内には、一方向にデータ経路220、222、224および226によって相互接続され、反対方向にデータ経路228によって相互接続される、多数の再構成可能な演算子ブロック210、212、214、216および218を含む再構成可能なハードウェアプラットフォーム208(例えば、フィールドプログラマブルゲートアレイ(FPGA))が含まれる。
【0017】
バスを介してRAMに結合されるCPUの代わりに、コンベヤベルトアーキテクチャは、FPGA208等の再構成可能ハードウェアプラットフォームを使用して、再構成可能な演算子ブロック210、212、214、216および218のチェーンを相互接続し、一方向にデータ経路220、222、224および226、および反対方向にデータ経路228にわたって、演算子ブロックから演算子ブロックにデータがチェーンを下って移動するときにデータを操作してもよい。
【0018】
実施形態では、各演算子ブロック210、212、214、216および218において、一方向にデータ経路220、222、224および226、および反対方向にデータ経路228にわたるチェーン内で次の演算子ブロックにデータが搬送される前に、演算または演算群が実行されてデータを操作する。
【0019】
プログラムは、翻訳され、次いで、再構成可能なハードウェアプラットフォーム208(例えば、FPGA等)にコピーされる。各命令または命令群は、演算子ブロック210、212、214、216および218に割り当てられ、プログラムフローは、これらの演算子ブロックの相互接続によって決定される。
【0020】
データは、各演算子ブロック210、212、214、216および218で操作され、データ経路220、222、224および226にわたって演算子ブロックから演算子ブロックまでチェーンを下って降りる。
【0021】
「ジャンプ」命令の場合、データフローは、演算子ブロックによって逆方向に、または別個のデータ経路228を介して他の何らかの演算子ブロックに変更/リダイレクトされ得る。この実施例では、達成された条件に基づくジャンプが、演算子ブロック4(216)において演算子ブロック2(212)に戻るように示される。
【0022】
さらに、演算子ブロック210、212、214、216および218は、自律的であってもよく、チェーン内の前の演算子ブロックからデータを受信するとき、非同期的または同期的にデータを処理することができる。
【0023】
自律動作の一実施形態では、コンベヤベルトアーキテクチャは、複数の命令が単一のプロセッササイクルで実行されることを可能にする。
【0024】
コンベヤベルトアーキテクチャは、RAMからプログラムを読み出して解読することを必要としないので、標準アーキテクチャよりも効率的であり得る。
【0025】
コンベヤベルトアーキテクチャは、共通バス経路に依拠せず、演算子ブロックの各セットがそれ自体のデータ経路を有するため、従来のコンピュータアーキテクチャに関連するボトルネックを回避することができる。
【0026】
コンベヤベルトアーキテクチャは、より高いスループットおよび処理能力を可能にし得る。このアーキテクチャのさらなる利点は、同期モードで動作すると、コンベヤベルトアーキテクチャが、各演算子ブロック入力でデータをキューイングすることによって、再構成可能なハードウェアプラットフォームにデータをより密にパックすることができ、それが利用可能になったときに後続の演算子ブロックにロードされる準備ができていることである。
【0027】
プログラム命令は、ソフトウェアではなくハードウェア論理ゲートの形態で演算子ブロック内に含まれてよく、命令実行をソフトウェアの対応物よりもはるかに高速にする。
【0028】
コンベヤベルトアーキテクチャの別の利点は、プログラムがハッキングするのがより困難であり得ることである。プログラムは、ハードウェアとして記憶されてもよく、ハッカーによるプログラムの任意の修正は、コンベヤベルトのチェーンを破壊し、システムリセットをもたらし得る。システムリセットによって、元の(変更されていない)プログラムがシステムによって再構成可能なハードウェアプラットフォームに自動的にリロードされ得る。
【0029】
図3~11は、2つのアーキテクチャ間の差異を示す。より伝統的なコンピューティングシステムおよびコンベヤベルトコンピューティングシステムの両方からのCソースコードおよびコンパイル済み出力は、2つの異なるプログラムについて調べられる。
【0030】
図3は、フィボナッチ数をプリントするためのソースコードを示す。Cソースコードは、0~255の範囲のフィボナッチ数をプリントアウトするために使用されるプログラムについて示される。
【0031】
図4は、フィボナッチ数をプリントするためのマシンコードを示す。
図3からのCソースコードは、従来のコンピューティングシステム上で実行するためにコンパイルされ得る。生じた機械言語は、
図4に示されるリストと同様であり得る。従来のコンピューティングシステムは、少なくとも85サイクルのCPUクロックを使用して、計算およびプリントループの第1の反復を完了し得る。その後、従来のコンピューティングシステムは、少なくとも56サイクルのCPUを使用して、計算およびプリントループの後続の反復を完了し得る。
【0032】
図5は、フィボナッチ数をプリントするための演算子ブロックのフローチャートを示す。
図4と比較して、
図3に示されるCソースコードは、コンベヤベルトコンピューティングシステム上で実行するためにコンパイルされ得る。プログラムを実行するために使用される生じた演算子ブロックは、
図5に示されるものと同様であり得る。
【0033】
演算子ブロック1(OB#1)502は、値「x=0」および「y=1」を割り当てる。演算子ブロック2(OB#2)504は、「printf」機能を実行する。演算子ブロック3(OB#3)506は、xおよびyの内容を加算し、それを変数zに割り当てる。また、yをxに割り当て、zをyに割り当てる。演算子ブロック4(OB#4)508は、「x<255」の結果が真である場合、演算子ブロック2 504の開始に戻る条件付きジャンプを実行し、「x<255」の結果が偽である場合、演算子ブロック1 502の開始に戻る条件付きジャンプを実行する。
【0034】
この実施形態では、多くの命令が、単一の演算子ブロック502、504、506および508内で一緒にグループ化されることができ、データが次の演算子ブロックに渡される前に、複数の演算がデータ上で行われることを可能にする。同期モードで動作するとき、コンベヤベルトアーキテクチャは、4つのプロセッサクロックサイクルを使用して、計算およびプリントループの最初およびその後の反復を完了することができる。これによって、この実施例におけるコンベヤベルトアーキテクチャマシンが、同様のクロックサイクルを有する従来のマシンよりも14倍速く動作することが可能になる(すなわち、56サイクル対4サイクル)。
【0035】
図6は、数字和を求めるためのソースコードを示す。再帰を使用して数の数字和を求めるためのプログラムのためのCソースコードを
図6に示す。
【0036】
図7~
図10は、数字和を求めるためのマシンコードを示す。
図6からのCソースコードは、フォンノイマン型コンピューティングシステム上で実行されるようにコンパイルされ得る。生じた機械言語は、
図7~10に示されるリストと同様であり得る。「メイン」ループは、結果1002を計算しリターンするために別個の「和」ループ802を呼び出す。和ループ内には、「if」ステートメント902が含まれる。ifステートメントの結果に応じて、デジタルコンピュータは、1回の反復を処理するために、113CPUクロックサイクルまたはクロックサイクルの191サイクルのいずれかを使用し得る。
【0037】
図9は、数字和を求めるための演算子ブロックのフローチャートを示す。
図7~
図10と比較すると、
図6に示すCソースコードは、コンベヤベルトアーキテクチャコンピューティングシステム上で実行するようにコンパイルすることができる。プログラムを実行するために使用される生じた演算子ブロックは、
図11に示されるものと同様であり得る。
【0038】
演算子ブロック1(OB#1)1102は、出力デバイス「Enter the number」にプリントする「printf」機能を実行する。演算子ブロック2(OB#2)1104は、入力デバイスから数字を入力するための「scanf」機能を実行する。演算子ブロック3(OB#3)1106は、入力された数を0と比較する「if」ステートメントを実行し、次いで、結果が肯定である場合、演算子ブロック4(OB#4)1108に、または結果が否定である場合、演算子ブロック5(OB#5)1110にプログラムをリダイレクトする。演算子ブロック4(OB#4)1108は計算を実行する。演算子ブロック5(OB#5)1110は0をリターンする。演算子ブロック6(OB#6)1112は、OB#4(1108)またはOB#5(1110)のいずれかによってリターンされた番号を変数「sum」に割り当てる。演算子ブロック7(OB#7)1114は、「printf」機能を実行して、出力デバイス上にsumをプリントする。さらに、この演算子ブロック1114の出力は、OB#1(1102)の入力に結合されて、プログラムが無期限にループされることを可能にする。
【0039】
この実施形態では、演算子ブロックは、条件の結果に応じてプログラムチェーンをリダイレクトすることができる。同期モードで動作すると、コンベヤベルトアーキテクチャコンピューティングシステムは、「if」命令の結果にかかわらず、6つのプロセッサクロックサイクルを使用してプログラムの反復を完了することができる。この実施例におけるコンベヤベルトアーキテクチャコンピューティングシステムは、同様のクロックサイクルに対して、標準アーキテクチャコンピューティングシステムよりも18倍速い係数を有し得る(すなわち、113サイクル対6サイクル)。
【0040】
コンベヤベルトアーキテクチャコンピューティングシステムは、用途に応じて、標準アーキテクチャコンピューティングシステムよりも著しく高速であり得る。例えば、コンベヤベルトアーキテクチャコンピューティングシステムは、大量のデータが処理されるアプリケーションにおいてより高速であり得る。標準アーキテクチャコンピューティングシステムを超えるコンベヤベルトアーキテクチャコンピューティングシステムのパフォーマンスの利点は、実行されるプログラムに依存し得る。試験を通して、100%~2,000%の利点がいくつかの用途において可能であることが分かっている。
【0041】
図12は、標準アーキテクチャコンピューティングシステムと組み合わせて使用されるコンベヤベルトアーキテクチャコンピューティングシステムを示すブロック図である。この実施形態では、標準アーキテクチャコンピューティングシステムフロントエンド1202は、共通バス1206を介してコンベヤベルトアーキテクチャコンピューティングシステムバックエンド1204に結合する。
【0042】
標準アーキテクチャコンピューティングシステムフロントエンドは、以下のコンポーネントを備える;共通バス構成1206を介して互いに結合される、中央処理装置(CPU)1208、ダイナミックランダムアクセスメモリ(DRAM)1210、ローカルエリアネットワーク(LAN)アダプタ1212、基本入出力システム(BIOS)1214、およびハードディスクドライブ(HDD)1216。HDD1216の場合、これはインターフェース(I/F)1218を介する。
【0043】
この実施形態には、グラフィックプロセッサユニット(GPU)1220およびさらなる拡張プロセッサ1222も示されている。
【0044】
コンベヤベルトアーキテクチャコンピューティングシステムベルトバックエンドは、共通バス1206を介してシステム全体の残りのコンポーネントに結合するFPGA1224を組み込む。
【0045】
いくつかのプログラムは、動作時間のかなりの部分についてアイドル状態であり得るので、コンベヤベルトアーキテクチャコンピューティングシステムにおいてこのアイドルコードを実行することはほとんど意味がない。代わりに、プログラムの特定のセクション(例えば、クリティカルループ、クリティカルパス)のみが、コンベヤベルトアーキテクチャコンピューティングシステムにおいて変換および実行されて、「重いリフティング」を実行し得る。特定のセクションのない残りのプログラムは、フロントエンド標準アーキテクチャコンピューティングシステムにおいて依然として実行されてもよい。2つのアーキテクチャを共に使用することによって、コンベヤベルトアーキテクチャコンピューティングシステム上で動作するために、プログラム全体が変換される必要性を回避することができる。これは、いかなる明白な利点も提供しない貴重なコンベヤベルトアーキテクチャコンピューティングシステム面積(例えば、プログラム空間)の使用を回避し得る。さらに、2つのアーキテクチャの使用によって、標準アーキテクチャコンピューティングシステム上で実行するように設計された既存のプログラムとの互換性が確保される。
【0046】
いくつかの実施形態では、コンベヤベルトアーキテクチャコンピューティングシステムは、標準アーキテクチャコンピューティングシステムと併せて使用されてもよい。
図13は、コンベヤベルトアーキテクチャコンピューティングシステムおよび標準アーキテクチャコンピューティングシステムにわたってプログラムが実行される方法を示すブロック図である。標準アーキテクチャコンピューティングシステムフロントエンド1302は、バス1306を介してコンベヤベルトアーキテクチャコンピューティングシステムバックエンド1304に結合する。次いで、プログラム1308の本体は、呼出し機能1316および1320を介して、ルーチンA1312およびルーチンB1314のコンベヤベルトアーキテクチャコンピューティングシステムを呼び出し、それぞれ1318および1322において結果をリターンする。
【0047】
図14は、コンベヤベルトアーキテクチャを準備するための方法のフローチャートを示す。この方法は、
図2からの204を含む、本明細書に記載のシステムおよび/またはコンポーネントによって実行することができる。ブロック1402において、コンベヤベルトシステムは、ソフトウェアとして実行するように構成されたプログラムを受け取ることができる。ブロック1404において、コンベヤベルトシステムは、プログラムの第1の部分をハードウェアとして実行し、プログラムの第2の部分をソフトウェアとして実行することを決定することができる。ブロック1406では、コンベヤベルトシステムは、第1の部分に基づいて、事前データバスから入力データを取り込み、入力データに対して1つ以上の変換を実行し、出力データバスを介して変換された入力データを出力する、1つ以上の変換関数を含む複数の相互接続されたリプログラマブル演算子ブロックを決定してもよい。ブロック1408では、コンベヤベルトシステムは、1つ以上のリプログラマブルプロセッサ上で実行するように、複数の相互接続されたリプログラマブル演算子ブロックを構成してもよい。ブロック1410において、コンベヤベルトシステムは、1つまたは複数のフロントエンドプロセッサを介して第2の部分を実行することができる。ブロック1412では、コンベヤベルトシステムは、第1のデータを1つ以上のフロントエンドプロセッサから1つ以上のリプログラマブルプロセッサに送信してもよい。ブロック1414において、コンベヤベルトシステムは、1つまたは複数のリプログラマブルプロセッサを介して第1の部分を実行することができる。ブロック1416では、コンベヤベルトシステムは、第2のデータを1つ以上のリプログラマブルプロセッサから1つ以上のフロントエンドプロセッサに送信してもよい。ブロック1418において、コンベヤベルトシステムは、第1のデータおよび第2のデータに基づいて、結果データを決定することができる。
【0048】
コンベヤベルトシステムは、計算の複雑さに基づいて、ハードウェアで実行されるプログラムの第1の部分を決定することができる。結果データは、プログラムの実行の結果であってもよい。第2のデータは、1つまたは複数の変換に基づいて第1のデータから導出され得る。結果データは第2のデータから導出されてもよく、第2のデータは第1のデータから導出されてもよい。1つ以上のリプログラマブルプロセッサは、フィールドプログラマブルゲートアレイであってもよい。1つまたは複数のフロントエンドプロセッサから1つまたは複数のリプログラマブルプロセッサに第1のデータを送るステップは、拡張バスを介して、1つまたは複数のフロントエンドプロセッサから1つまたは複数のリプログラマブルプロセッサに第1のデータを送るステップをさらに含み得る。ソフトウェアとして実行されるように構成されたプログラムを受信するステップは、プログラムを実行可能なソフトウェアコードと、ハードウェア構成と、実行可能なソフトウェアコードとハードウェア構成との間でデータを転送するための通信コードとにコンパイルするステップをさらに含み得る。
【0049】
コンベヤベルトプロセッサは、入力データバス、複数の相互接続されたリプログラマブル演算子ブロック、および出力データバスを備え得る。複数の相互接続されたリプログラマブル演算子ブロックは、以下を含み得る:第2のリプログラマブル演算子ブロックの出力データバス、または前記入力データバスに結合された、第1のリプログラマブル演算子ブロックの入力データバス;第3のリプログラマブル演算子ブロックの入力データバス、または出力データバスに結合された、第1のリプログラマブル演算子ブロックの出力データバス;および、事前データバスから入力データを取り込み、入力データに対して1つまたは複数の変換を実行し、出力データバスを介して変換された入力データを出力する、1つまたは複数の変換機能。
【0050】
複数の相互接続されたリプログラマブル演算子ブロックのバス幅は同じでなくてもよい。後続ブロックの出力は、前のブロックの入力であり得る。第2のリプログラマブル演算子ブロックおよび第3のリプログラマブル演算子ブロックは同じであってもよい。第3のリプログラマブル演算子ブロックは、実行順序において第1のリプログラマブル演算子ブロックの前にあり得る。コンベヤベルトプロセッサは、複数の相互接続されたリプログラマブル演算子ブロックを作成するための命令を受信するように構成されたプログラミングインターフェースをさらに備えてもよい。
【0051】
データを処理するためのシステムは、複数のプロセッサ、および管理機能を備えてもよく、管理機能は、データを各プロセッサに割り当てるように構成される。各プロセッサは、入力データバス、複数の相互接続されたリプログラマブル演算子ブロック、および出力データバスを備えることができる。相互接続されたリプログラマブル演算子ブロックは、以下を含み得る:第2のリプログラマブル演算子ブロックの出力データバス、または前記入力データバスに結合された、第1のリプログラマブル演算子ブロックの入力データバス;第3のリプログラマブル演算子ブロックの入力データバス、または出力データバスに結合された、第1のリプログラマブル演算子ブロックの出力データバス;および、事前データバスから入力データを取り込み、入力データに対して1つまたは複数の変換を実行し、出力データバスを介して変換された入力データを出力する、1つまたは複数の変換機能。
【0052】
管理機能は、複数の相互接続されたリプログラマブル演算子ブロックを再構成するようにさらに構成され得る。管理機能は、複数のプロセッサの複数の相互接続されたリプログラマブル演算子ブロックを作成するための命令を記憶するメモリを備え得る。請求項に記載のシステムは、複数のプロセッサとは異なるアーキテクチャを有する少なくとも1つのフロントエンドプロセッサをさらに備えることができる。少なくとも1つのフロントエンドプロセッサは、汎用プロセッサを備え得る。管理機能は、以下を含んでもよい:構成変更を受信するように構成された安全なインターフェース;および、複数のプロセッサのうちの1つまたは複数のプロセッサにデータを割り当てるように構成された安全でないインターフェース。
【0053】
図15は、いくつかの例示的な実施形態による、機械可読またはコンピュータ可読媒体(例えば、機械可読記憶媒体)から命令を読み取り、本明細書で説明する方法のうちの任意の1つまたは複数を実行することができるコンポーネントを示すブロック図である。具体的には、
図15は、1つまたは複数のプロセッサ(またはプロセッサコア)1510、1つまたは複数のメモリ/ストレージデバイス1520、および1つまたは複数の通信リソース1530を含むハードウェアリソース1500の概略図を示し、それらの各々は、バス1540を介して通信可能に結合される。
【0054】
プロセッサ1510(例えば、中央処理装置(CPU)、縮小命令セットコンピューティング(RISC)プロセッサ、複合命令セットコンピューティング(CISC)プロセッサ、グラフィックス処理ユニット(GPU)、ベースバンドプロセッサなどのデジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、無線周波数集積回路(RFIC)、別のプロセッサ、またはそれらの任意の適切な組合せ)は、例えば、プロセッサ1512およびプロセッサ1514を含み得る。メモリ/ストレージデバイス1520は、メインメモリ、ディスクストレージ、またはそれらの任意の適切な組合せを含み得る。
【0055】
通信リソース1530は、ネットワーク1508を介して1つまたは複数の周辺デバイス1504および/または1つまたは複数のデータベース1506と通信するための相互接続および/またはネットワークインターフェースコンポーネントまたは他の適切なデバイスを含み得る。例えば、通信リソース1530は、有線通信コンポーネント(例えば、ユニバーサルシリアルバス(USB)を介した結合のため)、セルラー通信コンポーネント、近距離無線通信(NFC)コンポーネント、Bluetooth(登録商標)コンポーネント(例えば、Bluetooth(登録商標)Low Energy)、Wi-Fi(登録商標)コンポーネント、および他の通信コンポーネントを含み得る。
【0056】
命令1550は、プロセッサ1510のうちの少なくともいくつかに本明細書で説明する方法のうちの任意の1つまたは複数を実行させるための、ソフトウェア、プログラム、アプリケーション、アプレット、アプリ、または他の実行可能コードを備え得る。命令1550は、プロセッサ1510内(例えば、プロセッサのキャッシュメモリ内)、メモリ/ストレージデバイス1520、またはそれらの任意の適切な組合せのうちの少なくとも1つの中に、完全にまたは部分的に常駐することができる。さらに、命令1550の任意の部分は、周辺デバイス1504および/またはデータベース1506の任意の組合せからハードウェアリソース1500に転送され得る。したがって、プロセッサ1510のメモリ、メモリ/ストレージデバイス1520、周辺デバイス1504、およびデータベース1506は、コンピュータ可読媒体および機械可読媒体の例である。
【0057】
本明細書で使用する「回路」という用語は、1つまたは複数のソフトウェアまたはファームウェアプログラム、組合せ論理回路、および/または記載された機能を提供する他の適切なハードウェアコンポーネントを実行する、特定用途向け集積回路(ASIC)、電子回路、プロセッサ(共有、専用、またはグループ)、および/またはメモリ(共有、専用、またはグループ)を指す、それらの一部である、またはそれらを含み得る。いくつかの実施形態では、回路は、1つ以上のソフトウェアまたはファームウェアモジュールにおいて実装されてもよく、または、それらによって実装され得る回路と関連付けられて機能する。いくつかの実施形態では、回路は、ハードウェアにおいて少なくとも部分的に動作可能な論理を含み得る。
【0058】
本明細書で説明されるシステムおよび方法の実施形態および実装形態は、コンピュータシステムによって実行される機械実行可能命令で具現化され得る、種々の動作を含んでもよい。コンピュータシステムは、1つまたは複数の汎用または専用コンピュータ(または他の電子デバイス)を含むことができる。コンピュータシステムは、動作を実行するための特定のロジックを含むハードウェアコンポーネントを含んでもよく、あるいは、ハードウェア、ソフトウェア、および/またはファームウェアの組合せを含んでもよい。
【0059】
コンピュータシステムおよびコンピュータシステム内のコンピュータは、ネットワークを介して接続されてもよい。本明細書で説明されるような構成および/または使用のための好適なネットワークは、ワールドワイドウェブ、プライベートインターネット、セキュアインターネット、付加価値ネットワーク、仮想プライベートネットワーク、エクストラネット、イントラネット、または、媒体の物理的輸送によって他のマシンと通信するスタンドアロンマシン等の、1つまたは複数のローカルエリアネットワーク、ワイドエリアネットワーク、メトロポリタンエリアネットワーク、および/またはインターネットもしくはIPネットワークを含む。特に、好適なネットワークは、異なるハードウェアおよびネットワーク通信技術を使用するネットワークを含む、2つ以上の他のネットワークの部分または全体から形成されてもよい。
【0060】
1つの適切なネットワークは、サーバおよび1つまたは複数のクライアントを含む;他の好適なネットワークは、サーバ、クライアント、および/またはピアツーピアノードの他の組合せを含んでもよい;所与のコンピュータシステムは、クライアントおよびサーバとして機能してもよい。各ネットワークは、サーバおよび/またはクライアントなどの少なくとも2つのコンピュータまたはコンピュータシステムを含む。コンピュータシステムは、ワークステーション、ラップトップコンピュータ、切断可能なモバイルコンピュータ、サーバ、メインフレーム、クラスタ、いわゆる「ネットワークコンピュータ」または「シンクライアント」、タブレット、スマートフォン、携帯情報端末または他の携帯型コンピューティングデバイス、「スマート」家庭用電子機器デバイスもしくは家電製品、医療デバイス、またはそれらの組合せを含んでもよい。
【0061】
好適なネットワークは、Novell(登録商標)、Microsoft(登録商標)、および他のベンダから入手可能なソフトウェア等の通信またはネットワーキングソフトウェアを含んでもよく、ツイストペア、同軸、または光ファイバケーブル、電話線、電波、衛星、マイクロ波中継器、変調AC電力線、物理媒体転送、および/または当業者に知られている他のデータ伝送「ワイヤ」を介して、TCP/IP、SPX、IPX、および他のプロトコルを使用して動作してもよい。ネットワークは、より小さいネットワークを含んでもよい、および/または、ゲートウェイもしくは同様の機構を介して他のネットワークに接続可能でもよい。
【0062】
様々な技法、またはその特定の態様もしくは部分は、フロッピーディスク(登録商標)、CD-ROM、ハードドライブ、磁気もしくは光カード、ソリッドステートメモリデバイス、非一時的コンピュータ可読記憶媒体、または任意の他の機械可読記憶媒体などの有形媒体において具現化されたプログラムコード(すなわち、命令)の形態をとってもよく、プログラムコードがコンピュータなどの機械にロードされそれによって実行されると、機械は、様々な技法を実施するための装置になる。プログラム可能なコンピュータ上でのプログラムコード実行の場合、コンピューティングデバイスは、プロセッサ、プロセッサによって読み取り可能な記憶媒体(揮発性および不揮発性メモリおよび/または記憶要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを含み得る。揮発性および不揮発性メモリおよび/または記憶要素は、RAM、EPROM、フラッシュドライブ、光学ドライブ、磁気ハードドライブ、または電子データを記憶するための他の媒体であってもよい。本明細書で説明される様々な技法を実装または利用し得る1つまたは複数のプログラムは、アプリケーションプログラミングインターフェース(API)、再使用可能制御などを使用し得る。そのようなプログラムは、コンピュータシステムと通信するために高水準手続き型またはオブジェクト指向プログラミング言語で実装され得る。しかしながら、プログラムは、所望であれば、アセンブリ言語または機械言語で実装されてもよい。いずれの場合も、言語は、コンパイルまたは解釈された言語であり得、ハードウェア実装と組み合わせられ得る。
【0063】
各コンピュータシステムは、1つまたは複数のプロセッサおよび/またはメモリを含む;コンピュータシステムはまた、種々の入力デバイスおよび/または出力デバイスを含んでもよい。プロセッサは、Intel(登録商標)、AMD(登録商標)、または他の「既製」マイクロプロセッサ等の汎用デバイスを含んでもよい。プロセッサは、ASIC、SoC、SiP、FPGA、PAL、PLA、FPLA、PLD、または他のカスタマイズされたもしくはプログラム可能なデバイスなどの専用処理デバイスを含み得る。メモリは、スタティックRAM、ダイナミックRAM、フラッシュメモリ、1つまたは複数のフリップフロップ、ROM、CD-ROM、DVD、ディスク、テープ、または磁気、光学、もしくは他のコンピュータ記憶媒体を含み得る。入力デバイスは、キーボード、マウス、タッチスクリーン、ライトペン、タブレット、マイクロフォン、センサ、または付随するファームウェアおよび/もしくはソフトウェアを有する他のハードウェアを含み得る。出力デバイスは、モニタもしくは他のディスプレイ、プリンタ、音声もしくはテキストシンセサイザ、スイッチ、信号線、または付随するファームウェアおよび/もしくはソフトウェアを有する他のハードウェアを含み得る。
【0064】
本明細書で説明される機能ユニットの多くは、それらの実装の独立性をより具体的に強調するために使用される用語である、1つまたは複数のコンポーネントとして実装され得ることを理解されたい。例えば、コンポーネントは、カスタム超大規模集積(VLSI)回路もしくはゲートアレイ、または論理チップ、トランジスタ、もしくは他の個別のコンポーネントなどの既製の半導体を含むハードウェア回路として実装され得る。コンポーネントはまた、フィールドプログラマブルゲートアレイ、プログラマブルアレイロジック、プログラマブルロジックデバイスなどのプログラマブルハードウェアデバイスにおいて実装されてもよい。
【0065】
コンポーネントはまた、様々なタイプのプロセッサによる実行のためのソフトウェアで実装され得る。実行可能コードの識別されたコンポーネントは、例えば、オブジェクト、処置、または関数として編成され得るコンピュータ命令の1つまたは複数の物理的または論理的ブロックを備え得る。それにもかかわらず、識別されたコンポーネントの実行ファイルは、物理的に一緒に位置する必要はなく、論理的に一緒に結合されたときにコンポーネントを構成しコンポーネントの所定の目的を達成する、異なる位置に記憶された異なる命令を含み得る。
【0066】
実際、実行可能コードのコンポーネントは、単一の命令または多くの命令であってもよく、いくつかの異なるコードセグメントにわたって、異なるプログラムの間で、およびいくつかのメモリデバイスにわたって分散されてもよい。同様に、動作データは、本明細書では、コンポーネント内で識別および図示されてもよく、任意の好適な形態で具現化され、任意の好適な種類のデータ構造内で編成されてもよい。動作データは、単一のデータセットとして収集されてもよく、または異なる記憶デバイスを含む異なる場所に分散されてもよく、少なくとも部分的に、単にシステムまたはネットワーク上の電子信号として存在してもよい。コンポーネントは受動的または能動的であってもよく、所望の機能を実行するように動作可能なエージェントを含む。
【0067】
説明される実施形態のいくつかの態様は、ソフトウェアモジュールまたはコンポーネントとして示される。本明細書で使用されるように、ソフトウェアモジュールまたはコンポーネントは、メモリデバイス内に位置する任意のタイプのコンピュータ命令またはコンピュータ実行可能コードを含んでもよい。ソフトウェアモジュールは、例えば、1つまたは複数のタスクを実行するかまたは特定のデータタイプを実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などとして編成され得る、コンピュータ命令の1つまたは複数の物理的または論理的ブロックを含み得る。ソフトウェアモジュールは、ソフトウェアの代わりに、またはソフトウェアに加えて、ハードウェアおよび/またはファームウェアで実装され得ることを理解されたい。本明細書で説明される1つまたは複数の機能モジュールは、サブモジュールに分離されてもよく、および/または単一またはより少ない数のモジュールに組み合わせられてもよい。
【0068】
いくつかの実施形態では、特定のソフトウェアモジュールは、メモリデバイスの異なる位置、異なるメモリデバイス、または異なるコンピュータに記憶された異なる命令を含んでもよく、これらは共に、モジュールの説明した機能を実装する。実際、モジュールは、単一の命令または多くの命令を含んでもよく、いくつかの異なるコードセグメントにわたって、異なるプログラムの間で、およびいくつかのメモリデバイスにわたって分散され得る。いくつかの実施形態は、分散コンピューティング環境において実施されてもよく、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される。分散コンピューティング環境では、ソフトウェアモジュールは、ローカルおよび/またはリモートメモリ記憶デバイスに配置され得る。加えて、データベースレコード内で結び付けられるかまたは一緒にレンダリングされるデータは、同じメモリデバイス内に、またはいくつかのメモリデバイスにわたって常駐してもよく、ネットワークを介してデータベース内のレコードのフィールド内で一緒にリンクされ得る。
【0069】
本明細書を通しての「実施例」への言及は、実施例に関連して記載される特定の特徴、構造、または特性が、本発明の少なくとも1つの実施形態に含まれることを意味する。したがって、本明細書全体にわたる様々な箇所における「実施例において」という語句の出現は、必ずしもすべてが同じ実施形態に言及しているわけではない。
【0070】
本明細書で使用されるように、複数のアイテム、構造要素、組成要素、および/または材料は、便宜上、共通リストで提示されてもよい。しかしながら、これらのリストは、リストの各メンバーが個別のユニークなメンバーとして個々に識別されるように解釈されるべきである。したがって、そのようなリストの個々のメンバーは、それとは反対の指示がない限り、共通のグループにおけるその提示にのみ基づいて、同じリストの任意の他のメンバーの事実上の等価物として解釈されるべきではない。さらに、本発明のさまざまな実施形態および実施例は、そのさまざまなコンポーネントの代替物とともに本明細書で言及され得る。そのような実施形態、実施例、および代替物は、互いの事実上の均等物として解釈されるべきではなく、本発明の別個の自律的な表現と見なされるべきであることを理解されたい。
【0071】
さらに、説明される特徴、構造、または特性は、1つまたは複数の実施形態において、任意の好適な様式で組み合わせられてもよい。以下の説明では、本発明の実施形態の完全な理解を提供するために、材料、周波数、サイズ、長さ、幅、形状などの例のような、多数の具体的な詳細が提供される。しかしながら、当業者であれば、本発明は、1つ以上の具体的詳細を伴わずに、または他の方法、コンポーネント、材料等を用いて、実践されてもよいことを認識するであろう。他の例では、周知の構造、材料、または動作は、本発明の態様を不明瞭にすることを回避するために、詳細に図示または説明されない。
【0072】
本明細書に記載されるシステムは、特定の実施形態の説明を含むことを認識されたい。これらの実施形態は、単一のシステムに組み合わせるか、部分的に他のシステムに組み合わせるか、複数のシステムに分割するか、または他の方法で分割もしくは組み合わせることができる。加えて、ある実施形態のパラメータ/属性/態様/等が別の実施形態において使用され得ることが企図される。パラメータ/属性/態様/等は、明確にするために、1つまたは複数の実施形態で説明されるにすぎず、パラメータ/属性/態様/等は、本明細書で具体的に放棄されない限り、別の実施形態のパラメータ/属性/態様/等と組み合わせるか、または代用することができることを認識されたい。
【0073】
前述は、明確にする目的で、ある程度詳細に説明されたが、その原理から逸脱することなく、特定の変更および修正が行われてもよいことが明白となるであろう。本明細書で説明されるプロセスおよび装置を実装する多くの代替方法があることに留意されたい。したがって、本発明の実施形態は、限定的ではなく例示的であると見なされるべきであり、本発明は、本明細書に与えられる詳細に限定されず、添付の特許請求の範囲および均等物の範囲内で修正され得る。
【0074】
当業者であれば、本発明の基本原理から逸脱することなく、上述の実施形態の詳細に多くの変更を加えることができることを理解するであろう。したがって、本発明の範囲は、以下の特許請求の範囲によってのみ決定されるべきである。
【国際調査報告】