説明

並列プロセッサアーキテクチャを使用して単一ビット値のシーケンスに対してスキャン演算を実施するためのシステム、方法及びコンピュータプログラム製品

【課題】並行処理アーキテクチャを使用して単一ビット値のシーケンスに対してスキャン演算を実施するためのシステム、方法及びコンピュータ製品を提供すること。
【解決手段】動作において、スキャン演算命令が受信される。さらに、スキャン演算命令に応答して、スキャン演算が、複数の処理要素を備えた並列プロセッサアーキテクチャを使用して、単一ビット値のシーケンスに対して実施される。

【発明の詳細な説明】
【技術分野】
【0001】
[0001]本発明は、スキャン演算に関し、より具体的には、並行処理アーキテクチャを使用してスキャン演算を実施することに関する。
【背景技術】
【0002】
[0002]並列プロセッサアーキテクチャは一般に、幅広い様々な計算アルゴリズムを実施するために使用される。こうしたアーキテクチャを使用して一般に実施されるアルゴリズムの一例は、スキャン演算(例えば「all−prefix−sums」演算など)である。こうした1つのスキャン演算が、表1に定義されている。
【表1】

【0003】
[0003]具体的には、配列[a,a,…,an−1]、及び「I」を単位元とする演算子
【数1】


与えられると、表1の配列が返される。例えば、演算子
【数2】


