JP2011527788A5 - - Google Patents
Download PDFInfo
- Publication number
- JP2011527788A5 JP2011527788A5 JP2011517279A JP2011517279A JP2011527788A5 JP 2011527788 A5 JP2011527788 A5 JP 2011527788A5 JP 2011517279 A JP2011517279 A JP 2011517279A JP 2011517279 A JP2011517279 A JP 2011517279A JP 2011527788 A5 JP2011527788 A5 JP 2011527788A5
- Authority
- JP
- Japan
- Prior art keywords
- chain
- processing element
- execution
- placing
- warp
- 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.)
- Granted
Links
- 238000010586 diagram Methods 0.000 claims description 99
- 238000004364 calculation method Methods 0.000 claims description 20
- 125000002015 acyclic group Chemical group 0.000 claims description 10
- 125000004429 atoms Chemical group 0.000 claims description 8
- 230000004044 response Effects 0.000 claims description 6
- 208000010378 Pulmonary Embolism Diseases 0.000 claims 2
- 102100018213 SYNC Human genes 0.000 description 58
- 101700012507 SYNC Proteins 0.000 description 58
- 238000000034 method Methods 0.000 description 50
- 238000004891 communication Methods 0.000 description 34
- 238000011068 load Methods 0.000 description 25
- 229920001223 polyethylene glycol Polymers 0.000 description 24
- 230000003068 static Effects 0.000 description 15
- 238000004088 simulation Methods 0.000 description 13
- 229910052698 phosphorus Inorganic materials 0.000 description 8
- 230000001965 increased Effects 0.000 description 7
- 230000001360 synchronised Effects 0.000 description 5
- 238000000354 decomposition reaction Methods 0.000 description 4
- 230000001419 dependent Effects 0.000 description 4
- 238000011156 evaluation Methods 0.000 description 4
- 238000002360 preparation method Methods 0.000 description 4
- 239000000203 mixture Substances 0.000 description 3
- 229910052757 nitrogen Inorganic materials 0.000 description 3
- 241001442055 Vipera berus Species 0.000 description 2
- 229910052799 carbon Inorganic materials 0.000 description 2
- 238000005352 clarification Methods 0.000 description 2
- 230000000875 corresponding Effects 0.000 description 2
- 125000004122 cyclic group Chemical group 0.000 description 2
- 229910052739 hydrogen Inorganic materials 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000003860 storage Methods 0.000 description 2
- 229910052720 vanadium Inorganic materials 0.000 description 2
- 241000255777 Lepidoptera Species 0.000 description 1
- 102100019015 MEST Human genes 0.000 description 1
- 101700067359 MEST Proteins 0.000 description 1
- 210000003800 Pharynx Anatomy 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 230000001174 ascending Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000003111 delayed Effects 0.000 description 1
- 229920005994 diacetyl cellulose Polymers 0.000 description 1
- 230000004069 differentiation Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002708 enhancing Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000011049 filling Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 235000009808 lpulo Nutrition 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003278 mimic Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006011 modification reaction Methods 0.000 description 1
- 230000003287 optical Effects 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 238000003825 pressing Methods 0.000 description 1
- 230000002250 progressing Effects 0.000 description 1
- 229910052717 sulfur Inorganic materials 0.000 description 1
- 230000001702 transmitter Effects 0.000 description 1
Description
本発明は、一般的に並列計算に関し、特に並列プロセッサ上で依存問題を実行するための方法及びシステムに関するものである。
(関連出願との相互対比)
本発明は下記特許文献1−5の恩恵を主張し、それらの開示事項はここに参照され、採り入れられる。
本発明は下記特許文献1−5の恩恵を主張し、それらの開示事項はここに参照され、採り入れられる。
並列計算技術は様々な種類のコンピュータ計算タスクの実行に広く使用されている。論理設計シミュレーションの分野では、例えば、Cadambi他は極長命令ワード(VLIW)プロセッサに基づくシミュレーション加速器を下記非特許文献1の中で記載しており、それはここに参照され、採り入れられる。VLIWプロセッサを使用した論理シミュレーションの側面は下記特許文献6−13にも記載されており、それらはここに参照され、採り入れられる。
‘A Fast, Inexpensive and Scalable Hardware Acceleration Technique for Functional Simulation’Proceedings of the 39th IEEE ACM Design Automation Conference(DAC 2002), New Orleans, Louisiana, June 10 − 14, 2002, Pages 570 − 575
本発明の1実施形態によれば、コンピュータ計算の方法であって、原子オペレーションのタイプのライブラリを定義するステップと、実行依存性を有する多重の原子処理要素(PE)からなる計算タスクを受け取るステップと、ここにそれぞれの前記実行依存性は、それぞれ第1の処理要素(PE)がそれぞれ第2の処理要素(PE)よりも前に実行されることを特定し、第1の数の処理要素(PE)を同時に実行可能な多重のプロセッサを有するマルチプロセッサ装置上での同時実行のため、実行依存性を破ることなく計算タスクの処理要素(PE)を1より大きく第1の数を越えない第2の数のPEの連鎖内に配置することにより、計算タスクをコンパイルするステップと、計算タスクの結果を生成するため、PEの連鎖を多重のプロセッサ上で並行して実行するソフトウェアコードを走らせるためのマルチプロセッサ装置を呼び出すステップと、を有し、ここにそれぞれのプロセッサは1つ以上の連鎖を実行し、計算タスクをコンパイルするステップは、計算タスクの原子PEのタイプを識別するステップと、計算タスクの原子オペレーションをワープ内に配置するステップであって、ワープの少なくとも幾つかは複数のオペレーションを有し、それぞれのワープ内のオペレーションは全て同一の特定の原子タスクを実行する、ステップと、そしてワープをPEの連鎖内に配置するステップと、を有することを特徴とするコンピュータ計算の方法が提供される。
ある実施形態では、コンピュータ計算の方法は、それぞれの前記処理要素(PE)の連鎖内の前記処理要素(PE)を互いに独立した複数のオペレーションを有する処理要素グループ(PEG)にグループ化するステップを有し、計算タスクの前記オペレーションをワープ内に配置するステップは、それぞれ特定のPEGが、PEの連鎖内において特定のPEGの前に位置する1つの異なるPEG内の1つのPEの後に実行されるべきPEを有しないように、処理要素グループ(PEG)を処理要素(PE)の連鎖内に配置するステップを有する。他の1実施形態では、マルチプロセッサ装置は、プロセッサによる実行のため、マルチプロセッサ装置の組み込みスケジュールポリシーに従って処理要素(PE)のスケジュールを定め、マルチプロセッサ装置を呼び出すステップは、マルチプロセッサ装置に対し、組み込みスケジュールポリシーに拘わらず第2の数のPEの連鎖を並列で実行させるステップを有する。他の実施形態では、多重のプロセッサは、グループのプロセッサ用の1つの共有キャッシュメモリを有するグループに整理され、マルチプロセッサ装置を呼び出すステップは、グループの1つの中にあるプロセッサにより実行される各PEの連鎖を、其々のスレッドのブロックとして、提供するステップを有し、計算タスクをコンパイルするステップは、ある所定の処理要素(PE)の連鎖内の処理要素(PE)に対し、所定の処理要素(PE)の連鎖を実行する役割を与えられたプロセッサの1つのグループの1つの共有メモリ経由で、PEにより計算されたデータを交換するようにさせるステップを有する。さらにある実施形態では、それぞれのプロセッサはそれぞれの定義されたオペレーションのタイプを走らせることが可能なコードを有する1つのスレッドを動作させ、そして実行されるべき実際の原子タスクは、スレッドにより読まれたデータに応答して決定される。
さらに他の実施形態では、処理要素(PE)を第2の数のPEの連鎖内に配置するステップは、マルチプロセッサ装置により同時に実行可能な複数の連鎖内に処理要素(PE)を配置するステップを有する。他の実施形態では、ある所与の実行依存性は、1つの駆動処理要素(PE)が1つの従動処理要素(PE)より前に実行されることを特定し、処理要素(PE)を配置するステップは、駆動処理要素(PE)を第1のPEの連鎖内に配置するステップと、従動処理要素(PE)を第1のPEの連鎖とは異なる第2のPEの連鎖内に配置するステップと、駆動処理要素(PE)が完全に実行されるまで第2のPEの連鎖の実行を停止する同期化要素を第2のPEの連鎖内に挿入するステップとを有する。
ある実施形態では、計算タスクをコンパイルするステップは、計算タスクから、多重の非循環サブ図を抽出するステップと、それぞれの非循環サブ図に対しそれぞれのPEの連鎖のデータ構造を生成するため、多重のサブ図をコンパイルするステップと、を有する。ある開示された実施形態では、処理要素(PE)を配置するステップは、処理要素(PE)がPEの連鎖内の配置のために選択されるべき順番を定義するステップと、PEの連鎖を順番に従って処理要素(PE)で構成するステップと、を有する。
さらに他の実施形態では、処理要素(PE)を配置するステップは、所与の1つの処理要素(PE)とPEの連鎖内の1組の可能性のある位置に対して、 所与の処理要素(PE)を可能性のある位置に配置することによりもたらされる、それぞれの割当コストを計算するステップと、最低の割当コストの可能性のある位置に所与の処理要素(PE)を配置するステップと、を有する。
ある実施形態では、計算タスクをコンパイルするステップは、所与の1つのPEの連鎖に対し、所与のPEの連鎖の実行の間に、マルチプロセッサ装置内のデバイスメモリからキャッシュメモリに変数を取得し、そしてキャッシュメモリから変数の少なくとも幾つかを除去する、決定論的な1つのキャッシュパターンを定義するステップと、マルチプロセッサ装置に対し、所与のPEの連鎖の実行時に、決定論的なキャッシュパターンを実行させるようにするステップと、を有する。
1実施形態では、処理要素(PE)を配置するステップは、処理要素(PE)で始まる実行依存性のそれぞれの最長の鎖の長さと、スロットの連鎖のそれぞれの占有レベルと、処理要素(PE)の配置によりもたらされた同期化要素と、からなる要因のグループから選択された、少なくとも1つの要因に従って、最初は空のスロットの連鎖内に処理要素(PE)を配置するステップを有する。
本発明の1実施形態によれば、さらに計算タスクを受け取るステップと、計算タスクは、実行依存性を持つ多重の原子処理要素(PE)を有し、其々の実行依存性は、それぞれ第1の処理要素(PE)がそれぞれ第2の処理要素(PE)よりも前に実行されることを特定し、計算タスクを、マルチプロセッサ装置上での同時実行のためコンパイルするステップと、マルチプロセッサ装置は、並列に動作する多重のプロセッサを有し、そして多重のプロセッサによるマルチプロセッサ装置の組み込みスケジュールポリシーに従った実行のため、実行依存性を破ることなく、処理要素(PE)を多重のPEの連鎖内に配置することにより、処理要素(PE)のスケジュールを立て、計算タスクの結果を生成するため、マルチプロセッサ装置のスケジュールポリシーに関係なく、PEの連鎖を並行して実行するソフトウェア符号を走らせるためのマルチプロセッサ装置を呼び出すステップと、を有し、ここにおいて計算タスクをコンパイルするステップは、計算タスクの原子PEのタイプを識別するステップと、計算タスクの原子オペレーションをワープ内に配置するステップであって、ワープの少なくとも幾つかは複数のオペレーションを有し、それぞれのワープ内のオペレーションは全て同一の特定の原子タスクを実行する、ステップと、そしてワープをPEの連鎖内に配置するステップと、を有する、ことを特徴とするコンピュータ計算の方法、が提供される。
またさらに本発明の1実施形態によれば、コンピュータ計算装置であって、
計算タスクを受け取るように接続されたインタフェースと、計算タスクは、実行依存性を持つ多重の原子処理要素(PE)を有し、其々の実行依存性は、それぞれ第1の処理要素(PE)がそれぞれ第2の処理要素(PE)よりも前に実行されることを特定し、中央演算処理装置(CPU)と、を有し、中央演算処理装置(CPU)は、第1の数の処理要素(PE)を同時に実行可能な多重のプロセッサを有するマルチプロセッサ装置上での同時実行のため、計算タスクの原子PEの前記タイプを識別するステップと、計算タスクの原子オペレーションをワープ内に配置するステップであって、ワープの少なくとも幾つかは複数のオペレーションを有し、それぞれのワープ内のオペレーションは全て同一の特定の原子タスクを実行する、ステップと、1より大きく第1の数を越えない、第2の数のPEの連鎖内にワープを配置するステップにより、計算タスクをコンパイルし、そしてPEの連鎖を並行して実行するソフトウェア符号を走らせるため、マルチプロセッサ装置を呼び出す、ように設定される、ことを特徴とするコンピュータ計算装置、が提供される。
計算タスクを受け取るように接続されたインタフェースと、計算タスクは、実行依存性を持つ多重の原子処理要素(PE)を有し、其々の実行依存性は、それぞれ第1の処理要素(PE)がそれぞれ第2の処理要素(PE)よりも前に実行されることを特定し、中央演算処理装置(CPU)と、を有し、中央演算処理装置(CPU)は、第1の数の処理要素(PE)を同時に実行可能な多重のプロセッサを有するマルチプロセッサ装置上での同時実行のため、計算タスクの原子PEの前記タイプを識別するステップと、計算タスクの原子オペレーションをワープ内に配置するステップであって、ワープの少なくとも幾つかは複数のオペレーションを有し、それぞれのワープ内のオペレーションは全て同一の特定の原子タスクを実行する、ステップと、1より大きく第1の数を越えない、第2の数のPEの連鎖内にワープを配置するステップにより、計算タスクをコンパイルし、そしてPEの連鎖を並行して実行するソフトウェア符号を走らせるため、マルチプロセッサ装置を呼び出す、ように設定される、ことを特徴とするコンピュータ計算装置、が提供される。
本発明は以下の図を参照した実施形態の詳細な説明により、より十分に理解される。
(概要)
広い分野での様々なタイプのコンピュータ計算タスクが依存問題として、即ち、実行依存性を有する原子処理要素の1組として表わすことが可能である。依存問題は多くの場合大規模で複雑であり、その実行にはコンピュータ計算の高度な複雑さと長い実行時間が伴う。従って依存問題を並列で動作する多重のプロセッサで実行することが有利となる。しかし、処理要素間の実行依存性は、しばしば並行コンピュータ計算タスクに分割することが困難な依存性問題を引き起こす。
広い分野での様々なタイプのコンピュータ計算タスクが依存問題として、即ち、実行依存性を有する原子処理要素の1組として表わすことが可能である。依存問題は多くの場合大規模で複雑であり、その実行にはコンピュータ計算の高度な複雑さと長い実行時間が伴う。従って依存問題を並列で動作する多重のプロセッサで実行することが有利となる。しかし、処理要素間の実行依存性は、しばしば並行コンピュータ計算タスクに分割することが困難な依存性問題を引き起こす。
本発明の実施形態は、依存性問題を並列プロセッサで実行する、改善された方法及びシステムを提供する。開示された方法及びシステムは、実行依存性を有する原子処理要素(PE)からなる依存性問題上で動作する。(1対の処理要素間の実行依存性とは、1つの処理要素が他の1つの処理要素が生成した入力に対して動作することを意味する。このように実行依存性は処理要素の実行の順序に制約を課す。)依存性問題は多重プロセッサからなる画像処理ユニット(GPU)のような1つのマルチプロセッサ装置上での同時実行のためにコンパイルされる。
コンパイル工程は、マルチプロセッサ装置のプロセシングコア により並行して実行される多重の実行連鎖(PEの連鎖)の中に、実行依存性を損なうことなくPEを配置する。典型的に、コンパイル工程は実行連鎖を有する静的呼び出しデータベース(SID)を生成する。マルチプロセッサ装置は、依存性問題の結果を生成するため、SIDを実行するソフトウェア符号を走らせるために呼び出される。
実行依存性は、同一の実行連鎖の中に相互依存PEを配置する試み、及び必要な場合異なる実行連鎖のPE間で同期を取ることにより維持される。典型的なマルチプロセッサ装置では、プロセッサは幾つかのグループの中に配置され、各グループのプロセッサは相互作用し、データを共有メモリ経由で交換することが出来る。ある実施形態では、SID内の各実行連鎖は、各連鎖の中のPEが同じグループのプロセッサにより実行され、そのグループの共有メモリを経由してデータを交換出来ることを保障するため、スレッドのブロックとしてマルチプロセッサ装置に供給される。
静的呼び出しデータベース(SID)の中の実行連鎖の数は、マルチプロセッサ装置が同時に実行できるスレッドブロックの最大数を越えないように選択される。結果として、実行連鎖は同時実行を保障され、そして一般的にマルチプロセッサ装置のいかなる組み込みスケジュールポリシーにも影響されない。この動作モードは、通常マルチプロセッサ装置を多数のスレッドブロックで溢れさせ、並行処理の実現をマルチプロセッサ装置の内部スケジューリングに頼る、既知の呼び出し構成とは明確に異なっている。反対に、ここに記載される方法とシステムでは、多重並列プロセッサの間の依存問題の並列処理化は、完全に決定論的であり実行時よりむしろコンパイル時に画定される。このようにマルチプロセッサ装置の内部スケジュールポリシーは効率的に迂回され、PEの実行順序は、SIDで画定される実行連鎖及び同期化構造により完全に制御される。高効率SIDsを生成する工程の1つの例がここに示される。
さらに、SID実行中に行われる多数のメモリアクセス動作を管理するための、幾つかの方法とシステムがここに記載される。詳細には、開示された技術は、PE実行連鎖によりマルチプロセッサ装置のデバイスメモリ及び共有メモリを効率的に使用する。(典型的なマルチプロセッサ装置では、デバイスメモリは、大きなメモリ空間を提供するが、しかし高いアクセスレイテンシを負い、大きな粒度でアクセスされ、アドレスアライメント制約を課する。反対に、共有メモリは、制限されたメモリ空間を有し、しかし高速なアクセス時間を提供し、アライメント制約は殆どないか全くない。)開示された技術は、メモリアクセス動作のパターンはSIDコンパイル中に完全に決定されるという事実を使用して、効率的で決定論的なメモリアクセスを達成する。
(システムの記述)
図1は本発明の実施形態に基づく、依存問題を実行するためのシステム20のブロック図である。様々な種類のコンピュータ計算タスクが依存問題、即ち、実行依存性を有する原子処理タスクの1組として表わされる。依存性問題は広範な分野及びアプリケーションで見られ、例えば、デジタルハードウェア設計シミュレーション、リアルタイムビデオ処理、画像処理、ソフトウェア定義ラジオ(SDR)、様々な通信アプリケーションにおけるパケット処理、及び誤り訂正符号などである。システム20は依存性問題として表示可能な全ての適合するタスクの効率的な実行に使用可能である。特定のコンピュータ計算タスクの幾つかの事例と、それらタスクに対する開示された技術の適用可能性について以下で記述する。
図1は本発明の実施形態に基づく、依存問題を実行するためのシステム20のブロック図である。様々な種類のコンピュータ計算タスクが依存問題、即ち、実行依存性を有する原子処理タスクの1組として表わされる。依存性問題は広範な分野及びアプリケーションで見られ、例えば、デジタルハードウェア設計シミュレーション、リアルタイムビデオ処理、画像処理、ソフトウェア定義ラジオ(SDR)、様々な通信アプリケーションにおけるパケット処理、及び誤り訂正符号などである。システム20は依存性問題として表示可能な全ての適合するタスクの効率的な実行に使用可能である。特定のコンピュータ計算タスクの幾つかの事例と、それらタスクに対する開示された技術の適用可能性について以下で記述する。
この事例では、システム20は、サーバ24を有し、サーバ24は1つのインタフェース26と、1つのCPU28と、1つ以上の画像処理ユニット(GPU)32を有する。サーバ24は適合するワークステーション又は計算プラットホームを有してもよい。以下に記述されるように、各GPUは並列に動作する多数のプロセシングコア を有する。ここに記載される方法及びシステムは、GPUコアの並列使用を最大化するソフトウェア符号を生成し、従ってシステム20が高度に複雑な依存問題を、比較的短い実行時間で実行することを可能にする。
サーバ24はユーザ基地36経由でユーザと相互作用する。サーバ24は、インタフェース26経由でユーザから、実行される依存問題を受け取る。サーバは入力依存問題をコンパイルしてソフトウェア符号を生成し、CPU28及びGPUs32上でその符号を走らせる。実行結果はインタフェース26経由でユーザに提供される。システム20の機能性は、アプリケーションにより様々なやり方で、CPU28とGPUs32の間で分別される。この実施形態は単一CPUに関しているが、一般的には、所望の数のCPUが使用されてよい。
典型的に、CPU28は、以下に記載する機能を実行するようにソフトウェアでプログラムされている、1つの汎用プロセッサを有する。ソフトウェアはプロセッサに、例えばネットワーク上で、電子形態でダウンロードされてもよい。または或いは、磁気、光、又は電子メモリのような接触可能媒体により提供及び/又は保存されてもよい。
システム20の構成は一例であり、概念の明確化のために選択されたものである。他の適合するシステム構成も使用可能である。例えば、ユーザ基地36はサーバ24とローカルに又は通信網経由で通信してもよい。他の実施形態では、ユーザ基地機能性は直接サーバ24上で実現されてもよい。
システム20のようなシステムを論理設計シミュレーションに使用する幾つかの局面は、「並列プロセッサを使用した設計シミュレーション」という名称の特許文献14に記載され、この出願人は本出願の出願人と同一であり、この文献の開示はここに参照され、採り入れられる。
図2は本発明の実施形態に基づく、画像処理ユニット(GPU)32の内部構造のブロック図である。この例では、GPU32は多重のマルチプロセッサ40を有する。各マルチプロセッサ装置40は、「プロセシングコア 」とも呼ばれる多重のプロセッサ44を有する。ある実施形態では、各マルチプロセッサ装置40は従来技術で既知の1つの単一命令多重スレッド(SIMT)プロセッサを有する。他の実施形態では、各マルチプロセッサ装置40は単一命令多重データ(SIMD)プロセッサを有し、そこでは全てのプロセッサ44は各クロックサイクルの間同じ命令を実行する。(しかし、異なるプロセッサは同じ命令を異なるデータ上で実行してもよい。)典型的なアプリケーションでは、GPU全体の全てのプロセッサは、同じ命令を実行する。異なるプロセッサの機能の間の差別化は、データによりもたらされる。開示された技術はSIMD及びSIMTの両方に適用可能である。
各プロセッサ44は複数のローカルレジスタ48にアクセス可能である。所与のマルチプロセッサ装置40内の異なるプロセッサはデータを共有メモリ52に保存可能である。この共有メモリは所与のマルチプロセッサ装置内のプロセッサ44にアクセス可能であるが、しかし他のマルチプロセッサ装置内のプロセッサにはアクセス出来ない。典型的GPUでは、各マルチプロセッサ装置は命令ユニット60を有し、それはマルチプロセッサ装置の動作を管理する。典型的なマルチプロセッサ装置では、命令ユニット60はコンカレントな複数のスレッドを生成し、管理し、実行する。詳しくは、命令ユニット60は、マルチプロセッサ装置で走る異なるスレッドの動作を同期させる、ハードウェア機構を有してもよい。
GPU32はさらにデバイスメモリ56を有し、それはここでは「外部メモリ」とも呼ばれる。デバイスメモリ56は典型的にDRAMからなる。共有メモリ52と異なり、デバイスメモリ56は、典型的に全てのマルチプロセッサ装置内のプロセッサ44にアクセス可能である。一方で、デバイスメモリ56へのアクセスはレイテンシと処理能力の点で高価である。効率よくデバイスメモリ56へアクセスするには、連続し、かつ列をなすメモリアドレス、へ書込み、又から読み込むことが典型的に好適である。ここに記載される幾つかの方法は、デバイスメモリ56に効率的にアクセスする符号の生成に関する。
ある所与の瞬間に各プロセッサ44が実行する基本ソフトウェア符号ユニットは「スレッド」と呼ばれる。典型的にCPU28は、スレッドのブロックをGPUに提供することにより、GPU32を呼び出す。スレッドの所与のブロックは、単一のマルチプロセッサ装置40のプロセッサ上で、SIMD又はSIMTモードで走ることが保証されている。このように、ある所与のブロック内のスレッドは共通メモリ52を経由して互いに通信可能である。
典型的に、ブロック当りのスレッドの数は1つのマルチプロセッサ装置内のプロセッサの数より大きいことが可能である。一般的にGPUに提供されるブロックの数は、マルチプロセッサ装置の数より大きいことが可能である。GPUはブロックマネージャ64を有し、それは、実行されるブロックをCPU28より受け取り、ブロックとスレッドの実行を一定の内部基準に従ってスケジュール管理する。このような基準は「組み込みスケジュールポリシー」と呼ばれる。
このように、所与のブロックのスレッドが同一のマルチプロセッサ装置で実行されるという保証以外に、所与のブロックのスレッドがマルチプロセッサ装置内で実行される順番については何の保証もない。又、異なるブロックがGPU内で実行される順番についても何の保証もない。言い換えれば、CPU28は一般的に、GPUの内部スケジュールポリシーについて制御していない。
ここに記載されるある方法及びシステムは、そしてある所与のブロック内のスレッドの間でデータを同期化し共有する能力のような、GPUの構造的特徴を利用した符号を生成する。依存問題をスレッドに分割する場合、開示された方法及びシステムでは、GPUにおいてスレッドとブロックの実行が保障されない性質を前提として、(即ち、GPUのスケジュールポリシーと関係なく)、異なる原子処理タスクの間で伝えられた依存性を維持する。
詳細には、GPUは典型的に、一定の数のブロックを同時に実行するように特定されている。GPUが大量のブロックで呼び出された場合、ブロックはブロックマネージャ64によりスケジュール管理される。ここに記載されるある方法及びシステムの幾つかは、GPUをその同時処理可能な最大ブロック数を超えない数のブロックで呼び出す。結果としてブロックマネージャ64の内部スケジュールポリシーは有効に迂回される。これらの特徴は更に以下で詳述される。
図2のGPU構成は構成の1つの例であり、概念の明確化のためにのみ選択されたものである。他の実施形態では、他の適合するGPU構成が使用可能である。この目的のために使用可能な典型的なGPUは、NVIDIA社(米国、カリフォルニア州サンタクララ市)で製造されるGTX285装置である。この装置は其々8個のプロセシングコア を有する30個のマルチプロセッサ装置からなる。さらに或いは、ここに記載される実施形態はGPUの使用に関しているが、開示された方法及びシステムは、多重のプロセシングコア を並列で操作する、デジタル信号処理器(DSP)や多重コアCPUのような他の様々なタイプのプロセッサで使用可能である。
(依存図を使用した依存問題の表示)
CPU28は、入力依存問題を、以後「処理要素」(PE)と呼ばれる原子実行タスクにより表示する。依存問題がGPU32により実行される場合、各PEはあるプロセッサ44により実行される1つのスレッドに対応する。CPUは典型的にPEのタイプのライブラリを保持し、その各タイプはある一定の原子タスクを遂行する(例えば参照テーブルの参照、フリップフロップ、バッファ操作、メモリアクセス操作、マルチプレクス操作、算術計算、論理操作または他の適合するタスクタイプ)。各PEは1つのタイプに属し、一定のデータ上で動作する。
CPU28は、入力依存問題を、以後「処理要素」(PE)と呼ばれる原子実行タスクにより表示する。依存問題がGPU32により実行される場合、各PEはあるプロセッサ44により実行される1つのスレッドに対応する。CPUは典型的にPEのタイプのライブラリを保持し、その各タイプはある一定の原子タスクを遂行する(例えば参照テーブルの参照、フリップフロップ、バッファ操作、メモリアクセス操作、マルチプレクス操作、算術計算、論理操作または他の適合するタスクタイプ)。各PEは1つのタイプに属し、一定のデータ上で動作する。
プロセッサ44が単一命令多重スレッド(SIMT)モードで動作する場合、各スレッドは典型的に異なる処理要素PEのタイプを走らせることが出来る符号からなる。スレッドが実行される場合、スレッドに実行される実際の処理要素PEのタイプはデータにより選択される。スレッドに読み込まれるデータは、例えば、所望の処理要素PE機能性を実行する1つのプログラムアドレスにジャンプすることにより、又は他の適合する選択手段を使用して、実際の処理要素PEタイプを選択可能である。1つの典型的なスレッドはこのように以下のフローを実行する:
・所望の処理要素PEタイプをデバイスメモリ56から読み、この処理要素PEタイプを実行する適切なアドレスにジャンプする。
・処理要素PEパラメータおよび入力値をデバイスメモリ56から読む。
・所望の処理要素PE機能性を実行する。
・処理要素PE出力値をデバイスメモリ56に書き込む。
(デバイスメモリ56に効率的にアクセスするため、CPU28は処理要素PEを処理要素PEグループ(PEG)に分割する。この特徴は以下に詳述されるが、上記の特許文献14にも記載されている。)典型的にスレッドのロード及び保存操作は、スレッドの処理要素PEパラメータとはリンクしていない。例えば、所与のPEGはデバイスメモリから共有メモリへの64個までのロード命令をサポートするかもしれない。所与のスレッドはそのスレッドの処理要素PEに使用されないデータをロードするかもしれない。
・所望の処理要素PEタイプをデバイスメモリ56から読み、この処理要素PEタイプを実行する適切なアドレスにジャンプする。
・処理要素PEパラメータおよび入力値をデバイスメモリ56から読む。
・所望の処理要素PE機能性を実行する。
・処理要素PE出力値をデバイスメモリ56に書き込む。
(デバイスメモリ56に効率的にアクセスするため、CPU28は処理要素PEを処理要素PEグループ(PEG)に分割する。この特徴は以下に詳述されるが、上記の特許文献14にも記載されている。)典型的にスレッドのロード及び保存操作は、スレッドの処理要素PEパラメータとはリンクしていない。例えば、所与のPEGはデバイスメモリから共有メモリへの64個までのロード命令をサポートするかもしれない。所与のスレッドはそのスレッドの処理要素PEに使用されないデータをロードするかもしれない。
上記の技術を1つの単一命令多重スレッド(SIMT)プロセッサで使用する場合、ユニットがSIMTモードで効率的に動作するため、1つの所与の多重プロセッサSIMTユニットで同時に実行される予定のスレッドは、同一の処理要素PEタイプを実行することが一般的に望ましい。
図3は本発明の実施形態に基づく、依存図で表示された依存問題である。CPU28は、実行依存性によって相互接続された多重の処理要素PEを使用して依存問題を示す。所与の1つの依存性は、ある処理要素PE(「駆動」処理要素PEと呼ばれる)の出力が他の1つの処理要素PE(「従動」処理要素PEと呼ばれる)の入力として使用されることを特定する。言い換えれば、従動処理要素PEは駆動処理要素PEに依存する。このような依存性は、駆動処理要素PEが従動処理要素PEに先だって実行されることを意味する。何故ならば、そうでなければ従動処理要素PEの入力は有効ではないからである。
図3は依存図72に変換される依存問題68の例である。依存図72は処理要素PEを示す多重の頂点76と、実行依存性を示す方向性のエッジ80とを有する。所与のエッジは、駆動処理要素PEから従動処理要素PEに向いている。ある実施形態では、CPU28は多重のサブ図78を依存図72から生成する。一般的に循環的な依存図72と異なり、サブ図78は非循環的である。
以下に記述される方法は所与の非循環的サブ図をGPU32上で実行される符号に変換する。多重のサブ図を使用した依存問題が示されると、開示された方法は典型的に各サブ図に別個に適用される。ある実施形態では、異なるサブ図の変数の共通性が計算の効率性を高めるのに利用される。これらの特徴は以下で更に記述される。
(静的呼び出しデータベース(SID)を使用した依存図の表示と実行)
ある実施形態では、CPU28は入力依存問題をコンパイルし、以後「静的呼び出しデータベース(SID)」と呼ばれる呼び出しデータ構造を生成する。SIDは実行のためGPU32に提供される。CPU28は、典型的にSIDを生成するコンパイルプログラムを実行する。以下の説明では、CPU28で遂行されるアクションは、ときどき明確化のため、コンパイラにより実行されると表現される。しかし他の実施形態では、コンパイラはSIDを生成するため適合するいかなるプロセッサ上でも走る。生成されたSIDは実行のためシステム20に提供される。
ある実施形態では、CPU28は入力依存問題をコンパイルし、以後「静的呼び出しデータベース(SID)」と呼ばれる呼び出しデータ構造を生成する。SIDは実行のためGPU32に提供される。CPU28は、典型的にSIDを生成するコンパイルプログラムを実行する。以下の説明では、CPU28で遂行されるアクションは、ときどき明確化のため、コンパイラにより実行されると表現される。しかし他の実施形態では、コンパイラはSIDを生成するため適合するいかなるプロセッサ上でも走る。生成されたSIDは実行のためシステム20に提供される。
SIDは、互いに並行して、そしてGPUの内部スケジュールポリシーに関係なく特定の順番で走ることを保障された、1組の処理要素PE実行連鎖を有する。GPUがSIDで呼び出された場合、各実行連鎖はGPUにスレッドの1ブロックとして提供される。このように、各連鎖の中の処理要素PEはGPU32内の同一のマルチプロセッサ装置40で走ることが保障される。また、SID内の実行連鎖の数はGPUにより同時に実行される最大ブロック数を越えない。その結果実行連鎖はGPU内で同時に実行されることを保障され、そして一般的にブロックマネージャ64の内部スケジュールポリシーに影響されない。言い換えれば、GPUの内部スケジュールポリシーは、効率的に迂回され、処理要素PEの実行順序は完全にSIDにより制御される。
図4は本発明の実施形態に基づく、静的呼び出しデータベース(SID)90の概略図である。SID90は1組の実行連鎖、本事例では4つの連鎖98A...98Dを有する。しか一般的に、1より大きく、GPUが同時に実行可能なブロックの最大数を越えない、適合する数の連鎖が使用可能である。各実行連鎖は次から次へ実行される一連のPEG94を有する。(処理要素PEのPEGへのグループ化は以下で記述される。)
GPUが同時に実行可能なブロックの数は典型的にマルチプロセッサ装置40の数に其々のマルチプロセッサ装置により同時に実行可能なブロックの数を乗じた値により与えられる。実際のマルチプロセッサ装置当りの同時に実行可能なブロックの数は、マルチプロセッサ装置の資源(例えば、レジスタ、共有メモリ又はスレッドカウント)により制限されうるので、特定されたマルチプロセッサ装置当りの同時実行可能ブロック数より小さい。
ある場合には、実際のマルチプロセッサ装置当りの同時実行可能ブロック数は次式で表わされる。
例えばGTX285 GPUは、30個のマルチプロセッサ装置40を有する。各マルチプロセッサ装置は16,384個のレジスタと16Kバイトの共有メモリを有し、1,024個のスレッドと8個のブロックを同時にサポートする。1つの例示実施形態では、コンパイラに生成されたGPU符号は、1スレッド当り2KBの共有メモリと15個のレジスタを使用し、各ブロックは64個のスレッドからなる。この符号は1ブロック当り総計15x64=240個のレジスタを有する。この例では、マルチプロセッサ装置当りの同時ブロックの数は次式で与えられる。
GPU全体の同時実行可能ブロック数は従って8X30=240個となる。
異なる実行連鎖は一般的に異なる長さ、即ち、異なる実行時間を有する。典型的にCPU28は依存性問題を実行時間が最小の静的呼び出しデータベース(SID)にコンパイルするように試みる。言い換えれば、CPUは最大許容連鎖数を越えることなく、最短実行連鎖のSIDを生成するように試みる。この種のSID生成工程の事例は以下で詳述される。
各実行連鎖は同一のマルチプロセッサ装置40で動作することを保障されたスレッドのブロックを有するので、ある所与の連鎖の中のPEGは正しい順序で実行されることを保障されている。このように同一の実行連鎖の中で駆動処理要素PEを其々の従動処理要素PEの前に配置することは処理要素PEの間の実行依存性が破られないことを保障する。さらに、同一の実行連鎖に属するPEGは、この連鎖を実行するマルチプロセッサ装置の共通メモリ52を使用してデータを交換してもよい。
しかし多くの依存性問題では、同一の実行連鎖に全ての依存する処理要素PEのペアを配置するという制約は厳しすぎる。このような制約はしばしば少数の非常に長い実行連鎖を生成し、従って実行時間を増加させ、到達可能な並列化を制限する。多くの場合、実行依存性を維持しながら異なる実行連鎖に依存性処理要素PEを配置することが好ましい。
ある実施形態では、異なる連鎖内に配置された処理要素PEの間の依存性を維持するため、コンパイラがSID内の異なる実行連鎖の間の同期化を強制する。例えば図4では、連鎖98B内のPEG102が連鎖98A内のPEG106に、依存性110に示されるように、依存する。(より正確には、PEG102は、PEG106の1つの処理要素PEに依存する1つの処理要素PEを含む。)PEG106がPEG102より完全に前に実行を開始することを保障するために、コンパイラは同期化要素、例えば、SYNC PEG114を、連鎖98B内においてPEG102より前に配置する。SYNC114は連鎖98Bの実行を、PEG106が実行を完了し有効な出力を生成するまで、停止する。PEG106の出力はその後入力としてPEG102に提供され、そして連鎖98Bは実行を開始してもよい。同様に、連鎖98C内のPEG118は連鎖98D内のPEG122に、依存性126が示すように、依存する。この依存性を維持するため、コンパイラはSYNC PEG130を連鎖98C内のPEG118の前に配置する。
連鎖間の同期化は典型的にデバイスメモリ56を使用して遂行される。例えば、駆動PEGはデバイスメモリ56内のある領域に書き込むことにより、その実行状況の信号を送る。SYNC PEGは、この領域を調査し、駆動PEGが実行を完了した場合にだけ、その連鎖の実行を再開する。
しかし、異なる連鎖内の依存性処理要素PEのペアのすべてが、SYNC PEGの追加を必要とするわけではないことに注意する必要がある。例えば、連鎖98C内の最後のPEGが連鎖98Dの最初のPEGに依存すると仮定する。この場合連鎖98Cにもう1つのSYNC PEGを追加する必要はない。何故ならば、現存するSYNC PEG130が既に連鎖98Dの最初のPEGが実行を完了するまでは、連鎖98C内の最後のPEGは実行しないことを保障しているからである。
一般的に、あるSYNC PEGは、所望の数の連鎖の中の所望の数のPEGに依存する、即ち、既定の組の駆動PEGが実行を完了するまで、所与の連鎖の実行を停止する。ある実施形態では、同期化機能性は、独自のSYNC PEGを使用することなく、従動PEGに埋め込まれる。
連鎖の間の同期を強制することは、異なる連鎖の実行時間をバランスさせる上で非常に有効であり、それにより並列化を増大させる。他方で、同期化構造はレイテンシをもたらし、デバイスメモリ56への高価なアクセスをもたらす。以下に記述するように、コンパイラは典型的に、静的呼び出しデータベース(SID)の総実行時間を最短にするため、これらの利点と欠点を相殺するように試みる。
図5は本発明の実施形態に基づく、依存問題を実行する方法を示すフロー図である。方法は、図の入力ステップ134において、CPU28が依存図で表わされる依存問題の入力を受け取ることから始まる。CPUは、分割ステップ138において、依存図を、非循環性の指向性サブ図に分割する。依存図の非循環性の指向性サブ図への分割は上記特許文献14に記載されている。各サブ図に対し、CPUは、グループ分けステップ142において、処理要素PEをPEGにグループ分けし、静的呼び出しデータベース(SID)構築ステップ146において、SID内にPEGを配置する。CPUは、呼び出しステップ150において、SIDを実行するためGPU32を呼び出す。GPUはSID内のPEG連鎖を実行し、コンピュータ計算タスクの結果を生成する。
(効率的な静的呼び出しデータベース(SID)生成)
上述のように、CPU28上のコンパイラの実行は、典型的に、所与の最大実行連鎖数に対して最短実行時間のSIDを生成するように試みる。このような工程に対する入力は、SIDに変換される、指向性の非循環性の処理要素PEの依存性サブ図である。ある実施形態では、コンパイラは、処理要素PE間の実行依存性を維持するような方法で、2次元のワープのグリッドを処理要素PEで徐々に満たすことにより、SIDを生成する。
上述のように、CPU28上のコンパイラの実行は、典型的に、所与の最大実行連鎖数に対して最短実行時間のSIDを生成するように試みる。このような工程に対する入力は、SIDに変換される、指向性の非循環性の処理要素PEの依存性サブ図である。ある実施形態では、コンパイラは、処理要素PE間の実行依存性を維持するような方法で、2次元のワープのグリッドを処理要素PEで徐々に満たすことにより、SIDを生成する。
ワープは、所与のマルチプロセッサ装置で同時にかつ効率的に走る同じタイプのスレッドのグループである。1つのワープの最大スレッド数(従って最大処理要素PE数)はGPUタイプごとに異なる。例えばNVIDIA社のGTX285では、各ワープは32個のスレッドを走らせる。以下に示すように、複数のワープが後に集合され1つのPEGを形成する。
図6は本発明の実施形態に基づく、SID生成に使用されるワープグリッドを示す図である。グリッド160は多重の実行連鎖164からなり、その其々は多重のワープスロット168からなる。ワープスロットは当初は空であり、コンパイラは徐々にそれを処理要素PEで満たす。異なる実行連鎖間の同期を強制するため、コンパイラは時々SYNCワープ172を連鎖に挿入する。(SYNCワープは実行するスレッドを含まない点で通常のワープとは異なる。SYNCワープは、連鎖に挿入されるSYNC動作のレイテンシを真似する。)工程の終わりには、入力サブ図内の各処理要素PEはワープスロットの1つに配置される(各ワープスロットは多重の同タイプの処理要素PEを有してよい)。その後コンパイラは、PEG176をそのワープから形成する。ある場合には所定の連鎖の中の2つ以上の隣接するワープを合体させて1つのPEGを形成する。PEGのグリッドは所望の静的呼び出しデータベース(SID)として出力される。
典型的に、グリッド160内の実行連鎖164の数は、GPUが同時に実行できる最大スレッドブロック数を超えないように設定され、その結果としてのSIDの実行はGPUの内部スケジュール管理に影響されない。1連鎖あたりワープスロット数は、典型的に、入力サブ図の中の最長パスの長さが初期値としてセットされる。
処理要素PE間の依存性により、各処理要素PEは、グリッド160の列のある部分的サブ組の内にのみ配置可能である。このサブ組は処理要素PEの「割当間隔」と呼ばれる。例えば、他の処理要素PEに依存する1つの処理要素PEはそのワープグリッドの第1列には配置出来ない(即ち、実行連鎖の最初には)。何故ならば、駆動処理要素PEが最初に実行されなければならないからである。同様に、他の処理要素PEを駆動する処理要素PEはグリッドの最後の列には配置出来ない。
一般的に、サブ図内の各処理要素PEは、ある割当間隔を有し、それは処理要素PEが潜在的に配置可能なグリッド160の列を画定する。1つの処理要素PExの割当間隔は、PExの後方位相(BP(x)と表示される)及び、前方位相(FP(x)と表示される)の2つのパラメータに依存する。所与の処理要素PEの後方位相は、サブ図内の最長パスに沿ったこの処理要素PEに至る処理要素PEの数で定義される。所与の処理要素PEの前方位相は、サブ図内の最長パスに沿ったこの処理要素PEから始まる処理要素PEの数で定義される。
この言葉を使用して、サブ図の中の最長パスの長さは(従って、ワープグリッドの列の数は)L=max(BP(x)+FP(x))+1で与えられ、ここに最大値はサブ図内の全ての処理要素PExを対象として得られる。処理要素PExの割当間隔は[BP(x),L−FP(x)]で与えられる。これらの割当間隔は、割当工程の最初の状態を反映する。割当間隔は典型的に、割当工程が進行するにつれ変化する。
図7は本発明の実施形態に基づく、ワープのグリッド内に処理要素PEを配置するための割当間隔を示す図である。図7は例示としてのサブ図180に関し、それはA...Hで示される8個の処理要素PE76を有する。処理要素PEは2つの連鎖164を持つワープグリッドに配置される。この図を貫通する最長パスは3処理要素PE長の長さなので、各連鎖164はこの例では3つのワープスロット168を有する。
割当工程の最初に、即ちワープグリッドがまだ空の時に、8つの処理要素PEは図にしめすような割当間隔184を有する。この例では、処理要素PEのAとBは、それぞれ2つの処理要素PEのパスを駆動するため、グリッドの第1列にのみ配置可能である。処理要素PEのCは1つの処理要素PEのパスを駆動するため、最後の列を除くどの列にも配置可能である。処理要素PEのDとEは、それぞれ、1つの処理要素PEに駆動され、かつ1つの処理要素PEを駆動するため、第2列にのみ配置可能である。処理要素PEのFは1つの処理要素PEパスに駆動されるので第1列を除くどの列にも配置可能である。処理要素PEのGとHはそれぞれ2つの処理要素PEパスに駆動されるため、最後の列にのみ配置可能である。
図7の事例は、ある処理要素PEは、グリッド160内の配置可能性という点で、他の処理要素PEよりもより重い制約を受けることを示す。短い割当間隔を持つ処理要素PEは重く制約され、一方長い割当間隔を持つ処理要素PEは割当の自由度が大きい。
図8は本発明の実施形態に基づく、静的呼び出しデータベース(SID)を生成する方法を示すフロー図である。方法は、入力ステップ190において、CPU28上で走るコンパイラが、SIDに変換される依存性サブ図を受け取ることから始まる。ある実施形態では、コンパイラは、サブ図が由来する完全な依存図をも受け取り、その依存図は典型的に追加の処理要素PEと依存性を有する。他のSIDに関係なく単一のSIDを生成する場合には、通常、完全な依存図を受け取る必要はない。しかしコンパイラは、同じ依存図内の他のサブ図のSIDを考慮する場合に、完全な依存図を使用する。この特徴は以下で更に記述される。更に、コンパイラは、実行連鎖の数N、ワープスロットユニット内のSYNCのレイテンシD、ワープ寸法(即ち1ワープ当りの処理要素PEの数)及び処理要素PEタイプ、を入力として受け取ってもよい。
コンパイラは、インターバル初期化ステップ194において、サブ図内の処理要素PEに対する割当間隔を初期化する。上述のように、処理要素PExの最初の割当間隔は[BP(x),L−FP(x)] で与えられる。
コンパイラは、グループ定義ステップ198において、処理要素PE入力及び出力グループを定義する。入力グループは、1つの共通の入力を有する1グループの処理要素PEからなる(即ち、同じ駆動処理要素PEから駆動される処理要素PE)。共通の駆動処理要素PEはグループのピボットと呼ばれる。出力グループは1つの共通の出力を有する1グループの処理要素PEからなる(即ち、同じ従動処理要素PEを駆動する処理要素PE)。共通の従動処理要素PEはグループのピボットと呼ばれる。
例えば、コンパイラは、依存図全体の各処理要素PExに対しその処理要素PExがピボットである1つの出力グループを作成してもよい。この出力グループ内の処理要素PEは、サブ図内のその処理要素PExを駆動する処理要素PEからなる。同様にコンパイラは、依存図全体の各処理要素PExに対しその処理要素PExがピボットである1つの入力グループを作成してもよい。この入力グループ内の処理要素PEは、サブ図内のその処理要素PExにより駆動される処理要素PEからなる。この例では、コンパイラは、依存図全体の各処理要素PEに対し入力及び出力グループを生成することに注意する。しかし、グループ内の処理要素PEは、サブ図からのみ選択され、依存図全体からは選択されない。
入力及び出力グループを構築する理由は、共通の入力及び/又は出力を有する処理要素PEを同じ実行連鎖の中に配置することが一般的に望ましいからである(異なるワープの中に配置する可能性はあるが)。依存図全体を考慮する理由は、他の静的呼び出しデータベース(SID)において処理要素PEの共通の入力又は出力として機能する処理要素PEを、同じ連鎖に配置することが望ましい場合があるからである。コンパイラは、サブ図内の各処理要素PEに、その処理要素PEを含む入力及び出力グループの数として定義される、グループスコアを割り当てる。
コンパイラは、グリッド初期化ステップ202において、それぞれL個のワープスロットを有するN個の実行連鎖からなるワープのグリッドを初期化する。
コンパイラは、グリッド初期化ステップ202において、それぞれL個のワープスロットを有するN個の実行連鎖からなるワープのグリッドを初期化する。
ある実施形態では、コンパイラは、保存ステップ206において、サブ図の処理要素PEを事前ソートする。コンパイラは、割当間隔の寸法の小さい順に処理要素PEをソートする。割当間隔の寸法が同じ処理要素PEはグループスコアの大きい順にソートする。その後コンパイラは、ソートされた順番に従ってグリッド内での配置のため処理要素PEを選択する。このように割当間隔の寸法が最短の処理要素PEがグリッド内に最初に配置される。ある所与の割当間隔の寸法に対して、グループスコアの大きい処理要素PE(多数の入力及び/又は出力グループのメンバーである処理要素PE)が先に配置される。他の実施形態では、コンパイラは、割当間隔寸法が最短のM個(Mは既定の整数)の処理要素PEを選択することにより、グリッド内での配置のための次の処理要素PEを選択する。これらの処理要素PEから、コンパイラは、最大グループスコアの処理要素PEを選択する。上記の割当順序は最も制約の重い処理要素PEを最初に割り当て、その後の割当の繰り返しに出来るだけ自由度を残すように試みている。
コンパイラはこの処理要素PEの選択ステップ210において、グリッド内に配置するための次の処理要素PEをソートされた処理要素PEの中から選択する。次にコンパイラは、コスト計算ステップ214において、この処理要素PEをグリッド内に配置する可能性について其々の割当コストを計算する。典型的に、コンパイラは、N個の実行連鎖に亘って、処理要素PEの割当間隔内のワープスロットを吟味する。(ある場合にはたとえ処理要素PEの割当間隔内にあっても、ある一定のワープは所与の処理要素PEを配置する候補にはならない。例えば、そのワープがすでに満員であり、又はそのワープが、吟味される処理要素PEとタイプが異なる処理要素PEを有する場合である。)
ある実施形態では、コンパイラは、ある所与の処理要素PEの割当間隔内の僅かに外側にあるワープを吟味してもよい。例えば、ある場合には、処理要素PEをその割当間隔を越えて故意に外側に配置する(そしてそれによりSID実行時間を僅かに増加させる)ことが好ましく、これはSYNCを追加すること(これはSID実行時間に更に悪い影響を与える)と対照的である。このようにある実施形態では、コンパイラは、割当間隔に追加して、SYNCによってもたらされたレイテンシの順に並んだ複数のワープスロットを吟味する。
コンパイラは、各潜在的ワープスロットの割当コストを計算する。割当コストは数量的基準であり処理要素PEをある特定のワープスロットに配置する潜在的ペナルティを示す。
コンパイラは、各潜在的ワープスロットの割当コストを計算する。割当コストは数量的基準であり処理要素PEをある特定のワープスロットに配置する潜在的ペナルティを示す。
コンパイラは、割当コストの計算に、どのような適合する判断基準又は常識的なルールを適用してもよい。例示として以下のルールが使用可能である:
・処理要素PEを対象のワープスロットに配置することにより引き起こされる、全体のSID実行時間の中の其々のワープスロットの遅れに対し、コストを1000だけ増大する。このルールは全体実行時間を増大させることに対し厳しいペナルティを課す。
・吟味されるワープスロットと同じ連鎖内に既に配置され、そして吟味される処理要素PEを含んだ入力又は出力グループの一員である、各処理要素PEに対しコストを10だけ減少させる。このルールは入力又は出力グループのメンバーを同じ連鎖に配置することを優先させる。
・吟味される処理要素PEに付随し、残りの一方の処理要素PEが吟味されるワープスロットと同じ連鎖内にある、実行依存性(直接又は間接、前方又は後方)に対しコストをそれぞれ10だけ減らす。このルールは、1つの実行依存性の両端を同じ連鎖内に配置することを優先させる。
・吟味される処理要素PEの最適な列からの列距離に従ってコストを増大させる。処理要素PExの最適な列はBP(x)・L/ORIG_Lで定義され、ここにLはそのグリッド内の空でない列の現在の数を示し、L_ORGはサブ図内の最長パスを示す。最適な列はその処理要素PEの割当間隔の外にあるかもしれないことに注意する。
・処理要素PEを対象のワープスロットに配置することにより引き起こされる、全体のSID実行時間の中の其々のワープスロットの遅れに対し、コストを1000だけ増大する。このルールは全体実行時間を増大させることに対し厳しいペナルティを課す。
・吟味されるワープスロットと同じ連鎖内に既に配置され、そして吟味される処理要素PEを含んだ入力又は出力グループの一員である、各処理要素PEに対しコストを10だけ減少させる。このルールは入力又は出力グループのメンバーを同じ連鎖に配置することを優先させる。
・吟味される処理要素PEに付随し、残りの一方の処理要素PEが吟味されるワープスロットと同じ連鎖内にある、実行依存性(直接又は間接、前方又は後方)に対しコストをそれぞれ10だけ減らす。このルールは、1つの実行依存性の両端を同じ連鎖内に配置することを優先させる。
・吟味される処理要素PEの最適な列からの列距離に従ってコストを増大させる。処理要素PExの最適な列はBP(x)・L/ORIG_Lで定義され、ここにLはそのグリッド内の空でない列の現在の数を示し、L_ORGはサブ図内の最長パスを示す。最適な列はその処理要素PEの割当間隔の外にあるかもしれないことに注意する。
ある実施形態では、コンパイラは、その処理要素PEがある一定のワープスロットに配置されたと仮定して、その処理要素PEを横切るサブ図の異なるクリティカルパスを吟味し、それらの存続時間を計算することにより、割当コストを計算してもよい。この種の計算は、潜在的に追加される追加のSYNC及びそれらの関連するコストを考慮する。さらにあるいは、コンパイラは吟味される処理要素PEの割当間隔内の異なるワープスロットに、適合する判断基準又は常識的なルールを使用して、割当コストを割り当ててもよい。
コンパイラは、配置ステップ218において、その処理要素PEを最小割当コストのワープスロットに配置する。新規の配置のため必要な場合、コンパイラは、挿入ステップ222において、1つのSYNCを挿入する。1つのSYNCは整数の数のワープスロット、例えば2つのワープスロットの既定の持続時間を有する。各SYNCは、SYNCが自身の連鎖の実行を開始する前にその実行を終了しなければならない、1つのリスト内の1つ以上のワープを有する。ある所定のSYNCにより選ばれたワープは、どんな数の連鎖の中に存在してもよい。そのリストは典型的に同じ連鎖からの多重のワープを含まない。
コンパイラは、割当間隔更新ステップ226において、新しい配置の後の配置可能性を反映するため、残る割当されていない処理要素PEの割当間隔を更新する。
コンパイラは、割当間隔更新ステップ226において、新しい配置の後の配置可能性を反映するため、残る割当されていない処理要素PEの割当間隔を更新する。
ある実施形態では、コンパイラは、更新ステップ230において、新しい配置の後で残った処理要素PEのグループスコアを更新する。例えば、コンパイラは、新規に配置された処理要素PEと同じ入力又は出力グループを共有する処理要素PEのグループスコアを増大させてもよい。このルールは、それらのメンバーが既に部分的に割り当てられている入力又は出力グループを優先させる。他の例として、コンパイラは、1つの実行依存性を共有する(直接又は間接に、前方又は後方)処理要素PEのグループスコアを増加させてもよい。
コンパイラは、チェックステップ234において、サブ図の中の全ての処理要素PEがワープグリッド内に配置されたかをチェックする。割当されていない処理要素PEが有る場合、方式のループはステップ210に戻り、コンパイラが次に配置される処理要素PEを選択する。全ての処理要素PEが割り当てられていた場合、コンパイラは、PEG生成ステップ238において、連続するワープをPEGにグループ化する。典型的に、各PEGは、例えば、最大2ワープと1つの追加SYNCのような、ある一定の数の同じ連鎖内の連続するワープのみを有する。更に、1つのPEGは互いに独立した処理要素PEのみを有する、何故ならばPEG内の処理要素PE実行の順番に保障が無いからである。例えば上記図6では、あるPEG176は単一のワープからなり、他は2つのワープからなり、あるPEGは1つのワープと1つのSYNCからなる。
この段階において、コンパイラは、出力ステップ242において、満員のワープグリッド(N個のPEG実行連鎖の1組)を所望のSIDとして出力する。
典型的に、上記のSID生成工程は、ワープスロットの継続時間が、ロード、同期化、実行及び保存のような異なるPEG動作の継続時間を考慮していると仮定している。しかしある場合には、ロード及び保存命令の継続時間は無視してもよい。上記の記述は、全てのワープが同じ継続時間であり、SYNCの継続時間はワープスロットの整数倍である、と仮定している。記述は又、PEGの継続時間がそのワープとSYNCの合計継続時間と等しいと仮定している。しかし、これら全ての仮定は強制ではなく、他のSID生成の構成では他の仮定を設定してもよい。
典型的に、上記のSID生成工程は、ワープスロットの継続時間が、ロード、同期化、実行及び保存のような異なるPEG動作の継続時間を考慮していると仮定している。しかしある場合には、ロード及び保存命令の継続時間は無視してもよい。上記の記述は、全てのワープが同じ継続時間であり、SYNCの継続時間はワープスロットの整数倍である、と仮定している。記述は又、PEGの継続時間がそのワープとSYNCの合計継続時間と等しいと仮定している。しかし、これら全ての仮定は強制ではなく、他のSID生成の構成では他の仮定を設定してもよい。
ある場合には、コンパイラは、最大実行連鎖長、即ち、SID合計実行時間を増大する必要がある。例えば、コンパイラがある一定の処理要素PEをPE割当間隔内のどのワープにも配置出来ない場合、Lの増加は必要かもしれない。Lは又SYNCの挿入の後で増加されてもよいが、SYNCの挿入は必ずしもLの増加をもたらさない。Lの増加は典型的に、ある一定の列より先の従前に配置されたワープ及びSYNCが、右方向に押しやられることを意味する。この押しは、他のワープやSYNCを右押しする動作の、その後の連鎖の引き金となる。ある一定のワープ位置の割当コストを計算する場合(上記ステップ214で)、SIDの総実行時間Lを増加させる右押し動作に対してのみ、コストは通常増大される。Lを変えない右押し動作は、割当コストを生じない。
多くの場合、コンパイラは、所与の処理要素PEの配置に関し幾つかの選択肢に遭遇する。ある場合には、所与の処理要素PEを最小コストの位置に配置する(上記ステップ218において)ことは、この配置が将来の処理要素PE配置において重大なペナルティを引き起こすため、総体的に最適でないことがある。従ってコンパイラは、2つ以上の選択できるSIDを並行して考慮し、これらSIDの中で2つ以上のそれぞれの割当工程を実行することにより、処理要素PE割当工程を改善してもよい。「Aスター」構成のような、種々の検索方法あるいは汎用の検索アルゴリズムも、全体として最善のSIDを探すために使用可能である。
(効率的なSID操作のためのメモリ管理)
認識できるように、GPU32上でのSIDの実行は、多数のメモリアクセス動作を伴う。GPU内では、データはデバイスメモリ56又は共有メモリ52に保管可能である。デバイスメモリ56は、典型的に、大きな保存空間を提供する(例えば、数ギガバイト)が、このメモリへのアクセスはレイテンシの観点でコストが高い。典型的に、マルチプロセッサ装置40は大きな粒度(例えば、一度に512ビット)でデバイスメモリ56にアクセスする。このように、デバイスメモリ56に対する単一ビットの読み取り又は書込みのコストは、512ビットの読み取り又は書込みのコストとほぼ等しい。デバイスメモリ56に対する読み取り又は書込みの命令は、典型的に、これら大粒度アドレスに揃えられている。それに対して各マルチプロセッサ装置内の共有メモリ52は、マルチプロセッサ装置の各プロセッサ44により、アライメントすることなく小さな粒度で比較的早いアクセス時間でアクセス可能である。しかし共有メモリ52の大きさは、デバイスメモリに比べて非常に小さい(例えば、ギガバイトに対しキロバイト程度である)。
認識できるように、GPU32上でのSIDの実行は、多数のメモリアクセス動作を伴う。GPU内では、データはデバイスメモリ56又は共有メモリ52に保管可能である。デバイスメモリ56は、典型的に、大きな保存空間を提供する(例えば、数ギガバイト)が、このメモリへのアクセスはレイテンシの観点でコストが高い。典型的に、マルチプロセッサ装置40は大きな粒度(例えば、一度に512ビット)でデバイスメモリ56にアクセスする。このように、デバイスメモリ56に対する単一ビットの読み取り又は書込みのコストは、512ビットの読み取り又は書込みのコストとほぼ等しい。デバイスメモリ56に対する読み取り又は書込みの命令は、典型的に、これら大粒度アドレスに揃えられている。それに対して各マルチプロセッサ装置内の共有メモリ52は、マルチプロセッサ装置の各プロセッサ44により、アライメントすることなく小さな粒度で比較的早いアクセス時間でアクセス可能である。しかし共有メモリ52の大きさは、デバイスメモリに比べて非常に小さい(例えば、ギガバイトに対しキロバイト程度である)。
本発明のある実施形態では、デバイスメモリ56に効率的にアクセスし、付随するレイテンシのペナルティを最小にするため、SID内のPEG連鎖は共有メモリ52をキャッシュメモリとして使用する。以下の記述では、「共有メモリ」と「キャッシュ」は
場合により互換性を持って使用される。
場合により互換性を持って使用される。
ここに記載されるキャッシュおよびメモリ管理構造は、コンパイルの間に完全に決定され、SIDの実行の間中、決定論的であり続けることが重要である。この特徴は、動作が実行時のデータにより変化し、従って本質的に統計的な既知のキャッシュ構造とは異なっている。ここに記載された技術の中で、データが異なるPEG連鎖により呼び出され生成される、パターンとタイミングはコンパイル中に経験的に知られる。コンパイラはこの知識を利用して、デバイスメモリ56にアクセスする最適なメモリ管理方法(例えば、一定の変数を一定のタイミングでキャッシュイン又はアウトし、又は多重の読み出し要求を1つの読み出し動作に統合する)を決定する。このような方法は、実行時間においてGPUにより決定論的に実行される。
図9は本発明の実施形態に基づく、キャッシュ管理体系の概略図である。図9はP1,P2...P9で示される9個のPEGからなる特定の1つのPEG実行連鎖に関している。PEGはA...Fで示される6個の変数を入力として使用し、各PEGはこれら変数のある一定のサブ組を使用する。この事例では、共有メモリ52はある時点で最大3個の変数を保持出来る。コンパイラは、決定論的にキャッシュパターンを定義し、それは共有メモリ52の限られた容量を最適に使用し、またデバイスメモリ56からの読み出し回数を最小化するため、いつある変数がデバイスメモリ56から共有メモリ52に取得され、そしていつある変数が廃棄されるかを特定する。
図の上側の領域250は、各PEGにより入力として使用される変数を示す。例えばPEG P1は入力として変数AとBを使用し、PEG P2は変数BとCを使用し、PEG P3は変数Aのみを使用、等々である。上向き矢印は対応するPEGによりデバイスメモリ56から共有メモリ52に取得された変数を示す。下向き矢印は、次のPEGで必要とされる空間を空けるため、PEGの実行の後共有メモリから廃棄される変数を示す。太字で囲われた変数は、キャッシュヒット、即ち、キャッシュ内に既に存在していてデバイスメモリから取得する必要のない変数を示す。例えば、PEG P2の実行の準備においては、変数Bは従前のPEGから共有メモリ52に存在するため、変数Bをデバイスメモリから取得する必要はない。
図9の下方の領域254は、各PEGの始まりにおける共有メモリ52の内容を示す。例えば、PEG P1の始まりにおいては、共有メモリは変数AとBを保持する。変数CはPEG P2の始まりに取得され、共有メモリは変数A、BとCを保持する。キャッシュはPEG P3とPEG P4の間は変化しないが、変数Dを入力として必要とする。そのため変数AはPEG P3の終わりに廃棄され、変数DがPEG P4の初めに取得される。工程はPEG連鎖の実行の間続く。
ある時点において共有メモリに存在する各変数に対し、コンパイラはこの変数を入力として要求する連鎖内の次のPEGの識別を記録する。コンパイラは典型的に、PEG連鎖を実行順序に従ってスキャンすることにより、これらPEGの識別を決定する。記録されたPEGの識別は図の下方の領域254内に示される。例えば、変数AとBがPEG P1の初めに取得される場合、コンパイラは、変数Aは次にPEG P3により要求され、変数Bは次にPEG P2により要求されると認識する。他の事例は、PEG P3の初めにコンパイラは変数Aが次にPEG P5に要求され、変数BとCは共に次にPEG P4に要求されると認識する。文字∞はある変数がその連鎖の後続のPEGでは要求されないことを示す。
これらの記録を使用して、コンパイラは、共有メモリ内の空間を開ける必要がある場合、どの変数が廃棄されるかを決定する。ある変数を廃棄する必要がある時、コンパイラは、典型的に連鎖の中で最も遠いPEG、即ちこのPEGから最も距離が離れたPEGから要求される変数を廃棄する。例えば、PEG P3の終わりの状況を考えてみる。この時点ではすでに共有メモリは変数A,BとCを保持している。PEG P4で変数Dを取得してくるには、いずれかの変数が廃棄されなければならない。AはPEG P5で要求される予定であり、BとCはそれより早くPEG P4で要求される予定であるので、変数Aが廃棄される。
図9の例は、特定の連鎖、特定の変数及び特定のキャッシュ容量に関している。しかし一般的に、このキャッシュ管理体系は、他の適合するPEG連鎖、変数の組及びキャッシュ容量に使用可能である。他の実施形態では、コンパイラは共有メモリ52内の変数のキャッシュイン及びキャッシュアウトを他の適合する基準を使用して設計する。GPUにより一定のPEG連鎖を実行するように指定されたマルチプロセッサ装置40は、コンパイラにより設定された決定論的なパターンに従って、デバイスメモリ56から共有メモリ52へ変数を取得する。典型的に、同様の工程がSID内の各PEG連鎖に対して実行される。コンパイラは、異なる変数を要求するPEGを記録するため、適合するデータ構造を使用する。
ある実施形態では、コンパイラは、デバイスメモリからのコスト高な取得動作の回数を減少させるため、デバイスメモリ56から共有メモリ52への多重の変数の取得を、単一の取得命令に集約する。上述のように、典型的なGPUでは、単一の変数をデバイスメモリから取得する手間は、512ビットを占有する変数を取得する手間とほぼ同じであり、従って集約して1つの命令で多数の変数を取得することは有利である。
図10Aと10Bは、本発明の実施形態に基づく、変数事前取得体系を示す概略図である。この例は、P1,P2...P9で示される9個のPEGからなる特定の1つのPEG実行連鎖に関している。PEGはA..D,S,Tで示される6個の変数を入力として使用する。変数A..DはこのSIDの内部で使用され、一方変数SとTはSID間の変数である。各図10Aと10Bにおいて、各列は連鎖の中のある一定のPEGに対応し、各行は変数に対応する。
各変数はある一定のPEGによりこの変数が入力として要求された時から、斜線を記される。例えば、変数Bは最初にPEG P3から要求され、従ってこの変数はPEG P3から先は斜線を記される。垂直線258は、このPEG連鎖と他の連鎖との間のSYNCsを示し、それは後続のPEGにより実行される。この事例では、SYNCはPEG P1,P4そしてP7により実行される。其々のSYNC258に対し、1つ以上の標識262はSYNCにより同期化された特定の変数を示す。例えば、PEG P4により実行されたSYNCは、変数CとDがもう1つの連鎖により準備が整うまで、実行を停止する。
ある実施形態では、コンパイラは、PEG連鎖をスキャンし、各命令により取得される変数とともに、デバイスメモリの取得命令のタイミングを設定する。典型的に、コンパイラは、(1)各変数を必要とするPEGへの距離と(2)効率的と考えられる1命令当りの取得動作の数、を考慮しながら、取得命令のタイミングと内容を設定しようとする。この情報に基づき、コンパイラは2つ以上の変数の取得を1つの命令に統合させようとする。
ある実施形態では、コンパイラはPEG連鎖を逆順序(即ち、実行順序と逆に)でスキャンする。各変数に対し、コンパイラは其々の取得間隔、即ち、変数が取得される間の時間間隔を標識付けする。この時間間隔はその変数が有効になった時に始まり、この変数を最初に入力として要求するPEGで終わる。コンパイラはその後取得動作のタイミングと内容をこれら時間間隔に基づいて設定する。
典型的に、各変数に対し、又各PEGに対し、コンパイラは、変数が有効である限り、PEGとこの変数を最初に要求するPEGとの距離(PEGのユニット数での)を標識付けする。所定の変数は、この変数を伴う直近のSYNC258の後に有効と見做されうる。本事例におけるコンパイラにより標識付けされた距離は図10Aと図10Bに示される。例えば変数DはPEG P4に最初に要求され、PEG P4以降(この変数を待つSYNCの後)何時でも取得可能である。コンパイラは標識付けされた距離に基づき取得動作のタイミングと内容を設定する。例えば、コンパイラは、PEG連鎖を実行順序に沿ってスキャンし、取得する必要のある変数を識別し、効率的な取得命令を生成するため他の変数の取得と合体させてもよい。コンパイラは、取得間隔が重複する2つ以上の変数を合体させてもよい。統合された取得命令はこの重複の間に配置される。
例えば、2つの変数を取得する命令が効率的であり、1つの変数を取得する命令が効率的でない、と考えられたと仮定する。図10Bの事例では、PEG P1,P2にたいする準備として、どの変数も取得される必要が無い。しかしPEG P3は変数Bを入力として必要とし、従ってコンパイラは、PEG P3に対する準備として実行されるデバイスメモリ56からの取得命令を画定する。デバイスメモリに効率的にアクセスするため、コンパイラは、もう1つの変数取得を同じ命令内に集める。コンパイラは、このPEGからの距離が最小(即ち、このPEGからこの変数を最初に要求するPEGまでの距離)の有効な変数を選択する。
この事例では、変数SとTはこの時点で有効であり、変数Tはより小さい距離を有している(6に対し3)。従ってコンパイラは、変数BとTを取得するための取得命令を画定する。一度これら変数が取得されると、これらは再び取得されないようにリストから×印で取り消される。工程は同様の論理を使用して続き、コンパイラは、2つの追加の取得命令を画定する。1つはPEG P4の前に変数CとDを取得する命令であり、他の1つはPEG P9の前に変数AとSを取得する命令である。この技術を使用して各変数は、それが有効となった後でかつ最初に入力として必要とされる前に取得され、取得命令は、1つの命令当りの多重の変数の取得を統合することにより、効率的に画定される。
図10Aと図10Bの例は、特定の連鎖、特定の変数、1命令当り特定の数の取得、及び特定の選択基準に関している。しかし一般的には、コンパイラは、他の適合するPEG連鎖、変数、1命令当りの取得数、及び選択基準を有する事前取得体系を適用してもよい。典型的に類似の工程がSID内の各PEG連鎖に対し実行される。コンパイラは、上記の時間間隔と距離を記録するため、適合するいかなるデータ構造を使用してもよい。
ある実施形態では、コンパイラは変数のデバイスメモリ56への保存(PEGにより生成される出力)を遅らせ、1保存命令に多重の変数を集める。1保存命令に多重の変数を集めることは、デバイスメモリ56への保存に伴うレイテンシと手間を減少させる。この種の遅延保存体系は図10Aと図10Bの事前取得体系に類似した基準を使用して実行可能である。例えばコンパイラは、それぞれの変数に対して、変数の値を生成したPEGから変数が入力として必要とされる時点までの時間間隔(例えば、異なるSIDに属する可能性のある別の連鎖による、)を識別する。変数が他のSIDの連鎖により入力として必要な場合、コンパイラは、この変数を生成する連鎖の終端(そしてこの連鎖内の個々のPEGではない)を変数が準備を完了した時点と見做す。その後コンパイラは、多重の変数の保存命令を、これら時間間隔に基づいて画定する。
図9の上部に示すように、所与のマルチプロセッサ装置40が所与のPEG連鎖を実行する場合、マルチプロセッサ装置は変数をデバイスメモリ56から特定の決定論的な順番でロードし、共有メモリ内にキャッシュし、それらを連鎖内の異なるPEGに入力として供給する。ある実施形態では、コンパイラは、PEG連鎖が変数をロードする命令に従って、デバイスメモリ56内の変数を事前注文する。この体系を使用する場合は、ある所与のPEG連鎖は、命令された取得動作の順番を使用して、変数をデバイスメモリ56から連続するメモリアドレスに取得することが出来る。
図11は本発明の実施形態に基づく、変数事前注文体系を示す概略図である。図11の事例は上述した図9のキャッシング体系を示す。図の上部の領域266は、その連鎖内の異なるPEGによりキャッシュされ共有メモリ52から取り出された変数をしめす。領域270は各PEGのための準備としてデバイスメモリ56から取得された変数を示す。太字の枠はその連鎖内の従前のPEGにより既に読まれ、その間に共有メモリから取り出された変数を標識付けする。
ある実施形態では、コンパイラは、変数をフィーダ領域274内のデバイスメモリ56に保存する。あるPEG連鎖のフィーダ領域274では、変数は、そのPEG連鎖により変数が取得される順番で保存される。ある所与の変数は、フィーダ領域に沿って2つ以上の異なる位置に保存されることに注意する。これはキャッシュ容量が限られるため、PEG連鎖が同じ変数を再度読むことがあるからである。また、各PEG連鎖は、デバイスメモリ56内に対応するフィーダ領域を有することにも注意する。ある所与の変数は異なるPEG連鎖の多重のフィーダ領域に保存されうる。
典型的に、事前注文された変数はデバイスメモリ内で、GPUのメモリ配列と容量仕様に合致する、基礎セクションに配置される。これらのセクションはここでは以降「キャッシュライン」と呼ばれる。典型的なGPUでは、各キャッシュラインは512ビットからなる。典型的に、異なる連鎖内のPEGは、キャッシュラインユニット内の変数を生成し、使用し、交換する。
(SID間及びSID内の通信)
上記のように、コンパイラは、各依存サブ木をSIDに変換する。ある実施形態では、1つのSID内の1つのPEGにより生成される変数は、他の1つのSID内の1つのPEGにより入力として使用される。異なるSID内のPEG間の通信は、典型的に、デバイスメモリ56経由で行われる。ある実施形態では、コンパイラは、「メールボックス」と呼ばれるデータ構造内にSID間で通信される変数を保存する。各メールボックス、は共通のPEG連鎖により生成され及び/又は使用された変数からなる。SIDs間の通信はメールボックスとの間でキャッシュラインを書込み、そして読み出すことにより行われる。このようにデバイスメモリ56へのアクセスは、異なる変数間の使用と生成の共通性を利用することにより、効率的に実行される。
上記のように、コンパイラは、各依存サブ木をSIDに変換する。ある実施形態では、1つのSID内の1つのPEGにより生成される変数は、他の1つのSID内の1つのPEGにより入力として使用される。異なるSID内のPEG間の通信は、典型的に、デバイスメモリ56経由で行われる。ある実施形態では、コンパイラは、「メールボックス」と呼ばれるデータ構造内にSID間で通信される変数を保存する。各メールボックス、は共通のPEG連鎖により生成され及び/又は使用された変数からなる。SIDs間の通信はメールボックスとの間でキャッシュラインを書込み、そして読み出すことにより行われる。このようにデバイスメモリ56へのアクセスは、異なる変数間の使用と生成の共通性を利用することにより、効率的に実行される。
図12は、本発明の実施形態に基づく、多重静的呼び出しデータベース(SID)を示す概略図である。この事例は、SID−XとSID−Yと記される2つのSIDからなる。SID−Xは2つのPEG連鎖からなり、それらは其々4つのPEG280からなる。SID−Yは2つのPEG連鎖からなり、それらは其々2つのPEG280からなる。各PEGは最大3つの入力変数(各ブロックの左側に示される)を受け取ることが出来、そして1つの出力変数(各ブロックの右側に示される)を生成出来る。例えばPEG1/1は、変数AとCを入力として受け入れ、変数Dを生成する。それぞれのSID内には、SID−X内のPEG2/3とPEG1/4のように、幾つかの連鎖間の依存性も存在する。
ある変数は進入変数及び排出変数、即ち、それぞれCPU(又は他のホスト環境)から入力され、CPUに出力する変数として定義される。この事例では、進入変数はA,B,C,FとQからなる。排出変数はS,G,HとPからなる。
ある所与のSIDにおいて、変数は生成された変数(SIDにより生成された)、使用された変数(SID内のPEGにより入力として使用された)および入力変数(SID内のPEGにより入力として使用されたが、SID内で生成されていない)にクラス分けされる。異なるクラス間で重複は存在する。本事例では、変数のクラス区分は次の表に示される:
図13は、本発明の実施形態に基づく、SID間通信の方法を示すフロー図である。方式は、SID間識別ステップ284において、コンパイラが1組のSID間変数を識別することから始まる。SID間変数は、進入変数でも排出変数でもなく、かつ異なるSID間で交換される変数からなる。コンパイラは、(1)全てのSIDの全ての入力変数の組を識別する、(2)この組から進入変数と排出変数を取り除く、ことによりSID間変数を識別する。この事例では、SID−XとSID−Yの入力変数の組は、{A,B,C,E,F,M,L,Q,N,V,P}であり、進入変数の組は、{A,B,C,F,Q}であり、排出変数の組は、{S,G,H,P}である。従ってSID間変数の組は、{E,M,L,N,V}である。
次に使用/生成マッピングステップ288において、コンパイラは、異なるSIDの異なるPEG連鎖による使用と生成に関して、SID間変数をマップする。本事例では、異なるSID間変数の使用と生成は、次の表で与えられる:
ここにおいて、例えばM→(X1)は変数MがSID−X内の連鎖1により生成されることを示す。一般的に、所与のSID間変数は、いかなる所望の数のSIDに属する、いかなる所望の数の連鎖によっても生成され、及び/又は使用される。
次にコンパイラは、グループ化ステップ292において、共通の連鎖により生成され、かつ共通の連鎖により使用されたSID間変数をグループに統合する。コンパイラは、メールボックスと呼ばれるデータ構造を其々のグループに対して定義する。これらメールボックスはデバイスメモリ56内の一定の領域に保存される。各メールボックスは、典型的に、1つ以上のキャッシュラインを有する。本事例では、コンパイラは、次の4つのメールボックスを定義する:
SID間通信ステップ296において、実行時に異なるSIDは、キャッシュラインをメールボックスに書込み、そしてキャッシュラインをメールボックスから読み出すことにより、互いに通信する。各メールボックスは、同じ連鎖により生成され、同じ連鎖により使用されるSID間変数を有するため、デバイスメモリ56へのアクセスは効率的である。
メールボックス機構の効率は、少なくとも部分的に、処理要素PEの各SID内のPEG連鎖への割当に依存する。図8で説明したように、コンパイラは、他のSID内の同じ処理要素PEと通信する処理要素PEを、同じPEG連鎖の中にグル−プ化しようとする。このグループ化が成功して適切に定義されている場合、図13の方法は、各メールボックスが比較的多数の変数を有する、比較的少数のかつ適切に定義されたメールボックスのグループを生成する。
ある実施形態では、コンパイラは、各メールボックス内の変数をPEG連鎖により要求される順番に従って整理することにより、デバイスメモリ56へのアクセス効率をさらに向上させる。
ある実施形態では、同じSIDの中の異なるPEG連鎖が互いに変数を移送する。この通信の形はここでは「SID内通信」と呼ぶ。同じSIDの中のPEG連鎖は、典型的に、変数値からなるキャッシュラインを、デバイスメモリ56経由で交換することにより通信する。SID内通信は典型的に変数の有効性の制約を受ける。言い換えれば、あるPEG連鎖は、その変数を生成するPEGが実行を完了した後にのみ、1つの変数を他の1つの連鎖に送る。ある実施形態では、コンパイラは、実行依存性を維持し、(キャッシュライン解決における)処理の回数を最小化するようなやり方で、PEG連鎖間の通信処理を定義する。SID内通信は、典型的に、連鎖の間に導入されたSYNC要素上で実行される。言い換えれば、1つの連鎖の実行を他の連鎖内の1つ以上のPEGが実行を完了するまで停止するSYNC要素はまた、変数をこれら他の連鎖から、停止された連鎖に送ってもよい。
図14Aと14Bは、本発明の実施形態に基づく、SID内通信体系を示す概略図である。図14Aは、3つのPEG連鎖を有するSIDの例を示す。其々のPEGに対し、入力変数はPEGブロックの左側に示され、出力変数はブロックの右側に示される。
図14Bは4つのキャッシュライン300を示し、それらは、図14AのSID内のPEG連鎖間の変数の送信に対してコンパイラが定義したものである。各キャッシュラインにより渡された変数は図内で括弧{}で囲まれている。コンパイラは、キャッシュライン300を定義するために、種々の動的プログラミング技術のような、いかなる適合する工程を使用してもよい。典型的に、解決策は一意ではなく、多重の解決策が可能である。コンパイラは、キャッシュライン300の数を最小化するような、既定の基準に合致する解決策を識別するように試みる。
(SID間通信の効率を改善する技術)
上記のように、異なるSID間のSID間変数の交換は、変数をデバイスメモリ56内のメールボックスに保存することにより実施される。各メールボックスは1つ以上のキャッシュラインを有し、1つ以上のソース実行連鎖(1つ以上のソースSID内の)と、1つ以上のターゲット実行連鎖(1つ以上のターゲットSID内の)を伴う。典型的に、SID間変数は次のようにメールボックスに指定される:(1)同じSIDの組と実行連鎖により生成され使用された変数は、同じメールボックスを指定される(2)同じSIDsの組と実行連鎖により生成され使用されない変数は、同じキャッシュラインを共有しないよう、異なるメールボックスを指定される(3)各変数は正確に1度だけメールボックスの集合の中に現れる。
上記のように、異なるSID間のSID間変数の交換は、変数をデバイスメモリ56内のメールボックスに保存することにより実施される。各メールボックスは1つ以上のキャッシュラインを有し、1つ以上のソース実行連鎖(1つ以上のソースSID内の)と、1つ以上のターゲット実行連鎖(1つ以上のターゲットSID内の)を伴う。典型的に、SID間変数は次のようにメールボックスに指定される:(1)同じSIDの組と実行連鎖により生成され使用された変数は、同じメールボックスを指定される(2)同じSIDsの組と実行連鎖により生成され使用されない変数は、同じキャッシュラインを共有しないよう、異なるメールボックスを指定される(3)各変数は正確に1度だけメールボックスの集合の中に現れる。
しかしある場合には、SID間変数の生成と使用は、変数のメールボックスへの効率的なグループ化を可能にしない。そのようなグループ化は少数の変数からなるメールボックスを生成するかもしれない。デバイスメモリが、キャッシュラインに存在する実際の変数の数に関係なく、キャッシュラインユニット内で読まれるため、少数の変数からなるメールボックスがキャッシュラインの有効利用を減ずるかもしれない。
ある実施形態では、コンパイラは、閑散としたメールボックスからの2つ以上のSID間のキャッシュラインを合体させ、混雑したキャッシュラインを生成する。キャッシュラインを統合することにより、デバイスメモリからのロード動作の回数は減少されうる。減少の程度は、統合されるキャッシュラインの選択による。例えば、コンパイラは、比較的重複の大きいターゲット実行連鎖の組の中でSID間キャッシュラインを統合するように試みる。
例として連鎖S1とS2に使用される1つのキャッシュラインAと、連鎖S1,S2及びS3に使用される1つのキャッシュラインBを考えてみる。キャッシュライン容量制限を超えることなくそれらを新しいキャッシュラインCに統合することが可能なように、キャッシュラインAもBも十分に余裕があるものと仮定する。この例では、キャッシュラインAとBを統合してキャッシュラインCを形成した後、連鎖S1とS2のそれぞれは、2つのキャッシュラインの代わりに、1つのキャッシュライン(統合キャッシュラインC)だけをロードする必要がある。連鎖S3も又、1つのキャッシュライン(キャッシュラインBの代わりに統合キャッシュラインC)だけをロードする必要がある。全体として、デバイスメモリからのロード動作の回数は、キャッシュラインAとBを統合させた結果減少する。他の実施形態では、コンパイラは所望の数のキャッシュラインを統合する。
あるいは、コンパイラは、SID内通信機構を使用して(即ち、連鎖間の同期化要素を使用して)、ターゲットSID内のターゲット実行連鎖の間で変数が転送可能なSID間キャッシュラインを統合する。 SID間通信を改善するために利用の少ないSID内通信資源を利用する考え方は以下に詳述される。例えばS1,S2とS3の3つの実行連鎖と、A,B、Cの3つのキャッシュラインの構成を考える。この例では、連鎖S1はキャッシュラインAからの入力変数を持ち、連鎖S2はキャッシュラインBからの入力変数を持ち、そして連鎖S3はキャッシュラインCからの入力変数を持つ。また連鎖間の同期化機構が連鎖S1から連鎖S2へのデータ転送を可能にすると仮定する。連鎖S2内では、キャッシュラインBからの入力変数は、連鎖S1との同期化の後ろに位置するPEGからのみ必要とされる。この状態では、キャッシュラインAとキャッシュラインBを統合し、キャッシュラインBの変数を連鎖S1と連鎖S2の同期化機構上で転送することが有利である。このような仕組みを使用する場合、連鎖S2は、キャッシュラインBの変数を連鎖S1から同期化機構上で受け取るため、キャッシュラインBをロードする必要はない。このようにコンパイラは、(1)異なるターゲット連鎖により使用されるキャッシュラインを統合する(2)SID内通信を使用して、1つのターゲット連鎖から他のターゲット連鎖へ変数を転送する、ことにより、デバイスメモリからのロード動作の回数を減少させる。
SID間キャッシュラインが統合されているか否かに拘わらず、コンパイラは、以下に説明されるように、使用の少ないSID内通信資源を利用して、デバイスメモリからのSID間のキャッシュラインのロード動作回数を減少することが出来る。
図15は、本発明の実施形態に基づく、SID間通信及びSID内通信の両方を使用するSID310を示す概略図である。SID310は、他の1つのSIDからSID間キャッシュライン314をロードすることにより、SID間変数を受信する。この例では、キャッシュライン314からのSID内変数は、SID310内の3つの実行連鎖318A、318B,318Cにより使用される。(SID310は、このSID間キャッシュラインからの変数を使用しない、他の追加の実行連鎖を有してもよい。)
SID間変数を送信するためにSID内資源を使用しなければ、3つの実行連鎖318A、318B,318Cの各々は、入力変数を取得するため、デバイスメモリ56の適切なメールボックスから、キャッシュライン314を個別にロードしなくてはならない。このように3つの個別のロード動作が必要となる。或いは、キャッシュライン314はそれら連鎖のサブ組(例えば、単一の連鎖)のみによりロードされ、他の連鎖はSID内通信を使用して変数を受け取ってもよい。
SID310では、例えばSYNC326Aが、連鎖318A内のあるPEGに対し
連鎖318B内のあるPEGを同期化し、SYNC326Bが、連鎖318B内のあるPEGに対し連鎖318C内のあるPEGを同期化する。各SYNCは、SID内キャッシュラインを伴い、それは変数をSYNCに依存し同期化する連鎖から同期化される連鎖へ転送する。(又はより正確には、同期化するPEGから同期化されるPEGへ)。例えば、SYNC326Aは、変数を連鎖318Aから318Bに転送する1つのSID内キャッシュラインを伴う。
連鎖318B内のあるPEGを同期化し、SYNC326Bが、連鎖318B内のあるPEGに対し連鎖318C内のあるPEGを同期化する。各SYNCは、SID内キャッシュラインを伴い、それは変数をSYNCに依存し同期化する連鎖から同期化される連鎖へ転送する。(又はより正確には、同期化するPEGから同期化されるPEGへ)。例えば、SYNC326Aは、変数を連鎖318Aから318Bに転送する1つのSID内キャッシュラインを伴う。
SID内キャッシュラインが未割当のバンド幅を有すると仮定すると、それらSID内キャッシュラインは連鎖318Aから連鎖318Bへ、及び連鎖318Bから連鎖318Cへデータを送信するのに使用可能である。このように、ある場合には、連鎖318Aだけにデバイスメモリからキャッシュラインを実際にロードさせ、その後その変数を、SYNCs326Aと326Bに依存するSID内キャッシュライン上で、連鎖318Bと318Cに転送させることにより、3つ連鎖318A・・・Cの全てがSID間キャッシュライン314の変数を取得できる。
この解決法は、所与の連鎖において、SID間変数を使用するPEGがSYNCの後に配置され、そのSYNCのSID内キャッシュラインがその変数をその連鎖に転送するのに使用される、と仮定すれば可能である。連鎖318AはSID間キャッシュラインをデバイスメモリ56から実際にロードする連鎖であるため、連鎖318A内のPEG322Aは、SID間変数にアクセスできる。連鎖318Bでは、PEG322Bは、SYNC326Aの後に位置するため、送信された変数にアクセスできる。連鎖318Cでは、PEG322Dは、SYNC326Bの後に位置するため、送信された変数にアクセスできる。PEG322Cは、SYNC326Bの前に位置するため、送信された変数にアクセスできない。
もしPEG322CがSID間キャッシュライン314からの変数を使用する必要がある場合、連鎖318Cは、追加のロード動作を受けて、このSID間キャッシュラインを別個にロードする必要がある。このシナリオでは、SYNC326BのSID内キャッシュラインは、SID間キャッシュライン314からの変数転送に使用されない。
ある実施形態では、コンパイラは、所与のSIDにより実行される、SID間キャッシュライン動作の回数を、SID間変数を運ぶための変数資源をSID内SYNCs上で割り当てることにより、減らすように試みる。この工程は典型的に各SIDに対して実行される。この種の工程の1例が以下の図16、図17で示される。しかし或いは、他の適合する工程も使用可能である。
図16と図17の工程はFとPで記される2つの関数を使用する。所与の実行連鎖sと1つのSID間変数aに対して,関数F(s,a)は、変数aを入力として使用する連鎖s内に最初のエントリー(PEG)を返す、静的関数である。言い換えれば、変数aは連鎖sの共通メモリに、F(s,a)より遅れずに、供給されなければならない。変数aが連鎖sのどこでも入力として使用されない場合は、F(s,a)=∞である。
関数P(s_seq,s_off,t_seq,t_off,req_size)は1組の(1つ以上の)パスをSID経由で返し、その上で、所与の寸法req_sizeのデータが1つのソース連鎖s_seqからターゲット連鎖t_seqに転送されうる。返されたパスは、ソース連鎖の中でオフセットs_off以降に始まり、ターゲット連鎖にt_off以前に到着する。関数Pは、SID内通信資源の割当に対応して、コンパイル中に変化しうる。ある実施形態では、Pも又、t_offで使用が必要な1列の変数を受け取る。関数Pは、典型的に、変数の幾つかは既に連鎖間の同期化経由で転送されていることを考慮に入れる。ある実施形態では、Pは、データ転送に使用可能な多重のパスの組合せを返す。
工程は又、Hと記されるデータベースを使用する。SIDに使用される各SID間キャッシュラインに対し、データベースHは、このキャッシュラインを使用する連鎖の複数のクラスへのクラス分けを保持する。クラスは典型的に其々のリストで表わされる。この事例では、連鎖は6つのクラスにクラス分けされる:
・マストロード(ML):SID内SYNCs上でSID間変数を受信できないため、SID間キャッシュラインをデバイスメモリ56からロードしなければならない連鎖。
・シュッドロード(SL):ML連鎖ではないが、工程から、SID間キャッシュラインをデバイスメモリ56からロードするように要求された連鎖。
・配置されたロード(PL):SID間キャッシュラインをデバイスメモリ56からロードすることなく、他の連鎖からSID間変数を受信する連鎖で、それに対し適切な資源がSID内キャッシュライン上で割り当てられている連鎖。
・ルート依存(RD):いまだSL,ML又はPLクラスに指定されていない連鎖であって、SID内キャッシュライン経由でSL,ML又はPLクラスの少なくとも1つの連鎖に到達可能な連鎖。
・遠い依存(FD):SL,ML又はPLクラスのどの連鎖によっても到達出来ない連鎖。
・未分解(U):クラスが未分解な連鎖。(FDとUの差異は、FDクラスの連鎖は、RDまたはFDクラスの連鎖からは到達可能であるが、SL,ML又はPLクラスの連鎖からは到達出来ないことである。)
・マストロード(ML):SID内SYNCs上でSID間変数を受信できないため、SID間キャッシュラインをデバイスメモリ56からロードしなければならない連鎖。
・シュッドロード(SL):ML連鎖ではないが、工程から、SID間キャッシュラインをデバイスメモリ56からロードするように要求された連鎖。
・配置されたロード(PL):SID間キャッシュラインをデバイスメモリ56からロードすることなく、他の連鎖からSID間変数を受信する連鎖で、それに対し適切な資源がSID内キャッシュライン上で割り当てられている連鎖。
・ルート依存(RD):いまだSL,ML又はPLクラスに指定されていない連鎖であって、SID内キャッシュライン経由でSL,ML又はPLクラスの少なくとも1つの連鎖に到達可能な連鎖。
・遠い依存(FD):SL,ML又はPLクラスのどの連鎖によっても到達出来ない連鎖。
・未分解(U):クラスが未分解な連鎖。(FDとUの差異は、FDクラスの連鎖は、RDまたはFDクラスの連鎖からは到達可能であるが、SL,ML又はPLクラスの連鎖からは到達出来ないことである。)
以下の記述は、連鎖のクラスへのクラス分けを伴う、所与のSID間キャッシュラインに関している。以下の工程は各SID間キャッシュラインに対し繰り返される。
ある所与の時点において、各クラスはどんな数の連鎖を有してもよいが、所与の1つの連鎖は1つのクラスにしか現れない。上記のように、対象となるSID間キャッシュラインからの変数を使用する連鎖のみがクラス分けされる。図16と図17の工程は、相互作用工程であり、全ての連鎖がUクラスであるところから始まる。(典型的に、Uクラスは最初、対象となるSID間キャッシュライン上で運ばれる変数を使用する、連鎖のみを有する。他の連鎖は典型的に、無視される。)工程はUクラスが空で、全ての連鎖がSL,ML又はPLに指定されて終了する。工程が終了すると、SLとMLクラスの各連鎖は、個別にSID間キャッシュラインをロードするように定義され、PLクラスの連鎖は、キャッシュラインをロードすることなく、SID間変数を他の連鎖から受け取るように定義される。SID間SYNCの適切な資源がSID間変数をPLクラスの連鎖に届けるために割り当てられる。
図16は、本発明の実施形態に基づく、SID間通信を減らす方法を示す状態遷移図330である。状態遷移図330は、それぞれU,ML、SL,PL,RDとFDクラスを示す状態334,338,342,346,348及び350を有する。状態間の遷移は矢印で示される。繰り返し割当工程は、Uクラスが空で、全ての連鎖がSL,ML又はPLに指定されるまで、連鎖をクラスからクラスへ(状態から状態へ)これら遷移上で移動させる。
図17は、本発明の実施形態に基づく、SID間通信を減らす方法を示すフロー図である。(工程は典型的に、各SID間キャッシュラインに対して繰り返される。)方法は、初期化ステップ360において、コンパイラがデータベースHを初期化することから始まる。現在処理されているSID間キャッシュラインは、「c」と記される。キャッシュラインcを使用する各連鎖s(即ち、式F(s,c)≠∞を満たす連鎖)に対し、コンパイラは、その連鎖をUクラスに追加する。
コンパイラは次に、分解ステップ364において、関数SとPを使用して、キャッシュラインcを分解するように(即ち、Uクラス内の連鎖をクラス分けするように)試みる。分解ステップは、以下の連続する複数の段階からなる:
1)ML分解段階:Uクラス内の各連鎖sに対して、コンパイラは、連鎖sで使用されるキャッシュラインcの変数がこのキャッシュラインを使用する他の連鎖から得られるかどうかをチェックする。(関数Fを使用して変数を提供する可能性のある連鎖が識別される。関数Pを使用して変数を転送する可能性のあるパスが識別される。)連鎖sに対し変数を取得するための連鎖やパスが見つからない場合は、コンパイラは連鎖sをUクラスから除外しMLクラスに追加する。
2)RD分解段階:Uクラス内の各連鎖に対し、コンパイラは、(FとPを使用して)必要な変数をキャッシュラインcから取得できる連鎖を、SL,ML又はPLクラス内の連鎖から識別する。コンパイラは識別された連鎖をUクラスから除外しRDクラスに追加する。
1)ML分解段階:Uクラス内の各連鎖sに対して、コンパイラは、連鎖sで使用されるキャッシュラインcの変数がこのキャッシュラインを使用する他の連鎖から得られるかどうかをチェックする。(関数Fを使用して変数を提供する可能性のある連鎖が識別される。関数Pを使用して変数を転送する可能性のあるパスが識別される。)連鎖sに対し変数を取得するための連鎖やパスが見つからない場合は、コンパイラは連鎖sをUクラスから除外しMLクラスに追加する。
2)RD分解段階:Uクラス内の各連鎖に対し、コンパイラは、(FとPを使用して)必要な変数をキャッシュラインcから取得できる連鎖を、SL,ML又はPLクラス内の連鎖から識別する。コンパイラは識別された連鎖をUクラスから除外しRDクラスに追加する。
3)コンパイラは、Uクラスが空になるまで次の3つのサブ段階を繰り返す:
a)RDサブ段階:コンパイラは、関数FとPを使用し、必要な変数をSLクラス内の連鎖からのキャッシュラインcから取得できる連鎖を、識別する。コンパイラは識別された連鎖をUクラスから除外しRDクラスに追加する。
b)FDサブ段階:コンパイラは、関数FとPを使用し、必要な変数をRDまたはFDクラス内の連鎖からのキャッシュラインcから取得できる連鎖を、識別する。コンパイラは識別された連鎖をUクラスから除外しFDクラスに追加する。少なくとも1つの連鎖が発見された場合、FDサブ段階は繰り返される。
c)SLサブ段階:この段階は循環依存性パターンを2つ以上の連鎖の間で識別し、分解する。循環依存性は上記特許文献5のセクション10.3.1.2.4に記載されている。
1.コンパイラは、連鎖sをキャッシュラインcのUクラスリストから選択する。req_offsetと記される変数はF(s,c)に設定される。
2.コンパイラは、関数Pを使用して、Uクラス内の連鎖(連鎖sを除く)をスキャンし、連鎖sが必要なキャッシュラインcの変数を、req_offsetより遅くないオフセットにおいて提供可能な、ソース連鎖を識別するように試みる。
3.ソース連鎖ssが発見された場合、sはs=ssとなるように設定され、req_offsetは、その中でssがキャッシュラインcを使用可能にする必要があるオフセットに設定される。
4.ソース連鎖が発見されない場合、コンパイラは連鎖sをUクラスから除外し、SLクラスに追加する。
a)RDサブ段階:コンパイラは、関数FとPを使用し、必要な変数をSLクラス内の連鎖からのキャッシュラインcから取得できる連鎖を、識別する。コンパイラは識別された連鎖をUクラスから除外しRDクラスに追加する。
b)FDサブ段階:コンパイラは、関数FとPを使用し、必要な変数をRDまたはFDクラス内の連鎖からのキャッシュラインcから取得できる連鎖を、識別する。コンパイラは識別された連鎖をUクラスから除外しFDクラスに追加する。少なくとも1つの連鎖が発見された場合、FDサブ段階は繰り返される。
c)SLサブ段階:この段階は循環依存性パターンを2つ以上の連鎖の間で識別し、分解する。循環依存性は上記特許文献5のセクション10.3.1.2.4に記載されている。
1.コンパイラは、連鎖sをキャッシュラインcのUクラスリストから選択する。req_offsetと記される変数はF(s,c)に設定される。
2.コンパイラは、関数Pを使用して、Uクラス内の連鎖(連鎖sを除く)をスキャンし、連鎖sが必要なキャッシュラインcの変数を、req_offsetより遅くないオフセットにおいて提供可能な、ソース連鎖を識別するように試みる。
3.ソース連鎖ssが発見された場合、sはs=ssとなるように設定され、req_offsetは、その中でssがキャッシュラインcを使用可能にする必要があるオフセットに設定される。
4.ソース連鎖が発見されない場合、コンパイラは連鎖sをUクラスから除外し、SLクラスに追加する。
分解ステップ364を終了後は、所定の1つのSID間キャッシュラインcに対し、Uクラスは空であり、キャッシュラインcを使用する連鎖はML,SL,RDおよびFDにクラス分けされている。MLとSLクラスの連鎖は、キャッシュラインcを個別にデバイスメモリ56からロードする、と定義され、そしてこの定義は、後続の工程の繰り返しの間不変である。
コンパイラは、配置ステップ368において、SID間変数をRDクラスの連鎖に提供するための、SID内資源を割り当てるように試みる。典型的に、データベースH内のRDクラスリストのいずれかに連鎖が残っている限り、コンパイラは、所定のSID間キャッシュラインcに対し次の工程を実行する:
1)キャッシュラインcのRDクラス内の連鎖の中から、コンパイラは、このキャッシュラインから必要とするデータ寸法が最小の、連鎖sを選択する。コンパイラは、(関数Pを使用して)要求された変数を、これら変数を既に持つ連鎖から、連鎖sへ届けるために、SID内キャッシュライン資源を最小量使用する1つのパスp(又は多重のパスの組合せ)を選択する。パスpが1つより多いホップを横切る(即ち、1つ以上の中間連鎖を経由して連鎖sに到達する)場合、そのパスに沿う多重のSID内キャッシュライン上の資源は考慮されなければならない、ことに注意が必要である。
2)適合するパスpが発見されない場合、ステップ368は終了する。
3)適合するパスpが発見された場合、コンパイラは連鎖sをRDクラスから除外し、PLクラスに追加する。
4)コンパイラは、連鎖sに要求されたキャッシュラインcのSID間変数を運ぶため、パスp上でのSID内キャッシュラインの使用をコミット(割当)する。コンパイラは、新しく割り当てられた資源に起因する可能なパス内の可能な変化を反映するため、関数Pをリフレッシュする。
1)キャッシュラインcのRDクラス内の連鎖の中から、コンパイラは、このキャッシュラインから必要とするデータ寸法が最小の、連鎖sを選択する。コンパイラは、(関数Pを使用して)要求された変数を、これら変数を既に持つ連鎖から、連鎖sへ届けるために、SID内キャッシュライン資源を最小量使用する1つのパスp(又は多重のパスの組合せ)を選択する。パスpが1つより多いホップを横切る(即ち、1つ以上の中間連鎖を経由して連鎖sに到達する)場合、そのパスに沿う多重のSID内キャッシュライン上の資源は考慮されなければならない、ことに注意が必要である。
2)適合するパスpが発見されない場合、ステップ368は終了する。
3)適合するパスpが発見された場合、コンパイラは連鎖sをRDクラスから除外し、PLクラスに追加する。
4)コンパイラは、連鎖sに要求されたキャッシュラインcのSID間変数を運ぶため、パスp上でのSID内キャッシュラインの使用をコミット(割当)する。コンパイラは、新しく割り当てられた資源に起因する可能なパス内の可能な変化を反映するため、関数Pをリフレッシュする。
この段階において、コンパイラは、典型的に、SID内通信資源をRDクラス内の幾つかの連鎖に付託しており、それに従いそれら連鎖をPLクラスに移動した。クラスRDに残っている連鎖に対し、コンパイラは、それら連鎖に必要なSID間変数を提供するための、使用可能な資源を有するパスを発見できなかった。
コンパイラは、次に再シャッフルステップ372において、RDとFDクラス内の連鎖を再シャッフルする。このステップでコンパイラは、RDとFDクラス内の全ての連鎖(残っていれば)をUクラスに移動する。コンパイラは、空チェックステップ376において、Uクラスが空か否かチェックする。Uクラスに残っている連鎖があれば、方式は先のステップ364に戻り、コンパイラは、現在未分解の連鎖を分解するように試みる。Uクラスが空の場合は、全ての連鎖がML,SL又はPLにクラス分けされており、方式は終了ステップ380において、終了する。MLおよびSLクラス内の各連鎖は、個別にSID間キャッシュラインをデバイスメモリからロードする。
PLクラス内の各連鎖は、事前に定義され、かつ事前に割り当てられた、1つ以上のSID内キャッシュラインのパス上で、必要なSID間変数を他の連鎖から受け取る。このように、この技術を使用する場合、SID間キャッシュラインのデバイスメモリ56からのロード動作の回数が減少され、それにより、全体的なSID実行時間が短縮される。
(依存性問題アプリケーションの事例)
ここに記述される方法とシステムは、広範囲の分野と応用における依存性問題を解くのに使用可能である。一般的に、1組の実行依存性を有する処理要素(処理要素PE)で表示可能なコンピュータ計算タスクは、開示された技術により、並行かつ効率的に処理可能である。以下の記述は、幾つかの依存問題のタイプを概観する。開示された技術は、決してこれら事例に制限されず、他の適合するタイプの依存問題の解決に使用可能である。
ここに記述される方法とシステムは、広範囲の分野と応用における依存性問題を解くのに使用可能である。一般的に、1組の実行依存性を有する処理要素(処理要素PE)で表示可能なコンピュータ計算タスクは、開示された技術により、並行かつ効率的に処理可能である。以下の記述は、幾つかの依存問題のタイプを概観する。開示された技術は、決してこれら事例に制限されず、他の適合するタイプの依存問題の解決に使用可能である。
ある実施形態では、システム20により解決される依存性問題は、シミュレーションによりハードウェア設計を評価するタスクを有する。このアプリケーションは上記の特許文献14に詳述されている。典型的な設計評価アプリケーションでは、図1のサーバ24は、使用者、例えば評価技術者からシミュレートされる設計の定義を受け取る。設計は典型的に、VHDLまたはVerlogのようなハードウェア記述言語(HDL)で記載された、1つ以上のファイルとして受け取る。サーバは又、設計の評価環境を特定する、テストベンチの定義を受け取る。テストベンチは設計に適用される外部同期イベント(例えば、クロック信号、レセット信号及び種々の入力)を特定する。テストベンチは又、シミュレートされた設計に適用されるテストを特定する。テストベンチは典型的に、C、Verilog又は、E又はSystem−Verilogのような評価特有の言語で記述されたソフトウェアを有する。
CPU28上で走るコンパイラは、テストベンチと設計をコンパイルし、シミュレーション符号を生成し、そしてその後シミュレーション符号をCPU28とGPU32上で走らせる。詳しくは、コンパイラは、設計とテストベンチを処理要素PEと依存性を有する依存図の中に再度差し出し、非循環サブ図を依存図より抽出し、そして各サブ図のSIDを生成する。GPUは、シミュレーション結果を作成するため、異なるSIDを実行するように呼び出される。シミュレーション結果(例えば、テストの良否、疑わしい誤り、誤りの位置、および使用者が設計を評価するのに役立つ他の情報)が使用者に提供される。
あるいは、ここに記載された方法とシステムは、リアルタイムビデオ処理、画像処理、ソフトウェア定義ラジオ(SDR)、種々の通信アプリケーションにおけるパケット処理、及び誤り訂正符号のようなアプリケーションで遭遇する、コンピュータ計算タスクを実行するのに使用可能である。これら全てのアプリケーションは、典型的に、例えば、デジタルフィルタリングや高速フーリエ変換(FFT)などのような、依存性問題として表わされる複雑な計算タスクを含む。このようなタスクは、並列化やここに記載された方法やシステムを使用した解決に自然に適応できる。デジタルフィルタやFFT計算要素を示す特定の事例は、それぞれ図18と図19に示される。繰り返すが、計算タスク(例えば、ここに示される事例や他のタスク)は、依存図として表現され、それは並列化され、ここに記載される方法とシステムにより解決可能である。上記のように、依存図は1組のサブ図に変換でき、各サブ図は、コンパイルされて1つのSIDを生成し、そして、GPUはSIDを実行して結果を生成する。
図18は、本発明の実施形態に基づく、有限インパルス応答(FIR)デジタルフィルタを表わす依存図400である。依存図400で表わされたデジタルフィルタは、入力信号x[n]を、a0,...aN−1で記されるフィルタ係数の1組Nによりフィルタし、フィルタされた出力信号y[n]を生成する。フィルタ動作は次式で与えられる。
この種のFIRフィルタは、通信受信機、送信機、画像処理分野、医療画像分野など、多くの信号処理のアプリケーションで一般的である。
図400は、例えば共通クロック信号に同期したフリップフロップ処理要素PE410、乗算器処理要素PE414及び1つの加算器処理要素PE418のような、幾つかのタイプの処理要素PEを有する。実行依存性は図の中に矢印でしめされる。例えば、あるクロックサイクルにおいて、所与の乗算器処理要素PE414は、所与のフリップフロップ処理要素PE410の出力に、フリップフロップ処理要素PEが実行を完了し、その出力が有効な時にだけ、対応するフィルタ係数を乗じることが出来る。無限インパルス応答(IIR)等の他の種類のデジタルフィルタも依存図として同様に表現される。
図19は、本発明の実施形態に基づく、高速フーリエ変換(FFT)計算要素を表わす依存図420である。周知のように、FFT計算は、1組の基礎的計算要素、ときに「蝶」と呼ばれるが、によって効率的に実行される。依存図420は単一の計算要素を示す。典型的なFFTアプリケーションでは、多重のこのような要素が直列及び/又は並列に接続される。依存図420は加算器/乗算器処理要素PE424からなる。各処理要素PE424は2つの入力を受ける。ある処理要素PE入力が重みWN Kで標識付けされる場合、その処理要素PEは、入力を他の入力に加算する前に、入力にその重みを乗ずる。例えば、図の最上部左側の処理要素PEはv[0]+v[1]・W4 0 で与えられる出力を生成する。WN Kは次式で与えられる:
N=4の場合の典型的な実施例では、重みは、W4 0=1、W4 1=i,W4 2=−1,W4 3=−iで与えられる。或いは、他の適合する重み値が使用可能である。この種のFFT生産要素は、周波数領域信号処理及び誤り訂正符号(ECC)等、広い分野での応用アプリケーションで一般的である。
(追加実施形態及び変化形)
ある実施形態では、コンパイラは、処理要素PEをPEGに合体させる工程を適用する。この工程の出力は、頂点(PEGを示す)とエッジ(PEG間依存性を示す)からなる図である。工程は典型的に、PEG間依存性の数を最小化する方法で、処理要素PEをPEGにグループ化しようと試みる。この種のグループ化は、典型的に、より少ない連鎖間SYNCを有するSIDをもたらす。統合工程の例は前掲の特許文献3のセクション5.5.1に記載されている。
ある実施形態では、コンパイラは、処理要素PEをPEGに合体させる工程を適用する。この工程の出力は、頂点(PEGを示す)とエッジ(PEG間依存性を示す)からなる図である。工程は典型的に、PEG間依存性の数を最小化する方法で、処理要素PEをPEGにグループ化しようと試みる。この種のグループ化は、典型的に、より少ない連鎖間SYNCを有するSIDをもたらす。統合工程の例は前掲の特許文献3のセクション5.5.1に記載されている。
ある実施形態では、コンパイラは、処理要素PEの実行時間に沿って進みながら、SIDを繰り返し構築するように試みる。この工程では、コンパイラは、長い前方位相(FP)を有する処理要素PEを最初に配置し、そしてそれらを混雑していない実行連鎖内に配置する。さらにコンパイラは、SYNCの追加を必要としない連鎖の中に処理要素PEを配置することを高い優先順位に置く。SID生成工程の事例は前掲の特許文献3のセクション6.3.6に記載されている。コンパイラは、一般的に、処理要素PEのFP長さ、実行連鎖の占有レベル及び/又はSYNCの可能性のある追加を考慮する、他の基準又は経験に基づいて、処理要素PEを実行連鎖内に配置してもよい。
ある実施形態では、CPUとGPUは共同して、依存問題をシミュレートするイベント駆動(EDE)シミュレータを走らせる。イベント駆動工程は、前掲の特許文献1のセクション6.8に記載されている。詳しくは、コンパイラは、CPU上で走るシミュレーションの即時更新が必要な中で、あるSIDの実行が他の1つのSIDの実行の引き金となるケースを識別してもよい。この仕組みはGPUとCPUの相互作用のレイテンシを節約する。この技術は前掲の特許文献2のセクション5.2.1に記載されている。
上記の実施形態は、例として示され、本発明は上記で詳細に示され記述されたものに限定されない。むしろ本発明の範囲はここに記載された種々の特徴の組合せやサブ組合せを含み、この記述を読んだ当業者が想起する、従来技術で開示されていない、変化形や変更を含む。
20:システム 24:サーバ 26:インタフェース
28:CPU 32:画像処理ユニット(GPU)
36:ユーザ基地 40:マルチプロセッサ装置 44:プロセッサ
48:ローカルレジスタ 52:共有メモリ 56:デバイスメモリ
60:命令ユニット 64:ブロックマネージャ
160:グリッド 168:ワープスロット
172:SYNCワープ 310:SID
314:SID間キャッシュライン
318:実行連鎖 322:PEG 326:SYNC
28:CPU 32:画像処理ユニット(GPU)
36:ユーザ基地 40:マルチプロセッサ装置 44:プロセッサ
48:ローカルレジスタ 52:共有メモリ 56:デバイスメモリ
60:命令ユニット 64:ブロックマネージャ
160:グリッド 168:ワープスロット
172:SYNCワープ 310:SID
314:SID間キャッシュライン
318:実行連鎖 322:PEG 326:SYNC
Claims (20)
- コンピュータ計算の方法であって、
原子オペレーションのタイプのライブラリを定義するステップと、
実行依存性を有する多重の原子処理要素(PE)からなる計算タスクを受け取るステップと、
ここにそれぞれの前記実行依存性は、それぞれ第1の処理要素(PE)がそれぞれ第2の処理要素(PE)よりも前に実行されることを特定し、
第1の数の処理要素(PE)を同時に実行可能な多重のプロセッサを有するマルチプロセッサ装置上での同時実行のため、前記実行依存性を破ることなく前記計算タスクの処理要素(PE)を1より大きく第1の数を越えない第2の数のPEの連鎖内に配置することにより、前記計算タスクをコンパイルするステップと、
前記計算タスクの結果を生成するため、前記PEの連鎖を多重のプロセッサ上で並行して実行するソフトウェアコードを走らせるための前記マルチプロセッサ装置を呼び出すステップと、
を有し、
ここにそれぞれの前記プロセッサは1つ以上の前記連鎖を実行し、
前記計算タスクをコンパイルするステップは、
前記計算タスクの前記原子PEの前記タイプを識別するステップと、 前記計算タスクの前記原子オペレーションをワープ内に配置するステップであって、前記ワープの少なくとも幾つかは複数のオペレーションを有し、それぞれのワープ内の前記オペレーションは全て同一の特定の原子タスクを実行する、ステップと、そして
前記ワープを前記PEの連鎖内に配置するステップと、
を有する、ことを特徴とするコンピュータ計算の方法。 - それぞれの前記処理要素(PE)の連鎖内の前記処理要素(PE)を互いに独立した複数のオペレーションを有する処理要素グループ(PEG)にグループ化するステップを有し、
前記計算タスクの前記オペレーションをワープ内に配置するステップは、
それぞれ特定のPEGが、前記PEの連鎖内において前記特定のPEGの前に位置する1つの異なるPEG内の1つのPEの後に実行されるべきPEを有しないように、前記処理要素グループ(PEG)を前記処理要素(PE)の連鎖内に配置するステップを有する、
ことを特徴とする請求項1に記載の方法。 - 前記マルチプロセッサ装置は、前記プロセッサによる実行のため、前記マルチプロセッサ装置の組み込みスケジュールポリシーに従って処理要素(PE)のスケジュールを定め、
前記マルチプロセッサ装置を呼び出すステップは、前記マルチプロセッサ装置に対し、前記組み込みスケジュールポリシーに拘わらず前記第2の数の前記PEの連鎖を並列で実行させるステップを有する、
ことを特徴とする請求項1に記載の方法。 - 前記多重のプロセッサは、グループのプロセッサ用の1つの共有キャッシュメモリを有するグループに整理され、前記マルチプロセッサ装置を呼び出すステップは、前記グループの1つの中にある前記プロセッサにより実行される各PEの連鎖を、其々のスレッドのブロックとして、提供するステップを有し、
前記計算タスクをコンパイルするステップは、ある所定の処理要素(PE)の連鎖内の処理要素(PE)に対し、前記所定の処理要素(PE)の連鎖を実行する役割を与えられた前記プロセッサの1つのグループの1つの共有メモリ経由で、前記PEにより計算されたデータを交換するようにさせるステップを有する、
ことを特徴とする請求項1−3のいずれかに記載の方法。 - それぞれのプロセッサはそれぞれの定義された前記オペレーションのタイプを走らせることが可能なコードを有する1つのスレッドを動作させ、そして実行されるべき実際の前記原子タスクは、前記スレッドにより読まれたデータに応答して決定される、ことを特徴とする請求項1−4のいずれかに記載の方法。
- 前記処理要素(PE)を前記第2の数のPEの連鎖内に配置するステップは、前記マルチプロセッサ装置により同時に実行可能な複数の連鎖内に前記処理要素(PE)を配置するステップを有する、ことを特徴とする請求項1−3のいずれかに記載の方法。
- ある所与の実行依存性は、1つの駆動処理要素(PE)が1つの従動処理要素(PE)より前に実行されることを特定し、
前記処理要素(PE)を配置するステップは、
前記駆動処理要素(PE)を第1のPEの連鎖内に配置するステップと、
前記従動処理要素(PE)を前記第1のPEの連鎖とは異なる第2のPEの連鎖内に配置するステップと、
前記駆動処理要素(PE)が完全に実行されるまで前記第2のPEの連鎖の実行を停止する同期化要素を前記第2のPEの連鎖内に挿入するステップと
を有する、ことを特徴とする請求項1−3のいずれかに記載の方法。 - 前記計算タスクをコンパイルするステップは、
前記計算タスクから、多重の非循環サブ図を抽出するステップと、
それぞれの非循環サブ図に対しそれぞれのPEの連鎖のデータ構造を生成するため、前記多重のサブ図をコンパイルするステップと、
を有する、ことを特徴とする請求項1−3のいずれかに記載の方法。 - 前記処理要素(PE)を配置するステップは、
前記処理要素(PE)が前記PEの連鎖内の配置のために選択されるべき順番を定義するステップと、
前記PEの連鎖を前記順番に従って前記処理要素(PE)で構成するステップと、
を有する、ことを特徴とする請求項1−3のいずれかに記載の方法。 - 前記処理要素(PE)を配置するステップは、所与の1つの処理要素(PE)と前記PEの連鎖内の1組の可能性のある位置に対して、
前記所与の処理要素(PE)を前記可能性のある位置に配置することによりもたらされる、それぞれの割当コストを計算するステップと、
最低の割当コストの前記可能性のある位置に前記所与の処理要素(PE)を配置するステップと、
を有する、ことを特徴とする請求項1−3のいずれかに記載の方法。 - 前記計算タスクをコンパイルするステップは、所与の1つのPEの連鎖に対し、
前記所与のPEの連鎖の実行の間に、前記マルチプロセッサ装置内のデバイスメモリからキャッシュメモリに変数を取得し、そして前記キャッシュメモリから前記変数の少なくとも幾つかを除去する、決定論的な1つのキャッシュパターンを定義するステップと、
前記マルチプロセッサ装置に対し、前記所与のPEの連鎖の実行時に、前記決定論的なキャッシュパターンを実行させるようにするステップと、
を有する、ことを特徴とする請求項1−3のいずれかに記載の方法。 - 前記計算タスクをコンパイルするステップは、
多重のPEの連鎖を生成するステップと、
前記PEの連鎖の少なくとも幾つかに対し、前記マルチプロセッサ装置の全てのプロセッサによりアクセス可能な前記マルチプロセッサ装置のデバイスメモリにアクセスすることにより、変数を交換するようにさせるステップと、
を有する、ことを特徴とする請求項1−3のいずれかに記載の方法。 - 前記処理要素(PE)を配置するステップは、
前記処理要素(PE)で始まる前記実行依存性のそれぞれの最長の鎖の長さと、
スロットの連鎖のそれぞれの占有レベルと、
前記処理要素(PE)の配置によりもたらされた同期化要素と、
からなる要因のグループから選択された、少なくとも1つの要因に従って、最初は空のスロットの連鎖内に前記処理要素(PE)を配置するステップを有する、ことを特徴とする請求項1−3のいずれかに記載の方法。 - 計算タスクを受け取るステップと、
前記計算タスクは、実行依存性を持つ多重の原子処理要素(PE)を有し、
其々の前記実行依存性は、それぞれ第1の処理要素(PE)がそれぞれ第2の処理要素(PE)よりも前に実行されることを特定し、
前記計算タスクを、マルチプロセッサ装置上での同時実行のためコンパイルするステップと、
前記マルチプロセッサ装置は、並列に動作する多重のプロセッサを有し、そして前記多重のプロセッサによる前記マルチプロセッサ装置の組み込みスケジュールポリシーに従った実行のため、前記実行依存性を破ることなく、前記処理要素(PE)を多重のPEの連鎖内に配置することにより、前記処理要素(PE)のスケジュールを立て、
前記計算タスクの結果を生成するため、前記マルチプロセッサ装置の前記スケジュールポリシーに関係なく、前記PEの連鎖を並行して実行するソフトウェア符号を走らせるための前記マルチプロセッサ装置を呼び出すステップと、
を有し、
ここにおいて前記計算タスクをコンパイルするステップは、
前記計算タスクの前記原子PEの前記タイプを識別するステップと、 前記計算タスクの前記原子オペレーションをワープ内に配置するステップであって、前記ワープの少なくとも幾つかは複数のオペレーションを有し、それぞれのワープ内の前記オペレーションは全て同一の特定の原子タスクを実行する、ステップと、そして
前記ワープを前記PEの連鎖内に配置するステップと、
を有する、
ことを特徴とするコンピュータ計算の方法。 - コンピュータ計算装置であって、
計算タスクを受け取るように接続されたインタフェースと、
前記計算タスクは、実行依存性を持つ多重の原子処理要素(PE)を有し、
其々の前記実行依存性は、それぞれ第1の処理要素(PE)がそれぞれ第2の処理要素(PE)よりも前に実行されることを特定し、
中央演算処理装置(CPU)と、を有し、
前記中央演算処理装置(CPU)は、
第1の数の処理要素(PE)を同時に実行可能な多重のプロセッサを有するマルチプロセッサ装置上での同時実行のため、前記計算タスクの前記原子PEの前記タイプを識別するステップと、前記計算タスクの前記原子オペレーションをワープ内に配置するステップであって、前記ワープの少なくとも幾つかは複数のオペレーションを有し、それぞれのワープ内の前記オペレーションは全て同一の特定の原子タスクを実行する、ステップと、1より大きく第1の数を越えない、第2の数のPEの連鎖内に前記ワープを配置するステップにより、前記計算タスクをコンパイルし、そして
前記PEの連鎖を並行して実行するソフトウェア符号を走らせるため、前記マルチプロセッサ装置を呼び出す、
ように設定される、
ことを特徴とするコンピュータ計算装置。 - コンピュータ計算装置であって、
計算タスクを受け取るように接続されたインタフェースと、
前記計算タスクは、実行依存性を持つ多重の原子処理要素(PE)を有し、
其々の前記実行依存性は、それぞれ第1の処理要素(PE)がそれぞれ第2の処理要素(PE)よりも前に実行されることを特定し、
中央演算処理装置(CPU)と、
を有し、
前記中央演算処理装置(CPU)は、
並列に動作する多重のプロセッサを有し、そして前記多重のプロセッサによる実行のため前記マルチプロセッサ装置の組み込みスケジュールポリシーに従って前記処理要素(PE)のスケジュールを立てるマルチプロセッサ装置上での同時実行のため、前記計算タスクの前記原子PEの前記タイプを識別するステップと、前記計算タスクの前記原子オペレーションをワープ内に配置するステップであって、前記ワープの少なくとも幾つかは複数のオペレーションを有し、それぞれのワープ内の前記オペレーションは全て同一の特定の原子タスクを実行する、ステップと、そして前記実行依存性を破ることなく前記処理要素(PE)を多重のPEの連鎖内に配置するステップにより、前記計算タスクをコンパイルし、そして
前記計算タスクの結果を生成するため、前記マルチプロセッサ装置の前記スケジュールポリシーに関係なく、前記PEの連鎖を並行して実行するソフトウェア符号を走らせるための前記マルチプロセッサ装置を呼び出す、
ように設定される、ことを特徴とするコンピュータ計算装置。 - コンピュータ計算装置であって、
第1の数の原子処理要素(PE)を同時に処理可能な多重のプロセッサを有するマルチプロセッサ装置と、
中央演算処理装置(CPU)と、
を有し、
前記中央演算処理装置(CPU)は、
実行依存性を持つ多重の処理要素(PE)からなる計算タスクを受け取り、
ここに各前記実行依存性は、それぞれの第1の処理要素(PE)がそれぞれ第2の処理要素(PE)の前に実行されることを特定し、
前記マルチプロセッサ装置上での同時実行のため、前記計算タスクの前記原子PEの前記タイプを識別するステップと、前記計算タスクの前記原子オペレーションをワープ内に配置するステップであって、前記ワープの少なくとも幾つかは複数のオペレーションを有し、それぞれのワープ内の前記オペレーションは全て同一の特定の原子タスクを実行する、ステップと、および前記実行依存性を破ることなく処理要素(PE)を1より大きく第1の数を越えない、第2の数のPEの連鎖内に配置するステップにより前記計算タスクをコンパイルし、
前記計算タスクの結果を生成するため、前記PEの連鎖を並行して実行するソフトウェア符号を走らせるための前記マルチプロセッサ装置を呼び出す、
ように設定される、
ことを特徴とするコンピュータ計算装置。 - コンピュータ計算装置であって、
マルチプロセッサ装置と、
ここにおいて前記マルチプロセッサ装置は、並列に動作する前記多重のプロセッサを有し、そして多重のプロセッサによる実行のため、前記マイクロプロセッサ装置の組み込みスケジュールポリシーに従って処理要素(PE)のスケジュールを立て、
中央演算処理装置(CPU)と、
を有し、
前記中央演算処理装置(CPU)は、
実行依存性を持つ多重の前記処理要素(PE)からなる計算タスクを受け取り、
ここに各前記実行依存性は、それぞれの第1の処理要素(PE)がそれぞれ第2の処理要素(PE)の前に実行されることを特定し、
前記マルチプロセッサ装置上での同時実行のため、前記計算タスクの前記原子PEの前記タイプを識別するステップと、前記計算タスクの前記原子オペレーションをワープ内に配置するステップであって、前記ワープの少なくとも幾つかは複数のオペレーションを有し、それぞれのワープ内の前記オペレーションは全て同一の特定の原子タスクを実行する、ステップと、および前記実行依存性を破ることなく処理要素(PE)を多重のPEの連鎖内に配置するステップにより前記計算タスクを、コンパイルし、そして
前記計算タスクの結果を生成するため、前記マルチプロセッサ装置の前記スケジュールポリシーに関係なく、前記PEの連鎖を並行して実行するソフトウェア符号を走らせるための前記マルチプロセッサ装置を呼び出す、
ように設定される、
ことを特徴とするコンピュータ計算装置。 - プログラム命令が保存されるコンピュータ読み取り可能媒体を有する、コンピュータソフトウェアであって、
前記命令は、コンピュータに読み込まれた場合前記コンピュータに対し、
実行依存性を持つ多重の原子処理要素(PE)からなる計算タスクを受け取らせ、
ここに各前記実行依存性は、それぞれの第1の処理要素(PE)がそれぞれ第2の処理要素(PE)の前に実行されることを特定し、
第1の数の処理要素(PE)を同時に実行可能な多重のプロセッサを有するマルチプロセッサ装置上での同時実行のため、前記計算タスクの前記原子PEの前記タイプを識別するステップと、前記計算タスクの前記原子オペレーションをワープ内に配置するステップであって、前記ワープの少なくとも幾つかは複数のオペレーションを有し、それぞれのワープ内の前記オペレーションは全て同一の特定の原子タスクを実行する、ステップと、および前記実行依存性を破ることなく処理要素(PE)を1より大きく第1の数を越えない、第2の数のPEの連鎖内に配置するステップにより、前記計算タスクをコンパイルさせ、
前記計算タスクの結果を生成するため、前記PEの連鎖を並行して実行するソフトウェア符号を走らせるための前記マルチプロセッサ装置を呼び出させる、
ことを特徴とするコンピュータソフトウェア。 - プログラム命令が保存されるコンピュータ読み取り可能媒体を有する、コンピュータソフトウェアであって、
前記命令は、コンピュータに読み込まれた場合、前記コンピュータに対し、
実行依存性を持つ多重の原子処理要素(PE)からなる計算タスクを受け取らせ、
ここに各前記実行依存性は、それぞれの第1の処理要素(PE)がそれぞれ第2の処理要素(PE)の前に実行されることを特定し、
並列に動作する前記多重のプロセッサを有し、そして多重のプロセッサによる実行のため前記マルチプロセッサ装置の組み込みスケジュールポリシーに従って前記処理要素(PE)のスケジュールを立てるマルチプロセッサ装置上での同時実行のため、前記計算タスクの前記原子PEの前記タイプを識別するステップと、前記計算タスクの前記原子オペレーションをワープ内に配置するステップであって、前記ワープの少なくとも幾つかは複数のオペレーションを有し、それぞれのワープ内の前記オペレーションは全て同一の特定の原子タスクを実行する、ステップと、および前記実行依存性を破ることなく処理要素(PE)を多重のPEの連鎖内に配置するステップにより、前記計算タスクをコンパイルさせ、
前記計算タスクの結果を生成するため、前記マルチプロセッサ装置の前記スケジュールポリシーに関係なく、前記PEの連鎖を並行して実行するソフトウェア符号を走らせるための前記マルチプロセッサ装置を呼び出させる、
ことを特徴とするコンピュータソフトウェア。
Applications Claiming Priority (11)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US7946108P | 2008-07-10 | 2008-07-10 | |
US61/079,461 | 2008-07-10 | ||
US8680308P | 2008-08-07 | 2008-08-07 | |
US61/086,803 | 2008-08-07 | ||
US11067608P | 2008-11-03 | 2008-11-03 | |
US61/110,676 | 2008-11-03 | ||
US18558909P | 2009-06-10 | 2009-06-10 | |
US18560909P | 2009-06-10 | 2009-06-10 | |
US61/185,609 | 2009-06-10 | ||
US61/185,589 | 2009-06-10 | ||
PCT/IB2009/052820 WO2010004474A2 (en) | 2008-07-10 | 2009-06-30 | Efficient parallel computation of dependency problems |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2011527788A JP2011527788A (ja) | 2011-11-04 |
JP2011527788A5 true JP2011527788A5 (ja) | 2014-03-06 |
JP5733860B2 JP5733860B2 (ja) | 2015-06-10 |
Family
ID=41507505
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011517279A Expired - Fee Related JP5733860B2 (ja) | 2008-07-10 | 2009-06-30 | 依存問題の効率的並列計算 |
Country Status (7)
Country | Link |
---|---|
US (1) | US8516454B2 (ja) |
EP (1) | EP2297647A4 (ja) |
JP (1) | JP5733860B2 (ja) |
KR (1) | KR101607495B1 (ja) |
CN (1) | CN102089752B (ja) |
IL (1) | IL209244A (ja) |
WO (1) | WO2010004474A2 (ja) |
Families Citing this family (92)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8327115B2 (en) | 2006-04-12 | 2012-12-04 | Soft Machines, Inc. | Plural matrices of execution units for processing matrices of row dependent instructions in single clock cycle in super or separate mode |
EP2523101B1 (en) | 2006-11-14 | 2014-06-04 | Soft Machines, Inc. | Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes |
US8751211B2 (en) | 2008-03-27 | 2014-06-10 | Rocketick Technologies Ltd. | Simulation using parallel processors |
US8516454B2 (en) | 2008-07-10 | 2013-08-20 | Rocketick Technologies Ltd. | Efficient parallel computation of dependency problems |
US9032377B2 (en) | 2008-07-10 | 2015-05-12 | Rocketick Technologies Ltd. | Efficient parallel computation of dependency problems |
DK2398912T3 (en) | 2009-02-18 | 2017-10-30 | Streck Inc | Conservation of cell-free nucleic acids |
EP2282264A1 (en) * | 2009-07-24 | 2011-02-09 | ProximusDA GmbH | Scheduling and communication in computing systems |
US9354944B2 (en) * | 2009-07-27 | 2016-05-31 | Advanced Micro Devices, Inc. | Mapping processing logic having data-parallel threads across processors |
US8689191B2 (en) * | 2010-03-05 | 2014-04-01 | International Business Machines Corporation | Correct refactoring of concurrent software |
US8650554B2 (en) * | 2010-04-27 | 2014-02-11 | International Business Machines Corporation | Single thread performance in an in-order multi-threaded processor |
US20110276966A1 (en) * | 2010-05-06 | 2011-11-10 | Arm Limited | Managing task dependency within a data processing system |
KR101685247B1 (ko) | 2010-09-17 | 2016-12-09 | 소프트 머신즈, 인크. | 조기 원거리 분기 예측을 위한 섀도우 캐시를 포함하는 단일 사이클 다중 분기 예측 |
KR101710910B1 (ko) * | 2010-09-27 | 2017-03-13 | 삼성전자 주식회사 | 프로세싱 유닛의 동적 자원 할당을 위한 방법 및 장치 |
CN102073547B (zh) * | 2010-12-17 | 2013-08-28 | 国家计算机网络与信息安全管理中心 | 一种多路服务器多缓冲区并行收包的性能优化方法 |
KR101966712B1 (ko) | 2011-03-25 | 2019-04-09 | 인텔 코포레이션 | 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 메모리 프래그먼트 |
CN108376097B (zh) | 2011-03-25 | 2022-04-15 | 英特尔公司 | 用于通过使用由可分割引擎实例化的虚拟核来支持代码块执行的寄存器文件段 |
EP2689327B1 (en) | 2011-03-25 | 2021-07-28 | Intel Corporation | Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines |
US9128748B2 (en) * | 2011-04-12 | 2015-09-08 | Rocketick Technologies Ltd. | Parallel simulation using multiple co-simulators |
KR101639853B1 (ko) | 2011-05-20 | 2016-07-14 | 소프트 머신즈, 인크. | 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 자원들 및 상호접속 구조들의 비집중 할당 |
CN103649931B (zh) | 2011-05-20 | 2016-10-12 | 索夫特机械公司 | 用于支持由多个引擎执行指令序列的互连结构 |
US9032266B2 (en) * | 2011-06-28 | 2015-05-12 | Terence Wai-kwok Chan | Multithreaded, mixed-HDL/ESL concurrent fault simulator for large-scale integrated circuit designs |
CN102855339A (zh) * | 2011-06-29 | 2013-01-02 | 北京华大九天软件有限公司 | 集成电路版图验证并行处理解决方案 |
KR101818760B1 (ko) | 2011-07-22 | 2018-01-15 | 삼성전자주식회사 | 시뮬레이션 장치 및 그의 시뮬레이션 방법 |
US9003383B2 (en) * | 2011-09-15 | 2015-04-07 | You Know Solutions, LLC | Analytic engine to parallelize serial code |
US8966461B2 (en) * | 2011-09-29 | 2015-02-24 | Advanced Micro Devices, Inc. | Vector width-aware synchronization-elision for vector processors |
US8752036B2 (en) * | 2011-10-31 | 2014-06-10 | Oracle International Corporation | Throughput-aware software pipelining for highly multi-threaded systems |
WO2013077876A1 (en) | 2011-11-22 | 2013-05-30 | Soft Machines, Inc. | A microprocessor accelerated code optimizer |
KR101703401B1 (ko) | 2011-11-22 | 2017-02-06 | 소프트 머신즈, 인크. | 다중 엔진 마이크로프로세서용 가속 코드 최적화기 |
US9170820B2 (en) * | 2011-12-15 | 2015-10-27 | Advanced Micro Devices, Inc. | Syscall mechanism for processor to processor calls |
KR101885211B1 (ko) * | 2012-01-27 | 2018-08-29 | 삼성전자 주식회사 | Gpu의 자원 할당을 위한 방법 및 장치 |
GB2500707B (en) * | 2012-03-30 | 2014-09-17 | Cognovo Ltd | Multiprocessor system, apparatus and methods |
US9691171B2 (en) | 2012-08-03 | 2017-06-27 | Dreamworks Animation Llc | Visualization tool for parallel dependency graph evaluation |
US9720792B2 (en) | 2012-08-28 | 2017-08-01 | Synopsys, Inc. | Information theoretic caching for dynamic problem generation in constraint solving |
US11468218B2 (en) | 2012-08-28 | 2022-10-11 | Synopsys, Inc. | Information theoretic subgraph caching |
US8924945B1 (en) * | 2012-10-04 | 2014-12-30 | Google Inc. | Managing dependencies on multi-threaded environment |
KR101926464B1 (ko) * | 2012-10-11 | 2018-12-07 | 삼성전자 주식회사 | 멀티코어 프로세서에서 수행되는 프로그램의 컴파일 방법, 멀티코어 프로세서의 태스크 매핑 방법 및 태스크 스케줄링 방법 |
US9015656B2 (en) * | 2013-02-28 | 2015-04-21 | Cray Inc. | Mapping vector representations onto a predicated scalar multi-threaded system |
CN104035747B (zh) * | 2013-03-07 | 2017-12-19 | 伊姆西公司 | 用于并行计算的方法和装置 |
EP2779100A1 (en) | 2013-03-11 | 2014-09-17 | Thomson Licensing | Method for processing a computer-animated scene and corresponding device |
US8904320B2 (en) | 2013-03-13 | 2014-12-02 | Synopsys, Inc. | Solving multiplication constraints by factorization |
US9891924B2 (en) | 2013-03-15 | 2018-02-13 | Intel Corporation | Method for implementing a reduced size register view data structure in a microprocessor |
US9886279B2 (en) | 2013-03-15 | 2018-02-06 | Intel Corporation | Method for populating and instruction view data structure by using register template snapshots |
WO2014150806A1 (en) | 2013-03-15 | 2014-09-25 | Soft Machines, Inc. | A method for populating register view data structure by using register template snapshots |
WO2014151018A1 (en) | 2013-03-15 | 2014-09-25 | Soft Machines, Inc. | A method for executing multithreaded instructions grouped onto blocks |
US9811342B2 (en) | 2013-03-15 | 2017-11-07 | Intel Corporation | Method for performing dual dispatch of blocks and half blocks |
US9632825B2 (en) | 2013-03-15 | 2017-04-25 | Intel Corporation | Method and apparatus for efficient scheduling for asymmetrical execution units |
US10140138B2 (en) | 2013-03-15 | 2018-11-27 | Intel Corporation | Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation |
WO2014151043A1 (en) | 2013-03-15 | 2014-09-25 | Soft Machines, Inc. | A method for emulating a guest centralized flag architecture by using a native distributed flag architecture |
US10275255B2 (en) | 2013-03-15 | 2019-04-30 | Intel Corporation | Method for dependency broadcasting through a source organized source view data structure |
WO2014150971A1 (en) | 2013-03-15 | 2014-09-25 | Soft Machines, Inc. | A method for dependency broadcasting through a block organized source view data structure |
US9569216B2 (en) | 2013-03-15 | 2017-02-14 | Soft Machines, Inc. | Method for populating a source view data structure by using register template snapshots |
WO2014150991A1 (en) * | 2013-03-15 | 2014-09-25 | Soft Machines, Inc. | A method for implementing a reduced size register view data structure in a microprocessor |
US9904625B2 (en) | 2013-03-15 | 2018-02-27 | Intel Corporation | Methods, systems and apparatus for predicting the way of a set associative cache |
IL232836A0 (en) * | 2013-06-02 | 2014-08-31 | Rocketick Technologies Ltd | Efficient parallel computation of dependency problems |
CN103559574B (zh) * | 2013-10-28 | 2017-02-08 | 东软集团股份有限公司 | 一种工作流操作方法及系统 |
CN105830026B (zh) * | 2013-11-27 | 2020-09-15 | 英特尔公司 | 用于调度来自虚拟机的图形处理单元工作负荷的装置和方法 |
WO2015123840A1 (en) * | 2014-02-20 | 2015-08-27 | Intel Corporation | Workload batch submission mechanism for graphics processing unit |
GB2524063B (en) | 2014-03-13 | 2020-07-01 | Advanced Risc Mach Ltd | Data processing apparatus for executing an access instruction for N threads |
US9298769B1 (en) * | 2014-09-05 | 2016-03-29 | Futurewei Technologies, Inc. | Method and apparatus to facilitate discrete-device accelertaion of queries on structured data |
US9860145B2 (en) | 2015-07-02 | 2018-01-02 | Microsoft Technology Licensing, Llc | Recording of inter-application data flow |
US9712472B2 (en) | 2015-07-02 | 2017-07-18 | Microsoft Technology Licensing, Llc | Application spawning responsive to communication |
US9733915B2 (en) * | 2015-07-02 | 2017-08-15 | Microsoft Technology Licensing, Llc | Building of compound application chain applications |
US10261985B2 (en) | 2015-07-02 | 2019-04-16 | Microsoft Technology Licensing, Llc | Output rendering in dynamic redefining application |
US9785484B2 (en) | 2015-07-02 | 2017-10-10 | Microsoft Technology Licensing, Llc | Distributed application interfacing across different hardware |
US10198252B2 (en) | 2015-07-02 | 2019-02-05 | Microsoft Technology Licensing, Llc | Transformation chain application splitting |
US9733993B2 (en) | 2015-07-02 | 2017-08-15 | Microsoft Technology Licensing, Llc | Application sharing using endpoint interface entities |
US10031724B2 (en) | 2015-07-08 | 2018-07-24 | Microsoft Technology Licensing, Llc | Application operation responsive to object spatial status |
US10198405B2 (en) | 2015-07-08 | 2019-02-05 | Microsoft Technology Licensing, Llc | Rule-based layout of changing information |
US10277582B2 (en) | 2015-08-27 | 2019-04-30 | Microsoft Technology Licensing, Llc | Application service architecture |
US10740116B2 (en) * | 2015-09-01 | 2020-08-11 | International Business Machines Corporation | Three-dimensional chip-based regular expression scanner |
US9684744B2 (en) | 2015-10-15 | 2017-06-20 | Rocketick Technologies Ltd. | Verification of system assertions in simulation |
US10977092B2 (en) * | 2015-10-16 | 2021-04-13 | Qualcomm Incorporated | Method for efficient task scheduling in the presence of conflicts |
US11151446B2 (en) * | 2015-10-28 | 2021-10-19 | Google Llc | Stream-based accelerator processing of computational graphs |
US10579350B2 (en) * | 2016-02-18 | 2020-03-03 | International Business Machines Corporation | Heterogeneous computer system optimization |
US10650048B2 (en) * | 2016-09-09 | 2020-05-12 | Baidu Usa Llc | Managing complex service dependencies in a data integration system |
KR102278337B1 (ko) * | 2017-04-21 | 2021-07-19 | 에스케이하이닉스 주식회사 | 메모리장치의 스케줄러 및 스케줄링 방법 |
EP3631629A1 (en) * | 2017-05-29 | 2020-04-08 | Barcelona Supercomputing Center-Centro Nacional de Supercomputación | Managing task dependency |
CN108984212B (zh) * | 2017-05-31 | 2021-06-25 | 腾讯科技(深圳)有限公司 | 一种关闭进程的方法以及电子设备 |
CN107239334B (zh) * | 2017-05-31 | 2019-03-12 | 清华大学无锡应用技术研究院 | 处理不规则应用的方法及装置 |
US10360002B2 (en) * | 2017-06-06 | 2019-07-23 | Informatica Llc | Method, apparatus, and computer-readable medium for generating an alternative implementation of a program on one or more engines |
JP2018207396A (ja) * | 2017-06-08 | 2018-12-27 | 富士通株式会社 | 情報処理装置、情報処理方法及びプログラム |
US10672095B2 (en) | 2017-12-15 | 2020-06-02 | Ati Technologies Ulc | Parallel data transfer to increase bandwidth for accelerated processing devices |
CN108874520A (zh) * | 2018-06-06 | 2018-11-23 | 成都四方伟业软件股份有限公司 | 计算方法及装置 |
CN110825440B (zh) * | 2018-08-10 | 2023-04-14 | 昆仑芯(北京)科技有限公司 | 指令执行方法和装置 |
KR20240036122A (ko) * | 2018-08-23 | 2024-03-19 | 애플 인크. | 프로세스 데이터 공유 방법 및 디바이스 |
CN111090464B (zh) | 2018-10-23 | 2023-09-22 | 华为技术有限公司 | 一种数据流处理方法及相关设备 |
CN109634729A (zh) * | 2018-11-20 | 2019-04-16 | 中国船舶重工集团公司第七0七研究所 | 一种捷联惯导设备多核dsp并行解算方法 |
KR20200083048A (ko) | 2018-12-31 | 2020-07-08 | 삼성전자주식회사 | 폴링 시간을 예측하는 뉴럴 네트워크 시스템 및 이를 이용한 뉴럴 네트워크 모델 처리 방법 |
US12014202B2 (en) | 2020-02-13 | 2024-06-18 | Samsung Electronics Co., Ltd. | Method and apparatus with accelerator |
US12073256B2 (en) | 2020-10-01 | 2024-08-27 | Samsung Electronics Co., Ltd. | Systems, methods, and devices for data propagation in graph processing |
KR20220094601A (ko) | 2020-12-29 | 2022-07-06 | 삼성전자주식회사 | 스토리지 장치 및 그 구동 방법 |
CN118550674A (zh) * | 2024-07-30 | 2024-08-27 | 浙江大华技术股份有限公司 | 基于多算子的任务调度方法、装置、计算机设备和存储介质 |
Family Cites Families (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08287022A (ja) * | 1995-03-31 | 1996-11-01 | Internatl Business Mach Corp <Ibm> | マルチプロセッサ・システム及びその排他的制御方法 |
JP2959525B2 (ja) * | 1997-06-02 | 1999-10-06 | 日本電気株式会社 | データ処理装置および方法、情報記憶媒体 |
US6397372B1 (en) * | 1999-01-19 | 2002-05-28 | Zeki Bozkus | Cell based parallel verification of an integrated circuit design |
NL1015579C1 (nl) * | 2000-06-30 | 2002-01-02 | Thales Nederland Bv | Werkwijze voor het automatisch verdelen van programmataken over een verzameling processors. |
WO2002056145A2 (en) * | 2001-01-11 | 2002-07-18 | P C Krause And Associates Inc | Circuit simulation |
US7158925B2 (en) * | 2002-04-18 | 2007-01-02 | International Business Machines Corporation | Facilitating simulation of a model within a distributed environment |
JP4787456B2 (ja) * | 2002-12-25 | 2011-10-05 | 日本電気株式会社 | 並列プログラム生成装置,並列プログラム生成方法および並列プログラム生成プログラム |
EP1661164A4 (en) * | 2003-08-26 | 2007-10-31 | Nusym Technologies Inc | METHOD AND SYSTEMS FOR IMPROVED FUNCTION SIMULATION OF INTEGRATED CIRCUITS |
US7603546B2 (en) * | 2004-09-28 | 2009-10-13 | Intel Corporation | System, method and apparatus for dependency chain processing |
JP2008538620A (ja) * | 2005-01-25 | 2008-10-30 | ルーシッド インフォメイション テクノロジー リミテッド | モノリシック構成のシリコン・チップ上に多数のグラフィックス・コアを用いるグラフィック処理及び表示システム |
US20060242618A1 (en) * | 2005-02-14 | 2006-10-26 | Yao-Ting Wang | Lithographic simulations using graphical processing units |
JP4448784B2 (ja) * | 2005-03-15 | 2010-04-14 | 株式会社日立製作所 | 並列計算機の同期方法及びプログラム |
JP3938387B2 (ja) * | 2005-08-10 | 2007-06-27 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイラ、制御方法、およびコンパイラ・プログラム |
US7409656B1 (en) * | 2005-09-12 | 2008-08-05 | Cadence Design Systems, Inc. | Method and system for parallelizing computing operations |
US7444276B2 (en) * | 2005-09-28 | 2008-10-28 | Liga Systems, Inc. | Hardware acceleration system for logic simulation using shift register as local cache |
US20070073999A1 (en) * | 2005-09-28 | 2007-03-29 | Verheyen Henry T | Hardware acceleration system for logic simulation using shift register as local cache with path for bypassing shift register |
US20070074000A1 (en) * | 2005-09-28 | 2007-03-29 | Liga Systems, Inc. | VLIW Acceleration System Using Multi-state Logic |
US20090150136A1 (en) * | 2005-10-10 | 2009-06-11 | Sei Yang Yang | Dynamic-based verification apparatus for verification from electronic system level to gate level, and verification method using the same |
US8781808B2 (en) * | 2005-10-10 | 2014-07-15 | Sei Yang Yang | Prediction-based distributed parallel simulation method |
US20070219771A1 (en) * | 2005-12-01 | 2007-09-20 | Verheyen Henry T | Branching and Behavioral Partitioning for a VLIW Processor |
US20070129924A1 (en) * | 2005-12-06 | 2007-06-07 | Verheyen Henry T | Partitioning of tasks for execution by a VLIW hardware acceleration system |
US20070129926A1 (en) * | 2005-12-01 | 2007-06-07 | Verheyen Henry T | Hardware acceleration system for simulation of logic and memory |
US20070150702A1 (en) * | 2005-12-23 | 2007-06-28 | Verheyen Henry T | Processor |
US7760743B2 (en) * | 2006-03-06 | 2010-07-20 | Oracle America, Inc. | Effective high availability cluster management and effective state propagation for failure recovery in high availability clusters |
US7627838B2 (en) * | 2006-04-25 | 2009-12-01 | Cypress Semiconductor Corporation | Automated integrated circuit development |
GB2443277B (en) * | 2006-10-24 | 2011-05-18 | Advanced Risc Mach Ltd | Performing diagnostics operations upon an asymmetric multiprocessor apparatus |
US20080208553A1 (en) * | 2007-02-27 | 2008-08-28 | Fastrack Design, Inc. | Parallel circuit simulation techniques |
US8751211B2 (en) * | 2008-03-27 | 2014-06-10 | Rocketick Technologies Ltd. | Simulation using parallel processors |
US8516454B2 (en) | 2008-07-10 | 2013-08-20 | Rocketick Technologies Ltd. | Efficient parallel computation of dependency problems |
US8543360B2 (en) * | 2009-06-30 | 2013-09-24 | Omniz Design Automation Corporation | Parallel simulation of general electrical and mixed-domain circuits |
-
2009
- 2009-06-30 US US12/994,153 patent/US8516454B2/en active Active
- 2009-06-30 KR KR1020107028355A patent/KR101607495B1/ko not_active IP Right Cessation
- 2009-06-30 EP EP09794083A patent/EP2297647A4/en not_active Withdrawn
- 2009-06-30 JP JP2011517279A patent/JP5733860B2/ja not_active Expired - Fee Related
- 2009-06-30 CN CN200980126852.2A patent/CN102089752B/zh not_active Expired - Fee Related
- 2009-06-30 WO PCT/IB2009/052820 patent/WO2010004474A2/en active Application Filing
-
2010
- 2010-11-10 IL IL209244A patent/IL209244A/en not_active IP Right Cessation
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5733860B2 (ja) | 依存問題の効率的並列計算 | |
JP2011527788A5 (ja) | ||
US9684494B2 (en) | Efficient parallel computation of dependency problems | |
Aldinucci et al. | Fastflow: High‐Level and Efficient Streaming on Multicore | |
US9697262B2 (en) | Analytical data processing engine | |
US6651247B1 (en) | Method, apparatus, and product for optimizing compiler with rotating register assignment to modulo scheduled code in SSA form | |
US20130125133A1 (en) | System and Method for Load Balancing of Fully Strict Thread-Level Parallel Programs | |
JP6432450B2 (ja) | 並列計算装置、コンパイル装置、並列処理方法、コンパイル方法、並列処理プログラムおよびコンパイルプログラム | |
US20100031267A1 (en) | Distribution Data Structures for Locality-Guided Work Stealing | |
CN111090464A (zh) | 一种数据流处理方法及相关设备 | |
JP2019049843A (ja) | 実行ノード選定プログラム、実行ノード選定方法及び情報処理装置 | |
US8701098B2 (en) | Leveraging multicore systems when compiling procedures | |
Dehne et al. | Exploring the limits of gpus with parallel graph algorithms | |
US6907509B2 (en) | Automatic program restructuring to reduce average cache miss penalty | |
CN113296788B (zh) | 指令调度方法、装置、设备及存储介质 | |
Su et al. | Automatic support for irregular computations in a high-level language | |
Sakdhnagool et al. | RegDem: Increasing GPU performance via shared memory register spilling | |
KR20140141535A (ko) | 디펜던시 문제의 효율적인 병렬 계산 | |
Jesshope et al. | The implementation of an svp many-core processor and the evaluation of its memory architecture | |
Fürlinger et al. | DASH: distributed data structures and parallel algorithms in a global address space | |
JP4787456B2 (ja) | 並列プログラム生成装置,並列プログラム生成方法および並列プログラム生成プログラム | |
Cole et al. | Efficient resource oblivious algorithms for multicores | |
CN115004150A (zh) | 用于预测和调度软件流水化循环中的复制指令的方法和装置 | |
Herhut et al. | Concurrent non-deferred reference counting on the microgrid: first experiences | |
Uddin | Microgrid-The microthreaded many-core architecture |