JP2014523021A - グラフィックス処理ユニットにおけるメモリの共有 - Google Patents

グラフィックス処理ユニットにおけるメモリの共有 Download PDF

Info

Publication number
JP2014523021A
JP2014523021A JP2014516973A JP2014516973A JP2014523021A JP 2014523021 A JP2014523021 A JP 2014523021A JP 2014516973 A JP2014516973 A JP 2014516973A JP 2014516973 A JP2014516973 A JP 2014516973A JP 2014523021 A JP2014523021 A JP 2014523021A
Authority
JP
Japan
Prior art keywords
workgroup
kernel
gpu
designations
workgroups
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
JP2014516973A
Other languages
English (en)
Other versions
JP5752853B2 (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.)
Qualcomm Inc
Original Assignee
Qualcomm 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 Qualcomm Inc filed Critical Qualcomm Inc
Publication of JP2014523021A publication Critical patent/JP2014523021A/ja
Application granted granted Critical
Publication of JP5752853B2 publication Critical patent/JP5752853B2/ja
Expired - Fee Related 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/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/5033Allocation 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 data affinity

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)

Abstract

本開示の態様は、グラフィックス処理ユニット(GPU)を用いてデータを処理するための方法に関する。本開示のいくつかの態様によれば、該方法は、シェーダプロセッサに関する実行順序を定義する入力を受信することを備え、実行順序は、複数のカーネル指定および複数のワークグループ指定を含む。該方法は、また、複数のワークグループ指定および複数のカーネル指定において識別されたカーネルのワークグループをシェーダプロセッサに割り当てることを含むことができる。この方法はまた、入力データを処理するために、シェーダプロセッサによって、複数のワークグループ指定および複数のカーネル指定において識別されたカーネルのワークグループを実行することを含むことができ、実行順序のストリームを実行することは、複数のワークグループ指定において識別された2つ以上のワークグループの間で入力データを共有することを含む。

Description

