JP7109576B2 - グラフィックス処理ユニット上の高性能スパース三角解 - Google Patents

グラフィックス処理ユニット上の高性能スパース三角解 Download PDF

Info

Publication number
JP7109576B2
JP7109576B2 JP2020554425A JP2020554425A JP7109576B2 JP 7109576 B2 JP7109576 B2 JP 7109576B2 JP 2020554425 A JP2020554425 A JP 2020554425A JP 2020554425 A JP2020554425 A JP 2020554425A JP 7109576 B2 JP7109576 B2 JP 7109576B2
Authority
JP
Japan
Prior art keywords
elements
completion
array
value
row
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2020554425A
Other languages
English (en)
Other versions
JP2021513172A (ja
Inventor
エル. グレイトハウス ジョセフ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2021513172A publication Critical patent/JP2021513172A/ja
Application granted granted Critical
Publication of JP7109576B2 publication Critical patent/JP7109576B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)

Description

三角行列は、行列の主対角線の上又は下のゼロ要素のみを有するタイプの正方行列である。下三角行列は、主対角線の上にゼロ要素のみを有するため、行列内の非ゼロ要素は、下三角形内にあり、主対角線上又は主対角線の下にある。上三角行列は、主対角線の下にゼロ要素のみを有するため、行列内の非ゼロ要素は、上三角形内にあり、主対角線上又は主対角線の上にある。三角行列は、線型代数の分野において式の系を表すために使用することができる。
スパース三角行列は、埋められた三角形に相当な数のゼロ要素を有する三角行列であり、例えば、スパース下三角行列は、下三角形内に1つ以上のゼロ値を有する。スパース三角解(SpTS)は、式Ax=yにおけるベクトルxを解くプロセスであり、Aは、N行N列のスパース三角行列であり、xは、N個の未知の値を有するベクトルであり、yは、N個の既知の値を有するベクトルである。行列A内の非ゼロ値のみが主対角線上にあり、その対角線の片側にある場合、代入を使用してベクトルxを解くことが可能である。ベクトルエントリx[n]について解くことは、下三角行列内の前進代入(forward substitution)のケースでは、全ての前のベクトルエントリ(例えば、x[0]-x[n-1])を解いたことに依存する。しかしながら、行列がスパースである場合、三角行列値のいくつかはゼロであり、並列プロセッサ上で複数の行を並列に解くことが可能である。
本開示は、限定ではなく例として、添付図面の図に示されている。
実施形態による、スパース三角解(SpTS)を実行する並列コンピューティングシステムの実施形態を示す図である。 実施形態による、コンピューティングデバイスを示す図である。 実施形態による、コンピューティングデバイス内の複数の処理ユニット及びメモリを示す図である。 実施形態による、スパース三角行列の行列乗算及びベクトルを示す図である。 実施形態による、SpTSについての依存性グラフを示す図である。 実施形態による、圧縮スパース行(CSR)データセット及び完了アレイ(completion array)を示す図である。 実施形態による、ベクトル内の要素(factor)毎の完了フラグを識別するためのCSRデータセット内の要素を示す図である。 実施形態による、SpTSにおけるイベントのタイムラインを示す図である。 実施形態による、SpTSにおけるイベントのタイムラインを示す図である。 実施形態による、プロセッサコアにおいてSpTSを実行するモジュールを示すブロック図である。 実施形態による、SpTSを実行する処理を示すフローチャートである。 実施形態による、SpTSを実行する処理を示すフローチャートである。
以下の説明は、実施形態を十分に理解するために、特定のシステム、構成要素、方法等の例等の多数の特定の詳細を示す。しかしながら、少なくともいくつかの実施形態がこれらの特定の詳細無しに実施され得ることは、当業者には明らかであろう。他の例では、実施形態を不必要に曖昧にすることを避けるために、周知の構成要素又は方法は、詳細に説明されず、又は、単純なブロック図のフォーマットで示されている。よって、記載された特定の詳細は、例示的なものに過ぎない。特定の実装態様は、これらの例示的な詳細から変化してもよく、依然として実施形態の範囲内にあると考えられる。
スパース三角解(SpTS)は、式Ax=yにおけるベクトルx内の未知の値について解くことを試み、Aは、スパース三角行列であり、yは、既知の値のベクトルである。スパース三角行列内の行を並列に解くことは、一連のデータ依存性をもたらし、ベクトルx内の各要素x[n]の解は、前の要素x[0]-x[n-1]に依存する。解は、一連の階層(level)に分けることが可能であり、同一の階層内の要素は、直接又は推移的に相互に依存しないため、相互に並列して解くことが可能である。並列SpTSを即時に実行する際の主要な問題の1つは、特に、特定の入力行列が数千又は数百万の行及び列を含む場合に、特定の入力行列についてこのデータ依存性グラフを見つけることである。したがって、スパース三角解は、グラフィックス処理ユニット(GPU)ベースの並列コンピューティングシステム等の高度な並列アーキテクチャでは依然として不十分なパフォーマンスを示す可能性がある。並列コンピューティングシステムは、計算を開始する前に決定された依存性グラフに基づいて、又は、以前に計算された結果が利用可能な場合に並列ワーカ間で通信することによって、特定の要素について解くことをいつ開始するかを決定することができる。
並列コンピューティングシステム上でSpTSを実行する1つのアプローチは、最初に入力行列を分析して、並列に解くことができる行及び要素を決定し、次に階層内の各行を並列に解くためのスレッドを含む、階層毎の新たなカーネルを起動することを含む。しかしながら、SpTSを分析フェーズ及び解フェーズに分けることは、ユーザが、所望の解を得る前に、分析(実装レベルの詳細(implementation-level detail))を追加で呼び出す、より面倒なアプリケーションプログラミングインタフェース(API)をもたらす。更に、分析の実行に要する時間は、解の計算に要する時間を超える場合がある。実行する分析によっては、分析は、解フェーズよりも最大で数千倍の時間がかかる場合がある。行列が繰り返して使用されない場合、分析の実行に費やされた時間は、償却されない場合がある。
いくつかのケースでは、所定の階層内の要素は、既に解かれた前の階層内の要素のサブセットに依存することがある。よって、要素を解くことを進めることができるはずである。しかしながら、前の階層内で解かれていないままになっている他の要素が前の階層の完了を妨げている間、要素を解くことは続行しない。よって、SpTS計算を階層に分けると、いくつかの並列性が失われることがある。
別々の分析ステージを必要としない1つのアプローチでは、圧縮スパース列(CSC)フォーマットに従って格納されるスパース三角行列を演算することによって、解ステージの間に並列ワーカを動的に管理するSpTSが実行されてもよい。しかしながら、多くのアプリケーションは、スパース三角行列を圧縮スパース行(CSR)フォーマットで格納し、CSRデータセットをCSCフォーマットに転置すると、かなりの時間とメモリリソースを消費する可能性がある。
一実施形態では、並列コンピューティングシステムは、ベクトルxの要素がいつ解かれ、後続の計算で使用できるかを示す完了アレイを更新することによって、CSRフォーマットで格納された行列に対してSpTSを実行することができる。コンピューティングシステムによって起動されたカーネルは、行列の対応する行n内の要素を使用して、ベクトルx内の各要素x[n]を計算するためのスレッドを実行する。各スレッドでは、スピンループが実行され、完了アレイ内の完了フラグが繰り返し監視され、要素x[n]が依存する先行要素(行nについての入力変数を表す)が解かれたかどうかが判別される。先行要素が解かれた場合、要素x[n]の値の一部を計算するために使用される。
完了アレイ内の値に対してスピンループすることによって生じるメモリ競合を低減するために、スピンループの反復回数又はスピンループに費やされた時間が制限を超えた場合、スレッドは、現在のカーネルの完了後に開始するためにエンキューされた従属子カーネル(dependent child kernel)を起動する。残りのスレッドが完了した(すなわち、より多くの要素が解かれた)後、従属子カーネルは、新たなスレッドを開始して、完了アレイ内の同一の値に対してスピンループを再開する。
よって、この高性能SpTSメカニズムは、並列コンピューティングシステムが、CSC等の別のフォーマットに変換するための費用のかかる転置演算を実行することなく、並CSRフォーマットで格納されたスパース三角行列に対してSpTSを実行することを可能にする。行及びその対応する要素を階層にグループ化しないため、このメカニズムは、誤った依存性を生じさせず、SpTSを実行する際に更に動的な並列性を見つけることが可能である。高性能SpTSメカニズムは、個別の分析ステージを必要とせず、各並列ワーカは、先行要素が既知であるか、前の行を解くことで利用可能になると、対応する要素の値を計算するために、行を解くことを開始する。子カーネルを起動することによってスピンループをタイムアウトして後に再開することを可能にするメカニズムは、完了アレイ内の複数の完了フラグに対してスピンループすることに起因したメモリ競合を低減する。一実施形態では、この高性能SpTSメカニズムは、いくつかのケースにおいて、個別のステージにおいて分析及び解を実行するSpTSメカニズムよりも数千倍速く実行する。
図1は、並列コンピューティングシステム100の実施形態を示す図である。コンピューティングシステム100は、通信ネットワーク110を介して相互に接続された複数のコンピューティングデバイス101~103を含む。コンピューティングデバイス101~103の各々は、処理機能及びメモリ記憶機能を有する。一実施形態では、コンピューティングシステム100は、単一の物理筐体内に含まれ、通信ネットワーク110は、筐体内のコンピューティングデバイス101~103を接続するバス又はシステム相互接続である。例えば、コンピューティングデバイス101~103は、同一のボード上又はバックプレーンを介して相互に接続された個別のキャリアボード上に、GPU、中央処理装置(CPU)、フィールドプログラマブルゲートアレイ(FPGA)等の処理ユニットを含むことができる。一実施形態では、コンピューティングシステム100内の構成要素は、個別の物理筐体内に含まれ、地理的に分散されている。例えば、コンピューティングデバイス101~103は、インターネット等のワイドエリアネットワーク(WAN)、ローカルエリアネットワーク(LAN)、無線ネットワーク、又は、他の通信ネットワーク110を介して相互に接続された個々のサーバ、パーソナルコンピュータ、モバイルデバイス等を表すことができる。一実施形態では、コンピューティングデバイス101~103は、同一のタイプ又は類似のタイプのデバイスを表す。或いは、コンピューティングデバイス101~103は、異なるタイプのデバイスである。
図2は、高性能並列SpTSメカニズムが実装されたコンピューティングデバイス101の実施形態を示す図である。概して、コンピューティングデバイス101は、ラップトップ又はデスクトップコンピュータ、モバイルデバイス、サーバ等を含むがこれらに限定されない、いくつかの異なるタイプのデバイスとして具体化される。コンピューティングデバイス101は、バス201を介して相互に通信するいくつかの構成要素202~208を含む。コンピューティングデバイス101では、構成要素202~208の各々は、バス201を介して直接、又は、他の構成要素202~208のうち1つ以上を介して、他の構成要素202~208の何れかと通信することが可能である。コンピューティングデバイス101内の構成要素201~208は、ラップトップ若しくはデスクトップのシャーシ、又は、携帯電話ケース等の単一の物理筐体内に含まれる。代替の実施形態では、コンピューティングデバイス101の構成要素のいくつかは、コンピューティングデバイス101全体が単一の物理筐体内に存在しないように、周辺デバイスとして具体化される。
また、コンピューティングデバイス101は、ユーザから情報を受信し、又は、ユーザに情報を提供するためのユーザインタフェースデバイスを含む。具体的には、コンピューティングデバイス101は、キーボード、マウス、タッチスクリーン、又は、ユーザから情報を受信するための他のデバイス等の入力デバイス202を含む。コンピューティングデバイス101は、モニタ、発光ダイオード(LED)ディスプレイ、液晶ディスプレイ、又は、他の出力デバイス等のディスプレイ205を介して、ユーザに情報を表示する。
コンピューティングデバイス101は、有線ネットワーク又は無線ネットワークを介してデータを送信及び受信するためのネットワークアダプタ207をさらに含む。また、コンピューティングデバイス101は、1つ以上の周辺デバイス208を含む。周辺デバイス208は、大容量記憶装置、位置検出デバイス、センサ、入力デバイス、又は、コンピューティングデバイス101によって使用される他のタイプのデバイスを含むことができる。
コンピューティングデバイス101は、1つ以上の処理ユニット204を含み、複数の処理ユニット204の場合には並列に動作することが可能である。処理ユニット(複数可)204は、メモリサブシステム206に記憶された命令209を受信して実行するように構成されている。一実施形態では、処理ユニット(複数可)204の各々は、共通の集積回路基板上に存在する複数のプロセッシングコアを含む。メモリサブシステム206は、ランダムアクセスメモリ(RAM)モジュール、読み出し専用メモリ(ROM)モジュール、ハードディスク、及び、他の非一時的なコンピュータ可読媒体等のように、コンピューティングデバイス101によって使用されるメモリデバイスを含む。
コンピューティングデバイス101のいくつかの実施形態は、図2に示す実施形態よりも少ない又は多い構成要素を含んでもよい。例えば、特定の実施形態は、ディスプレイ205又は入力デバイス202無しに実施される。他の実施形態は、複数の特定の構成要素を有し、例えば、コンピューティングデバイス101の実施形態は、複数のバス201、ネットワークアダプタ207、メモリデバイス206等を有してもよい。
図3は、実施形態による、コンピューティングデバイス101の選択された構成要素を含むブロック図である。図3は、バス201を介してメモリ206に接続された処理ユニット204を示している。図3は、1つのコンピューティングデバイス101を示しているが、コンピューティングシステム100の他のコンピューティングデバイス(例えば、102~103)は、同様の構成要素を含む。
一実施形態では、処理ユニット204の各々は、GPU、CPU、FPGA又は他の処理デバイスであり、処理ユニット204のセット内の他の処理ユニットとは別の集積回路ダイ上に配置されている。処理ユニット204の各々は、単一の集積回路ダイ上のプロセッシングコアのセットを含む。処理ユニット204(1)は、プロセッシングコア301~303を含み、処理ユニット204(2)は、プロセッシングコア304~306を含み、処理ユニット204(3)は、プロセッシングコア307~309を含む。プロセッシングコアの各々は、命令209によって指示されるように、コンピュータプログラムにおいてスレッドを実行するように構成されている。プロセッシングコア301~309は、互いに独立して命令を実行することが可能であり、よって、SpTS処理において並列スレッドを実行することが可能である。並列スレッドの各々は、プロセッシングコア301~309のうち1つにおいて実行され、ベクトルx内の1つの要素の値を計算する。
また、メモリ206は、式Ax=yの高性能SpTSを実行するための命令セット209に加えて、スパース三角行列AをCSRデータセット321の形式で記憶し、入力データ322を記憶する。入力データ322は、解かれる未知の要素のベクトルxと、既知の積値のベクトルyと、を含む。また、メモリ206は、ベクトルx内の各要素の完了フラグを含む完了アレイ323を記憶し、各完了フラグは、対応する要素が解かれたかどうかを示す。一実施形態では、メモリ206内の情報は、コンピューティングデバイス1010内の単一のメモリデバイス又はサブシステムに記憶される。代替の実施形態では、情報は、同一のコンピューティングデバイス101又は複数のコンピューティングデバイス(例えば、101~103)内の複数のメモリデバイスに分散される。したがって、より広範囲のコンピューティングシステム100のメモリシステムは、複数のコンピューティングデバイス101~103に分散されたメモリデバイスを含むことができる。
図4Aは、実施形態による、積ベクトルy 430をもたらす、ベクトルx 420とスパース三角行列410との乗算(すなわち、Ax=y)を示す図である。行列A 410は、SpTSの入力として使用され、10個の非ゼロ要素を含む下三角行列である。行列A 410の主対角線は、要素a,c,e,g,jを含む。行列A 410が下三角行列であるため、前進代入で解くことができる。これは、以前の解かれた上位の行の結果を入力として使用していくつかの行が解かれることを意味する。したがって、矢印411~415は、前進代入処理におけるこれらの依存性を表す。例えば、各行1、2、3に対応する要素x[1]、x[2]及びx[3]を解くことは、解かれる行0に関連付けられた要素x[0]に依存する。これらの依存関係は、矢印411,412,413によって示されている。例えば、依存関係の矢印411は、行1から項bx[0]の値を計算することが、行0の項ax[0]を使用してx[0]を解くことに依存することを示している。依存関係の矢印414,415は、行4を介して要素x[4]を解くことが、非ゼロ要素c,gにそれぞれ対応するx[1]及びx[3]要素を解くことに依存することを示している。解かれたx[1]及びx[3]要素は、要素x[4]を解くときに、項hx[1]及びix[3]を計算するために使用される。高性能SpTSメカニズムは、下三角行列を解くために実行されるものとして本明細書で説明されているが、メカニズムは、上三角行列を解くために後退代入(backwards-substitution)を実行するために同様に使用されてもよい。
図4Bは、行列A 410のSpTSを実行するための依存性グラフ450を示す図である。グラフ内の各ノードは、解かれるベクトルx内の1つの要素を表している。図4Bにおける依存関係411~415は、図4Aの同様の符号の依存関係411~415に対応している。要素x[0]~x[4]の各々の計算は、個別のスレッドによって実行され、個別のスレッドの各々は、個別のプロセッシングコア(例えば、プロセッシングコア301~309の1つ)において実行される。
依存性グラフ450では、要素x[0]の値の計算は、依存関係が無く、他の要素が解かれるのを待機することなく最初に計算される。要素x[1]、x[2]及びx[3]の各々を解くことは、依存関係411,412,413の各々を介してx[0]に依存している。したがって、これらの計算は、x[0]が解かれ、利用可能になるときに開始される。x[1]、x[2]及びx[3]を解くために個別のスレッドにおいて実行される計算は、少なくとも部分的に並列に実行されるが、各々の要素の計算が完了するまでに異なる時間がかかる場合がある。x[4]を解くことは、依存関係414,415の各々を介してx[1]及びx[3]に依存する。よって、x[4]の全ての計算は、x[1]及びx[3]の両方が利用可能である場合に実行される。一実施形態では、複数のスレッドの各々は、要素x[0]~x[4]のうち1つを解く。代替の実施形態では、複数のスレッドを含む並列ワークグループは、1つの要素を解き、単一のスレッドは、複数の要素を解き、又は、複数のスレッドは、ベクトルx 420内の複数の要素を解く。
図4Cは、実施形態による、スパース三角行列A 410を表す圧縮スパース行(CSR)データセット321を示す図である。CSRデータセット321は、3つのアレイ(値アレイ(values[])、列アレイ(columns[])及び行ポインタアレイ(row_ptrs[]))を含む。値アレイは、行列A 410の非ゼロ要素を格納する。要素は、行列の左から右(各行内の列0から列4)、及び、上から下(行0から行4)に順に格納される。列アレイは、値アレイ内の要素毎に、要素が配置されている行列の列を識別する。列アレイは、値アレイと同じ数のエントリを有し、列アレイの各要素は、同じアレイインデックスを有する値アレイ内の対応する要素の列を識別する。行ポインタアレイは、行列の各行内に何れの要素があるかを識別する。具体的には、行ポインタアレイ内の各々の値は、各行の最初の値における値アレイ及び列アレイを指すインデックスである。行ポインタアレイ内の最終値は、値アレイ又は列アレイ内の最大インデックスよりも1つ大きい値である。
CSRフォーマットに格納された行列に対してSpTSを実行する1つのアプローチによれば、x[0]を解くためのスレッド0は、x[0]が解かれると、(x[1]、x[2]及びx[3]を解くための)従属スレッド1、2、3に通知する。しかしながら、CSRフォーマットが使用される場合、このような通知は、列アレイをウォークして、「0」を含む全てのエントリを検索する必要がある。これは、行が、列0内に非ゼロ値を有しているため、x[0]に対するデータ依存関係を有することを示している。列アレイ内で「0」エントリを見つけた後、スレッド0は、行ポインタアレイの検索を実行して、行ポインタアレイの何れの2つのインデックスの間に列アレイからの「0」エントリが存在するかを判別することによって、何れの従属スレッドを起動するかを判別する。列アレイをウォークし、行ポインタアレイを検索することは、計算負荷が高く、高性能SpTSの実行不可能なスローダウンをもたらす。
また、図4Cは、実施形態による、列アレイの計算負荷の高いウォークすること及び行ポインタアレイの検索を回避するために使用される完了アレイ323を示す図である。完了した各スレッドが従属スレッドを起動する代わりに、待機している従属スレッドの各々は、完了アレイ323をチェックして、その先行要素が解かれたかどうかを判別する。完了アレイ323は、ベクトルx 420内の要素毎に(よって、行列A 410内の行毎に)完了フラグを格納する。ベクトルx 420内の各要素は、同一のインデックスを有する完了アレイ内のフラグに対応する(すなわち、x[n]は、completion[n]に対応する)。SpTSを開始する前に、完了アレイ内の全てのフラグは、何れの要素も未だ解かれていないことを示す「0」に初期化される。スレッドがベクトルx 420内の1つの要素について解かれた値を書き込むことを終了する毎に、スレッドは、解かれた値が後続の計算における使用に対して利用可能であることを示すように、完了アレイ323内の対応する完了フラグをアサートする。一実施形態では、完了フラグは、その値が0である場合にデアサートされ、その値が非ゼロ値である場合にアサートされる。
図5は、実施形態による、完了アレイ323内の何れの完了フラグが、解かれるベクトルx 420の各要素を監視するかを決定するための、CSRデータセットアレイ内の要素の使用を示す図である。ベクトルx 420では、要素x[0]~x[4]の各々は、行列A 410の1つの行に対応し、よって、行ポインタアレイ内の1つの行ポインタ要素に対応する。したがって、1つの要素を解くために実行されるスレッドは、解かれる要素と行ポインタアレイ内で同一のインデックスを有する行ポインタ要素を識別する。行ポインタ要素は、行列A 410の対応する行の最初の非ゼロ値を識別する、列アレイ内の列要素を見つけるためのインデックスとして使用される。スレッドは、完了アレイ323内の完了フラグを見つけるためのインデックスとして列要素を使用する。
スレッドは、完了フラグを識別した後、完了フラグがアサートされるまで完了フラグを繰り返しチェックするスピンループを実行する。完了フラグがアサートされると、スレッドは、列アレイ内の次の列要素を見つけることによって(例えば、インデックスを1つインクリメントすることによって)、監視する次の完了フラグを識別する。スレッドは、スピンループを実行して、次の完了フラグを監視する。この処理は、次の列要素が要素のインデックスに等しくなり、これにより、行列A 410の主対角線上の要素に対応するまで繰り返される。監視された完了フラグの各々は、先行要素の1つ(要素の解が依存する)が解かれたかどうかを示す。よって、主対角線に到達すると、行の全ての先行要素が解かれ、スレッドは、自身の要素を解くことが可能である。
要素x[0]についてのこの処理を実行する場合、「0」の値を有する対応する列要素は、既に主対角線上の要素を表す。したがって、スレッドは、既に、何れの完了フラグをチェックする必要なく、x[0]を解くことが可能である。
図6は、実施形態による、SpTS内のイベントのタイムラインを示す図である。図6に示すように、ベクトルx内の各要素は、並列スレッド0~4の1つによって解かれる。一実施形態では、スレッド0~4は、1つ以上の処理ユニット(例えば、処理ユニット(複数可)204)において実行され、各スレッドは、1つのプロセッシングコア(例えば、コア301~309のうち1つ)において実行される。代替の実施形態では、各要素は、ワークグループの複数のスレッドによって解かれてもよいし、ワークグループは、複数の要素を解いてもよい。図6のタイムラインでは、時間が上から下に進む。図の右側は、SpTS処理中の異なる時点における完了アレイ323内の完了フラグの値を示す。
時間601において、完了アレイ323は、全ての完了フラグが、要素が未だ解かれていないことを示す「0」に設定されることで初期化される。スレッド0、1、2、3、4は、ベクトルy430から積値y[0]、y[1]、y[2]、y[3]、y[4]を読み出し、行列の主対角線から要素a、c、e、g、jを読み出す。ベクトルy 430からの積値及び主対角線要素は、ベクトルx 420からの要素を解くために各スレッドによって使用される既知の値である。
時間602において、スレッド1~3の各々(要素x[1]~x[3]にそれぞれ対応する)は、図5に示す判定に基づいて、完了アレイ(すなわち、completion[0])のインデックス0における完了フラグの状態を監視するためにスピンループを実行する。要素x[4]に対応するスレッド4は、図5に示す判定に従って、completion[1]の状態を監視するためにスピンループを実行する。この時間602の間、スレッド0は、依存関係を持たず(図5を参照して前述したように)、x[0]を解くことを続行する。スレッド0は、y[0]をaで除算し、結果をx[0]としてベクトルx 420に格納する。結果を格納した後、スレッド0は、非ゼロ値をcompletion[0]に書き込むことによって、completion[0]をアサートする。
時間603において、completion[0]における完了フラグは、アサート状態にある。スレッド1~3の各々について、列アレイ内の次の列要素は、主対角線上にあり(図5を参照)、したがって、スレッド1~3についての先行要素の全ての値が解かれている。スレッド1~3は、各々のスピンループを終了し、各々の要素を解くことを続行する。各スレッド1~3は、x[0]の新たに計算された値を、式Ax=yでx[0]を乗算する行列要素(例えば、b、d、f)とともに読み出す。時間604において、スレッド1~3は、x[0]、行列要素(b、d、f)、及び、行の積値(y[1]~y[3])に基づいて、要素x[1]~x[3]を解く。スレッド1~3は、x[1]~x[3]の結果の計算値をベクトルx 420に格納する。
計算値を格納した後、各スレッド1~3は、これらの要素が解かれたことを示すために、要素x[1]~x[3]に対応する完了フラグをアサートする。よって、スレッド1、2、3は、これらの位置に非ゼロ値を格納することによって、completion[1]、completion[2]、completion[3]をアサートする。
時間605において、completion[1]は、アサート状態にあり、したがって、スレッド4は、completion[1]に対するスピンループを停止し、x[1]の新たに計算された値を、式Ax=yでx[1]を乗算する行列要素hとともに読み出す。時間606において、スレッド4は、非ゼロ要素を含む行列の行内の次の列を識別する。列アレイでは、columns[8]の位置(行4についてのcolumns[7]の初期位置に隣接する)は、行4内の次の非ゼロ要素が列3内の非対角線要素であることを示す。したがって、スレッド4は、列3に対応するcompletion[3]の完了フラグの状態を監視するためにスピンループを開始する。
時間607において、x[3]は、以前に解かれており、その完了フラグは、時間603においてスレッド3によってアサートされている。また、非ゼロ値を有する行4内の次の列(columns[9]によって指定される)は、行列A 410の主対角線上にある。したがって、完了アレイ323は、全ての先行要素が解かれていることを示す。それに応じて、スレッド4は、スピンループを終了し、要素x[4]の値を計算するために使用する値x[3]及びiを読み出すことを開始する。時間608において、スレッド4は、先行要素x[1]、x[2]、行列要素h、i、j、及び、積値y[4]に基づいて、要素x[4]の値を計算する。x[4]が解かれると、スレッド4は、completion[4]に非ゼロ値を格納することによって、completion[4]で完了フラグをアサートする。
一実施形態では、スレッド0~4は、非ゼロ値として「1」又は他の固定数を書き込むことによって、完了アレイ323内の各完了フラグをアサートする。或いは、図6に示すように、完了アレイ323の更新は、階層セット情報を生成するために使用される。単純に値「1」で完了フラグをアサートする代わりに、スレッドをアサートすることは、先行要素の完了フラグの中で最高値をインクリメントすることによって、解かれた要素についての完了フラグの値を決定する。次に、スレッドは、完了アレイ323内の完了フラグの決定された値を要素に対応する位置に格納することによって、要素についての完了フラグをアサートする。
例として、これらのスレッド1~3の各々について、先行要素(すなわち、x[0])の最高完了フラグ値は1である。これをインクリメントすることによって、新たな完了フラグ値「2」がもたらされる。よって、時間604においてスレッド1、2、3は、各々の要素x[1]、x[2]、x[3]の値「2」を使用して完了フラグをアサートする。スレッド4が、時間608において解かれた要素x[4]の完了フラグをアサートする場合、先行要素x[1]及びx[2]に対応する完了フラグのうち最高完了フラグは、「2」の値を有する。したがって、スレッド4は、「3」のインクリメントされた値を使用して、x[4]の完了フラグをアサートする。
SpTSの終了時(時間609)、全ての完了フラグ要素がアサートされた完了アレイ323は、新たなベクトルxの要素を後に解くための順序を決定するためにオプションで使用することができる階層セットを示す。前述した例を続けると、要素[1,2,2,2,3]を含む完了アレイは、x[0]が階層1内で最初に解かれ、次に、x[1]、x[2]、x[3]が階層2内で並列に解かれ、最後に、x[4]が階層3内で解かれる、ことを示す。よって、完了アレイ323は、同一の行列A 410の後の計算において使用することができる階層セット情報を効率的に生成するために使用される。
図7は、スピンループによって生じるメモリ競合を低減するために、スピンループを実行するスレッドがタイムアウトして子カーネルを起動することができる、SpTSの実施形態を実行するイベントのタイムラインを示す図である。特に、行列Aが多数の行及び/又は依存性の長い連鎖を有するケースでは、多数の対応する要素の完了状態を繰り返しチェックするスピンループは、完了アレイ323を読み出すために繰り返されるメモリアクセスに起因して、かなりの量のメモリ競合を生じさせることがある。メモリ競合は、これらの要素を解き、SpTSにおいて進捗を進めようとするスレッドをスローダウンさせ、スピンループに費やされる時間を長引かせる。スピンループを実行する各スレッドは、スピンループサイクルの全体的な回数を低減するために、反復回数又はスピンループに費やされた時間が所定の閾値を超えた場合に、スピンループを終了する。スピンループは、SpTSにおける更なる進捗が行われた(すなわち、更なる要素が解かれる)後に、子カーネルの対応するスレッドにおいて再開される。
図7に示すように、スレッド0~4の各々は、ベクトルx 420内の要素x[0]~x[4]のうち1つを解くために、第1のカーネル711において実行される。各スレッド0~4は、各々の要素x[0]~x[4]が前のスレッドによって既に解かれているかどうかを判別するために、完了アレイをチェックすることによって開始する。要素が既に解かれている場合、スレッドは直ちに終了する。時間702において、完了アレイ323は、「0」要素のみを含み、よって、ベクトルx 420内の何れの要素も解かれていないことを示す。したがって、スレッド1~3は、x[0]を解くためにcomplete[0]を監視するようにスピンループを実行し、スレッド4は、x[1]を解くためにcomplete[1]を監視するようにスピンループを実行する。スレッド0は、x[0]を解き、completion[0]で関連する完了フラグをアサートする。
スレッド1~3の各々は、スピンループによって監視される完了フラグがアサートされるまで、又は、スピンループの反復回数が所定の制限を超えるまで、そのスピンループを実行し続ける。時間703において、completion[0]におけるx[0]についての完了フラグは、アサート状態にある。よって、スレッド1~3は、スピンループの反復が所定の制限を超える前に、各々の要素x[1]~x[3]を解くことを開始する。しかしながら、スレッド4は、x[1]が解かれる前に、x[1]についての完了フラグにおいて、所定の反復制限を超えるスピンループを実行する。スレッド4は、スピンループを終了することによって止まり、子カーネルが他のスレッドによって既に起動されているかどうかを示すグローバル「child_launched」変数をチェックする。「child_launched」変数がアサートされた場合、子カーネルは、別のスレッドによって既に起動されており、スレッド4は、子カーネルを起動せずに終了する。「child_launched」変数がアサートされていない場合、子カーネルは、それまで起動されておらず、スレッド4は、第1のカーネル711が完了した後(すなわち、カーネル711内の全ての他のスレッドが完了したとき)に開始するようにエンキューされる第2のカーネル712を起動する。カーネル712の起動に関連して、スレッド4は、第1のカーネル711内の他のスレッドがこのような方法で子カーネルを起動しようとすることを防止するために、「child_launched」変数をアサートする。その後、スレッド4は終了する。このメカニズムによって、非常に多くの反復を実行し又はスピンループに非常に多くの時間を費やすスレッドは、更なる進捗が行われるまで、メモリシステムにアクセスすることを一時的に停止する。
時間703の終了時、並列スレッド0~4の全てが完了すると、第1のカーネル711は終了する。時間704において、第2のカーネル712が起動され、同じ要素x[0]~x[4]に対して並列スレッド0~4が再度呼び出される。グローバル「child_launched」変数は、子カーネル712の起動に関連してデアサート状態に初期化される。スレッド0~4は、各々の要素x[0]~x[4]の完了フラグをチェックする。要素x[0]~x[3]が既に解かれていることを完了アレイ323が示すので、スレッド0~3は終了する。
しかしながら、complete[4]における完了フラグは、デアサートされ、要素x[4]が解かれていないことを示す。スレッド4は、(completion[1]における)x[1]、及び、(completion[3]における)x[3]についての完了フラグをチェックするようスピンループを実行することによって、先行要素x[1]及びx[3]が解かれているかどうかを判別する。時間705において、スレッド4は、completion[1]における完了フラグに基づいて、x[1]が既に解かれていると判別する。時間706において、スレッド4は、completion[3]における完了フラグに基づいて、x[3]が既に解かれていると判別する。要素x[4]の解が依存する先行要素の全てが解かれているので、スレッド4は、時間707においてx[4]を解くことを続行する。要素x[0]~x[4]の全てが解かれると、子カーネルが起動されず、SpTSが完了する。
図8は、実施形態による、CSRデータセット321に対して高性能SpTSを実行するプロセッシングコア301内のモジュールのブロック図である。一実施形態では、プロセッシングコア301内のモジュール801~805は、硬化回路モジュール(hardened circuit module)を使用して実装されている。代替の実施形態では、モジュール801~805は、プログラム可能論理回路(例えば、プロセッシングコア301がFPGA若しくは他のプログラム可能デバイスを使用して実装される場合)、ソフトウェアモジュール、又は、ハードウェア、ソフトウェア、プログラム可能ロジックの組み合わせ等を使用して実装される。一実施形態では、モジュール801~805は、ベクトルxのn番目の要素を表す要素x[n]を解くためにスレッド800において実行される演算を実行する。一実施形態では、スレッド800は、図6又は図7を参照して説明したように、スレッド0~4と同様に機能する。
スピンループモジュール801は、図5を参照して前述したように、(行ポインタアレイ及び列アレイから)ポインタ811を読み出して、適切な完了フラグを決定して完了アレイ323を監視し、スピンループを実行して、完了アレイ323からの完了フラグ810を繰り返しチェックする。よって、スピンループモジュール801は、解かれる要素x[n]が依存する先行要素の可用性を判別する。
一実施形態では、スレッド800は、スピンループに時間がかかり過ぎた場合又は反復回数が多過ぎた場合に、子カーネルを終了して起動することによって、メモリ競合を低減する。モジュール801によって実行されるスピンループの各反復は、カウンタ802によってカウントされる。反復回数(又は、スピンループに費やされた時間)は、所定の制限803と比較され、スピンループの反復回数(又は、スピンループに費やされた時間)が制限803を超えた場合、子ランチャ804は、「child_launched」変数817をチェックする。子カーネルが別のスレッドによって起動されていないことを「child_launched」変数817が示す場合、子ランチャ804は、現在のカーネル711内の全てのスレッドが完了した後に開始するようにエンキューされた子カーネル712を起動する。よって、スレッド800は、制限803を超えたことに応じて、スピンループを停止し、次に、SpTSにおいて更なる進捗が行われた(すなわち、更なる要素が解かれた)後に、子カーネル712においてスピンループを再開する。
ソルバー(solver)モジュール805は、完了アレイ323内の関連する完了フラグによって示されるように、x[n]の先行要素の全てが解かれたとスピンループモジュール801が判別したことに応じて、要素x[n]の値を計算する。ソルバー805は、x[n]に対応する行内の行列要素812を、CSRデータセット321から読み出し、積値y[n]を、x[n]に対応する積ベクトルy 430から読み出し、解かれた先行要素814を、ベクトルx 420から読み出す。ソルバー805は、先行要素814、積y[n]813、行列要素812をAx=yによって定義される行の式に代入することによって要素x[n]の値を計算し、要素x[n]を代数的に解く。
ソルバー805は、x[n]の解かれた値815を要素ベクトルx 420に格納し、他のスレッドにおいて要素を解くために使用可能にする。また、ソルバー805は、x[n]の完了フラグ816について非ゼロ値を決定し、値を完了アレイ323に格納することによって、完了アレイ323の完了フラグをアサートする。一実施形態では、ソルバー805は、要素x[n]の階層を計算するために、先行要素の完了フラグのうち最高値をインクリメントすることによって、完了フラグの値を決定する。或いは、ソルバー805は、「1」又は別の固定値を完了フラグに使用する。
図9A及び図9Bは、CSRフォーマットで格納されたスパース三角行列に対して高性能SpTSを実行する処理900を示す図である。処理900の動作は、コンピューティングシステム100の構成要素(例えば、メモリシステム206、プロセッシングコア301内のモジュール801~805等)によって実行される。
ブロック901において、メモリシステム206は、スパース三角行列A410をCSRデータセット321として格納する。CSRデータセット321内では、値アレイは、行列A 410の要素を格納し、列アレイは、値アレイに格納された要素毎に行列A 410の列を識別し、行ポインタアレイは、行列A 410の各行の要素を識別する。CSRデータセット321内のこれらのアレイは、図4Cに示されている。
また、メモリシステム206は、要素x[0]~x[4]の各々についての完了フラグを含む完了アレイ323(completion[])をベクトルx 420に格納する。ブロック903において、完了アレイ323内の完了フラグの各々は、何れの要素も解かれていないことを示す「0」に初期化される。ブロック905において、複数の並列スレッドが開始され、各スレッドは、ベクトルx 420内の1つの要素を計算する。1つの並列スレッド800は、要素x[n]の値を計算するために開始され、nは、概して、ベクトルx 420内の要素x[n]のインデックスを表す。
ブロック907において、スレッド800は、completion[n]における完了フラグを読み出すことによって、要素x[n]が前の処理によって既に解かれているかどうかを判別する。completion[n]が非ゼロ値である場合(すなわち、アサートされた場合)、スレッド800は、x[n]が既に解かれているのでブロック933において終了する。completion[n]がゼロである場合(すなわち、デアサートされた場合)、処理900は、ブロック909に進む。
x[n]の値は、ベクトルx 420内の1つ以上の先行要素のセットの各々に依存するデータである。すなわち、先行要素の値は、x[n]の値を計算するために使用される。よって、ブロック909において、スピンループモジュール801は、CSRデータセット321内の行ポインタアレイ及び列アレイに基づいて、監視するための次の先行要素を識別する。要素x[n]と同じインデックスnを有する行ポインタは、列アレイ内の位置を識別するインデックスとして使用される。列アレイ内の識別された位置は、要素x[n]に対応する行列A 410の行n内の非ゼロ要素の列を識別する。図5を参照した例として、要素x[4]について、row_ptrs[4]は、「7」の値を有し、columns[7]は、「1」の値を有する。これは、行列A 410の行4では、非ゼロ要素が列1にあることを示す。図4Aに示すように、この非ゼロ要素は「h」である。
ブロック910において、列アレイ内の識別された位置のインデックスがrow_ptrs[n+1]に等しくない場合、行n内の非ゼロ要素を含む全ての列がトラバースされているわけではなく、全ての先行要素についてスピンループが実行されてるわけではない。行4について前の例を続けると、row_ptrs[4+1]は、「10」である。先行要素x[1]に対応する識別された非ゼロ要素「h」についての列アレイ内の現在のインデックスは、「7」である。これらの値は等しくないので、行4についての全ての列がトラバースされているわけではなく、処理900は、ブロック911に進む。
ブロック911において、スピンループモジュール801は、識別された非ゼロ要素が行列A 410の主対角線上に位置するかどうかを判別する。一実施形態では、非ゼロ要素は、その列番号が要素のインデックス(すなわち、「n」)に等しい場合、主対角線上にある。要素が主対角線上に位置する場合、処理900は、スピンループを実行せずに、ブロック909に戻る。主対角線上の要素に対応する要素は、スレッド800によって解かれる要素x[n]である。したがって、その完了フラグを監視するためのスピンループは実行されない。処理900は、代わりに、ブロック910において次の先行要素に進む。ブロック911において、要素が非対角線に位置する場合(主対角線上にない場合)、要素は先行要素に対応し、処理900は、ブロック913に進む。
ブロック913において、スピンループモジュール801は、メモリ206内の完了アレイ323から完了フラグ810を読み出すことによって、第1の先行要素についての完了フラグをチェックする。図5を参照して前述の例を続けると、列アレイ内の識別された要素は、先行要素についての完了フラグのインデックスを完了アレイ323に格納する。よって、スピンループモジュール801は、completion[1]において、先行要素x[1]が解かれているかどうかを示す完了フラグを読み出す。ブロック915において、完了フラグがアサートされない場合、先行要素は解かれておらず、処理900は、ブロック917に進む。
ブロック917において、スピンループモジュール801は、実行されたスピンループの反復回数をカウントするスピンループカウンタ802をインクリメントする。カウントされた反復回数は、制限803と比較され、ブロック919において、カウントされた反復回数が制限803を超えていない場合、処理900は、ブロック913に戻る。よって、処理900は、ブロック913~919をループして、完了フラグがアサートされるまで又は制限803を超えるまで、第1の先行要素の完了フラグを監視するためのスピンループを実行する。
スピンループの間、完了フラグがアサートされると、処理は、ブロック915からブロック909に進む。ブロック909において、スピンループモジュール801は、要素x[n]に対する解が依存する次の先行要素を識別する。列アレイは、行n内の非ゼロ要素を識別する。したがって、行内の次の非ゼロ要素は、直近に識別された非ゼロ列に隣接する列アレイに示される。よって、直近に識別された列のインデックスは、1だけインクリメントされる。図5を参照して前の例を続けると、非ゼロ値を格納した行4内の直近に識別された列は、columns[7]において示される。よって、行4内の次の非ゼロ要素は、columns[7+1]又はcolumns[8]において示される。列アレイ内のこの位置は、行4が列3において非ゼロ値を有することを示す。図4Aに示すように、この値は「i」である。
行4の列3は、列アレイ内でrow_ptrs[4+1]に等しくない「8」のインデックスを有する。したがって、処理900は、ブロック910から911に進む。行4の列3は、行列A 410内の非対角線要素である。したがって、処理900は、ブロック911からブロック913に進む。ブロック913において、スピンループモジュール801は、列アレイ内の現在の位置において指定された完了フラグを読み出す。前の例を続けると、columns[8]は、列3を指定する。したがって、x[3]が解かれるかどうかを示すcompletion[3]の完了フラグを監視するために、スピンループが実行される。よって、ブロック909~919を繰り返して、要素x[n]についての複数の先行要素(例えば、x[1]及びx[3])の完了フラグを順に監視するためのスピンループを実行する。
ブロック910において、列アレイ内の非ゼロ要素のインデックスがrow_ptrs[n+1]に等しい場合、行n内の非ゼロ要素を含む全ての列がトラバースされる。これは、スピンループ処理が、全ての先行要素についてアサートされた完了フラグを検出したことを意味する。前の例を続けると、行4の列1、3、4には、非ゼロ要素が含まれている。最後の列「4」は、列アレイ内の「9」のインデックスを有する。行4について、row_ptrs[n+1]は、「10」に等しい。よって、列アレイについてのインデックスが「10」にインクリメントされるまで、非ゼロ要素を有する(「7」~「9」のインデックスを有する)全ての列が、スピンループモジュール801によってトラバースされている。すなわち、スピンループ処理は、全ての先行要素x[1]及びx[3]についての完了フラグがアサートされていると判別している。この時点で、全ての先行要素が解かれている。よって、ブロック921において、ソルバー805は、解かれた先行要素814、x[n]に対応する行列A 410の行n内の要素812、及び、x[n]に対応する積値y[n]813に基づいて、要素x[n]の値を計算する。x[n]815について計算された値は、メモリシステム206内のベクトルx 420に書き込まれる。前の例においてnが「4」に等しい場合、ソルバー805は、(y[4]-hx[1]-ix[3])/jからx[4]を計算し、結果をベクトルx 420に書き込む。
ブロック923において、ソルバー805は、x[n]の完了フラグをアサートするための非ゼロ値を計算する。ソルバー805は、x[n]の解が依存する先行要素の完了フラグの中で最高値を有する完了フラグをインクリメントする。x[4]の場合、先行要素x[1]及びx[3]についての完了フラグは、図6の時間605に示すように、「2」及び「2」である。最高値を有する完了フラグが「2」であるため、x[4]についての完了フラグは3である。ブロック925において、ソルバー805は、完了フラグ816を、完了アレイ323内の要素に対応する位置に書き込む。一実施形態では、完了フラグは、完了アレイ内で、ベクトルx 420内の要素x[n]と同一のインデックスnを有する(例えば、completion[n]は、要素x[n]に対応する)。完了フラグは、x[n]が解かれたことを示す。よって、スレッドは、ブロック933において終了する。
ブロック919において、カウンタ802によってカウントされたスピンループの反復回数が制限803を超えた場合、処理900は、ブロック927に進む。ブロック927において、子ランチャ804は、現在のカーネルの子カーネルが以前に起動されたかどうかを示すchild_startedグローバル変数817をチェックする。child_started変数817がアサートされている場合、スレッドは、子カーネルを起動することなくブロック933において終了し、よって、スピンループが終了する。ブロック927において、child_started変数817がデアサートされている場合、子カーネルは、以前に起動されておらず、処理900は、ブロック929に進む。ブロック929において、子ランチャ804は、子カーネルを起動し、現在のカーネルの完了後に開始するように子カーネルをエンキューする。よって、子カーネルは、現在実行中のカーネルの全ての並列スレッドが終了した後に、新たな並列スレッドのセットを開始するようにエンキューされる。
ブロック931において、子ランチャ804は、子カーネル及びその並列スレッドの起動及びエンキューに関連して、子開始フラグ(child started flag)をアサートする。これにより、現在実行中の他のスレッドがスピンループの制限803を超えて別の子カーネルを起動及びエンキューするのを防止する。子カーネルが既にエンキューされている場合、スピンループ制限803に起因して終了した現在のカーネル内のスレッドは、同一の子カーネル内の対応するスレッドにおいて継続される。ブロック933において、スレッドは終了する。
ブロック935において、プロセッシングコア301は、現在のカーネル内の残りの並列スレッドが終了するのを待機する。並列スレッドの各々は、その要素を解くことを終了するか、スピンループ制限803を超えたことに起因して終了するかの何れかである。全てのスレッドが終了すると、カーネルが完了し、処理900は、ブロック937に進む。
ブロック937において、子カーネルがエンキューされている場合(すなわち、ブロック929において)、処理は、ブロック939に進む。ブロック939において、エンキューされた子カーネルが開始する。子カーネルは、ベクトルx 420内の要素x[n]の各々についてスレッドを開始する。前のスレッドにおいて既に解かれた(完了アレイによって示される)要素を解くためのスレッドは、ブロック907及び933を介して終了する。残りの解かれていない要素は、前述したように解かれる。新たなスレッドは、スピンループ(すなわち、ブロック909~919)を実行して、各々の要素についての全ての先行要素が利用可能になるタイミングを判別し、先行要素が解かれた後にこれらの要素を解く。各子カーネルは、スピンループ制限803を超える1つのスレッドの1つを介して、ベクトルx 420内の全ての要素が解かれ、SpTS全体が完了するまで、ブロック919及び927~933を介して自身の子カーネルを起動及びエンキューすることもできる。
ベクトルx 420内の全ての要素が解かれると、ブロック907又はブロック925からブロック933において全てのスレッドが終了し、子カーネルはエンキューされない。よって、処理900は、ブロック937からブロック941に進み、SpTSが完了する。
一実施形態では、図9Bに示すように、ブロック901~941は、行列A 410の第1のSpTSを実行する動作を表し、ブロック943~947は、行列A 410の第2のSpTSを実行する動作を表す。第2のSpTSについて、第1のSpTSを実行することによって生成された完了アレイは、式Ax’=y’内の第2のベクトルx’を解くときに使用される。ここで、Aは、第1のSpTSからの同一の行列A 410であり、x’は、ベクトルx 420とは異なる未知の要素の第2のベクトルであり、y’は、ベクトルy430とは異なる既知の積値の第2のベクトルである。
ブロック943において、処理ユニット(例えば、処理ユニット204のうち1つ)は、ベクトルx’内の解かれる要素の階層を決定する。ベクトルx’内の各要素の階層は、以前に生成された完了アレイ内の要素と同一のインデックスを有する対応する完了フラグによって示される。例えば、以前に生成された完了アレイは、完了フラグ[1,2,2,2,3]を含み、階層1は、x’[0]を含み、階層2は、x’[1]、x’[2]、x’[3]を含み、階層3は、x’[4]を含む。同一の階層内の要素は、並列に解くことが可能である。
ブロック945において、処理ユニットは、決定された階層に対応する順序でベクトルx’内の要素x’[n]の各々についての値を計算し、低い番号の階層内の要素は、高い番号の階層内の要素よりも前に解かれ、同一の階層内の要素は、並列に解かれる。各要素x’[n]は、その先行要素、行列A 410の対応する行内の要素、及び、対応する積値y’[n]に基づいて解かれる。要素x’[n]が階層に従った順序で解かれる場合、各要素は、その先行要素が既に解かれた後に解かれる。全ての要素が解かれた後に、第2のSpTSは、ブロック947において完了する。
よって、処理900は、並列コンピューティングシステム(例えば、コンピューティングシステム100)が、CSRデータセットの異なるフォーマット(CSC等)へのコストのかかる変換を行うことなく、及び、コストのかかる依存性分析を行うことなく、CSRフォーマットに格納された行列に対してSpTSを実行することを可能にする。したがって、このアプローチを採用する並列コンピューティングシステムは、同じ結果を達成するための他のアプローチと比較して、電力を消費せず、少ないコンピューティングリソースを利用し、少ない時間で解を計算する。
方法は、スパース三角行列を圧縮スパース行(CSR)データセットとして格納することと、第1のベクトル内の複数の要素毎に、要素の値を計算することと、を含む。要素の値を計算することは、要素について、第1のベクトル内の1つ以上の先行要素のセットを識別することであって、要素の値は、1つ以上の先行要素の各々に依存する、ことと、1つ以上の先行要素の全ての値が解かれたことを完了アレイが示すことに応じて、行列の行内の1つ以上の要素、及び、行に対応する積値に基づいて、要素の値を計算することと、完了アレイにおいて、要素が解かれたことを示す、要素の第1の完了フラグをアサートすることと、を含む。
方法は更に、行列の要素をCSRデータセットの列アレイに格納することと、CSRデータセットの列アレイにおいて、値アレイに格納された要素毎に行列の列を識別することと、CSRデータセットの行ポインタアレイにおいて、行列の各々の行内の要素を識別することと、を含む。
方法は更に、複数の要素毎に、要素の値を計算するためのスレッドを開始することを含み、スレッドは、並列に実行される複数のスレッドのうち1つのスレッドである。
方法は更に、複数のスレッド毎に、完了アレイ内の第2の完了フラグを監視するためにスレッドにおいて実行されるスピンループの反復回数をカウントすることであって、第2の完了フラグは、1つの先行要素に関連付けられている、ことと、反復回数が制限を超えたことに応じて、スピンループを終了することと、複数の並列処理スレッドの全てが完了した場合に、実行される新たなスレッドをエンキューすることと、新たなスレッド内の完了フラグを監視することと、を含む。
方法は更に、子開始フラグをチェックすることであって、新たなスレッドをエンキューすることは、子開始フラグがデアサートされた場合に実行される、ことと、新たなスレッドをエンキューすることに関連して、子開始フラグをアサートすることと、を含む。
方法は更に、複数の要素毎に、第1のスピンループを実行して、完了アレイ内の第1の完了フラグを監視することであって、第1の完了フラグは、CSRデータセットの列アレイ内の第1の位置において指定されており、列アレイ内の第1の位置は、要素に対応する行ポインタによって示されている、ことと、第1の完了フラグがアサートされ、列アレイ内の第2の位置がスパース三角行列の非対角線要素に対応すると判別したことに応じて、第2のスピンループを実行して、完了アレイ内の第2の完了フラグを監視することであって、第2の完了フラグは、列アレイ内の第2の位置において指定されている、ことと、を含む。
方法では、行ポインタアレイ内の行ポインタの位置は、ベクトル内の要素の位置に対応しており、行ポインタは、列アレイ内の第1の位置のインデックスであり、列アレイの第1の位置は、完了アレイの完了フラグのインデックスを格納する。
方法は更に、複数の要素毎に、先行要素の各々の完了フラグを格納することと、先行要素の完了フラグの中で最高値の完了フラグをインクリメントすることによって、要素の完了フラグの値を決定することと、要素の完了フラグの決定された値を、要素に対応する位置の完了アレイに格納することによって、要素の完了フラグをアサートすることと、を含む。
方法は更に、第2のベクトル内の複数の要素毎に、完了アレイ内の要素に対応する完了フラグの値に基づいて、要素の階層を決定することと、決定された階層に応じた順序で第2のベクトル内の各要素の値を計算することと、を含み、同一の階層内の複数の要素のうち少なくとも2つの要素の値は、並列に計算される。
方法では、CSRデータセットは、メモリシステムに格納され、複数の要素毎に、要素の値は、メモリシステムに接続されたソルバー回路において計算される。
方法は更に、スピンループ回路を使用して、完了アレイから第1の完了フラグを読み出すことを含み、完了アレイは、メモリシステムに格納されており、完了アレイの第1の完了フラグをアサートすることは、スピンループ回路とメモリシステムとに接続されたソルバー回路によって実行される。
コンピューティングデバイスは、スパース三角行列を圧縮スパース行(CSR)データセットとして格納するメモリと、メモリに接続された処理ユニットと、を含む。処理ユニットは、第1のベクトル内の複数の要素毎に、要素について第1のベクトル内の1つ以上の先行要素のセットを識別することによって要素の値を計算し、要素の値は、1つ以上の先行要素の各々に依存しており、1つ以上の先行要素の全ての値が解かれたことを完了アレイが示すことに応じて、行列の行内の1つ以上の要素及び行に対応する積値に基づいて要素の値を計算し、完了アレイにおいて、要素が解かれたことを示す要素の完了フラグをアサートする。
コンピューティングデバイスでは、CSRデータセットは更に、行列の要素を格納するための値アレイと、値アレイに格納された要素の各々についての行列の列を識別するための列アレイと、行列の各々の行内の要素を識別するための行ポインタアレイと、を含む。
コンピューティングデバイスでは、処理ユニットは、ベクトル内の1つの要素の値を計算するために複数の並列スレッドのスレッドをそれぞれ実行する複数のプロセッシングコアを含む。
コンピューティングデバイスでは、複数のプロセッシングコアの各々は更に、スレッドにおいてスピンループを実行することによって、完了アレイ内の完了フラグを監視し、スピンループの反復回数が所定の制限を超えたことに応じて、スピンループを終了し、複数の並列処理スレッドの全てが完了した場合に、完了フラグを監視するための新たなスレッドを実行する。
コンピューティングデバイスでは、処理ユニットは、第1のスピンループを実行して完了アレイ内の第1の完了フラグを監視することであって、第1の完了フラグは、CSRデータセットの列アレイ内の第1の位置において指定されており、列アレイ内の第1の位置は、第1のベクトル内の複数の要素のうち1つに対応する行ポインタによって示されている、ことと、第1の完了フラグがアサートされたと判別し、列アレイ内の第2の位置がスパース三角行列の非対角線要素に対応すると判別したことに応じて、第2のスピンループを実行して完了アレイ内の第2の完了フラグを監視することであって、第2の完了フラグは、列アレイ内の第2の位置において指定されている、ことと、を行うように構成された複数のプロセッシングコアを含む。
コンピューティングデバイスは更に、メモリ内の完了アレイを含み、完了アレイは、複数の要素毎に完了フラグを格納するためのものであり、処理ユニットは更に、複数の要素毎に、先行要素の完了フラグの中で最高値をインクリメントすることによって、要素の完了フラグの値を決定し、要素の完了フラグの決定された値を、要素に対応する位置の完了アレイに格納することによって、要素の完了フラグをアサートする。
コンピューティングデバイスでは、処理ユニットは更に、第2のベクトル内の複数の要素毎に、完了アレイ内の要素に対応する完了フラグの値に基づいて、要素の階層を決定し、決定された階層に応じた順序で第2のベクトル内の各要素の値を計算し、同一の階層内の複数の要素のうち少なくとも2つの要素の値は、並列に計算される。
コンピューティングシステムは、スパース三角行列を圧縮スパース行(CSR)データセットとして格納するメモリシステムと、メモリシステムに接続された1つ以上の処理ユニットのセットと、を含む。処理ユニットのセット内の各処理ユニットは、第1のベクトル内の複数の要素毎に、要素について第1のベクトル内の1つ以上の先行要素のセットを識別することによって要素の値を計算し、要素の値は、1つ以上の先行要素の各々に依存しており、1つ以上の先行要素の全ての値が解かれたことを完了アレイが示すことに応じて、行列の行内の1つ以上の要素及び行に対応する積値に基づいて要素の値を計算し、完了アレイにおいて、要素が解かれたことを示す要素の完了フラグをアサートする。
コンピューティングシステムでは、処理ユニットのセット内の各処理ユニットは更に、複数の並列スレッドのうち少なくとも1つを実行し、複数の並列スレッドの各々は、複数の要素のうち1つの値を計算する。
コンピューティングシステムでは、処理ユニットのセット内の各処理ユニットは更に、単一の集積回路ダイ上に複数のプロセッシングコアを含み、複数のプロセッシングコアの各々は、複数の並列スレッドのうち1つを実行する。
コンピューティングシステムでは、処理ユニットのセット内の各処理ユニットは、処理ユニットのセット内の他の処理ユニットとは別の集積回路ダイ上のグラフィックス処理ユニット(GPU)である。
本明細書で使用するように、「に接続される」という用語は、直接的に、又は、1つ以上の介在する構成要素を介して間接的に接続されることを意味することができる。本明細書に記載された様々なバスを介して提供される何れの信号も、他の信号と時分割多重化されてもよく、1つ以上の共通バスを介して提供されてもよい。さらに、回路構成要素又はブロック間の相互接続は、バス又は単一の信号線として示されてもよい。また、各バスは、1つ以上の単一の信号線であってもよいし、単一の信号線の各々は、バスであってもよい。
特定の実施形態は、非一時的なコンピュータ可読媒体に記憶された命令を含むことができるコンピュータプログラム製品として実施されてもよい。これらの命令は、説明した動作を実行するように汎用プロセッサ又は特殊目的プロセッサをプログラムするために使用されてもよい。コンピュータ可読媒体は、機械(例えば、コンピュータ)によって読み出し可能な形式(例えば、ソフトウェア、処理アプリケーション)で情報を記憶又は送信するための任意のメカニズムを含む。非一時的なコンピュータ可読記憶媒体は、磁気記憶媒体(例えば、フロッピー(登録商標)ディスク)、光学記憶媒体(例えば、CD-ROM)、光磁気記憶媒体、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラム可能メモリ(例えば、EPROM及びEEPROM)、フラッシュメモリ、又は、電子命令を記憶するのに適した別のタイプの媒体を含むことができるが、これらに限定されない。
さらに、いくつかの実施形態は、コンピュータ可読媒体が複数のコンピュータシステムに記憶され、及び/又は、複数のコンピュータシステムによって実行される分散コンピューティング環境において実施されてもよい。さらに、コンピュータシステム間で転送される情報は、コンピュータシステムを接続する伝送媒体を介してプルされてもよいし、プッシュされてもよい。
概して、コンピューティングシステム101を表すデータ構造及び/又はコンピュータ可読記憶媒体上で搬送されるこれらの一部は、プログラムによって読み出され、コンピューティングデバイス101を含むハードウェアを製造するために直接的又は間接的に使用され得るデータベース又は他のデータ構造であってもよい。例えば、データ構造は、Verilog又はVHDL等の高水準設計言語(HDL)におけるハードウェア機能の動作レベルの記述又はレジスタ転送レベル(RTL)記述であってもよい。記述は、合成ライブラリからゲートのリストを含むネットリストを生成するために記述を合成する合成ツールによって読み出されてもよい。ネットリストは、コンピューティングデバイス101を含むハードウェアの機能を表すゲートのセットを含む。次に、ネットリストは、マスクに適用される幾何学的形状を記述するデータセットを生成するように配置及びルーティングされてもよい。次いで、マスクは、コンピューティングデバイス101に対応する半導体回路を製造するために、様々な半導体製造工程で使用されてもよい。或いは、コンピュータ可読記憶媒体上のデータベースは、ネットリスト(合成ライブラリの有無に関わらない)若しくは必要に応じてデータセット、又は、グラフィックデータシステム(GDS)IIデータであってもよい。
本明細書における方法(複数可)の動作は、特定の順序で示され、説明されているが、各方法の動作の順序は、逆の順序で特定の動作を実行することができるように、又は、他の動作と少なくとも部分的に同時に特定の動作を実行することができるように変更されてもよい。別の実施形態では、個別の動作の命令又はサブ動作は、断続的及び/又は交互の方法であってもよい。
以上の明細書では、実施形態を、その特定の例示的な実施形態を参照して説明した。しかしながら、添付の特許請求の範囲に記載された実施形態のより広い範囲から逸脱することなく、様々な修正及び変更を行うことができることは明らかである。したがって、明細書及び図面は、限定的な意味ではなく、例示的な意味としてみなされる。

