JP5934094B2 - データ並列スレッドを有する処理論理の複数のプロセッサにわたるマッピング - Google Patents

データ並列スレッドを有する処理論理の複数のプロセッサにわたるマッピング Download PDF

Info

Publication number
JP5934094B2
JP5934094B2 JP2012522920A JP2012522920A JP5934094B2 JP 5934094 B2 JP5934094 B2 JP 5934094B2 JP 2012522920 A JP2012522920 A JP 2012522920A JP 2012522920 A JP2012522920 A JP 2012522920A JP 5934094 B2 JP5934094 B2 JP 5934094B2
Authority
JP
Japan
Prior art keywords
workgroup
gpu
memory
thread
threads
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2012522920A
Other languages
English (en)
Other versions
JP2013500543A (ja
Inventor
モリケッティ ローラン
モリケッティ ローラン
ガスター ベネディクト
ガスター ベネディクト
グマラジュ ジャヤン
グマラジュ ジャヤン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2013500543A publication Critical patent/JP2013500543A/ja
Application granted granted Critical
Publication of JP5934094B2 publication Critical patent/JP5934094B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Description

本発明は概してコンピュータプロセッサ及びデータ並列スレッドに関する。
コンピュータ及び他の同種のデータ処理デバイスは、一般的には制御処理ユニット(CPU)として知られる1つ以上の制御プロセッサを有している。そのようなコンピュータ及び処理デバイスはまた、様々な種類の特殊な処理のために用いられる他のプロセッサ、例えばグラフィクス処理ユニット(GPU)を有していることがある。例えばGPUは、特にグラフィクス処理動作に適するように設計される。GPUは、概して、並列データストリームに対して同一の命令を実行すること、例えばデータ並列処理、に理想的には適する多重処理要素を備えている。一般に、CPUはホスト又は制御プロセッサとして機能し、そしてグラフィクス処理等の特殊な機能をGPU等の他のプロセッサに任せる。
各CPUが多重処理コアを有する多重コアCPUの利用可能性に伴い、特殊な機能のためにも用いられ得るかなりの処理能力がCPUにおいて利用可能である。多重コアのCPU又はGPUの1つ以上の計算コアは、同一ダイ(例えばAMD_Fusion(商標))の一部であることがあり、あるいは異なるダイ(例えばNVIDIA_GPUを伴うIntel_Xeon(商標))内にあることがある。近年、CPU及びGPUの両方の特徴を有するハイブリッドコア(例えばCellSPE(商標)、Intel_Larrabee(商標))が、汎用GPU(General Purpose GPU)(GPGPU)型コンピューティングのために広く提案されてきている。GPGPU型のコンピューティングは、CPUが主として制御コードを実行すると共に性能臨界なデータ並列コードをGPUに解放するようにCPUを用いることを推奨している。GPUは主としてアクセラレータとして用いられる。多重コアのCPUとGPGPUコンピューティングモデルの組み合わせは、CPUコア及びGPUコアの両方をアクセラレータ目標として網羅する。多重コアのCPUコアの多くは、様々な分野でGPUに匹敵する性能を有している。例えば、多くのCPUコアの1秒当たり浮動小数点演算数(FLOPS)が、今や幾つかのGPUコアのそれと同程度である。
CPU及びGPUを有するヘテロコンピューティング(heterogeneous computing)プラットフォームのために種々のフレームワークが開発されてきた。これらのフレームワークは、スタンフォード大学によるBrookGPU、NVIDIAによるCUDA、及びKhronosGroupと称される産業共同体によるOpenCLを含む。OpenCLフレームワークはC的開発環境を提示しており、それを用いてユーザはGPUのためのアプリケーションを創出することができる。OpenCLは、例えば、データ並列計算のような幾つかの計算をGPUへと解放するための命令をユーザが指定することを可能にする。OpenCLはまた、ヘテロコンピューティングシステム内でコードがコンパイルされ且つ実行され得るようなコンパイラ及びランタイム環境を提供する。
従って、一般的にはGPU上で処理される機能の実行のためにCPU能力の効率的な使用を可能にする方法及びシステムが求められている。
処理論理の複数のデータ並列スレッドをプロセッサコア上で実行するためのシステム及び方法が開示される。処理論理の複数のデータ並列スレッドをプロセッサコア上で実行するための方法は、複数のデータ並列スレッドを1つ以上のワークグループにグループ化することと、1つ以上のワークグループからの第1のワークグループをプロセッサコア上のオペレーティングシステムスレッドに関連付けることと、第1のワークグループからのスレッドをオペレーティングシステムスレッド内のユーザレベルスレッドとして構成することとを含む。処理論理は、GPU上での実行のために前もって構成されるGPUカーネルを含むことができる。処理コアは、多重コアCPUの処理コアのようなCPUコアを含むことができる。
別の実施形態はGPUカーネルを実行するための方法であり、方法は、GPUカーネルをホストプロセッサにロードすることと、各々が複数のデータ並列スレッドを含む1つ以上のワークグループを形成することと、ホストプロセッサに結合される1つ以上のプロセッサコアのオペレーティングシステムスレッドにワークグループを関連付けることとを含む。各ワークグループは、1つ以上のオペレーティングシステムスレッドに関連付けられていてよく、そして各オペレーティングシステムスレッドは、1つのプロセッサコア上でのみ実行されるように構成される。方法はまた、各ワークグループのデータ並列スレッドを、それぞれの関連付けられたオペレーティングシステムスレッドの各々におけるユーザレベルスレッドとして構成するステップを含むことができる。
別の実施形態は、処理論理の複数のデータ並列スレッドをプロセッサコア上で実行するためのシステムである。システムは、プロセッサコアを含む少なくとも1つのプロセッサと、プロセッサコアに結合される少なくとも1つのメモリと、GPUカーネルスケジューラとを含む。GPUカーネルスケジューラは、複数のデータ並列スレッドを1つ以上のワークグループにグループ化することと、1つ以上のワークグループからの第1のワークグループをプロセッサコア上のオペレーティングシステムスレッドに関連付けることと、第1のワークグループからのスレッドをオペレーティングシステムスレッド内のユーザレベルスレッドとして実行することと、のために構成される。
更に別の実施形態はコンピュータ可読媒体を備えたコンピュータプログラム製品であり、コンピュータ可読媒体はその上に記録されるコンピュータプログラム論理を有し、コンピュータプログラム論理は、少なくとも1つのプロセッサに、複数のデータ並列スレッドを1つ以上のワークグループにグループ化することと、1つ以上のワークグループからの第1のワークグループをプロセッサコア上のオペレーティングシステムスレッドに関連付けることと、第1のワークグループからのスレッドをオペレーティングシステムスレッド内のユーザレベルスレッドとして実行することとをさせる。
本発明の更なる実施形態、特徴及び利益の他、本発明の種々の実施形態の構成及び動作が、添付の図面を参照して以下に詳細に説明される。
添付の図面は、本明細書に組み入れられその一部を構成し、本発明の実施形態を示しており、上述の一般的な説明及び以下に与えられる実施形態の詳細な説明と共に、本発明の原理を説明するのに役立つ。
図1は本発明の実施形態に従うヘテロコンピューティングシステムを示す図である。
図2は本発明の実施形態に従うGPUカーネルスケジューラを示す図である。
図3は本発明の実施形態に従いヘテロコンピューティングシステム上でコードを実行するための処理を示す図である。
図4は本発明の実施形態に従う例示的なメモリ配置の説明図である。
図5は本発明の実施形態に従いヘテロコンピューティングシステム上でワークアイテムをスケジューリングするための処理を示す図である。
図6は本発明の実施形態に従うスレッドスケジューリングの例示的な説明図である。
本発明の実施形態は、CPUプロセッサ及びGPUプロセッサ上での同一の又は類似のコードベースの使用を可能にすることによる他、そのようなコードベースのデバッグを容易にすることによって、実質的な利点を生み出し得る。本発明はここでは特定のアプリケーションのための例示的な実施形態と共に説明されるが、本発明はそれらに限定されないことが理解されるべきである。ここに提供される教示を利用し得る当業者であれば、その範囲内での並びに本発明が顕著に有用であろう追加的な分野の範囲内での追加的な修正、応用、及び実施形態を認識するであろう。
本発明の実施形態は、任意のコンピュータシステム、コンピューティングデバイス、エンタテーメントシステム、メディアシステム、ゲームシステム、通信デバイス、パーソナルデジタルアシスタント、又は1つ以上のプロセッサを用いる任意のシステムにおいて用いられ得る。本発明は、システムがヘテロコンピューティングシステムを備えている場合に特に有用である。ここで用いられる用語としての「ヘテロコンピューティングシステム」は、多重種のプロセッサが利用可能なコンピューティングシステムのことである。
本発明の実施形態は、同一のコードベースが異なるプロセッサ、例えばGPU及びCPU上で実行されることを可能にする。本発明の実施形態は、例えば多重コアのCPU及び/又はGPUを有する処理システムにおいて特に有用であり得るのであるが、その理由は、1つの種類のプロセッサのために開発されたコード(code developed)が、追加的な努力を殆ど又は全く伴わずに別の種類のプロセッサ上で展開され(deployed)得るところにある。例えば、GPUカーネル(GPU-kernels)としても知られるGPU上での実行のために開発されたコードは、本発明の実施形態を用いてCPU上に展開されて実行され得る。
また、本発明は、典型的には多数のデータ並列スレッドを伴うGPUカーネルを、スレッドをデバッグすることに役立つ方法でCPU及び他のプロセッサ上で展開することを可能にする。
ヘテロコンピューティングシステム
本発明の実施形態に従う例示的なヘテロコンピューティングシステム100が図1に示されている。ヘテロコンピューティングシステム100は、1つ以上のCPU、例えばCPU101と、1つ以上のGPU、例えばGPU102とを含み得る。ヘテロコンピューティングシステム100はまた、少なくとも1つのシステムメモリ103と、少なくとも1つの永続的記憶デバイス104と、少なくとも1つのシステムバス105と、少なくとも1つの入力/出力デバイス106と、GPUカーネルスケジューラ(GPU-kernel scheduler)109と、デバッガ(debugger)108とを含み得る。
CPU101は、任意の市販の制御プロセッサ又は特別注文の制御プロセッサを含み得る。CPU101は、例えば、ヘテロコンピューティングシステム100の動作を制御する制御論理を実行する。CPU101は、多重コアCPU、例えば2つのCPUコア141及び142を伴う多重コアCPUであってよい。CPU101は、任意の制御回路に加えて、CPUキャッシュメモリ、例えばそれぞれCPUコア141及び142のキャッシュメモリ143及び144を含み得る。CPUキャッシュメモリ143及び144は、それぞれCPUコア141及び142上でのアプリケーションの実行の間に命令及び/又はパラメータ値を一時的に保持するために用いられ得る。例えばCPUキャッシュメモリ143は、CPUコア141上での制御論理命令の実行の間におけるシステムメモリ103からの1つ以上の制御論理命令、変数の値、又は定数パラメータの値を一時的に保持するために用いられ得る。幾つかの実施形態においては、CPU101はまた、特殊なベクトル命令処理ユニットを含み得る。例えばCPUコア142は、ベクトル化された命令を効率的に処理することができるストリーミングSIMD拡張(Streaming SIMD Extensions)(SSE)ユニットを含み得る。当業者であれば、CPU101は選択された例におけるCPUコアよりも多い又は少ないCPUコアを含み得るし、またCPU101はキャッシュメモリを有していないことがあり又はより複雑なキャッシュメモリ階層を有し得ることを理解するであろう。
GPU102は、任意の市販のグラフィクスプロセッサ又は特注設計のグラフィクスプロセッサを含み得る。GPU102は、例えば、選択された機能に対して特殊なコードを実行することができる。概して、GPU102は、グラフィクスパイプライン計算のようなグラフィクス機能、例えば幾何学的な計算及びディスプレイ上での画像の描画を実行するために用いられ得る。
GPU102は、GPUグローバルキャッシュメモリ110と、1つ以上の計算ユニット112及び113とを含み得る。GPU102内にはグラフィクスメモリ107が含まれていてよく、あるいはグラフィクスメモリ107はGPU102に結合されていてもよい。計算ユニット112及び113は、それぞれGPUローカルメモリ114及び115と関連付けられている。各計算ユニットは1つ以上のGPU処理要素(PE)を含む。例えば、計算ユニット112はGPU処理要素121及び122を含み、また計算ユニット113はGPU処理要素123及び124を含む。GPU処理要素121、122、123、及び124は、少なくとも1つのプライベートメモリ(PM)131、132、133、及び134とそれぞれ関連付けられている。各GPU処理要素は、1つ以上のスカラー及びベクトル浮動小数点ユニットを含み得る。GPU処理要素はまた、逆平方根ユニット及びサイン/コサインユニット等の特殊目的ユニットを含み得る。GPUグローバルキャッシュメモリ110は、システムメモリ103等のシステムメモリ及び/又はグラフィクスメモリ107等のグラフィクスメモリに結合され得る。
システムメモリ103は、ダイナミックランダムアクセスメモリ(DRAM)等の少なくとも1つの非永続的メモリを含むことができる。システムメモリ103は、アプリケーションの一部分又は他の処理論理の実行の間に、処理論理命令、定数値、及び変数値を保持することができる。例えば1つの実施形態においては、GPUカーネルスケジューラ109の制御論理及び/又は他の処理論理は、CPU101によるGPUカーネルスケジューラ109の実行の間にシステムメモリ103内に存在することができる。ここで用いられる「処理論理」の用語は、制御フロー命令、計算を実行するための命令、及び資源への関連するアクセスのための命令を参照する。
永続的メモリ104は、デジタルデータを記憶可能な1つ以上の記憶デバイス、例えば磁気ディスク、光学ディスク、又はフラッシュメモリを含む。永続的メモリ104は、例えば、GPUカーネルスケジューラ109及びデバッガ108の命令論理の少なくとも一部を記憶することができる。例えば、ヘテロコンピューティングシステム100の起動に際して、オペレーティングシステム及び他のアプリケーションソフトウエアが、永続的メモリ104からシステムメモリ103へとロードされ得る。
システムバス105は、周辺構成部品相互接続(Peripheral Component Interconnect)(PCI)バス、進歩的マイクロ制御器バスアーキテクチャ(Advanced Microcontroller Bus Architecture)(AMBA)バス、業界標準アーキテクチャ(Industry Standard Architecture)(ISA)バス、又は同様のデバイスを含み得る。システムバス105はまた、ローカルエリアネットワーク(LAN)等のネットワークを含み得る。システムバス105は、ヘテロコンピューティングシステム100の構成要素を含む複数の構成要素を結合するための機能性を包含する。
入力/出力インタフェース106は、ユーザ入力/出力デバイス、例えばキーボード、マウス、ディスプレイ、及び/又はタッチスクリーンを接続する1つ以上のインタフェースを含む。例えばユーザ入力は、キーボード及びマウス接続のユーザインタフェース106を介してヘテロコンピューティングシステム100へ供給され得る。ヘテロコンピューティングシステム100の出力、例えばGPUカーネルスケジューラ109及びデバッガ108の出力は、ユーザインタフェース106を介してディスプレイへ出力され得る。
グラフィクスメモリ107は、システムバス105及びGPU102に結合されている。グラフィクスメモリ107は、一般的に、システムメモリ103から転送されるデータをGPUによる高速アクセスのために保持するのに用いられる。例えば、GPU102とグラフィクスメモリ107の間でのインタフェースは、システムバスインタフェース105の数倍は高速であり得る。
デバッガ108は、ヘテロコンピューティングシステム100上で実行中のアプリケーションコード及び他の処理論理をデバッグする機能性を包含する。例えばデバッガ108は、アプリケーションコード及び/又は他の処理論理の実行の間に1つ以上の変数をモニタリングする機能性を包含し得る。ヘテロコンピューティング環境においては、デバッガ108は、CPUの他GPU上でのアプリケーションコード及び他の処理論理の実行をモニタリングする能力を必要とすることがある。
GPUカーネルスケジューラ109は、特にGPU上での実行のために書かれた機能及び処理論理をGPU上又はCPU上のいずれかにスケジューリングする機能性を包含する。GPUカーネルスケジューラは、図2に関連して後で更に説明される。当業者であれば、デバッガ108及びGPUカーネルスケジューラ109は、ソフトウエア、ファームウエア、ハードウエア、又はこれらの任意の組み合わせを用いて実装され得ることを理解するであろう。例えばソフトウエアにおいて実装される場合、GPUカーネルスケジューラ109は、コンパイルされ実行中にはシステムメモリ103内に存在するC又はOpenCLで書かれたコンピュータプログラムであってよい。ソースコードの形態及び/又はコンパイルされた実行可能な形態においては、GPUカーネルスケジューラ109は永続的メモリ104内に記憶されていてよい。1つの実施形態においては、GPUカーネルスケジューラ109及び/又はデバッガ108の機能性の一部又は全部は、ここに説明される本発明の態様を具現化するハードウエアデバイスを創出するためのマスクワーク/フォトマスクの生成を通して最終的に製造プロセスを構成することを可能にするVerilog、RTL、ネットリスト(netlists)等のハードウエア記述言語において指定される。
当業者であれば、ヘテロコンピューティングシステム100は、図1に示されるよりも多い又は少ない構成要素を含み得ることを理解するであろう。例えば、ヘテロコンピューティングシステム100は、1つ以上のネットワークインタフェース、及び/又はOpenCLフレームワーク等のソフトウエアアプリケーションを含み得る。
GPUカーネル
ここで用いられる「GPUカーネル」の用語は、GPU上での1つ以上の機能又は動作を実行するコード及び/又は処理論理を含む。例えばGPUカーネルは、行列乗算、行列転置(matrix transpose)、細分化(subdivision)、方程式解法(equation solving)、及び種々の他の動作のために開発される。GPGPUモデルにおいては、例えば、GPUカーネルは、CPUによってGPU上での実行から解放され得る機能及び/又は他の動作のコードフラグメント(code fragments)である。典型的なGPGPUアプリケーションにおいては、同じGPUカーネルコードが多重並列データストリーム上で同時に実行されるであろう。これは「データ並列」コンピューティングとして知られる。例えば2つの行列を乗算する場合、2つの元の行列からの対応する要素の多重対が、異なる処理コアを用いて同時に乗ぜられ得る。単純な例ではあるが、行列乗算はGPU上でのデータ並列動作を例示し得る。
上述の行列乗算の例に続き、結果として得られる行列の各要素に対する計算は、実行(スレッド)の別個のスレッドとして考えられ得る。結果として得られる行列の各要素に対応するスレッドは、並列で実行可能である。GPU102においては、例えば、スレッドは各処理要素121、122、123、及び124上で同時に実行されてよい。
例えばグラフィクスアプリケーションにおいて一般的であるように、行列の多重対が乗ぜられることになる場合、行列の各対は、計算要素112及び113等の1つの計算要素に割り当てられ得る。
GPUカーネルの実行は、GPU102に関して説明され得る。GPUカーネルは、一般には並列の多重スレッドとして実行される。これらの並列スレッドの各々が「ワークアイテム(workitem)」である。各ワークアイテムは、1つの処理要素、例えば処理要素121、122、123、又は124上で実行され得る。1つの計算ユニットに割り当てられる複数のワークアイテムは「ワークグループ(workgroup)」として知られる。
概して、ワークアイテム間での同期は、単一のワークグループ内のワークアイテムに限定される。この制限は一般的には多数のスレッドを伴う環境において強制され、その結果、多数のスレッドが効率的に管理され得る。しかし、幾つかの実施形態においては、同期は単一のワークグループ内のワークアイテムに限定されなくてよい。
GPUカーネルスケジューラ
図2は本発明の実施形態に従うGPUカーネルスケジューラ109の構成要素を示している。GPUカーネルスケジューラ109は、コードアナライザ201と、CPUメモリマッパ(memory mapper)203と、ワークグループスケジューラ205と、スレッドスケジューラ207とを備えていてよい。当業者であれば、GPUカーネルスケジューラ109は、追加的な構成要素及び/又は構成要素201〜207の異なる組み合わせを備えていてよいことを理解するであろう。
コードアナライザ201は、OpenCLコード等のコードを解析するための機能性を包含する。コードアナライザ201は、CPU上又は代替的にはGPU上で有利にスケジューリングされ得る解析中のコードにおけるコードフラグメント(code fragments)及び/又はGPUカーネルを識別することができる。コードアナライザ201はまた、目標プラットフォームの詳細を知る機能性を包含し得る。例えばコードアナライザ201は、CPUコアの数、及び目標プラットフォーム上で利用可能なGPUコアを識別することができる。コードアナライザ201は更に、システムメモリ、キャッシュメモリ、グローバルGPUキャッシュメモリの量、等を識別し得る。
CPUメモリマッパ203は、コードが実行のために送られ得る先であるCPUのメモリ利用可能性を決定すると共にマッピングされたGPUカーネルを実行するためにCPUを準備する機能性を包含する。
ワークグループスケジューラ205は、ワークグループをスケジューリングする機能性を包含する。例えばワークグループスケジューラ205は、各ワークグループを実行するために用いられ得るGPUの計算ユニットの適切なセットを決定することができる。別の実施形態においては、ワークグループスケジューラはまた、1つ以上のCPUコア上のスレッドにワークグループが割り当てられ得るように、GPUカーネルのワークアイテムスレッドがどのようにワークグループにグループ化されるべきかを決定することもできる。ワークグループスケジューラは更に、GPUカーネルスレッドのワークグループをCPU又はCPUコアにマッピングする機能性を包含し得る。
スレッドスケジューラ207は、GPUカーネルのスレッドをGPU又はCPUにスケジューリングする機能性を包含する。例えばスレッドスケジューラ207は、スレッドの処理要求が受け入れられ得る方法で、処理要素121、122、123、又は124へのスレッドの割り当てを決定することができる。1つの実施形態においては、スレッドスケジューラ207は、GPU102内のどの処理要素で各ワークアイテムがスケジューリングされ得るのかを決定する。別の実施形態においては、スレッドスケジューラ207はCPU101上でワークアイテムスレッドをスケジューリングする。例えばスレッドスケジューラ207は、1つのワークグループの複数のワークアイテムスレッドを単一のCPUコア、例えばCPUコア142上でスケジューリングすることができる。モジュール201〜207の機能性は、本発明の実施形態に従い図3〜6との関係において後で更に説明される。
CPUコア上でのGPUカーネルのマッピング及び実行
図3は本発明の実施形態に従いヘテロコンピューティングシステム上でコードを実行するための処理300を示している。処理300は、例えば、ヘテロコンピューティングシステム100上で実行可能である。1つの実施形態においては、処理300はGPUカーネルスケジューラ109の処理論理のフローを代表し得る。
一般性を損なうことなしに、以下の説明は主としてOpenCLフレームワークに基づいている。当業者であれば、本発明の実施形態はまた、他の開発及び実行フレームワーク、限定はされないが例えばCUDAフレームワーク、BrookGPUフレームワーク等を用いて実装され得ることを認識するであろう。上述したように、OpenCLは、ヘテロコンピューティングシステム内でコードが開発され、コンパイルされ、そして実行され得る開発環境、コンパイラ、及びランタイム環境(run time emvironment)を提供する。
OpenCLはまた、選択されたプロセッサ上で実行されるGPUカーネルを展開すること(deploying)等の種々の機能を実行するためにユーザアプリケーションによって呼び出され得る組み込みライブラリ機能(built-in library functions)及びアプリケーションプログラミングインタフェース(API)を提供する。一般にOpenCLフレームワークは主としてホストシステム上で実行され、そしてコマンド(例えばGPUカーネルを含む実行可能なコード)を展開することによって、結合されている複数のプロセッサの動作を制御する。例えばOpenCLはCPUコア141上で主として実行されてよく、そしてそれぞれのデバイス上で実行されるべきコマンドを展開することによって、GPU102並びにCPUコア141及び142の動作を制御してよい。
ステップ301では、1つ以上のアプリケーションのためのコードがロードされる。ロードされたコードは、ソースコード、又はバイトコードのような事前コンパイルされたコード(pre-compilation code)の他の形態であってよい。幾つかの実施形態では、埋め込まれたコンパイルされた機能をコードが含んでいてもよい。例えば幾つかの機能が、アプリケーション内に埋め込まれた機能呼び出しに基づいてライブラリから動的にリンクされ得る。説明を目的として、ロードされたコードは、OpenCLのようなプログラミング言語におけるソースコード形態にあるものとする。ソースコードは、例えば、最初には永続的メモリ104上に存在し得る。ステップ301においてコードをロードするに際して、ソースコードは、メモリ、例えばシステムメモリ103内へとロードされ得る。尚、ロードされたコードは、ソースコード、事前コンパイルされたコード、及び/又はコンパイルされたバイナリの組み合わせを含み得る。例えば、処理300が実装され得るOpenCL開発、コンパイル、及び実行フレームワークは、GPUカーネルのソースコード及び/又はコンパイルされたバイナリのロードを可能にする。OpenCLプログラムは、例えば、GPUカーネル、制御フローコード、及びGPUカーネルによって呼び出される他の機能を含み得る。
ステップ303では、ロードされたコードが解析される。コードの解析はコードを構文解析することを含み得る。幾つかの実施形態では、ステップ303で解析されるコードは、有効なOpenCLコード又はCのような別のプログラミング言語若しくはフレームワークにおけるコードを含み得る。解析ステップ303においては、必要とされるCPU資源が決定され得る。例えば、解析及び/又は構文解析は、1つ以上のCPUコア上でスケジューリングされることを必要としているスレッド(ワークアイテム)の総数を決定することができる。また、解析ステップ303は、メモリ要求、例えばGPUカーネルによって使用されるプライベートメモリ及びローカルメモリの実際の量を決定するために用いられ得る。1つの実施形態においては、ステップ301及び303は、コードアナライザ201の処理論理を用いて実装され得る。
ステップ305では、ステップ301でロードされたコードを実行するようにヘテロコンピューティングシステムが設定される。例えば、ステップ303で実行されたコード解析に基づいて、幾つかのCPU及びGPUが、ロードされたコードを実行するために割り当てられ得る。ステップ305はまた、ロードされたコードの実行を準備するようにメモリ103等のメモリ資源を設定することを含み得る。
ステップ307〜323は、ロードされたコードにおいて各機能及び/又はGPUカーネルに対して繰り返される。例えば、ロードされたソースコードは、各機能及び/又はGPUカーネルを識別する上から下への方法で走査され得る。ステップ307では、機能及び/又はGPUカーネルが識別される。1つの実施形態では、例えば、GPUカーネルは、OpenCLにおけるカーネル識別子のような予め定められた識別子によって識別され得る。
ステップ309では、ステップ307で識別されたコードセグメントをCPU又はGPUのどちらで実行するかが決定される。例えば、既定の挙動(default behavior)は、GPUカーネル以外の全ての機能をCPU上で実行し且つ全てのGPUカーネルをGPU上で実行することであってよい。例えばコード内に埋め込まれた識別子に基づいてコマンド又は機能がデータ並列であるかどうかを決定するために、別の考慮があり得る。データ並列コマンド又は機能は、望ましくはGPUに対してスケジューリングされ得る。ロードバランシング(load balancing)要求及びアプリケーション特性のような他の基準が用いられてもよい。
処理論理及び/又はコードセグメントがGPU上で実行されるべきと決定された場合(ステップ309において)には、ステップ311においてGPU上に実装されるようにスケジューリングされる。幾つかの実施形態においては、処理論理及び/又はコードセグメントは、特定のGPU上で実装されるものとしてスケジューリングされる。
ステップ311では、選択されたGPU上で処理論理及び/又はコードセグメントがスケジューリングされる。ステップ311は、GPUの構成、例えばGPUにおける計算デバイスの数及び各計算デバイス内の処理要素の数を決定することを含んでいてよい。ステップ311はまた、当該GPUに対するコンテクスト及びコマンドキューを作成することと、そのコンテクストに関連するメモリオブジェクトを作成することと、GPUカーネルオブジェクトをコンパイルすると共に作成することと、GPUカーネルオブジェクトを実行するようにコマンドキューへ対応するコマンドを発行することと、発行されたコマンドの任意の同期を行うこととを含み得る。
GPUの構成を決定することは、例えば、システム内で利用可能な計算デバイス(例えばCPU、GPU)にOpenCL_API呼び出しを用いて問い合わせることと、次いで1つ以上の識別された計算デバイスにそのローカル情報を問い合わせることとを含み得る。GPU処理要素の数、レンジ限界、ワークグループサイズ、種々のメモリ空間のサイズ、最大メモリオブジェクトサイズ等を決定するために、計算デバイスのリストから、あるGPUデバイスが問い合わせされ得る。
選択されたGPU上で処理論理及び/又はコードセグメントが実行されるようにスケジューリングするに際して、コードセグメント(例えば実行可能なカーネルオブジェクト)を含む実行可能なコードを含んでいるコマンドが、選択されたGPUのコンテクストにおいて作成されるコマンドキューにスケジューリングされ得る。ここで用いられる「コンテクスト」は、GPUカーネルのための実行環境を定義する。コンテクストは、カーネルに関連するデバイス、メモリ、及び他のプログラムオブジェクトのためのハンドル及び他の情報を含み得る。例えばコンテクストは、実行中のカーネルに、それが使用することを許可されているGPUデバイス及びメモリロケーションを提供することができる。
作成されるメモリオブジェクトは、ソース及び宛先オブジェクトに対応し得る。例えば処理論理及び/又はコードセグメントが反復アレイ追加(interactive array addition)を行う場合、ソースオブジェクトは2つのソースアレイであってよい。宛先オブジェクトは、出力結果が書き込まれるアレイであり得る。メモリオブジェクトは、システムメモリ103内又はグラフィクスメモリ107内で作成され得る。メモリオブジェクトは次いで、キャッシュ110、143、及び144のような種々のキャッシュ内にキャッシュされてよい。作成される各メモリオブジェクトは、対応するコンテクストに関連している。
実行可能なカーネルオブジェクトの作成は、処理論理及び/又はコードセグメントをコンパイルすること並びに任意の必要な特定デバイス向けモジュールをリンクすることによって行われる。例えば、コンパイルされたカーネルオブジェクトは、カーネル機能コード又は命令、カーネルに提供される任意の引数(arguments)、関連するコンテクスト、及びそれが実行されることになるGPUに関連するライブラリコードを含み得る。
カーネルオブジェクトが作成された後に、カーネルを実行することになるコマンドがコマンドキューにキューされる。コマンドがキューに入れられる(enqueued)方法は、コマンドがデータ並列コマンドであるかタスク並列コマンドであるかに特有であろう。例えば反復アレイ追加の例では、データ並列コマンドは、指定された数の計算デバイス内で並列に実行される命令と共に単一のコマンドをキューに入れることができるが、タスク並列モデルは、1つのコマンドが各アレイ要素のためにある幾つかの別個のコマンドが結果としてキューに入れられるようにし得る。
ステップ309において、処理論理及び/又はコードセグメントがCPU上で実行されるべきであるとの決定がなされた場合には、処理300はステップ313へ進む。ステップ313では、コードセグメントを実行するために1つ以上のCPUが選択され得る。幾つかの実施形態では、例えば多重コアCPUシステムにおいて、CPUの選択はCPUのロード又は処理能力に基づき得る。利用可能なキャッシュメモリの有用性及び大きさ等の他の検討もまた、考慮され得る。
説明を簡略化するために、ステップ311〜321の説明は、CPU上で実行されることになる処理論理及び/又はコードセグメントがGPUカーネルであることを前提とする。選択されたCPUにGPUカーネルをマッピングすることは、CPUコアへのきめ細かいGPUスレッド(即ちワークアイテム)のマッピングと、加えてCPUメモリシステムへのGPUメモリ階層のマッピングとを含み得る。ステップ315では、選択されたCPUにGPUカーネルスレッドがマッピングされる。もしGPUカーネルがCPUに単純にマッピングされるとすれば、各GPUワークアイテムは、オペレーティングシステム(OS)スレッドにマッピングするであろう。ステップ315の処理は、ワークグループスケジューラ205によって提供される機能性の一部であり得る。
CPUはより多くの制限された数のハードウエアコンテクストを有し、そしてしばしば唯一のハードウエアコンテクストを有する。OSは一般的にはOSスレッドをスケジューリングすると共に実行することに関与する。OSスレッドへのワークアイテムの単純なマッピングは、結果として数百乃至は数千のスレッドをもたらし得る。単一のコンテクストで多数のスレッドを実行させることは、各処理が実行されるときに多数のコンテクストスイッチが必要になることを含む理由で、実質的に非効率になり得る。また、多数のスレッドをOSに管理させることも極めて非効率になり得る。本発明の実施形態は、高い性能を達成すると共に多数のスレッドを有するアプリケーションのデバッグを容易にするような方法で、GPUからCPUへのマッピングを可能にする。
GPUカーネルのワークアイテムをCPUコアへマッピングすることは、本発明の実施形態においては、利用可能な多重コアCPUを活用すると共に、コンテクストスイッチング等に関連する非効率性を回避するための管理可能な数のOSスレッドを有するような方法で行われる。従って、本発明の実施形態においては、ワークアイテムに代わりワークグループが、OSスレッドにマッピングされ且つ/又は関連付けられる単位である。1つ以上のワークアイテムが1つのワークグループへとグループ化される。1つのワークグループ内のワークアイテムの数は予め定められていてよく、あるいは利用可能な処理コアの数及び能力のような基準に基づいて決定されてよい。ワークグループをOSスレッドにマッピングし且つ/又は関連付けることは、ワークグループに対して新たなOSスレッドを生じさせること又はワークグループを既存のOSスレッドに結合させることのいずれかのための設定を含み得る。新たなOSスレッドを生じさせるための及び既存のスレッドに結合させるためのAPI機能は、1つ以上のOpenCLフレームワーク(OpenCLランタイムシステムを含む)及び下層のオペレーティングシステムによって提供される。
GPUカーネルの各ワークグループは、例えばワークグループに関連付けられるOSスレッドに対して親和性のあるプロセッサを設定するすることによって、CPUコアにマッピングされ得る。各CPUコアは1つ以上のワークグループを割り当てられてよい。CPUコア毎の多重ワークグループは並列で実行され得る。ある実施形態では、各CPUコアは一度に単一のワークグループのみを実行するように構成される。例えば、単一のOSスレッドのみが各CPUコアで生成される。各CPUコアは、1つのワークグループを実行して終了したら次いで別のワークグループを実行することによって、多重ワークグループを実行することができる。
ステップ317では、ワークグループ内のスレッドがマッピングされ且つ/又は構成される。ステップ317の処理は、スレッドスケジューラ207によって提供される機能性の一部であってよい。ワークグループにマッピングされている各OSスレッド内で、ワークアイテムスレッドが次々に順序正しく実行されるように構成される。ワークアイテムスレッドはユーザレベルスレッドとして実装される。ワークアイテムスレッドをユーザレベルスレッドとして実装することによって、オーバーヘッドがユーザ空間とカーネル空間の間で切り換わる必要性が回避され、また多数のコンテクストスイッチの関連するコストが回避される。尚、殆どの場合に、GPUカーネルはユーザ空間アプリケーションに適合し、またカーネル空間アクセスを要求するシステム資源への直接アクセスを必要としない。当業者に知られているように、多重ユーザレベルスレッドは、単一のオペレーティングシステムレベルスレッド内に実装され得る。
本発明の幾つかの実施形態においては、ワークアイテムスレッドは、1つのワークグループ内の幾つかのグループにおいて実行され得る。例えば、2つ以上の浮動小数点計算又は二重計算を同時に提供することができるSSEユニット(例えばシステム100内のSSEユニット145)のようなベクトルユニットが利用可能な環境においては、SSEユニットの最大限の能力が利用されるように、コンパイラは、幾つかのワークアイテムを組み合わせて並列で実行することができる。
ステップ319では、CPUコアにとってアクセス可能なメモリが、GPUに利用可能なメモリ階層を提供するようにマッピングされる。ステップ319の処理は、CPUメモリマッパ203によって提供される機能性の一部であってよい。GPUカーネルがCPUコア上で実行可能になるようにGPUメモリ階層をCPUコアへマッピングすることは、種々の態様を含む。GPUカーネルコードはGPUメモリ階層内のロケーションへの参照を含み得るので、GPUメモリ階層からCPUメモリへのマッピングが必要になり得る。CPUコアは典型的にはそのメモリ(例えばシステムメモリ103)のために単一のアドレス空間のみを有しているのに対して、GPUコアは幾つかの独立してアドレス可能なメモリを有し得る。GPUグローバルメモリ、計算デバイスローカルメモリ、及び処理要素プライベートメモリの全てがCPUメモリへとマッピングされ得る。
GPUグローバルメモリ、例えばGPUメモリ107は、システムメモリ、例えばメモリ103に直接マッピングされ得る。GPUローカルメモリ及びプライベートメモリのマッピングは、より微妙な手法を必要とする。メモリとの関係で用いられるマッピングは、自動アドレストランスレーション(translation)メカニズムをセットアップすることを伴っていてよく、それにより、CPUコア上で実行中のGPUカーネル内に含まれるメモリアドレスが、GPUに付随するメモリ階層内のロケーションの代わりにシステムメモリ103へとリダイレクトされる。
GPUローカルメモリ、例えばGPUローカルメモリ114及び115は、計算ユニットの複数の処理要素によって共有される。従って、1つのGPUローカルメモリが1つのワークグループの全てのワークアイテムの間で共有される。あるCPUに複数のワークグループがマッピングされる場合、1つのワークグループは単一のCPUコアにマッピングされるので、対応するGPUローカルメモリがこのCPUコアにもたらされてよい。多くの場合、GPU内でのローカルメモリの実際の使用は、それが完全にCPUコアのキャッシュメモリ内に組み込まれ得るようなものであってよい。
GPUローカルメモリ、例えばGPUローカルメモリ114及び115は、1つのワークグループ内の複数のワークアイテムによって共有される。本発明の実施形態は、各CPUコアが同時に単一のワークグループのみを実行するように制限することがある。CPUが同時に単一のワークグループのみを実行する場合、GPUローカルメモリに対応する単一の割り当てのみが1つのCPUコアによって利用される。従って、CPUコア毎に単一のローカルメモリが割り当てられてよく、そして割り当てられたローカルメモリは、CPUコア上で実行される連続するワークグループのために再使用され得る。あるローカルメモリは、各計算デバイスのためにシステムメモリの連続的なメモリ領域内に割り当てられてよい。好ましくは、CPUコア内のキャッシュメモリは、そのCPUコアに対応する、システムメモリ内のローカルメモリの割り当てのインスタンス(instance)を提供するのに十分な大きさのものであってよい。当業者であれば、メモリ及び/又はキャッシュ内に割り当てられるローカルメモリ領域は、次に続く各ワークグループに対して再使用される前にフラッシュされる(flushed)ことを必要とする場合があることを理解するであろう。幾つかの実施形態においては、メモリ及び/又はキャッシュ内に割り当てられるローカルメモリ領域は、前の内容に上書きすることによって再使用されてよい。
GPUプライベートメモリ、例えばGPUプライベートメモリ131、132、133、及び134は、各処理要素にプライベートである。GPU環境内の各プライベートメモリは、同時に単一のワークアイテムによって用いられる。従って、ローカルメモリと同様に、プライベートメモリはシステムメモリ内に割り当てられてよく、そして連続するワークアイテムのために再使用されてよい。例えば、あるプライベートメモリに対するシステムメモリ103内での単一の割り当ては、単一のワークグループの連続的に実行されるワークアイテムによって再使用されてよく、また連続するワークグループ内で同一のCPUコアによって実行されてよい。GPUプライベートメモリ、及びそれに伴いそのGPUプライベートメモリに対応するシステムメモリ103内の割り当ては、典型的には、カーネルの内部にあり且つ各ワークアイテムにとってローカルであるスタック変数(Stack variables)を保持するために用いられる。
定数メモリは、コードの実行の間中は一定である値を有するデータを含む。GPU上で実行中のGPUカーネルのために、定数メモリは、グラフィクスメモリ107及び/又はGPUグローバルキャッシュメモリ110内にあってよい。定数メモリは、一般的には、読み出し専用であってよく、そしてワークグループに依存しない。本発明の実施形態においては、任意のCPU上で実行中の任意のワークグループ又はワークアイテムは定数メモリへのアクセスを必要とするであろうから、定数メモリは、全てのCPUコアにアクセス可能であってよいシステムメモリ内の領域にマッピングされる。また、主メモリからの定数メモリ割り当ては、各CPUコアのキャッシュメモリ内に複製されることが望ましい。GPUメモリ階層をCPUへとマッピングする例示的な配置が図4に示されている。
ステップ321では、1つ以上の選択されたCPUコア、例えばコア141及び/又は142上での実行のために、GPUカーネルがスケジューリングされてよい。GPUカーネルを実行のためにスケジューリングすることは、OpenCLランタイムシステムのような実行環境を構成して、選択されたCPUコア上でのワークグループ及びワークアイテムのマッピングを実装することを含み得る。
本発明の1つの実施形態においては、ヘテロコンピューティングシステム100上でコードをコンパイルし且つ実行するためにOpenCLフレームワークが使用中である場合、ステップ321は、1つ以上のコマンドをコマンドキュー内にキューすることを含み得る。例えば、ヘテロコンピューティングシステム100内でOpenCLフレームワークを用いて、GPUカーネルが、1つ以上のコア141及び多重コアCPU101上で実行されるようにスケジューリングされ得る。典型的には、OpenCLフレームワークを用いてヘテロコンピューティングシステム100上でアプリケーションを実行する場合、制御部分は、GPU102又はコア141若しくは142のようなシステム100のデバイス上での選択されたコードの実行を開始するホスト上で動作する。CPUコア、例えばコア141又は142の1つは、ホストとして機能すると共にGPUカーネルを実行のためにシステム100のデバイスへと分配することができる。例えば、CPUメモリをマッピングするためのコマンド、及びGPUカーネルを実行するためのコマンドは、多重コアCPU101に対して作成されるコンテクストにおいて作り出されるコマンドキュー内でスケジューリングされ得る。OpenCLランタイム環境は、システム100において指定されるデバイス内のそれぞれのコマンドキューに書き込まれたコマンドの各々を実行する。
多重コアCPU101上での実行のためにGPUカーネルをスケジューリングする場合、ステップ313〜325において決定されるマッピング及び構成を強制するための命令は、多重コア101上で実行されるべきコード内に挿入され得る。例えば、ワークグループ内の複数のワークアイテムは、自動的に又はプログラマによって手動でのいずれかで挿入されるべき同期点(synchronization point)を必要とすることがある。
多重コアCPU101上でワークグループ内のワークアイテム同期を実装している場合、本発明の実施形態は、同期点に至るまでワークアイテムが実行されることを可能にし得る。例えば、各ワークアイテムは、同期点(例えばbarrier( )関数)に至るまでシリアルなやり方で1つずつ実行され、そして次のワークアイテムが実行される前に同期点で停止する。同期点を有するワークグループ内の全てのワークアイテムがそこに到達した場合、各ワークアイテムは、同期点からそのワークアイテムの終りまでシリアルに実行される。幾つかの関数、例えばワークアイテム状態を保存するためのsetjmp( )及び当該ワークアイテムの状態を復元するためのlongjmp( )が、コード内に挿入され得る。本発明の実施形態においては、そのような追加に係るコードは、GPUカーネルのソースコード内には挿入されない。むしろ、そのような追加に係るコードは、GPUカーネルのエントリ、エグジット、及び/又はバリアルーチン内に挿入される(且つGPUカーネルコード内には挿入されない)。GPUカーネルのソースコードそれら自身を変えないことによって、本発明の実施形態はデバッグ作業の試みを容易にする。
ステップ323では、実行されるべき追加に係るコードがあるかどうかが判断され、ある場合には処理300はステップ307に戻る。もはや実行されるべきコードがない場合には、処理300はステップ325で終了する。
CPUへの例示的なメモリマッピング
図4はシステムメモリ内及び1つのCPUコアのキャッシュメモリ内の例示的なメモリ配置を示している。401は、例えば、システムメモリ103内での配置であって、GPU102のようなGPU上で実行されるものと当初書き込まれたGPUカーネルに対応するメモリ割り当ての配置を示している。402は、単一のCPUコアのキャッシュ内、例えばCPU101におけるキャッシュ143,144内での対応するメモリ配置を示している。
例えば、GPU102の場合、ローカルメモリ411及び421はそれぞれローカルメモリ114及び115に対応し得る。プライベートメモリ412、413、422、及び423は、それぞれGPU102のプライベートメモリ131、132、133、及び134に対応し得る。定数メモリ(即ち定数パラメータが記憶されるメモリ領域)431は、グラフィクスメモリ107及び/又はGPUグローバルキャッシュメモリ110に対応し得る。402に示されるように、CPUコアのキャッシュは、1つのローカルメモリブロックと、ワークグループ内の各ワークアイテムのための1つのブロックに対応する一連のプライベートメモリブロックと、定数メモリ領域とを有していてよい。幾つかの実施形態では、CPUコアによる処理のために必要とされるローカルメモリ、プライベートメモリ、及び定数メモリを有することは、CPUコアのキャッシュ内で利用可能な全てに対して特に有用であり、その結果、システムメモリ103へのアクセスに伴う遅延が低減され得る。
401に示されるように、GPU102のそれぞれローカルメモリ114及び115をエミュレート(emulates)するように、ローカルメモリ411及び421の各々に対してシステムメモリの連続する領域が割り当てられてよい。GPUカーネルコードによってアクセスされるローカルメモリアドレスは、この割り当てられた領域内でのオフセットへとトランスレートされ得る。システムメモリ内に割り当てられるローカルメモリの全体サイズはM(ワークグループ毎のローカルメモリサイズ)であってよく、ここでMはCPUコアの数である。プライベートメモリの全体サイズはM(ワークアイテム毎のプライベートメモリのサイズ)であってよく、ここでMはコアの数、Nはワークグループ毎のワークアイテムの数である。
追加されるデバッグ能力のために、本発明の幾つかの実施形態は、システムメモリ内の別個のメモリ割り当ての間にガードページ(guard pages)を含み得る。例えば、ガードページ441、442、443、444、445、及び446が、異なるOSスレッドに対する割り当ての間の他、同一スレッドに対する異なるメモリ割り当ての間に挿入されてよい。例示的な実装においては、命令がメモリのガードページ領域にアクセスすることを試みるたびに、レジスタがセットされてよい。メモリアクセスエラーの高速な検出は、多数の並列スレッドが実質的に並列に実行されるアプリケーションにおいて特に有用であり得る。
CPU上でのワークアイテムの例示的なスケジューリング
図5は本発明の実施形態に従いステップ317を実装する処理ステップ501〜527を示している。ステップ501では、ワークグループスレッドがスケジューリングされる。上述したように、本発明の実施形態は、多重ユーザレベルスレッドがスケジューリングされる各CPUコア上で単一のオペレーティングシステムスレッドを作成する。例えばGPUカーネルの20個のインスタンス1,…,20がスケジューリングされるべきである場合、GPUカーネルスレッド1,…,10(ワークアイテム1,…,10として)はコア141に対してスケジューリングされてよく、そしてGPUカーネルスレッド11,…,20(ワークアイテム11,…,20として)はコア142に対してスケジューリングされてよい。ワークアイテム1,…,10及び11,…,20は、それぞれワークグループ1及びワークグループ2へ集められてよい。上述したように、各ワークグループは1つのOSスレッドとして実装されるので、ワークグループ1及び2をそれぞれ実装するために、コア141及び142の各々上で1つのOSスレッドが作成され得る。
ステップ503では、GPUカーネルが他の並列実行中のGPUカーネルとの同期を必要としているかどうかが決定される。例えば、OpenCLコードは、barrier( )関数への1つ以上の呼び出しを含んでいてよい。同期のためのそのような呼び出しが存在する場合、GPUカーネルが同期を必要としていると決定され、そうでない場合には、GPUカーネルは同期を必要としていないであろう。
GPUカーネルが同期を必要としていないと決定された場合、GPUカーネルは、インスタンスが要求した番号に従って始めから終りまで実行されるようにスケジューリングされる。例えば、ステップ501で作成されたOSスレッドの各々において、予め定められた数のGPUカーネル、又はワークアイテムが、ユーザレベルスレッドとして実行されるようにスケジューリングされる。ワークアイテムの間で同期は必要ないので、各ワークアイテムは始めから終りまで実行されるようにスケジューリングされる。
ワークアイテムユーザスレッドの実行がステップ505で完了すると、例えばコールバック機能の使用によって、OpenCL実行フレームワークが通知されてよい。ワークアイテムが実行を完了した旨の通知がステップ507でなされると、ステップ509において、ワークグループ内の次のワークアイテムが、ユーザレベルスレッドとしての実行のためにスケジューリングされてよい。OpenCL実行フレームワークはまた、1つ以上の状態パラメータに定期的にクエリを行って(query)、ワークアイテムが実行を完了したかどうかを決定することができる。スケジューリングされるべきワークアイテムがもはやワークグループ内に残っていないと、そのワークグループは実行を完了したことになる。
尚、幾つかの実施形態においては、2つ以上のワークグループが、次々とシリアルに実行されるべく各CPUコア上でスケジューリングされ得る。ステップ509で、実行中のワークグループの全てのワークアイテムが実行を完了したと決定されると、ステップ511において、現在のコア上で実行されるべき他のワークグループがあるかどうかが決定される。現在のCPUコア上でスケジューリングされるべき更なるワークグループがある場合には、次のワークグループが実行のためにスケジューリングされる。別のワークグループをスケジューリングすることは、現在のCPUコア上で現在実行中のOSスレッドに対してメモリ割り当てを再初期化することを含んでいてよい。尚、本発明の実施形態においては、メモリ割り当てはOSスレッドが作成されたときに一回なされればよく、そして一般的にはそのOSスレッドに割り当てられる各ワークグループに対する再割り当てを必要としない。
ステップ503において、同期が必要であると決定されると、GPUカーネルは、インスタンスが要求した番号に従って始めから次の同期点(例えばbarrier( )呼び出し)まで実行されるようにスケジューリングされる。例えば、ステップ513において、ワークアイテムのユーザレベルスレッドが、始めから次に生じるbarrier( )への呼び出しまで実行されるようにスケジューリングされる。barrier( )への呼び出しに遭遇すると、実行中のスレッドの状態が保存されてよい。1つの実施形態では、setjmp( )のような関数呼び出しが、ユーザレベルスレッドの状態を保存するために用いられ得る。保存されているスレッドの状態は、レジスタの内容、例えばスタックポインタ、フレームポインタ、及びプログラムカウンタを含み得る。各ワークアイテムユーザレベルスレッドの状態は、システムメモリ、例えばシステムメモリ103の領域内、又は永続的メモリ、例えば永続的メモリ104内に保存され得る。
ステップ515で実行中ワークアイテムスレッドが同期点に達すると、ステップ517において更なるワークアイテムが現在のワークグループ内でスケジューリングされるべきかどうかが決定される。ステップ515でワークアイテムユーザレベルスレッドの実行が同期点に達すると、例えばコールバック機能を用いてOpenCL実行フレームワークが通知されてよい。ワークアイテムが同期点に達した旨の通知がステップ515でなされると、ステップ517において、ワークグループ内の次のワークアイテムが、ユーザレベルスレッドとしての実行のためにスケジューリングされてよい。OpenCL実行フレームワークはまた、1つ以上の状態パラメータに定期的にクエリを行って、ワークアイテムが同期点に達したかどうかを決定することができる。スケジューリングされるべきワークアイテムがもはやワークグループ内に残っていないと、ワークグループは、同期点までの各ワークアイテムを実行することを完了したことになる。
ステップ519において、スレッド実行の終わりに到達する前にワークアイテムが更なる同期点を有しているものと決定されると、現在の同期点から次の同期点まで実行されるように各ワークアイテムに対してステップ513〜519が繰り返される。
ステップ519において、ワークグループ内のワークアイテムがもはや同期点を有していないと決定されると、ステップ521において、同期点に達したワークアイテムの1つがその点から終わりまで実行されるようにスケジューリングされる。ワークアイテムスレッドが同期点から終わりまで実行されるようにスケジューリングすることは、スレッドの状態を回復することを含み得る。1つの実施形態では、setjmp( )を用いて先に保存されたスレッドの状態を回復するために、longjmp( )のような関数呼び出しが用いられ得る。尚、setjmp( )及びlongjmp( )は、処理又はスレッドの状態を保存すること及び回復することとそれぞれ同一であると伝統的にみなされる関数名である。
ステップ523では、実行中のワークアイテムスレッドが実行を完了したかどうかが決定される。ステップ507に関連して説明したように、ワークアイテムスレッドが実行を完了したかどうかの決定は、コールバック機能又は定期的なクエリに基づき得る。ワークアイテムが実行を完了したと決定されると、ステップ525において、更なるワークアイテムスレッドが、最後に遭遇した同期点から終わりまで実行されるべきかどうかが決定される。実行されるべきである場合には、次のワークアイテムがスケジューリングされ、そして実行されるべき各ワークアイテムに対してステップ521〜525が繰り返される。
ワークグループのワークアイテムスレッドの全てが実行を完了したならば、ステップ527において、現在選択されているCPUコア上で他のワークグループがスケジューリングされるべきかどうかが決定される。他のワークグループがスケジューリングされるべきである場合には、他のワークグループの各々に対してステップ513〜527が繰り返される。
図6はワークアイテムスレッド実行をグラフ的に示している。601においては、ワークアイテムスレッドWi,…Win−1は、ワークグループの全てのワークアイテムが始めから終りまで実行されるまで次々に実行される。601は、同期が必要とされない場合を示している。602においては、ワークアイテムスレッドWi,…Win−1は、ワークグループの全てのワークアイテムが始めから最初の同期点まで実行されるまで次々に実行され、最初の同期点はここではbarrier( )への呼び出しと共に表示されている。ワークグループの全てのワークアイテムが始めからbarrier( )まで実行された後、これらのワークアイテムの各1つが、当該同期点から終りまで次々と実行される。
結論
概要及び要約の部は、発明者によって検討された本発明の1つ以上のしかし全部ではない例示的な実施形態を記述することができ、従って本発明及び添付の特許請求の範囲を限定することが意図されているわけではけっしてない。
特定の機能及びそれらの関係性の実装を示す機能構築ブロックを補助として、本発明が上述のように説明されてきた。これらの機能構築ブロックの境界は、説明の便宜上ここでは適宜画定されてきた。特定の機能及びそれらの関係が適切に実行される限りにおいて、代替的な境界が画定されてよい。
特定の実施形態の上述した説明は、本発明の一般的性質を十分に明らかにするであろうから、他者は、当業者の知識を適用することによって、過度の実験を必要とせず、本発明の概略的概念から逸脱することなく、そのような特定の実施形態を容易に修正し且つ/又は種々の応用に適用することができる。従って、そのような適用及び修正は、ここで提示されている教示及び指針に基いて、開示されている実施形態と均等なものの意味及び範囲の範疇にあることが意図されている。ここでの用語等は、本明細書の用語等が教示及び指針の下で当業者によって解釈されるべきであるという点において、説明を目的としたものであって限定を目的としていないことが理解されるべきである。
本発明の広さ及び範囲は、上述したいかなる例示的な実施形態によっても限定されるべきではなく、以下の特許請求の範囲及びそれらと均等なものに従ってのみ画定されるべきである。

Claims (15)

  1. 複数の並列スレッドを実行するための方法であって、
    (a)前記複数の並列スレッドを少なくとも2つのワークグループにグループ化することであって、各ワークグループはプロセッサのプロセッサコアに割り当てられることと、
    (b)前記少なくとも2つのワークグループからの第1のワークグループを、第1のプロセッサコア上で実行するように構成された第1のオペレーティングシステムスレッドに関連付けることと、
    (c)第2のプロセッサに関連するメモリ階層を前記第1のプロセッサコアに関連するメモリにマッピングすることと、
    (d)前記第1のオペレーティングシステムスレッド内の前記第1のワークグループからの並列スレッドをスケジューリングすることであって、前記スケジューリングすることは、前記第1のワークグループからの前記並列スレッドを同期点に至るまで実行するように構成することと、前記第1のワークグループからの前記並列スレッドの全てが前記同期点に達した後に、前記第1のワークグループからの前記並列スレッドの各々を、前記同期点からの実行を再開するように構成することとを含む、ことと、
    を備えた方法。
  2. ステップ(d)は、
    前記第1のワークグループからの前記並列スレッドを、スレッドのサブセットにグループ化することと、
    前記プロセッサコアによって実行される第1のサブセットを、前記サブセットから構成することと、
    前記第1のサブセットが実行を完了した後に、前記プロセッサコアによって実行される第2のサブセットを、前記サブセットから構成することとを備える請求項1の方法。
  3. 前記少なくとも2つのワークグループからの第2のワークグループを、第2のプロセッサコア上の第2のオペレーティングシステムスレッドに関連付けることと、
    前記第2のオペレーティングシステムスレッド内の前記第2のワークグループからの並列スレッドを構成することとを更に備え、
    前記第1及び第2のワークグループは同時に実行される、請求項1の方法。
  4. ステップ(d)は、
    前記同期点に達した場合に前記第1のワークグループからの前記並列スレッドごとの状態を保存することと、
    前記実行を再開するのに先立ち前記第1のワークグループからの前記並列スレッドごとの前記状態を回復することとを更に備える請求項1の方法。
  5. 前記第1のワークグループからの前記並列スレッドのための同期点を定義することを備え、前記定義することは、前記第1のワークグループからの前記並列スレッドのためのコード内に同期呼び出しを挿入することを備える請求項1の方法。
  6. 前記第1のプロセッサコアは制御処理ユニット(CPU)コアである請求項1の方法。
  7. 前記第1のワークグループの前記並列スレッドはグラフィクス処理ユニット(GPU)カーネルである請求項1の方法。
  8. 前記マッピングすることは、
    前記第1のプロセッサコアに結合されるシステムメモリ内の複数の第1の領域を割り当てることと、
    前記第1のプロセッサコアに結合されるシステムメモリ内の複数の第2の領域を割り当てることとを備え、
    前記第1の領域の各々は前記第1のワークグループからの1つのスレッドによってアクセス可能なプライベートメモリに対応し、各前記第2の領域は前記第1のワークグループからの全部のスレッドに関連するローカルメモリに対応する請求項の方法。
  9. 前記マッピングすることは、
    前記複数の第1の領域からの第1の領域の各ペアの間にガードページを割り当てることと、
    前記複数の第2の領域からの第2の領域の各ペアの間にガードページを割り当てることとを更に備える請求項の方法。
  10. 前記マッピングすることは、前記第1のプロセッサコアに結合されるキャッシュメモリ内にキャッシュ領域を形成することを更に備え、
    前記キャッシュ領域は前記第1の領域の少なくとも1つ及び第2の領域の内容を備える請求項の方法。
  11. グラフィクス処理ユニット(GPU)カーネルを実行するための方法であって、
    GPU上での実行のために前もって構成された前記GPUカーネルであって前記GPU上の複数の並列スレッドをインスタンス化するように構成される前記GPUカーネルをホストプロセッサにロードすることと、
    前記複数の並列スレッドを少なくとも2つのワークグループにグループ化することであって、各ワークグループは前記ホストプロセッサのプロセッサコアに割り当てられることと、
    第1のワークグループを、前記ホストプロセッサコアに結合された第1のプロセッサコアの第1のオペレーティングスレッドに関連付けることであって、前記第1のオペレーティングスレッドは、前記プロセッサコアのうち1つのプロセッサコア上でのみ実行するように構成されていることと、
    前記GPUに関連するメモリ階層を、前記プロセッサコアに関連するシステムメモリにマッピングすることと、
    前記第1のオペレーティングシステムスレッド内の前記第1のワークグループからの並列スレッドをスケジューリングすることであって、前記スケジューリングすることは、前記第1のワークグループからの前記並列スレッドを同期点に至るまで実行するように構成することと、前記第1のワークグループからの前記並列スレッドの全てが前記同期点に達した後に、前記第1のワークグループからの前記並列スレッドの各々を、前記同期点からの実行を再開するように構成することとを含む、ことと、
    を備えた方法。
  12. 前記GPUに結合される前記メモリ階層からの割り当てを前記1つ以上のプロセッサコアに結合される前記システムメモリへとマッピングすることを更に備えた請求項11の方法。
  13. 複数の並列スレッドを実行するためのシステムであって、
    プロセッサコアを含む少なくとも1つのプロセッサと、
    前記プロセッサコアに結合される少なくとも1つのメモリと、
    前記少なくとも1つのメモリ及び前記少なくとも1つのプロセッサに結合されるグラフィクス処理ユニット(GPU)カーネルスケジューラとを備え、
    前記GPUカーネルスケジューラは、
    前記複数の並列スレッドを少なくとも2つのワークグループにグループ化することであって、各ワークグループはプロセッサのプロセッサコアに割り当てられることと、
    前記少なくとも2つのワークグループからの第1のワークグループを、第1のプロセッサコア上で実行するように構成された第1のオペレーティングシステムスレッドに関連付けることと、
    第2のプロセッサに関連するメモリ階層を、前記プロセッサコアに関連するメモリにマッピングすることと、
    前記第1のオペレーティングシステムスレッド内の前記第1のワークグループからの並列スレッドをスケジューリングすることであって、前記スケジューリングすることは、前記第1のワークグループからの前記並列スレッドを同期点に至るまで実行するように構成することと、前記第1のワークグループからの前記並列スレッドの全てが前記同期点に達した後に、前記第1のワークグループからの前記並列スレッドの各々を、前記同期点からの実行を再開するように構成することとを含む、ことと、
    のために構成されるシステム。
  14. 前記グラフィクス処理ユニットカーネルスケジューラは、
    前記第1のワークグループからの並列スレッドを、スレッドのサブセットにグループ化することと、
    第1のサブセットを実行のために構成することと、
    前記第1のサブセットが実行を完了した後に第2のサブセットを実行のために構成することとのために更に構成される請求項13のシステム。
  15. 前記プロセッサは、制御処理ユニット(CPU)である、請求項13のシステム。
JP2012522920A 2009-07-27 2010-07-23 データ並列スレッドを有する処理論理の複数のプロセッサにわたるマッピング Active JP5934094B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/509,763 US9354944B2 (en) 2009-07-27 2009-07-27 Mapping processing logic having data-parallel threads across processors
US12/509,763 2009-07-27
PCT/US2010/043078 WO2011017026A1 (en) 2009-07-27 2010-07-23 Mapping processing logic having data parallel threads across processors

Publications (2)

Publication Number Publication Date
JP2013500543A JP2013500543A (ja) 2013-01-07
JP5934094B2 true JP5934094B2 (ja) 2016-06-15

Family

ID=42989500

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012522920A Active JP5934094B2 (ja) 2009-07-27 2010-07-23 データ並列スレッドを有する処理論理の複数のプロセッサにわたるマッピング

Country Status (8)

Country Link
US (1) US9354944B2 (ja)
EP (1) EP2460073B8 (ja)
JP (1) JP5934094B2 (ja)
KR (1) KR101759266B1 (ja)
CN (1) CN102576314B (ja)
IN (1) IN2012DN00929A (ja)
TW (1) TWI525540B (ja)
WO (1) WO2011017026A1 (ja)

Families Citing this family (86)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10621092B2 (en) 2008-11-24 2020-04-14 Intel Corporation Merging level cache and data cache units having indicator bits related to speculative execution
US9672019B2 (en) 2008-11-24 2017-06-06 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US9734545B2 (en) * 2009-10-08 2017-08-15 Nvidia Corporation Software methods in a GPU
US8516450B2 (en) * 2010-03-19 2013-08-20 Oracle International Corporation Detecting real-time invalid memory references
CN101799773B (zh) * 2010-04-07 2013-04-17 福州福昕软件开发有限公司 并行计算的内存访问方法
FR2958765B1 (fr) * 2010-04-09 2012-04-13 Commissariat Energie Atomique Memoire cache segmentee.
US8723877B2 (en) * 2010-05-20 2014-05-13 Apple Inc. Subbuffer objects
US9645866B2 (en) 2010-09-20 2017-05-09 Qualcomm Incorporated Inter-processor communication techniques in a multiple-processor computing platform
US9823991B2 (en) * 2010-12-06 2017-11-21 International Business Machines Corporation Concurrent workload simulation for application performance testing
US8645920B2 (en) * 2010-12-10 2014-02-04 Microsoft Corporation Data parallelism aware debugging
US8949777B2 (en) 2011-04-22 2015-02-03 Intel Corporation Methods and systems for mapping a function pointer to the device code
US8683468B2 (en) * 2011-05-16 2014-03-25 Advanced Micro Devices, Inc. Automatic kernel migration for heterogeneous cores
US9092267B2 (en) * 2011-06-20 2015-07-28 Qualcomm Incorporated Memory sharing in graphics processing unit
US9176773B2 (en) * 2011-06-29 2015-11-03 Microsoft Technology Licensing, Llc Virtual machine migration tool
US10013731B2 (en) * 2011-06-30 2018-07-03 Intel Corporation Maximizing parallel processing in graphics processors
US9195501B2 (en) 2011-07-12 2015-11-24 Qualcomm Incorporated Instruction culling in graphics processing unit
KR101818760B1 (ko) * 2011-07-22 2018-01-15 삼성전자주식회사 시뮬레이션 장치 및 그의 시뮬레이션 방법
JP5725181B2 (ja) * 2011-07-29 2015-05-27 富士通株式会社 割当方法、およびマルチコアプロセッサシステム
CN102307198A (zh) * 2011-08-30 2012-01-04 苏州阔地网络科技有限公司 一种音视频数据的传输方法
CN102333226A (zh) * 2011-09-01 2012-01-25 苏州阔地网络科技有限公司 一种音视频数据传输方法
WO2013048468A1 (en) 2011-09-30 2013-04-04 Intel Corporation Instruction and logic to perform dynamic binary translation
US8935671B2 (en) * 2011-10-11 2015-01-13 Apple Inc. Debugging a graphics application executing on a target device
US9239793B2 (en) * 2011-12-13 2016-01-19 Ati Technologies Ulc Mechanism for using a GPU controller for preloading caches
US8707314B2 (en) * 2011-12-16 2014-04-22 Advanced Micro Devices, Inc. Scheduling compute kernel workgroups to heterogeneous processors based on historical processor execution times and utilizations
US20140019723A1 (en) * 2011-12-28 2014-01-16 Koichi Yamada Binary translation in asymmetric multiprocessor system
US9348594B2 (en) 2011-12-29 2016-05-24 Intel Corporation Core switching acceleration in asymmetric multiprocessor system
KR101332839B1 (ko) 2012-01-05 2013-11-27 서울대학교산학협력단 병렬 컴퓨팅 프레임워크 기반 클러스터 시스템의 호스트 노드 및 메모리 관리 방법
KR101284195B1 (ko) 2012-01-09 2013-07-10 서울대학교산학협력단 개방형 범용 병렬 컴퓨팅 프레임워크 동적 작업 분배 장치
US9128949B2 (en) * 2012-01-18 2015-09-08 Cloudera, Inc. Memory allocation buffer for reduction of heap fragmentation
US9430807B2 (en) 2012-02-27 2016-08-30 Qualcomm Incorporated Execution model for heterogeneous computing
US9721091B2 (en) * 2012-02-28 2017-08-01 Red Hat Israel, Ltd. Guest-driven host execution
WO2013147881A1 (en) * 2012-03-30 2013-10-03 Intel Corporation Mechanism for issuing requests to an accelerator from multiple threads
CN108681519B (zh) * 2012-03-30 2022-04-08 英特尔公司 用于从多线程发送请求至加速器的机制
US9513975B2 (en) * 2012-05-02 2016-12-06 Nvidia Corporation Technique for computational nested parallelism
US9223381B2 (en) * 2012-08-24 2015-12-29 Samsung Electronics Co., Ltd. Method and apparatus to save power upon resume in multi-core system
JP2014149765A (ja) * 2013-02-04 2014-08-21 Toshiba Corp コンパイラ、オブジェクトコード生成方法、情報処理装置及び情報処理方法
US8966510B2 (en) 2013-02-04 2015-02-24 International Business Machines Corporation Kernel execution for hybrid systems
KR101694302B1 (ko) * 2013-03-11 2017-01-23 한국전자통신연구원 이기종 멀티코어 프로세서 시스템의 관리 장치 및 방법
KR102062208B1 (ko) * 2013-05-03 2020-02-11 삼성전자주식회사 멀티스레드 프로그램 코드의 변환 장치 및 방법
CN104969167B (zh) * 2013-05-31 2018-01-09 株式会社日立制作所 控制装置及控制方法
US9633408B2 (en) * 2013-06-14 2017-04-25 Microsoft Technology Licensing, Llc Coalescing graphics operations
US9645820B2 (en) * 2013-06-27 2017-05-09 Intel Corporation Apparatus and method to reserve and permute bits in a mask register
US9405937B2 (en) 2013-06-28 2016-08-02 Intel Corporation Method and apparatus for securing a dynamic binary translation system
KR101569093B1 (ko) * 2013-08-13 2015-11-13 삼성에스디에스 주식회사 분산 시스템에서 데이터를 처리하는 방법
US9891936B2 (en) 2013-09-27 2018-02-13 Intel Corporation Method and apparatus for page-level monitoring
TWI625622B (zh) 2013-10-31 2018-06-01 聯想企業解決方案(新加坡)有限公司 在多核心處理器系統與運作多核心處理器系統的電腦實施方法
GB2521151B (en) * 2013-12-10 2021-06-02 Advanced Risc Mach Ltd Configurable thread ordering for a data processing apparatus
US9589311B2 (en) * 2013-12-18 2017-03-07 Intel Corporation Independent thread saturation of graphics processing units
US9916162B2 (en) * 2013-12-26 2018-03-13 Intel Corporation Using a global barrier to synchronize across local thread groups in general purpose programming on GPU
US9588804B2 (en) * 2014-01-21 2017-03-07 Qualcomm Incorporated System and method for synchronous task dispatch in a portable device
KR102114245B1 (ko) 2014-04-10 2020-06-05 삼성전자 주식회사 그래픽스 상태 관리 장치 및 방법
US9558094B2 (en) * 2014-05-12 2017-01-31 Palo Alto Research Center Incorporated System and method for selecting useful smart kernels for general-purpose GPU computing
US10332229B2 (en) 2014-05-12 2019-06-25 Palo Alto Research Center Incorporated System and method for high performance k-means clustering on GPU with smart kernels
EP2950214B1 (fr) * 2014-05-23 2024-04-03 Kalray Barriere de synchronisation materielle entre elements de traitement
US9442706B2 (en) * 2014-05-30 2016-09-13 Apple Inc. Combining compute tasks for a graphics processing unit
US10061591B2 (en) 2014-06-27 2018-08-28 Samsung Electronics Company, Ltd. Redundancy elimination in single instruction multiple data/thread (SIMD/T) execution processing
US10061592B2 (en) 2014-06-27 2018-08-28 Samsung Electronics Co., Ltd. Architecture and execution for efficient mixed precision computations in single instruction multiple data/thread (SIMD/T) devices
US11030105B2 (en) * 2014-07-14 2021-06-08 Oracle International Corporation Variable handles
CN105793833B (zh) * 2014-09-18 2019-08-06 上海兆芯集成电路有限公司 处理器及其操作方法、计算机可读存储介质
CN104331302B (zh) * 2014-09-29 2018-10-02 华为技术有限公司 一种应用更新方法、移动终端和通信系统
US10423414B2 (en) * 2014-11-12 2019-09-24 Texas Instruments Incorporated Parallel processing in hardware accelerators communicably coupled with a processor
KR102315279B1 (ko) 2014-11-28 2021-10-20 삼성전자 주식회사 작업 그룹의 크기를 결정하는 장치 및 방법
CN105893319A (zh) * 2014-12-12 2016-08-24 上海芯豪微电子有限公司 一种多车道/多核系统和方法
US9965343B2 (en) * 2015-05-13 2018-05-08 Advanced Micro Devices, Inc. System and method for determining concurrency factors for dispatch size of parallel processor kernels
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
CN105786523B (zh) * 2016-03-21 2019-01-11 北京信安世纪科技股份有限公司 数据同步系统及方法
CN107450968B (zh) * 2016-05-31 2020-09-08 华为技术有限公司 负载还原方法、装置和设备
US10146583B2 (en) * 2016-08-11 2018-12-04 Samsung Electronics Co., Ltd. System and method for dynamically managing compute and I/O resources in data processing systems
KR102576707B1 (ko) 2016-12-26 2023-09-08 삼성전자주식회사 전자 시스템 및 그 동작 방법
KR102592330B1 (ko) * 2016-12-27 2023-10-20 삼성전자주식회사 OpenCL 커널을 처리하는 방법과 이를 수행하는 컴퓨팅 장치
US11353868B2 (en) * 2017-04-24 2022-06-07 Intel Corporation Barriers and synchronization for machine learning at autonomous machines
GB2566514B (en) * 2017-09-15 2020-01-08 Imagination Tech Ltd Resource allocation
CN111480150A (zh) * 2017-11-02 2020-07-31 芯力能简易股份公司 用于控制引擎调试、测试、校准和调节的软件环境
CN108319459B (zh) * 2018-02-12 2022-04-29 芯峰科技(广州)有限公司 一种行为级描述到rtl描述的ccc编译器
WO2019157743A1 (zh) * 2018-02-14 2019-08-22 华为技术有限公司 线程处理方法和图形处理器
US11010888B2 (en) 2018-10-29 2021-05-18 International Business Machines Corporation Precision defect detection based on image difference with respect to templates
US11093580B2 (en) * 2018-10-31 2021-08-17 Advanced Micro Devices, Inc. Matrix multiplier with submatrix sequencing
US10957032B2 (en) 2018-11-09 2021-03-23 International Business Machines Corporation Flexible visual inspection model composition and model instance scheduling
US11107263B2 (en) * 2018-11-13 2021-08-31 Intel Corporation Techniques to manage execution of divergent shaders
US11392687B2 (en) * 2019-01-04 2022-07-19 Baidu Usa Llc Method and system for validating kernel objects to be executed by a data processing accelerator of a host system
US11726820B2 (en) * 2019-05-03 2023-08-15 EMC IP Holding Company, LLC Peeking and polling storage management system and method
US11567555B2 (en) * 2019-08-30 2023-01-31 Intel Corporation Software assisted power management
KR102224446B1 (ko) * 2019-10-14 2021-03-09 이화여자대학교 산학협력단 Gpgpu 스레드 블록 스케줄링 확장 방법 및 장치
KR102275529B1 (ko) * 2019-12-23 2021-07-09 주식회사 텔레칩스 멀티-마스터를 지원하는 그래픽 처리 장치를 공유하는 시스템 온 칩 및 그래픽 처리 장치의 동작 방법
KR102484563B1 (ko) * 2021-03-15 2023-01-04 숙명여자대학교산학협력단 다중 작업 효율화 방법 및 장치
US11556355B2 (en) * 2021-06-02 2023-01-17 Sap Se Application function library for cloud systems

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6729699B1 (en) * 2000-10-04 2004-05-04 International Business Machines Corporation Invocation map based architecture for program execution
US6865738B2 (en) * 2002-10-08 2005-03-08 Sun Microsystems, Inc. Method and apparatus for managing independent asynchronous I/O operations within a virtual machine
US20040231000A1 (en) * 2003-02-18 2004-11-18 Gossalia Anuj B. Video aperture management
JP4057989B2 (ja) 2003-09-26 2008-03-05 株式会社東芝 スケジューリング方法および情報処理システム
US20050198464A1 (en) * 2004-03-04 2005-09-08 Savaje Technologies, Inc. Lazy stack memory allocation in systems with virtual memory
US7240182B2 (en) * 2004-09-16 2007-07-03 International Business Machines Corporation System and method for providing a persistent function server
JP4448784B2 (ja) * 2005-03-15 2010-04-14 株式会社日立製作所 並列計算機の同期方法及びプログラム
US8028295B2 (en) 2005-09-30 2011-09-27 Intel Corporation Apparatus, system, and method for persistent user-level thread
US7861060B1 (en) * 2005-12-15 2010-12-28 Nvidia Corporation Parallel data processing systems and methods using cooperative thread arrays and thread identifier values to determine processing behavior
US7788468B1 (en) * 2005-12-15 2010-08-31 Nvidia Corporation Synchronization of threads in a cooperative thread array
US8077174B2 (en) * 2005-12-16 2011-12-13 Nvidia Corporation Hierarchical processor array
US8074224B1 (en) * 2005-12-19 2011-12-06 Nvidia Corporation Managing state information for a multi-threaded processor
US7916864B2 (en) * 2006-02-08 2011-03-29 Nvidia Corporation Graphics processing unit used for cryptographic processing
US7925860B1 (en) * 2006-05-11 2011-04-12 Nvidia Corporation Maximized memory throughput using cooperative thread arrays
JP4493626B2 (ja) 2006-05-25 2010-06-30 株式会社ソニー・コンピュータエンタテインメント マルチプロセッサシステム、ライブラリモジュール、および描画処理方法
US7623134B1 (en) * 2006-06-15 2009-11-24 Nvidia Corporation System and method for hardware-based GPU paging to system memory
US20080034179A1 (en) * 2006-08-03 2008-02-07 Mewhinney Greg R Guard bands in very large virtual memory pages
US8860741B1 (en) * 2006-12-08 2014-10-14 Nvidia Corporation Graphics processor with memory management unit and cache coherent link
US8549500B2 (en) * 2007-02-14 2013-10-01 The Mathworks, Inc. Saving and loading graphical processing unit (GPU) arrays providing high computational capabilities in a computing environment
US8286196B2 (en) 2007-05-03 2012-10-09 Apple Inc. Parallel runtime execution on multiple processors
US8341611B2 (en) * 2007-04-11 2012-12-25 Apple Inc. Application interface on multiple processors
US7743232B2 (en) 2007-07-18 2010-06-22 Advanced Micro Devices, Inc. Multiple-core processor with hierarchical microcode store
US8370845B1 (en) * 2007-08-08 2013-02-05 Nvidia Corporation Method for synchronizing independent cooperative thread arrays running on a graphics processing unit
JP2009059181A (ja) 2007-08-31 2009-03-19 Mitsubishi Electric Corp マルチプロセッサシステム
US8339404B2 (en) 2007-11-29 2012-12-25 Accelereyes, Llc System for improving utilization of GPU resources
US8184120B2 (en) * 2008-05-19 2012-05-22 Siemens Aktiengesellschaft Framework for processing and rendering large volume data
US8225325B2 (en) * 2008-06-06 2012-07-17 Apple Inc. Multi-dimensional thread grouping for multiple processors
US8286198B2 (en) * 2008-06-06 2012-10-09 Apple Inc. Application programming interfaces for data parallel computing on multiple processors
US8516454B2 (en) * 2008-07-10 2013-08-20 Rocketick Technologies Ltd. Efficient parallel computation of dependency problems
EP2192780A1 (en) * 2008-11-28 2010-06-02 Thomson Licensing Method for video decoding supported by Graphics Processing Unit
US20100156888A1 (en) * 2008-12-23 2010-06-24 Intel Corporation Adaptive mapping for heterogeneous processing systems
US8607234B2 (en) * 2009-07-22 2013-12-10 Empire Technology Development, Llc Batch scheduling with thread segregation and per thread type marking caps

Also Published As

Publication number Publication date
JP2013500543A (ja) 2013-01-07
EP2460073A1 (en) 2012-06-06
CN102576314B (zh) 2016-08-03
CN102576314A (zh) 2012-07-11
EP2460073B1 (en) 2018-04-11
EP2460073B8 (en) 2018-05-16
TW201112118A (en) 2011-04-01
KR20120054027A (ko) 2012-05-29
KR101759266B1 (ko) 2017-07-18
TWI525540B (zh) 2016-03-11
US9354944B2 (en) 2016-05-31
WO2011017026A1 (en) 2011-02-10
US20110022817A1 (en) 2011-01-27
IN2012DN00929A (ja) 2015-04-03

Similar Documents

Publication Publication Date Title
JP5934094B2 (ja) データ並列スレッドを有する処理論理の複数のプロセッサにわたるマッピング
Chen et al. GFlink: An in-memory computing architecture on heterogeneous CPU-GPU clusters for big data
Huang et al. Programming and runtime support to blaze FPGA accelerator deployment at datacenter scale
Shirahata et al. Hybrid map task scheduling for GPU-based heterogeneous clusters
EP3126971A1 (en) Program execution on heterogeneous platform
JP2019049843A (ja) 実行ノード選定プログラム、実行ノード選定方法及び情報処理装置
Grossman et al. SWAT: A programmable, in-memory, distributed, high-performance computing platform
Rubin et al. Maps: Optimizing massively parallel applications using device-level memory abstraction
JP7450728B2 (ja) 協調ワークスティーリングスケジューラ
US10496433B2 (en) Modification of context saving functions
Hoffmann et al. Dynamic task scheduling and load balancing on cell processors
Mantas et al. An introduction to GPU computing for numerical simulation
US8914779B2 (en) Data placement for execution of an executable
Peterson et al. Automatic halo management for the Uintah GPU-heterogeneous asynchronous many-task runtime
Vo et al. HyperFlow: A Heterogeneous Dataflow Architecture.
Valero et al. Towards a more efficient use of gpus
Rogers HSA overview
Ohno et al. Dynamic Task Scheduling Scheme for a GPGPU Programming Framework
Savadi et al. Multi-DaC programming model: A variant of multi-BSP model for divide-and-conquer algorithms
CN110879744B (zh) 利用多线程执行计算图的方法和系统
Li et al. swTVM: Towards Optimized Tensor Code Generation for Deep Learning on Sunway Many-Core Processor
Uddin Microgrid-The microthreaded many-core architecture
Masola et al. Memory-Aware Latency Prediction Model for Concurrent Kernels in Partitionable GPUs: Simulations and Experiments
Kim et al. Sophy+: Programming model and software platform for hybrid resource management of many-core accelerators
Liang et al. Automatically Migrating Sequential Applications to Heterogeneous System Architecture

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130723

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140730

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140902

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141128

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150512

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150810

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160506

R150 Certificate of patent or registration of utility model

Ref document number: 5934094

Country of ref document: JP

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