【文献】
Aaftab Munshi,The OpenCL Specification Version:1.0 Document Revision : 48,[online],Khronos OpenCL Working Group, www.khronos.org,2009年10月 6日,Pages:23〜26, 51〜87,URL,https://www.khronos.org/registry/cl/specs/opencl-1.0.pdf
【文献】
西 剛伺,ホストコードを使用したGPGPUのプログラミング,日経Win PC,日本,日経BP社,2010年 1月29日,第16巻,第4号,Pages:148〜149
【文献】
西 剛伺,GPUによる汎用コンピューティング−ATI StreamおよびSDK,電子情報通信学会2009年基礎・境界ソサイエティ大会予稿集,社団法人電子情報通信学会,2009年 9月15日,Pages:SS-23〜SS-26
【文献】
増渕美生,鈴置雅一,Jim Kahle,Cell Broadband Engineのアーキテクチャ,情報処理,日本,社団法人情報処理学会,2005年11月15日,第46巻,第11号,Pages:1244〜1250
(58)【調査した分野】(Int.Cl.,DB名)
前記親バッファに関連付けられたコンピュータユニットが中央処理ユニットであり、前記親バッファに関連付けられていないコンピュータユニットがグラフィック処理ユニットである、請求項1に記載のコンピュータ制御方法。
異種コンピュータ環境において親バッファに関連付けられた複数のサブバッファを管理する処理を1以上の処理ユニットに実行させる命令を記録した不揮発性のマシーン読み取り可能記録媒体であって、前記1以上の処理ユニットに対し、
単一装置で実行される中央処理ユニット及びグラフィック処理ユニットを含む複数の異種コンピュータユニットを用いる処理のために前記親バッファを割当てる処理と、
前記複数のサブバッファの各サブバッファに関し、
(a)複数の異種コンピュータユニットの1つのための特定サブバッファを前記親バッファから作成する処理であって、前記複数の異種コンピュータユニットの各々に対して異なるサブバッファがある当該処理と、
(b)前記特定サブバッファにサブバッファデータを記憶する処理と、
前記親バッファに関連しない、複数の異種コンピュータユニットの1つに対応する各サブバッファに関し、対応するコンピュータユニットにあるプライベートメモリ内のサブバッファデータへの更新を管理する処理と、を実行させるための命令を記録した不揮発性のマシーン読み取り可能記録媒体。
前記親バッファに関連付けられたコンピュータユニットが中央処理ユニットであり、前記親バッファに関連付けられていないコンピュータユニットがグラフィック処理ユニットである、請求項9に記載のマシーン読み取り可能記録媒体。
前記親バッファに関連付けられたコンピュータユニットが中央処理ユニットであり、前記親バッファに関連付けられていないコンピュータユニットがグラフィック処理ユニットである、請求項16に記載の装置。
【発明を実施するための形態】
【0010】
以下に親バッファから作成されたサブバッファを使用するマルチプロセッサでのデータ並列コンピュータ計算のための方法及び装置を説明する。以下の説明では、本発明の実施形態の詳細な説明を提供するために、多数の具体的詳細が示されている。しかしながら、当業者であれば、本発明の実施形態はこれらの具体的詳細がなくても実施できることは理解できるはずである。場合によっては、本説明の理解が曖昧にならないように、公知の構成要素、構造、及び技術は詳細に説明されていない。
【0011】
本明細書における「1つの実施形態」又は「ある実施形態」の引用は、実施形態に関して説明された特定の特徴、構造、又は特性が、本発明の少なくとも1つの実施形態に含まれることを意味する。本明細書における種々の箇所での「1つの実施形態では」という句の出現は、必ずしも全てが同じ実施形態を参照するものではない。
【0012】
以下の図に示される処理は、ハードウェア(回路、専用ロジックなど)、ソフトウェア(汎用コンピュータシステム又は専用機械で実行されるものなど)、又はこれらの組合せを含む処理ロジックによって実行される。以下では幾つかの連続した動作に関して処理を説明しているが、説明される動作の幾つかを異なる順序で実行できることを理解されたい。更に、幾つかの動作は、連続ではなく並列に実行することができる。
【0013】
グラフィック処理ユニット(GPU)は、2D、3Dグラフィック処理及び/又はデジタルビデオに関する機能などの高効率グラフィック処理を実行する専用グラフィックプロセッサとすることができる。GPUは、グラフィック処理、例えば、ブリッター処理、テクスチャマッピング、ポリゴンレンダリング、画素シェーディング、及びバーテックスシェーディングを実行するための特別な(プログラム可能)ハードウェアを含むことができる。GPUは、フレームバッファからデータを取り出して画像を表示のためのフレームバッファにレンダリングするために画素をブレンドすることで知られる。また、GPUは、フレームバッファを制御することができ、ディスプレイ、例えばCRT又はLCDディスプレイをリフレッシュするためにフレームバッファを使用できるようにする。CRT又はLCDディスプレイのいずれかは、少なくとも20Hzの速度でリフレッシュを必要とする短持続性ディスプレイである(例えば、1/30秒毎に、ディスプレイがフレームバッファからのデータによってリフレッシュされる)。通常、GPUは、ディスプレイコントローラを介してラスタグラフィック画像をディスプレイ装置に出力するために、GPUに結合されたCPUからグラフィック処理タスクを取得することができる。本明細書における「GPU」の参照は、引用により本明細書に組み入れられる米国特許第7015913のLindholdm等の「プログラム可能グラフィックプロセッサにおけるデータのマルチスレッド処理のための方法及び装置」、及び米国特許第6970206のSwan等の「グラフィックプロセッサによってインタレースビデオをデインタレースするための方法」に説明されるグラフィックプロセッサ又はプログラム可能グラフィックプロセッサとすることができる。
【0014】
1つの実施形態では、CPU又はGPUなどの複数の異なるタイプのプロセッサは、データ処理システムにおける利用可能な処理資源の使用効率を上げるために1つ又はそれ以上のアプリケーションに対するデータ並列処理タスクを同時に実行することができる。データ処理システムの処理資源は、CPU又はGPUなどの複数の物理コンピュータ装置に基づくことができる。物理コンピュータ装置は、1つ又はそれ以上のコンピュータユニットを含むことができる。1つの実施形態では、データ並列処理タスク(又はデータ並列タスク)は、プロセッサの複数のタイプ、例えば、タスクを実行することができるCPU又はGPUに任せることができる。データ並列タスクは、プロセッサからの幾つかの特定の処理能力を要求することがある。処理能力は、例えば、専用テクスチャリングハードウェアサポート、倍精度浮動小数点演算、専用ローカルメモリ、ストリームデータキャッシュ、又は同期基本命令とすることができる。プロセッサの別々のタイプは、処理能力の種々の重なり合ったグループを提供することができる。例えば、CPU及びGPUの両方は、倍精度浮動小数点コンピュータ計算を実行することができる。1つの実施形態では、アプリケーションは、データ並列処理タスクを実行するために、どちらが利用できるとしてもCPU又はGPUのいずれかを活用することができる。
【0015】
別の実施形態では、本システムは、親バッファを割り当てることができ、この親バッファを複数のサブバッファに更に細分することができる。サブバッファに対するコンピュータユニットが、親バッファに関連付けられたものと同じコンピュータユニットである場合、このコンピュータユニットは、ポインタを使用してサブバッファデータにアクセスする。サブバッファに対するコンピュータユニットが、親バッファに対するコンピュータユニットとは異なる場合、システムは、サブバッファに対するコンピュータユニットにローカルのメモリにサブバッファからのデータをコピーする。更に、本システムは、コピーされたデータへの更新を追跡し、更新されたデータをサブバッファに転送する。
【0016】
図1は、アプリケーションのためのデータ並列コンピュータ計算を実行するためにCPU及び/又はGPUを含むコンピュータ装置を構成するためのシステム100の1つの実施形態を示すブロック図である。システム100は、並列コンピュータ計算アーキテクチャを実行することができる。1つの実施形態では、システム100は、データバス113を介して1つ又はそれ以上の中央プロセッサ117及びメディアプロセッサ115などの1つ又はそれ以上の他のプロセッサに結合された1つ又はそれ以上のホストプロセッサを含むグラフィックシステムとすることができる。複数のホストプロセッサは、ホスト側システム101において共にネットワーク化することができる。複数の中央プロセッサ117は、異なるコンピュータメーカからのマルチコアCPUを含むことができる。CPU又はGPUなどのコンピュータプロセッサ又はコンピュータユニットに能力グループを関連付けることができる。例えば、メディアプロセッサは、専用テクスチャレンダリングハードウェアを備えたGPUとすることができる。別のメディアプロセッサは、専用テクスチャレンダリングハードウェア及び倍精度浮動小数点演算の両方をサポートするGPUとすることができる。複数のGPUは、スケーラブルリンクインターフェイス(SLI)又はクロスファイア構成のために互いに接続することができる。
【0017】
1つの実施形態では、ホスト側システム101は、ソフトウェアスタックをサポートすることができる。ソフトウェアスタックは、アプリケーション103、コンピュータプラットフォームレイヤ141、例えば、OpenCL(登録商標)(オープンコンピューティング言語)プラットフォーム、コンピュータランタイムレイヤ109、コンピュータコンパイラ107、及びコンピュータアプリケーションライブラリ105などのソフトウェアスタック構成要素を含むことができる。アプリケーション103は、API呼出しを介して他のスタック構成要素にインターフェイス接続することができる。1つ又はそれ以上のスレッドは、ホスト側システム101におけるアプリケーション103に関して同時に実行することができる。コンピュータプラットフォームレイヤ141は、データ構造、或いはコンピュータ装置データ構造、各付属の物理コンピュータ装置に対する記憶処理能力を維持することができる。1つの実施形態では、アプリケーションは、コンピュータプラットフォームレイヤ141を介してホスト側システム101の利用可能な処理資源に関する情報を検索することができる。アプリケーションは、コンピュータプラットフォームレイヤ141を介して処理タスクを実行するための能力要件を選択及び指定することができる。従って、コンピュータプラットフォームレイヤ141は、処理タスクのための付属のCPU117及び/又はGPU115からの処理資源を割り当て及び初期化するための物理コンピュータ装置に対する構成を決定することができる。1つの実施形態では、コンピュータプラットフォームレイヤ141は、構成された1つ又はそれ以上の実際の物理コンピュータ装置に対応するアプリケーションのための1つ又はそれ以上の論理コンピュータ装置を生成することができる。
【0018】
コンピュータランタイムレイヤ109は、例えば、1つ又はそれ以上の論理コンピュータ装置に基づいて、アプリケーション103のための構成された処理資源に従って処理タスクの実行を管理することができる。1つの実施形態では、処理タスクの実行は、処理タスクを表すコンピュータプログラムオブジェクトを作成する段階、及び、例えば、実行命令、入力/出力データなどを保持するためのメモリ資源を割り当てる段階を含むことができる。コンピュータプログラムオブジェクトのためにロードされた実行命令は、コンピュータプログラム実行命令とすることができる。コンピュータプログラム実行命令は、CPU又はGPUなどのコンピュータプロセッサ又はコンピュータユニットで実行されるコンピュータプログラムオブジェクトに含むことができる。コンピュータランタイムレイヤ109は、処理タスクの実際の実行を行うために割り当てられた物理装置と対話することができる。1つの実施形態では、コンピュータランタイムレイヤ109は、処理タスクのために構成されたCP又はGPUなどの各プロセッサのランタイム状態に従って種々のアプリケーションからの複数の処理タスクの実行を調整することができる。コンピュータランタイムレイヤ109は、ランタイム状態に基づいて、処理タスクを実行するよう構成された物理コンピュータ装置から1つ又はそれ以上のプロセッサを選択することができる。処理タスクを実行する段階は、複数の物理コンピュータ装置で1つ又はそれ以上の実行命令の複数のスレッドを同時に実行する段階を含むことができる。1つの実施形態では、コンピュータランタイムレイヤ109は、各プロセッサのランタイム実行状態を監視することによって各々の実行された処理タスクの状態を追跡することができる。
【0019】
ランタイムレイヤは、アプリケーション103からの処理タスクに対応するコンピュータプログラム実行命令として、1つ又はそれ以上の実行命令をロードすることができる。1つの実施形態では、コンピュータランタイムレイヤ109は、コンピュータアプリケーションライブラリ105から処理タスクを実行するために必要な付加的な実行命令を自動的にロードする。コンピュータランタイムレイヤ109は、アプリケーション103又はコンピュータアプリケーションライブラリ105からコンピュータプログラムオブジェクトのための実行命令及びそれに対応するソースプログラムをロードすることができる。コンピュータプログラムオブジェクトに対するソースプログラムは、コンピュータプログラムソースとすることができる。単一のコンピュータプログラムソースに基づく複数の実行命令は、物理コンピュータ装置の複数のタイプ及び/又は種々のバージョンを含むよう構成された論理コンピュータ装置に従ってロードすることができる。1つの実施形態では、コンピュータランタイムレイヤ109は、目標プロセッサ、例えば実行命令を実行するよう構成されたCPU又はGPUに対して最適化された実行命令に、ロードされたソースプログラムをオンラインでコンパイルするように、コンピュータコンパイラ107を起動することができる。
【0020】
オンラインでコンパイルされた実行命令は、対応するソースプログラムに従って既存の実行命令に加えて将来の呼出しのために記憶することができる。更に、実行命令は、オフラインでコンパイルすることができ、API呼出しを使用してコンピュータランタイム109にロードすることができる。コンピュータアプリケーションライブラリ105及び/又はアプリケーション103は、アプリケーションからのライブラリAPI要求に応じて関連の実行命令をロードすることができる。新しくコンパイルされた実行命令は、コンピュータアプリケーションライブラリ105又はアプリケーション103のために動的に更新することができる。1つの実施形態では、コンピュータランタイム109は、コンピュータ装置の新しくアップグレードされたバージョンに対してコンピュータコンパイラ107を介してオンラインでコンパイルされた新しい実行命令によって、アプリケーションにおける既存のコンピュータプログラム実行命令を置き換えることができる。コンピュータランタイム109は、コンピュータアプリケーションライブラリ105を更新するためにオンラインでコンパイルされた新しい実行命令を挿入することができる。1つの実施形態では、コンピュータランタイム109は、処理タスクのための実行命令をロードする場合にコンピュータコンパイラ107を呼び出すことができる。別の実施形態では、コンピュータコンパイラ107は、コンピュータアプリケーションライブラリ105のための実行命令を作成するためにオフラインで呼び出すことができる。コンピュータコンパイラ107は、コンピュータプログラム実行命令を生成するために、コンピュータカーネルプログラムをコンパイルしリンクすることができる。1つの実施形態では、コンピュータアプリケーションライブラリ105は、例えば、開発ツールキット及び/又は画像処理をサポートするための複数の機能を含むことができる。各ライブラリ機能は、複数の物理コンピュータ装置のためのコンピュータアプリケーションライブラリ105に記憶されたコンピュータプログラムソース及び1つ又はそれ以上のコンピュータプログラム実行命令に対応することができる。
【0021】
図2は、複数のスレッドを同時に実行するために並列に動作する複数のコンピュータプロセッサ(コンピュータユニットなど)を備えたコンピュータ装置の実施例を示すブロック図である。各コンピュータプロセッサは、複数のスレッドを並列に(或いは同時に)実行することができる。コンピュータプロセッサ又はコンピュータユニットで並列に実行することができるスレッドは、スレッドグループと呼ばれる。コンピュータ装置は、並列に実行することができる複数のスレッドグループを有することができる。例えば、コンピュータ装置205においてスレッドグループとして実行されるM個のスレッドが示されている。複数のスレッドグループ、例えば、コンピュータプロセッサ_1 205のスレッド1及びコンピュータプロセッサ_L 203のスレッドNは、1つのコンピュータ装置における別々のコンピュータプロセッサにわたって又は複数のコンピュータ装置にわたって並列に実行することができる。複数のコンピュータプロセッサにわたる複数のスレッドグループは、コンピュータプログラム実行命令を並列に実行することができる。1つより多いコンピュータプロセッサは、ASIC(特定用途向け集積回路)装置などの単一チップに基づくことができる。1つの実施形態では、アプリケーションからの複数のスレッドを、複数のチップにわたる1つより多いコンピュータプロセッサで同時に実行することができる。
【0022】
コンピュータ装置は、プロセッサ_1 205及びプロセッサ_L 203などの1つ又はそれ以上のコンピュータプロセッサ又はコンピュータユニットを含むことができる。ローカルメモリは、コンピュータプロセッサに結合することができる。コンピュータプロセッサで実行される単一のスレッドグループにおけるスレッド間で共有されるローカルメモリは、コンピュータプロセッサに結合されたローカルメモリによってサポートすることができる。スレッド1 213及びスレッドN 209などの異なるスレッドグループからの複数のスレッドは、コンピュータ装置201に接続されたコンピュータ装置メモリ217に記憶されたストリームなどのコンピュータメモリオブジェクトを共有することができる。コンピュータ装置メモリ217は、グローバルメモリ及び定数メモリを含むことができる。グローバルメモリは、ストリームなどのコンピュータメモリオブジェクトを割り当てるために使用することができる。コンピュータメモリオブジェクトは、コンピュータプログラム実行命令によって動作することができるデータ要素の集まりを含むことができる。コンピュータメモリオブジェクトは、画像、テクスチャ、フレームバッファ、スカラデータタイプのアレイ、ユーザ定義構造のアレイ、バッファ、サブバッファ、又は変数などを表すことができる。定数メモリは、コンピュータプログラム実行命令によって頻繁に使用される定数変数を記憶する読み取り専用メモリとすることができる。
【0023】
1つの実施形態では、コンピュータプロセッサ又はコンピュータユニットのためのローカルメモリは、スレッドグループ内の全てのスレッド又はスレッドグループによって共有される変数を割り当てるために使用することができる。ローカルメモリは、プロセッサ_1のためのローカル共有メモリ219及びプロセッサ_Lのためのローカル共有メモリ211などの専用ローカル記憶装置として実装することができる。別の実施形態では、コンピュータプロセッサのためのローカルメモリは、コンピュータ装置201におけるコンピュータプロセッサ205、203に関するデータキャッシュ215などの、コンピュータ装置の1つ又はそれ以上のコンピュータプロセッサに関するコンピュータ装置メモリのための読み取り−書き込みキャッシュとして実装することができる。専用ローカル記憶装置は、異なるスレッドグループにわたるスレッドによって共有することはできない。プロセッサ_1 205などのコンピュータプロセッサのローカルメモリが読み取り−書き込みキャッシュ、例えばデータキャッシュ215として実装される場合、ローカルメモリにあると宣言される変数は、コンピュータ装置メモリ217から割り当て、読み取り−書き込みキャッシュ、例えばローカルメモリを実装するデータキャッシュ215にキャッシュすることができる。スレッドグループ内のスレッドは、例えば、読み取り−書き込みキャッシュ又は専用ローカル記憶装置のいずれも対応するコンピュータ装置に利用できない場合、コンピュータ装置メモリ217において割り当てられたローカル変数を共有することができる。1つの実施形態では、各スレッドは、スレッドにおいて呼び出された機能によって使用されるスレッドプライベート変数を記憶するためのプライベートメモリを関連付けられている。例えば、プライベートメモリ1 211は、スレッド1 213以外のスレッドによって見られることはない。
【0024】
更に、1つの実施形態では、コンピュータ装置メモリ217は、プロセッサ_1 205−プロセッサ_L203によって使用されるデータを記憶するのに使用されるバッファ223を含む。バッファ223は、一次元バッファ、二次元画像バッファ、三次元画像バッファ、又は当技術分野で公知の他のタイプのバッファとすることができる。1つの実施形態では、コンピュータ装置201は、バッファ223にプロセッサ(プロセッサ1_205−プロセッサ_L 203など)が操作するデータを記憶する。例えば、1つの実施形態では、バッファは、データのアレイ、二次元画像、三次元画像など、及び/又は当技術分野では公知の他のデータを記憶することができる。1つの実施形態では、バッファ223と、システム201の他のメモリ(プライベートメモリ211、207、ローカル共有メモリ219、221、データキャッシュ215など)との間のデータは、メモリ間データ転送のための当技術分野では公知の任意の方法(ダイレクトPCIe転送、非同期ダイレクトメモリアクセスなど)を使用して転送することができる。
【0025】
図3は、コンピュータ装置識別子を使用して論理コンピュータ装置として構成された複数の物理コンピュータ装置の1つの実施形態を示すブロック図である。1つの実施形態では、アプリケーション303及びプラットフォームレイヤ111は、ホストCPU301で実行することができる。アプリケーション303は、
図1のアプリケーション103の1つとすることができる。ホスト側システム101は、ホストCPU301を含むことができる。物理コンピュータ装置Physical_Compute_Device−1 305からPhysical_Compute_Device−N 311の各々は、
図1のCPU117又はGPU115の1つとすることができる。1つの実施形態では、コンピュータプラットフォームレイヤ111は、API要求に含まれた能力要件のリストに従ってデータ並列処理資源を構成するためのアプリケーション303からのAPI要求に応じてコンピュータ装置識別子307を生成することができる。コンピュータ装置識別子307は、コンピュータプラットフォームレイヤ111による構成に従う実際の物理コンピュータ装置Physical_Compute_Device−1 305からPhysical_Compute_Device−N 311の選択を参照することができる。1つの実施形態では、論理コンピュータ装置309は、ホストCPU301とは別の選択された実際の物理コンピュータ装置のグループを表すことができる。
【0026】
図4は、複数のサブバッファに細分されたバッファの1つの実施形態を示すブロック図である。1つの実施形態では、バッファ408は、
図2に示されるバッファ223である。
図4では、バッファ408は、コンピュータユニット402A−Dによって使用されるデータを記憶するために使用される割り当てメモリである。バッファ408は、一次元アレイ、二次元画像バッファ、三次元画像バッファ、又は当技術分野では公知の他のタイプのバッファとすることができる。バッファ408は、複数のサブバッファ410A−Dに更に細分される。1つの実施形態では、各サブバッファ410A−Dは、バッファへのポインタ412A−Dによって参照される。例えば、1つの実施形態では、サブバッファ410Aはポインタ412Aによって参照され、サブバッファ410Bはポインタ412Bによって参照され、サブバッファ410Cはポインタ412Cによって参照され、サブバッファ410Dはポインタ412Dによって参照される。1つの実施形態では、これらのポインタ412A−Dは、各バッファの始まりを指示する。この実施形態では、サブバッファ410A−Dのデータにアクセスするために、コンピュータユニット402A−Dは、対応するポインタ412A−D及びサブバッファ410−Dの所望の領域までのオフセットを提供することになる。
【0027】
1つの実施形態では、各コンピュータユニット402A−Dに、バッファ408のサブバッファ410A−Dの1つが関連付けられる。1つの実施形態では、これらのコンピュータユニット402A−Dの各々は、各コンピュータユニットに割り当てられたコンピュータタスクに関するデータを使用する。コンピュータユニットの各々は、対応するサブバッファ410A−Dにおいてデータを読み取り及び/又はデータを書き込むことができる。例えば、1つの実施形態では、コンピュータユニット402Aは、サブバッファ410Aを使用し、コンピュータユニット402Bはサブバッファ410Bを使用し、コンピュータユニット402Cはサブバッファ410Cを使用し、コンピュータユニット402Dはサブバッファ410Dを使用する。この実施形態では、サブバッファ410A−Dのデータにアクセスするために、コンピュータユニット402A−Dは、対応するポインタ412A−D及びサブバッファ410−Dの所望の領域までのオフセットを提供することになる。オフセットは、アレイインデックス、二次元参照、三次元参照などとすることができる。バッファ408の構造を以下の
図5−7で更に説明する。
【0028】
1つの実施形態では、各サブバッファは、機能呼出しによって作成され、バッファポインタ及びサブバッファサイズ値を提供する。サブバッファの作成は以下の
図10で更に説明する。
【0029】
1つの実施形態では、コンピュータユニット402A−Dは、対応するサブバッファ402A−Dから該コンピュータユニット402A−Dのプライベートメモリ404A−Dにデータを転送する。1つの実施形態では、プライベートメモリ404A−Dは、コンピュータユニットにローカル接続されるメモリ(
図2に示されるプライベートメモリ1−M211、プライベートメモリ1−N207、ローカル共有メモリ219及び221、及び/又はデータキャッシュ215など)である。1つの実施形態では、コンピュータユニット402A−Dは、コンピュータユニット402A−D及びバッファ408を含むメモリを結合するバスを経由してデータを転送する。例えば、1つの実施形態では、結合バスは、周辺構成要素インターフェイスタイプバス(PCI、PCI-Express(PCIe)など)であり、転送機構は、PCIダイレクトメモリ転送である。
【0030】
図5は、一次元バッファ500における複数のサブバッファ502A−Dの1つの実施形態を示すブロック図である。
図5では、4つのサブバッファ502A−Dを有するバッファ500が示されているが、他の実施形態では、バッファ500は、これより多い又は少ないサブバッファ及び/又は可変サイズのサブバッファを有することができる。1つの実施形態では、バッファ500はデータタイプ(整数、浮動、ストリング、ユーザ定義の構造、ユーザ定義のオブジェクトなど)の一次元アレイである。データを参照するために、サブバッファ502A−Dの1つ、サブバッファ502A−Dの開始ポインタ504A−Dからのオフセットを使用することができる。例えば、1つの実施形態では、バッファ500は、各々が10億浮動小数の2アレイである。この実施例では、コンピュータユニットは、アレイのコンテンツを共に追加し、各サブバッファ502A−Dは、2アレイの部分を含む(例えば、各サブバッファ502A−Dは2アレイの各々に対して10億浮動小数の半分、合計で10億浮動小数を有する)。この実施例におけるコンピュータユニットは、コンピュータユニットに対応するサブバッファからデータを転送し、浮動小数を追加し、更に結果値をサブバッファに記憶する。
【0031】
図6は、複数のサブバッファ602A−Dに細分された二次元画像バッファ600の1つの実施形態を示すブロック図である。
図6では、4つのサブバッファ602A−Dを備えたバッファ600が示されているが、他の実施形態では、バッファ600は、より多い又は少ないサブバッファ及び/又は可変サイズのサブバッファを有することができる。
図6では、二次元画像バッファ600は、xオフセット及びyオフセットによって参照されるデータを含む二次元バッファである。このバッファは、可変タイプのデータ(整数、浮動小数、ストリング、ユーザ定義構造、ユーザ定義オブジェクトなど)を記憶することができる。例えば、1つの実施形態では、バッファ600は、x及びy方向に二次元画像の画素を記憶することができる。例えば。1つの実施形態では、バッファ600は、記憶された画像のカラーヒストグラムを計算するために二次元画像を記憶する。この実施例では、画像は、4つのサブバッファ602A−Dに細分され、各サブバッファ602A−Dは、コンピュータユニットが処理している画像の一部を保持するためにコンピュータユニットによって使用される。更に、各コンピュータユニット602A−Dは、対応するサブバッファからの画像の関連部分をコンピュータユニットのプライベートメモリにコピーする。コンピュータユニットは、その画像データを使用してヒストグラム情報をコンピュータ計算し、ヒストグラム情報を戻す。
【0032】
図7は、複数のサブバッファ702A−Dに細分された三次元画像バッファ700の1つの実施形態を示すブロック図である。
図7では、4つのサブバッファ702A−Dを備えるバッファ700が示されており、他の実施形態では、バッファ700は、より多い又は少ないサブバッファ及び/又は可変サイズのサブバッファを有することができる。
図7では、三次元画像バッファ700は、x、y、及びzオフセットによって参照されるデータ、又は三次元空間における位置を参照するための他の適切なシステムを含む三次元バッファである。バッファ500及び600と同様に、このバッファ700は、可変タイプのデータ(整数、浮動小数、ストリング、ユーザ定義構造、ユーザ定義オブジェクトなど)を記憶することができる。例えば、1つの実施形態では、バッファ700は、x、y、及びz方向の三次元画像の画素を記憶することができる。
【0033】
図8は、アプリケーションから受信された能力要件に一致させることによって、コンピュータ装置識別子を用いて複数の物理コンピュータ装置を構成するための処理800の実施形態を示すフローチャートである。例示的な処理800は、ハードウェア(回路、専用ロジックなど)、ソフトウェア(専用機械で実行されるようなもの)、又は両方の組合せを含むことができる処理ロジックによって実行することができる。例えば、処理800は、ホスト側システム101によってホストされるデータ処理システムにおける
図1のシステム100に従って実行することができる。データ処理システムは、
図1のコンピュータプラットフォームレイヤ141などのプラットフォームレイヤをホストするホストプロセッサ、及び
図1のCPU117及びGPU115などのホストプロセッサに付属の複数の物理コンピュータ装置を含むことができる。
【0034】
ブロック801で、1つの実施形態では、処理800の処理ロジックは、1つ又はそれ以上の対応する能力に関連付けられた複数の物理コンピュータ装置を表すデータ構造(又はコンピュータ装置データ構造)を構築することができる。各物理コンピュータ装置は、処理800の処理ロジックを実行する処理システムに付属させることができる。CPU又はGPUなどの物理コンピュータ装置の能力又はコンピュータ計算能力は、物理コンピュータ装置が、処理能力、メモリアクセス機構、指定された拡張、又は関連の制限をサポートするかどうかを含むことができる。処理能力は、専用テクスチャリングハードウェアサポート、倍精度浮動小数点演算、又は同期サポート(相互排除など)に関係付けることができる。
【0035】
コンピュータ装置の能力は、コンピュータ装置に関連付けられる処理特性又は制限を指示するタイプを含むことができる。アプリケーションは、要求されるコンピュータ装置のタイプを指定するか、又はAPIを使用して特定のコンピュータ装置のタイプを問い合わせることができる。コンピュータ装置の種々のタイプの実施例を以下の表に示す。
(表1)
【0036】
更に、コンピュータ装置の能力は、例えば、以下の表に示される構成値を含むことができる。
(表2)
【0041】
(表2続き)
注1)プラットフォームプロファイルは、OpenCL(登録商標)フレームワークによって実施されるプロファイルを戻す。戻されたプラットフォームプロファイルがFULL_PROFILEである場合、OpenCL(登録商標)フレームワークは、FULL_PROFILEである装置をサポートすることになり、EMBEDDED_PROFILEである装置もサポートすることができる。コンパイラは、全ての装置に対して利用可能でなくてはならない、すなわち、CL_DEVICE_COMPILER_AVAILABLEはCL_TRUEである。戻されたプラットフォームプロファイルがEMBEDDED_PROFILEである場合、次にEMBEDDED_PROFILEのみである装置がサポートされる。
【0042】
物理処理装置のためのメモリアクセス機構は、変数キャッシュのタイプ(例えば、サポートなし、読み取りのみ、又は読み取り−書き込み)、コンピュータメモリオブジェクトキャッシュのタイプ、キャッシュサポートのサイズ、専用ローカルメモリサポート、又は関連の制限に関係付けることができる。メモリアクセス制限は、コンピュータプログラム実行命令によって同時に読み取る又は書き込むことができるコンピュータメモリオブジェクトの最大数、割り当てることができるコンピュータメモリオブジェクトの最大数、又は多次元コンピュータメモリオブジェクトの次元に沿った最大サイズ、例えば、2D(二次元)画像のためのコンピュータメモリオブジェクトの最大幅を含むことができる。データ処理システムのシステムアプリケーションは、新しい物理コンピュータ装置をデータ処理システムに加えたことに応じてデータ構造を更新することができる。1つの実施形態では、物理コンピュータ装置の能力を事前に決定することができる。別の実施形態では、データ処理システムのシステムアプリケーションは、ランタイム中に新しく付け加えられた物理処理装置を発見することができる。システムアプリケーションは、加えられた物理コンピュータ装置及びその対応する能力を表すデータ構造を更新するために、新しく発見された物理コンピュータ装置の能力を検索することができる。
【0043】
1つの実施形態によると、処理800の処理ロジックは、ブロック803でアプリケーションからコンピュータ能力要件を受信することができる。アプリケーションは、APIを呼び出すことによってコンピュータ能力要件をシステムアプリケーションに送信することができる。システムアプリケーションは、アプリケーションに関するホスト側システムでのソフトウェアスタックのプラットフォームレイヤに対応することができる。1つの実施形態では、コンピュータ能力要件は、アプリケーションに関するタスクを実行するために処理資源を要求するための所要能力のリストを識別することができる。1つの実施形態では、アプリケーションは、複数のスレッドにおけるタスクを同時に実行するために、要求された処理資源を必要とする場合がある。これに応じて、処理800の処理ロジックは、ブロック805で付け加えられた物理コンピュータ装置から物理コンピュータ装置のグループを選択することができる。選択は、能力データ構造に記憶されたコンピュータ能力とコンピュータ能力要件の間のマッチングに基づいて決定することができる。1つの実施形態では、処理800の処理ロジックは、能力要件によって提供されたヒントに従ってマッチングを実行することができる。
【0044】
処理800の処理ロジックは、物理コンピュータ装置とコンピュータ能力要件の間でマッチングされたコンピュータ能力の数に従ってマッチングスコアを決定することができる。1つの実施形態では、処理800の処理ロジックは、最高マッチングスコアを持つ複数の物理コンピュータ装置を選択することができる。別の実施形態では、処理800の処理ロジックは、能力要件における各能力がマッチした場合、物理コンピュータ装置を選択することができる。処理800の処理ロジックは、ブロック805でマッチング物理コンピュータ装置の複数のグループを決定することができる。1つの実施形態では、マッチング物理コンピュータ装置の各グループは、各装置のロードバランシング能力に従って選択される。ブロック807において、1つの実施形態では、処理800の処理ロジックは、ブロック805で選択された物理コンピュータ装置の各グループに対するコンピュータ装置識別子を生成することができる。処理800の処理ロジックは、呼出しAPIを介して生成されたコンピュータ装置識別子の1つ又はそれ以上をアプリケーションに戻すことができる。アプリケーションは、コンピュータ装置識別子に従ってタスクを実行するために利用する処理資源を選択することができる。1つの実施形態では、処理800の処理ロジックは、受信された各能力要件のためにブロック807で多くても1つのコンピュータ装置識別子を生成することができる。
【0045】
ブロック809で、1つの実施形態では、処理800の処理ロジックは、対応するコンピュータ装置識別子に従ってブロック805で選択された物理コンピュータ装置のグループに関する論理コンピュータ装置を初期化するために資源を割り当てることができる。論理コンピュータ装置は、1つ又はそれ以上の物理コンピュータ装置を含むコンピュータ装置グループとすることができる。処理800の処理ロジックは、ブロック805での選択に従って1つ又はそれ以上のコンピュータ装置識別子を受信したアプリケーションからのAPI要求に応じて、論理コンピュータ装置の初期化を実行することができる。
【0046】
処理800の処理ロジックは、ブロック811でアプリケーションのための論理コンピュータ装置におけるコンテクストオブジェクトを作成することができる。コンピュータメモリオブジェクトで動作するコマンド、コンピュータプログラムオブジェクト、及び/又はコンテクストオブジェクトに対するコンピュータプログラム実行命令は、順番に(例えば、同期して)又はコンテクストオブジェクトを作成したときにAPI要求で指示されたパラメータに従う順序とは異なって(例えば、非同期で)実行することができる。コンピュータメモリオブジェクト、コンピュータプログラム、又はコンピュータカーネルで動作するプロファイリングコマンドは、API要求を使用してコンテクストオブジェクトに対して使用可能になる。1つの実施形態では、コンテクストオブジェクトは、アプリケーションを実行するホスト側システムにおける1つのアプリケーションスレッドに関連付けられている。1つの論理コンピュータ装置で又は種々の論理コンピュータ装置にわたって同時に処理タスクを実行する複数のスレッドは、別々のコンテクストオブジェクトに基づくことができる。
【0047】
1つの実施形態では、処理800の処理ロジックは、clCreateContext、clRetainContext、及びclReleaseContextを含む複数のAPIに基づくことができる。APIclCreateContextは、コンピュータコンテクストを作成する。コンピュータコンテクストは、コンピュータコンテクストオブジェクトに対応することができる。APIclRetainContextは、clRetainContextへの入力引数としてコンテクストによって識別された特定のコンピュータコンテクストを使用するインスタンス数を増加させる。APIclCreateContextは、暗黙の保存を行う。これは、一般的にはアプリケーションによって渡されたコンテクストを取得するサードパーティライブラリにとって有益である。しかしながら、アプリケーションがライブラリに通知することなくコンテクストを削除することができる。複数のインスタンスをコンテクストに加え、コンテクストからリリースできるようにすることで、もはや有効ではないライブラリによって使用されるコンピュータコンテクストの問題を解決する。clRetainContextへの入力引数が有効コンピュータコンテクストオブジェクトに対応しない場合、clRetainContextは、CU_INVALID_CONTEXTを戻す。APIclReleaseContextは、有効コンピュータコンテクストからインスタンスをリリースする。clReleaseContextへの入力引数が有効コンピュータコンテクストオブジェクトに対応しない場合、clReleaseContextは、CU_INVALID_CONTEXTを戻す。
【0048】
図9は、論理コンピュータ装置でコンピュータ実行命令を実行するための実施例の処理900の実施形態を示すフローチャートである。1つの実施形態では、処理900は、
図1のコンピュータランタイムレイヤ109などのデータ処理システムにおけるランタイムレイヤによって実行することができる。ブロック901で、処理900の処理ロジックは、コンピュータ実行命令を実行するために、論理コンピュータ装置で1つ又はそれ以上のコンピュータメモリオブジェクト(ストリームなど)を割り当てることができる。コンピュータメモリオブジェクトは、例えば、画像メモリオブジェクト又はアレイメモリオブジェクトを表すための1つ又はそれ以上のデータ要素を含むことができる。アレイメモリオブジェクトは、データ要素の一次元の集合とすることができる。画像メモリオブジェクトは、二次元、三次元、又はテクスチャ、フレームバッファ、或いは画像などの他の多次元データを記憶するための集合とすることができる。処理タスクは、入力コンピュータメモリオブジェクトから読み取り、出力コンピュータメモリオブジェクトに書き込む段階を含む、コンピュータメモリAPIを使用してコンピュータメモリオブジェクト又はストリームで動作するコンピュータプログラム実行命令によって実行することができる。1つの実施形態では、コンピュータメモリオブジェクトは、コンピュータメモリAPIを使用して、データオブジェクトを更新するためのバッファオブジェクト、テクスチャオブジェクト、又はレンダーバッファオブジェクトなどのデータオブジェクトに加えることができる。データオブジェクトは、データオブジェクトにおけるテキストレンダリングなどのグラフィックデータ処理動作を起動するAPIに関連付けることができる。1つの実施形態では、メモリオブジェクトは、
図2に説明される複数のサブバッファを備えたバッファである。
【0049】
コンピュータメモリオブジェクトを割り当てる場合、処理900の処理ロジックは、割り当てがAPIにおける仕様に従って常駐しなければならない場所を決定することができる。例えば、コンピュータメモリオブジェクトは、
図1のホスト側システム101に関するホストメモリなどのホストメモリ、及び/又は
図2のグローバルメモリ又は定数メモリ217などのコンピュータ装置メモリから割り当てることができる。ホストメモリで割り当てられたコンピュータメモリオブジェクトは、コンピュータ装置メモリにキャッシュする必要がある。処理900の処理ロジックは、例えばデータがコンピュータメモリオブジェクトにロードされたかどうかを示す同期データを含む生成されたイベントオブジェクトに基づいて、非ブロッキングAPIインターフェイスを使用して、割り当てられたコンピュータメモリオブジェクトに非同期にデータをロードすることができる。1つの実施形態では、処理900の処理ロジックは、割り当てられたコンピュータメモリオブジェクトから読み取りこれに書き込む場合にメモリアクセス動作をスケジュールすることができる。処理900の処理ロジックは、アプリケーションの論理アドレスを形成するために割り当てられたストリームメモリをマップすることができる。1つの実施形態では、処理900の処理ロジックは、
図1のアプリケーション103などのホストプロセッサで実行されるアプリケーションからのAPI要求に基づいてブロック901での動作を実行することができる。
【0050】
ブロック903で、1つの実施形態では、処理900の処理ロジックは、論理コンピュータ装置(コンピュータ装置グループなど)のためのコンピュータプログラムオブジェクトを作成することができる。コンピュータプログラムオブジェクトは、エクスポートされた機能又はデータ並列プログラムのエントリポイントを表すコンピュータカーネルのグループを含むことができる。コンピュータカーネルは、データ並列タスク(機能など)を実行するためにコンピュータユニットで実行することができるコンピュータプログラム実行命令へのポインタを含むことができる。各コンピュータカーネルに、ブロック901で割り当てられたストリームなどの機能入力又は出力のために割り当てられたコンピュータメモリオブジェクト又はストリームを含む機能引数のグループを関連付けることができる。
【0051】
処理900の処理ロジックは、ブロック909でコンピュータプログラムライブラリバイナリ及び/又はコンピュータプログラムソースをコンピュータプログラムオブジェクトにロードすることができる。コンピュータプログラムバイナリは、コンピュータ装置で実行されるコンピュータプログラム実行命令を記述するビットを含むことができる。コンピュータプログラムバイナリは、コンピュータプログラム実行命令及び/又はコンピュータプログラム実行命令に変換されるコンピュータプログラムソースの中間表現とすることができる。1つの実施形態では、コンピュータプログラム実行命令は、例えば、目標物理コンピュータ装置のタイプ(GPU又はCPUなど)、バージョン、及び/又はスレッドグループサイズ及び/又はスレッドグループ規模などのコンピレーション選択肢又はフラグが関連付けられた記述データを含むことができる。コンピュータプログラムソースは、コンピュータプログラム実行命令がコンパイルされるソースコードとすることができる。処理900の処理ロジックは、ブロック909でコンピュータプログラムソースに対応する複数のコンピュータプログラム実行命令をロードすることができる。1つの実施形態では、処理900の処理ロジックは、アプリケーションから又は
図1のコンピュータアプリケーションライブラリ105などのコンピュータライブラリを介してコンピュータプログラム実行命令をロードすることができる。コンピュータプログラム実行命令は、対応するコンピュータプログラムソースと共にロードすることができる。処理900の処理ロジックは、ブロック905で、コンピュータプログラムオブジェクトのための機能引数をセットアップすることができる。1つの実施形態では、処理900の処理ロジックは、アプリケーションからのAPI要求に従って、ブロック903、905、及び909での動作を実行することができる。
【0052】
ブロック911で、処理900の処理ロジックは、論理コンピュータ装置によってコンピュータカーネルオブジェクトを実行するために実行待ち行列を更新することができる。処理900の処理ロジックは、
図1のアプリケーション103又はコンピュータアプリケーションライブラリ105などのアプリケーション又はコンピュータアプリケーションライブラリから、コンピュータランタイム、例えば
図1のコンピュータランタイム109への適切な引数を備えたAPI呼出しに応じてコンピュータカーネルを実行することができる。コンピュータカーネルの実行は、コンピュータカーネルに関連付けられるコンピュータプログラム実行命令を実行する段階を含むことができる。1つの実施形態では、処理900の処理ロジックは、コンピュータカーネルを実行するためにコンピュータカーネル実行インスタンスを生成することができる。
図1のコンピュータランタイム109などのコンピュータランタイムへのAPI呼出しは、コンピュータカーネルを実行するために、本質的に非同期とすることができる。実行インスタンスは、
図1のコンピュータランタイム109などのコンピュータランタイムによって戻すことができるコンピュータイベントオブジェクトによって識別することができる。コンピュータカーネル実行インスタンスは、コンピュータカーネルインスタンスを実行するために実行待ち行列に付加することができる。
【0053】
1つの実施形態では、コンピュータカーネルを実行するためのコンピュータランタイムへのAPI呼出しは、スレッドグループとしてコンピュータプロセッサで同時に並列に実行されるスレッドの数を含むことができる。API呼出しは、使用するコンピュータプロセッサの数を含むことができる。コンピュータカーネル実行インスタンスは、対応するコンピュータプログラム実行命令を実行するために要求される優先順位を指示する優先順位値を含むことができる。また、コンピュータカーネル実行インスタンスは、以前の実行インスタンス及び/又は予想されるスレッドの総数及び実行を行うためのスレッドグループの数を識別するイベントオブジェクトを含むことができる。スレッドグループの数及びスレッドの総数は、API呼出しにおいて指定することができる。1つの実施形態では、イベントオブジェクトは、イベントオブジェクトを含む実行インスタンスとイベントオブジェクトによって識別される別の実行インスタンスとの間の実行順序関係を指示することができる。イベントオブジェクトを含む実行インスタンスは、イベントオブジェクトによって識別された別の実行インスタンスが実行を終えた後に実行されるよう要求することができる。イベントオブジェクトは、queue_after_event_objectと呼ぶことができる。イベント及びイベント従属は、以下の
図11及び12に更に説明する。1つの実施形態では、実行待ち行列は、対応するコンピュータプログラム実行命令を実行するための複数のコンピュータカーネル実行インスタンスを含むことができる。コンピュータプログラム実行命令のための1つ又はそれ以上のコンピュータカーネル実行インスタンスは、実行待ち行列における実行のためにスケジュールすることができる。1つの実施形態では、処理900の処理ロジックは、アプリケーションからのAPI要求に応じて実行待ち行列を更新することができる。実行待ち行列は、アプリケーションが実行されているホスト側データシステムによってホストすることができる。
【0054】
ブロック913で、処理900の処理ロジックは、実行のための実行待ち行列からコンピュータカーネル実行インスタンスを選択することができる。1つの実施形態では、処理900の処理ロジックは、対応する論理コンピュータ装置に従って同時に実行される1つより多いコンピュータカーネル実行インスタンスを選択することができる。処理900の処理ロジックは、コンピュータカーネル実行インスタンスが、実行待ち行列における関連の優先順位及び他の実行インスタンスとの従属関係に基づいて実行待ち行列から選択されるかどうか決定することができる。コンピュータカーネル実行インスタンスは、コンピュータカーネルオブジェクトにロードされた実行命令に従って対応するコンピュータカーネルオブジェクトを実行することによって実行することができる。
【0055】
ブロック917で、1つの実施形態では、処理900の処理ロジックは、コンピュータカーネルオブジェクトのための論理コンピュータ装置に関連付けられた物理コンピュータ装置で実行するための、選択されたコンピュータカーネルインスタンスに対応するコンピュータカーネルオブジェクトにロードされた複数の実行命令の1つを選択することができる。処理900の処理ロジックは、1つのコンピュータカーネル実行インスタンスのために1つより多い物理コンピュータ装置で並列に実行される1つより多い実行命令を選択することができる。選択は、選択されたコンピュータカーネル実行インスタンスに関連付けられる論理コンピュータ装置に対応する物理コンピュータ装置の現在の実行ステータスに基づくことができる。物理コンピュータ装置の実行ステータスは、実行中のスレッド数、ローカルメモリ使用レベル、及びプロセッサ使用レベル(単位時間当たりの動作のピーク数など)などを含むことができる。1つの実施形態では、選択は、事前に決められた使用レベルに基づくことができる。別の実施形態では、選択は、コンピュータカーネル実行インスタンスに関連付けられたスレッドの数及びスレッドグループの数に基づくことができる。処理900の処理ロジックは、物理コンピュータ装置から実行ステータスを検索することができる。1つの実施形態では、処理900の処理ロジックは、ホスト側システムで実行されるアプリケーションに非同期にブロック913、917で実行するために、実行待ち行列からコンピュータカーネル実行インスタンスを選択するための動作を実行することができる。
【0056】
ブロック919で、処理900の処理ロジックは、実行待ち行列における実行のためにスケジュールされたコンピュータカーネル実行インスタンスの実行ステータスをチェックすることができる。各実行インスタンスは、固有のコンピュータイベントオブジェクトによって識別することができる。対応するコンピュータカーネル実行インスタンスが
図1のランタイム109などのコンピュータランタイムに従って待ち行列に入れられた場合、イベントオブジェクトは、実行インスタンスを実行するためにAPIを呼び出す
図1のアプリケーション103又はコンピュータアプリケーションライブラリ105などのアプリケーション又はコンピュータアプリケーションライブラリに戻すことができる。1つの実施形態では、処理900の処理ロジックは、アプリケーションからのAPI要求に応じて実行ステータスチェックを行うことができる。処理900の処理ロジックは、コンピュータカーネル実行インスタンスを識別するコンピュータイベントオブジェクトのステータスを問い合わせることによって、コンピュータカーネル実行インスタンスの実行の完了を決定することができる。処理900の処理ロジックは、コンピュータカーネル実行インスタンスの実行が完了してアプリケーションからのAPI呼出しに戻るまで待つことができる。処理900の処理ロジックは、コンピュータイベントオブジェクトに基づいて種々のストリームから読み取る及び/又は書き込む処理実行インスタンスを制御することができる。
【0057】
ブロック921で、1つの実施形態によると、処理900の処理ロジックは、コンピュータカーネル実行インスタンスを実行した結果を検索することができる。続いて、処理900の処理ロジックは、コンピュータカーネル実行インスタンスを実行するために割り当てられた処理資源を整理することができる。1つの実施形態では、処理900の処理ロジックは、コンピュータカーネル実行命令を実行した結果を保持するストリームメモリをローカルメモリにコピーすることができる。処理900の処理ロジックは、ブロック901で割り当てられた変数ストリーム又は画像ストリームを削除することができる。処理900の処理ロジックは、コンピュータカーネル実行が完了した時間を検出するためのカーネルイベントオブジェクトを削除することができる。特定のコンピュータカーネルオブジェクトに関連付けられた各コンピュータカーネル実行インスタンスが完全に実行された場合、処理900の処理ロジックは、特定のコンピュータカーネルオブジェクトを削除することができる。1つの実施形態では、処理900の処理ロジックは、アプリケーションによって初期化されたAPI要求に基づいてブロック921で動作を実行することができる。
【0058】
図10は、複数のコンピュータユニットによってサブバッファを作成して使用するためのランタイム処理1000の実施形態を示すフローチャートである。例示的な処理1000は、ハードウェア(回路、専用ロジックなど)、ソフトウェア(専用機械で実行されるものなど)、又はこれらの組合せを含むことができる処理ロジックによって実行することができる。例えば、処理1000は、
図1のホスト側システム101によってホストされるデータ処理システムのシステム100に従って実行することができる。データ処理システムは、
図1のコンピュータプラットフォームレイヤ141などのプラットフォームレイヤをホストするホストプロセッサ、及び
図1のCPU117及びGPU115などのホストプロセッサに付属する複数の物理コンピュータ装置を含むことができる。
【0059】
図10では、処理1000は、コンピュータユニットに関するサブバッファを作成し、サブバッファはバッファに関連付けられる。1つの実施形態では、処理1000は、現在割り当てられているバッファからサブバッファを作成する。例えば、1つの実施形態では、処理1000は、機能呼出しを使用して割り当てられたバッファからサブバッファを作成する:
cl_mem clCreateSubBuffer(cl_mem buffer、
cl_mem_flags.flags、
cl_buffer_create_type buffer_create_type、
const void
*buffer_create_info、
cl_int
*errcode_ret)
ここで、バッファは既存のバッファであり、フラグは、作成される画像メモリオブジェクトに関する割り当て及び使用情報を指定するために使用されるビット−フィールドであり表3で説明され、サイズは、割り当てられるサブバッファメモリオブジェクトのバイトサイズであり、
buffer_create_type及びbuffer_create_infoは、作成されるバッファオブジェクトのタイプを記述する。buffer_create_typeのサポート値のリスト及びbuffer_create_infoが示す対応する記述子を表4で説明する。
(表3)
サブバッファメモリ作成フラグ
【0060】
(表4)
CL_BUFFER_CREATE_TYPE値
【0061】
ブロック1004で、処理1000は、サブバッファに関するコンピュータユニットが親バッファと同じコンピュータユニットであるかどうか決定する。例えば、1つの実施形態では、処理1000は、サブバッファがCPUに対して作成されたと決定する。コンピュータユニットが異なる場合、処理1000は、サブバッファに関連付けられたコンピュータユニットのプライベートメモリにデータをコピーする。例えば、1つの実施形態では、コンピュータユニットがGPUでありバッファに関連付けられたコンピュータユニットがCPUである場合、処理1000は、サブバッファに関連付けられるデータをGPUのメモリにコピーすることになる。
図4を参照すると、処理1000は、サブバッファの1つ(サブバッファ410Aなど)からのデータをGPUのメモリ(コンピュータユニット402Aのプライベートメモリ404Aなど)にコピーする。コンピュータユニットがサブバッファ及びバッファに対して同じである場合、処理1000は、ブロック1006でサブバッファにおけるデータにアクセスするためにポインタを使用する。例えば、1つの実施形態では、処理1000は、
図4で説明されたようにサブバッファ410Aにおけるデータにアクセスするためにポインタ412Aを使用する。処理1000はポインタを使用してデータにアクセスすると共に変更されたデータを更新する必要がないので、処理1000は1006で終了する。
【0062】
他方で、処理1000がサブバッファに関連付けられたコンピュータユニットのプライベートメモリにデータをコピーした場合、処理1000は、そのコンピュータユニットのプライベートメモリにおけるデータへの更新を追跡する。例えば、1つの実施形態では、ブロック1010で追跡された更新に基づいて、処理1000は、ブロック1012において、更新を親バッファに送信する。1つの実施形態では、処理1000は一度で更新を送信するが、他の実施形態では、処理1000は、異なる方式で更新を送信する(例えば、定期的に更新を送信する、自動的に更新を送信する等)。
【0063】
コンピュータユニットに関するサブバッファの作成、使用、及び/又は管理に加えて、システム100は、
図8及び9を参照して前述したように、コンテクストの動作を同期させるためにイベントを使用することができる。1つの実施形態では、イベントオブジェクトは、コマンドなどの動作のステータスをカプセル化する。この実施形態では、これらのオブジェクトは、コンテクストにおける動作を同期させるために使用することができる。更に、システム100は、特定のコマンドが実行を開始する時間を制御するためにイベント待機リストを使用することができる。イベント待機リストは、イベントオブジェクトのリストである。
図11は、内部及び外部従属を有するイベントに関連付けられるコールバックを実行するための処理1100の1つの実施形態を示すフローチャートである。1つの実施形態では、コールバックは、コンテクスト内で起こるイベント(例えば、エラーなど)を報告するために使用される。
図8を参照して前述したように、コンテクストは、1つ又はそれ以上のコンピュータユニットによって作成され、コマンド−待ち行列、メモリ、プログラム、カーネルオブジェクトなどのオブジェクトを管理するために使用され、コンテクストで指示された1つ又はそれ以上のコンピュータユニットでカーネルを実行するためのものである。
【0064】
例示的な処理1100は、ハードウェア(回路、専用ロジックなど)、ソフトウェア(専用機械で実行されるものなど)、又はこれら両方の組合せを含むことができる処理ロジックによって実行することができる。例えば、処理1100は、
図1のホスト側システム101によってホストされるデータ処理システムのシステム100に従って実行することができる。データ処理システムは、
図1のコンピュータプラットフォームレイヤ141などのプラットフォームレイヤをホストするホストプロセッサ、及び
図1のCPU117及びGPU115などのホストプロセッサに付属の複数の物理コンピュータ装置を含むことができる。
【0065】
イベントがブロック1102で外部従属を有する場合、処理1100は、コンテクストを用いてコールバックを実行するためにイベントを登録する。1つの実施形態では、イベントは、内部従属、外部従属を持つこと及び/又は従属を持たないことができる。内部従属を持つイベントは、イベントに関連付けられたコールバックが実行される前に、内部従属が解消されることを意味する。1つの実施形態では、内部従属は、カーネル実行コマンド又は管理コマンド(例えば、メモリオブジェクトの読み取り−書き込み、マップ、コピーコマンド)などのシステムが認識するイベントである。外部従属はユーザ定義のイベントであり、この外部従属は、コールバックが実行される前に解消する必要がある。例えば、1つの実施形態では、ユーザ定義イベントによって、待機状態コマンドが対応するコンピュータユニットによって実行される前に、アプリケーションは、ユーザイベントが終了するのを待つコマンドを待ち行列に入れることができる。別の実施形態では、ユーザイベントオブジェクトは、アプリケーション固有のエラー状態を報告するために使用することができる。1つの実施形態では、イベント従属をイベント待機リストに記憶することができる。
【0066】
ブロック1104で、処理1100は、登録されたイベントが発生したという通知を受信する。1つの実施形態では、処理1100は、イベントを待つ機能を呼び出すことによって、イベントの通知を受信する。ブロック1106で、処理1100は、登録されたイベントが何らかの解消されていない内部イベントを有するかどうか決定する。例えば、1つの実施形態では、処理1100は、登録されたイベントに関連付けられるイベント待機リストが何らかの内部従属を有するかどうか決定する。何らかの内部従属が存在する場合、処理1100は、ブロック1112でコールバックの実行を遅らせる。1つの実施形態では、処理1100は、内部従属が解消されるまで実行を遅らせる。例えば、1つの実施形態では、従属を解消する段階は、従属イベントに関連付けられるコマンドが完了するのを待つ段階を含むことができる。
【0067】
登録されたイベントに対する内部従属がない場合、処理1100は、登録されたイベントが何らかの外部従属を有するかどうかブロック1108で決定する。例えば、1つの実施形態では、処理1100は、登録されたイベントに関連付けられるイベント待機リストが何らかの外部従属を有するかどうか決定する。何らかの外部従属が存在する場合、処理1100は、ブロック1112でコールバックの実行を遅らせる。1つの実施形態では、処理1100は、外部従属が解消されるまで実行を遅らせる。例えば、1つの実施形態では、従属を解消する段階は、従属イベントに関連付けられるコマンドが完了するのを待つ段階を含むことができる。
【0068】
図12は、内部及び外部従属を持つイベントチェーン1202A−Dの1つの実施形態を示すブロック図である。
図12では、イベント1202Aは、3つの内部イベント1202B−D及び外部イベント、ユーザイベント1204を含む従属のチェーンを有する。例えば、1つの実施形態では、イベント1202Aは、イベント1202Bに従属し、イベント1202Bは、イベント1202Cに従属し、イベント1202Cは、イベント1202Dに従属し、イベント1202Dは、ユーザイベント1204に従属する。この実施形態では、イベント1202Dは、ユーザイベント1204が解消されるのを待ち、イベント1202Cは、イベント1202D及び1204が解消されるのを待ち、イベント1202Bは、イベント1202C−D及び1204が解消されるのを待ち、イベント1202Bは、イベント1202B−D及び1204が解消されるのを待つ。
【0069】
図13は、複数の物理コンピュータ装置で実行されるコンピュータプログラム実行命令のためのコンピュータプログラムソースコードの実施例を示すサンプルソースコードである。実施例1300は、変数1301及びストリーム(又はコンピュータメモリオブジェクト)1303を含む引数を持つAPI機能を表すことができる。実施例1300は、
図1のシステム131などの並列コンピュータ環境に対するプログラミング言語に基づくことができる。1つの実施形態では、並列プログラミング言語は、本明細書で説明される実施形態の1つ又はそれ以上を実施するよう設計された付加的な拡張及び制限を有するANSI(米国規格協会)C規格に従って記述することができる。拡張は、コンピュータ装置で実行されるコンピュータカーネル機能を規定するために、限定子1305などの機能限定子を含むことができる。コンピュータカーネル機能は、他のコンピュータカーネル機能によって呼び出すことはできない。1つの実施形態では、コンピュータカーネル機能は、並列プログラム言語におけるホスト機能によって呼び出すことができる。ホスト機能は、標準のANSI C機能とすることができる。ホスト機能は、コンピュータカーネル機能を実行するコンピュータ装置とは別のホストプロセッサで実行することができる。1つの実施形態では、拡張は、スレッドグループの全てのスレッドによって共有されることになるコンピュータ装置に関連付けられるローカルメモリに割り当てる必要がある変数を記述するために、ローカル限定子を含むことができる。ローカル限定子は、コンピュータカーネル機能の内部で宣言することができる。制約が侵害された場合、エラーメッセージを出力する又は実行を終了するなどのエラー状態を引き起こすために、コンパイラ時間又は作動時間の間に並列プログラミング言語の制約を強制することができる。
【0070】
図14A−14Cは、APIを呼び出すことによって複数の物理コンピュータ装置において、複数の実行命令の1つを実行するための論理コンピュータ装置を構成するための実施例を示すサンプルソースコードを含む。実施例1400A−1400Cは、
図1のホスト側システム101などの複数の物理コンピュータ装置が取り付けられたホストシステムで実行されるアプリケーションによって実行することができる。実施例1400A−1400Cは、並列プログラミング言語のホスト機能を規定することができる。実施例1400A−1400Cにおける処理動作は、
図8の処理800及び/又は
図9の処理900などの処理によるAPI呼出しとして実行することができる。コンピュータ装置、コンピュータ装置グループ、又は論理コンピュータ装置1401からコンテクストオブジェクトを作成するための処理動作は、
図8の処理800のブロック811の処理ロジックによって実行することができる。入力/出力画像メモリオブジェクト(コンピュータメモリオブジェクトなど)を割り当てるための処理動作は、
図9の処理900のブロック901の処理ロジックによって実行することができる。
【0071】
ここで
図14Bを参照すると、アレイメモリオブジェクト1403bを割り当ててロードするための処理動作は、
図9の処理900のブロック901の処理ロジックによって実行することができる。コンピュータプログラムオブジェクト1405を作成するための処理動作は、
図9の処理900のブロック903の処理ロジックによって実行することができる。処理動作1407は、
図9の実施例900などのコンピュータプログラムソースを、作成されたコンピュータプログラムオブジェクトにロードすることができる。処理動作1409は、ロードされたコンピュータプログラムソースからコンピュータプログラム実行命令を明示的に作成することができる。1つの実施形態では、処理動作1409は、既に作成されたコンピュータプログラム実行命令を作成されたコンピュータプログラムオブジェクトにロードすることができる。従って、処理動作1411は、コンピュータ装置での実行をスケジュールするための構築コンピュータプログラム実行命令を示す、コンピュータカーネルオブジェクトを作成することができる。
【0072】
ここで
図14Cを参照すると、1つの実施形態では、処理動作1413が、作成されたコンピュータカーネルオブジェクトに関する機能引数としての変数及びコンピュータメモリオブジェクトを加えることができる。処理動作1413は、
図9の処理900のブロック905の処理ロジックによって実行することができる。処理動作1415は、作成されたコンピュータカーネルオブジェクトを実行することができる。1つの実施形態では、処理動作1415は、
図9の処理900のブロック911の処理ロジックによって実行することができる。処理動作1415は、作成されたコンピュータカーネルオブジェクトに対応するコンピュータカーネル実行インスタンスによって実行待ち行列を更新させることができる。処理動作1417は、作成コンピュータカーネルオブジェクトの実行の完了を同期して待つことができる。1つの実施形態では、処理動作1419は、コンピュータカーネルオブジェクトの実行の結果を検索することができる。結果的に、処理動作1191は、イベントオブジェクトなどのコンピュータカーネルオブジェクト、作成されたコンピュータカーネルオブジェクトを実行するための割り当てられた資源、及び割り当てられたメモリをクリーンアップすることができる。1つの実施形態では、処理動作1417は、カーネルイベントオブジェクトが設定されたかどうかに基づいて非同期に実行することができる。処理動作1417は、
図9のブロック919での処理900によって実行することができる。
【0073】
図15は、本発明の1つの実施形態に関連して使用することができるコンピュータシステム1500の1つの実施例を示す。例えば、システム1500は、
図1に示されたシステムの一部として実行することができる。
図15は、コンピュータシステムの種々の構成要素を示すが、これらの詳細構造は本発明と密接に結び付いていないので、構成要素を相互接続する任意の特定のアーキテクチャ又は方式を表すものではない点に留意されたい。ネットワークコンピュータ、及び少ない構成要素又は多くの構成要素を有する他のデータ処理システム(例えば、手持ち式コンピュータ、携帯情報端末(PDA)、セルラー電話、娯楽システム、消費者電子装置など)は、本発明の1つ又はそれ以上の実施形態を実施するために関連して使用できることを理解されたい。
【0074】
図15に示されるように、データ処理システムの1つの形式であるコンピュータシステム1500は、CPU及び/又はGPUなどのマイクロプロセッサ1505、ROM(読み取り専用メモリ)1507、揮発性RAM1509、及び不揮発性メモリ1911に接続されたバス1503を含む。マイクロプロセッサ1505は、メモリ1507、1509、1911から命令を読み出し、キャッシュ1521を使用して命令を実行して前述の動作を行うことができる。バス1503は、これらの種々の構成要素を互いに相互接続し、これらの構成要素1505、1507、1509、及び1511をディスプレイコントローラ及びディスプレイ装置1513に、更に当技術分野では公知のマウス、キーボード、モデム、ネットワークインターフェイス、プリンタ、及び他の装置とすることができる入力/出力(I/O)装置などの周辺装置に相互接続する。一般的には、入力/出力装置1515は、入力/出力コントローラ1517を介してシステムに結合される。揮発性RAM(ランダムアクセスメモリ)1509は、一般的にメモリ内のデータをリフレッシュ又は維持するために継続して電力を必要とする動的RAM(DRAM)として実装される。ディスプレイ装置1513に接続されたディスプレイコントローラは、ディスプレイデータを処理するための1つ又はそれ以上のGPUを随意的に含むことができる。随意的に、ディスプレイ装置1513に含まれたGPUをサポートするためにGPUメモリ1519を提供することができる。
【0075】
大容量記憶装置1511は、一般的に、磁気ハードドライブ又は磁気光学ドライブ又は光学ドライブ又はDVD RAM又はフラッシュメモリ又は電力がシステムから取り除かれた後でもデータ(大量のデータなど)を維持する他の形式のメモリシステムである。一般的には、大容量記憶装置1511は、必要とされることはないがランダムアクセスメモリとすることもできる。
図15は、大容量記憶装置1511がデータ処理システムの構成要素の残りに直接接続されたローカル装置であることを示しているが、本発明は、モデム又はイーサネットインターフェイス又は無線ネットワーキングインターフェイスなどのネットワークインターフェイスを介してデータ処理システムに接続されるネットワーク記憶装置などの、システムから遠隔にある不揮発性メモリを利用できることを理解されたい。バス1503は、当技術分野では公知のように、種々のブリッジ、コントローラ、及び/又はアダプタを介して互いに接続された1つ又はそれ以上のバスを含むことができる。
【0076】
前述の一部分は、専用ロジック回路などの論理回路又はプログラムコード命令を実行するマイクロコントローラ又は処理コアの他の形式によって実行することができる。従って、前記の説明によって教示された処理は、特定の機能を行うために機械にこれらの命令を実行させる機械実行可能命令などのプログラムコードによって実行することができる。これに関連して、「機械」は、中間形式(又は「アブストラクト」)命令をプロセッサ固有の命令(「仮想機械」(Java仮想機械など)、インタプリタ、共通言語ランタイム、ハイレベル言語仮想機械などのアブストラクト実行環境)に変換する機械、及び/又は汎用プロセッサ及び/又は特定用途プロセッサなどの命令を実行するよう設計された半導体チップ(トランジスタによって実行される「論理回路」など)に配置される電子回路とすることができる。また、前記の説明によって教示される処理は、プログラムコードを実行することなく処理(又は一部の処理)を行うよう設計された電子回路(機械の代わりに又は機械と組み合わせて)によって実行することができる。
【0077】
例えば、複数のトークンを含むプログラムコードを記憶するために製造物品を使用することができる。プログラムコードを記憶する製造物品は、限定されるものではないが、1つ又はそれ以上のメモリ(例えば、1つ又はそれ以上のフラッシュメモリ、ランダムアクセスメモリ(静的、動的、又はその他)、光学ディスク、CD−ROM、DVD ROM、EPROM、EEPROM、磁気又は光学カード、又は他の形式の電子命令を記憶するのに適したマシーン読み取り可能な記録媒体として実装することができる。プログラムコードは、遠隔コンピュータ(サーバなど)から要求側コンピュータ(クライアントなど)に伝搬媒体に組み込まれるデータ信号によって(例えば、通信リンク(ネットワーク接続など)を使用して)ダウンロードすることもできる。
【0078】
前述の詳細な説明は、コンピュータメモリ内のデータビットにおける動作のアルゴリズム及び記号表現を用いて提示される。これらのアルゴリズムの説明及び表現は、当業者にその作業内容を最も効率的に伝えるために、データ処理技術に精通した業者によって使用されるツールである。アルゴリズムは、一般的に、所望の結果をもたらす動作の自己矛盾のないシーケンスであると考えられる。動作は、物理量の物理的操作を要求するものである。通常、必須ではないが、これらの量は、記憶、転送、結合、比較、及びそうでなければ操作することができる電気又は磁気信号の形式を取る。主に共通使用の理由で、これらの信号は、ビット、値、要素、記号、文字、用語、数字等として呼ぶことが好都合であることが分かっている。
【0079】
しかしながら、これらの全て及び類似の表現は適切な物理量に関連付けられ、単にこれらの量に適用される好都合な表記であることに留意されたい。前記の説明から明らかなように、他に具体的に指示がない限り、説明全体を通して、「処理する」又は「コンピュータ計算する」又は「計算する」又は「決定する」又は「表示する」又は「コピーする」又は「追跡する」又は「送信する」等の用語を利用した説明は、コンピュータシステムのレジスタ及びメモリ内の物理(電子)量として表されるデータを処理して、コンピュータシステムメモリ又はレジスタ又は他の情報記憶、送信、又はディスプレイ装置内の物理量として同様に表現される他のデータに変換する、コンピュータシステム又は類似の電子コンピュータ装置の動作及び処理を参照することを理解されたい。
【0080】
また、本発明は、本明細書で説明された動作を実行するための装置を示す。この装置は、所望の目的のために特別に構成すること、又はコンピュータに記憶されたコンピュータプログラムによって選択的に起動又は再構成される汎用コンピュータを含むことができる。このようなコンピュータプログラムは、限定されるものではないが、フロッピーディスク、光学ディスク、CD−ROM、及び磁気光学ディスクを含む任意の形式のディスク、読み取り専用メモリ(ROM)、RAM、EPROM、EEPROM、磁気又は光学カード、又は電子命令を記憶するのに適した任意の形式の媒体であり、各々がコンピュータシステムバスに結合される、コンピュータ可読記憶媒体に記憶できる。
【0081】
本明細書に示される処理及び表示は、何らかの特定のコンピュータ又は他の装置に本質的に結び付いているものではない。種々の汎用システムは、本明細書の教示に従ってプログラムと共に使用できること、又は説明した動作を実行するための専用装置を構成することが好都合であることが分かっている。これらの様々なシステムの所要の構造は、以下の説明から明らかになるはずである、更に、本発明は、何らかの特定のプログラミング言語を参照して説明されていない。様々なプログラミング言語は、本明細書で説明される本発明の教示を実施するために使用できることを理解されたい。
【0082】
前述の説明は、単に、本発明の幾つかの例示的な実施形態を説明するものである。当業者であれば、これらの説明、添付図面、及び請求項から、本発明の精神及び範囲から逸脱することなく種々の修正が可能であることを容易に理解できるはずである。