Claims (22)

  1. メモリデバイスにおいて、スパース三角行列をデータセットとして格納することと、
    複数のプロセッシングコアを備える処理ユニットにおいて、第1のベクトル内の要素のサブセット内の要素毎に要素の値を計算することと、を含み、
    前記第1のベクトル内の要素のサブセット内の要素毎に要素の値を計算することは、
    1つ以上の先行要素の全ての値の計算が完了したことを完了アレイが示すことに応じて、前記要素の値を計算するために前記複数のプロセッシングコアのうち何れかにおけるスレッドを開始することであって、前記要素の値を計算することは、前記1つ以上の先行要素の各々に依存し、前記スレッドは、前記行列の行内の1つ以上の要素と、前記1つ以上の先行要素の値、前記要素の値及び前記行内の1つ以上の要素に対応する積値と、に基づいて、前記複数のプロセッシングコアのうち何れかにおいて実行される、ことと、
    前記完了アレイにおいて、前記要素の計算が完了したことを示す、前記要素の完了フラグをアサートすることと、
    によって行われる、
    方法。
  2. 前記スパース三角行列をデータセットとして格納することは、
    前記行列の1つ以上の非ゼロ要素を前記データセットの値アレイに格納することと、
    記データセットの列アレイにおいて、前記値アレイに格納された前記1つ以上の非ゼロ要素毎に前記行列の列を示す列番号を記憶することと、
    記データセットの行ポインタアレイにおいて、前記1つ以上の非ゼロ要素の各々を前記行列の行に関連付ける行番号を記憶することと、を含む、
    請求項1の方法。
  3. 前記要素のサブセットの要素毎に、
    前記スレッドは、互いに並列に実行される複数の並列スレッドのうち1つの並列スレッドであり、前記複数の並列スレッドの各々は、複数の要素のうち何れかを計算するためのものである、
    請求項1の方法。
  4. 前記複数のスレッド毎に、
    ピンループの反復回数をカウントすることであって、前記スピンループは、前記完了アレイ内の第2の完了フラグを監視するために前記スレッドにおいて実行され、前記第2の完了フラグは、前記先行要素のうち何れかの先行要素の計算が完了したかどうかを示す、ことと、
    前記反復回数が制限を超えたことに応じて、
    前記スピンループを終了することと、
    複数の並列処理スレッドの全てが完了した場合に、実行される子カーネルをエンキューすることと、
    前記子カーネルにおいて新たなスレッド内の前記第2の完了フラグを監視することと、をさらに含む、
    請求項3の方法。
  5. 子開始フラグをチェックすることであって、前記子カーネルをエンキューすることは、前記子開始フラグがデアサートされた場合に実行される、ことと、
    前記子カーネルをエンキューすることに関連して、前記子開始フラグをアサートすることと、をさらに含む、
    請求項4の方法。
  6. 前記要素のサブセットの要素毎に、
    第1のスピンループを実行して、前記完了アレイ内の第1の完了フラグを監視することであって、前記第1の完了フラグは、前記データセットの列アレイ内の第1の位置において指定されており、前記列アレイ内の前記第1の位置は、前記要素に対応する行ポインタによって示されている、ことと、
    前記第1の完了フラグがアサートされ、前記列アレイ内の第2の位置が前記スパース三角行列の非対角線要素に対応すると判別したことに応じて、第2のスピンループを実行して、前記完了アレイ内の第2の完了フラグを監視することであって、前記第2の完了フラグは、前記列アレイ内の前記第2の位置において指定されている、ことと、をさらに含む、
    請求項1の方法。
  7. 前記要素のサブセットの要素毎に、
    行ポインタアレイ内の前記行ポインタの位置は、前記ベクトル内の前記要素の位置に対応しており、
    前記行ポインタは、前記列アレイ内の前記第1の位置のインデックスであり、
    前記列アレイの前記第1の位置は、前記完了アレイ内の前記要素の前記完了フラグのインデックスを格納する、
    請求項6の方法。
  8. 前記要素のサブセットの要素毎に、
    前記先行要素の各々の完了フラグを格納することと、
    前記先行要素の前記完了フラグの中で最高値を有する完了フラグをインクリメントすることによって、前記要素の前記完了フラグの値を決定することと、
    前記要素の前記完了フラグの決定された値を、前記要素に対応する位置の前記完了アレイに格納することによって、前記要素の前記完了フラグをアサートすることと、をさらに含む、
    請求項1の方法。
  9. 第2のベクトル内の複数の要素毎に、前記完了アレイ内の前記要素に対応する前記完了フラグの値に基づいて、前記要素の階層を決定することと、
    決定された前記階層に応じた順序で前記第2のベクトル内の各要素の値を計算することであって、同一の階層内の前記複数の要素のうち少なくとも2つの要素の値は、並列に計算される、ことと、をさらに含む、
    請求項8の方法。
  10. 記データセットは、メモリシステムに格納され、
    前記要素のサブセットの要素毎に、前記要素の値は、前記メモリシステムに接続されたソルバー回路において計算される、
    請求項1の方法。
  11. 前記完了アレイを生成することと、
    スピンループ回路を使用して、前記完了アレイから前記完了フラグを読み出すことと、をさらに含み、
    前記完了アレイは、メモリシステムに格納されており、
    前記完了アレイの前記完了フラグをアサートすることは、前記スピンループ回路と前記メモリシステムとに接続されたソルバー回路によって実行される、
    請求項1の方法。
  12. スパース三角行列をデータセットとして格納するように構成されたメモリと、
    複数のプロセッシングコアを備える処理ユニットであって、前記メモリに接続された処理ユニットと、を備え、
    前記処理ユニットは、
    第1のベクトル内の要素のサブセットの要素毎に要素の値を計算することを行うように構成されており、
    前記第1のベクトル内の要素のサブセットの要素毎に要素の値を計算することは、
    1つ以上の先行要素の全ての値の計算が完了したことを完了アレイが示すことに応じて、前記要素の値を計算するために前記複数のプロセッシングコアのうち何れかにおけるスレッドを開始することであって、前記要素の値を計算することは、前記1つ以上の先行要素の各々に依存し、前記スレッドは、前記行列の行内の1つ以上の要素と、前記1つ以上の先行要素の値、前記要素の値及び前記行内の1つ以上の要素に対応する積値と、に基づいて、前記複数のプロセッシングコアのうち何れかにおいて実行される、ことと、
    前記完了アレイにおいて、前記要素の計算が完了したことを示す、前記要素の完了フラグをアサートすることと、
    によって行われる、
    コンピューティングデバイス。
  13. 記データセットは、
    前記行列の1つ以上の非ゼロ要素を格納するように構成された値アレイと、
    前記値アレイに格納された前記1つ以上の非ゼロ要素の各々についての前記行列の列を記憶するように構成された列アレイと、
    前記1つ以上の非ゼロ要素の各々を前記行列の行に関連付ける行番号を記憶するように構成された行ポインタアレイと、をさらに含む、
    請求項12のコンピューティングデバイス。
  14. 前記処理ユニットは、
    前記ベクトル内の1つの前記要素の値を計算するために複数の並列スレッドのスレッドをそれぞれ実行するように構成された複数のプロセッシングコアを含む、
    請求項12のコンピューティングデバイス。
  15. 前記複数のプロセッシングコアの各々は、
    前記スレッドにおいてスピンループを実行することによって、前記完了アレイ内の前記完了フラグを監視することと、
    前記スピンループの反復回数が所定の制限を超えたことに応じて、
    前記スピンループを終了することと、
    複数の並列処理スレッドの全てが完了した場合に、前記完了フラグを監視するための新たなスレッドを実行することと、
    を行うように構成されている、
    請求項14のコンピューティングデバイス。
  16. 前記処理ユニットは、
    第1のスピンループを実行して前記完了アレイ内の第1の完了フラグを監視することであって、前記第1の完了フラグは、前記データセットの列アレイ内の第1の位置において指定されており、前記列アレイ内の前記第1の位置は、前記第1のベクトルの要素のサブセットのうち何れかに対応する行ポインタによって示されている、ことと、
    前記第1の完了フラグがアサートされたと判別し、前記列アレイ内の第2の位置が前記スパース三角行列の非対角線要素に対応すると判別したことに応じて、第2のスピンループを実行して前記完了アレイ内の第2の完了フラグを監視することであって、前記第2の完了フラグは、前記列アレイ内の前記第2の位置において指定されている、ことと、
    を行うように構成された複数のプロセッシングコアを含む、
    請求項12のコンピューティングデバイス。
  17. 前記メモリ内の完了アレイをさらに備え、前記完了アレイは、前記要素のサブセットの要素毎に完了フラグを格納するように構成されており、
    前記処理ユニットは、前記要素のサブセットの要素毎に、
    前記先行要素の前記完了フラグの中で最高値をインクリメントすることによって、前記要素の前記完了フラグの値を決定することと、
    前記要素の前記完了フラグの決定された値を、前記要素に対応する位置の前記完了アレイに格納することによって、前記要素の前記完了フラグをアサートすることと、
    を行うように構成されている、
    請求項12のコンピューティングデバイス。
  18. 前記処理ユニットは、
    第2のベクトル内の複数の要素毎に、前記完了アレイ内の前記要素に対応する前記完了フラグの値に基づいて、前記要素の階層を決定することと、
    決定された前記階層に応じた順序で前記第2のベクトル内の各要素の値を計算することであって、同一の階層内の前記複数の要素のうち少なくとも2つの要素の値は、並列に計算される、ことと、
    を行うように構成されている、
    請求項17のコンピューティングデバイス。
  19. スパース三角行列をデータセットとして格納するように構成されたメモリシステムと、
    前記メモリシステムに接続された1つ以上の処理ユニットのセットと、を備え、
    前記処理ユニットのセット内の各処理ユニットは、複数のプロセッシングコアを備えており、
    第1のベクトル内の要素のサブセットの要素毎に、
    1つ以上の先行要素の全ての値の計算が完了したことを完了アレイが示すことに応じて、前記要素の値を計算するために前記複数のプロセッシングコアのうち何れかにおけるスレッドを開始することであって、前記要素の値を計算することは、前記1つ以上の先行要素の各々に依存し、前記スレッドは、前記行列の行内の1つ以上の要素と、前記1つ以上の先行要素の値、前記要素の値及び前記行内の1つ以上の要素に対応する積値と、に基づいて、前記複数のプロセッシングコアのうち何れかにおいて実行される、ことと、
    前記完了アレイにおいて、前記要素の計算が完了したことを示す、前記要素の完了フラグをアサートすることと、
    によって、前記要素の値を計算するように構成されている、
    コンピューティングシステム。
  20. 前記処理ユニットのセット内の各処理ユニットは、
    複数の並列スレッドのうち少なくとも1つを実行するように構成されており、前記複数の並列スレッドの各々は、前記要素のサブセットのうち何れかの要素の値を計算する、
    請求項19のコンピューティングシステム。
  21. 前記処理ユニットのセット内の各処理ユニットは、単一の集積回路ダイ上に複数のプロセッシングコアを含み、前記複数のプロセッシングコアの各々は、前記複数の並列スレッドのうち1つを実行するように構成されている、
    請求項20のコンピューティングシステム。
  22. 前記処理ユニットのセット内の各処理ユニットは、前記処理ユニットのセット内の他の処理ユニットとは別の集積回路ダイ上のグラフィックス処理ユニット(GPU)である、
    請求項19のコンピューティングシステム。
