(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-26
(45)【発行日】2024-07-04
(54)【発明の名称】集積回路、およびデータクエリを加速させる方法
(51)【国際特許分類】
G06F 17/10 20060101AFI20240627BHJP
G06F 9/50 20060101ALI20240627BHJP
G06F 15/80 20060101ALI20240627BHJP
G06F 9/30 20180101ALI20240627BHJP
G06F 16/245 20190101ALI20240627BHJP
【FI】
G06F17/10 Z
G06F9/50 150E
G06F15/80
G06F9/30 350D
G06F16/245
(21)【出願番号】P 2021532113
(86)(22)【出願日】2019-10-16
(86)【国際出願番号】 US2019056496
(87)【国際公開番号】W WO2020117377
(87)【国際公開日】2020-06-11
【審査請求日】2022-09-14
(32)【優先日】2018-12-06
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ベルマ,ヘア・ケイ
(72)【発明者】
【氏名】ティアン,ビング
【審査官】坂東 博司
(56)【参考文献】
【文献】国際公開第2016/185542(WO,A1)
【文献】特表2015-532749(JP,A)
【文献】米国特許出願公開第2015/0532749(US,A1)
【文献】米国特許出願公開第2014/0379113(US,A1)
【文献】三好 健文 TAKEFUMI MIYOSHI,ストリーム処理エンジン向け動的再構成可能プロセッサアーキテクチャの設計 A Dynamic Reconfigurable Processor Architecture for Stream Processing Engine,情報処理学会論文誌 論文誌トランザクション 2011(平成23)年度▲1▼ [CD-ROM] ,日本,一般社団法人情報処理学会,2011年10月15日,第4巻 第2号,35~51,【ISSN】1882-7772
【文献】Divya Mahajan et al,In-RDBMS Hardware Acceleration of Advanced Analytics,ARXIV.ORG, Cornell University Library,米国,ARXIV.ORG, Cornell University Library,2018年01月08日,1-15,https://arxiv.org/abs/1801.06027,DOI:10.14778/3236187.3236188
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/10
G06F 9/50
G06F 15/80
G06F 9/30
G06F 16/245
(57)【特許請求の範囲】
【請求項1】
集積回路であって、
並列に配置された複数の処理ユニット(PU(i))を備え、前記複数のPU(i)の各々は、予め定められたクエリ言語を使用する命令セット群(G)における予め定められた命令セット(S(i))がロードされた命令レジスタを備え、前記予め定められた命令セット(S(i))に従ってデータストリームの選択されたデータブロックを処理するように構成されたハードウェア回路で形成され、前記複数のPU(i)の各々は、前記PU(i)によって処理される前記データストリームの前記選択された部分に対応する中間出力結果を生成し、前記集積回路はさらに、
前記複数のPU(i)の各々から前記中間出力結果の各々を受信して、集約結果を生成するように結合された連結回路を備え、
前記S(i)の各々は、ユーザ定義のクエリから抽出された命令の関数
および少なくとも1つのパラメータの関数を備え
、
前記複数のPU(i)の各々は、(i)変数レジスタに格納された前記データストリームの一部を備える第1のオペランドと、(ii)定数レジスタに格納された前記抽出されたパラメータのうちの1つを備える第2のオペランドとを使用して実行される演算を実行することによって、前記対応するS(i)を実行するように構成される、集積回路。
【請求項2】
前記予め定められた命令セット(S(i))は、SQL命令を備える、請求項1に記載の集積回路。
【請求項3】
前記予め定められたクエリ言語は、SQLを備える、請求項1に記載の集積回路。
【請求項4】
前記連結回路は、前記ユーザ定義のクエリに関連付けられた予め定められた関数に従って前記集約結果を生成するように構成される、請求項1に記載の集積回路。
【請求項5】
前記複数の処理ユニットの各々は、ASICにおける固定ハードウェア回路として実現される、請求項1に記載の集積回路。
【請求項6】
前記複数の処理ユニットの各々は、FPGAのプログラム可能なファブリックにおける再構成可能なハードウェアとして実現される、請求項1に記載の集積回路。
【請求項7】
前記データストリームを受信するように結合されたスケジューラ回路をさらに備え、前記スケジューラ回路は、前記データブロックの各々を前記複数のPU(i)のうちの1つに選択的に向けるように構成される、請求項1に記載の集積回路。
【請求項8】
前記スケジューラ回路は、ラウンドロビンスケジューラを備える、請求項7に記載の集積回路。
【請求項9】
前記複数のPU(i)の各々は、抽出された命令に基づ
き、かつ(i)前記第1のオペランドと(ii)前記第2のオペランドとを使用して、前記演算を実行することによって前記対応するS(i)を実行するように適合された演算論理装置ALUを備える
、請求項
1に記載の集積回路。
【請求項10】
前記複数の処理ユニットの各々は、
前記実行された演算の結果を保持するように構成された一時レジスタと、
前記定数レジスタおよび前記変数レジスタから入力を受信するように構成された第1のマルチプレクサと、
前記定数レジスタ、前記変数レジスタおよび前記一時レジスタから入力を受信するように構成された第2のマルチプレクサとをさらに備える、請求項
1に記載の集積回路。
【請求項11】
データクエリを実行するようにファブリックを構成する方法であって、
ユーザからデータクエリを受信するステップと、
前記データクエリを予め定められたクエリ言語のコマンドに変換するステップと、
前記コマンドから、複数の並列処理ユニットPU(i)に格納されるパラメータを抽出するステップと、
前記コマンドから命令を抽出して、前記PU(i)によって実行される命令セット群Gを形成するステップとを備え、前記命令セット群Gは、複数の命令セットS(i)を備え、前記方法はさらに、
前記複数のPU(i)に前記抽出されたパラメータおよび前記抽出された命令をロードするステップを備え、
前記PU(i)の各々は、データストリームの予め定められたデータブロック(i)を、その対応するパラメータおよび命令セットS(i)を用いて並列に処理するように構成される、方法。
【請求項12】
前記予め定められたクエリ言語は、SQLを備える、請求項1
1に記載の方法。
【請求項13】
前記PU(i)の各々は、同一のS(i)で構成される、請求項1
1に記載の方法。
【請求項14】
前記抽出されたパラメータおよび前記抽出された命令をロードする前に全ての前記PU(i)をクリアするステップをさらに備える、請求項11に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
技術分野
さまざまな実施形態は、一般に、ハードウェア加速(アクセラレーション)に使用される構成可能なファブリックを有する集積回路に関する。
【背景技術】
【0002】
背景
ビッグデータは、従来のデータ処理アプリケーションソフトウェアでは処理できないほどに大きくかつ複雑なデータセットの研究および応用を指して用いられる。ビッグデータは、課題を生じさせ、それらの課題は、データ取り込み、データ記憶、データ分析、データ更新、情報プライバシ、およびデータ照会を含むが、これらに限定されるものではない。
【0003】
データクエリとは、一般に、データベーステーブルまたはテーブルの組み合わせからのデータまたは情報に対する要求のことをいう。このデータは、構造化照会言語(SQL)によって返される結果として、または、画像、グラフまたは複雑な結果(たとえば、データマイニングツールからのトレンド分析)として生成されてもよい。SQLは、データベース内のデータを格納したり操作したり検索したりするための標準的な言語である。
【発明の概要】
【課題を解決するための手段】
【0004】
概要
ハードウェア加速に関連する集積回路および方法は、データストリームを処理して結果を集約してクエリに応答するようにカスタム適合された独立したプログラム可能な並列処理ユニット(PU)を含む。例示的な例においては、データベースからのデータストリームは、データブロックに分割されて、対応するPUに割り当てられてもよい。各データブロックは、予め定められた命令セットに従って結果を生成するようにPUのうちの1つによって処理されてもよい。連結ユニットは、各データブロックの結果を併合および連結して、クエリについての出力結果を生成してもよい。いくつかの実施形態においては、非常に大規模なデータベースSQLクエリは、たとえば、固定ASICまたは再構成可能なFPGAハードウェア回路内に実装されたハードウェアPU/連結エンジンによって加速されてもよい。
【0005】
いくつかの実施形態においては、フィールドプログラマブルゲートアレイ(FPGA)は、ファブリック内に形成された電気的に再構成可能なプログラム可能なハードウェア論理回路を提供してもよい。FPGAファブリックは、電気構成信号に応答して、クエリに特有のハードウェアリソース配置を提供するように再構成可能であってもよい。本明細書に教示されているように、再構成されたファブリックは、単一のFPGAが広範にわたるクエリを柔軟に加速させることができるように各クエリについて独自にハードウェア処理回路をカスタマイズすることによって大規模データベースのクエリを効率的に処理するためのハードウェアアクセラレータを生成するように配置されてもよい。
【0006】
いくつかの実施形態においては、特定用途向け集積回路(ASIC)は、ハードウェア論理回路(たとえば、デジタル、アナログ)の固定配置を提供するように製造されてもよい。ASICは、1つまたは複数のASICが単独でまたは組み合わさって1つまたは複数の予め定められたクエリを加速させることができるように、1つまたは複数の予め定められたクエリのためのカスタマイズされたハードウェア処理回路を用いて大規模データベースのクエリを効率的に処理するためのハードウェアアクセラレータを提供してもよい。
【0007】
さまざまな実施形態は、1つまたは複数の利点を実現し得る。たとえば、いくつかの実施形態は、たとえば大規模データベース上でクエリを実行する際に、実質的にデータクエリ応答時間を減少させ、および/または、処理スループットを増加させ得る。データベースクエリのハードウェア加速は、各々の特定のクエリについて演算およびパラメータに従って構成されたカスタマイズ可能な(たとえば、固定されていない)ハードウェアブロックで実現されてもよい。いくつかの実装例は、大規模データベースの顧客供給のクエリを実行するように、プログラム可能なファブリックデバイスにおいてプログラムされてもよい。さまざまな実施形態は、高速データストリーム処理を、固定中央処理装置(CPU)から、カスタムプログラムされたハードウェア処理チャネルにオフロードしてもよく、このカスタムプログラムされたハードウェア処理チャネルでは、予め定められた命令セットに従ってデータストリームの複数のデータブロックを個々に処理することができる。したがって、相当な計算効率が実現され得て、その結果、大規模データベースのクエリの処理時間が劇的に減少し得る。
【0008】
たとえば、いくつかの実施形態は、たとえば再構成可能なファブリックデバイス(たとえば、FPGA)を活用して最小限のハードウェアリソースで非常に効率的な並列処理を実行することによって、作製コストを削減して、分散非同期通信を減少させてもよい。たとえば、いくつかの実施形態は、カーネルレベル性能を向上させ、および/または、いくつかのクエリを処理する際にたとえばCPUの10~25倍の性能向上を提供してもよい。さまざまな実装例においては、フィールドプログラマブル機能を有するFPGAは、動的クエリ要件を満たすように1回または複数回エンドユーザによって柔軟にカスタマイズされてもよい。
【0009】
いくつかの実施形態においては、有利なことに、ASICは、専用の(たとえば、固定された)ハードウェア回路を使用して1つまたは複数の予め定められたクエリ構造にハードウェア加速機能を提供し得る。ASICを組み入れるいくつかの実施形態は、たとえばコンポーネントコスト、ボリュームおよび/または電力要件を減少させたクエリハードウェア加速を提供し得る。
【0010】
1つの例示的な局面においては、集積回路は、複数の処理ユニット(PU(i))を含む。上記PU(i)は、並列に配置される。上記PU(i)の各々は、予め定められたクエリ言語を使用する命令セット群(G)における予め定められた命令セット(S(i))に従ってデータストリームの選択されたデータブロックを処理するように構成されたハードウェア回路で形成される。各PU(i)は、上記PU(i)によって処理される上記データストリームの上記選択された部分に対応する中間出力結果を生成する。連結回路は、上記複数のPU(i)の各々から上記中間出力結果の各々を受信して、集約結果を生成するように結合される。上記S(i)の各々は、ユーザ定義のクエリから抽出された命令の関数を含む。
【0011】
いくつかの実施形態においては、上記予め定められた命令セット(S(i))は、SQL命令を含んでいてもよい。いくつかの実施形態においては、上記予め定められたクエリ言語は、SQLを含んでいてもよい。いくつかの実施形態においては、上記連結ユニットは、上記ユーザ定義のクエリに関連付けられた予め定められた関数に従って上記集約結果を生成するように構成されてもよい。いくつかの実施形態においては、上記複数の処理ユニットの各々は、ASICにおける固定ハードウェア回路として実現されてもよい。いくつかの実施形態においては、上記複数の処理ユニットの各々は、FPGAのプログラム可能なファブリックにおける再構成可能なハードウェアとして実現されてもよい。
【0012】
いくつかの実施形態においては、上記集積回路は、上記データストリームを受信するように結合されたスケジューラ回路も含んでいてもよい。上記スケジューラ回路は、上記データブロックの各々を上記複数のPU(i)のうちの1つに選択的に向けるように構成されてもよい。いくつかの実施形態においては、上記スケジューラ回路は、ラウンドロビンスケジューラを含んでいてもよい。いくつかの実施形態においては、上記S(i)の各々は、上記ユーザ定義のクエリから抽出された少なくとも1つのパラメータの関数も含んでいてもよい。いくつかの実施形態においては、上記複数のPU(i)の各々は、抽出された命令に基づいて演算を実行することによって上記対応するS(i)を実行するように適合された演算論理装置ALUを含んでいてもよい。上記演算は、(i)変数レジスタに格納された上記データストリームの一部を備える第1のオペランドと、(ii)定数レジスタに格納された上記抽出されたパラメータのうちの1つを備える第2のオペランドとを使用して実行されてもよい。
【0013】
いくつかの実施形態においては、上記複数の処理ユニットの各々は、上記実行された演算の結果を保持するように構成された一時レジスタと、上記定数レジスタおよび上記変数レジスタから入力を受信するように構成された第1のマルチプレクサと、上記定数レジスタ、上記変数レジスタおよび上記一時レジスタから入力を受信するように構成された第2のマルチプレクサとを含んでいてもよい。
【0014】
いくつかの実施形態においては、上記複数のPU(i)の各々は、上記ALUにおいて実行される上記S(i)を格納するように構成された命令レジスタも含んでいてもよい。いくつかの実施形態においては、上記PU(i)の各々は、同一のS(i)で構成されてもよい。いくつかの実施形態においては、上記PU(i)の各々は、異なるS(i)で構成されてもよい。上記予め定められたクエリ言語の命令セット群Gにおける上記複数の命令は、スキャン命令と集約命令とを含んでいてもよい。スキャン命令は、AND論理演算とOR論理演算とを含んでいてもよい。
【0015】
別の例示的な局面においては、データクエリを実行するようにファブリックを構成する方法は、ユーザからデータクエリを受信するステップと、上記データクエリを予め定められたクエリ言語コマンドに変換するステップとを含む。また、上記方法は、上記コマンドから、複数の並列処理ユニットPU(i)に格納されるパラメータを抽出するステップと、上記コマンドから命令を抽出して、上記PU(i)によって実行される命令セット群Gを形成するステップとを含む。上記命令セット群Gは、複数の命令セットS(i)を含む。上記方法は、上記複数のPU(i)に上記抽出されたパラメータおよび上記抽出された命令をロードするステップも含む。上記PU(i)の各々は、データストリームの予め定められたデータブロック(i)を、その対応するパラメータおよび命令セットS(i)を用いて並列に処理するように構成される。
【0016】
いくつかの実施形態においては、上記予め定められたクエリ言語は、SQLを含んでいてもよい。いくつかの実施形態においては、上記PU(i)の各々は、同一のS(i)で構成されてもよい。上記方法は、上記抽出されたパラメータおよび上記抽出された命令をロードする前に全ての上記PU(i)をクリアするステップも含んでいてもよい。
【0017】
さまざまな実施形態の詳細が添付の図面および以下の説明に記載されている。他の特徴および利点は、説明および図面ならびに特許請求の範囲から明らかであろう。
【図面の簡単な説明】
【0018】
【
図1】開示されている回路およびプロセスが実現され得る例示的なプログラム可能な集積回路(IC)を示す図である。
【
図2(A)】例示的なハードウェア加速処理エンジンを有するホストコンピューティングシステムを示す図である。
【
図2(B)】例示的なデータクエリを実行する
図2(A)のハードウェア加速処理システムのブロック図である。
【
図3(A)】
図2(B)のハードウェア加速処理エンジンに含まれる例示的な処理ユニットを示す図である。
【
図3(B)】
図2(B)の例示的な処理ユニットを動作させるためのいくつかの例示的な命令を示す図である。
【
図4】データクエリジョブを実行するように構成されたハードウェア加速処理エンジンのための例示的な設計時ファブリック再構成方法のフローチャートである。
【
図5】ハードウェア加速処理エンジンの例示的な構造を示す図である。
【
図6】プログラム可能なハードウェア加速処理エンジンを用いてデータクエリを実行するための例示的な実行時方法のフローチャートである。
【発明を実施するための形態】
【0019】
さまざまな図面における同様の参照記号は、同様の要素を示す。
例示的な実施形態の詳細な説明
理解を助けるために、本文献は以下のように構成されている。第一に、
図1を参照して、開示されているハードウェア加速処理エンジンおよびプロセスが実現され得る例示的なプログラム可能な集積回路(IC)が簡単に紹介されている。第二に、
図2(A)~
図3を参照して、構成されたファブリックの構造およびファブリックを構成する方法を説明する例示的な実施形態について論じられている。次いで、
図4(A)~
図5を参照して、処理ユニットの例示的な構造およびハードウェア加速処理エンジンの例示的な構造が提示されている。最後に、
図6を参照して、実行時にデータクエリを実行するために使用される例示的な方法が提示されている。
【0020】
図1は、開示されている回路およびプロセスが実現され得る例示的なプログラム可能な集積回路(IC)を示す図である。プログラム可能なIC100は、FPGA論理を含む。プログラム可能なIC100は、さまざまなプログラム可能なリソースで実現されてもよく、システムオンチップ(SOC)と称されてもよい。FPGA論理のさまざまな例としては、アレイ状のいくつかのさまざまなタイプのプログラム可能な論理ブロックを挙げることができる。
【0021】
たとえば、
図1は、プログラム可能なIC100を示し、プログラム可能なIC100は、マルチギガビットトランシーバ(multi-gigabit transceiver:MGT)101と、構成可能な論理ブロック(configurable logic block:CLB)102と、ランダムアクセスメモリのブロック(blocks of random access memory:BRAM)103と、入出力ブロック(input/output block:IOB)104と、構成およびクロック論理(configuration and clocking logic:CONFIG/CLOCKS)105と、デジタル信号処理ブロック(digital signal processing block:DSP)106と、専用入出力ブロック(I/O)107(たとえば、クロックポート)と、他のプログラム可能な論理108(たとえば、デジタルクロックマネージャ、アナログ-デジタル変換器、システム監視論理)とを含む多数のさまざまなプログラム可能なタイルを含む。プログラム可能なIC100は、専用のプロセッサブロック(processor block:PROC)110を含む。プログラム可能なIC100は、内部再構成ポートおよび外部再構成ポート(図示せず)を含み得る。
【0022】
さまざまな例においては、シリアライザ/デシリアライザがMGT101を用いて実装され得る。MGT101は、さまざまなデータシリアライザおよびデシリアライザを含み得る。データシリアライザはさまざまなマルチプレクサ実装例を含み得る。データデシリアライザは、さまざまなデマルチプレクサ実装例を含み得る。
【0023】
FPGA論理のいくつかの例においては、各々のプログラム可能なタイルは、各々の隣接するタイルにおける対応する相互接続要素への/からの標準化された相互接続124を有するプログラム可能な相互接続要素(interconnect element:INT)111を含む。したがって、複数のプログラム可能な相互接続要素は、まとめて、図示されるFPGA論理のためのプログラム可能な相互接続構造を実現する。プログラム可能な相互接続要素INT111は、
図1に含まれる例によって示されるように、同じタイル内におけるプログラム可能な論理要素への/からの内部接続120を含む。プログラム可能な相互接続要素INT111は、
図1に含まれる例によって示されるように、同じタイル内にプログラム可能な相互接続要素INT111への/からのINT間接続122を含む。
【0024】
たとえば、CLB102は、ユーザ論理を実装するようにプログラムされ得る構成可能な論理要素(configurable logic element:CLE)112と、単一のプログラム可能な相互接続要素INT111とを含み得る。BRAM103は、BRAM論理要素(BRAM logic element:BRL)113および1つまたは複数のプログラム可能な相互接続要素を含み得る。いくつかの例においては、1枚のタイルに含まれる相互接続要素の数は、当該タイルの高さに依存し得る。図示される実装例においては、BRAMタイルは、5つのCLBと同じ高さを有するが、他の数(たとえば、4つ)が用いられてもよい。DSPタイル106は、DSP論理要素(DSP logic element:DSPL)114および1つまたは複数のプログラム可能な相互接続要素を含み得る。IOB104は、たとえば、入出力論理要素(input/output logic element:IOL)115の2つのインスタンスと、プログラム可能な相互接続要素INT111の1つのインスタンスとを含み得る。たとえば、I/O論理要素115に接続される実際のI/Oボンドパッドは、図示されるさまざまな論理ブロックの上に積層される金属を用いて製造されてもよく、入出力論理要素115の面積に制限されなくてもよい。
【0025】
図示される実装例においては、ダイの中心付近の(
図1に網掛けして示される)列状区域が、構成、クロック、および他の制御論理に用いられる。列から延びる水平区域109は、プログラム可能なIC100の幅にわたってクロックおよび構成信号を分配する。「列状」および「水平」区域と言及する場合、図面を縦向きで見ることを基準としていることに留意されたい。
【0026】
図1に示されるアーキテクチャを利用するいくつかのプログラム可能なICは、プログラム可能なICの大部分を構成する規則的な柱状構造を乱す追加の論理ブロックを含み得る。追加の論理ブロックは、プログラム可能なブロックおよび/または専用論理であってもよい。たとえば、
図1に示すプロセッサブロックPROC110は、CLB102およびBRAM103のいくつかの列にわたっている。
【0027】
図1は、例示的なプログラム可能なICアーキテクチャを示す。列内の論理ブロックの数、列の相対的幅、列の数および順序、列に含まれる論理ブロックの種類、論理ブロックの相対的サイズ、ならびに相互接続/論理実装は純粋に例として提供されているに過ぎない。たとえば、実際のプログラム可能なICにおいては、CLB102のうち2つ以上の隣接する列が、ユーザ論理の効率的な実装を容易にするために、CLB102が現れる場所に含められてもよい。
【0028】
さまざまな分野におけるコンピュータアプリケーションの継続的な拡大に伴って、さまざまなアプリケーションシナリオは、サーバのデータ処理能力にますます要求を突きつけるようになっている。いくつかの特定のシナリオにおいては、サーバがリソースの割り当てのバランスを取ることは非常に難しいであろう。要求される処理速度を実現するためには、より強力な計算能力が必要とされる。データ処理速度が極めて重要であるいくつかの状況においては、中央処理装置(CPU)の作業の一部をハードウェアアクセラレータによって共有して特定のタイプの計算を引き受けるためにFPGAが使用され得る。
【0029】
図2(A)は、例示的なハードウェア加速処理エンジンを有するホストコンピューティングシステムを示す図である。ホストコンピューティングシステム200は、ハードウェア加速処理システム205を含む。ハードウェア加速処理システム205は、複数の相互接続された回路サブシステムを含み、これらの相互接続された回路サブシステムのうちの1つは、フィールドプログラマブルゲートアレイ(FPGA)215に電気的に結合された中央処理装置(CPU)210である。FPGAは、半導体集積回路基板を含み得る。FPGA215は、中央処理装置(CPU)の作業の一部を、特定の複雑なデータベースクエリ命令を処理するように柔軟に再構成可能なハードウェア加速処理エンジンによって共有するために使用されてもよい。FPGA215は、データクエリ応答速度を加速させるための1つまたは複数のハードウェア加速処理エンジン225を提供する。さまざまな実装例においては、計算負荷は、CPU210から、大規模データベースクエリに応答して結果を効率的に生成するためのクエリに特有のハードウェア回路を提供するハードウェア加速処理エンジン225に選択的にオフロードされてもよい。
【0030】
ハードウェア加速処理エンジン225は、データ処理を実行するように並列に設置された一組の処理ユニット(PU)230と、処理された結果を連結するように構成された連結ユニット235とを含む。処理ユニット230の各々は、データストリームに対してたとえば予め定められたフィルタおよび/または集約演算を実行するように独立してプログラムされてもよい。さまざまな例においては、処理ユニットPU230の各々に入力されるデータストリームは、演算および/またはレコードデータを含み得る。これらの演算は、たとえばユーザが所望のクエリをユーザインターフェイスを介してハードウェア加速処理システム205に入力することによって始まってもよい。レコードデータは、ハードウェア加速処理システム205によってデータベースから検索されてもよく、このデータベースは、たとえば、CPU210と(たとえば、通信ネットワークを介して)作動的にデータ通信する第三者または政府のリモートデータベースであってもよい。いくつかの実装例においては、CPU210は、大量のデータレコードをデータベースから検索して、ユーザ入力クエリのパラメータを使用して処理してもよい。いくつかの実施形態においては、それらの演算は、SQL命令を含み得る。
【0031】
いくつかの実装例においては、1つまたは複数の処理エンジン225は、カスタムASICを単独でまたはFPGA215と組み合わせて利用することによって形成されてもよい。このような実装例においては、専用のハードウェア回路を有するカスタムASICは、示されている図面に描写されている例示的な処理エンジン機能のうちの1つまたはそれ以上を実行するように構成されてもよい。たとえば、カスタム固定ハードウェア回路を有するASICは、予め定められた一組のクエリ演算の少なくとも一部を効率的に実行することができるDDRリーダ、バッファ、処理ユニットPU230および/または連結ユニット235のうちの1つまたはそれ以上として機能するように設計されたハードウェア回路として構成されてもよい。ASICは、ハードウェア加速処理システム205によって処理される予め定められた一組のクエリ演算を実行するように構成されたハードウェア回路とともに配置されてもよい。いくつかの例においては、ASICに定義されるカスタム固定ハードウェア構成は、たとえば処理エンジン225においてCPU210および/またはFPGA215などの1つまたは複数のFPGAから計算負荷をオフロードし得るクエリ命令を実行することが可能であってもよい。
【0032】
図2(B)は、例示的なデータクエリを実行する
図2(A)のハードウェア加速処理システムのブロック図である。この示されている例においては、ハードウェア加速処理システム205は、CPU210と、FPGA215と、データベース220と、FPGA215内の電気的に再構成可能なハードウェア回路に含まれるクエリ言語処理ユニット240とを含む。いくつかの実施形態においては、クエリ言語処理ユニット240は、SQL処理ユニットエンジンであってもよい。
【0033】
CPU210は、ユーザからデータクエリ要求を受信して、データクエリコマンド信号をクエリ言語処理ユニット240に送信して、たとえばデータストリームを処理することを含み得るデータベースクエリを実行するようにFPGA215をプログラムしてもよい。いくつかの実施形態においては、データストリームは、i個の異なるデータブロックを含み得る。いくつかの実施形態においては、FPGA215は、たとえばハードウェアリソース、異なる種類のレジスタ、マルチプレクサ、連結ユニットおよび/または加算器を含み得る。
【0034】
クエリ言語処理ユニット240は、データクエリコマンド信号に従ってデータを処理するように適合された予め定められた命令セット群Gを提供する。この命令セット群Gは、1つまたは複数の命令セットS(i)を含む。クエリ言語処理ユニット240がデータクエリコマンド信号を受け付けると、FPGA215は、予め定められた命令セット群Gに従ってデータストリームを並列に処理するための処理ユニットPU(i)を提供するように再構成される。PU(i)は、
図2(A)における処理ユニット230である。いくつかの実施形態においては、各処理ユニットPU(i)は、命令セット群Gにおける予め定められた命令セットS(i)に従ってデータストリームの対応する予め定められたデータブロック(i)を処理するように、対応する一組のハードウェアリソースで構成されてもよい。
【0035】
この例示的な例においては、FPGA215は、(たとえば、1つまたは複数のデータバッファを介して)データベースからデータストリームを受信する。データストリームをデータベースから検索した後、データストリームのデータブロック(i)は、入力データスケジューラによってi個の異なる処理ユニットPU(i)に割り当てられてもよい。次いで、それらのi個の異なるデータブロックは、i個の並列処理ユニットPU(i)、たとえばPU(1),PU(2),PU(3),PU(4),......PU(i)によって処理されてもよい。各PU(i)は、それ自体の(たとえば、独立した)命令セットS(i)に従ってそのデータブロック(i)を処理する。いくつかの実施形態においては、全てのPU(i)は、同一の命令セットS(i)を有するように構成されてもよい。いくつかの実施形態においては、いくつかのPU(i)は、同一の命令セットS(i)を有していてもよい。いくつかの実施形態においては、各PU(i)は、異なる命令セットS(i)を有していてもよい。
【0036】
各処理ユニット230は、たとえば予め定められたフィルタおよび集約演算を実行するように独立してプログラムされてもよい。いくつかの実施形態においては、それらの演算は、たとえばSQL命令などの予め規定された一組のクエリ命令を含み得る。次いで、ハードウェア加速処理エンジン225は、最終的なクエリ結果をCPU210に転送してもよい。
【0037】
いくつかの実施形態においては、ハードウェア加速処理エンジン225および/またはクエリ言語処理ユニット240は、一部が、命令のプログラムを実行するCPU210によって実現されてもよく、これらの命令は、実行されると、演算を実行させて、全面的にハードウェア加速回路の演算を介するのではなく、少なくとも一部がソフトウェア駆動演算を介して、ハードウェア加速クエリ処理結果を生成する。いくつかの実施形態においては、ハードウェア加速処理エンジン225および/またはクエリ言語処理ユニット240は、全部または一部が、ASICの固定回路に組み込まれてもよい。いくつかの実装例においては、PU(i)は、たとえばASICに組み込まれた固定ハードウェア回路とFPGAに組み込まれた再プログラム可能なハードウェア回路との直列および/または並列組み合わせによって実現されてもよい。
【0038】
図3(A)は、
図2(B)のハードウェア加速処理エンジンに含まれる例示的な処理ユニットを示す図である。示されている
図3(A)においては、処理ユニット230(
図2の処理ユニット230の一実施形態であってもよい)は、命令レジスタ305と、変数レジスタ310と、演算論理装置(ALU)325とを含む。命令レジスタ305は、現在実行またはデコードされている演算および/または論理命令を格納するのに使用される。変数レジスタ310は、処理ユニット230に割り当てられるデータを受け付ける。演算論理装置(ALU)325は、コンピュータ命令語の中のオペランドに対して算術および論理演算を実行するのに使用される。命令データのタイプは、SQLタイプのうちのいずれかであり得る。たとえば、命令データは、小数、整数、データ、ブーリアンであってもよい。この示されている例においては、命令データは、整数およびブーリアンを含む。処理ユニット230に追加されるSQLタイプおよび命令は、処理ユニット230をたとえばSQL処理ユニットとして動作させてもよい。
【0039】
いくつかの実施形態においては、定数データを格納するのに定数レジスタ315が使用されてもよい。動作時、たとえば命令の結果(たとえば、定数データ(よりも大きな)変数データ)を評価するために、実行時にデータストリームを処理する前に、ユーザ供給のクエリ基準を表す定数データが入力されてもよい。いくつかの実施形態においては、中間結果を保持するのに一時レジスタ320が使用されてもよい。いくつかの実施形態においては、ALU325によって処理される必要があるデータを選択するのにマルチプレクサ330,335が使用されてもよい。いくつかの実施形態においては、変数レジスタ310は、データストリームのデータブロック(i)をロードされてもよい。ALU325は、命令レジスタ305に格納されたプログラムされた命令を実行することによって、ロードされたデータブロック(i)に対して演算を実行してもよい。
【0040】
いくつかの実施形態においては、マルチプレクサ330は、2:1マルチプレクサであってもよく、マルチプレクサ335は、3:1マルチプレクサであってもよい。いくつかの実施形態においては、マルチプレクサ330は、定数レジスタ315および変数レジスタ310から入力を受信してもよく、マルチプレクサ335は、定数レジスタ315、変数レジスタ310および一時レジスタ320から入力を受信してもよい。いくつかの実施形態においては、命令レジスタ305および定数レジスタ315は、所望の機能を実現するように(たとえば、クエリのランタイム実行の前に実行される、PU(i)としての個々のハードウェア回路の設計時構成に)独立して予めプログラムされてもよい。
【0041】
図3(B)は、
図2(B)の例示的な処理ユニットを動作させるためのいくつかの例示的な命令を示す図である。命令データのタイプは、SQLタイプのうちのいずれかであり得る。たとえば、命令データは、小数、整数、データ、ブーリアンであってもよい。この示されている例においては、命令データは、整数およびブーリアンを含む。処理ユニット230に追加されるSQLタイプおよび命令は、処理ユニット230をたとえばSQL処理ユニットとして動作させてもよい。いくつかの実施形態においては、セットの中の命令は、SQLフィルタおよび集約演算を行うように順番に実行されてもよい。いくつかの実施形態においては、命令は、フィルタ演算と、加算または減算演算と、乗算演算とを含み得る。いくつかの実施形態においては、フィルタ演算は、AND、OR、NOT、EQ、NEQを含み得る。いくつかの実施形態においては、それらの命令は、予めプログラム可能であって、再構成可能である。いくつかの実施形態においては、処理ユニット230の各々は、予めプログラム可能な異なる命令を実行してもよい。
【0042】
図4は、データクエリジョブを実行するように構成されたハードウェア加速処理エンジンのための例示的な設計時ファブリック再構成方法のフローチャートを示す。この例示的な例においては、プログラム可能な論理回路のブロックで利用可能なハードウェアリソースを実行してハードウェア加速処理エンジン(たとえば、
図2(A)におけるハードウェア加速処理エンジン225)を形成するためのコマンド信号が生成される。例示的な方法400においては、405において、CPU(たとえば、CPU210)は、CPU210を介してユーザからデータクエリコマンド信号を受信する。
図2Aを参照して、CPU210がデータクエリコマンド信号を受信すると、データクエリ応答速度を上げるために、クエリジョブの一部がハードウェア加速処理エンジン225にオフロードまたは割り当てられてもよい。410において、CPU210は、データストリームを処理するためのジョブがFPGA215にオフロードまたは割り当てられ得るかを判断する。ジョブがハードウェア加速処理エンジン225にオフロードされるのに適していない場合、プロセスの制御は、CPU210に移って、415において、ハードウェア加速処理エンジン225を使用することなくデータクエリを実行するための命令を実行してもよい。
【0043】
410においてジョブがハードウェア加速処理エンジン225にオフロードされるのに適している場合、420において、CPU210は、データクエリコマンド信号を、たとえばSQLコマンドなどの予め定められたクエリ言語コマンドに変換する。425において、このSQLコマンドを使用して、CPU210は、パラメータおよび命令を抽出する。示されている例においては、430において、CPU210は、FPGA215のプログラム可能な論理に前もってプログラムされたいかなる既存の構成パラメータまたは命令もクリアすることによって、全ての利用可能なPUをクリアする。
【0044】
ユーザからのデータクエリコマンド信号をオフロードするようにFPGA215を構成する準備をするために、435において、CPU210は、変数i=1を起動する。440において、CPUは、処理ユニットPU(i)に対応する複数組の抽出されたパラメータおよび命令をロードする。445において、いずれの追加の複数組の抽出されたパラメータおよび命令も処理するのにより多くのPU(i)が利用可能である場合、450において、CPUは、変数iをインクリメントして、440にループバックする。445において、いずれの追加の複数組の抽出されたパラメータおよび命令も処理するのにより多くのPU(i)が利用可能でない場合、方法400は終了する。
【0045】
例示的な例においては、FPGA215は、ジョブをCPUからオフロードするか否かを選択するように構成されてもよい。たとえば、FPGAオフロードスイッチを使用して、オフロードを受け付けたり拒否したりしてもよい。ジョブを受け付けるか拒否するかは、ジョブのタイプによって左右され得る。この示されている例においては、FPGA215は、ジョブがデータスキャンおよび集約に関連している場合にジョブを受け付けるように構成されてもよい。FPGAがオフロードを拒否する場合、CPU210は、クエリを処理してもよい。データクエリコマンド信号に応答して、クエリ言語処理ユニット240は、命令セット群Gを生成するように構成されてもよい。この命令セット群Gは、1つまたは複数の命令セットS(i)を含み得る。並列処理ユニット(たとえば、
図2BのPU(i))の各々は、予め定められた命令セットS(i)を実行するようにプログラムされてもよい。より具体的には、クエリ言語処理ユニット240は、クエリをSQLコマンドに移し、SQLコマンドからパラメータを抽出し、FPGA215内の各々の対応する処理ユニットによって実行される命令セットを生成するように構成されてもよい。いくつかの実施形態においては、各処理ユニットは、同一の命令セットを有していてもよい。いくつかの実施形態においては、各処理ユニットは、異なる命令セットを実行してもよい。
【0046】
次に、命令セット群Gおよび抽出されたパラメータをFPGA内の並列処理ユニットにロードして、データストリームを処理してもよい。たとえば、PU(1)は、第1の命令セットS(1)によってロードされてもよく、PU(2)およびPU(3)は、第2の命令セットS(2)によってロードされてもよい。より具体的には、各PU(i)について、定数レジスタ(たとえば、
図3(A)における定数レジスタ315)は、1つまたは複数の定数をロードされてもよい。命令レジスタ(たとえば、
図3(A)における命令レジスタ305)は、予め定められた命令セットS(i)をロードされてもよい。新たなパラメータを処理ユニットの各々にロードする前に、処理ユニットの各々はクリアされてもよい。たとえば、定数レジスタおよび命令レジスタがクリアされてもよい。いくつかの実施形態においては、変数レジスタ(たとえば、変数レジスタ310)および一時レジスタ(たとえば、一時レジスタ320)もクリアされてもよい。
【0047】
その結果、ハードウェア加速処理エンジンは、データストリームを処理する準備ができているであろう。
【0048】
設計時プロセスを説明するために、例示的な例についてさらに説明する。たとえば、ユーザは、1994年に発生したオンライン小売業者の累積収益を知りたいと思ったとする。商品割引率は5%~7%であり、商品量は24個未満であった。次いで、ユーザは、クエリをCPU210に送信する。このクエリは、データスキャンおよび集約に関連している。したがって、FPGA215は、このクエリを処理することができる能力を有している。次いで、CPU210は、クエリジョブをFPGAにオフロードする。クエリ言語処理ユニット240は、クエリを受け付けて、クエリをSQLコマンドに移してもよい。
【0049】
例示的なクエリは、以下のようなものであってもよい。
【0050】
【0051】
次いで、このクエリは、ソフトウェアを使用してSQLコマンドに変換されてもよい。ソフトウェアは、SQLコマンドからパラメータおよび命令を抽出してもよい。処理ユニットの前の例示的なSQLコマンドは、以下のようなものであってもよい。
【0052】
【0053】
図4に示されるように、次いで、抽出されたパラメータおよび命令セットSはそれぞれ、FPGA215内の利用可能な処理ユニットにロードされて、クエリ演算を実行してもよい。データが実行時にストリーミングされると、それらのプログラムされた処理ユニットは、クエリ演算の実行を開始してもよく、その一例について
図6を参照してさらに詳細に説明する。
【0054】
図5は、ハードウェア加速処理エンジンの例示的な構造を示す図である。
図2(A~B)を参照して、
図5は、PU(i)230への入力を調整するための入力データスケジューラ505と、PU(i)230の出力を処理するための連結ユニット235とを含むハードウェア加速処理エンジン225の実施形態を示している。
【0055】
入力データスケジューラ505は、入来するデータストリームをいくつかの予め定められたデータブロックに分割するように構成されてもよい。次いで、これらのデータブロックは、そのデータブロックに適切な予め定められた命令セットS(i)を実行するように適切に構成されたPU(i)230に割り当てられることができる。いくつかの実施形態においては、PU(i)のうちの少なくとも2つまたはそれ以上がデータブロック上で並列に動作する。示されている例においては、データストリームは、たとえば、データストリームソース(たとえば、データベース)と作動的に通信する高速データ通信チャネル(たとえば、PCle、DMA)を介してハードウェア加速処理エンジン225に送られてもよい。入力データスケジューラ505によって処理されたストリーミングデータのブロックの各々は、PU(i)230に送られる前にBRAMのブロックを介してバッファリングされてもよい。
【0056】
連結ユニット235は、PU(i)230の各々によって処理された結果を併合するように構成されてもよい。いくつかの実施形態においては、連結ユニット235は、ハードウェアユニットであってもよい。いくつかの実施形態においては、各処理ユニット230は、予め定められたデータフィルタおよび集約命令を実行するように構成されてもよい。
【0057】
ハードウェア加速処理エンジン225は、このハードウェア加速処理エンジンにおけるジョブをスケジューリングするためのスケジューラ505も含む。スケジューラ505は、データストリームにおけるデータブロックを対応する処理ユニットに割り当てる。いくつかの実施形態においては、スケジューラ505は、ラウンドロビンスケジューラであってもよい。いくつかの実施形態においては、各処理ユニット230は、異なる読み書きデータ幅を有するそれ自体のHTTPライブストリーミング(HLS)ストリームに送り込まれてもよい。いくつかの実施形態においては、読み書きバッファのブロックRAMの使用を最小限に抑えるために、ストライプ読み取りバッファが使用されてもよい。いくつかの実施形態においては、使用される光学PUリソースおよび処理サイクル数で効率を最大化するために、広いDDR(ダブルデータレート)幅が使用されてもよい。いくつかの実施形態においては、DDRバースト長は、DDR非効率を減少させるのに十分に長いであろう。
【0058】
図6は、プログラム可能なハードウェア加速処理エンジンを用いてデータクエリを実行するための例示的な実行時方法のフローチャートを示す。方法600においては、605において、プログラム可能なハードウェア加速処理エンジン(たとえば、
図5におけるハードウェア加速処理エンジン225)は、データベースからデータストリームを検索する。610において、スケジューラ(たとえば、
図5におけるスケジューラ505)は、プログラムされた命令に応答して、データストリームを、プログラム可能なハードウェア加速処理エンジン内のさまざまな独立したプログラム可能な処理ユニット(たとえば、
図5における処理ユニット230)によって処理されるさまざまなデータブロックにスケジューリングして分割する。次いで、615において、処理エンジン内の各々の独立したプログラム可能な処理ユニットは、予め定められたデータフィルタおよび集約演算を実行して、処理結果を生成する。いくつかの実施形態においては、SQLクエリを使用してデータフィルタおよび集約演算を実行してもよい。620において、それらの処理結果は、連結ユニット(たとえば、
図5における連結ユニット235)によって連結されて、出力結果を形成する。625において、データクエリプロセスを終了させるか否かを判断する。データストリームが、処理すべきより多くのレコードを有している場合、方法600は605に戻る。データストリームが、処理すべきより多くのレコードを有していない場合、方法は、クエリの結果を確定して、完了する。いくつかの実施形態においては、次いで、このクエリ結果出力は、たとえばユーザインターフェイス上に表示されてもよい。
【0059】
例示的な例においては、クエリアルゴリズムは、以下のようなものであってもよい。
【0060】
【0061】
設計時プロセスを説明するために、例示的な例についてさらに説明する。たとえば、FPGA215は、クエリ演算を実行するのに利用可能な5つの処理ユニットを含み得る。抽出されたパラメータおよび命令は、クエリ演算を実行するために既にFPGA215にロードされていてもよい。次いで、FPGAは、オンライン小売業者の売上記録に関連するデータストリームをデータベースから検索してもよい。この売上記録は、200ページのデータを含み得る。FPGAは、記録データのうちの20ページをデータベースから検索してもよい。スケジューラ505は、1ページ目の検索されたデータを第1の処理ユニットに割り当て、2ページ目のデータを第2の処理ユニットに割り当てる、などしてもよい。割り当てられた結果の一例は、以下の表に示されている。
【0062】
【0063】
次いで、処理ユニットの各々は、データが変数レジスタにロードされるときにその命令を実行してもよい。一時的な結果は、一時レジスタ320に格納されてもよい。1ページ目、6ページ目、11ページ目、16ページ目が全て処理ユニットPU1によって照会された後、PU1は、それらの命令の下で、1ページ目、6ページ目、11ページ目、16ページ目の第1の累積収益合計1を出力してもよい。PU2は、第2の累積収益合計2を出力する、などである。出力連結ユニット235は、最終的な計算を実行して、最終結果をユーザに返す。
【0064】
さまざまな実施形態について図面を参照して説明してきたが、他の実施形態も可能である。たとえば、いくつかの実施形態においては、SQLクエリは、命令に変換されて、ロードされて、FPGA上で実行されてもよい。いくつかの実施形態においては、FPGA上で再コンパイルすることなく異なるSQLクエリが実行されてもよい。いくつかの実施形態においては、これらの実行されたSQLクエリは、OLAP(オンライン分析処理)に好適であり得る。いくつかの実施形態においては、PostgreSQLおよびそのさまざまな拡張機能がデータ分析およびGISアプリケーションに使用されてもよい。
【0065】
いくつかの実施形態においては、ユーザは、加速されたFPGAプラットフォーム上で既存のPostgresSQLクエリを実行することができる。いくつかの実施形態においては、ハードウェア加速処理エンジンは、超並列SQL処理ユニットであってもよく、超並列SQL処理ユニットのための命令コードは、各々の連続したユーザクエリについて、実行中に生成されてもよい。いくつかの実施形態においては、Postgresストレージページは、関係の行をスキャンして、where句によって指定された行を選択するように、FPGAにおいてネイティブにパースされてもよく、ユーザは、全ての既存のPostgres特徴を使用してリモートまたはローカルクエリを実行してもよい。
【0066】
いくつかの実施形態においては、ユーザは、たとえばF1実装例のためにVU9Pデバイス上で32 SQL PUを使用してもよい。いくつかの実施形態においては、PUの各々は、ハッシュ、ソート、または顧客に特有の命令に拡張可能である。いくつかの実施形態においては、処理中のデータは、入出力データを保持してFPGA加速カーネルが窮乏しないことを確実にするために、複数のバッファを使用してFPGAからブロックストリーミングされてもよい。
【0067】
実施形態のいくつかの局面は、コンピュータシステムとして実現されてもよい。たとえば、さまざまな実装例は、デジタルおよび/またはアナログ回路、コンピュータハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせを含み得る。装置要素は、プログラム可能なプロセッサによる実行のために、情報担体、たとえば機械読取可能な記憶装置において有形に具体化されるコンピュータプログラム製品に実装されることができ、方法は、入力データ上で動作して出力を生成することによってさまざまな実施形態の機能を実行するように命令のプログラムを実行するプログラム可能なプロセッサによって実行されることができる。有利なことに、いくつかの実施形態は、データストレージシステム、少なくとも1つの入力装置および/または少なくとも1つの出力装置との間でデータおよび命令を送受信するように結合された少なくとも1つのプログラム可能なプロセッサを含むプログラム可能なシステム上で実行可能な1つまたは複数のコンピュータプログラムで実現されてもよい。コンピュータプログラムは、特定のアクティビティを実行するためまたは特定の結果を生じさせるために直接的または間接的にコンピュータで使用することができる一組の命令である。コンピュータプログラムは、コンパイルまたはインタープリタ言語を含む任意の形式のプログラミング言語で書き込むことができ、コンピュータプログラムは、スタンドアロンのプログラムとして、またはコンピューティング環境での使用に適したモジュール、コンポーネント、サブルーチンもしくは他のユニットとして、などの任意の形式で展開することができる。
【0068】
命令のプログラムの実行に適したプロセッサは、限定としてではなく一例として、汎用マイクロプロセッサおよび特別目的マイクロプロセッサの両方のマイクロプロセッサを含み、これらのマイクロプロセッサは、任意の種類のコンピュータの単一のプロセッサまたは複数のプロセッサのうちの1つを含み得る。一般に、プロセッサは、リードオンリメモリまたはランダムアクセスメモリまたはそれら両方から命令およびデータを受信する。コンピュータの必須の要素は、命令を実行するためのプロセッサ、および、命令およびデータを格納するための1つまたは複数のメモリである。コンピュータプログラム命令およびデータを有形に具体化するのに適した記憶装置は、全ての形態の不揮発性メモリを含み、これらの不揮発性メモリは、一例として、EPROM、EEPROMおよびフラッシュメモリデバイスなどの半導体メモリデバイスを含む。プロセッサおよびメモリは、ASIC(特定用途向け集積回路)によって補完されるか、またはASICに組み入れられることができる。いくつかの実施形態においては、プロセッサおよびメモリは、たとえばFPGAなどのプログラム可能なハードウェアデバイスによって補完されるか、またはプログラム可能なハードウェアデバイスに組み入れられることができる。
【0069】
いくつかの実装例においては、各システムは、同一または同様の情報でプログラムされてもよく、および/または、揮発性および/または不揮発性メモリに格納された実質的に同一の情報で初期化されてもよい。たとえば、1つのデータインターフェイスは、デスクトップコンピュータまたはサーバなどの適切なホストデバイスに結合されたときに、自動構成機能、自動ダウンロード機能および/または自動更新機能を実行するように構成されてもよい。
【0070】
さまざまな実施形態においては、コンピュータシステムは、非一時的なメモリを含み得る。このメモリは、プロセッサによって実行可能なプログラム命令を含むデータおよびコンピュータ読取可能な命令を格納するように構成され得る1つまたは複数のプロセッサに接続されてもよい。これらのデータおよびコンピュータ読取可能な命令は、1つまたは複数のプロセッサがアクセス可能であってもよい。プロセッサによって実行可能なプログラム命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサにさまざまな動作を実行させてもよい。
【0071】
さまざまな実施形態においては、コンピュータシステムは、モノのインターネット(IoT)デバイスを含み得る。IoTデバイスは、電子機器、ソフトウェア、センサ、アクチュエータおよびネットワーク接続に組み込まれたオブジェクトを含み得て、これらのオブジェクトがデータを収集してやりとりすることを可能にする。IoTデバイスは、インターフェイスを介して別のデバイスにデータを送信することによって、有線または無線デバイスと併用されてもよい。IoTデバイスは、有用なデータを収集して、次いでそのデータを他のデバイス間に自律的に流してもよい。
【0072】
モジュールのさまざまな例は、さまざまな電子ハードウェアを含む回路を使用して実現されてもよい。限定としてではなく一例として、ハードウェアは、トランジスタ、抵抗器、キャパシタ、スイッチ、集積回路および/または他のモジュールを含み得る。さまざまな例においては、モジュールは、さまざまな集積回路を含むシリコン基板上に作製されたアナログおよび/またはデジタル論理、個別部品、トレースおよび/またはメモリ回路を含み得る。いくつかの実施形態においては、モジュールは、プロセッサによって実行される予めプログラムされた命令および/またはソフトウェアの実行を含み得る。たとえば、さまざまなモジュールは、ハードウェアもソフトウェアも含み得る。
【0073】
一例においては、集積回路は、並列に配置された複数の処理ユニット(PU(i))を含み、上記複数のPU(i)の各々は、予め定められたクエリ言語を使用する命令セット群(G)における予め定められた命令セット(S(i))に従ってデータストリームの選択されたデータブロックを処理するように構成されたハードウェア回路で形成され、上記複数のPU(i)の各々は、上記PU(i)によって処理される上記データストリームの上記選択された部分に対応する中間出力結果を生成し、上記集積回路はさらに、上記複数のPU(i)の各々から上記中間出力結果の各々を受信して、集約結果を生成するように結合された連結回路を含み、上記S(i)の各々は、ユーザ定義のクエリから抽出された命令の関数を備える。
【0074】
一例においては、上記予め定められた命令セット(S(i))は、SQL命令を備える。一例においては、上記予め定められたクエリ言語は、SQLを備える。一例においては、上記連結ユニットは、上記ユーザ定義のクエリに関連付けられた予め定められた関数に従って上記集約結果を生成するように構成される。一例においては、上記複数の処理ユニットの各々は、ASICにおける固定ハードウェア回路として実現される。一例においては、上記複数の処理ユニットの各々は、FPGAのプログラム可能なファブリックにおける再構成可能なハードウェアとして実現される。一例においては、上記集積回路は、上記データストリームを受信するように結合されたスケジューラ回路を含み、上記スケジューラ回路は、上記データブロックの各々を上記複数のPU(i)のうちの1つに選択的に向けるように構成される。一例においては、上記スケジューラ回路は、ラウンドロビンスケジューラを備える。一例においては、上記S(i)の各々は、上記ユーザ定義のクエリから抽出された少なくとも1つのパラメータの関数をさらに備える。
【0075】
一例においては、上記複数のPU(i)の各々は、抽出された命令に基づいて演算を実行することによって上記対応するS(i)を実行するように適合された演算論理装置ALUを備え、上記演算は、(i)変数レジスタに格納された上記データストリームの一部を備える第1のオペランドと、(ii)定数レジスタに格納された上記抽出されたパラメータのうちの1つを備える第2のオペランドとを使用して実行される。一例においては、上記複数の処理ユニットの各々は、上記実行された演算の結果を保持するように構成された一時レジスタと、上記定数レジスタおよび上記変数レジスタから入力を受信するように構成された第1のマルチプレクサと、上記定数レジスタ、上記変数レジスタおよび上記一時レジスタから入力を受信するように構成された第2のマルチプレクサとをさらに備える。
【0076】
一例においては、データクエリを実行するようにファブリックを構成する方法は、ユーザからデータクエリを受信するステップと、上記データクエリを予め定められたクエリ言語コマンドに変換するステップと、上記コマンドから、複数の並列処理ユニットPU(i)に格納されるパラメータを抽出するステップと、上記コマンドから命令を抽出して、上記PU(i)によって実行される命令セット群Gを形成するステップとを含み、上記命令セット群Gは、複数の命令セットS(i)を備え、上記方法はさらに、上記複数のPU(i)に上記抽出されたパラメータおよび上記抽出された命令をロードするステップを含み、上記PU(i)の各々は、データストリームの予め定められたデータブロック(i)を、その対応するパラメータおよび命令セットS(i)を用いて並列に処理するように構成される。
【0077】
一例においては、上記予め定められたクエリ言語は、SQLを備える。一例においては、上記PU(i)の各々は、同一のS(i)で構成される。一例においては、上記方法は、上記抽出されたパラメータおよび上記抽出された命令をロードする前に全ての上記PU(i)をクリアするステップをさらに含む。
【0078】
多数の実装例について説明してきた。しかし、さまざまな変更がなされてもよいということが理解されるであろう。たとえば、開示されている技術のステップが異なるシーケンスで実行される場合、または、開示されているシステムの構成要素が異なる態様で組み合わせられる場合、または、それらの構成要素が他の構成要素で補完される場合に、有利な結果が実現され得る。したがって、他の実装例は、以下の特許請求の範囲の範囲内である。