(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-15
(45)【発行日】2023-12-25
(54)【発明の名称】バイトニックソートアクセラレータ
(51)【国際特許分類】
G06F 7/24 20060101AFI20231218BHJP
G06F 9/38 20180101ALI20231218BHJP
【FI】
G06F7/24 E
G06F9/38 370C
G06F7/24 D
(21)【出願番号】P 2021500789
(86)(22)【出願日】2019-07-11
(86)【国際出願番号】 US2019041315
(87)【国際公開番号】W WO2020014424
(87)【国際公開日】2020-01-16
【審査請求日】2022-07-11
(32)【優先日】2018-12-31
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】201841026064
(32)【優先日】2018-07-12
(33)【優先権主張国・地域又は機関】IN
(73)【特許権者】
【識別番号】507107291
【氏名又は名称】テキサス インスツルメンツ インコーポレイテッド
(74)【代理人】
【識別番号】230129078
【氏名又は名称】佐藤 仁
(72)【発明者】
【氏名】インドゥ プラサパン
(72)【発明者】
【氏名】プネート サバーワル
(72)【発明者】
【氏名】パンカイ グプタ
【審査官】佐賀野 秀一
(56)【参考文献】
【文献】国際公開第2017/090122(WO,A1)
【文献】特開平08-171537(JP,A)
【文献】特開平06-214752(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 7/00- 7/36
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
ハードウェアアクセラレータであって、
第1の入力端子と第2の入力端子と制御端子と第1の出力端子と第2の出力端子とを含む第1の比較交換回路であって、
前記第1の入力端子において第1のデータ値を受信し、
前記第2の入力端子において第2のデータ値を受信し、
前記制御端子において制御信号を受信し、
前記制御信号が第1の値を有すると判定することに応答して、前記第2の出力端子において前記第1のデータ値を出力し、前記第1の出力端子において前記第2のデータ値を出力し、
前記制御信号が第2の値を有すると判定することに応答して、前記第1の出力端子において前記第1のデータ値と前記第2のデータ値との大きいものを出力し、前記第2の出力端子において前記第1のデータ値と前記第2のデータ値との小さいものを出力し、
前記制御信号が第3の値を有すると判定することに応答して、前記第1の出力端子において前記第1のデータ値と前記第2のデータ値との小さいものを出力し、前記第2の出力端子において前記第1のデータ値と前記第2のデータ値との大きいものを出力する、
ように構成される、前記第1の比較
交換回路と、
前記第1の比較交換回路の第1の出力端子に結合される入力端子と前記第1の比較
交換回路の第1の入力端子に結合される出力端子とを含む先入れ先出し(FIFO)バッファと、
を含む、ハードウェアアクセラレータ。
【請求項2】
請求項1に記載のハードウェアアクセラレータであって、
前記第1の比較交換回路の第2の入力端子に結合される第2の比較
交換回路と、
前記第1の比較交換回路の第2の出力端子に結合される第3の比較
交換回路と、
を更に含む、ハードウェアアクセラレータ。
【請求項3】
請求項1に記載のハードウェアアクセラレータであって、
第1の入力端子と第2の入力端子と制御端子と第1の出力端子と第2の出力端子とを含
む第2の比較交換回路
と、
メモリと、
前記
第2の比較交換回路の第2の出力
端子に結合される第1の入力端子と、前記メモリに結合される
第2の入力
端子と、前記第1の比較交換回路の第
1の入力
端子に結合される出力
端子とを含むマルチプレクサ(mux)
と、
を
更に含む、ハードウェアアクセラレータ。
【請求項7】
請求項
6に記載のハードウェアアクセラレータであって、
制御信号を含む制御信号バッファを更に含み、
前記制御信号が、前記
第1及び第2の比較交換回路に提供されると、前記
第1及び第2
の比較交換回路に、第1の反復又は一連の反復の間
に前記N要素ベクトルをバイトニックシーケンスに配置させ、最終反復の間
に前記N要素ベクトルを完全にソートされたアレイに配置させる、ハードウェアアクセラレータ。
【請求項8】
請求項1に記載のハードウェアアクセラレータであって、
前記第2の入力端子に結合されるメモリと、
前記第2の出力端子に結合される第2の比較交換回路と、
を更に含む、ハードウェアアクサラレータ。
【請求項9】
請求項1に記載のハードウェアアクセラレータであって、
前記第2の入力端子に結合される第2の比較交換回路と、
前記第2の出力端子に結合されるメモリと、
を更に含む、ハードウェアアクセラレータ。
【請求項10】
ハードウェアアクセラレータであって、
4つのマルチプレクサ(mux)であって、各々が、出力端子と、メモリに結合されるように適合される第1の入力端子と、第2の入力端子とを含む、前記4つのマルチプレクサ(mux)と、
4つの入力端子と4つの出力端子とを含む比較交換回路と、
第1のソーティングアクセラレータと第2のソーティングアクセラレータと第3のソーティングアクセラレータと第4のソーティングアクセラレータとを含む4つのソーティングアクセラレータであって、前記4つのソーティングアクセラレータの各々が入力端子と出力端子とを含む、前記4つのソーティングアクセラレータと、
を含み、
各muxの出力端子が前記比較
交換回路の入力端子の1つに結合され、
前記比較交換回路の各出力端子が前記4つのソーティングアクセラレータの入力端子の1つに結合され、
各ソーティングアクセラレータの出力端子が前記4つのmuxの1つの第2の入力端子に結合される、ハードウェアアクセラレータ。
【請求項11】
請求項
10に記載のハードウェアアクセラレータであって、
前記比較交換回路が、
各々が第1及び第2の入力
端子と第1及び第2の出力
端子とを含む第1及び第2の2入力比較交換回路であって、前記第1の2入力比較交換回路の第1の入力
端子が前記
4つの
muxの第1のmuxの出力
端子に結合され、前記第1の2入力比較交換回路の第2の入力
端子が前記
4つのmuxの第2のmuxの出力
端子に結合され、前記第2の2入力比較交換回路の第1の入力
端子が前記
4つのmuxの第3のmuxの出力
端子に結合され、前記第2の2入力比較交換回路の第2の入力
端子が前記
4つのmuxの第4のmuxの出力
端子に結合される、前記第1及び第2の2入力比較交換回路と、
各々が第1及び第2の入力
端子と第1及び第2の出力
端子とを含む第3及び第4の2入力比較交換回路であって、前記第3の2入力比較交換回路の第1の入力
端子が前記第1の2入力比較交換回路の第1の出力
端子に結合され、前記第3の2入力比較交換回路の第2の入力
端子が前記第2の2入力比較交換回路の第1の出力
端子に結合され、前記第4の2入力比較交換回路の第1の入力
端子が前記第1の2入力比較交換回路の第2の出力
端子に結合され、前記第4の2入力比較交換回路の第2の入力
端子が前記第2の2入力比較交換回路の第2の出力
端子に結合され、前記第3の2入力比較交換回路の第1の出力
端子が前記第1のソー
ティングアクセラレータの入力
端子に結合され、前記第3の2入力比較交換回路の第2の出力
端子が前記第2のソー
ティングアクセラレータの入力
端子に結合され、前記第4の2入力比較交換回路の第1の出力
端子が前記第3のソー
ティングアクセラレータの入力
端子に結合され、前記第4の2入力比較交換回路の第2の出力
端子が前記第4のソー
ティングアクセラレータの入力
端子に結合される、
前記第3及び第4の2入力比較交
換回路と、
を更に含む、ハードウェアアクセラレータ。
【請求項13】
請求項
10に記載のハードウェアアクセラレータであって、
各ソー
ティングアクセラレータが、
複数の2入力比較交換回路と、
前記
複数の2入力比較交換回路の各々に関連する先入れ先出し(FIFO)バッファ
で
あって、各FIFOバッファの出力がFIFOデータ値であ
る、前記FIFOバッファと、
前記
複数の2入力比較交換回路が、
第1の動作モードにおいて、前の2入力比較交換回路又は前記比較交換回路からの前のデータ値を関連するFIFOバッファに記憶し、関連するFIFOバッファからのFIFOデータ値を後続の2入力比較交換回路、前記
4つのmuxの1つ、又は前記メモリに渡
し、
第2の動作モードにおいて、前記前のデータ値を前記FIFOデータ値と比較し、前記データ値の大きい
ものを関連するFIFOバッファに記憶し、前記データ値の小さい
ものを前記後続の2入力比較交換回路、前記
4つのmuxの1つ、又は前記メモリに渡
し、
第3の動作モードにおいて、前記前のデータ値を前記FIFOデータ値と比較し、
前記
データ値の小さい
ものをその関連するFIFOバッファに記憶し、
前記データ値の大きい
ものを前記後続の2入力比較交換回路、前記
4つのmuxの1つ、又は前記メモリに渡す
、
ように構成される、ハードウェアアクセラレータ。
【請求項18】
請求項
16に記載のハードウェアアクセラレータであって、
制御信号を含む制御信号バッファを更に含み、
前記制御信号が、
前記比較交換回路と前記
4つのソー
ティングアクセラレータの前記
複
数の2入力比較交換回路
とに提供されると、前記ハードウェアアクセラレータに、第1の反復又は一連の反復の間
に前記N/4要素ベクトルをバイトニックシーケンスに配置させ、最終反復の間
に前記N/4要素ベクトルを完全にソートされたアレイに配置させる、ハードウェアアクセラレータ。
【請求項19】
方法であって、
比較交換回路によって制御信号を
制御端子で受信すること
と、
前記比較交換回路によって
第1のデータ値を
第1の入力端子で受信すること
と、
前記比較交換回路によって
第2のデータ値を
第2の入力端子で受信すること
と、
前記
制御信号が第1の値を有すると判定すること
に応答して、前記比較交換回路によって前記
第1のデータ値を
第1の出力端子に出力し、前記比較交換回路によって前記第2の
データ値を第2の出力端子に出力すること
と、
前記制御信号が第2の値を有すると判定することに応答して、前記比較交換回路によっ
て前記第1のデータ値と前記第2のデータ値との大きいものを前記第1の出力端子に出力
し、前記比較交換回路によって前記第1のデータ値と前記
第2のデータ値
との小さい
ものを前記
第2の出力端子に出力すること
と、
前記制御信号が第3の値を有すると判定することに応答して、前記比較交換回路によっ
て前記第1のデータ値と前記
第2のデータ値
との
小さい
ものを
前記第1の出力端子に出力
し、前記後続の比較交換回路
によって前記第1のデータ値と前記第2のデータ値との大き
いものを前記第2の出力端子に出力す
ること
と、
を含む、方法。
【請求項20】
請求項
19に記載の方法であって、
前記
比較交換回路を含む複数の比較交換回路に制御信号を提供すること
と、
前記
複数の比較交換回路
が、第1の反復又は一連の反復の間
にN要素ベクトルをバイトニックシーケンスに配置させ、最終反復の間
にN要素ベクトルを完全にソートされたアレイに配置させる
、ように命令することと、
を更に含む、方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示の少なくとも一つの例によれば、バイトニックソートのためのハードウェアアクセラレータが、複数の比較交換回路と、比較交換回路の各々に関連する先入れ先出し(FIFO)バッファとを含む。各FIFOバッファの出力がFIFOデータ値である。比較交換回路は、第1の動作モードにおいて、前の比較交換回路又はメモリからの前のデータ値をその関連するFIFOバッファに記憶し、その関連するFIFOバッファからのFIFOデータ値を後続の比較交換回路又はメモリに渡すように構成され、第2の動作モードにおいて、前のデータ値をFIFOデータ値と比較し、大きい方のデータ値をその関連するFIFOバッファに記憶し、小さい方のデータ値を後続の比較交換回路又はメモリに渡すように構成され、第3の動作モードにおいて、前のデータ値をFIFOデータ値と比較し、小さい方のデータ値をその関連するFIFOバッファに記憶し、大きい方のデータ値を後続の比較交換回路又はメモリに渡すように構成される。
【発明の概要】
【0002】
本開示の別の例によれば、バイトニックソートのためのハードウェアアクセラレータが、出力とメモリに結合するように構成される第1の入力とを各々が含む、4つのマルチプレクサ(mux)を含む。ハードウェアアクセラレータは、4つの入力及び4つの出力を有する4入力比較交換回路も含み、各マルチプレクサの出力は、4入力比較交換回路の入力のうちの1つに結合される。ハードウェアアクセラレータは更に、第1のバイトニックソートアクセラレータ、第2のバイトニックソートアクセラレータ、第3のバイトニックソートアクセラレータ、及び第4のバイトニックソートアクセラレータを含む、4つのバイトニックソートアクセラレータを含む。4つのバイトニックソートアクセラレータの各々が入力及び出力を有し、また、4入力比較交換回路の各出力が、バイトニックソートアクセラレータ入力のうちの1つに結合される。各バイトニックソートアクセラレータの出力は、マルチプレクサのうちの1つの第2の入力に結合される。
【0003】
本開示の別の例によれば、バイトニックソートのための方法が、複数の比較交換回路の各々について、制御信号を受信すること、並びに、制御信号に応答して、第1の動作モード、第2の動作モード、及び第3の動作モードのうちの1つで動作することを含む。第1の動作モードにおいて、この方法は更に、比較交換回路によって、前の比較交換回路又はメモリからの前のデータ値を関連するFIFOバッファに記憶することであって、関連するFIFOバッファの出力がFIFOデータ値である、記憶すること、及び、関連するFIFOバッファからのFIFOデータ値を後続の比較交換回路又はメモリに渡すことを含む。第2の動作モードにおいて、この方法は更に、比較交換回路によって、前のデータ値をFIFOデータ値と比較すること、大きい方のデータ値を関連するFIFOバッファに記憶すること、及び、小さい方のデータ値を後続の比較交換回路又はメモリに渡すことを含む。第3の動作モードにおいて、この方法は更に、比較交換回路によって、前のデータ値をFIFOデータ値と比較すること、小さい方のデータ値を関連するFIFOバッファに記憶すること、及び、大きい方のデータ値を後続の比較交換回路又はメモリに渡すことを含む。
【0004】
様々な例の詳細な説明のために、次に、添付の図面を参照する。
【図面の簡単な説明】
【0005】
【
図1】様々な例に従った、バイトニックソートネットワークの信号フローグラフを示す。
【0006】
【
図2】様々な例に従った、バイトニックソートアクセラレータのブロック図を示す。
【0007】
【
図3】様々な例に従った、比較交換回路の回路概略図を示す。
【0008】
【
図4】様々な例に従った、フロースルー動作を含むバイトニックソートネットワークの信号フローグラフを示す。
【0009】
【
図5】様々な例に従った、バイトニックソートアクセラレータについてのデータフロー及びタイミング図を示す。
【0010】
【
図6】様々な例に従った、データ並列処理が改良されたバイトニックソートアクセラレータのブロック図を示す。
【0011】
【
図7A】様々な例に従った、データ並列処理が改良されたバイトニックソートネットワークの信号フローグラフを示す。
【
図7B】様々な例に従った、データ並列処理が改良されたバイトニックソートネットワークの信号フローグラフを示す。
【0012】
【
図8】様々な例に従った、バイトニックソートのための方法のフローチャートを示す。
【発明を実施するための形態】
【0013】
ソート動作は、信号処理、レーダー追跡、画像処理、及びその他などのために、様々なアルゴリズムによって頻繁に用いられる。ソート動作は、しばしば計算を多用し、またそのため他のタスクを行なうためのCPU又はGPUの機能を低下させる、中央処理ユニット(CPU)又はグラフィックス処理ユニット(GPU)によって実行されるソフトウェアを用いて実装される。ハードウェアアクセラレータは、CPU又はGPUなどの汎用ホストプロセッサ上で実行されるソフトウェアよりも効率的に、ソートなどの或る種の数学演算を行なうために用いられる。しかしながら、ソート速さ及び回路面積に対する改良が望ましい。
【0014】
開示される例によれば、バイトニックソートのためのハードウェアアクセラレータ(バイトニックソートアクセラレータ)及びバイトニックソートのための方法が、ソート速さが向上し、回路面積が減少した、データ値のアレイをソートするためのハードウェアソリューションを提供する。本開示のバイトニックソートアクセラレータは、例えば、ホストプロセッサによって実行されるソフトウェアよりも効率的に、バイトニックソートを行なう。特に、本開示のバイトニックソートアクセラレータは、Radix-2シングルディレイフィードバック(R2SDF)アーキテクチャと同様の構造を利用して、パイプライン様式でデータ値のアレイのバイトニックソートを行う。バイトニックソートアクセラレータは、任意の比較ベースのソートアルゴリズムを用いて達成可能なソート速さについての理論的上限に等しい、合計(N×log2N)クロックサイクルにおいてアクセラレータ内にシリアルに送られるN個のバイナリ数をソートする。いくつかの例において、バイトニックソートアクセラレータのスループットは、ハードウェアアクセラレータの並列処理を増加させることによって、更に4倍向上する。
【0015】
バイトニックシーケンスは、2つの条件のいずれかを満たす要素のシーケンス(a0、a1、・・・、aN-1)である。第1の条件は、(a0、・・・、ai)が単調に増加し、(ai+1、・・・、aN-1)が単調に減少するような、指数i、0≦i≦N-1が存在することである。第2の条件は、第1の条件が満たされるような指数の循環シフトが存在することである。例えば、{1、4、6、8、3、2}(これらは、単調に増加した後、単調に減少する)、{6、9、4、2、3、5}(循環シフトが、単調に増加した後、単調に減少する({2}で始まる)か又は単調に減少した後、単調に増加する({9}で始まる))、及び、{9、8、3、2、4、6}(これらは、単調に減少した後、単調に増加する)は、バイトニックシーケンスである。
【0016】
本開示の例において、ハードウェアアクセラレータが、バイトニックシーケンスの要素への比較交換(CE)演算の再帰的適用を介して、サイズNのバイトニックシーケンスをソートする。ハードウェアアクセラレータは、R2SDFアーキテクチャの一部を再使用しながら、任意の比較ベースのソートアルゴリズムについての理論的上限に等しい合計(N×log2N)クロックサイクルで、サイズNの入力データをソートできるようにする。CE演算が、2つの要素を比較した後、任意選択として、どちらの要素がより大きい値を有するかに応じて2つの要素の位置を交換又はスワップする。例えば、CE演算は、最大の要素を第2の位置に置こうとする場合、CE演算は第1の値と第2の値とを比較し、第1の値が第2の値より大きい場合、2つの要素を交換する。しかしながら、第2の値が第1の値より大きい場合、交換は成されない。
【0017】
図1は、ランダム入力を有するサイズN=8のデータシーケンスをソートするための、バイトニックソートネットワーク100の例示の信号フローグラフを示す。一般に入力データは、データ値のN要素ベクトルである。信号フローグラフ100において、矢印は、比較される2つの要素(各矢印の「先頭」及び「末尾」に位置する要素)、及び、要素が交換又はスワップされる方向を示す。
図1の例において、比較される2つの要素のうちの小さい方は、比較の後、矢印の末尾に位置する。バイトニックソートネットワーク100は、まず、ソートされていないデータシーケンス(Seq.A)を、第1のlog
2N-1ステージ、この場合はステージS1及びS2、において生じるバイトニックシーケンス(Seq.C)へと再配置する。その後、バイトニックソートネットワーク100は、最終ステージS3において、バイトニックシーケンス(Seq.C)をソートされたシーケンス(Seq.D)へと再配置する。
【0018】
入力データ又はソートされていないデータシーケンス(Seq.A)は、長さ2のバイトニックシーケンスの組み合わせとして扱われる。ステージS1において、反対方向に向き合う近接する矢印によって示されるように、並列のCE演算が、近接するバイトニックシーケンス(対)について反対方向に適用される。ステージS1の結果は、入力データ(Seq.A)が長さ4のバイトニックシーケンス(Seq.B)の組み合わせに変換されることである。ステージS2において、同様の並列CE演算が、図に示されるような近接するバイトニックシーケンスについて反対方向に適用され、入力データサイズが8より大きい場合、後続のステージは、長さNのバイトニックシーケンスが生成されるまで同様に続行する。この例では、ステージS2の結果は、長さN=8のバイトニックシーケンス(Seq.C)が生成されることである。この例ではステージS3である最終ステージにおいて、バイトニックシーケンス(Seq.C)は、図示されるようなソートされたシーケンス(Seq.D)に変換される。
【0019】
図2は、本開示の例に従ったバイトニックソートアクセラレータ200を示す。バイトニックソートアクセラレータ200は、2入力マルチプレクサ(mux)202への入力として、メモリ208から入力データ(Di、これは、データ値のN要素ベクトル)を受信する。上記で説明したように、入力データ要素は、バイトニックソートアクセラレータ200のマルチプレクサ202によってシリアルに受信される。バイトニックソートアクセラレータ200は、一つ又は複数のパイプライン比較交換(CE)回路204も含む。
図2の例において、CE回路204は、第1のCE回路204a及び最後のCE回路204cを含む。CE回路204bについて、CE回路204aは前のCE回路204aと称し、CE回路204cは後続のCE回路204cと称する。一般に、第1のCE回路204aと最後のCE回路204cとの間の各CE回路204は、1つの前のCE回路204及び1つの後続のCE回路204を有する。
【0020】
サイズN(一般的に、2のべき乗であると想定される)の入力データをソートするように構成されるバイトニックソートアクセラレータ200の場合、バイトニックソートアクセラレータ200は少なくともLog
2NのCE回路204を含む。Nが2のべき乗でない例において、入力データサイズを次の2のべき乗まで増加させるために、ゼロパディングが用いられる。
図2の例において、また
図1との整合性のために、例えば入力データはサイズN=8であるものと想定される。したがって、
図2の例において、バイトニックソートアクセラレータ200は3つのCE回路204a、204b、204cを含む。マルチプレクサ202は2つの入力を含み、1つは前述のようにメモリ208に結合され、もう1つは最後のCE回路204cによって生成される出力データ(Do)に結合される。出力データ(Do)は、いくつかの例においてメモリ208と同じであり、他の例ではメモリ208から分離される、メモリ210にも提供される。
【0021】
各CE回路204a、204b、204cは、それぞれ、先入れ先出し(FIFO)バッファ206a、206b、206cに関連する。FIFOバッファ206a、206b、206cは遅延要素として働き、またいくつかの例では、メモリ又はシフトレジスタにおいて実装される。M CE回路204a、204b、204cを有し、M CE回路がM’を用いてインデックス付けされ、M’の範囲が0からlog
2N-1である、バイトニックソートアクセラレータ200の場合、FIFOバッファ206a、206b、206cのサイズは2
log
2
N-1-M’であるか、又はこの場合、それぞれサイズ4、2、1である。特定のCE回路204に関連するFIFOバッファ206のサイズは、その特定のCE回路204によって実施される比較の「距離」を特定する。
図1に戻って参照すると、例えばステージS1において、すべての比較は距離1を有する近接する値の比較であり、同様に、ステージS2において、比較は、距離2及び距離1を有する値の比較であり、最終的に、ステージS3において、比較は距離4を有し、次に2を有し、次に1を有する値の比較である。回路204a、204b、204cの各々は、それぞれ制御信号C
2、C
1、C
0も受信し、これについては下記で更に詳細に説明する。
【0022】
図3は、CE回路204をより詳細に示す。CE回路204は、関連するFIFOバッファ206の出力に結合される第1の入力302を含む。参照しやすくするために、各FIFOバッファ206の出力データはFIFOデータ値と呼ぶことができる。CE回路204は、関連するFIFOバッファ206の入力に結合される第1の出力306も含む。CE回路204は更に、第2の入力304及び第2の出力308を含む。第2の入力304は、(例えば、
図2に示されるような)前のCE回路204又はメモリ(例えば、
図2に示されるmux202を介したメモリ208)の第2の出力に結合する。第2の出力308は、(例えば、
図2に示されるような)後続のCE回路204又はメモリ(例えば、
図2に示されるメモリ210)の第2の入力に結合する。
【0023】
CE回路204は比較器310も含み、比較器310は、第1の入力302及び第2の入力304として入力を受信し、第1の入力302と第2の入力304との比較に基づいて出力を生成する。
図3の例において、比較器310の出力は、第1の入力302が第2の入力304よりも大きいときにアサートされ(例えば「1」であり)、第1の入力302が第2の入力304よりも小さいときにアサート解除される(例えば「0」である)。
【0024】
CE回路204は、それぞれCn[0]及びCn[1]として示される、その最下位ビット及び最上位ビットを有する2ビット制御信号を受信する。比較器310の出力及び最下位ビットCn[0]は、XORゲート312への入力として提供される。XORゲート312の出力及び最上位ビットCn[1]は、ANDゲート314への入力として提供される。ANDゲート314の出力は、第1の出力mux316及び第2の出力mux318のための制御であり、第1の出力mux316及び第2の出力mux318の出力は、それぞれ、第1の出力306及び第2の出力308を含む。ANDゲート314の出力がアサートされることに応答して、第1の出力mux316は、第1の入力302を第1の出力306として通過させ、第2の出力mux318は、第2の入力304を第2の出力308として通過させる。ANDゲート314の出力がアサート解除されることに応答して、第1の出力mux316は、第2の入力304を第1の出力306として通過させ、第2の出力mux318は、第1の入力302を第2の出力308として通過させる。
【0025】
CE回路204の前述の論理の結果として、比較交換演算は、制御信号C
nによって下記のように特定される。
0(又は1):第1の動作モードにおいて、比較交換演算はCE回路204を迂回することであり、これは、
図4に関連して下記でより詳細に説明するフロースルー動作に対応し、前のCE回路からのデータ(第2の入力304)が、FIFOバッファ206に記憶され(第1の出力306であり)、またFIFOバッファ206からの最も古いデータ(第1の入力302)は、次のCE回路に渡される(第2の出力308である)。
2:第2の動作モードにおいて、比較交換演算は、第1のCE回路204aの場合、前のCE回路又はメモリ208からのデータ(第2の入力304)を、FIFOバッファ206からの最も古いデータであるFIFOデータ値(第1の入力302)と比較することであり、大きい方のデータ値がFIFOバッファ206に記憶され(第1の出力306であり)、小さい方のデータ値は、次のCE回路、又は、最後のCE回路204cの場合、メモリ210に渡される(第2の出力308である)。
3:第3の動作モードにおいて、比較交換演算は、第1のCE回路204aの場合、前のCE回路又はメモリ208からのデータ(第2の入力304)を、FIFOバッファ206からの最も古いデータであるFIFOデータ値(第1の入力302)と比較することであり、小さい方のデータ値がFIFOバッファ206に記憶され(第1の出力306であり)、大きい方のデータ値は、次のCE回路、又は、最後のCE回路204cの場合、メモリ210に渡される(第2の出力308である)。
下記で更に説明するように、制御信号「2」対制御信号「3」の間の方向の差は、
図1の矢印の方向性を実装することができる。
【0026】
図4は、フロースルー動作(例えば、前述の制御信号0に対応する)を含む、バイトニックソート400のための別の例示の信号フローグラフを示す。特に、
図1の例示的信号フローグラフ100は、ドット(矢印ではない)接続の端部においてデータ要素として示される、フロースルー動作402を含んで示される。フロースルー動作は、例えば、バイトニックソートエンジン200のパイプラインステージにわたって、データの定常フローを維持するように実装される。例えば、ステージS1において、距離4及び2を有する要素間の比較は、フロースルー動作として示される。同様に、ステージS2において、距離4を有する要素間の比較は、フロースルー動作として示される。ステージS3において、(
図1に関して上記で説明したように、最終のバイトニックソート動作を実施するために)距離4の比較が必要であるため、N=8である特定の例についてフロースルー動作は存在しない。
【0027】
図5は、
図1及び
図4のシーケンスAに対応する入力パターンを有する、N=8の場合のバイトニックソートアクセラレータ200の入力データ(Di)及び出力データ(Do)についての、例示のデータフロー及びタイミング
図500を示す。概して、バイトニックソートアクセラレータ200の動作は、最後の入力データ値(この例では「1」)がバイトニックソートアクセラレータ200にフィードされた時点から、完了するためにN×log
2Nクロックサイクル(この場合、24クロックサイクル)を要する。
【0028】
図2に戻って参照すると、出力データDoからmux202への入力までのフィードバック接続は、
図1及び
図4に関して上記で説明したステージS1、S2、S3を実装するために、バイトニックソートアクセラレータ200を反復的に利用できるようにする。ステージS1に対応する第1の反復において、ステージS1は距離1を有する近接する値に対してのみ比較交換演算を実施するため、(距離4に対応する)CE回路204a及び(距離2に対応する)CE回路204bは、フロースルーモードで動作される。
【0029】
(距離1に対応する)CE回路204cについての比較交換演算は、第1の値(この例では「8」)を関連するFIFOバッファ206cにフロースルーするために、7番目のクロックサイクルにおいて0で始まる。この時点において、最も古いものから最も新しいものへと順序付けされ、FIFOバッファ206aは値5、4、3、2を含み、FIFOバッファ206bは値7、6を含み、FIFOバッファ206cは値8を含む。
【0030】
8番目のクロックサイクルにおいて、CE回路204cについての比較交換演算は2であり、これによって、CE回路204cに、前のCE回路204bからのデータ(値7、FIFOバッファ206b内の最も古いデータとして、及び、フロースルー動作の対象となる)をFIFOバッファ206cからの最も古いデータ(値8)と比較させる。大きい方のデータ値8は、FIFOバッファ206cに戻って記憶され、小さい方のデータ値7は出力データDoとして渡され、これはタイミング
図500においてDoの第1の要素(シーケンスB)として反映される。また、この時点で、mux202への制御信号が変更されて、出力データDoがCE回路204aへの入力データとして働き、第2の反復を開始して、続くステージ、この場合はステージS2を実装するようになる。
【0031】
9番目のクロックサイクルにおいて、CE回路204cについての比較交換演算は再度0(フロースルー)であり、これによって、CE回路204cに、関連するFIFOバッファ206cからのデータ値8を出力データDoとして渡させ、これはタイミング
図500においてDoの第2の要素(シーケンスB)として反映される。10番目のクロックサイクルにおいて、CE回路204cについての比較交換演算は3であり、これによって、CE回路204cに、前のCE回路204bからのデータ(値5、FIFOバッファ206b内の最も古いデータとして、及び、フロースルー動作の対象となる)をFIFOバッファ206cからの最も古いデータ(値6)と比較させる。小さい方のデータ値5がFIFOバッファ206cに記憶され、大きい方のデータ値6は出力データDoとして渡され、これはタイミング
図500においてDoの第3の要素(シーケンスB)として反映される。上記のプロセスは繰り返され、データ値4及び3(比較交換演算2を用いる)とデータ値2及び1(比較交換演算3を用いる)とを比較して、距離1を有する近接する値でのステージS1の比較交換演算を完了する。
【0032】
ステージS2は、必要とされる比較交換演算の方向性を明らかにするように制御信号C
nが改変される点を除いて、ステージS1に関して上記で説明した内容と同様に実装される。タイミング
図500の残りの部分は、ステージS1の結果(シーケンスB)、ステージS2の結果(シーケンスC)、及びステージS3の結果(シーケンスD)に対応する、制御信号C
n及び出力データDoを反映する
【0033】
また、制御信号Cnは、例えば、モジュロNのバイナリカウンタ(0からN-1までをカウントする)、及び、各CE回路204a、204b、204cに関連するモジュロlog2Nのバイナリカウンタ(0からlog2N-1までをカウントする)からのカウンタビットを用いて生成されるパターンに従う。モジュロlog2Nのバイナリカウンタは反復ごとに増分し、モジュロNのバイナリカウンタはクロックサイクルごとに増分する。CE回路204a、204b、204cの各々は、モジュロlog2Nのバイナリカウンタが特定の値に達するとき、アクティブである(例えば、制御信号Cn=2又はCn=3)。例えばN=8の場合、C2は、モジュロlog2Nのカウンタが2に等しいときにアクティブであり、C1は、モジュロlog2Nのカウンタが1より大きいか又は1に等しいときにアクティブであり、C0は、モジュロlog2Nのカウンタが0より大きいか又は0に等しいときにアクティブである。Cnの値は、モジュロNのカウンタからの個々のビットを用いる組み合わせ論理に基づいて、各CE回路204a、204b、204cについて決定される。他の例において、制御信号Cnは、メモリ内の制御信号バッファからアクセスされる。
【0034】
図2に示され上記で説明したバイトニックソートアクセラレータ200は、バイトニックソートアクセラレータ200がシリアル入力データ(Di)を受信し、固定された待ち時間の後、出力データ(Do)をシリアルに生成するという点で、本来シリアルである。しかしながら、いくつかの例において、バイトニックソートアクセラレータが実装されるべきコンピュータシステムは、より広い帯域幅を有しそのためより高いスループットを処理し得る、プロセッサ、バス構造、及びメモリアクセス(例えば、直接メモリアクセスDMA))を含む。そうしたコンピュータシステムにおいて、ハードウェアアクセラレータが、バイトニックソートアクセラレータ200のシリアル入力及びシリアル出力などのデータを相対的にゆっくりと消費及び生成することによって、システム全体の性能が低減される。
【0035】
図6は、データ値のN要素ベクトルに関するソートを行うために必要なクロックサイクルの数を減少させる、高水準のデータ並列処理を伴うバイトニックソートアクセラレータ600を示す。バイトニックソートアクセラレータ600は、メモリ208からの4つの並列ストリーム(x1~x4と示される)から入力データを受信し、各ストリームは2入力マルチプレクサ(mux)602への1入力である。
図2に関して上述したように、入力データ要素は、バイトニックソートアクセラレータ600のmux602によってシリアルに受信されるが、4x並列処理を用いる。バイトニックソートアクセラレータ600は、
図2及び
図3に示され上記で説明したものと同一の4つのCE回路204a~204dを含む、4入力CE回路604も含む。
【0036】
第1のCE回路204aは、第1のmux602aの出力に結合される第1の入力と、第2のmux602bの出力に結合される第2の入力とを含む。第2のCE回路204bは、第3のmux602cの出力に結合される第1の入力と、第4のmux602dの出力に結合される第2の入力とを含む。第3のCE回路204cは、第1のCE回路204aの第1の出力に結合される第1の入力と、第2のCE回路204bの第1の出力に結合される第2の入力とを含む。第4のCE回路204dは、第1のCE回路204aの第2の出力に結合される第1の入力と、第2のCE回路204bの第2の出力に結合される第2の入力とを含む。前述のように、CE回路204a~204dは、第1及び第2の出力がそれぞれ第2及び第1の入力に対応するフロースルーモードにおいて、これらの入力のうち大きい方のデータ値が第1の出力であり、これらの入力のうちの小さい方のデータ値が第2の出力である比較モードにおいて、並びに、これらの入力の小さい方のデータ値が第1の出力であり、これらの入力の大きい方のデータ値が第2の出力である比較モードにおいて、動作するように構成される。
【0037】
第3及び第4のCE回路204c、204dの第1及び第2の出力は、各々、上記
図2において説明した、それぞれ、バイトニックソートアクセラレータ200a~200dの入力に結合される。第1のバイトニックソートアクセラレータ200aの出力(y1)は、mux602dの入力に結合される。第2のバイトニックソートアクセラレータ200bの出力(y2)は、mux602bの入力に結合される。第3のバイトニックソートアクセラレータ200cの出力(y3)は、mux602cの入力に結合される。第4のバイトニックソートアクセラレータ200dの出力(y4)は、mux602aの入力に結合される。
【0038】
図7A及び
図7Bは、わかりやすくするために、フロースルー動作を含まないバイトニックソート700についての例示の信号フローグラフを示す。
図2のバイトニックソートアクセラレータ200に関した上記の例は、8ポイントバイトニックソートアクセラレータについてのものであったが、本開示は、説明するように追加のCE回路及び関連するFIFOバッファを追加することによって、他の数のポイントに拡張することが可能である。したがって、
図2の例を続けるために、バイトニックソートアクセラレータ600の機能性は、前述のように、4つの8ポイントバイトニックソートアクセラレータ200を用いる32ポイントバイトニックソートアクセラレータとして説明される。信号フローグラフ700において、行701、703、705、707は、それぞれ、8ポイントバイトニックソートアクセラレータ200a、200b、200c、200dの機能性に対応する。
【0039】
第1のステージ702において、4入力CE回路604のCE回路204a~204dはフロースルーモードで動作して、x1入力データは8ポイントバイトニックソートアクセラレータ200dに提供され、x2入力データは8ポイントバイトニックソートアクセラレータ200bに提供され、x3入力データは8ポイントバイトニックソートアクセラレータ200cに提供され、x4入力データは8ポイントバイトニックソートアクセラレータ200aに提供されるようになっている。第1のステージ702において、8ポイントバイトニックソートアクセラレータ200a~200dは、距離4及び2を有する要素間での比較のためにフロースルー動作を実装し、距離1を有する要素は前述のように比較される。この場合、8ポイントバイトニックソートアクセラレータ200a~200dの最後のCE回路のみがフロースルーモードで動作されない。
【0040】
第2及び第3のステージ704、706において、メモリ208から8要素(この例において)が読み取られた後であるが、4入力CE回路604のCE回路204a~204dは再度フロースルーモードで動作し、mux602a~602dは、8ポイントバイトニックソートアクセラレータ200a~200dの出力を4入力CE回路604への入力として提供するように構成される。第2のステージ704において、8ポイントバイトニックソートアクセラレータ200a~200dは、距離4を有する要素間での比較のためにフロースルー動作を実装し、距離2及び1を有する要素は前述のように比較される。この場合、8ポイントバイトニックソートアクセラレータ200a~200dの最後の2つのCE回路は、フロースルーモードで動作しない。第3のステージ706において、8ポイントバイトニックソートアクセラレータ200a~200dはフロースルー動作を実装せず、距離4、2、及び1を有する要素は前述のように比較される。
【0041】
第4のステージ708において、CE回路204c及び204dは、距離8を有する要素間での比較を実施するために、(708aに対応する)比較モードで動作される。8ポイントバイトニックソートアクセラレータ200a~200dは、フロースルー動作を実装せず、距離4、2、及び1を有する要素は前述のように(708bに対応して)比較される。CE回路204a~204dは、フロースルーモードで動作される。
【0042】
最終的に、第5のステージ710において、CE回路204a~204dはすべて、距離16及び8を有する要素間での比較を実施するために、(710aに対応する)比較モードで動作される。8ポイントバイトニックソートアクセラレータ200a~200dはフロースルー動作を実装せず、距離4、2、及び1を有する要素は前述のように(710bに対応して)比較される。CE回路204a~204d、又は8ポイントバイトニックソートアクセラレータ200a~200dにおけるCE回路は、いずれもフロースルー動作を実装しない。この例において、4番目及び5番目のサイクルは例示的である。一般に、4入力CE回路604は、最後の2回の反復又はステージまでフロースルー動作を実装する。
【0043】
バイトニックソートアクセラレータ600は、
図2で説明されるバイトニックソートアクセラレータ200に比べてスループット及びレイテンシを向上させる。例えば、長さNのデータアレイの場合、反復回数はlog
2Nのままである。しかしながら、各反復に必要なクロックサイクルは、4入力CE回路604及びN/4ポイントバイトニックソートアクセラレータ(例えば、
図6の例における8ポイントバイトニックソートアクセラレータ200a~200d)によって導入される並列処理に起因して、4分の1に減少する。したがって、バイトニックソートアクセラレータ600のレイテンシは、サンプル当たり((log
2N)/4)の実効スループットを伴う((N×log
2N)/4)クロックサイクルである。
【0044】
図8は、本開示の例に従った方法800のフローチャートを示す。方法800は、ブロック802において、制御信号、例えば
図3に関して上記で説明したCnを受信することから開始される。ブロック804において、方法800は、制御信号によって示される比較交換回路について動作モードを決定することを含み、動作モードは、一例では、制御信号が値0又は1の場合は第1の動作モードであり、制御信号が値2の場合は第2の動作モードであり、また制御信号が値3の場合は第3の動作モードである。
【0045】
制御信号が、比較交換回路を第1の動作モードで動作させる場合、方法800はブロック806に進み、前の比較交換回路又はメモリからの前のデータ値を関連するFIFOバッファに記憶する。関連するFIFOバッファの出力は、FIFOデータ値と称する。次いで、方法800はブロック808へと続き、関連するFIFOバッファからのFIFOデータ値を後続の比較交換回路又はメモリに渡す。
【0046】
制御信号が、比較交換回路を第2の動作モードで動作させる場合、方法800はブロック810に進み、前のデータ値をFIFOデータ値と比較する。次いで、方法800はブロック812へと続き、大きい方のデータ値を関連するFIFOバッファに記憶し、ブロック814において、小さい方のデータ値を後続の比較交換回路又はメモリに渡す。
【0047】
制御信号が、比較交換回路を第3の動作モードで動作させる場合、方法800はブロック816に進み、前のデータ値をFIFOデータ値と比較する。次いで、方法800はブロック818で継続し、小さい方のデータ値を関連するFIFOバッファに格納し、ブロック820において、大きい方のデータ値を後続の比較交換回路又はメモリに渡す。
【0048】
上記で説明したように、例えば
図5に関して、第1の反復又は一連の反復の間、複数の比較交換回路によって入力データのN要素ベクトルがバイトニックシーケンスに配置されるように、制御信号が提供される。更に、最終反復において、バイトニックシーケンスは、複数の比較交換回路によって、完全にソートされたアレイに配置される。制御信号は、メモリ内の制御信号バッファによって提供され得るか、又は、前述のようにカウンタビットを用いて提供され得る。
【0049】
前述の考察において、及び特許請求の範囲において、様々な要素、セクション、及びステージを含むバイトニックソートアクセラレータについて言及している。これらの要素、セクション、及びステージは、場合によっては、例えば集積回路(IC)上に実装されるハードウェア回路要素に対応することを理解されたい。実際に、少なくとも一つの例において、バイトニックソートアクセラレータ全体がIC上に実装される。
【0050】
前述の考察において、及び特許請求の範囲において、「含む」及び「備える」という用語はオープンエンド様式で用いられ、またそのため、「・・・を含むがそれに限定されない」ことを意味するものと解釈されるべきである。また、「結合する」という用語は、間接接続又は直接接続のいずれかを意味することが意図される。したがって、第1のデバイスが第2のデバイスに結合する場合、その接続は直接接続を介するか、又は、他のデバイス及び接続を介する間接接続を介するものであり得る。同様に、第1の構成要素又は場所と第2の構成要素又は場所との間で結合されるデバイスは、直接接続を介するか、又は、他のデバイス及び接続を介する間接接続を介するものであり得る。或るタスク又は機能を行う「ように構成される」要素又は機構は、その機能を行うために製造業者による製造時に構成され(例えば、プログラミングされ又は構造的設計され)得、並びに/或いは、その機能及び/又は他の追加の又は代替の機能を行うために、製造後、ユーザによって構成可能(又は再構成可能)であり得る。こういった構成は、デバイスのファームウェア及び/又はソフトウェアプログラミングを介し得、デバイスのハードウェア構成要素及び相互接続の構造及び/又はレイアウトを介し得、或いはそれらの組み合わせであり得る。加えて、上記考察におけるフレーズ「接地」又は同様のフレーズの使用は、シャーシ接地、アース接地、フローティング接地、仮想接地、デジタル接地、共通接地、及び/又は、本開示の教示に適用可能であるか又は適切な任意の他の形式の接地接続を含むことが意図される。特に示されない限り、値に先行する「約」、「およそ」、又は「実質的に」は、示される値の+/-10パーセントを意味する。
【0051】
上記考察は、本開示の原理及び様々な実施形態の例示であることが意図される。当業者であれば、上記開示を完全に理解すれば、多く変形及び改変が明らかとなろう。下記の特許請求の範囲は、そうした変形及び改変すべてを包含するものと解釈されることが意図される。