JP2020554425A 2018-04-20 2019-01-22 グラフィックス処理ユニット上の高性能スパース三角解 Active JP7109576B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/958,265 US10691772B2 (en) 2018-04-20 2018-04-20 High-performance sparse triangular solve on graphics processing units
US15/958,265 2018-04-20
PCT/US2019/014475 WO2019203908A1 (en) 2018-04-20 2019-01-22 High-performance sparse triangular solve on graphics processing units

Publications (2)

Publication Number Publication Date
JP2021513172A JP2021513172A (ja) 2021-05-20
JP7109576B2 true JP7109576B2 (ja) 2022-07-29

Family

ID=65352166

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020554425A Active JP7109576B2 (ja) 2018-04-20 2019-01-22 グラフィックス処理ユニット上の高性能スパース三角解

Country Status (6)

Country Link
US (1) US10691772B2 (ja)
EP (1) EP3782051A1 (ja)
JP (1) JP7109576B2 (ja)
KR (1) KR102355990B1 (ja)
CN (1) CN112074830B (ja)
WO (1) WO2019203908A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10691772B2 (en) * 2018-04-20 2020-06-23 Advanced Micro Devices, Inc. High-performance sparse triangular solve on graphics processing units
US10936697B2 (en) * 2018-07-24 2021-03-02 Advanced Micro Devices, Inc. Optimized and scalable sparse triangular linear systems on networks of accelerators
US11921784B2 (en) * 2021-05-13 2024-03-05 Advanced Micro Devices, Inc. Flexible, scalable graph-processing accelerator
US20240231830A1 (en) * 2023-01-09 2024-07-11 Nvidia Corporation Workload assignment technique

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008544610A (ja) 2005-06-10 2008-12-04 デジタル ファウンテン, インコーポレイテッド さまざまな符号クラスの符号化および復号化への応用を有するインプレース変換

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2263002B (en) * 1992-01-06 1995-08-30 Intel Corp A parallel binary adder
US6694343B2 (en) * 2001-02-08 2004-02-17 International Business Machines Corporation Method for solving a large sparse triangular system of linear equations
ES2427179T3 (es) * 2002-07-03 2013-10-29 Dtvg Licensing, Inc Codificación de los códigos de comprobación de paridad de baja densidad
US8775495B2 (en) * 2006-02-13 2014-07-08 Indiana University Research And Technology Compression system and method for accelerating sparse matrix computations
US8364739B2 (en) * 2009-09-30 2013-01-29 International Business Machines Corporation Sparse matrix-vector multiplication on graphics processor units
WO2011156247A2 (en) * 2010-06-11 2011-12-15 Massachusetts Institute Of Technology Processor for large graph algorithm computations and matrix operations
CN104461466B (zh) * 2013-09-25 2018-09-21 广州中国科学院软件应用技术研究所 基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法
CN104461467B (zh) * 2013-09-25 2018-05-04 广州中国科学院软件应用技术研究所 针对SMP集群系统采用MPI和OpenMP混合并行提高计算速度的方法
US10061747B2 (en) * 2014-05-07 2018-08-28 Seagate Technology Llc Storage of a matrix on a storage compute device
US9697176B2 (en) * 2014-11-14 2017-07-04 Advanced Micro Devices, Inc. Efficient sparse matrix-vector multiplication on parallel processors
US9760538B2 (en) * 2014-12-22 2017-09-12 Palo Alto Research Center Incorporated Computer-implemented system and method for efficient sparse matrix representation and processing
US10572568B2 (en) * 2018-03-28 2020-02-25 Intel Corporation Accelerator for sparse-dense matrix multiplication
US10691772B2 (en) * 2018-04-20 2020-06-23 Advanced Micro Devices, Inc. High-performance sparse triangular solve on graphics processing units
US10936697B2 (en) * 2018-07-24 2021-03-02 Advanced Micro Devices, Inc. Optimized and scalable sparse triangular linear systems on networks of accelerators

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008544610A (ja) 2005-06-10 2008-12-04 デジタル ファウンテン, インコーポレイテッド さまざまな符号クラスの符号化および復号化への応用を有するインプレース変換

