JP2009259241A - 汎用プロセッサによるリターゲティングされたグラフィックプロセッサ加速コードの実行 - Google Patents

汎用プロセッサによるリターゲティングされたグラフィックプロセッサ加速コードの実行 Download PDF

Info

Publication number
JP2009259241A
JP2009259241A JP2009088972A JP2009088972A JP2009259241A JP 2009259241 A JP2009259241 A JP 2009259241A JP 2009088972 A JP2009088972 A JP 2009088972A JP 2009088972 A JP2009088972 A JP 2009088972A JP 2009259241 A JP2009259241 A JP 2009259241A
Authority
JP
Japan
Prior art keywords
application program
execution
general purpose
code
loop
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
Application number
JP2009088972A
Other languages
English (en)
Other versions
JP5152594B2 (ja
Inventor
Vinod Grover
グローヴァー ヴィノッド
Bastiaan Joannes Matheus Aarts
ジョアンズ マシウス アーツ バスティアーン
Michael Murphy
マーフィー マイケル
B Kolhe Jayant
ビー. コルヘ ジャヤント
Bryan Pormann John
ブライアン ポーマン ジョン
Saylor Douglas
セーラー ダグラス
Boris Beylin
ベイリン ボリス
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.)
Nvidia Corp
Original Assignee
Nvidia Corp
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 Nvidia Corp filed Critical Nvidia Corp
Publication of JP2009259241A publication Critical patent/JP2009259241A/ja
Application granted granted Critical
Publication of JP5152594B2 publication Critical patent/JP5152594B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45537Provision of facilities of other operating environments, e.g. WINE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of 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
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/26Functional testing
    • G06F11/261Functional testing by simulating additional hardware, e.g. fault simulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory

Abstract

【課題】マルチコアグラフィックプロセッサ(マルチコアGPU)により実行するために書かれ、共有メモリをもつ汎用プロセッサにより実行するためのシステム。
【解決手段】本発明は、マルチコアGPUで実行するために並列プログラミングモデルを使用して書かれたアプリケーションプログラムを、汎用のCPUにより実行するように変換する技術について述べる。マルチコアGPUの特定の特徴に依存するアプリケーションプログラムの部分は、トランスレータにより、汎用CPUで実行するように変換される。アプリケーションプログラムは、同期独立インストラクションの領域へと区画化される。インストラクションは、収斂又は発散として分類され、領域と領域との間で共有される発散メモリ参照が複写される。汎用CPUによる実行中に種々のスレッド間でのメモリの正しい共有を保証するためにスレッドループが挿入される。
【選択図】図4

Description