が加算演算子である場合、配列[3 1 7 0 4 1 6 3]に対してスキャン演算を実施すると、[0 3 4 11 11 15 16 22]が返されるなどである。上記の例では加算演算子が示されているが、こうした演算子は、2つのオペランドの任意の連結演算子であってもよい。
【0004】
[0004]さらに、スキャン演算は、(表1に示されたような)排他的スキャン演算であっても、包括的スキャン演算であってもよい。排他的スキャンは、結果の各要素jが、入力配列の要素jまで(要素jを含まず)のすべての要素の和となるスキャンを指す。もう一方では、包括的スキャンでは、要素jを含むすべての要素が合計される。
【発明の概要】
【発明が解決しようとする課題】
【0005】
[0005]これまで、並列プロセッサアーキテクチャを使用したスキャン演算などの計算アルゴリズムをより効率的に実施することが引き続き求められている。
【課題を解決するための手段】
【0006】
[0006]並行処理アーキテクチャを使用して単一ビット値のシーケンスに対してスキャン演算を実施するためのシステム、方法及びコンピュータ製品が提供される。動作において、スキャン演算命令が受信される。さらに、スキャン演算命令に応答して、スキャン演算が、複数の処理要素を備えた並列プロセッサアーキテクチャを使用して、単一ビット値のシーケンスに対して実施される。
【図面の簡単な説明】
【0007】
【図1】本発明の一実施形態による、並行処理アーキテクチャを使用して単一ビット値のシーケンスに対してスキャン演算を実施するための方法を示す図である。
【図2】本発明の一実施形態による、単一ビット値のシーケンスに対してスキャン演算を実施するためのシステムを示す図である。
【図3】本発明の一実施形態による、単一ビット値のシーケンスに対してスキャン演算を実施するためのシステムの結果を示す図である。
【図4】本発明の一実施形態による、並行処理アーキテクチャを使用してハードウェア内でスキャン演算を実施するためのシステムを示す図である。
【図5】本発明の別の実施形態による、並行処理アーキテクチャを使用してハードウェア内でスキャン演算を実施するためのシステムを示す図である。
【図6】本発明の別の実施形態による、並行処理アーキテクチャを使用してハードウェア内でスキャン演算を実施するためのシステムを示す図である。
【図7】上記の様々な実施形態の様々なアーキテクチャ及び/又は機能が実施され得る、例示的なシステムを示す図である。
【発明を実施するための形態】
【0008】
[0014]図1は、本発明の一実施形態による、並行処理アーキテクチャを使用して単一ビットに対するスキャン演算を実施するための方法100を示している。示されるように、スキャン演算命令が受け取られる。操作102を参照されたい。この説明のコンテキストでは、スキャン演算命令は、スキャン演算に対応する任意の命令或いはコマンドを指す。
【0009】
[0015]さらに、スキャン演算命令に応答して、スキャン演算が、複数の処理要素を備えた並列プロセッサアーキテクチャを使用して単一ビット値のシーケンス値に対して実施される。操作104を参照されたい。この説明のコンテキストでは、処理要素は、並列プロセッサアーキテクチャの任意の構成要素を指す。さらに、単一ビット値のシーケンスは、1ビット値の任意のシーケンスを含み得る。一部の実施形態では、この設計によって、単一ビット入力に対するスキャン演算などの計算アルゴリズムが、より効率的に実施され得る。
【0010】
[0016]さらに、この説明のコンテキストでは、スキャン演算は、現在の要素と、配列の少なくとも1つの前の要素とが関与する任意の演算を指し得る。例えば、様々な実施形態では、スキャン演算は。接頭部和スキャン演算、排他的スキャン演算、包括的スキャン演算、及び/又は他の任意のスキャン演算(例えば、より多くの又は少ない要素、及び/又は他の演算子などが関与する)を含み得る。
【0011】
[0017]さらに、この説明のコンテキストでは、並列プロセッサアーキテクチャは、並列に動作する2つ以上の処理要素を含む任意のアーキテクチャを含んでもよい。一実施形態では、こうした並列プロセッサアーキテクチャは、グラフィックスプロセッサ(例えばグラフィックス処理装置(GPU:graphics processing unit)など)、又は例えばチップセット、システムオンチップ(SOC:system−on−chip)、CPUに組み込まれたコア、個別プロセッサなどの形のグラフィックス処理能力を備えた他の集積回路の形を取ってもよい。別の実施形態では、上記の並行処理アーキテクチャは、ベクタプロセッサを含んでもよい。
【0012】
[0018]次に、ユーザの要望により上記フレームワークがそれと共に実装されることも、実装されないこともある様々な任意選択のアーキテクチャ及び特徴に関して、より例示的な情報が示される。以下の情報は、例示するために述べられており、どんなやり方でも限定的と見なすべきでないことに強く留意されたい。以下の特徴のいずれもが、述べられた他の特徴を除外して、又は除外せずに任意選択で組み込まれ得る。
【0013】
[0019]図2は、本発明の一実施形態による、単一ビット値のシーケンスに対してスキャン演算を実施するためのシステム200を示している。任意選択として、このシステムは、図1の方法を実施するために実装されてもよい。しかし、勿論、このシステムは、任意の所望の環境で実装されてもよい。この説明では、上記の定義が当てはまり得ることにも留意されたい。
【0014】
[0020]示されるように、並行処理アーキテクチャ202が提供される。こうした並行処理アーキテクチャは、複数の並列プロセッサ204を含む。示されていないが、こうした並列プロセッサは、所定の数のスレッドに対して動作可能であり得る。このために、並列プロセッサはそれぞれ並列に動作し得るが、対応するスレッドもまた、並列に動作してもよい。
【0015】
[0021]一実施形態では、並行処理アーキテクチャは、1つ又は複数の単一命令多重データ(SIMD:single instruction multiple data)処理要素を含んでもよい。こうしたシステムでは、プロセッサによって実行されているスレッドをグループにまとめて、単一グループ内のすべてのスレッドがどんな瞬間においても、潜在的にそれぞれ異なるデータに対してであるが、正確に同じ命令を実行しているようにする。一実施形態では、こうしたやり方で動作するこのスレッド群は、「ワープ」と呼ばれることもある。さらに、こうしたグループ内の所定のスレッド数は、対応するプロセッサの「ワープサイズ」と呼ばれることもある。
【0016】
[0022]別の実施形態では、上記の並列処理アーキテクチャは、グラフィックスプロセッサ、或いは(例えばチップセット、システムオンチップ(SOC)、CPUに組み込まれたコア、個別プロセッサなどの形の)グラフィックス処理能力を備えた他の任意の集積回路を含んでもよい。別の実施形態では、上記の並行処理アーキテクチャは、Sony(登録商標)社、Toshiba(登録商標)社、及びIBM(登録商標)社によって合同で開発されたCell広帯域エンジンマイクロプロセッサアーキテクチャを指すCellプロセッサなど、1つ又は複数のベクトル処理要素を備えたプロセッサを含んでもよい。
【0017】
[0023]引き続き図2を参照すると、並行処理アーキテクチャは、ローカル共有メモリ206を含んでもよい。並行処理アーキテクチャの並列プロセッサはそれぞれ、それ自体のローカル共有メモリへの読出し及び/又は書込みを行い得る。この共有メモリは、各プロセッサに関連する物理的に別個のメモリで構成されてもよく、或いはそれは、プロセッサ間で共有された1つ又は複数のメモリの別個に割り当てられた領域で構成されてもよい。さらに、示された実施形態では、共有メモリは、並行処理アーキテクチャのプロセッサが具現化される集積回路内で具現化されてもよい。
【0018】
[0024]さらに、図では、グローバルメモリ208が含まれている。使用時、こうしたグローバルメモリは、並行処理アーキテクチャのすべてのプロセッサからアクセス可能である。示されるように、こうしたグローバルメモリは、上記の並行処理アーキテクチャのプロセッサが具現化される集積回路とは別個の集積回路内で具体化されてもよい。並行処理アーキテクチャは、図2の様々な集積回路内に特定のやり方で具現化されるように示されているが、システム構成要素は、要望に応じて、同じ集積回路内で具体化されることも、具現化されないこともあることに留意されたい。
【0019】
[0025]さらに、図2のこのシステムは、要望に応じて、並行処理アーキテクチャを制御するためのドライバ210をさらに含んでもよい。一実施形態では、ドライバは、こうした制御を容易にするためのライブラリを含んでもよい。例えば、こうしたライブラリは、本明細書に述べられた機能性をインスタンス化し得るライブラリ呼出しを含んでもよい。
【0020】
[0026]さらに、別の実施形態では、ドライバは、並行処理アーキテクチャ(例えばグラフィックスプロセッサなど)を使用して一般的な計算能力を提供することができ得る。こうしたドライバの一例は、NVIDIAコーポレーション社によって提供されたCUDA(商標)フレームワークと併せて提供されてもよい。使用時、ドライバは、並列処理アーキテクチャを図1の方法に従って動作するように制御するために使用してもよい。
【0021】
[0027]図3は、本発明の一実施形態による、並行処理アーキテクチャを使用して単一ビット入力へのスキャン演算を実施するためのシステム300の結果を示している。オプションとして、このシステムは、図1〜2の詳細のコンテキストで実装されてもよい。しかし、勿論、このシステムは、任意の所望の環境で実装されてもよい。この説明では、上記の定義が当てはまり得ることにも留意されたい。
【0022】
[0028]図示されるように、並列プロセッサアーキテクチャの一部として含まれた複数の処理要素302が備えられている。処理要素(例えばスレッド)はそれぞれ、1ビット値304を有する。一実施形態では、これらの1ビット値は、論理表現を評価することから導出されてもよい。この場合、1ビット値は、述部ビットと称されることもある。
【0023】
[0029]操作において、スキャン演算命令は、並列プロセッサアーキテクチャによって受け取られてもよい。この場合、スキャンは、接頭部和スキャン演算命令を含んでもよい。スキャン演算命令に応答して、接頭部和スキャン演算命令は、複数の処理要素を備えた並列プロセッサアーキテクチャを使用して実施されてもよい。
【0024】
[0030]N個の処理要素のグループ(すなわちワープ)を横断して述部ビット入力の接頭部和スキャン演算(図の実施例の排他的スキャン)を行った結果、log(N)ビットの整数がもたらされる。図3は、N=16個の処理要素(例えばスレッド)のワープのスキャンの結果306を示している。勿論、様々な実施形態において、任意の数の処理要素が使用されてもよい。処理要素に引き渡される値「i」は、所与の述部ビットを1とする、より小さいインデックスを有する処理要素(例えばスレッド)の数であることに留意されたい。様々な実施形態では、この演算は、ストリーム圧縮及び基数ソートなど、複数の計算カーネルの基礎として使用されてもよい。
【0025】
[0031]一部の場合では、完全に一般的なスキャン演算が、直接的なハードウェア実装に適さないことがある。例えば、スキャン演算は、任意の長さのシーケンス、及び多くの可能な数値タイプ(例えばint、float、shortなど)に対処することを伴い得る。対照的に、固定長の小さいシーケンスに対するバイナリスキャンのプリミティブが、ハードウェアで実装され、マシン命令として提供されることがある。マルチプロセッサ内の処理要素の数は、アーキテクチャに関する既知の定数であり、数値タイプは、1ビット値に対して一定に保たれ得る。
【0026】
[0032]図4は、本発明の一実施形態による、並行処理アーキテクチャを使用してハードウェア内でスキャン演算を実施するためにシステム400を示している。オプションとして、このシステムは、図1〜3の詳細のコンテキストで実装されてもよい。しかし、勿論、このシステムは、任意の所望の環境で実装され得る。やはり、上記の定義が、この説明でも当てはまり得る。
【0027】
[0033]示されたように、並列プロセッサアーキテクチャの一部として含まれた複数の処理要素402が備えられている。さらに、複数の加算器404が含まれる。こうした加算器は、数を加算することができるどんな回路又は装置をも含み得る。
【0028】
[0034]動作において、処理要素(例えばスレッド)はそれぞれ、1ビット値を保持してもよい。したがって、スキャン演算命令は、複数の処理要素によって受け取られるとき、複数の処理要素を備えた並列プロセッサアーキテクチャを使用して実施されてもよい。この場合、加算器404の集まりは加算網(例えば回路)を形成し、この加算網は、処理装置402のそれぞれから1ビットの入力値を受け取り、スキャン演算の結果を各処理要素406に引き渡す。
【0029】
[0035]図4は、16個の処理要素を含んで示されているが、任意の数の処理要素が使用され得ることに留意されたい。さらに、図4のシステムは、排他的スキャンを実施するためのシステムとして示されている。別の実施形態では、このシステムは、包括的スキャンを実施するように構成されてもよい。
【0030】
[0036]さらに、図4のシステムは、処理要素の数(N)に等しい深さで構成される。様々な他の実施形態で、このシステムは、深さを最小化するように構成されてもよい。こうした最小化は、任意の数の技術を使用して遂行されてもよい。
【0031】
[0037]図5は、本発明の別の実施形態による、並行処理アーキテクチャを使用してハードウェア内でスキャン演算を実施するためのシステム500を示している。オプションとして、このシステムは、図1〜4の詳細のコンテキストで実装されてもよい。しかし、勿論、このシステムは、任意の所望の環境で実装されてもよい。この説明では、上記の定義が当てはまり得ることにも留意されたい。
【0032】
[0038]示されるように、並列プロセッサアーキテクチャの一部として含まれた複数の処理要素502が備えられている。さらに、加算器504のツリーが含まれる。動作において、それぞれの処理要素502は、1ビット入力を与える。
【0033】
[0039]オプションとして、この1ビット入力は、指定された述部レジスタから取られてもよい。これらの入力は、加算器のツリーを通して供給され、出力として接頭部和値506を、対応する処理要素に引き渡してもよい。一実施形態では、それぞれの出力は、各処理要素について指定されたデータレジスタ内に置かれてもよい。
【0034】
[0040]示されたように、加算器504のツリーによって形成された加算システムは、要素Nを処理要素の数として、深さ値log(N)を有する。しかし、一部の場合では、システム内の加算器の数を減らすことが望ましいことがある。したがって、加算器が減少し、アルゴリズムの深さが増加したシステムが使用されてもよい。
【0035】
[0041]図6は、本発明の別の実施形態による、並行処理アーキテクチャを使用してハードウェア内でスキャン演算を実施するためのシステム600を示している。オプションとして、このシステムは、図1〜5の詳細のコンテキストで実装されてもよい。しかし、勿論、このシステムは、任意の所望の環境で実装されてもよい。この説明では、上記の定義が当てはまり得ることにも留意されたい。
【0036】
[0042]示されるように、並列プロセッサアーキテクチャの一部として含まれた複数の処理要素602が備えられている。さらに、複数の加算器604が含まれる。動作において、それぞれの処理要素は、1ビット入力を与える。
【0037】
[0043]システムの深さは、システムの待ち時間に直接相関することに留意されたい。したがって、システムの総面積が、総待ち時間よりも懸念される場合は、より少ない数の加算器を備えたシステム(例えば図6のシステム)が望ましいことがある。もう一方で、待ち時間が、総面積よりも懸念される場合は、より大きい数の加算器及びより小さい深さを有するシステム(例えば図5のシステム)が望ましいことがある。
【0038】
[0044]いずれか実装形態を使用すると、1ビット入力のスキャンは、一般的な数のスキャンよりも遥かに安価になり得る。例えば、完全な32ビット整数が合計される場合は、加算を実施するシステム内の加算器はそれぞれ、32ビット加算器でなければならない。しかし、1ビット入力では、Nをシステム内の処理要素の数として、各加算器の幅はせいぜいlog(N)である。この説明のコンテキストでは、加算器の幅は、加算器によって扱うことができる入力数が含み得るビットの最大数を指す。
【0039】
[0045]図6の特定の場合及びコンテキストでは、それぞれの加算器は、入力当たりせいぜい4ビットに遭遇する。一実施形態では、加算器のツリーのそれぞれ異なるレベルで、それぞれ異なる幅の加算器が使用されてもよい。例えば、ツリーの第1のレベル606(すなわち入力のすぐ下)の加算器は、1ビット入力だけを含んでもよい。さらに、第2のレベル608は、2ビット入力だけを含んでもよい。
【0040】
[0046]図2〜6のコンテキストで述べられるようなデータ経路を与えられると、SIMDマルチプロセッサの処理要素を横断するバイナリスキャンは、マシン命令としてプログラムにさらされ得る(expose)。一実施形態では、各処理要素からレジスタ(「Rpred」)内の1ビット述部を入力として取り、別のレジスタ(「Rsum」)内の適切な接頭部和を各処理要素に返す述部スキャン命令(「PSCAN」)が使用されてもよい。こうした命令が、以下の表2に示されている。
【表2】

【0041】
[0047]この命令の操作は、図2〜6のシステムに直接対応する。処理要素はそれぞれ、システムの並列接頭部加算網の入力に述部ビットを与え、それぞれが単一の出力値を受け取る。
【0042】
[0048]ほとんどのマルチプロセッサハードウェアは、計算中に処理要素を選択的に非アクティブ化するための機構を組み込む。これは一般に、名目上SIMDのプロセッサアレイがプログラムの分岐経路を実行することを可能にするために行われる。こうした状況では、非アクティブ化された処理要素は、「PSCAN」命令がアクティブ処理要素によって実行されるとき、並列接頭部計算に「0」を与えると仮定してもよい。しかし、別の実施形態では、非アクティブ処理要素が「1」を与える、命令の変形体が提供されてもよい。
【0043】
[0049]さらに、図2〜6は、加算演算のコンテキストで述べられているが、他の演算も同様に適用することができる。例えば、スキャン演算及び加算器は、加算以外のどんな連結演算をも使用するように一般化してもよい。したがって、スキャン演算は、並列プロセッサアーキテクチャの複数の機能ユニットを使用して実施してもよい。
【0044】
[0050]この場合、機能ユニットは、加算器、ブール論理演算子、算術及び論理演算子、並びに他の様々な機能ユニットを含んでもよい。さらに、示されたように、並列プロセッサアーキテクチャは、複数のレベルの機能ユニットを含んでもよい。この場合、レベルの数は、処理要素の数より小さい。さらに、レベルの数は、多くの場合、処理要素数の対数よりも小さいことがある。
【0045】
[0051]マシン命令のコンテキストでは、加算命令と同様に、AND、OR及びXORなどの命令が使用されてもよい。さらに、1ビット入力では、MIN、MAX及び乗算などの演算が、これらの3つの上記1ビット操作に減少され得る。上述されたように、こうした命令のデータ経路は、構成要素をなす加算器ブロックが適切なAND/OR/XORゲートで置き換えられた、図3〜6に示されたものと同一であるように見える。さらに、例示的な一実施形態では、図3〜6のコンテキストで述べられたシステムは、パイプライン構成で実装されてもよい。この場合、こうしたパイプライン構成を実装するために、ラッチが使用されてもよい。
【0046】
[0052]スキャン演算命令に対応するマシン命令は、様々なコンピュータプログラミング言語(例えばC、C++など)を使用して実装されてもよいことに留意されたい。一実施形態では、単一のイントリンシックとして計算統一デバイスアーキテクチャ(CUDA商標:Compute Unified Device Architecture)Cを使用して実装される。例えば、表3は、CUDA(商標)Cの命令を示しており、ただし、「i」は、スレッドインデックスを表す。
【表3】

【0047】
[0053]この機能性をさらすことへの別の手法は、プログラムによって明示的に計算された述部ではなく、処理要素の「アクティブ」ビットに対するバイナリ接頭部和を暗黙に実施することである。この構成の一例が、以下の表4に示されている。
【表4】

【0048】
[0054]この場合、マルチプロセッサ「アクティブ」状態にアクセスするために使用するコンパイラ用に、基礎となるプロセッサ機構が存在してもよい。
【0049】
[0055]勿論、これは、より高いレベルの言語でプリミティブをさらすことへの1つの可能な手法にすぎず、特にCUDA(商標)Cに関係する。プリミティブマシンサポートをさらす他の手段が考慮される。実質的に異なる設計を有する言語(例えばデータ並列Cなど)が、それぞれ異なる言語レベル実施形態を使用することに留意されたい。
【0050】
[0056]一実施形態では、処理要素、或いはスレッドの1つ又は複数のグループ(例えばワープ)は、協調型スレッド配列(CTA:Cooperative Thread Array)で共に実行されてもよい。したがって、並列プロセッサアーキテクチャは、処理要素間の調整を提供し得る。この場合、調整は、書き込まれる結果の宛先に関する調整を含んでもよい。一実施形態では、複数の処理要素は、オンチップ共有メモリを介して互いに伝達し、バリアを介して同期することができ得る。
【0051】
[0057]複数のスレッドで構成されたCTAを横断したスキャンを実施するとき、2つのレベルのスキャンが実施されてもよい。第1のスキャンは、それぞれのワープ内で行われてもよい。オプションとして、上述されたように、第1のスキャンは、「PSCAN」プリミティブを用いて実装されてもよい。第2のスキャンは、各ワープから単一の値を受け取り、これらの部分和へのスキャンを実施してもよい。これらはすべて、32のワープ幅の場合には、5ビット整数であることに留意されたい。
【0052】
[0058]一実施形態では、1ビットのスキャンプリミティブが、各2進数字へのスキャンをそれぞれ独立に実施し、次いで結果を合計することによってマルチビット数の接頭部和を計算するために使用されてもよい。換言すると、並列プロセッサアーキテクチャは、マルチビット値の個々のビットのスキャンを個々に実施し、結果をビットシフトした後に個々のスキャンの結果を合計することによってマルチビット値に対するスキャン演算を実施してもよい。例えば、ワープ内の各スレッドに、5ビット値「x_i」が与えられると仮定する。これらの値の接頭部和は、表5に示されるように計算されてもよい。
【表5】

【0053】
[0059]この実装形態の結果は、完全スキャンカーネルを伴う実装形態と同じになる。しかし、「PSCAN」が、実行のために単一の命令を使用すると仮定すると、これは、入力値のビット数が小さい場合、完全カーネルよりも遥かに効率的になり得る。スキャンカーネル関するさらなる情報は、その全体が参照として本明細書に組み込まれている、2007年9月27日に出願された特許出願第11/862,938号、「SYSTEM,METHOD AND COMPUTER PROGRAM PRODUCT FOR PERFORMING A SCAN OPERATION」に見ることができる。
【0054】
[0060]上記の機能性は、並行処理アーキテクチャを含めて任意の所望の環境で使用されてもよく、効率的な並列カーネルの構成が望まれる様々な状況で実装されてもよいことに留意されたい。例えば、アイテムのキューが、操作されているデータに対応し、スレッド当たり最大1アイテムをキューに書き込むと仮定する。あらゆるスレッドが常に1アイテムを書き込む場合は、各スレッドは、キューポインタからのどのオフセットを、値として書き込むべきか常に分かっている。
【0055】
[0061]しかし、個々の各スレッドが、値を書き込むかどうか選択する場合は、ワープ内のすべてのスレッドは、値の書込みの適切なオフセットを計算しなければならない。このオフセットの計算は、各スレッドが書込みを望んでいるかどうか判断する述部へのスキャンを使用することによって実装されてもよい。この計算は、表6に示されるようなバイナリスキャンプリミティブを使用して、単純かつ効率的に表現することができる。
【表6】

【0056】
[0062]より簡潔な変形体は、ワープを横断してプロセッサの「アクティブ」ビットを暗黙的にスキャンすることによって作られ得る。例えば、こうした1つの変形体が、以下の表7に示されている。
【表7】

【0057】
[0063]別の実施例として、スレッドのCTAは、スレッド当たり1つの値で数列を制御していることがある。この実施例では、「ピポット」値が選択されてもよく、配列は、ピポット未満である配列内のすべての値が他のすべての数の前に来るように入れ替えてもよい。これは、例えばQuicksortなどのアルゴリズムにおける一ステップである。
【0058】
[0064]この演算を実施するために、述部「p」を受け取る「ランク()」プリミティブが定義されてもよい。述部が真であるスレッドは、述部が真である、より低いスレッドインデックスを有するスレッド数のカウントを受け取る。述部が偽であるスレッドは、述部が偽である、より低いスレッドインデックスを有するスレッド数のカウント、及び真の述部の総数を受け取る。表8は、CUDA(商標)の代表的な関数の一例を示しており、ただし、関数「cta_prefix_sum()」は、2007年9月27日に出願された特許出願第11/862,938号、「SYSTEM,METHOD AND COMPUTER PROGRAM PRODUCT FOR PERFORMING A SCAN OPERATION」に述べられたやり方で、ワープ内スキャンに基づいて構築される。
【表8】

【0059】
[0065]こうしたプリミティブが与えられると、パーティション関数が書き込まれ得る。例えば、表9は、こうした1つのパーティション関数の一例を示している。
【表9】

【0060】
[0066]パーティションと同様に、数列のソートは、多くの適用例に役立つ別の演算である。上記に定義された「rank()」プリミティブに関しても容易に実装される。基数ソートの各パスは、比較述部に基づくのではなく、データ値の単一ビットの値に基づく「partition()」のやり方で単に入れ替えることである。この説明のコンテキストでは、基数ソートは、個々の桁を処理することによって整数をソートするソートアルゴリズムである。基数ソートを使用する実装形態の一例が、表10に示されている。
【表10】

【0061】
[0067]様々な実施形態について上記に述べられているが、それらは、例示するためだけに提示されており、限定するものではないことを理解されたい。例えば、様々な他の実施形態では、上記の図のコンテキスト及び詳細で、任意の数のスキャンアルゴリズムが使用され実装されてもよい。
【0062】
[0068]図7は、様々な上記実施形態の様々なアーキテクチャ及び/又は機能性が実装され得る例示的なシステム700を示している。示されたように、通信バス702に接続された少なくとも1つのホストプロセッサ701を含むシステムが提供される。このシステムは、メインメモリ704をも含む。制御論理(ソフトウェア)及びデータは、ランダムアクセスメモリ(RAM:random access memory)の形を取り得るメインメモリに格納される。
【0063】
[0069]このシステムは、グラフィックスプロセッサ706及びディスプレイ708、すなわちコンピュータモニタをも含む。一実施形態では、グラフィックスプロセッサは、複数のシェーダモジュール、ラスター化モジュールなどを含んでもよい。上記モジュールはそれぞれ、グラフィックス処理装置(GPU)を形成するように、単一の半導体プラットフォーム上にでも位置し得る。
【0064】
[0070]この説明では、単一の半導体プラットフォームは、単独のユニタリー半導体ベース集積回路またチップを指し得る。単一の半導体プラットフォームという用語は、オンチップ演算をシミュレートし、従来の中央処理装置(CPU:central processing unit)及びバス実装を使用するのに比べて大幅に改良された、向上した接続性を有するマルチチップモジュールを指し得ることに留意された。勿論、様々なモジュールもまた、それぞれ別々に位置することも、ユーザの要望による様々な組合せの半導体プラットフォームに位置することもある。
【0065】
[0071]このシステムは、2次記憶装置710をも含み得る。2次記憶装置は、例えばハードディスクドライブ、及び/又はフロッピーディスクドライブ、磁気テープドライブ、コンパクトディスクドライブなどである取外し可能記憶ドライブを含む。取外し可能記憶ドライブは、よく知られているやり方で取外し可能記憶ユニットから読み出し、及び/又はそれに書き込む。
【0066】
[0072]コンピュータプログラム、又はコンピュータ制御論理アルゴリズムは、メインメモリ及び/又は2次記憶装置内に格納されてもよい。こうしたコンピュータプログラムは、実行されるとき、システムが様々な機能を実施することを可能にする。メモリ、記憶装置及び/又は他の記憶装置は、コンピュータ読取り可能媒体の可能な例である。
【0067】
[0073]一実施形態では、上記の様々な図のアーキテクチャ及び/又は機能性は、ホストプロセッサ、グラフィックスプロセッサ、ホストプロセッサとグラフィックスプロセッサの両方の能力の少なくとも一部が可能である集積回路(図示せず)、チップセット(すなわち関連する機能を実施するためのユニットとして働くように設計され、販売される集積回路群など)、及び/又はそれに関する他の任意の集積回路のコンテキストで実装されてもよい。さらに、上記の様々な図の要素割当て機能性は、1つの可能な実施形態では、ドライバ712の制御の下、上記集積回路のいずれかで実装されてもよい。
【0068】
[0074]さらに、上記の様々な図のアーキテクチャ及び/又は機能性は、一般的なコンピュータシステム、回路基板システム、娯楽専用のゲームコンソールシステム、アプリケーション固有のシステム、及び/又は他の任意の所望のシステムのコンテキストで実装されてもよい。例えば、システムは、デスクトップコンピュータ、ラップトップコンピュータ、及び/また他の任意のタイプの論理の形を取ってもよい。さらに、システムは、それだけに限らないが、携帯情報端末(PDA:personal digital assistant)装置、携帯電話装置、テレビなどを含めて、他の様々な装置の形を取ってもよい。
【0069】
[0075]さらに、示されてないが、このシステムは、通信のためにネットワーク(例えば通信ネットワーク、ローカルエリアネットワーク(LAN:local area network)、無線ネットワーク、インターネットなどの広域ネットワーク(WAN:wide area network)、ピアツーピアネットワーク、ケーブルネットワークなど)に結合されてもよい。
【0070】
[0076]様々な実施形態について上記で述べたが、それらは、例示するためだけに提示されており、限定するものではないことを理解されたい。したがって、好ましい実施形態の広さ及び範囲は、上記の例示的な実施形態のいずれかによって限定されるものではなく、添付の特許請求の範囲及びその等価物に従って定義されるものにすぎない。
【符号の説明】
【0071】
202 並行処理アーキテクチャ
204 並列プロセッサ
206 ローカル共有メモリ
208 グローバルメモリ
210 ドライバ
300 システム
302 処理要素
304 1ビット値
306 結果
400 システム
402 処理要素
404 加算器
406 処理要素
500 システム
502 処理要素
504 加算器
506 接頭部和値
600 システム
602 処理要素
604 加算器
606 第1レベル
608 第2レベル
701 ホストプロセッサ
702 通信バス
704 メインメモリ
706 グラフィックスプロセッサ
708 ディスプレイ
710 2次記憶装置

【特許請求の範囲】
【請求項1】
スキャン演算命令を受け取るステップと、
前記スキャン演算命令に応答して、複数の処理要素を備えた並列プロセッサアーキテクチャを使用して単一ビット値のシーケンスに対してスキャン演算を実施するステップと
を含む方法。
【請求項2】
前記スキャン演算が接頭部和スキャン演算を含む、請求項1に記載の方法。
【請求項3】
前記スキャン演算が包括的スキャン演算を含む、請求項1に記載の方法。
【請求項4】
前記スキャン演算が排他的スキャン演算を含む、請求項1に記載の方法。
【請求項5】
前記並列プロセッサアーキテクチャが前記処理要素間の調整のためのもの、請求項1に記載の方法。
【請求項6】
前記調整が、書き込まれる結果の宛先に関する調整を含む、請求項5に記載の方法。
【請求項7】
前記処理要素がそれぞれ、複数のスレッドを並列に実行する、請求項1に記載の方法。
【請求項8】
前記スキャン演算が、前記並列プロセッサアーキテクチャの複数の機能ユニットを使用して実施される、請求項1に記載の方法。
【請求項9】
前記機能ユニットが加算器を含む、請求項8に記載の方法。
【請求項10】
前記機能ユニットがブール論理演算子を含む、請求項8に記載の方法。
【請求項11】
前記機能ユニットが算術及び論理演算子を含む、請求項8に記載の方法。
【請求項12】
前記並列プロセッサアーキテクチャが複数レベルの機能ユニットを含む、請求項8に記載の方法。
【請求項13】
前記レベルの数が前記処理要素の数より小さい、請求項12に記載の方法。
【請求項14】
前記レベルの数が前記処理要素の数の対数より小さい、請求項12に記載の方法。
【請求項15】
前記並列プロセッサアーキテクチャが、マルチビット値の個々のビットのスキャンを個々に実施し、結果をビットシフトした後に前記個々のスキャンの結果を合計することによって前記マルチビット値に対する前記スキャン演算を実施する、請求項1に記載の方法。
【請求項16】
前記並列プロセッサアーキテクチャが1つ又は複数の単一命令多重データプロセッサを含む、請求項1に記載の方法。
【請求項17】
前記並列プロセッサアーキテクチャがグラフィックスプロセッサを含む、請求項1に記載の方法。
【請求項18】
コンピュータ読取り可能媒体内に具体化されたコンピュータプログラム製品であって、
スキャン演算命令に応答して、複数の処理要素を備えた並列プロセッサアーキテクチャを使用して単一ビット値のシーケンスに対してスキャン演算を実施するためのコンピュータコードを備えるコンピュータプログラム製品。
【請求項19】
複数の処理要素を含む並列プロセッサアーキテクチャと、
前記並列プロセッサアーキテクチャを使用して単一ビット値のシーケンスに対してスキャン演算を実施するための命令と
を備える装置。
【請求項20】
前記並列プロセッサアーキテクチャが、バスを介してメモリ及びディスプレイと通信したままの状態である、請求項19に記載の装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2009−169935(P2009−169935A)
【公開日】平成21年7月30日(2009.7.30)
【国際特許分類】
【外国語出願】
【出願番号】特願2008−263158(P2008−263158)
【出願日】平成20年10月9日(2008.10.9)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.フロッピー
【出願人】(501261300)エヌヴィディア コーポレイション (166)
【Fターム(参考)】