本開示は、グラフィックス処理ユニット(GPU)を用いてデータを処理することに関する。
グラフィックス処理デバイスは、様々な画像処理またはその他の汎用処理アプリケーションを実行するために実装され得る。例えば、グラフィックス処理ユニット(GPU、場合によっては、汎用グラフィックス処理ユニット(GPGPU)と呼ばれる)は、色補正アルゴリズム、顔検出アルゴリズム、パターン認識アルゴリズム、拡張現実アプリケーション、様々なアルゴリズム・アプリケーション(例えば、ウェーブレット変換、フーリエ変換など)、または様々なその他のアプリケーションのような、高度の並列化から恩恵を受けるアプリケーションを実行することができる。
一般的に、GPUは、GPU内に存在する1つまたは複数のシェーダプロセッサを用いて、シェーダ命令と呼ばれ得る、一連の命令を処理するように設計される。画像処理アプリケーションの一例において、シェーダ命令は、画像を構成するピクセル上でシェーダプロセッサによって実施されるべき1つまたは複数の数学的演算を定義することができる。ピクセルにシェーダ命令を適用することによって、ピクセル値は、シェーダ命令によって定義される数学的演算に従って変更されるか、または評価される。
シェーダ命令は、カーネルとして知られるシェーダプログラムコードに編成され得る。カーネルは、GPUによって実施される機能またはタスクを定義することができる。カーネルを実行するために、プログラムコードは、ワークアイテム(例えば、GPUにおけるワークの基本単位)に分割され、ワークアイテムは、1つまたは複数のワークグループ(例えば、ワークアイテムのセット)へと編成される。
一般的に、本開示の態様は、グラフィックス処理に関するカーネルおよびワークグループ実行順序(execution orders)の生成および処理に関する。カーネルおよびワークグループ実行順序は、グラフィックス処理ユニット(GPU)のシェーダプロセッサ(SP)に関連づけられたメモリリソースの管理を提供することができる。例えば、カーネルおよびワークグループ実行順序は、SPのローカルメモリリソースに記憶されたデータが異なるカーネルのワークグループによって共有されることを可能にする。一例において、本開示の態様は、グラフィックス処理ユニット(GPU)を用いてデータを処理する方法に関する。該方法は、シェーダプロセッサに関する実行順序を定義する入力を受信することを含み、実行順序は、複数のカーネル指定および複数のワークグループ指定を備える。該方法はまた、複数のワークグループ指定および複数のカーネル指定において識別されたカーネルのワークグループをシェーダプロセッサに割り当てることを含む。この方法はまた、入力データを処理するために、複数のワークグループ指定および複数のカーネル指定において識別されたカーネルのワークグループを、シェーダプロセッサによって実行することを含む。
別の例において、本開示の態様は、シーケンサ・モジュールを備えるグラフィックス処理ユニット(GPU)に関する。シーケンサ・モジュールは、シェーダプロセッサに関する実行順序を定義する入力を受信するように構成され、実行順序は、複数のカーネル指定および複数のワークグループ指定を備える。シーケンサ・モジュールはまた、複数のワークグループ指定および複数のカーネル指定において識別されたカーネルのワークグループをシェーダプロセッサに割り当てるように構成される。シェーダプロセッサは、入力データを処理するために、複数のワークグループ指定および複数のカーネル指定において識別されたカーネルのワークグループを実行するように構成される。
別の例において、本開示の態様は、コンピューティングデバイスの1つまたは複数のプログラマブルプロセッサにシェーダプロセッサに関する実行順序を定義する入力を受信させるための命令を用いて符号化されたコンピュータ可読記憶媒体に関し、実行順序は、複数のカーネル指定および複数のワークグループ指定を備える。該命令はまた、コンピューティングデバイスの1つまたは複数のプログラマブルプロセッサに複数のワークグループ指定および複数のカーネル指定において識別されたカーネルのワークグループをシェーダプロセッサに割り当てさせる。命令はまた、入力データを処理するために、コンピューティングデバイスの1つまたは複数のプログラマブルプロセッサに、複数のワークグループ指定および複数のカーネル指定において識別されたカーネルのワークグループを、シェーダプロセッサによって実行させる。
別の例において、本開示の態様は、シェーダプロセッサに関する実行順序を定義する入力を受信するための手段を備えるグラフィックス処理ユニット(GPU)に関し、実行順序は複数のカーネル指定および複数のワークグループ指定を備える。GPUはまた、複数のワークグループ指定および複数のカーネル指定において識別されたカーネルのワークグループをシェーダプロセッサに割り当てるための手段を備える。GPUはまた、入力データを処理するために、複数のワークグループ指定および複数のカーネル指定において識別されたカーネルのワークグループを、シェーダプロセッサによって実行するための手段を備える。
1つまたは複数の例の詳細は、添付の図面および以下の説明において示される。他の特徴、目的、および利点は、説明および図面、ならびに特許請求の範囲から明白であろう。
図1は、本開示の態様を実施するように構成されることができるグラフィックス処理ユニット(GPU)を有するコンピューティングデバイスを示すブロック図である。 図2は、本開示の態様による、GPUによって実行され得る、画像を処理するための命令に関連づけられた画像データを有する画像の例を示すブロック図である。 図3は、本開示の態様による、GPUによって実行され得る3つのカーネルを有するアプリケーションを示すブロック図である。 図4は、本開示の態様を実行するように構成され得るGPUを示すブロック図である。 図5は、本開示の態様による、第1のカーネル、第2のカーネル、および第3のカーネル146のワークグループを分配するように構成されたシーケンサ・モジュールの例を示すブロック図である。 図6は、本開示の態様による、第1のカーネル、第2のカーネル、および第3のカーネルのワークグループを分配するように構成されたシーケンサ・モジュールの例を示すブロック図である。 図7は、本開示の態様による、実行順序のストリームを割り当てる例を示すブロック図である。 図8は、本開示の態様による、実行順序の1つまたは複数のストリームを生成および実行する方法を示すフローチャートである。
詳細な説明
本開示の態様は、一般的に、GPGPUとして実装され得るGPUのシェーダプロセッサ(SP)による実行のためのシェーダ命令のストリームを定義および生成することに関する。通常、GPUは、1つまたは複数のシェーダプログラム(ここでは「カーネル」と呼ばれる)を実行するように設計された複数のSPを含む。カーネルは、様々な入力データを解析または修正するために実装され得る機能を定義する。例としては、比較的大きい数値データのセットを並列に処理するための機能が含まれる。画像処理のコンテキストにおいて、機能は、例えば、色補正アルゴリズム、顔検出アルゴリズム、または拡張現実アプリケーションを実行するための機能を含むことができる。その他の例は、変換機能、レイ・トレーシングに関する機能、または様々なその他の機能を含む。
カーネルは、複数のワークグループにグループ分けされる個々のワークアイテム(例えば、GPUにおけるワークの基本単位)を備える。GPUが画像(例えば、ビデオデータのフレーム、コンピュータ生成グラフィックス画像、静止画像等)を処理するために実装されるひとつの例では、入力データは画像であり、ワークアイテムは、その画像のピクセルを解析または修正するように構成される。複数のワークアイテムは、ワークグループ(例えば、ワークアイテムのセット)に編成され得る。したがって、画像処理の例において、ワークグループは、画像におけるピクセルの特定のグループに関連する命令を含み得る。
カーネルを実行するときには、GPUは、SPがワークグループを実行することができる前に、SPのローカルメモリに、ワークグループに関連づけられた入力データをロードする。一般的に、GPUがカーネルを実行するときには、GPUは、どのSPが特定のワークグループを実行するかを識別または制御することなくSPにカーネルのワークグループを割り当てる。例えば、GPUは、GPUアプリケーション開発者(例えば、コンピュータ・プログラマー)によって設定可能ではない固定パターンでSPにワークグループを分配するハードウェアを含み得る。こういった例において、GPUは、次のカーネルに進む前に、特定のカーネルに関連づけられた全てのワークグループを均一に分配し、実行することによって、複数のカーネルを有するアプリケーションを順次に実行する。
ワークグループデータは、通常、SP間で共有されない。例えば、SPは、GPU内の、通常は別々の、物理的に分離されたユニットであり、GPUアプリケーション開発者は、どのSPが特定のワークグループを実行するかを制御しない。従って、同じまたは実質的に同じ入力データを処理する複数のカーネルを有するアプリケーションでは、特定のワークグループに関連づけられた入力データは、異なるSPのローカルメモリにロードされる必要があり得る。例えば、GPUのどのSPが特定のカーネルの特定のワークグループを実行するかを制御する能力なしに、第2のカーネルのワークグループと同じ入力データを有する第1のカーネルのワークグループは、GPUの異なるSPによって処理され得る。
本開示の態様は、カーネルおよびワークグループ実行順序を生成および処理することに関する。カーネルおよびワークグループ実行順序は、GPUのSPに関連づけられたローカルメモリリソースの管理を支援する。例えば、GPUによって実行されるカーネルおよびワークグループ実行順序は、SPローカルメモリに記憶されたデータが異なるカーネルのワークグループによって共有されることを可能にする。カーネルおよびワークグループ実行順序は、「命令ストリーム」と呼ばれ得る。命令ストリームは、ひとつのカーネルのひとつのワークグループに関連づけられた入力データが、単一のSPを使用して他の複数のカーネルによって共有され直列的に実行され得るように、ワークグループとカーネルをつなぎ合わせ、または仮想的にリンクさせる。命令ストリームを生成することによって、入力データは、ローカルSPメモリ内にとどまることが可能であり、複数のカーネルのワークグループにとって利用可能であり得る。命令ストリームを作り出すと、同じデータを何度もフェッチするために算術論理ユニット(ALU)演算が必ずしも必要ではないので、メモリ帯域幅消費量ならびにSP算術論理ユニット(ALU)の演算が低減される。
いくつかの例において、カーネルおよびワークグループ実行順序は、GPUが、同じかまたは実質的に同じ入力データを処理する複数のカーネルを有するアプリケーションを実行しているときに有用である。ひとつの実施例において、GPUは、画像(例えば、ビデオデータのフレーム、コンピュータ生成グラフィックス画像、静止画像等)を処理するために実装されることができる。この例において、ワークアイテムは、画像の特定のピクセルに関連する命令に対応し得る。複数のワークアイテムは、画像のピクセルの特定のグループに関連する命令を含むワークグループへと編成され得る。ピクセルのグループに関連づけられたワークグループを処理するときには、GPUは、SPのローカルメモリにピクセルのグループに関連づけられた画像データをロードする。
GPUのどのSPが特定のワークグループを実行するかを制御する能力がなければ、画像処理の例では、順次に複数のカーネルを実行すると、同じ入力画像領域が異なるSPによって処理されることになり得る。例えば、第1のカーネルを実行するために、GPUは、画像全体に関連づけられたデータを、一度にひとつのワークグループで、実行のためにGPUのSPのローカルメモリにロードする。第1のカーネルを実行した後に第2のカーネルを実行するために、GPUは、実行のためにGPUのSPのローカルメモリに同じ画像データをリロードする。したがって、入力画像データは、各カーネルについて1回、ローカルSPメモリに何度もロードされる。画像全体に関するSPローカルメモリ入力帯域幅消費量は、画像データサイズにカーネルの数を乗じたものにほぼ等しい(例えば、3つのカーネルを有する64MBの画像を解析するためのプログラムは、帯域幅3×64MB、すなわち192MBの消費をまねく)。カーネルとそれらの実行されたワークグループとの間の入力データの共有なしでは、比較的多量のメモリ帯域幅が消費される。
画像処理の例において、命令ストリームを生成および実行することは、画像の特定の部分に関連づけられたデータが、一度特定のSPのローカルメモリリソースにロードされ、そして複数のカーネルを用いて処理されることを可能にする。3つのカーネル(例えば、第1のカーネル、第2のカーネル、および第3のカーネル)を有するプログラムの一例が提供される。第1のカーネルの第1のワークグループに関連づけられたデータは、特定のSPのローカルメモリにロードされ、第1のワークグループは、SPによって実行される。加えて、カーネルおよびワークグループ実行順序を含む命令ストリームが提供され、これは、同じSPに、第2のカーネルの第1のワークグループ、その後に第3のカーネルの第1のワークグループを続いて実行させる。従って、第1のワークグループに関連づけられた画像データは、第2のカーネルおよび第3のカーネルを実行する前に、特定のSPのローカルメモリにロードされる必要はない。代わりに、第2のカーネルおよび第3のカーネルは、第1のカーネルについてあらかじめロードされた入力データを用いる。こうして、メモリ帯域幅消費量は、入力画像の特定の領域に関連づけられたデータがローカルSPメモリに1度しかロードされる必要が無く、また複数のカーネルを用いて処理されることができるので、低減され得る。以上で提供された3つのカーネルの例において、メモリ帯域幅消費量は3分の2低減される。
命令ストリームは、様々な方法で定義されることができる。いくつかの態様によれば、ユーザは、命令ストリームを用いることから恩恵を受けることになる候補のカーネルを識別する。例えば、ユーザは、同じ入力データを何度も用いるカーネルを識別することができる。命令ストリームを用いることは、入力データがローカルメモリリソースにロードされる必要がある回数を減らすことによって、SPのローカルメモリリソースを管理するのに役立つことができる。
候補を識別した後、ユーザは、GPUによって実行されるプログラムにおいて、命令ストリームを定義することができる。例えば、GPUアプリケーション・プログラミングは、通常、マルチプル・プラットフォーム、オペレーティング・システム、およびハードウェア上で実行することができる標準ソフトウェア・インターフェースを提供するアプリケーション・プログラム・インターフェース(API)を用いてアプリケーション開発者(例えば、コンピュータ・プログラマー)によって実施される。APIの例は、オープン・グラフィクス・ライブラリ(Open Graphics Library)(2010年7月26日にリリースされかつ公的に入手可能である「OpenGL」バージョン4.1)、コンピュート・ユニファイド・デバイス・アーキテクチャ(Compute Unified Device Architecture)(NVIDIA社によって開発された「CUDA」、2010年9月17日にリリースされたバージョン3.2)、およびDirectX(マイクロソフト社によって開発、2009年10月27日にリリースされたバージョン11)を含む。一般的に、APIは、関連ハードウェアによって実行される所定の標準化されたコマンドセットを含む。APIコマンドは、ユーザが、ハードウェア・コンポーネントの仕様に関するユーザの知識無しにコマンドを実行するようにGPUのハードウェア・コンポーネントに指示することを可能にする。
本開示の態様は、ユーザが命令ストリームを定義することを可能にする1つまたは複数のAPIコマンドに関する。例えば、1つまたは複数のAPIコマンドは、設計環境において開発および作成され得る。APIコマンドは、次いで、APIのユーザ(例えば、コンピュータ・プログラマー)のために予め設定されたオプションとして、上述のAPIのようなAPIに含まれ得る。
ユーザは、予め設定された命令ストリームAPIコマンドを実施して、アプリケーションの開発およびコーディング中にGPUによって実行されることになるアプリケーションにおいて命令ストリームを指定することができる。例えば、命令ストリームAPIコマンドは、ユーザが、特定のSPによって順次に処理されるべきマルチカーネル・アプリケーションの異なるカーネルからの命令(例えば、1つまたは複数のワークグループ)を指定することを可能にする。命令ストリーム指定を含むアプリケーションを実行し次第、GPUは、受信された指定にしたがって、GPUのSPに命令(例えば、異なるカーネルのワークグループ)をルーティングする。
別の例において、自動化されたシステムが、命令ストリームを生成するために実装され得る。例えば、コンパイラ・プログラムのようなプログラムは、複数のカーネルを用いて同じ入力データを繰り返し処理するアプリケーションに関する命令ストリームを自動的に生成し得る。この例において、プログラムは、命令の各グループが入力データの所定の量(例えば、命令のワークグループ)に対応するように、各カーネルの命令をパーティショニングする。プログラムは、次いで、ひとつのカーネルの命令から成るひとつのグループに関連づけられた入力データが、単1のSPを用いる複数の他のカーネルによって共有され、直列的に実行されることができるように、異なるカーネルからの命令のグループをリンクさせることによって命令ストリームを生成し得る。
非限定的な画像処理の例では、GPUアプリケーション開発者は、入力画像および画像を処理するための3つのカーネルを有するアプリケーションを命令ストリーム生成プログラムに提供し得る。命令ストリーム生成プログラムは、画像のあらかじめ定義された空間領域に基づいて命令ストリームを自動的に生成し得る。例えば、命令ストリーム生成プログラムは、3つのカーネルの各々の命令を、命令の各グループが入力画像のあらかじめ定義された領域に対応する命令のグループへとパーティショニングし得る。命令ストリーム生成プログラムは、次いで、同じ入力画像領域に関連づけられたカーネルの各々の命令のグループをリンクさせることによって命令ストリームを生成し得る。
例えば、コンパイラ・プログラムまたはその他の開発/解析プログラムのようなプログラムは、命令ストリームを実施することから恩恵を受けることになる候補のカーネルを識別し得る。例えば、プログラムは、メモリ・アクセス・パターンを監視し、1つよりも多くのカーネルによって用いられるデータを識別し得る。この例において、プログラムは、複数のカーネルを有するアプリケーションのワークグループに関連づけられた読取り/書込みアクセス・パターンを監視および記録(log)する。記録(logging)の後、プログラムは、各カーネルのそれぞれのワークグループの入力/出力の依存性を検出し得る。すなわち、プログラムは、複数のカーネル・アプリケーションのどのワークグループが同じ入力データを利用するかを決定することができる。このデータ共有情報に基づいて、命令ストリーム指定は、マルチカーネル・アプリケーションの異なるカーネルからのワークグループが特定のSPによって順次に処理されることを容易にするアプリケーションに挿入されることができる。例えば、コードは、同じSPによって順次に実行されるべき同じ入力データを共有する異なるカーネルからのワークグループを実行することをGPUに命令するアプリケーションに挿入されることができる。
候補のカーネルを識別し、命令ストリームに異なるカーネルのワークグループを指定するためのプログラムは、アプリケーション開発中に、またはGPUアプリケーションの実行中の「オンザフライ」で、実行されることができる。例えば、いくつかの態様によれば、GPUアプリケーション開発者は、候補のカーネルを識別し、命令ストリームに異なるカーネルのワークグループを指定するためにプログラムを実装することができる。開発されたGPUアプリケーションは、これで、GPUによって実行される命令ストリーム指定を含み得る。別の例において、コンピューティングデバイスのホストプロセッサまたはGPUは、候補のカーネルを識別し、GPUアプリケーションを実行する間に命令ストリームに「オンザフライ」で異なるカーネルのワークグループを指定するためのプログラムを実装することができる。
図1は、本開示の態様を実施するように構成され得るコンピューティングデバイス20を示すブロック図である。図1に示されるように、コンピューティングデバイス20は、ホストプロセッサ24、ストレージデバイス28、メモリ32、ネットワークモジュール36、ユーザ・インターフェース40、およびディスプレイ44を含む。コンピューティングデバイス20はまた、グラフィックス処理ユニット(GPU)48含む。
コンピューティングデバイス20は、いくつかの例において、ポータブルコンピューティングデバイス(例えば、モバイル電話、ネットブック、ラップトップ、タブレットデバイス、デジタルメディアプレイヤー、ゲームデバイス、またはその他のポータブルコンピューティングデバイス)を含むことができ、またはその一部であり得る。あるいは、コンピューティングデバイス20は、デスクトップコンピュータまたはその他の固定式コンピューティングデバイスとして構成されることができる。コンピューティングデバイス20は、明りょうにするために図1には示されていない、追加のコンポーネントを含むことができる。例えば、コンピューティングデバイス20は、コンピューティングデバイス20のコンポーネント間でデータを転送するための1つまたは複数の通信ブリッジを含み得る。さらに、図1に示されるコンピューティングデバイス20のコンポーネントは、コンピューティングデバイス20のあらゆる例において必要とされるわけではない。例えば、ユーザ・インターフェース40およびディスプレイ44は、例えば、コンピューティングデバイス20がデスクトップコンピュータである場合の例では、コンピューティングデバイス20の外部にあり得る。
ホストプロセッサ24は、マイクロプロセッサ、コントローラ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブル・ゲート・アレイ(FPGA)、または等価ディスクリートもしくは集積論理回路のいずれか1つまたは複数を含むことができる。さらに、ホストプロセッサ24に起因する機能は、本開示では、ソフトウェア、ファームウェア、ハードウェア、またはそれらのいずれかの組み合わせとして組み込まれ得る。
ホストプロセッサ24は、コンピューティングデバイス20内で、実行のための命令を処理する。ホストプロセッサ24は、ストレージデバイス28上に記憶された命令、またはメモリ32に記憶された命令を処理可能であり得る。アプリケーションの一例は、視認可能な画像を処理する(例えば、画像をフィルタリングする、あらかじめ定義された特徴について画像を解析する、など)ためのアプリケーションを含む。ホストプロセッサ24は、ユーザ・インターフェース40を介して、ユーザによる選択に基づいて1つまたは複数のアプリケーションを実行し得る。いくつかの例において、ホストプロセッサ24は、ユーザインタラクションなしに1つまたは複数のアプリケーションを実行し得る。
本開示のいくつかの態様によれば、また、GPU48に関して以下でさらに詳細に説明するように、ホストプロセッサ24は、GPU48と連携して、1つまたは複数のアプリケーションに関連づけられた様々なタスクを実行し得る。例えば、ホストプロセッサ24は、アプリケーションの実行を初期化し、アプリケーションに関連づけられた特定の処理機能をオフロードし、GPU48に委託し得る。ひとつの例において、ホストプロセッサ24は、画像処理アプリケーションの実行を初期化し、GPU48にアプリケーションに関連づけられた特定の処理機能をオフロードし得る。
ストレージデバイス28は、1つまたは複数のコンピュータ可読記憶媒体を含み得る。ストレージデバイス28は、情報の長期記憶のために構成され得る。いくつかの例において、ストレージデバイス28は、不揮発性のストレージエレメントを含み得る。このような不揮発性ストレージエレメントの例は、磁気ハードディスク、光学デスィスク、フロッピー(登録商標)ディスク、フラッシュメモリ、または電気的プログラム可能メモリ(EPROM)または電気的消去可能およびプログラム可能(EEPROM)メモリの形態を含み得る。ストレージデバイス28は、いくつかの例にでは、非一時的記憶媒体とみなされる。用語「非一時的な」は、記憶媒体が搬送波または伝搬信号に組み込まれないことを示し得る。しかし、用語「非一時的な」は、ストレージデバイス28が非可動であることを意味すると解釈されるべきではない。ひとつの例として、ストレージデバイス28は、コンピューティングデバイス20から取り出され、そして別の装置に移動され得る。別の例として、実質的にストレージデバイス28に類似するストレージデバイスは、コンピューティングデバイス20に挿入され得る。
ストレージデバイス28は、ホストプロセッサ24またはGPU48によって1つまたは複数のアプリケーションの実行のための命令を記憶し得る。ストレージデバイス28はまた、ホストプロセッサ24またはGPU48によって用いられるためのデータを記憶し得る。例えば、ストレージデバイス28は、ホストプロセッサ24またはGPU48によって処理するための画像データを記憶し得る。
メモリ32は、オペレーションの間、コンピューティングデバイス20内の情報を記憶するように構成され得る。いくつかの例において、メモリ32は、一時記憶装置であり、これは、メモリ32の主要目的が長期記憶ではないことを意味する。メモリ32は、いくつかの例では、コンピュータ可読記憶媒体として説明される。従って、メモリ32は、また、時間とともに変化し得るデータを記憶するにもかかわらず、「非一時的」と見なされ得る。メモリ32はまた、いくつかの例では、揮発性記憶メモリとして説明されており、これは、メモリ32は、コンピュータがオフにされるときに、記憶されたコンテンツを維持しないことを意味している。揮発性メモリの例は、当業者に知られている、ランダム・アクセス・メモリ(RAM)、ダイナミック・ランダム・アクセス・メモリ(DRAM)、スタティック・ランダム・アクセス・メモリ(SRAM)、および揮発性メモリのその他の形態を含む。
いくつかの例において、メモリ32は、ホストプロセッサ24またはGPU48によって実行するためのプログラム命令を記憶するために使用され得る。メモリ32は、プログラム実行中に、情報を一時的に記憶するためにコンピューティングデバイス20上で実行するソフトウェアまたはアプリケーションによって使用され得る。このように、メモリ32は、ホストプロセッサ24およびGPU48のようなコンピューティングデバイス20のその他のコンポーネントによってアクセスされ得る。
コンピューティングデバイス20は、ネットワークモジュール36を用いて、1つまたは複数のワイヤレスネットワークのような1つまたは複数のネットワークを介して、外部のデバイスと通信し得る。ネットワークモジュール36は、イーサネット(登録商標)カード、光学送受信機、無線周波数送受信機、または情報を送信および受信することができる他の任意のタイプのデバイスのようなネットワークインターフェースカードであり得る。いくつかの例において、コンピューティングデバイス20は、ネットワークモジュール36を用いて、サーバ、モバイル電話、またはその他のネットワークコンピューティングデバイスのような外部のデバイスとワイヤレスに通信し得る。
コンピューティングデバイス20は、また、ユーザ・インターフェース40を含む。ユーザ・インターフェース40の例は、トラックボール、マウス、キーボード、および他のタイプの入力デバイスを含むが、それらに限定されない。ユーザ・インターフェース40は、また、ディスプレイ44の一部として組み込まれたタッチセンサ式のスクリーンを含み得る。ディスプレイ44は、液晶ディスプレイ(LCD)、有機発光ダイオード(OLED)ディスプレイ、プラズマ・ディスプレイ、または別のタイプのディスプレイデバイスを含み得る。
コンピューティングデバイス20のGPU48は、固定された機能を有する専用のハードウェアユニット、およびGPUアプリケーションを実行するためのプログラマブル・コンポーネントであり得る。GPU48は、また、DSP、汎用マイクロプロセッサ、ASIC、FPGA、またはその他の等価の集積論理回路またはディスクリート論理回路を含み得る。GPU48は、また、図4に関してさらに詳細に説明されるように、専用メモリのようなその他のコンポーネントを含み得る。さらに、図1には別個のコンポーネントとして示されているが、いくつかの例では、GPU48は、ホストプロセッサ24の一部として形成され得る。GPU48は、様々なアプリケーション・プログラミング・インターフェース(APIs)に従って、処理技術を利用するように構成され得る。例えば、ユーザは、マルチプル・プラットフォーム、オペレーティング・システム、およびハードウェア上で実行することができる標準のソフトウェア・インターフェースを使用してGPU48によって実行されるようにアプリケーションをプログラムし得る。いくつかの例では、GPU48は、(前述のように)APIのOpenCL、CUDA、またはDirectXコレクションを用いて生成されたアプリケーションを利用するように構成され得る。
いくつかの例によれば、GPU48は、汎用グラフィックス処理ユニット(GPGPU)として実装され得る。例えば、GPU48は、ホストプロセッサ24によって従来から実行される様々な汎用の計算機能を実行することができる。例としては、ビデオデコーディングおよび後処理(例えば、デブロッキング、ノイズ低減、色補正、等)およびその他のアプリケーション特有の画像処理機能(例えば、顔の検出/認識、パターン認識、ウェーブレット変換、等)を含む、様々な画像処理機能が含まれる。いくつかの例では、GPU48は、ホストプロセッサ24と連携してアプリケーションを実行し得る。例えば、ホストプロセッサ24は、GPU48による実行のための命令をGPU48に提供することによって、GPU48に特定の機能をオフロードし得る。
GPGPUとして実装されたときには、GPU48は、ここではカーネルと呼ばれるシェーダプログラムを実行する。カーネルは、上述したAPIの例のようなAPIを用いて、ユーザによって定義され得る。カーネルは、ワークグループにグループ分けされる個々のワークアイテム(例えば、GPUにおけるワークの基本単位)を含み得る。
本開示のいくつかの態様によれば、GPU48は、ここでは命令ストリームと呼ばれる、カーネルおよびワークグループ実行順序を受信および実行する。GPU48は、GPU48のSP(例えば、図4に関して示され記載されるように)に関連付けられたローカルメモリリソースを管理するためにカーネルおよびワークグループ実行順序を使用し得る。例えば、GPU48は、異なるカーネルのワークグループとSPローカルメモリに記憶されたデータを共有するために、カーネルおよびワークグループ実行順序を使用し得る。
後続の図に提供される特定の例は、画像処理アプリケーションを実施するためにワークアイテムおよびワークグループを実行するGPUについて述べる。例えば、ワークアイテムおよびワークグループは、画像(例えば、ビデオデータのフレーム)のピクセルに関連づけられるものとして以下で説明される。しかし、GPUは、様々な入力データに対して画像処理機能以外の様々な機能(例えば、並列処理から恩恵を受けるいずれかの機能およびデータセット)を実行するために実装され得ることが理解されるべきである。従って、ワークグループ間での命令ストリームおよびメモリの共有に関して以下で説明される例および態様は、様々な他の入力データセットに対して様々な他の機能を実施するGPUによって実施され得る。
図2は、画像49を処理するための関連付けられた命令を備える画像データを有する例示的な画像49を示すブロック図である。命令は、各ワークグループが複数のワークアイテム52を含む、複数のワークグループ50A〜50P(まとめてワークグループ50)に分割されるものとして表される。命令は、図1に示されるGPU48のようなGPUによって実行され得る。図2に示される例では、画像49を処理するための命令は、16個のワークグループ50に分割され、各ワークグループ50は、他の分割も可能であるが、64個の別個のワークアイテム52に分割される。
図2に示される例において、画像49は、正方形の、1024個のピクセルを含むおおよそ16メガバイト(MB)の画像である。ワークアイテム52の各々は、GPU48によって実行されることができるワークの基本単位を表す。いくつかの例において、各ワークアイテム52は、画像49の特定のピクセルに関連し得る命令を含む。したがって、GPU48がワークアイテム52を実行するときには、画像49の対応するピクセルは、処理され得る(例えば、命令にしたがって解析または変更され得る)。ワークアイテム52は、画像49のピクセルの特定のグループに関連する命令を含むワークグループ50に編成され得る。ワークグループ50を処理するときには、ワークグループ50に関連づけられたピクセルの特定のグループに関連する画像データは、SPのローカルメモリリソースにロードされ得る(例えば、下記で図4に関して示され、説明される)。
図2に関して説明されるピクセルデータ、ワークアイテム、およびワークグループの間の関係は、単に、可能な命令構造のひとつの例にすぎない。その他の例において、ワークアイテムは、画像49の1ピクセルよりも多いまたは少ないものに関連し得る。
図3は、図1に示されるGPU48のようなGPUによって実行され得る3つのカーネル(例えば、第1のカーネル56、第2のカーネル57、および第3のカーネル58)の配置におけるワークグループを示すブロック図である。この場合も、各カーネルは、所与のアプリケーションに関連する特定の機能を実施するために実行され得る。いくつかの例において、カーネル56〜58は、色補正アルゴリズム、顔検出アルゴリズム、パターン認識アルゴリズム、拡張現実アプリケーション、様々なアルゴリズム・アプリケーション(例えば、ウェーブレット変換、フーリエ変換等)、または様々なその他のアプリケーションに関する機能を定義し得る。単なる例示の目的で、図3は、図1に示される例示的なGPU48および図2に示される例示的な画像49に関して説明される。
GPU48は、図2に示される画像49のような画像に対して特定のタスクを実施するために、カーネル56〜58を実行することができる。例えば、GPU48は、顔検出/認識、パターン認識、および並列処理(例えば、同時に2つ以上の命令を処理すること)に適している多くのその他の機能のような様々な機能を実施するためにGPGPUとして実装され得る。簡易化された、非限定的な例として、カーネル56〜58は、顔検出アプリケーションにおいて実装され得る。この例では、GPU48は、画像49において1つまたは複数の顔を検出するためにカーネル56〜58を実装し得る。カーネル56〜58の各々は、特定の顔検出に関連する機能を実施するように構成され得る。このようなカーネル56〜58は、「分類子」と呼ばれ得る。すなわち、カーネル56〜58は、特定の、あらかじめ定義された特徴(feature)を有するもの(または有さないもの)にピクセルを分類する。カーネル56〜58は、いくつかのトレーニング画像を用いて作成された数式を含み得る。例えば、カーネル56〜58は、いくつかのあらかじめ定義された画像を備えるテスト環境において開発された数式を含み得る。
図3に示される例では、GPU48は、各ピクセルがカーネル56〜58に示されるあらかじめ定義されたプロパティを含むかどうかを決定するために連続的にカーネル56〜58を実行することができる。すなわち、GPU48によって実行されるときには、各カーネル56〜58は、顔に関連づけられたあらかじめ定義されたプロパティを識別するために使用され得るブール値(Boolean value)を返すことができる。特定のピクセルがカーネル56〜58に示されたあらかじめ定義されたプロパティの全てを示す(例えば、ピクセルに関連づけられたブーリアンの結果がいくつかのあらかじめ定義された基準を満たす)場合、そのピクセルは、候補の顔ピクセルと見なされる。特定のピクセルがカーネル56〜58に示されるあらかじめ定義されたプロパティを示さない(例えば、ピクセルに関連づけられたブーリアンの結果がいくつかのあらかじめ定義された基準を満たさない)場合、そのピクセルは、顔ピクセルと見なされることから除外される。
図3の画像処理の例において、画像49に関連づけられたデータは、3回、すなわち、各カーネル56〜58について1回処理される。例えば、カーネル56〜58のワークグループは、画像49の同じ入力画像領域に対応し得る。同様に、カーネル56〜58の各々の、番号が付けられたワークグループは、画像49の同じ入力画像領域上で実施されるべき命令のセットを含み得る。
本開示の態様は、同様に番号付けされたカーネル56〜58のワークグループをGPU48による処理のために命令ストリームへと結合する命令の生成に関する。例えば、ユーザ(例えば、コンピュータまたはアプリケーション・プログラマー)またはプログラムは、GPU48に、同じSPを用いて、カーネル56のワークグループ0、続いてカーネル57のワークグループ0、そしてその後にカーネル58のワークグループ0を実行するように命令する命令ストリームを作成することができる。こうして、GPU48は、ワークグループ0に対応する画像49の入力領域をGPU48のシェーダプロセッサ(SP)のローカルメモリリソースにロードし(例えば、図4に関して示され説明されるように)、カーネル56〜58を用いて順次その入力画像領域を処理することができる。
いくつかの例において、ユーザ(例えば、コンピュータまたはアプリケーション・プログラマー)は、カーネル56〜58を開発する間に、予め設定されたAPIコマンドを用いてカーネル56〜58のワークグループ指定を含む命令ストリームを定義することができる。例えば、ユーザは、GPU48によって実行される命令ストリームにカーネル56〜58のワークグループを指定するために予め設定された命令ストリームAPIコマンドを実装し得る。カーネル56〜58に関連づけられた命令ストリーム指定を実行すると、GPU48は、GPU48の特定のSPにカーネル56〜58のワークグループをルーティングする。
別の例において、自動化されたシステムが、カーネル56〜58のワークグループ指定を含む命令ストリームを生成するために実装され得る。例えば、コンパイラ・プログラムまたはその他のプログラム(例えば、コンパイルされた低水準のマシンアセンブラコードからメモリ・アクセス・パターンを追跡するプログラム)は、メモリ・アクセス・パターンを監視または解析し、そしてワークグループ0のようなワークグループに関連づけられたデータがカーネル56〜58によって何度もアクセスされることを識別し得る。プログラムは、次いで、ワークグループがGPU48のSPによって順次に処理されるように、命令ストリームにワークグループを指定し得る。カーネル56〜58に関連づけられた命令ストリーム指定を実行すると、GPU48は、GPU48の特定のSPにカーネル56〜58のワークグループをルーティングする。
図4は、本開示の態様を実行するように構成され得るGPU60を示すブロック図である。いくつかの例において、GPU60は、図1に示されるGPU48と同様にまたは同じく構成され得る。図4に示される例において、GPU60は、メモリ72、シェーダプロセッサメモリ78A〜78C(まとめて、SPメモリ78)をそれぞれ有するシェーダプロセッサ76A〜76C(まとめて、SP76)、およびシーケンサ・モジュール82を含む。
その他の例において、GPU60は、明りょうにするために図4には示されていないその他のコンポーネントを含み得る。例えば、GPU60はまた、ラスタライザ、テクスチャユニット、1つまたは複数のバッファ、またはその他のGPUコンポーネントのような、画像を解析およびレンダリングすることに関連する様々なその他のモジュールを含み得る。加えて、GPU60は、図4に示されるものよりも多くのまたは少ないコンポーネントを含みうる。例えば、GPU60は、図4では3つのSP76を含むものとして示されている。しかし、その他の例では、GPU60は、図4に示されるものよりも多くのまたは少ないSPを含み得る。
いくつかの例において、GPUメモリ72は、図1に示されるメモリ32と同様のものであり得る。例えば、GPUメモリ72は、一時的なコンピュータ可読記憶媒体であり得る。GPUメモリ72の例には、ランダム・アクセス・メモリ(RAM)、ダイナミック・ランダム・アクセス・メモリ(DRAM)、スタティック・ランダム・アクセス・メモリ(SRAM)、および当該技術分野で知られている他の形態のメモリが含まれる。GPU60が、図1に示されるホストプロセッサ24のような別のプロセッサの一部として形成される例では、GPUメモリ72は、GPU60以外のコンポーネントによってアクセスされ得る。
GPUメモリ72は、GPU60に関するグローバルメモリとして構成され得る。例えば、GPUメモリ72は、動作中、GPU60内の命令および情報(例えば、GPU60によって処理するための画像データおよび命令)を記憶するように構成され得る。GPUメモリ72は、また、GPU60によって処理されたデータの結果を記憶するように構成され得る。いくつかの例において、GPUメモリ72は、GPU60の外部にあるコンピューティングデバイス・コンポーネントとインターフェースをとる。例えば、GPU60を内蔵するコンピューティングデバイスのコンポーネントは、はじめに、GPU60による処理のためにGPUメモリ78(例えば、ビデオデータの1つまたは複数のフレーム)にデータを渡すことができる。GPU60は、次いで、データを処理し、その結果をGPUメモリ72に記憶する。その結果は、GPUメモリ72からコンピューティングデバイスの別のコンポーネントへと順次読み取られる。
SP76は、処理コンポーネントのプログラマブル・パイプラインとして構成され得る。いくつかの例において、SP76は、SP76がグラフィックスをレンダリングするために、ジオメトリ、バーテックス、またはピクセル・シェーディング操作を実施することができる点において、「統合シェーダ」と呼ばれ得る。SP76はまた、汎用計算を実行するためのGPGPUアプリケーションにおいて使用され得る。例えば、SP76は、図2に示される画像49のような画像を解析し、または他の方法で処理するために、実装され得る。SP76は、命令をフェッチし、復号するためのコンポーネント、および算術計算を実施する1つまたは複数の算術論理演算ユニット(「ALU」)など、図4には特に示されていない1つまたは複数のコンポーネントを含み得る。SP76は、また、SPメモリ78のような1つまたは複数のメモリ、キャッシュ、またはレジスタを含み得る。
SPメモリ78は、SP76によって処理されるデータを記憶するためのレジスタまたはデータキャッシュとして構成され得る。いくつかの例において、SPメモリ78は、SP76のローカルメモリである。例えば、SPメモリ78は、グローバルGPUメモリ72よりも相対的に小さく、実行の前に1つまたは複数のワークグループに関連づけられたデータを記憶し得る。SPメモリ78は、GPUメモリ72よりも相対的に低い待ち時間(lower latency)を有し得る。例えば、SPメモリ78は、比較的迅速にSP76によってアクセスされることができる。しかし、グローバルメモリ72からSPメモリ78へのデータ移動に関係する待ち時間は、通常、はるかに大きい。例えば、グローバルメモリ72からSPメモリ78へのデータ移動は、複数のクロックサイクルを消費し、それによって、ボトルネックを生み出し、GPU60の全体的な性能を遅くし得る。
SPメモリ78は、GPU60が動作しているときに、GPUメモリ72とデータを交換し得る。例えば、GPU60は、GPUメモリ72からSPメモリ78に1つまたは複数のワークグループに関連づけられたデータを送る。SPメモリ78内に記憶されると、SP76は、別個のSPメモリ78に記憶されたデータにアクセスし、処理するために、並列に動作する。データを実行すると、SP76は、GPUメモリ72に結果を返す。一般的に、SPメモリ78とSP76との間のメモリ帯域幅は、GPUメモリ72とSP76との間のメモリ帯域幅よりも大きい。従って、SP76は一般的に、SP76がGPUメモリ72からデータを読み取ることができるよりも早く、関連するSPメモリ78からデータを読み取ることができる。すなわち、GPUメモリ72は、通常、SPメモリ78に関連づけられるものよりも高い待ち時間を示す。従って、データが、SP76によって実行される前に、SPメモリ78に移されるのは有益であり得る。
シーケンサ・モジュール82は、GPU60内で命令およびデータフローを制御する。シーケンサ・モジュール82は、SP76による実行のためにSPメモリ78にワークアイテム、ワークグループ、および関連データを分配するための固定された機能とプログラマブル・コンポーネントの組み合わせを備えることができる。従って、シーケンサ・モジュール82は、GPUメモリ72と複数のSP76との間でのデータ転送を管理する。単に例示の目的で、シーケンサ・モジュール82のワークグループの分配について、図3に関して示され説明される用途に関して説明する。
シーケンサ・モジュール82は、どのワークグループがSP76の特定のSPによって実行されるかに関係なく、固定された分配パターンでワークグループを分配し得る。例えば、複数のカーネル56〜68を有する例示的なアプリケーション54(図3に示される)を処理するために、シーケンサ・モジュール82は、GPU60の全てのSP76にワークグループを均等に分配し得る。加えて、下記で図5に関連してより詳細に説明するように、シーケンサ・モジュール82は、次のカーネルに進む前に、カーネルの全てのワークグループをSP76に分配し得る。例えば、シーケンサ・モジュール82は、カーネル56がSP76によって処理済みとなるまで、カーネル56のワークグループ0をSP76Aに、カーネル56のワークグループ1をSP76Bに、カーネル56のワークグループ2をSP76Cといった具合に分配することができる。
その他の例において、本開示のいくつかの態様によれば、シーケンサ・モジュール82は、カーネルおよびワークグループ実行順序を受信し実行し得る。例えば、シーケンサ・モジュール82は、複数のSP76のうちの特定のSPにカーネルのワークグループを分配することをシーケンサ・モジュール82に命令する命令ストリームを定義する命令を受信し得る。命令ストリームは、異なるカーネルのワークグループを、それらが複数のSP76のうちの同じSPによって処理されるように結びつける。命令ストリームは、SPメモリ78のリソースを管理するための方法を提供する。例えば、命令ストリームを定義する命令を実行することによって、シーケンサ・モジュール82は、ひとつのワークグループに関連づけられた入力データが複数のその他のカーネルのワークグループによって共有され、直列的に実行されることを可能にする。
シーケンサ・モジュール82は、GPU60が同じまたは実質的に同じ入力データを処理する複数のカーネルを有するアプリケーションを実行しているときに命令ストリームを定義する命令を実行するように実装され得る。例えば、図3に関して説明されるように、アプリケーション54は、3つのカーネル56〜58を含み、各カーネルは複数の関連するワークグループを有する。カーネル56のワークグループ0は、カーネル57のワークグループ0およびカーネル58のワークグループ0と同じ入力データに対応する。従って、シーケンサ・モジュール82は、SP76Aにカーネル56〜58のワークグループ0を順次に分配し得る。加えて、シーケンサ・モジュール82は、全てのカーネルの全てのワークグループがSP76によって実行済みとなるまで、カーネル56〜58のワークグループ1をSP76Bに分配するなどすることができる。
このように、シーケンサ・モジュール82は、SPメモリ78のローカルメモリリソースを管理し得る。例えば、カーネル56のワークグループ0を実行する前に、GPU60は、GPUメモリ72からSPメモリ78Aに、カーネル56のワークグループ0に関連づけられた入力データを転送する。カーネル56のワークグループ0を実行した後、SPメモリ78Aに関する新しいデータをフェッチする代わりに、シーケンサ・モジュール82は、カーネル57のワークグループ0を実行し、次にカーネル58のワークグループ0を実行するようにSP76Aに命令する。ワークグループ0の入力データは、カーネル56〜58の間で同じであり、そのためワークグループ0に関連づけられたデータは、SPメモリ78A内に留まり、3つのカーネル56〜58全てのワークグループ0によって共有されることができる。
命令ストリームを実行し、異なるカーネルのワークグループの間でデータを共有することは、固定された分配パターンでワークグループを分配するシステムと比べて、ローカルメモリ帯域幅の節約もたらすことができる。例えば、異なるカーネルのワークグループの間でデータを共有することは、GPUメモリ72とSPメモリ78との間で転送されるデータをより少なくすることを可能にする。図3に示される3つのカーネルの例において、GPUメモリ72とSPメモリ78との間のメモリ帯域幅消費量が3分の2低減される。ワークグループ0のようなワークグループに関連づけられたデータをローカルSPメモリに3回転送する(例えば、各カーネルにつき1回の転送)のではなく、GPU60は、ワークグループに関連づけられたデータをローカルSPメモリに一度転送し、3つのカーネル56〜58すべての間でデータを共有することができる。
本開示のいくつかの例によれば、命令ストリームを実行することに関連したローカルメモリ帯域幅の節約は、また、時間の節約をもたらすことができる。例えば、SPが、プログラム54のような所与のプログラムを実行するためにワークグループに関連づけられた同数の計算を実行可能である一方、GPUメモリ72とSPメモリ78との間で転送されるデータがより少なくなり得るので、時間の節約が達成されることができる。上述したように、GPUメモリ72とSPメモリ78との間のデータ転送は、プログラム54を実行するプロセスにボトルネックをもたらす、比較的時間のかかるプロセスであり得る。従って、GPUメモリ72とSPメモリ78との間で転送される必要のあるデータの量を減らすことはまた、GPUメモリ72とSPメモリ78との間のデータ転送に関連するボトルネックを減らし得る。
命令ストリームを定義するシーケンサ・モジュール82によって受信された命令は、ユーザによって生成され得、または自動的に生成され得る(例えば、コンパイラ・プログラムによって)。例えば、ユーザ(例えば、ソフトウェア開発者)は、1つまたは複数の命令ストリームコマンドを含むAPIを用いる命令ストリームを定義して実装することができる。命令ストリームコマンドを有するアプリケーションを受信すると、シーケンサ・モジュール82は、SP76に関連付けられたローカルメモリリソースを管理するために命令ストリームコマンドを実行する。
命令ストリームを定義する命令は、図1に示されるホストプロセッサ24のようなコンピューティングデバイスのホストプロセッサによってシーケンサ・モジュール82に送信され得る。GPU60が別個のデバイスである(例えば、ホストプロセッサを有するコンピューティングデバイスに含まれない)例では、別の処理コンポーネントが、シーケンサ・モジュール82に対して命令ストリームを含む命令を送信することを担うことができる。
図5は、第1のカーネル142、第2のカーネル144、および第3のカーネル146のワークグループを、第1のSPメモリ156Aを有する第1のSP152A、第2のSPメモリ156Bを有する第2のSP152B、および第3のSPメモリ156Cを有する第3のSP152C(まとめてSP152およびSPメモリ156)に分配するシーケンサ・モジュール140の例を示すブロック図である。本開示のいくつかの態様によれば、シーケンサ・モジュール140とSP152は、図1に示されるGPU48または図4に示されるGPU60のようなGPUに組み入れられることができる。
シーケンサ・モジュール140およびSP152は、図4に関して示され説明されたシーケンサ・モジュール82およびSP76と同様に、または同じく構成され得る。例えば、シーケンサ・モジュール140は、GPU内の命令およびデータフローを制御することを担うことができる。シーケンサ・モジュール140は、ワークアイテムおよびワークグループをSP152および関連するSPメモリ156に分配するための固定された機能とプログラマブル・コンポーネントの組み合わせを含み得る。
シーケンサ・モジュール140は、異なるカーネルのワークグループの特定の宛先を制御することなく、固定された分配パターンでカーネル142〜146のワークグループを分配する。例えば、シーケンサ・モジュール140は、第1のカーネル142が分配されて実行されるまで、第1のワークグループWG0をSP152Aに(ライン160によって表される)、第2のワークグループWG1をSP152Bに(ライン161によって表される)、第3のワークグループWG2をSP152Cに(ライン162によって表される)など、順次に分配することによって、第1のカーネル142のワークグループを分配する。シーケンサ・モジュール140は、次いで、第2のカーネル144および第3のカーネル146に進み、それらのワークグループをSP152に分配する。例えば、シーケンサ・モジュール140は、固定された分配パターンにおいて継続することができ、SP152の間で第2のカーネル144のワークグループの全てを分配することができる。シーケンサ・モジュール140は、次いで、第3のカーネル146に進んで、SP152の間で第3のカーネル146のワークグループの全てを分配することができる。
どのSP152が特定のワークグループを実行するかを制御する能力がなければ、ワークグループに関連づけられたデータは、SPメモリ156のうちの2つ以上にロードされることを要求され得る。図5の例に示されるように、固定された分配パターンに従う際には、第1のカーネル142全体を処理した後、mシーケンサ・モジュール140は、第2のカーネル144のワークグループWG0をSP152B(ライン161)に分配する。従って、WG0に関連づけられた入力データは、SPメモリ156Bにロードされなければならない。加えて、第2のカーネル144全体を処理した後、分配パターンの固定された性質に起因して、シーケンサ・モジュール140は、第3のカーネル146のワークグループWG0をSP152C(ライン162)に分配する。従って、WG0に関連づけられた入力データは、SPメモリ156Cにロードされる。
図4に関して上述したように、特定のワークグループに関連づけられたデータは、通常、SPがワークグループを実行し得る前に、SPのローカルメモリにロードされなければならない。どのSP152が特定のワークグループを実行するかを制御する能力がなければ、ワークグループに関連づけられたデータは、カーネル間で共有されることはできない。図5に示される例において、ワークグループWG0に関連づけられたデータは、SP152A〜152Cによる処理の前に、異なる時間においてSPメモリ156A、156B、および156Cの各々にロードされなければならない。従って、SP152に関するメモリ帯域幅は、各カーネルについての入力データの3倍に等しい。
図6は、第1のカーネル184、第2のカーネル186、第3のカーネル188のワークグループを、第1のSPメモリ204Aを有する第1のSP200A、第2のSPメモリ204Bを有する第2のSP200B、第3のSPメモリ204Cを有する第3のSP200C(まとめてSP200およびSPメモリ204)に分配するシーケンサ・モジュール180の例を示すブロック図である。本開示のいくつかの態様によれば、シーケンサ・モジュール180およびSP200は、図1に示されるGPU48または図4に示されるGPU60のようなGPUに組み入れられることができる。
シーケンサ・モジュール180およびSP200は、図4に関して示され説明されるシーケンサ・モジュール82およびSP76と同様にまたは同じく構成され得る。例えば、シーケンサ・モジュール180は、GPU内の命令およびデータフローを制御することを担い得る。シーケンサ・モジュール180は、SP200による実行のためにワークアイテムおよびワークグループをSPメモリ204に分配するための固定された機能とプログラマブル・コンポーネントの組み合わせを含み得る。
本開示のいくつかの態様によれば、シーケンサ・モジュール82は、ワークグループを命令ストリームに指定するあらかじめ定義された命令にしたがって、カーネル184〜188のワークグループを分配する。例えば、シーケンサ・モジュール82は、異なるカーネルのワークグループを、それらが同じSPによって実行されるように結びつける命令ストリームを受信するように構成され得る。従って、固定されたパターンでカーネル184〜188のワークグループを分配するのではなく(例えば、図5に示すように)、シーケンサ・モジュール180は、カーネルのワークグループを結びつける命令ストリームに基づいてワークグループを分配するように構成され得る。
図6に示される例において、シーケンサ・モジュール180は、カーネル184のワークグループWG0をカーネル186のワークグループWG0とカーネル188のワークグループWG0とに結びつける命令ストリームを実行する。カーネル184〜186のワークグループWG0は、すべて同じ入力データに関連づけられる。命令ストリームを実行することによって、カーネル184〜188のワークグループWG0は、SP200Aを用いて順次に処理される。従って、カーネル184〜188の間で同じであり得る、WG0に関連づけられた入力データは、カーネル184〜188のワークグループWG0の間で共有されることができる。例えば、ワークグループWG0に関連づけられたデータは、カーネル184のWG0を処理するときにはSPメモリ204Aにロードされ、そしてカーネル186のWG0とカーネル188のWG0によって共有され得る。
SPメモリ204A内でのデータの保持と、複数のワークグループ間でのデータの共有は、SPメモリ204Aの効率的な管理を提供する。例えば、ワークグループの実行が終わるたびに、新しいデータをフェッチしSPメモリ204Aに転送しなければならないのではなく、データは、SPメモリ204A内にとどまり、複数のカーネルの複数のワークグループによって共有されることができる。従って、ローカルメモリ帯域幅消費量は、低減され得る。図6に示される3つのカーネルの例では、ローカルメモリ帯域幅消費量は、図5に示される3つのカーネルの例と比較して3分の2低減される。
本開示のいくつかの例によれば、命令ストリームを実行することに関連したローカルメモリ帯域幅の節約は、また、時間の節約ももたらす。例えば、SP200が、所与のプログラムを実行するために命令ストリームを利用しないシステムとしてワークグループに関連づけられた同数の計算を実行できる一方、GPUグローバルメモリとSPメモリ204との間で転送されるデータが少なくなるはずであるので、時間の節約が達成されることができる。GPUグローバルメモリとSPメモリ204との間のデータ転送は、カーネル184〜188の実行のプロセスにボトルネックをもたらす、比較的時間のかかるプロセスであり得る。従って、GPUグローバルメモリとSPメモリ204との間で転送される必要のあるデータの量を減らすことはまた、GPUグローバルメモリとSPメモリ204との間のデータ転送に関連づけられたボトルネックを減らす。
図7は、実行順序240、244、および248のストリームを、第1のSPメモリ256Aを有する第1のSP252A、第2のSPメモリ256Bを有する第2のSP252B、および第3のSPメモリ256Cを有する第3のSP252C(まとめてSP252およびSPメモリ256)に割り当てる例を示すブロック図である。本開示のいくつかの態様によれば、SP252は、図1に示されるGPU48または図4に示されるGPU60のようなGPUに組み入れられることができる。
図7に示される例は、3つのカーネルに関連づけられたワークグループを実行する3つのSP252を含む。しかし、実行順序のストリームが図7に示されるよりも多くのまたは少ないSPを有するシステムにおいて実装さ得ることが理解されるべきである(例えば、2つのSP、10個のSP、100個のSP)。加えて、実行順序のストリームは、図7に示される3つよりも多くのまたは少ないワークグループおよびカーネルを互いにリンクさせることができる。
実行順序のストリームまたは命令ストリーム240〜248は、図4に示されるシーケンサ・モジュール82のようなシーケンサ・モジュールによってSP252に割り当てられることができる。命令ストリーム240〜248は、異なるカーネルのワークグループを、それらが同じSPによって処理されるように、仮想的に結びつける。例えば、図7に示されるように、命令ストリーム240は、カーネル1のワークグループ0をカーネル2のワークグループ0とカーネル3のワークグループ0とにリンクさせる。同様に、命令ストリーム244は、カーネル1のワークグループ1をカーネル2のワークグループ1とカーネル3のワークグループ1とにリンクさせ、命令ストリーム248は、カーネル1のワークグループ2をカーネル2のワークグループ2とカーネル3のワークグループ2とにリンクさせる。
図7に示される例では、同様の番号が付けられたワークグループに関連する入力データの少なくともいくつかは一致している。例えば、カーネル1のワークグループ0に関連する入力データは、カーネル2のワークグループ0およびカーネル3のワークグループ0に関連する入力データと同じであり、または少なくともいくらか重複する。従って、SP252Aは、ワークグループ0に関連づけられた入力データをSPメモリ256Aにロードし、カーネル1のワークグループ0、カーネル2のワークグループ0、およびカーネル3のワークグループ0を実行するときにその入力データを共有することによって、命令ストリーム240を実行することができる。このように、命令ストリーム240を実行することは、カーネル1、2、および3の実行中にSPメモリ256Aへと転送されるおよびSPメモリ256Aから転送される必要のあるデータ量を低減する。類似の動作が、SP252BおよびSPメモリ256Bに関して、またSP252CおよびSPメモリ256Cに関して実施され得る。
図8は、図7に示されるストリーム240〜248のような実行順序(例えば、「命令ストリーム」)を生成および実行する方法300を示すフローチャートである。本開示のいくつかの態様によれば、方法300は、図1に示されるGPU48または図4に示されるGPU60のようなGPUによって実行され得る。単に説明の目的で、方法300のいくつかの部分は、図4に示される例示的なGPU60によって実施されるものとして説明され得る。
図8に示されるように、実行順序ストリームに関する候補が、はじめに識別される(304)。いくつかの態様によれば、ユーザは、命令ストリームを利用することから恩恵をうける、候補のカーネルを識別する。例えば、ユーザは何度も同じ入力データを利用するカーネルを識別することができる。別の例において、コンパイラ・プログラムのようなプログラムは、命令ストリーム実装することから恩恵をうける候補のカーネルを識別することができる。例えば、コンパイラ・プログラムは、メモリ・アクセス・パターンを監視し、2つ以上のカーネルによって用いられる入力データを識別し得る。入力データがプログラムの2つ以上のカーネルによって用いられるときには、命令ストリームは、同じデータを利用するワークグループを、それらのワークグループが同じSPによって実行されるように結びつけるために実装され得る。この方法において命令ストリームを利用することは、入力データがローカルメモリリソースにロードされる必要のある回数を減らすことによって、SPのローカルメモリリソースを管理するのに役立ち得る。例えば、入力データは、SPのローカルメモリに一度ロードされ、複数のカーネルの複数のワークグループの間で共有されることができる。
候補が識別された後、実行順序ストリーム指定が生成される(308)。ユーザは、命令ストリームコマンドを含むように適合されたAPIを用いて命令ストリームを定義することができる。例えば、OpenGL、CUDA、DirectX、またはGPUプログラムを作成するための他のAPIのようなAPIは、ユーザがワークグループおよびそれらの関連するカーネルを命令ストリームに指定することを可能にする1つまたは複数のコマンドを含むように適合され得る。別の例では、コンパイラ・プログラムのようなプログラムが、繰り返されるメモリ・アクセス・パターンを識別した後に、命令ストリームを自動的に生成することができる。
命令ストリームが生成された後、実行順序指定は、GPU60のようなGPUに送信され、GPUによって受信される(312)。いくつかの例では、シーケンサ・モジュール82は、1つまたは複数のカーネル指定および1つまたは複数のワークグループ指定を含む実行順序ストリームを定義する入力を受信し得る。命令ストリームは、図1に示されるホストプロセッサ24のようなコンピューティングデバイスのホストプロセッサによってシーケンサ・モジュール82に送信されることができる。GPU60が別個のデバイスである(例えば、ホストプロセッサを有するコンピューティングデバイスに含まれない)例では、別の処理コンポーネントが、命令ストリームを受信し、それらをシーケンサ・モジュール82に送信することを担い得る。
シーケンサ・モジュール82は、SP76のようなSPにストリームを割り当てることによって実行順序を実装し得る(316)。例えば、シーケンサ・モジュール82は、GPU60の同じSPによって実行されるべき命令ストリームにおいて指定されたワークグループを割り当てることができる。SPは、実行順序において指定された命令を実行することによって命令ストリームを実行する。(320)。例えば、SPは、命令ストリームにおいて指定されたワークグループを順次に実行する。そうすることによって、命令ストリームにおいて指定されたワークグループに関連づけられた入力データは、命令ストリームにおいて指定されたワークグループの間で共有されることができる。命令ストリームを実行することは、GPUメモリ72とSPメモリ78の間で転送される必要のあるデータの量を減らし、特定のプログラムを実行するために必要とされる全体的な時間を減らすことができる。
以上で提供された例では、命令ストリームは、異なるカーネルのワークグループが同じSPによって連続的に実行されるように該異なるカーネルのワークグループを結びつけるものとして説明される。この方法で異なるカーネルのワークグループを結びつけることは、ワークグループに関連づけられたデータが複数のカーネルによって共有されることができるので、SPに関連づけられたメモリリソースを管理するのに役立つ。しかし、用語「ワークグループ」は総称的に命令のグループを指すということが理解されるべきである。例えば、「ワークグループ」は、コンピュート・ユニファイド・デバイス・アーキテクチャ(NVIDIA社によって開発された「CUDA」、2010年9月17日にリリースされたバージョン3.2)では「スレッドブロック(thread block)」と呼ばれ得る。
ワークグループおよびカーネル指定は、一例として提供されるにすぎないことが理解されるべきである。本開示のメモリ管理の態様は、GPUアプリケーションのその他の構成に適用され得る。例えば、その他のGPUアプリケーションは、実行中に2回以上同じ入力データを用いる命令を含む、単一の比較的大きい「カーネル」を含み得る。こういった例において、本開示の態様は、やはりメモリリソースを管理するために適用され得る。同じ入力データを使用する命令を、それらの命令が同じカーネルに属するにもかかわらず結び付ける命令ストリームが、作り出されることができる。
1つまたは複数の例において、説明された機能は、ハードウェア、ハードウェア上で実行されるソフトウェア、ハードウェア上で実行されるファームウェア、またはそれらのいずれかの組み合わせに実装されることができる。いくつかの例において、コンピュータ可読媒体上に記憶された命令は、ハードウェア・コンポーネントに上述したそれらの各機能を実行させることができる。コンピュータ可読媒体はコンピュータ・データ記憶媒体を含むことができる。データ記憶媒体は、本開示で説明される技術の実装に関する命令、コードおよび/またはデータ構造を読み出すための1つまたは複数のコンピュータまたは1つまたは複数のプロセッサによってアクセスされることができる利用可能な任意の媒体であり得る。限定ではなく例として、このようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD−ROMまたはその他の光ディスクストレージ、磁気ディスクストレージ、またはその他の磁気ストレージデバイス、フラッシュメモリ、または命令もしくはデータ構造の形態で所望のプログラムコードを運びもしくは記憶するために用いられることができ、コンピュータによってアクセスされることができる、その他の任意の媒体を含むことができる。上記の組み合わせもまた、コンピュータ可読媒体の範囲内に含まれるべきである。
コードは、1つまたは複数のDSP、汎用マイクロプロセッサ、ASIC、FPGA、またはその他の等価な集積回路またはディスクリート論理回路のような1つまたは複数のプロセッサによって実行され得る。従って、ここで用いられる用語「プロセッサ」は、上述の構造のいずれか、または本明細書で説明された技術の実施に適した他のいずれかの構造を指し得る。加えて、いくつかの態様において、ここで説明された機能は、符号化および復号のために構成された、または結合された符号復号器に組み込まれた、専用のハードウェアおよび/またはソフトウェアモジュール内に設けられることができる。また、技術は、1つまたは複数の回路または論理素子において十分に実施される。
本開示の技術は、ワイヤレスハンドセット、集積回路(IC)または複数のICのセット(例えば、チップセット)を含む、多種多様のデバイスまたは装置において実施されることができる。様々なコンポーネント、モジュール、またはユニットは、開示された技術を実行するために構成された装置の機能的な態様を強調するために本開示において説明されているが、必ずしも異なるハードウェアユニットによる実現を要求するわけではない。むしろ、上述したように、様々なユニットは、適切なソフトウェアおよび/またはファームウェアと併せて、上述したような1つまたは複数のプロセッサを含む相互動作可能なハードウェアユニットの収集によって組み合わされることができる。
様々な例について説明した。これらおよびその他の例は、特許請求の範囲内にある。
様々な例について説明した。これらおよびその他の例は、特許請求の範囲内にある。
以下に、本願の出願当初請求項に記載された発明を付記する。
[C1]
グラフィックス処理ユニット(GPU)を用いてデータを処理する方法であって、
シェーダプロセッサに関する実行順序を定義する入力を受信することであって、前記実行順序が複数のカーネル指定および複数のワークグループ指定を含む、受信することと、
前記複数のワークグループ指定および前記複数のカーネル指定において識別されたカーネルのワークグループを前記シェーダプロセッサに割り当てることと、
前記シェーダプロセッサによって、入力データを処理するために前記複数のワークグループ指定および前記複数のカーネル指定において識別された前記カーネルのワークグループを実行することと、を備える方法。
[C2]
前記複数のカーネル指定が複数のカーネルを識別し、前記複数のカーネルの各カーネルが前記GPUによって実施される機能を定義する、上記C1に記載の方法。
[C3]
前記複数のワークグループ指定が複数のワークグループを識別し、前記複数のワークグループの各ワークグループが前記GPUによって入力データに対して実行される命令を含む、上記C1に記載の方法。
[C4]
前記実行順序を定義する入力を受信することが、第1のカーネルの第1のワークグループを第2のカーネルの第1のワークグループにリンクさせる指定を受信することを含み、前記第1のカーネルの前記第1のワークグループと前記第2のカーネルの前記第1のワークグループが実質的に同じ入力データに関連づけられる、上記C1に記載の方法。
[C5]
前記実行順序を実行することが、前記シェーダプロセッサによって、前記第1のカーネルの前記第1のワークグループの後に前記第2のカーネルの前記第1のワークグループを実行することを含む、上記C4に記載の方法。
[C6]
実行順序のストリームを実行することが、前記複数のワークグループ指定において識別された2つ以上のワークグループの間で入力データを共有することを含む、上記C1に記載の方法。
[C7]
前記2つ以上のワークグループの間で入力データを共有することが、前記2つ以上のワークグループの第1のワークグループと前記2つ以上のワークグループの第2のワークグループの実行のために前記シェーダプロセッサのローカルメモリ内に前記入力データを保持することを含む、上記C6に記載の方法
[C8]
ユーザ入力に応答して、アプリケーション・プログラミング・インターフェース(API)を用いて前記実行順序を定義する前記入力を生成することをさらに含む、上記C1に記載の方法。
[C9]
グラフィックス処理ユニット(GPU)であって、
シェーダプロセッサに関する実行順序を定義する入力を受信するように構成されたシーケンサ・モジュールであって、前記実行順序が複数のカーネル指定および複数のワークグループ指定を備える、シーケンサ・モジュールを備え、
前記シーケンサ・モジュールが、前記複数のワークグループ指定および前記複数のカーネル指定において識別されたカーネルのワークグループを前記シェーダプロセッサに割り当てるように構成され、
前記シェーダプロセッサが、入力データを処理するために前記複数のワークグループ指定および前記複数のカーネル指定において識別されたカーネルの前記ワークグループを実行するように構成される、グラフィックス処理ユニット(GPU)。
[C10]
前記複数のカーネル指定が複数のカーネルを識別し、前記複数のカーネルの各カーネルが、前記GPUよって実施される機能を定義する、上記C9に記載のGPU。
[C11]
前記複数のワークグループ指定が複数のワークグループを識別し、前記複数のワークグループの各ワークグループが前記GPUによって入力データに対して実行される命令を含む、上記C9に記載のGPU。
[C12]
前記シーケンサ・モジュールが、第1のカーネルの第1のワークグループを第2のカーネルの第1のワークグループにリンクさせる指定を受信するようにさらに構成され、前記第1のカーネルの前記第1のワークグループと前記第2のカーネルの前記第1のワークグループが実質的に同じ入力データに関連づけられる、上記C9に記載のGPU。
[C13]
前記シェーダプロセッサが、前記第1のカーネルの前記第1のワークグループの後に前記第2のカーネルの前記第1のワークグループを実行するようにさらに構成される、上記C12に記載のGPU。
[C14]
前記シェーダプロセッサが、シェーダプロセッサメモリをさらに備え、前記シェーダプロセッサが、前記複数のワークグループ指定において識別された2つ以上のワークグループに関連づけられた入力データを記憶するように構成される、上記C9に記載のGPU。
[C15]
前記シェーダプロセッサメモリが、前記2つ以上のワークグループに関連づけられた前記記憶された入力データを保持し、前記2つ以上のワークグループの間で前記記憶されたデータを共有するようにさらに構成される、上記C14に記載のGPU。
[C16]
グラフィックス処理ユニット(GPU)であって、
シェーダプロセッサに関する実行順序を定義する入力を受信するための手段であって、前記実行順序が複数のカーネル指定および複数のワークグループ指定を含む、受信するための手段と、
前記複数のワークグループ指定および前記複数のカーネル指定において識別されたカーネルのワークグループを前記シェーダプロセッサに割り当てるための手段と、
入力データを処理するために前記複数のワークグループ指定および前記複数のカーネル指定において識別されたカーネルの前記ワークグループを実行するための手段と、を備えるグラフィックス処理ユニット(GPU)。
[C17]
前記複数のカーネル指定が複数のカーネルを識別し、前記複数のカーネルの各カーネルが前記GPUによって実施される機能を定義する、上記C16に記載のGPU。
[C18]
前記複数のワークグループ指定が複数のワークグループを識別し、前記複数のワークグループの各ワークグループが、前記GPUによって入力データに対して実行される命令を含む、上記C16に記載のGPU。
[C19]
入力を受信するための前記手段が、第1のカーネルの第1のワークグループを第2のカーネルの第1のワークグループにリンクさせる指定を受信するようにさらに構成され、前記第1のカーネルの前記第1のワークグループと前記第2のカーネルの前記第1のワークグループが実質的に同じ入力データに関連づけられる、上記C16に記載のGPU。
[C20]
実行するための前記手段が、前記第1のカーネルの前記第1のワークグループの後に前記第2のカーネルの前記第1のワークグループを実行するようにさらに構成される、上記C19に記載のGPU。
[C21]
実行するための前記手段が、前記複数のワークグループ指定において識別された2つ以上のワークグループに関連づけられた入力データを記憶するための手段をさらに含む、上記C16に記載のGPU。
[C22]
入力データを記憶するための前記手段が、前記2つ以上のワークグループに関連づけられた前記記憶された入力データを保持し、前記2つ以上のワークグループの間で前記記憶されたデータを共有するようにさらに構成される、上記C21に記載のGPU。
[C23]
コンピュータ可読記憶媒体であって、
シェーダプロセッサに関する実行順序を定義する入力を受信することであって、前記実行順序が複数のカーネル指定および複数のワークグループ指定を含む、受信することと、
前記複数のワークグループ指定および前記複数のカーネル指定において識別されたカーネルのワークグループを前記シェーダプロセッサに割り当てることと、
前記シェーダプロセッサによって、入力データを処理するために前記複数のワークグループ指定および前記複数のカーネル指定において識別されたカーネルの前記ワークグループ実行することと、
を、グラフィックス処理ユニット(GPU)を有するコンピューティングデバイスの1つまたは複数のプログラマブルプロセッサに行わせるための命令でエンコードされたコンピュータ可読記憶媒体。
[C24]
前記複数のカーネル指定が複数のカーネルを識別し、前記複数のカーネルの各カーネルが、前記GPUよって実施される機能を定義する、上記C23に記載のコンピュータ可読記憶媒体。
[C25]
前記複数のワークグループ指定が複数のワークグループを識別し、前記複数のワークグループの各ワークグループが前記GPUによって入力データに対して実行される命令を含む、上記C23に記載のコンピュータ可読記憶媒体。
[C26]
第1のカーネルの第1のワークグループを第2のカーネルの第1のワークグループにリンクさせる指定を受信することをコンピューティングデバイスの1つまたは複数のプログラマブルプロセッサに行わせるための命令をさらに備え、
前記第1のカーネルの前記第1のワークグループと前記第2のカーネルの前記第1のワークグループが実質的に同じ入力データに関連づけられる、上記C23に記載のコンピュータ可読記憶媒体。
[C27]
前記実行順序を実行することが、前記シェーダプロセッサによって、前記第1のカーネルの前記第1のワークグループの後に、第2のカーネルの前記第1のワークグループを実行することを含む、上記C26に記載のコンピュータ可読記憶媒体。
[C28]
実行順序のストリームを実行することが、前記複数のワークグループ指定において識別された2つ以上のワークグループの間で入力データを共有することを含む、上記C23に記載のコンピュータ可読記憶媒体。
[C29]
前記2つ以上のワークグループの間で入力データを共有することが、前記2つ以上のワークグループの第1のワークグループと前記2つ以上のワークグループの第2のワークグループの実行のために前記シェーダプロセッサのローカルメモリに前記入力データを保持することを含む、上記C28に記載のコンピュータ可読記憶媒体。