関連出願の相互参照
[0001]本出願は、2008年4月9日に出願された“SystemFor Executing GPU-Accelerated Code on Multi-Core Architecture”と題する米国プロビジョナル特許出願第61/043,708号(代理人管理番号NVDA/SC−08−0007−US0)の利益を主張する。この関連出願の対象資料を参考としてここに援用する。
[0002]本発明の実施形態は、一般に、コンパイラープログラムに係り、より詳細には、マルチコアグラフィックプロセッサにより実行するために書かれ、共有メモリをもつ汎用プロセッサにより実行するためにリターゲティングされたアプリケーションプログラムに係る。
[0003]近代的なグラフィック処理システムは、典型的に、マルチスレッド的にアプリケーションを実行するように構成されたマルチコアグラフィック処理ユニット(GPU)を備えている。又、グラフィック処理システムは、実行スレッド間に共有され且つ各スレッド専用とされた部分をもつメモリも備えている。
[0004]NVIDIAのCUDATM(コンピュート・ユニファイド・デバイス・アーキテクチャー)技術は、プログラマーや開発者が、ビデオ及びオーディオエンコーディング、油田及びガス田踏査のためのモデリング、及び医療像形成のような複雑な計算上の問題を解決するためのソフトウェアアプリケーションを書くことができるようにするC言語環境を提供する。これらのアプリケーションは、マルチコアGPUにより並列に実行するように構成され、典型的に、マルチコアGPUの特定の特徴に依存している。汎用の中央処理ユニット(CPU)には同じ特定の特徴が得られないので、CUDAを使用して書かれたソフトウェアアプリケーションは、汎用のCPUで実行するように移行できないことがある。
[0005]上述したように、この技術では、マルチコアGPUで実行するために並列プログラミングモデルを使用して書かれたアプリケーションプログラムを、プログラマーにアプリケーションプログラムの変更を要求することなく、汎用CPUで実行できるようにする技術が要望されている。
[0006]本発明の一実施形態は、変換されたアプリケーションプログラムを実行するように汎用プロセッサを構成するための方法について述べる。この方法は、マルチコアグラフィック処理システムで実行するために並列プログラミングモデルを使用して書かれたアプリケーションプログラムから変換されたものである前記変換されたアプリケーションプログラムを受け取り、そしてその変換されたアプリケーションプログラムをコンパイルして、汎用プロセッサにより実行するためのコンパイルされたコードを発生することを含む。コンパイルされたコードを実行するために利用できる汎用プロセッサ内の実行コアの数が決定され、その数の実行コアをイネーブルするように汎用プロセッサが構成される。コンパイルされたコードは、その数の実行コアを含む汎用プロセッサによって実行するために起動される。
[0007]ここに開示する方法の1つの効果は、マルチコアGPUで実行するために並列プログラミングモデルを使用して書かれたアプリケーションプログラムを、変更せずに汎用CPUへ移行できることである。マルチコアGPUの特定の特徴に依存するアプリケーションの部分は、トランスレータにより、汎用CPUで実行するように変換される。アプリケーションプログラムは、同期独立インストラクションの領域へ区画化される。これらインストラクションは、収斂又は発散として分類され、領域間で共有される発散メモリ参照が複写される。汎用CPUにより実行される間に種々のスレッド間にメモリの正しい共有を保証するためにスレッドループが挿入される。
[0008]上述した本発明の特徴を詳細に理解できるように、前記で簡単に要約した本発明について、幾つかを添付図面に例示した実施形態を参照して、より詳細に説明する。しかしながら、添付図面は、本発明の典型的な実施形態を例示するに過ぎず、それ故、本発明の範囲をそれに限定するものではなく、本発明は、同等の効果を発揮できる他の実施形態も包含できるものであることに注意されたい。
コンピュータシステムを示すブロック図である。 本発明の一実施形態によるコンピュータシステムを例示するブロック図である。 マルチコアグラフィック処理ユニットにより実行するために書かれたコードを、本発明の一実施形態により、汎用プロセッサにより実行するためのコードに変換するための方法ステップを示すフローチャートである。 本発明の一実施形態により、入力コードを区画化されたコードに変換するところを示す概念図である。 本発明の一実施形態により、入力コードを最適化されたコードに変換するところを示す概念図である。 本発明の一実施形態により、変換されたコードを汎用プロセッサによって実行するための方法ステップを示すフローチャートである。
[0015]以下の説明では、本発明をより完全に理解するために多数の特定の細部について説明する。しかしながら、当業者であれば、これらの特定の細部の1つ以上がなくても、本発明を実施できることが明らかであろう。他の点について、本発明を不明瞭にしないために、良く知られた特徴は、説明しない。
[0016]図1は、CUDAを使用して書かれたコードを実行するように構成されたコンピュータシステム100を示すブロック図である。このコンピュータシステム100は、メモリブリッジ105を含むバス経路を経て通信するCPU102及びシステムメモリ104を備えている。例えば、ノースブリッジ(Northbridge)チップでよいメモリブリッジ105は、バス又は他の通信経路106(例えば、ハイパートランスポートリンク)を経てI/O(入力/出力)ブリッジ107に接続される。例えば、サウスブリッジ(Southbridge)チップでよいI/Oブリッジ107は、1つ以上のユーザ入力装置108(例えば、キーボード、マウス)からユーザ入力を受け取り、そしてその入力を、経路106及びメモリブリッジ105を経てCPU102へ転送する。メモリブリッジ105には、バス又は他の通信経路113(例えば、PCIエクスプレス、アクセラレーテッドグラフィックポート又はハイパートランスポートリンク)を経てマルチスレッド型処理サブシステム112が結合される。一実施形態では、このマルチスレッド型処理サブシステム112は、ディスプレイ装置110(例えば、従来のCRT又はLCDベースのモニタ)へピクセルを配送するグラフィックサブシステムである。I/Oブリッジ107には、システムディスク114も接続される。スイッチ116は、I/Oブリッジ107と、他のコンポーネント、例えば、ネットワークアダプタ118及び種々のアドイン(add-in)カード120、121との間の接続をなす。又、I/Oブリッジ107には、USB又は他のポート接続部、CDドライブ、DVDドライブ、フィルムレコーディング装置、等を含む他のコンポーネント(明確に示さず)を接続することもできる。図1における種々のコンポーネントを相互接続する通信経路は、適当なプロトコル、例えば、PCI(周辺コンポーネント相互接続)、PCI−エクスプレス(PCI−E)、AGP(アクセラレーテッドグラフィックポート)、ハイパートランスポート、或いは他のバス又はポイント・ツー・ポイント通信プロトコルを使用して実施することができ、そして異なる装置間の接続は、この技術で知られたように異なるプロトコルを使用することができる。
[0017]CPU102は、コンピュータシステム100の制御プロセッサとして動作し、他のシステムコンポーネントの動作を管理し且つ整合させる。特に、CPU102は、マルチスレッド型処理サブシステム112内の並列プロセッサ134の動作を制御するコマンドを発生する。ある実施形態では、CPU102は、並列プロセッサ134のためのコマンドのストリームをコマンドバッファ(図示せず)に書き込み、コマンドバッファは、システムメモリ104、サブシステムメモリ138、或いはCPU102及び並列プロセッサ134の両方にアクセス可能な別の記憶位置に常駐することができる。並列プロセッサ134は、コマンドバッファからコマンドストリームを読み取り、そしてCPU102のオペレーションに対して非同期でコマンドを実行する。
[0018]システムメモリ104は、オペレーティングシステムの実行映像、装置ドライバ103、及びマルチスレッド型処理サブシステム112により実行するように構成されたCUDAコード101を備えている。CUDAコード101は、マルチスレッド型処理サブシステム112で実行されるように意図されたプログラミングインストラクションを組み込んでいる。この説明の文脈において、コードとは、コンピュータコード、インストラクション、及び/又はプロセッサを使用して実行できるファンクションを指す。例えば、種々の実施形態において、コードは、Cコード、C++コード、等を含んでもよい。一実施形態において、コードは、コンピュータ言語の言語拡張(例えば、C、C++、等の拡張)を含んでもよい。
[0019]オペレーティングシステムは、コンピュータシステム100のオペレーションを管理し整合するための詳細なインストラクションを与える。装置ドライバ103は、マルチスレッド型処理サブシステム112、特に、並列プロセッサ134のオペレーションを管理し整合するための詳細なインストラクションを与える。更に、装置ドライバ103は、並列プロセッサ134に対して特別に最適化されたマシンコードを発生するための編集設備を備えてもよい。又、装置ドライバ103は、NVIDIA社により提供されるCUDATMフレームワークに関連して設けられてもよい。
[0020]一実施形態では、マルチスレッド型処理サブシステム112は、1つ以上の並列プロセッサ134を組み込んでおり、これら並列プロセッサは、例えば、プログラム可能なプロセッサ、特定用途向け集積回路(ASIC)のような1つ以上の集積回路装置を使用して実施することができる。並列プロセッサ134は、グラフィック及びビデオ処理に最適な回路を含み、例えば、ビデオ出力回路、及びグラフィック処理回路(GPU)を含む。別の実施形態では、マルチスレッド型処理サブシステム112は、メモリブリッジ105、CPU102、及びI/Oブリッジ107のような1つ以上の他のシステム要素と一体化されて、システムオンチップ(SoC)を形成することができる。1つ以上の並列プロセッサ134がディスプレイ装置110へデータを出力してもよいし、又は各並列プロセッサ134が1つ以上のディスプレイ装置110にデータを出力してもよい。
[0021]並列プロセッサ134は、1つ以上の処理コアを含む高度に並列なプロセッサを実施するのが好都合であり、各処理コアは、非常に多数のスレッドを同時に実行することができ、又、各スレッドは、コード101のようなプログラムのインスタンスである。並列プロセッサ134は、これに限定されないが、直線的及び非直線的なデータ変換、ビデオ及び/又はオーディオデータのフィルタリング、モデリングオペレーション(例えば、物理の法則を適用して、物体の位置、速度及び他の属性を決定する)、映像レンダリングオペレーション(例えば、モザイクシェーダー、頂点シェーダー、幾何学的シェーダー、及び/又はピクセルシェーダープログラム)、等を含む種々様々なアプリケーションに関連した処理タスクを実行するようにプログラムすることができる。並列プロセッサ134は、システムメモリ104及び/又はローカルサブシステムメモリ138からローカル(オンチップ)メモリへデータを転送し、データを処理し、そして結果のデータをシステムメモリ104及び/又はサブシステムメモリ138へ書き込み、そこで、このデータは、CPU102又は別のマルチスレッド型処理サブシステム112を含む他のシステムコンポーネントによってアクセスすることができる。
[0022]並列プロセッサ134は、任意の量のサブシステムメモリ138が設けられてもよく、又、サブシステムメモリ138を含まなくてもよく、更に、サブシステムメモリ138及びシステムメモリ104を任意の組み合わせで使用してもよい。例えば、並列プロセッサ134は、一体化メモリアーキテクチャー(UMA)実施形態では、グラフィックプロセッサでよい。このような実施形態では、専用のサブシステムメモリ138は、ほとんど又は全く設けられず、そして並列プロセッサ134は、システムメモリ104を排他的に又はほぼ排他的に使用する。UMA実施形態では、並列プロセッサ134は、ブリッジチップ又はプロセッサチップに一体化されてもよいし、或いはブリッジチップ又は他の通信手段を経て並列プロセッサ134をシステムメモリ104に接続する高速リンク(例えば、PCI−E)と共に個別のチップとして設けられてもよい。
[0023]上述したように、マルチスレッド型処理サブシステム112には、多数の並列プロセッサ134を含ませることができる。例えば、複数の並列プロセッサ134を単一のアドインカードに設けることもできるし、複数のアドインカードを通信経路113に接続することもできるし、又は1つ以上の並列プロセッサ134をブリッジチップに一体化することもできる。複数の並列プロセッサ134が存在する場合には、それらの並列プロセッサ134は、単一の並列プロセッサ134で可能である以上に高いスループットでデータを処理するように並列に動作することができる。1つ以上の並列プロセッサ134を組み込んだシステムは、デスクトップ、ラップトップ、ハンドヘルドパーソナルコンピュータ、サーバー、ワークステーション、ゲームコンソール、埋め込み型システム、等を含む種々のコンフィギュレーション及びフォームファクタで実施することができる。
[0024]並列プロセッサ134の幾つかの実施形態では、単一インストラクション・複数データ(SIMD)インストラクション発行技術を使用して、複数の独立したインストラクションユニットを設けずに非常に多数のスレッドの並列実行をサポートする。他の実施形態では、単一インストラクション・複数スレッド(SIMT)技術を使用して、非常に多数の一般的に同期されたスレッドの並列実行をサポートする。全ての処理エンジンが典型的に同じインストラクションを実行するSIMD実行形態とは異なり、SIMTの実行は、異なるスレッドが、所与のスレッドプログラムを通して、発散する実行経路を容易にたどれるようにする。当業者であれば、SIMD処理形態は、SIMT処理形態の機能的サブセットを表すことが理解されよう。並列プロセッサ134内のファンクションユニットは、整数及び浮動小数点演算(例えば、加算及び乗算)、比較演算、ブール演算(AND、OR、XOR)、ビットシフト、及び種々の代数関数の計算(例えば、二次元補間、三角法、指数関数、対数関数、等)を含む種々のオペレーションをサポートする。
[0025]並列プロセッサ134の処理コア(図示せず)内の特定の処理ユニット(図示せず)へ送信される一連のインストラクションは、既に定義されたスレッドを構成し、そして1つの処理コア内で処理ユニットにわたって同時に実行されるある数のスレッドの集合を、ここでは、「スレッドグループ」と称する。ここで使用される「スレッドグループ」は、異なる入力データに対して同じプログラムを実行するスレッドのグループを指し、グループの各スレッドは、処理コア内の異なる処理ユニットに指定される。1つのスレッドグループは、処理ユニットの数より少ないスレッドを含んでもよく、この場合、ある処理ユニットは、そのスレッドグループが処理されているときのサイクル中にアイドル状態となる。又、1つのスレッドグループは、処理ユニットの数より多くのスレッドを含んでもよく、この場合、処理は、複数のクロックサイクルにわたって行われる。
[0026]各処理コアは、G個までのスレッドグループを同時にサポートできるので、並列プロセッサ134内の処理コアの数をMとすれば、所与の時間に処理コアにおいてGxM個までのスレッドグループを実行できることになる。更に、処理コア内で同時に複数の関連スレッドグループがアクティブになり得る(異なる実行段階において)。スレッドグループのこの集合を、ここでは、「協働スレッドアレイ」(CTA)と称する。CTAのサイズは、一般的に、プログラマーにより、CTAに利用できるメモリ又はレジスタのようなハードウェアリソースの量で決定される。CUDAプログラミングモデルは、GPUアクセラレータのシステムアーキテクチャーを表す。排他的ローカルアドレススペースが各スレッドに利用でき、そしてCTAごとの共有アドレススペースを使用して、CTA内のスレッド間にデータを通す。又、処理コアは、オフチップの「グローバル」メモリにアクセスすることもでき、これは、例えば、サブシステムメモリ138及び/又はシステムメモリ104を含むことができる。
[0027]CUDAアプリケーションプログラムのホスト部分は、カーネルファンクションがCTA処理を指定する間に、従来の方法及びツールを使用してコンパイルされる。最も高いレベルにおいて、CUDAメモリモデルは、ホスト及び装置のメモリスペースを分離し、ホストコード及びカーネルコードがそれらの各メモリスペースに直接アクセスすることしかできないようにする。API(アプリケーションプログラミングインターフェイス)ファンクションは、ホスト及び装置のメモリスペース間でデータをコピーするのを許す。CUDAプログラミングモデルの共有メモリCPU実行では、制御CPUスレッドが、潜在的なデータ競合を伴わずに、並列CTAと並列に実行することができる。ホストメモリスペースは、Cプログラミング言語によって定義され、そして装置メモリスペースは、グローバル、定数、ローカル、共有及びテクスチャとして指定される。全てのスレッドは、グローバル、定数及びテクスチャメモリスペースにアクセスすることができる。上述したように、ローカルスペースへのアクセスは、単一スレッドに制限され、そして共有スペースへのアクセスは、CTA内のスレッドに制限される。このメモリモデルは、待ち時間の短いアクセスに対して小さなメモリスペースの使用を奨励し、そして典型的に待ち時間の長い大きなメモリスペースの賢明な使用を奨励する。
[0028]コード101のようなCUDAプログラムは、典型的に、1つ、2つ又は3つの次元、例えば、x、y及びzにおいて、CTAの同期又は非同期実行のセットとして編成される。3タプルインデックスは、スレッドブロック内のスレッドを独特に識別する。スレッドブロックそれ自体は、暗示的に定義された2タプル変数により区別される。これらインデックスの範囲は、ランタイムに定義され、そしてランタイム環境は、インデックスが何らかのハードウェア制限に適合することをチェックする。各CTAは、並列プロセッサ134により他のCTAと並列に実行される。各並列プロセッサ134が1つ以上のCTAを実行するようにして、多数のCTAが並列に実行される。ランタイム環境は、CUDAコード101の実行を必要に応じて同期又は非同期で管理する役割を果たす。CTA内のスレッドは、共有メモリと、synchthreads()と称されるバリア同期プリミティブとの使用により、互いに通信し且つ同期する。CUDAは、スレッドブロック内のスレッドが同時に生きていることを保証すると共に、スレッドブロック内のスレッドが迅速なバリア同期及びローカルデータ共有を遂行するためのコンストラクトを与える。(1つ以上の次元によって定義される)CTA内の個別のスレッドブロックは、それらの生成、実行又は退出について何ら順序付けを課さない。更に、並列なCTAは、I/Oを含むシステムコールへのアクセスが許されない。CUDAプログラミングモデルは、並列なCTA間にグローバルな同期を強要するだけであり、CTA内のブロック間での限定された通信に対して固有のアトミックなオペレーションを与える。
[0029]カーネルと称される各スレッドの本体は、メモリモデルアノテーション及びバリア同期プリミティブを用いて標準Cで表わされるCUDAを使用して指定される。CUDAプログラムのセマンティックは、バリア同期プリミティブによって暗示されるメモリの順序付けを尊重する順序でCTA内の全てのスレッドにより各カーネルが実行されるというものである。特に、バリア同期プリミティブの前に生じるCTA内の全ての共有メモリ参照は、バリア同期プリミティブの後に生じる共有メモリ参照の前に完了しなければならない。
[0030]カーネルコードにおけるバリア同期プリミティブの各インスタンスは、概念的に個別の論理的バリアを表わし、スタティックとして取り扱われねばならない。CUDAスレッドが“if-else”コンストラクトの異なる分岐を取り得るときには、そのコンストラクトの両経路においてバリア同期プリミティブを呼び出すのは不法である。スレッドブロック内の全てのスレッドは、同期プリミティブの1つに到達するが、スレッドが全部到達するか全く到達しないかのいずれかを各々要求する別々のバリアを表わす。それ故、このようなカーネルは、正しく実行されない。より一般的には、CUDAコードは、スレッドブロック内の異なるスレッドに対して異なる振舞いをする制御フローコンストラクト内に同期プリミティブが収容される場合には、正しく実行されると保証されない。
[0031]図2は、本発明の一実施形態によるコンピュータシステム200を示すブロック図である。コンピュータシステム100は、CPU202と、メモリブリッジ205を含むバス経路を経て通信するシステムメモリ204とを備えている。例えば、ノースブリッジ(Northbridge)チップでよいメモリブリッジ205は、バス又は他の通信経路106(例えば、ハイパートランスポートリンク)を経てI/O(入力/出力)ブリッジ107に接続される。CPU202は、ディスプレイ装置210(例えば、従来のCRT又はLCDベースのモニタ)に表示するための出力を発生する。
[0032]マルチスレッド型処理サブシステム112は、コンピュータシステム200には含まれず、CUDAコード101は、CPU202のような汎用プロセッサによって実行するように適応されない。CUDAコード101は、マルチスレッド型処理サブシステム112によって実行するように適応され、トランスレータ220を使用して変換されて、バリア同期プリミティブを含まない変換されたコード201を発生する。CPU202がコード101により表わされたプログラムを実行するために、コード101を先ずコード201に変換しなければならない。変換されたコードは、次いで、CPU202によって実行するために、コンパイラー225によりコンパイルされる。コンパイラー225は、CPU202に対して特有の最適化を遂行することができる。コードを変換することは、第1のコンピュータ言語で書かれたコードを、第2のコンピュータ言語に変換することを指す。コードをコンパイルすることは、コンピュータ言語(例えば、ソースコード)で書かれたコードを、別のコンピュータ言語(例えば、オブジェクトコード)に変換することを指す。トランスレータ220は、図3Aを参照して説明し、コンパイラー225は、図4を参照して説明する。コンパイラー225は、コード101と、コード201と、CPU202との間をインターフェイスするように構成された装置ドライバ203内に含まれる。ランタイム環境227は、コンパイルされたコードに対するファンクション、例えば、入力及び出力、メモリ管理、等を実施するように構成される。又、ランタイム環境227は、CPU202により実行するためのコンパイルされたコードを起動する。トランスレータ220は、CUDAスレッドグループの微粒度スレッドにわたるオペレーションを単一のCPUスレッドへと直列化するための最適化変換を遂行し、一方、ランタイム環境227は、スレッドグループを、CPU202により並列処理するためのワークユニットとしてスケジュールする。
[0033]汎用CPUにより実行するためにGPUで実行されるように設計されたCUDAアプリケーションの一次障害防止移行性は、並列性の粒度である。従来のCPUは、単一のCUDA CTAに要求される数百のハードウェアスレッドコンテクストをサポートしない。それ故、汎用CPUにおいてCUDAプログラミングモデルを実施するシステムの一次目標は、タスクレベルの並列性を、利用可能なCPUコアに分配することである。それと同時に、システムは、過剰なスケジューリングオーバーヘッド及び頻繁なコア間同期を防止するためにタスク内のマイクロスレッドを単一のCPUスレッドへと合併しなければならない。
[0034]図3Aは、本発明の一実施形態に基づき、例えば、マルチスレッド型処理サブシステム112のようなマルチコアグラフィック処理システムにより実行するために書かれたコード101を、例えば、CPU202のような汎用プロセッサによって実行するためのコード201へ変換する方法ステップのフローチャートである。トランスレータ220は、図3Aに示されたステップの1つ以上を遂行して、コード101に使用されるバリア同期プリミティブのセマンティックを保存する。トランスレータ220は、バリア同期プリミティブの周りでコード101を区画化することによって並列スレッドを「アンロール(unroll)」し、共有状態の使用を減少し、メモリアクセスに対する参照の位置関係を改善し、そして汎用プロセッサにより実行するためのCUDA特有のコードを変換するためのスレッドループを挿入する。マルチスレッド型処理サブシステム112により実行するためにターゲットとされるCUDAコード101を変更せずにCPU202を使用してコード201を実行する良好な実行性能を得ることができる。コンパイラー225は、CPU202により与えられるベクトルインストラクション能力を利用し、そして実行のためにコード201をコンパイルするときに最適化を遂行することができる。
[0035]ステップ300において、トランスレータ220は、マルチスレッド型処理サブシステム112、又は1つ以上の並列プロセッサ134を含むプロセッサのようなマルチコアGPUにより実行するために書かれたコード101、例えば、CUDAコード101を受け取る。ステップ300で受け取られたコードは、エッジによって接続された基本的ブロックノードより成る制御フローグラフとして表わすことができる。各々の基本的ブロックは、例えば、CPU202のようなターゲット環境により遂行されるオペレーションを指定する。ステップ305において、トランスレータ220は、バリア同期プリミティブの周りでCUDAコード101を区画化して、区画化されたコードを発生する。区画化されたコードが図3B及び3Cに示されており、これらの図を参照して区画化プロセスを説明する。同期区画は、区画内の基本的ブロックの制御フロー及びデータフロー特性によりオペレーションの順序付けが完全に決定されるところのコードの領域である。区画は、並列スレッドを実行するために区画の周りにスレッドループを挿入できるという特性を有する。制御フローグラフを使用して、各同期スレッド(synchthread)プリミティブをエッジに置き換え、基本的ブロックノードを異なる区画に分離することにより、同期区画制御フローグラフを発生することができる。
[0036]ステップ310において、区画化されたコードを分類し、各ステートメントが収斂又は発散のいずれかとして識別されるようにする。区画化されたコードは、式及びステートメントを含むことができる。式は、定数、暗示的スレッドID、及びプログラマーにより形成される名前付き変数を伴うが、副作用や指定をもたない計算である。簡単なステートメントは、単一の指定を生じる計算式として定義される。又、一般的ステートメントは、バリア、制御フロー条件又はループコンストラクト、或いはステートメントの逐次ブロックを表すこともできる。CTA次元x、y及びzは、コードを通して伝播され、各オペレーションがCTA次元の1つ以上に依存するかどうか決定する。次元x、y及び/又はzにおいてスレッドID(threadID)(スレッド識別子)を参照するオペレーションは、発散と考えられる。というのは、CTA次元を参照するスレッドは、実行中に同じCTAの他のスレッドから発散し得るからである。例えば、スレッドID.x(threadID.x)に依存するオペレーションは、x次元に対して発散である。スレッドID.xに依存しない別のオペレーションは、x次元において収斂である。発散ステートメントは、それらが参照する各CTA次元に対してスレッドループを要求する。
[0037]ステップ315において、区画化されたコードは、分類情報を使用して性能に対して最適化され、最適化されたコードを発生する。例えば、区画内のインストラクションは、オペレーションを融合させるように再順序付けされ、同じ分類をもつオペレーションが一緒にグループ編成されて、ステップ325で挿入される同じスレッドループ内に入ることができるようにする。分散ベクトルにおいてスレッドID次元がより少ないオペレーションが、より多くのスレッドID次元に依存するオペレーションに先行するように、オペレーションが順序付けされる。この再順序付けは、有効である。というのは、ステートメントは、それが依存するステートメントの分散ベクトルのスーパーセットである分散ベクトルを有していなければならないからである。従って、分散ベクトルに1つの次元しかもたないステートメントは、分散ベクトルに異なる次元又は2つ以上の次元をもつステートメントに依存することができない。
[0038]ステップ320において、最適化されたコードにおけるスレッド−ローカルメモリ参照は、オブジェクトの各インスタンスが、値を記憶すべき独特の位置をもつよう保証するために、必要に応じてアレイ参照へ昇格される。特に、ある区画から別の区画へ搬送されるデータは、各区画においてそれが得られるように複写される必要がある。次の条件の1つを満足する変数は、アレイ参照へ昇格される。即ち、クロス区画依存性(ある区画において指定され、そして別の区画において参照される)を有するローカル変数。
[0039]ステップ320において、トランスレータ220は、スレッド−ローカルメモリ参照をアレイ参照へ昇格させる。テーブル1に示すプログラムは、同期バリアプリミティブ及び発散参照を含む。
Figure 2009259241
[0040]テーブル1に示すプログラムは、同期スレッドプリミティブの前に第1区画へそして同期スレッドプリミティブの後に第2区画へと区画化される。第2区画は、第1区画で計算された参照(左インデックス(leftIndex)及び右インデックス(rightIndex))を含み、CTA次元から従属する。発散参照が昇格されない場合には、第2区画は、第1区画の最後の繰り返しにより計算された値を誤って使用する。第2区画は、第1区画のthreadId.xの各対応する繰り返しに対して計算された値を使用しなければならない。計算が正しいことを保証するために、発散参照は、テーブル2に示すように昇格される。
Figure 2009259241
[0041]ステップ325において、スレッドID次元を分散ベクトルに含むステートメントに対してスレッドループが発生される。ループ交換、ループ分裂及びループ不変量除去と同等の変換を同時に評価して、最良の冗長性除去を達成するために、適応ループネストが使用される。ネスト状のループは、アプリケーションに最も適するようにスレッドIDタプルの各次元の値に対して動的に発生されるのであって、特定のループネストを仮定して、そのネストに基づいてアプリケーションを評価するのではない。ステップ315においてステートメントが順序付けされた後に、分散ベクトルに次元を含むステートメントの周りのみでスレッドID次元に対してループを発生することができる。ループのオーバーヘッドを除去するために、トランスレータ220は、あるものが他のもののサブセットである分散ベクトルを有するような隣接ステートメントグループを融合することができる。
[0042]図3Bは、本発明の一実施形態により、入力コード101を区画されたコード350へ変換するところを示す概念図である。入力コード330は、マルチスレッド型処理サブシステム112により実行するように構成され、同期バリアインストラクション336で分離されたコードシーケンス331及び332を含む。CTAにおける全てのスレッドは、いずれか1つのスレッドがコードシーケンス332の実行を開始する前にコードシーケンス331の実行を完了する。トランスレータ220は、入力コード330を区画化して、区画化されたコード350を発生し、区画351は、コードシーケンス331により表わされたインストラクションを含み、そして区画352は、コードシーケンス332により表わされたインストラクションを含む。区画化されたコード350が、同期バリアインストラクションを本来サポートしない汎用プロセッサにより実行されるときに、同期セマンティックが維持されるように保証するために、スレッドループ353が区画352の周りに挿入される。この実施例では、コード区画351が収斂参照を含み、区画352が発散参照を含む。それ故、スレッドループ353が区画352の周りに挿入される。
[0043]図3Aのステップ325において、トランスレータ220は、(スレッドループ353のような)スレッドループを、最適化されたコードに挿入し、CPU202により実行するために変換されたコード201を発生する。各区画は、各CTA次元に対して挿入されたスレッドループを有することができる。同期区画化及びスレッドループ挿入の一実施例がテーブル3及び4に示されている。テーブル3に示されたプログラムは、テーブル4に示されたプログラムへと変換される。
Figure 2009259241
[0044]テーブル3のプログラムは、CTAにおける種々のスレッド間でのメモリの正しい共有を保証するために明確な同期を使用する。トランスレータ220は、プログラムを、xCTA次元に各々依存する2つの区画に区画化する。それ故、スレッドループは、変換されたプログラムがオペレーションを正しい順序で遂行するよう保証するために2つの区画の各々の周りに挿入される。
Figure 2009259241
[0045]汎用プロセッサにより実行するためのプログラムを挿入するより簡単な技術は、各CTA次元に対して明確なスレッドループを挿入し、同じ区画内の参照に対する次元依存性を決定する必要がないようにすることである。例えば、テーブル5に示すプログラムは、テーブル6に示すプログラムへ変換される。次元の依存性を決定することなくプログラムが形成されるので、テーブル5において挿入されるスレッドループの1つ以上が不必要であることに注意されたい。
Figure 2009259241

Figure 2009259241
[0046]図3Cは、本発明の一実施形態により、入力コード333を、最適化されたコード360へ変換するところを示す概念図である。入力コード333は、マルチスレッド型処理サブシステム112により実行するように構成され、同期バリアインストラクション335で分離されたコードシーケンス334及び338を含む。CTAにおける全てのスレッドは、いずれか1つのスレッドがコードシーケンス338の実行を開始する前にコードシーケンス334の実行を完了する。トランスレータ220は、入力コード333を区画化して、区画化されたコード360を発生し、区画361は、コードシーケンス334により表わされたインストラクションを含み、そして区画362、364及び365は、コードシーケンス338により表わされたインストラクションを含む。
[0047]区画362は、第1のCTA次元において発散であるインストラクションの第1部分を含む。区画364は、収斂であるインストラクションの第2部分を含む。区画365は、第2のCTA次元において発散であるインストラクションの第3部分を含む。同期バリアインストラクションを本来サポートしない汎用プロセッサによって区画化されたコード360が実行されるときに同期セマンティックが維持されるように保証するために、区画362の周りにスレッドループ363が挿入される。第1のCTA次元に対してスレッドループ363が繰り返される。スレッドループ366が、第2のCTA次元に対して繰り返されるように区画365の周りに挿入される。
[0048]テーブル7は、例示的CUDAカーネルを示し、テーブル8は、汎用プロセッサにより実行するためのCUDAカーネルの変換を示す。例示的カーネルは、小さなマトリクスのリストを乗算する。各スレッドブロックは、リストから1つの小さなマトリクス乗算を計算し、一方、各スレッドは、そのブロックに対して結果のマトリクスの1つのエレメントを計算する。
Figure 2009259241
[0049]テーブル7の行(9)のステートメントは、列がx次元に依存し、行がy次元に依存するので、(x、y)の分散ベクトルを有することに注意されたい。z次元は決して使用されず、従って、zに対して繰り返されるループが挿入されることはない。テーブル7に示す例示的カーネルにおいてステートメント5及び6のようなケースを決定するために、典型的なコスト分析技術を使用することができる。各々が1つのスレッドID次元にしか依存しないので、x及びyインデックスループのいずれかのネスト順序を選択することで、ステートメントの冗長な実行、又は区画のメインループネストの外部の冗長なループのいずれかが強制される。
Figure 2009259241
[0050]図4は、本発明の一実施形態に基づき、CPU202のような汎用プロセッサにより、変換されたコード201を実行するための方法ステップのフローチャートである。ステップ400において、コンパイラー225は、CPU特有の最適化を任意に遂行する変換されたコード201をコンパイルして、コンパイルされたコードを発生する。ステップ405において、CPU202に得られる実行コア400の数は、装置ドライバ203により決定される。変換されたコード201は、性能改善のために利用可能な実行コアにおいて実行するように自動的にスケーリングされる。ステップ410において、ランタイム環境227又は装置ドライバ203は、変換されたコード201を実行する実行コアの数をイネーブルするようにCPU202を構成する。
[0051]ランタイム環境227は、環境変数により制御できる多数のオペレーティングシステム(OS)ランタイムスレッドを生成することができる。デフォールトとして、システム内のコアの数を、OSランタイムスレッドの数として使用してもよい。ステップ410において、起動されるべきCUDAスレッドの数を評価して、ランタイムスレッドの数に統計学的に区画化することができる。各ランタイムスレッドは、コンパイルされたコードの一部分を逐次に実行し、バリアにおいて待機する。全てのランタイムスレッドがバリアに到達したときに、CTAが完了となる。ステップ415では、ランタイム環境227又は装置ドライバ203が、CPU202により実行するためにコンパイルされたコードを起動する。
[0052]トランスレータ220、コンパイラー225及びランタイム環境227は、CUDAアプリケーションプログラムを、汎用CPUにより実行するためのコードへ変換するのに使用される。CUDAプログラミングモデルは、バルク同期タスクの並列性をサポートし、各タスクは、微粒度のSPMDスレッドより成る。CUDAプログラミングモデルの使用は、GPUにより実行するための特殊なコードを書き込もうとするプログラマーに制限される。この特殊なコードは、プログラマーがCUDAアプリケーションプログラムをリライトすることを要求せずに、汎用CPUにより実行するように変換することができる。CUDAによりサポートされる3つの重要なアブストラクションは、SPMDスレッドブロック、バリア同期、及び共有メモリである。トランスレータ220は、CUDAスレッドブロックの微粒度スレッドにわたるオペレーションを、単一のCPUスレッドへと直列化し、そしてCUDAアプリケーションプログラムを変換するための最適化変換を遂行する。
[0053]以上、本発明の実施形態を説明したが、本発明の基本的な範囲から逸脱せずに、本発明の他の実施形態及び更に別の実施形態を案出することもできる。例えば、本発明の態様は、ハードウェア、又はソフトウェア、或いはハードウェアとソフトウェアの組合せで実施することもできる。本発明の一実施形態は、コンピュータシステムに使用するためのプログラム製品として実施することができる。プログラム製品のプログラム(1つ又は複数)は、(ここに述べる方法を含む)実施形態の機能を定義し、そして種々のコンピュータ読み取り可能な記憶媒体に含ませることができる。ここに例示するコンピュータ読み取り可能な記憶媒体は、(i)情報が永久的に記憶される書き込み不能の記憶媒体(例えば、コンピュータ内のリードオンリメモリ装置、例えば、CD−ROMドライブにより読み取り可能なCD−ROMディスク、フラッシュメモリ、ROMチップ、又は任意の形式のソリッドステート不揮発性半導体メモリ)、及び(ii)変更可能な情報が記憶される書き込み可能な記憶媒体(例えば、ディスケットドライブ又はハードディスクドライブ内のフロッピーディスク、又は任意の形式のソリッドステートランダムアクセス半導体メモリ)を含むが、これらに限定されない。このようなコンピュータ読み取り可能な記憶媒体は、本発明のファンクションを指令するコンピュータ読み取り可能なインストラクションを搬送するとき、本発明の実施形態となる。それ故、本発明の範囲は、特許請求の範囲によって決定される。
100・・・コンピュータシステム、101・・・コード、102・・・CPU、103・・・装置ドライバ、104・・・システムメモリ、105・・・メモリブリッジ、106・・・通信経路、107・・・I/Oブリッジ、108・・・入力装置、110・・・ディスプレイ装置、112・・・マルチスレッド型処理サブシステム、113・・・通信経路、114・・・システムディスク、116・・・スイッチ、118・・・ネットワークアダプタ、120・・・アドインカード、121・・・アドインカード、134・・・並列プロセッサ、138・・・サブシステムメモリ、200・・・コンピュータシステム、201・・・コード、202・・・CPU、203・・・装置ドライバ、204・・・システムメモリ、205・・・メモリブリッジ、210・・・ディスプレイ装置、220・・・トランスレータ、225・・・コンパイラー、227・・・ランタイム環境

Claims (10)

  1. 変換されたアプリケーションプログラムを実行するように構成されたコンピューティングシステムであって、
    コンパイラーを実行するように構成された汎用プロセッサと、
    前記プロセッサに結合され、前記変換されたアプリケーションプログラム及びコンパイルされたコードを記憶するように構成されたシステムメモリと、
    を備え、前記コンパイラーは、
    マルチコアグラフィック処理ユニットで実行するために並列プログラミングモデルを使用して書かれたアプリケーションプログラムから変換されたものである前記変換されたアプリケーションプログラムを受け取り、
    前記変換されたアプリケーションプログラムをコンパイルして、前記汎用プロセッサにより実行するためのコンパイルされたコードを発生する、
    というように構成され、更に、
    装置ドライバであって、
    前記変換されたアプリケーションプログラムを実行するのに利用できる前記汎用プロセッサ内の実行コアの数を決定し、
    前記数の実行コアをイネーブルするように前記汎用プロセッサを構成する、
    というように構成された装置ドライバと、
    前記数の実行コアを含む前記汎用プロセッサにより実行するために前記コンパイルされたコードを起動するように構成されたランタイム環境と、
    を備えるコンピューティングシステム。
  2. 前記変換されたアプリケーションプログラムは、協働スレッドアレイにおけるスレッドのいずれか1つが前記変換されたアプリケーションプログラムの第2領域の実行を開始する前にその協働スレッドアレイにおける全てのスレッドが区画化されたアプリケーションプログラムの第1領域の実行を完了するよう保証するために、前記区画化されたアプリケーションプログラムの第1領域の周りに第1ループネストを含む、請求項1に記載のコンピューティングシステム。
  3. 前記第1ループは、前記協働スレッドアレイの1つ以上の次元に対して繰り返される、請求項2に記載のコンピュータシステム。
  4. 前記変換されたアプリケーションプログラムは、前記アプリケーションプログラムを、同期独立インストラクションの領域へと区画化して、区画化されたアプリケーションプログラムを発生し、そしてその区画化されたアプリケーションプログラムの少なくとも1つの領域の周りにループを挿入することにより発生され、前記ループは、前記マルチコアグラフィック処理ユニット内の並列プロセッサにより同時に実行される多数のスレッドに対応する協働スレッドアレイ次元に対して繰り返される、請求項1に記載のコンピューティングシステム。
  5. 前記区画化されたアプリケーションプログラムの第1領域は、同期バリアインストラクションの前にあるインストラクションを含み、前記区画化されたアプリケーションプログラムの第2領域は、前記同期バリアインストラクションの後にあるインストラクションを含む、請求項4に記載のコンピューティングシステム。
  6. 前記区画化されたアプリケーションプログラムの少なくとも1つの領域の周りに付加的なループを挿入して、前記変換されたアプリケーションプログラムを発生し、前記付加的なループは、異なる協働スレッドアレイ次元に対して繰り返される、請求項5に記載のコンピューティングシステム。
  7. 前記区画化されたアプリケーションプログラムは、各ステートメントを、前記協働スレッドアレイ次元に対して収斂又は発散のいずれかとして識別するように分類される、請求項4に記載のコンピューティングシステム。
  8. 前記汎用プロセッサは、更に、前記コンパイルされたコードを実行するように構成される、請求項1に記載のコンピュータシステム。
  9. 前記汎用プロセッサは、更に、前記汎用プロセッサに特有の最適化を遂行するように構成される、請求項1に記載のコンピュータシステム。
  10. マルチコアグラフィック処理ユニットで実行するために並列プログラミングモデルを使用して書かれた前記アプリケーションプログラムは、CUDA(コンピュート・ユニファイド・デバイス・アーキテクチャー)アプリケーションプログラムである、請求項1に記載のコンピューティングシステム。
JP2009088972A 2008-04-09 2009-04-01 汎用プロセッサによるリターゲティングされたグラフィックプロセッサ加速コードの実行 Active JP5152594B2 (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US4370808P 2008-04-09 2008-04-09
US61/043,708 2008-04-09
US12/408,559 US9448779B2 (en) 2008-04-09 2009-03-20 Execution of retargetted graphics processor accelerated code by a general purpose processor
US12/408,559 2009-03-20

Publications (2)

Publication Number Publication Date
JP2009259241A true JP2009259241A (ja) 2009-11-05
JP5152594B2 JP5152594B2 (ja) 2013-02-27

Family

ID=41164945

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2009088972A Active JP5152594B2 (ja) 2008-04-09 2009-04-01 汎用プロセッサによるリターゲティングされたグラフィックプロセッサ加速コードの実行
JP2009088971A Active JP4984306B2 (ja) 2008-04-09 2009-04-01 汎用プロセッサによって実行するためのアプリケーションプログラムのリターゲティング

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2009088971A Active JP4984306B2 (ja) 2008-04-09 2009-04-01 汎用プロセッサによって実行するためのアプリケーションプログラムのリターゲティング

Country Status (4)

Country Link
US (5) US9678775B1 (ja)
JP (2) JP5152594B2 (ja)
CN (2) CN101556544B (ja)
TW (2) TWI423133B (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101382945B1 (ko) 2012-10-17 2014-04-09 인하대학교 산학협력단 Gpu 병렬 검색을 통한 r-트리 계열의 계층형 색인 구조의 범위 질의 가속화 방법
JP6040937B2 (ja) * 2011-05-19 2016-12-07 日本電気株式会社 並列処理装置、並列処理方法、最適化装置、最適化方法、および、コンピュータ・プログラム

Families Citing this family (74)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8515052B2 (en) 2007-12-17 2013-08-20 Wai Wu Parallel signal processing system and method
US8661422B2 (en) * 2008-02-08 2014-02-25 Reservoir Labs, Inc. Methods and apparatus for local memory compaction
US8930926B2 (en) * 2008-02-08 2015-01-06 Reservoir Labs, Inc. System, methods and apparatus for program optimization for multi-threaded processor architectures
US9858053B2 (en) 2008-02-08 2018-01-02 Reservoir Labs, Inc. Methods and apparatus for data transfer optimization
US8572595B1 (en) 2008-02-08 2013-10-29 Reservoir Labs, Inc. Methods and apparatus for aggressive scheduling in source code compilation
US9678775B1 (en) * 2008-04-09 2017-06-13 Nvidia Corporation Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment
US8866827B2 (en) * 2008-06-26 2014-10-21 Microsoft Corporation Bulk-synchronous graphics processing unit programming
WO2010033622A2 (en) * 2008-09-17 2010-03-25 Reservoir Labs, Inc. Methods and apparatus for joint parallelism and locality optimization in source code compilation
US8755515B1 (en) 2008-09-29 2014-06-17 Wai Wu Parallel signal processing system and method
US8688619B1 (en) 2009-03-09 2014-04-01 Reservoir Labs Systems, methods and apparatus for distributed decision processing
WO2010127173A2 (en) * 2009-04-30 2010-11-04 Reservoir Labs, Inc. System, apparatus and methods to implement high-speed network analyzers
US8667474B2 (en) * 2009-06-19 2014-03-04 Microsoft Corporation Generation of parallel code representations
US8892483B1 (en) 2010-06-01 2014-11-18 Reservoir Labs, Inc. Systems and methods for planning a solution to a dynamically changing problem
US8584103B2 (en) 2010-06-17 2013-11-12 International Business Machines Corporation Reducing parallelism of computer source code
US8756590B2 (en) * 2010-06-22 2014-06-17 Microsoft Corporation Binding data parallel device source code
JP5059174B2 (ja) * 2010-08-10 2012-10-24 株式会社東芝 プログラム変換装置、およびそのプログラム
US20120075315A1 (en) * 2010-09-26 2012-03-29 Guoping Li Method for performing video processing based upon a plurality of commands, and associated video processing circuit
CN101963916A (zh) * 2010-09-28 2011-02-02 中国科学院地质与地球物理研究所 编译处理方法及装置
US8914601B1 (en) 2010-10-18 2014-12-16 Reservoir Labs, Inc. Systems and methods for a fast interconnect table
US9134976B1 (en) 2010-12-13 2015-09-15 Reservoir Labs, Inc. Cross-format analysis of software systems
US20120159090A1 (en) * 2010-12-16 2012-06-21 Microsoft Corporation Scalable multimedia computer system architecture with qos guarantees
KR101738641B1 (ko) 2010-12-17 2017-05-23 삼성전자주식회사 멀티 코어 시스템의 프로그램 컴파일 장치 및 방법
US20120177119A1 (en) * 2011-01-07 2012-07-12 Sony Corporation Faster motion estimation in an avc software encoder using general purpose graphic process units (gpgpu)
US8966461B2 (en) * 2011-09-29 2015-02-24 Advanced Micro Devices, Inc. Vector width-aware synchronization-elision for vector processors
US9489180B1 (en) 2011-11-18 2016-11-08 Reservoir Labs, Inc. Methods and apparatus for joint scheduling and layout optimization to enable multi-level vectorization
US9262166B2 (en) * 2011-11-30 2016-02-16 Intel Corporation Efficient implementation of RSA using GPU/CPU architecture
US9830133B1 (en) 2011-12-12 2017-11-28 Significs And Elements, Llc Methods and apparatus for automatic communication optimizations in a compiler based on a polyhedral representation
US9817668B2 (en) 2011-12-16 2017-11-14 Nvidia Corporation Batched replays of divergent operations
JP5864776B2 (ja) 2011-12-21 2016-02-17 ドルビー・インターナショナル・アーベー 並列アーキテクチャをもつオーディオ・エンコーダ
US9715413B2 (en) 2012-01-18 2017-07-25 Nvidia Corporation Execution state analysis for assigning tasks to streaming multiprocessors
US9069609B2 (en) 2012-01-18 2015-06-30 Nvidia Corporation Scheduling and execution of compute tasks
US9361079B2 (en) * 2012-01-30 2016-06-07 Nvidia Corporation Method for compiling a parallel thread execution program for general execution
US10152329B2 (en) * 2012-02-09 2018-12-11 Nvidia Corporation Pre-scheduled replays of divergent operations
US9529575B2 (en) * 2012-02-16 2016-12-27 Microsoft Technology Licensing, Llc Rasterization of compute shaders
US9329877B2 (en) 2012-03-18 2016-05-03 Microsoft Technology Licensing, Llc Static verification of parallel program code
US9798588B1 (en) 2012-04-25 2017-10-24 Significs And Elements, Llc Efficient packet forwarding using cyber-security aware policies
US9292265B2 (en) * 2012-05-09 2016-03-22 Nvidia Corporation Method for convergence analysis based on thread variance analysis
US10936569B1 (en) 2012-05-18 2021-03-02 Reservoir Labs, Inc. Efficient and scalable computations with sparse tensors
US9684865B1 (en) 2012-06-05 2017-06-20 Significs And Elements, Llc System and method for configuration of an ensemble solver
EP2880531B1 (en) 2012-08-02 2017-11-08 Siemens Corporation Pipelining for cyclic control systems
US9142005B2 (en) * 2012-08-20 2015-09-22 Nvidia Corporation Efficient placement of texture barrier instructions
US20140143755A1 (en) * 2012-11-20 2014-05-22 Nvidia Corporation System and method for inserting synchronization statements into a program file to mitigate race conditions
US9134979B2 (en) * 2013-02-06 2015-09-15 Nvidia Corporation Convergence analysis in multithreaded programs
US9015656B2 (en) * 2013-02-28 2015-04-21 Cray Inc. Mapping vector representations onto a predicated scalar multi-threaded system
US9442755B2 (en) * 2013-03-15 2016-09-13 Nvidia Corporation System and method for hardware scheduling of indexed barriers
KR102062208B1 (ko) 2013-05-03 2020-02-11 삼성전자주식회사 멀티스레드 프로그램 코드의 변환 장치 및 방법
US9223550B1 (en) * 2013-10-17 2015-12-29 Google Inc. Portable handling of primitives for concurrent execution
US10326448B2 (en) 2013-11-15 2019-06-18 Scientific Concepts International Corporation Code partitioning for the array of devices
US9698791B2 (en) 2013-11-15 2017-07-04 Scientific Concepts International Corporation Programmable forwarding plane
US9294097B1 (en) 2013-11-15 2016-03-22 Scientific Concepts International Corporation Device array topology configuration and source code partitioning for device arrays
CN103716574A (zh) * 2013-12-13 2014-04-09 乐视致新电子科技(天津)有限公司 一种信号处理方法及数字电视
US9612811B2 (en) * 2014-01-21 2017-04-04 Nvidia Corporation Confluence analysis and loop fast-forwarding for improving SIMD execution efficiency
US9658823B2 (en) * 2014-02-25 2017-05-23 Nec Corporation Source-to-source compiler and run-time library to transparently accelerate stack or queue-based irregular applications on many-core architectures
US9400685B1 (en) * 2015-01-30 2016-07-26 Huawei Technologies Co., Ltd. Dividing, scheduling, and parallel processing compiled sub-tasks on an asynchronous multi-core processor
WO2017107118A1 (en) * 2015-12-24 2017-06-29 Intel Corporation Facilitating efficient communication and data processing across clusters of computing machines in heterogeneous computing environment
US10387988B2 (en) * 2016-02-26 2019-08-20 Google Llc Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform
US10552211B2 (en) * 2016-09-02 2020-02-04 Intel Corporation Mechanism to increase thread parallelism in a graphics processor
EP3336692B1 (en) * 2016-12-13 2020-04-29 Arm Ltd Replicate partition instruction
US10489204B2 (en) 2017-01-31 2019-11-26 Samsung Electronics Co., Ltd. Flexible in-order and out-of-order resource allocation
US10191745B2 (en) * 2017-03-31 2019-01-29 Intel Corporation Optimized call-return and binary translation
US11353868B2 (en) * 2017-04-24 2022-06-07 Intel Corporation Barriers and synchronization for machine learning at autonomous machines
US10489877B2 (en) * 2017-04-24 2019-11-26 Intel Corporation Compute optimization mechanism
US10474458B2 (en) * 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
US10528479B2 (en) * 2017-06-02 2020-01-07 Huawei Technologies Co., Ltd. Global variable migration via virtual memory overlay technique for multi-version asynchronous dynamic software update
KR101948135B1 (ko) 2017-07-31 2019-02-14 서울대학교산학협력단 이종 시스템의 애플리케이션 실행 방법 및 이를 수행하기 위한 이종 시스템
US10599482B2 (en) * 2017-08-24 2020-03-24 Google Llc Method for intra-subgraph optimization in tuple graph programs
US11093250B2 (en) * 2018-09-29 2021-08-17 Intel Corporation Apparatus and method for gang invariant operation optimizations using dynamic evaluation
US10776110B2 (en) 2018-09-29 2020-09-15 Intel Corporation Apparatus and method for adaptable and efficient lane-wise tensor processing
US10831505B2 (en) 2018-09-29 2020-11-10 Intel Corporation Architecture and method for data parallel single program multiple data (SPMD) execution
US10915328B2 (en) 2018-12-14 2021-02-09 Intel Corporation Apparatus and method for a high throughput parallel co-processor and interconnect with low offload latency
CN110209509B (zh) * 2019-05-28 2021-08-17 北京星网锐捷网络技术有限公司 多核处理器间的数据同步方法及装置
EP3812885A1 (de) * 2019-10-24 2021-04-28 dspace digital signal processing and control engineering GmbH Integrierte simulationscode- und produktionscodegenerierung
CN111078412B (zh) * 2019-12-12 2023-03-14 中山大学 一种通过api截获对gpu进行资源管理的方法
US11593157B2 (en) 2020-02-05 2023-02-28 Nec Corporation Full asynchronous execution queue for accelerator hardware

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001222516A (ja) * 2000-01-10 2001-08-17 Internatl Business Mach Corp <Ibm> 処理コアの使用を動的に更新する方法および装置
JP2007048052A (ja) * 2005-08-10 2007-02-22 Internatl Business Mach Corp <Ibm> コンパイラ、制御方法、およびコンパイラ・プログラム

Family Cites Families (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5161216A (en) 1989-03-08 1992-11-03 Wisconsin Alumni Research Foundation Interprocedural slicing of computer programs using dependence graphs
US5048018A (en) 1989-06-29 1991-09-10 International Business Machines Corporation Debugging parallel programs by serialization
US5488713A (en) 1989-12-27 1996-01-30 Digital Equipment Corporation Computer simulation technique for predicting program performance
US5660176A (en) 1993-12-29 1997-08-26 First Opinion Corporation Computerized medical diagnostic and treatment advice system
US5860009A (en) 1994-04-28 1999-01-12 Kabushiki Kaisha Toshiba Programming method for concurrent programs and program supporting apparatus thereof
EP0729097A1 (en) * 1995-02-07 1996-08-28 Sun Microsystems, Inc. Method and apparatus for run-time memory access checking and memory leak detection of a multi-threaded program
US6029002A (en) * 1995-10-31 2000-02-22 Peritus Software Services, Inc. Method and apparatus for analyzing computer code using weakest precondition
US5867649A (en) * 1996-01-23 1999-02-02 Multitude Corporation Dance/multitude concurrent computation
US5903889A (en) * 1997-06-09 1999-05-11 Telaric, Inc. System and method for translating, collecting and archiving patient records
US5903899A (en) * 1997-04-23 1999-05-11 Sun Microsystems, Inc. System and method for assisting exact Garbage collection by segregating the contents of a stack into sub stacks
US6292822B1 (en) 1998-05-13 2001-09-18 Microsoft Corporation Dynamic load balancing among processors in a parallel computer
US6205414B1 (en) * 1998-10-02 2001-03-20 International Business Machines Corporation Methodology for emulation of multi-threaded processes in a single-threaded operating system
US6230313B1 (en) 1998-12-23 2001-05-08 Cray Inc. Parallelism performance analysis based on execution trace information
US7865883B1 (en) 1999-11-12 2011-01-04 Oracle America, Inc. Parallel and asynchronous debugger and debugging method for multi-threaded programs
US7590644B2 (en) 1999-12-21 2009-09-15 International Business Machine Corporation Method and apparatus of streaming data transformation using code generator and translator
WO2002029617A1 (en) 2000-09-30 2002-04-11 Intel Corporation (A Corporation Of Delaware) Method, apparatus, and system for building a compact model for large vocabulary continuous speech recognition (lvcsr) system
US7058561B1 (en) * 2000-11-02 2006-06-06 International Business Machines Corporation System, method and program product for optimising computer software by procedure cloning
JP3810631B2 (ja) 2000-11-28 2006-08-16 富士通株式会社 情報処理プログラムを記録した記録媒体
US6966055B2 (en) 2001-03-02 2005-11-15 International Business Machines Corporation Optimizing post-link code
US6904590B2 (en) 2001-05-25 2005-06-07 Microsoft Corporation Methods for enhancing program analysis
US7577942B2 (en) * 2001-07-26 2009-08-18 International Business Machines Corporation Efficient monitoring of program variables under debug
US20050022173A1 (en) 2003-05-30 2005-01-27 Codito Technologies Private Limited Method and system for allocation of special purpose computing resources in a multiprocessor system
KR100518584B1 (ko) 2003-07-12 2005-10-04 삼성전자주식회사 공유 라이브러리 시스템 및 상기 시스템 구축 방법
US7119808B2 (en) 2003-07-15 2006-10-10 Alienware Labs Corp. Multiple parallel processor computer graphics system
CN100498757C (zh) * 2003-07-25 2009-06-10 Rmi公司 高级处理器
US20050108695A1 (en) * 2003-11-14 2005-05-19 Long Li Apparatus and method for an automatic thread-partition compiler
FR2865047B1 (fr) * 2004-01-14 2006-04-07 Commissariat Energie Atomique Systeme de generation automatique de codes optimises
JPWO2006009287A1 (ja) * 2004-07-20 2008-05-01 スター・ゲームズ株式会社 自動変換用プログラムおよびプログラム変換サーバ
US7493606B2 (en) 2004-08-03 2009-02-17 Université du Québec à Chicoutimi (UQAC) Method for compiling and executing a parallel program
US20060132492A1 (en) 2004-12-17 2006-06-22 Nvidia Corporation Graphics processor with integrated wireless circuits
WO2006087728A1 (en) 2005-02-15 2006-08-24 Codito Technologies System for creating parallel applications
US20070219771A1 (en) * 2005-12-01 2007-09-20 Verheyen Henry T Branching and Behavioral Partitioning for a VLIW Processor
US7788468B1 (en) * 2005-12-15 2010-08-31 Nvidia Corporation Synchronization of threads in a cooperative thread array
US7728841B1 (en) 2005-12-19 2010-06-01 Nvidia Corporation Coherent shader output for multiple targets
US7376808B2 (en) * 2006-01-31 2008-05-20 International Business Machines Corporation Method and system for predicting the performance benefits of mapping subsets of application data to multiple page sizes
TWI343020B (en) 2006-05-12 2011-06-01 Nvidia Corp Antialiasing using multiple display heads of a graphics processor
JP4784827B2 (ja) 2006-06-06 2011-10-05 学校法人早稲田大学 ヘテロジニアスマルチプロセッサ向けグローバルコンパイラ
US7814486B2 (en) * 2006-06-20 2010-10-12 Google Inc. Multi-thread runtime system
GB2443277B (en) 2006-10-24 2011-05-18 Advanced Risc Mach Ltd Performing diagnostics operations upon an asymmetric multiprocessor apparatus
US20080244592A1 (en) 2007-03-27 2008-10-02 Kabushiki Kaisha Toshiba Multitask processing device and method
US8286196B2 (en) 2007-05-03 2012-10-09 Apple Inc. Parallel runtime execution on multiple processors
EP3413198A1 (en) 2007-04-11 2018-12-12 Apple Inc. Data parallel computing on multiple processors
US8341611B2 (en) 2007-04-11 2012-12-25 Apple Inc. Application interface on multiple processors
US8789031B2 (en) 2007-09-18 2014-07-22 Intel Corporation Software constructed strands for execution on a multi-core architecture
US8776030B2 (en) * 2008-04-09 2014-07-08 Nvidia Corporation Partitioning CUDA code for execution by a general purpose processor
US9678775B1 (en) * 2008-04-09 2017-06-13 Nvidia Corporation Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment
JP4381459B1 (ja) 2008-06-27 2009-12-09 株式会社東芝 情報処理装置、粒度調整方法およびプログラム
US8959497B1 (en) * 2008-08-29 2015-02-17 Nvidia Corporation System and method for dynamically spawning thread blocks within multi-threaded processing systems
US8615770B1 (en) * 2008-08-29 2013-12-24 Nvidia Corporation System and method for dynamically spawning thread blocks within multi-threaded processing systems

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001222516A (ja) * 2000-01-10 2001-08-17 Internatl Business Mach Corp <Ibm> 処理コアの使用を動的に更新する方法および装置
JP2007048052A (ja) * 2005-08-10 2007-02-22 Internatl Business Mach Corp <Ibm> コンパイラ、制御方法、およびコンパイラ・プログラム

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
CSNG200700650022; 町田智志、中西 悠、平澤将一、本多弘樹: 'POSIXスレッドを用いたCellプロセッサ向けAPIの提案' 先進的計算基盤システムシンポジウム SACSIS2007 論文集 Vol.2007,No.5, 20070523, pp.162〜163, 社団法人情報処理学会 *
CSNG200800447012; 大島聡史、平澤将一、本多弘樹: 'メッセージ通信型GPGPUプログラミング' 情報処理学会研究報告 Vol.2008,No.19, 20080305, pp.109〜114, 社団法人情報処理学会 *
JPN6011064338; 町田智志、中西 悠、平澤将一、本多弘樹: 'POSIXスレッドを用いたCellプロセッサ向けAPIの提案' 先進的計算基盤システムシンポジウム SACSIS2007 論文集 Vol.2007,No.5, 20070523, pp.162〜163, 社団法人情報処理学会 *
JPN6011064341; 大島聡史、平澤将一、本多弘樹: 'メッセージ通信型GPGPUプログラミング' 情報処理学会研究報告 Vol.2008,No.19, 20080305, pp.109〜114, 社団法人情報処理学会 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6040937B2 (ja) * 2011-05-19 2016-12-07 日本電気株式会社 並列処理装置、並列処理方法、最適化装置、最適化方法、および、コンピュータ・プログラム
KR101382945B1 (ko) 2012-10-17 2014-04-09 인하대학교 산학협력단 Gpu 병렬 검색을 통한 r-트리 계열의 계층형 색인 구조의 범위 질의 가속화 방법

Also Published As

Publication number Publication date
TW200947302A (en) 2009-11-16
US20090259828A1 (en) 2009-10-15
JP5152594B2 (ja) 2013-02-27
US20090259832A1 (en) 2009-10-15
US9678775B1 (en) 2017-06-13
JP2009259240A (ja) 2009-11-05
CN101556544A (zh) 2009-10-14
CN101556543A (zh) 2009-10-14
US9448779B2 (en) 2016-09-20
TWI423133B (zh) 2014-01-11
TW201007572A (en) 2010-02-16
US8984498B2 (en) 2015-03-17
TWI437491B (zh) 2014-05-11
US8572588B2 (en) 2013-10-29
US20090259829A1 (en) 2009-10-15
US20090259997A1 (en) 2009-10-15
JP4984306B2 (ja) 2012-07-25
CN101556544B (zh) 2013-09-18
CN101556543B (zh) 2014-04-23
US8612732B2 (en) 2013-12-17

Similar Documents

Publication Publication Date Title
JP5152594B2 (ja) 汎用プロセッサによるリターゲティングされたグラフィックプロセッサ加速コードの実行
US8776030B2 (en) Partitioning CUDA code for execution by a general purpose processor
US9424038B2 (en) Compiler-controlled region scheduling for SIMD execution of threads
EP2710467B1 (en) Automatic kernel migration for heterogeneous cores
JP4999183B2 (ja) 並列スレッド・コンピューティングの仮想のアーキテクチャ及び命令セット
US8615646B2 (en) Unanimous branch instructions in a parallel thread processor
US20070219771A1 (en) Branching and Behavioral Partitioning for a VLIW Processor
US8782611B1 (en) Visual inspection and debugging of threads in parallel computing systems
US20090240931A1 (en) Indirect Function Call Instructions in a Synchronous Parallel Thread Processor
JP2008276740A5 (ja)
US9645802B2 (en) Technique for grouping instructions into independent strands
US8615770B1 (en) System and method for dynamically spawning thread blocks within multi-threaded processing systems
US9229717B2 (en) Register allocation for clustered multi-level register files
US20110078418A1 (en) Support for Non-Local Returns in Parallel Thread SIMD Engine
KR101117430B1 (ko) 범용 프로세서에 의해 실행하기 위한 어플리케이션 프로그램의 리타게팅
KR101118321B1 (ko) 리타게팅된 그래픽 프로세서 가속 코드의 범용 프로세서에 의한 실행
US8959497B1 (en) System and method for dynamically spawning thread blocks within multi-threaded processing systems
Tarakji Design and investigation of scheduling mechanisms on accelerator-based heterogeneous computing systems

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090811

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20111121

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111213

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120313

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20120612

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121012

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20121022

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: 20121106

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121121

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151214

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 5152594

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250