Also Published As

Publication number Publication date
US10691772B2 (en) 2020-06-23
KR102355990B1 (ko) 2022-02-08
KR20210002521A (ko) 2021-01-08
CN112074830B (zh) 2022-06-21
EP3782051A1 (en) 2021-02-24
CN112074830A (zh) 2020-12-11
US20190325005A1 (en) 2019-10-24
WO2019203908A1 (en) 2019-10-24
JP2021513172A (ja) 2021-05-20

Similar Documents

Publication Publication Date Title
JP7109576B2 (ja) グラフィックス処理ユニット上の高性能スパース三角解
Dakkak et al. Accelerating reduction and scan using tensor core units
US11782856B2 (en) Compile time instrumentation of data flow graphs
JP2016119084A (ja) 効率的な疎行列表現及び処理のためのコンピュータ実装システム及び方法
Matam et al. Sparse matrix-matrix multiplication on modern architectures
Yeralan et al. Algorithm 980: Sparse QR factorization on the GPU
US20130226535A1 (en) Concurrent simulation system using graphic processing units (gpu) and method thereof
WO2011009638A1 (en) Scheduling and communication in computing systems
CN111506520B (zh) 一种地址生成的方法、相关装置以及存储介质
US12072953B2 (en) Asymmetric allocation of SRAM and data layout for efficient matrix-matrix multiplication
US10936697B2 (en) Optimized and scalable sparse triangular linear systems on networks of accelerators
Duffy et al. Production level CFD code acceleration for hybrid many-core architectures
CN114008589A (zh) 用于在顺序处理器上进行多次执行的动态代码加载
CN117093538A (zh) 稀疏Cholesky分解硬件加速系统及其求解方法
US11921784B2 (en) Flexible, scalable graph-processing accelerator
Liao et al. GPU-based N-detect transition fault ATPG
US20140244232A1 (en) Simulation apparatus and simulation method
US11249910B2 (en) Initialization and management of class of service attributes in runtime to optimize deep learning training in distributed environments
Xiao et al. A parallel multi-unit resource deadlock detection algorithm with O (log2 (min (m, n))) overall run-time complexity
US9507896B2 (en) Quasi-dynamic scheduling and dynamic scheduling for efficient parallel simulation
US11983128B1 (en) Multidimensional and multiblock tensorized direct memory access descriptors
US20240330036A1 (en) Parallel processing architecture with shadow state
US11080030B2 (en) Information processing apparatus and information processing method
Osburn et al. Early experiences on the NRL Cray XD1
KR20240006684A (ko) 유연하고 확장가능한 그래프 처리 가속기

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201214

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20201214

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20201214

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20210428

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210511

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210806

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20211102

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20220202

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220315

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220621

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220719

R150 Certificate of patent or registration of utility model

Ref document number: 7109576

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150