Claims (29)

  1. グラフィックス処理ユニット(GPU)を用いてデータを処理する方法であって、
    シェーダプロセッサに関する実行順序を定義する入力を受信することであって、前記実行順序が複数のカーネル指定および複数のワークグループ指定を含む、受信することと、
    前記複数のワークグループ指定および前記複数のカーネル指定において識別されたカーネルのワークグループを前記シェーダプロセッサに割り当てることと、
    前記シェーダプロセッサによって、入力データを処理するために前記複数のワークグループ指定および前記複数のカーネル指定において識別された前記カーネルのワークグループを実行することと、を備える方法。
  2. 前記複数のカーネル指定が複数のカーネルを識別し、前記複数のカーネルの各カーネルが前記GPUによって実施される機能を定義する、請求項1に記載の方法。
  3. 前記複数のワークグループ指定が複数のワークグループを識別し、前記複数のワークグループの各ワークグループが前記GPUによって入力データに対して実行される命令を含む、請求項1に記載の方法。
  4. 前記実行順序を定義する入力を受信することが、第1のカーネルの第1のワークグループを第2のカーネルの第1のワークグループにリンクさせる指定を受信することを含み、前記第1のカーネルの前記第1のワークグループと前記第2のカーネルの前記第1のワークグループが実質的に同じ入力データに関連づけられる、請求項1に記載の方法。
  5. 前記実行順序を実行することが、前記シェーダプロセッサによって、前記第1のカーネルの前記第1のワークグループの後に前記第2のカーネルの前記第1のワークグループを実行することを含む、請求項4に記載の方法。
  6. 実行順序のストリームを実行することが、前記複数のワークグループ指定において識別された2つ以上のワークグループの間で入力データを共有することを含む、請求項1に記載の方法。
  7. 前記2つ以上のワークグループの間で入力データを共有することが、前記2つ以上のワークグループの第1のワークグループと前記2つ以上のワークグループの第2のワークグループの実行のために前記シェーダプロセッサのローカルメモリ内に前記入力データを保持することを含む、請求項6に記載の方法
  8. ユーザ入力に応答して、アプリケーション・プログラミング・インターフェース(API)を用いて前記実行順序を定義する前記入力を生成することをさらに含む、請求項1に記載の方法。
  9. グラフィックス処理ユニット(GPU)であって、
    シェーダプロセッサに関する実行順序を定義する入力を受信するように構成されたシーケンサ・モジュールであって、前記実行順序が複数のカーネル指定および複数のワークグループ指定を備える、シーケンサ・モジュールを備え、
    前記シーケンサ・モジュールが、前記複数のワークグループ指定および前記複数のカーネル指定において識別されたカーネルのワークグループを前記シェーダプロセッサに割り当てるように構成され、
    前記シェーダプロセッサが、入力データを処理するために前記複数のワークグループ指定および前記複数のカーネル指定において識別されたカーネルの前記ワークグループを実行するように構成される、グラフィックス処理ユニット(GPU)。
  10. 前記複数のカーネル指定が複数のカーネルを識別し、前記複数のカーネルの各カーネルが、前記GPUよって実施される機能を定義する、請求項9に記載のGPU。
  11. 前記複数のワークグループ指定が複数のワークグループを識別し、前記複数のワークグループの各ワークグループが前記GPUによって入力データに対して実行される命令を含む、請求項9に記載のGPU。
  12. 前記シーケンサ・モジュールが、第1のカーネルの第1のワークグループを第2のカーネルの第1のワークグループにリンクさせる指定を受信するようにさらに構成され、前記第1のカーネルの前記第1のワークグループと前記第2のカーネルの前記第1のワークグループが実質的に同じ入力データに関連づけられる、請求項9に記載のGPU。
  13. 前記シェーダプロセッサが、前記第1のカーネルの前記第1のワークグループの後に前記第2のカーネルの前記第1のワークグループを実行するようにさらに構成される、請求項12に記載のGPU。
  14. 前記シェーダプロセッサが、シェーダプロセッサメモリをさらに備え、前記シェーダプロセッサが、前記複数のワークグループ指定において識別された2つ以上のワークグループに関連づけられた入力データを記憶するように構成される、請求項9に記載のGPU。
  15. 前記シェーダプロセッサメモリが、前記2つ以上のワークグループに関連づけられた前記記憶された入力データを保持し、前記2つ以上のワークグループの間で前記記憶されたデータを共有するようにさらに構成される、請求項14に記載のGPU。
  16. グラフィックス処理ユニット(GPU)であって、
    シェーダプロセッサに関する実行順序を定義する入力を受信するための手段であって、前記実行順序が複数のカーネル指定および複数のワークグループ指定を含む、受信するための手段と、
    前記複数のワークグループ指定および前記複数のカーネル指定において識別されたカーネルのワークグループを前記シェーダプロセッサに割り当てるための手段と、
    入力データを処理するために前記複数のワークグループ指定および前記複数のカーネル指定において識別されたカーネルの前記ワークグループを実行するための手段と、を備えるグラフィックス処理ユニット(GPU)。
  17. 前記複数のカーネル指定が複数のカーネルを識別し、前記複数のカーネルの各カーネルが前記GPUによって実施される機能を定義する、請求項16に記載のGPU。
  18. 前記複数のワークグループ指定が複数のワークグループを識別し、前記複数のワークグループの各ワークグループが、前記GPUによって入力データに対して実行される命令を含む、請求項16に記載のGPU。
  19. 入力を受信するための前記手段が、第1のカーネルの第1のワークグループを第2のカーネルの第1のワークグループにリンクさせる指定を受信するようにさらに構成され、前記第1のカーネルの前記第1のワークグループと前記第2のカーネルの前記第1のワークグループが実質的に同じ入力データに関連づけられる、請求項16に記載のGPU。
  20. 実行するための前記手段が、前記第1のカーネルの前記第1のワークグループの後に前記第2のカーネルの前記第1のワークグループを実行するようにさらに構成される、請求項19に記載のGPU。
  21. 実行するための前記手段が、前記複数のワークグループ指定において識別された2つ以上のワークグループに関連づけられた入力データを記憶するための手段をさらに含む、請求項16に記載のGPU。
  22. 入力データを記憶するための前記手段が、前記2つ以上のワークグループに関連づけられた前記記憶された入力データを保持し、前記2つ以上のワークグループの間で前記記憶されたデータを共有するようにさらに構成される、請求項21に記載のGPU。
  23. コンピュータ可読記憶媒体であって、
    シェーダプロセッサに関する実行順序を定義する入力を受信することであって、前記実行順序が複数のカーネル指定および複数のワークグループ指定を含む、受信することと、
    前記複数のワークグループ指定および前記複数のカーネル指定において識別されたカーネルのワークグループを前記シェーダプロセッサに割り当てることと、
    前記シェーダプロセッサによって、入力データを処理するために前記複数のワークグループ指定および前記複数のカーネル指定において識別されたカーネルの前記ワークグループ実行することと、
    を、グラフィックス処理ユニット(GPU)を有するコンピューティングデバイスの1つまたは複数のプログラマブルプロセッサに行わせるための命令でエンコードされたコンピュータ可読記憶媒体。
  24. 前記複数のカーネル指定が複数のカーネルを識別し、前記複数のカーネルの各カーネルが、前記GPUよって実施される機能を定義する、請求項23に記載のコンピュータ可読記憶媒体。
  25. 前記複数のワークグループ指定が複数のワークグループを識別し、前記複数のワークグループの各ワークグループが前記GPUによって入力データに対して実行される命令を含む、請求項23に記載のコンピュータ可読記憶媒体。
  26. 第1のカーネルの第1のワークグループを第2のカーネルの第1のワークグループにリンクさせる指定を受信することをコンピューティングデバイスの1つまたは複数のプログラマブルプロセッサに行わせるための命令をさらに備え、
    前記第1のカーネルの前記第1のワークグループと前記第2のカーネルの前記第1のワークグループが実質的に同じ入力データに関連づけられる、請求項23に記載のコンピュータ可読記憶媒体。
  27. 前記実行順序を実行することが、前記シェーダプロセッサによって、前記第1のカーネルの前記第1のワークグループの後に、第2のカーネルの前記第1のワークグループを実行することを含む、請求項26に記載のコンピュータ可読記憶媒体。
  28. 実行順序のストリームを実行することが、前記複数のワークグループ指定において識別された2つ以上のワークグループの間で入力データを共有することを含む、請求項23に記載のコンピュータ可読記憶媒体。
  29. 前記2つ以上のワークグループの間で入力データを共有することが、前記2つ以上のワークグループの第1のワークグループと前記2つ以上のワークグループの第2のワークグループの実行のために前記シェーダプロセッサのローカルメモリに前記入力データを保持することを含む、請求項28に記載のコンピュータ可読記憶媒体。
JP2014516973A 2011-06-20 2012-05-18 グラフィックス処理ユニットにおけるメモリの共有 Expired - Fee Related JP5752853B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/164,615 2011-06-20
US13/164,615 US9092267B2 (en) 2011-06-20 2011-06-20 Memory sharing in graphics processing unit
PCT/US2012/038659 WO2012177343A1 (en) 2011-06-20 2012-05-18 Memory sharing in graphics processing unit

Publications (2)

Publication Number Publication Date
JP2014523021A true JP2014523021A (ja) 2014-09-08
JP5752853B2 JP5752853B2 (ja) 2015-07-22

Family

ID=46201818

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014516973A Expired - Fee Related JP5752853B2 (ja) 2011-06-20 2012-05-18 グラフィックス処理ユニットにおけるメモリの共有

Country Status (6)

Country Link
US (1) US9092267B2 (ja)
EP (1) EP2721488B1 (ja)
JP (1) JP5752853B2 (ja)
KR (1) KR101590734B1 (ja)
CN (1) CN103608777B (ja)
WO (1) WO2012177343A1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019537104A (ja) * 2016-10-21 2019-12-19 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated 分散型gpuのデータ局所性を改善するためのメカニズム
JP2023516819A (ja) * 2020-04-28 2023-04-20 ソニー・インタラクティブエンタテインメント エルエルシー 領域ベースの依存関係によるカーネルの効率的なマルチgpu実行のためのシステム及び方法

Families Citing this family (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8842122B2 (en) * 2011-12-15 2014-09-23 Qualcomm Incorporated Graphics processing unit with command processor
US9256915B2 (en) 2012-01-27 2016-02-09 Qualcomm Incorporated Graphics processing unit buffer management
US9009712B2 (en) * 2012-03-16 2015-04-14 Advanced Micro Devices, Inc. GPU distributed work-item queuing
US9286648B2 (en) * 2012-08-03 2016-03-15 Nadar Mariappan S Zero communication block partitioning
US20140122558A1 (en) * 2012-10-29 2014-05-01 Nvidia Corporation Technique for offloading compute operations utilizing a low-latency data transmission protocol
JP5971115B2 (ja) * 2012-12-26 2016-08-17 富士通株式会社 情報処理プログラム、情報処理方法及び装置
US20140232733A1 (en) * 2013-02-19 2014-08-21 Jason Caulkins Graphics Processing Unit Pre-Caching
US9052740B2 (en) * 2013-03-12 2015-06-09 Qualcomm Incorporated Adaptive data path for computer-vision applications
US20140274243A1 (en) * 2013-03-15 2014-09-18 Colorado Seminary Tailoring educational learning environments
US9442706B2 (en) * 2014-05-30 2016-09-13 Apple Inc. Combining compute tasks for a graphics processing unit
US9633411B2 (en) * 2014-06-26 2017-04-25 Qualcomm Incorporated Load scheme for shared register in GPU
CN107003934B (zh) * 2014-12-08 2020-12-29 英特尔公司 改进共享本地存储器和系统全局存储器之间的存储器访问性能的装置和方法
GB2533284B (en) * 2014-12-11 2017-04-12 Imagination Tech Ltd Performing object detection
US9749548B2 (en) 2015-01-22 2017-08-29 Google Inc. Virtual linebuffers for image signal processors
US9769356B2 (en) 2015-04-23 2017-09-19 Google Inc. Two dimensional shift array for image processor
US10291813B2 (en) 2015-04-23 2019-05-14 Google Llc Sheet generator for image processor
US9756268B2 (en) 2015-04-23 2017-09-05 Google Inc. Line buffer unit for image processor
US10095479B2 (en) 2015-04-23 2018-10-09 Google Llc Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure
US9772852B2 (en) 2015-04-23 2017-09-26 Google Inc. Energy efficient processor core architecture for image processor
US9965824B2 (en) 2015-04-23 2018-05-08 Google Llc Architecture for high performance, power efficient, programmable image processing
US9785423B2 (en) 2015-04-23 2017-10-10 Google Inc. Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure
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
GB2541179B (en) 2015-07-31 2019-10-30 Imagination Tech Ltd Denoising filter
US9830150B2 (en) 2015-12-04 2017-11-28 Google Llc Multi-functional execution lane for image processor
US10313641B2 (en) 2015-12-04 2019-06-04 Google Llc Shift register with reduced wiring complexity
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
US10204396B2 (en) 2016-02-26 2019-02-12 Google Llc Compiler managed memory for image processor
US10380969B2 (en) 2016-02-28 2019-08-13 Google Llc Macro I/O unit for image processor
US10838782B2 (en) * 2016-05-24 2020-11-17 Accenture Global Solutions Limited Event abstractor
US20180005059A1 (en) 2016-07-01 2018-01-04 Google Inc. Statistics Operations On Two Dimensional Image Processor
US10546211B2 (en) 2016-07-01 2020-01-28 Google Llc Convolutional neural network on programmable two dimensional image processor
US20180005346A1 (en) 2016-07-01 2018-01-04 Google Inc. Core Processes For Block Operations On An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register
US20180007302A1 (en) 2016-07-01 2018-01-04 Google Inc. Block Operations For An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register
US10552934B2 (en) 2016-07-01 2020-02-04 Intel Corporation Reducing memory latency in graphics operations
US10223822B2 (en) * 2016-12-22 2019-03-05 Apple Inc. Mid-render compute for graphics processing
US10445852B2 (en) * 2016-12-22 2019-10-15 Apple Inc. Local image blocks for graphics processing
KR102592330B1 (ko) * 2016-12-27 2023-10-20 삼성전자주식회사 OpenCL 커널을 처리하는 방법과 이를 수행하는 컴퓨팅 장치
US10367639B2 (en) 2016-12-29 2019-07-30 Intel Corporation Graphics processor with encrypted kernels
US10255105B2 (en) * 2017-04-11 2019-04-09 Imagination Technologies Limited Parallel computing architecture for use with a non-greedy scheduling algorithm
US10552161B2 (en) 2017-06-21 2020-02-04 International Business Machines Corporation Cluster graphical processing unit (GPU) resource sharing efficiency by directed acyclic graph (DAG) generation
US10942746B2 (en) 2017-08-31 2021-03-09 Rail Vision Ltd System and method for high throughput in multiple computations
KR102649351B1 (ko) 2018-11-06 2024-03-20 삼성전자주식회사 세분화된 상태들에 기초한 그래픽스 프로세서 및 그래픽스 처리 방법
WO2020184982A1 (ko) * 2019-03-11 2020-09-17 서울대학교산학협력단 이종클러스터 시스템에서 실행되는 프로그램을 실행시키는 방법 및 컴퓨터 프로그램
CN110446046B (zh) * 2019-08-19 2021-04-27 杭州图谱光电科技有限公司 一种基于嵌入式平台的批量图像快速解码方法
FR3105469B1 (fr) * 2019-12-19 2021-12-31 Thales Sa Processeur graphique, plateforme comprenant un tel processeur graphique et un processeur central multicoeurs, et procede de gestion de ressource (s) d'un tel processeur graphique
US11809902B2 (en) * 2020-09-24 2023-11-07 Advanced Micro Devices, Inc. Fine-grained conditional dispatching
CN113034629B (zh) * 2021-05-17 2021-08-20 腾讯科技(深圳)有限公司 图像处理方法、装置、计算机设备及存储介质
KR102351134B1 (ko) * 2021-08-03 2022-01-13 주식회사 미리디 웹 서버 기반의 디자인 리소스 관리 방법 및 시스템
US20230047481A1 (en) * 2021-08-11 2023-02-16 Apple Inc. Affinity-based Graphics Scheduling

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009520307A (ja) * 2005-12-19 2009-05-21 エヌヴィディア コーポレイション グラフィックスプロセッサの並列アレイアーキテクチャ
WO2011017026A1 (en) * 2009-07-27 2011-02-10 Advanced Micro Devices, Inc. Mapping processing logic having data parallel threads across processors
WO2011028981A1 (en) * 2009-09-03 2011-03-10 Advanced Micro Devices, Inc. A processing unit with a plurality of shader engines

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0693737A3 (en) * 1994-07-21 1997-01-08 Ibm Method and apparatus for managing tasks in a multiprocessor system
US7548244B2 (en) 2005-01-12 2009-06-16 Sony Computer Entertainment Inc. Interactive debugging and monitoring of shader programs executing on a graphics processor
CN101849227A (zh) * 2005-01-25 2010-09-29 透明信息技术有限公司 在单片构造的硅芯片上采用多个图形核心的图形处理和显示系统
US9135017B2 (en) 2007-01-16 2015-09-15 Ati Technologies Ulc Configurable shader ALU units
KR100980449B1 (ko) * 2007-12-17 2010-09-07 한국전자통신연구원 병렬 전역조명 렌더링 방법 및 시스템
US8120608B2 (en) 2008-04-04 2012-02-21 Via Technologies, Inc. Constant buffering for a computational core of a programmable graphics processing unit
JP5461533B2 (ja) * 2008-05-30 2014-04-02 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ローカル及びグローバルのデータ共有
GB2466078B (en) 2008-12-15 2013-11-13 Advanced Risc Mach Ltd Apparatus and method for tracing activities of a shader program executed on shader circuitry of a data processing apparatus
US8456480B2 (en) * 2009-01-14 2013-06-04 Calos Fund Limited Liability Company Method for chaining image-processing functions on a SIMD processor
US8499305B2 (en) * 2010-10-15 2013-07-30 Via Technologies, Inc. Systems and methods for performing multi-program general purpose shader kickoff
US8683468B2 (en) * 2011-05-16 2014-03-25 Advanced Micro Devices, Inc. Automatic kernel migration for heterogeneous cores

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009520307A (ja) * 2005-12-19 2009-05-21 エヌヴィディア コーポレイション グラフィックスプロセッサの並列アレイアーキテクチャ
WO2011017026A1 (en) * 2009-07-27 2011-02-10 Advanced Micro Devices, Inc. Mapping processing logic having data parallel threads across processors
WO2011028981A1 (en) * 2009-09-03 2011-03-10 Advanced Micro Devices, Inc. A processing unit with a plurality of shader engines

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CSNJ201110037063; 西辻崇 , 外4名: '"AMD GPUとOpenCLを用いたフレネル回折計算の高速計算"' 電子情報通信学会2011年総合大会講演論文集 情報・システム2 , 20110228, p.63 *
JPN6014052924; 西辻崇 , 外4名: '"AMD GPUとOpenCLを用いたフレネル回折計算の高速計算"' 電子情報通信学会2011年総合大会講演論文集 情報・システム2 , 20110228, p.63 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019537104A (ja) * 2016-10-21 2019-12-19 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated 分散型gpuのデータ局所性を改善するためのメカニズム
JP2023516819A (ja) * 2020-04-28 2023-04-20 ソニー・インタラクティブエンタテインメント エルエルシー 領域ベースの依存関係によるカーネルの効率的なマルチgpu実行のためのシステム及び方法
JP7376732B2 (ja) 2020-04-28 2023-11-08 ソニー・インタラクティブエンタテインメント エルエルシー 領域ベースの依存関係によるカーネルの効率的なマルチgpu実行のためのシステム及び方法
JP7453460B2 (ja) 2020-04-28 2024-03-19 ソニー・インタラクティブエンタテインメント エルエルシー 領域ベースの依存関係によるカーネルの効率的なマルチgpu実行のためのシステム及び方法

Also Published As

Publication number Publication date
US20120320070A1 (en) 2012-12-20
JP5752853B2 (ja) 2015-07-22
US9092267B2 (en) 2015-07-28
EP2721488B1 (en) 2017-08-16
CN103608777A (zh) 2014-02-26
KR20140015631A (ko) 2014-02-06
CN103608777B (zh) 2017-05-10
EP2721488A1 (en) 2014-04-23
KR101590734B1 (ko) 2016-02-01
WO2012177343A1 (en) 2012-12-27

Similar Documents

Publication Publication Date Title
JP5752853B2 (ja) グラフィックス処理ユニットにおけるメモリの共有
US11442795B2 (en) Convergence among concurrently executing threads
US8842122B2 (en) Graphics processing unit with command processor
US9535815B2 (en) System, method, and computer program product for collecting execution statistics for graphics processing unit workloads
JP6077018B2 (ja) 異種cpu−gpu計算のための実行モデル
TWI502510B (zh) 最佳化管理執行緒堆疊記憶體的系統、方法,及電腦程式產品
KR20160143489A (ko) 인터리빙을 수행하는 방법 및 장치.
JP5778343B2 (ja) グラフィックス処理ユニットでの命令カリング
KR20130036213A (ko) 상태 정보의 손실 없이 복수의 프로세서들을 사용하여 비디오 및/또는 그래픽 데이터를 처리하기 위한 방법, 시스템 및 장치
US20200334076A1 (en) Deep learning thread communication
US11880715B2 (en) Method and system for opportunistic load balancing in neural networks using metadata
US11934867B2 (en) Techniques for divergent thread group execution scheduling
CN112395010A (zh) 实现工作负载的静态映射的乱序流水线执行的方法和装置
JP2021034023A (ja) アクセラレータにおいてヘテロジニアスコンポーネントを設定する方法及び装置
CN112214443B (zh) 设置于图形处理器中的二次卸载装置和方法
CN112230931B (zh) 适用于图形处理器的二次卸载的编译方法、装置和介质
Joseph et al. Performance and energy consumption analysis of java code utilizing embedded GPU

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20141201

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141216

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150316

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150520

R150 Certificate of patent or registration of utility model

Ref document number: 5752853

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees