JP5232914B2 - マルチプロセッサにおけるデータパラレルコンピューティングのためのアプリケーションプログラミングインターフェイス - Google Patents

マルチプロセッサにおけるデータパラレルコンピューティングのためのアプリケーションプログラミングインターフェイス Download PDF

Info

Publication number
JP5232914B2
JP5232914B2 JP2011512491A JP2011512491A JP5232914B2 JP 5232914 B2 JP5232914 B2 JP 5232914B2 JP 2011512491 A JP2011512491 A JP 2011512491A JP 2011512491 A JP2011512491 A JP 2011512491A JP 5232914 B2 JP5232914 B2 JP 5232914B2
Authority
JP
Japan
Prior art keywords
code
executable code
computing units
computational
computing
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
JP2011512491A
Other languages
English (en)
Other versions
JP2011523141A (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.)
Apple Inc
Original Assignee
Apple 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 Apple Inc filed Critical Apple Inc
Publication of JP2011523141A publication Critical patent/JP2011523141A/ja
Application granted granted Critical
Publication of JP5232914B2 publication Critical patent/JP5232914B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Stored Programmes (AREA)
  • Advance Control (AREA)
  • Image Processing (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、一般に、データパラレルコンピューティングに係る。より詳細には、本発明は、CPU(中央処理ユニット)及びGPU(グラフィック処理ユニット)の両方にわたるデータパラレルコンピューティングのためのアプリケーションプログラミングインターフェイス(API)に係る。
関連出願の相互参照:本出願は、参考としてここにそのまま援用するアーフタブAムンシュ氏等の“Application Programming Interfaces for Data Parallel Computing on Multiple Processors”と題する2008年6月6日に出願された米国プロビジョナル特許出願第61/059,739号に係り、その利益を主張するものである。
GPUが高性能パラレルコンピューティング装置に向けて進化し続けるにつれて、汎用コンピューティング装置と同様にGPUでもデータパラレル計算を遂行するために益々多くのアプリケーションが書かれている。今日、これらアプリケーションは、ベンダー特有のインターフェイスを使用して特定のGPUで実行されるように設計される。従って、これらアプリケーションは、GPU及びCPUの両方がデータ処理システムに利用できるときでも、CPUの処理リソースをレバレッジすることができない。又、そのようなアプリケーションが実行される異なるベンダーからGPUにわたって処理リソースをレバレッジすることもできない。
しかしながら、データパラレル計算を遂行するために益々多くのCPUが複数コアを含むにつれて、CPU及び/又はGPUのいずれか利用できるものによって益々多くの処理タスクをサポートできるようになった。慣習的に、GPU及びCPUは、互いに互換性のない個別のプログラミング環境を通して構成される。ほとんどのGPUは、ベンダー特有の専用プログラムを必要とする。その結果、アプリケーションがCPU及びGPUの両方の処理リソースをレバレッジすることが非常に困難であり、例えば、マルチコアCPUと一緒にデータパラレルコンピューティング能力をもつGPUの処理リソースをレバレッジすることが非常に困難である。
それ故、近代的なデータ処理システムでは、以上の問題を克服し、タスクを遂行できるCPU及び1つ以上のGPUのような利用可能な処理リソースを使用してタスクを遂行するアプリケーションを許すことが要望される。
本発明の実施形態は、ホストプロセッサにおいてAPIをコールするパラレルコンピューティングプログラムが、ホストプロセッサに結合された中央処理ユニット(CPU)及びグラフィック処理ユニット(GPU)を含む計算ユニット間でデータ処理タスクをパラレルに遂行するための方法及び装置を包含する。データ処理タスクのためのソースコードに対応するプログラムオブジェクトが、APIコールに基づきホストプロセッサに結合されたメモリにおいて発生される。計算ユニットのための実行可能なコードが、APIコールに基づきプログラムオブジェクトから発生されて、データ処理タスクの遂行のために計算ユニット間で同時に実行されるようにロードされる。
本発明の他の特徴は、添付図面及び以下の詳細な説明から明らかとなろう。
本発明は、同じ要素が同じ参照番号で示された添付図面に一例として示されているが、これに限定されない。
アプリケーションについてのデータパラレル計算を遂行するようにCPU及び/又はGPUを含むコンピューティング装置を構成するためのシステムの一実施形態を示すブロック図である。 複数スレッドを同時に実行するためにパラレルに動作する複数の計算プロセッサを伴うコンピューティング装置を例示するブロック図である。 コンピューティング装置識別子を使用する論理的コンピューティング装置として構成された複数の物理的コンピューティング装置の一実施形態を示すブロック図である。 アプリケーションから受け取られる能力要求とマッチングさせることによりコンピューティング装置識別子をもつ複数の物理的コンピューティング装置を構成するプロセスの一実施形態を示すフローチャートである。 論理的コンピューティング装置で計算実行可能体(a compute executable)を実行するためのプロセスの一実施形態を示すフローチャートである。 実行可能体(an executable)を実行すると決定された1つ以上の物理的コンピューティング装置のソースをコンパイルすることを含めて実行可能体をロードするためのランタイムプロセスの一実施形態を示すフローチャートである。 実行インスタンスに関連した論理的コンピューティング装置に対応する1つ以上の物理的コンピューティング装置において実行するために実行キューから計算カーネル実行インスタンスを選択するためのプロセスの一実施形態を示すフローチャートである。 複数の計算ユニット間で計算カーネルオブジェクトを同時に実行するための最適なスレッドグループサイズを決定するプロセスの一実施形態を示すフローチャートである。 ソースを記憶するAPI(アプリケーションプログラミングインターフェイス)ライブラリー、及びそのライブラリー内の1つ以上のAPIに対する複数の実行可能体を複数の物理的コンピューティング装置により構築するプロセスの一実施形態を示すフローチャートである。 API要求に基づいてAPIライブラリーから検索された対応ソースと共に複数の実行可能体の1つを実行するためのアプリケーションに対するプロセスの一実施形態を示すフローチャートである。 複数の物理的コンピューティング装置において実行される計算カーネル実行可能体のための計算カーネルソースの一例を示すサンプルソースコードである。 APIをコールすることにより複数の物理的コンピューティング装置において複数の実行可能体の1つを実行するための論理的コンピューティング装置を構成する一例を示すサンプルソースコードである。 APIをコールすることにより複数の物理的コンピューティング装置において複数の実行可能体の1つを実行するための論理的コンピューティング装置を構成する一例を示すサンプルソースコードである。 APIをコールすることにより複数の物理的コンピューティング装置において複数の実行可能体の1つを実行するための論理的コンピューティング装置を構成する一例を示すサンプルソースコードである。 ここに述べる実施形態に関連して使用できる複数のCPU及びGPU(グラフィック処理ユニット)をもつ典型的なコンピュータシステムの一例を示す。
複数のプロセッサにおいてデータパラレル計算を行うための方法及び装置について説明する。以下の説明では、本発明の実施形態を完全に説明するために多数の特定の細部について述べる。しかしながら、当業者であれば、本発明の実施形態は、これらの特定の細部がなくても実施できることが明らかであろう。他の点に関して、この説明の理解を不明瞭にしないために、良く知られたコンポーネント、構造及び技術は、詳細に説明しない。
本明細書において「一実施形態」又は「実施形態」とは、その実施形態に関連して述べる特定の特徴、構造又は特性が本発明の少なくとも1つの実施形態に含まれることを意味する。本明細書の種々の場所に現れる「一実施形態において」という句は、必ずしも全てが同じ実施形態を指していない。
図面に示されたプロセスは、ハードウェア(例えば、回路、専用ロジック、等)、ソフトウェア(汎用コンピュータシステム又は専用マシンにおいて実行されるような)、又はその両方の組み合わせより成る処理ロジックにより遂行される。これらプロセスは、順次のオペレーションに関して以下に述べるが、それらのオペレーションの幾つかは、異なる順序で遂行されてもよい。更に、あるオペレーションは、順次ではなくパラレルに遂行されてもよい。
グラフィック処理ユニット(GPU)は、2D、3Dグラフィックオペレーション及び/又はデジタルビデオ関連ファンクションのような効率の高いグラフィックオペレーションを実施する専用グラフィックプロセッサである。GPUは、例えば、ブリッターオペレーション、テクスチャマッピング、多角形レンダリング、ピクセルシェーディング、及び頂点シェーディングのようなグラフィックオペレーションを遂行する特殊な(プログラム可能な)ハードウェアを含む。GPUは、フレームバッファからデータをフェッチし、そしてピクセルを一緒に混合し、映像をレンダリングして表示のためにフレームバッファへ戻す。又、GPUは、フレームバッファを制御すると共に、フレームバッファを使用して、例えば、CRT又はLCDディスプレイのようなディスプレイをリフレッシュすることもできる。CRT又はLCDのいずれのディスプレイも、少なくとも20Hzのレートでリフレッシュを必要とする短時間持続のディスプレイである(例えば、1/30秒ごとにフレームバッファからのデータでディスプレイがリフレッシュされる)。通常、GPUは、GPUに結合されたCPUからグラフィック処理タスクを取り込み、ディスプレイコントローラを経てディスプレイ装置へラスタグラフィック映像を出力する。本明細書において「GPU」とは、参考としてここに援用するリンドホルド氏等の“Method and Apparatus for Multithreaded Processing of Data In a Programmable Graphics Processor”と題する米国特許第7,015,913号、及びスワン氏等の“Method for Deinterlacing Interlaced Video by A Graphics Processor”と題する米国特許第6,970,206号に述べられたグラフィックプロセッサ又はプログラム可能なグラフィックプロセッサでよい。
一実施形態において、CPU又はGPUのような複数の異なる形式のプロセッサは、データ処理システム内の利用可能な処理リソースの使用効率を高めるために1つ以上のアプリケーションに対するデータパラレル処理タスクを同時に遂行することができる。データ処理システムの処理リソースは、CPU又はGPUのような複数の物理的コンピューティング装置に基づくものである。物理的コンピューティング装置は、1つ以上の計算ユニットを含む。一実施形態において、データパラレル処理タスク(又はデータパラレルタスク)は、例えば、それらのタスクを遂行できるCPU又はGPUのような複数の形式のプロセッサへデリゲートされる。データパラレルタスクは、プロセッサからのある特定の処理能力を必要とする。処理能力は、例えば、専用テクスチャハードウェアサポート、倍精度のフローティングポイント演算、専用ローカルメモリ、ストリームデータキャッシュ、又は同期プリミティブである。個々の形式のプロセッサは、異なるが重畳する処理能力グループをなす。例えば、CPU及びGPUの両方は、倍精度のフローティングポイント計算を遂行することができる。一実施形態において、アプリケーションは、CPU又はGPUのいずれか利用できる方をレバレッジして、データパラレル処理タスクを遂行することができる。
別の実施形態では、データパラレル処理タスクに対して複数の異なる形式の処理リソースを選択して割り当てることが、ランタイム中に自動的に遂行される。アプリケーションは、データ処理タスクに対する能力要求の希望リストを含むヒントを、APIを経てデータ処理システムのランタイムプラットホームへ送信する。受け取ったヒントに基づいて、ランタイムプラットホームは、受け取ったヒントに一致する能力をもつ複数の現在利用可能なCPU及び/又はGPUを決定して、アプリケーションに対するデータ処理タスクをデリゲートする。一実施形態において、能力要求のリストは、基礎となるデータ処理タスクに基づく。能力要求リストは、例えば、異なるベンダーからの異なるバージョンのGPU及びマルチコアCPUを含めてプロセッサ又は計算ユニットの異なるグループにわたって適用することができる。従って、アプリケーションは、CPU又はGPUのような特定形式の計算ユニットをターゲットとするプログラムを提供することから隔離される。
更に、別の実施形態では、選択された計算ユニット間でパラレルに実行するために複数のスレッドを割り当て及びグループ化することは、データパラレルタスクに対する基礎的な問題空間に基づいて遂行される。選択された計算ユニットにおいて実行されるソースコードのための表現を分析することで、どのように処理タスクを最適に区画化しそしてその選択された計算ユニット間に分配しなければならないか決定することができる。APIインターフェイスは、アプリケーションが、その選択された計算ユニット間でスレッドのグループにおいて実行可能体を実行することによりどのようにデータパラレルタスクを遂行すべきか特定できるようにする。更に、アプリケーションは、APIを使用して、その選択された計算ユニット間でタスクを遂行するためのリソース要求に基づきデータパラレルタスクの最適な区画化に関する示唆を検索する。
図1は、アプリケーションについてのデータパラレル計算を遂行するようにCPU及び/又はGPUを含むコンピューティング装置を構成するためのシステム100の一実施形態を示すブロック図である。システム100は、パラレル計算アーキテクチャーを実施する。一実施形態において、システム100は、データバス113を通して1つ以上の中央プロセッサ117及び1つ以上の他のプロセッサ、例えば、メディアプロセッサ115に結合された1つ以上のホストプロセッサを含むグラフィックシステムである。ホストシステム101では複数のホストプロセッサが一緒にネットワーク化されている。複数の中央プロセッサ117は、異なるベンダーからのマルチコアCPUを含む。CPU又はGPUのような計算プロセッサ又は計算ユニットには、能力のグループが関連付けられる。例えば、メディアプロセッサは、専用テクスチャレンダリングハードウェアをもつGPUでよい。別のメディアプロセッサは、専用テクスチャレンダリングハードウェア及び倍精度のフローティングポイント演算の両方をサポートするGPUでよい。又、複数のGPUが、スケーラブルリンクインターフェイス(SLI)又はクロスファイア構成で一緒に接続されてもよい。
一実施形態において、ホストシステム101は、ソフトウェアスタックをサポートする。ソフトウェアスタックは、アプリケーション103、計算プラットホームレイヤ111、例えば、オープンCL(オープンコンピューティング言語)プラットホーム、計算ランタイムレイヤ109、計算コンパイラー107、及び計算アプリケーションライブラリー105のようなソフトウェアスタックコンポーネントを含むことができる。アプリケーション103は、APIコールを通して他のスタックコンポーネントとインターフェイスすることができる。ホストシステム101内のアプリケーション103に対して1つ以上のスレッドを同時に実行することができる。計算プラットホームレイヤ111は、各々のアタッチされる物理的コンピューティング装置の処理能力を記憶するデータ構造又はコンピューティング装置データ構造を維持することができる。一実施形態において、アプリケーションは、計算プラットホームレイヤ111を通してホストシステム101の利用可能な処理リソースに関する情報を検索することができる。アプリケーションは、計算プラットホームレイヤ111を通して処理タスクを遂行するための能力要求を選択し及び特定することができる。従って、計算プラットホームレイヤ111は、処理タスクに対してアタッチされたCPU117及び/又はGPU115から処理リソースを割り当てそして初期化するための物理的コンピューティング装置の構成を決定する。一実施形態において、計算プラットホームレイヤ111は、構成される1つ以上の実際の物理的コンピューティング装置に対応するアプリケーションに対して1つ以上の論理的コンピューティング装置を生成する。
計算ランタイムレイヤ109は、アプリケーション103に対する構成された処理リソースによる処理タスクの実行を、例えば、1つ以上の論理的コンピューティング装置に基づいて、管理する。一実施形態において、処理タスクを実行することは、処理タスクを表す計算プログラムオブジェクトを生成し、そして例えば、実行可能体、入力/出力データ、等を保持するためのメモリリソースを割り当てることを含む。計算プログラムオブジェクトとしてロードされる実行可能体は、計算プログラム実行可能体(a compute program executable)である。この計算プログラム実行可能体は、CPU又はGPUのような計算プロセッサ又は計算ユニットにおいて実行される計算プログラムオブジェクトに含まれる。計算ランタイムレイヤ109は、割り当てられた物理的装置と対話して、処理タスクの実際の実行を行うことができる。一実施形態において、計算ランタイムレイヤ109は、異なるアプリケーションからの複数の処理タスクの実行を、処理タスクに対して構成されたCPU又はGPUのような各プロセッサのランタイム状態に基づいて整合する。計算ランタイムレイヤ109は、このランタイム状態に基づき、処理タスクを遂行するように構成された物理的コンピューティング装置から1つ以上のプロセッサを選択する。処理タスクを遂行することは、複数の物理的コンピューティング装置において1つ以上の実行可能体の複数スレッドを同時に実行することを含む。一実施形態において、計算ランタイムレイヤ109は、各プロセッサのランタイム実行状態を監視することにより、各実行される処理タスクの状態を追跡する。
ランタイムレイヤは、アプリケーション103からの処理タスクに対応する計算プログラム実行可能体として1つ以上の実行可能体をロードする。一実施形態において、計算ランタイムレイヤ109は、計算アプリケーションライブラリー105からの処理タスクを遂行するのに必要な付加的な実行可能体を自動的にロードする。計算ランタイムレイヤ109は、アプリケーション103又は計算アプリケーションライブラリー105からの計算プログラムオブジェクトに対する実行可能体及びそれに対応するソースプログラムの両方をロードする。計算プログラムオブジェクトに対するソースプログラムは、計算プログラムソースである。単一の計算プログラムソースに基づく複数の実行可能体が、複数の形式及び/又は異なるバージョンの物理的コンピューティング装置を含むように構成された論理的コンピューティング装置に基づいてロードされる。一実施形態において、計算ランタイムレイヤ109は、計算コンパイラー107をアクチベートし、ロードされたソースプログラムを、例えば、実行可能体を実行するよう構成されたCPU又はGPUのようなターゲットプロセッサに対して最適化された実行可能体へとオンラインコンパイルすることができる。
オンラインコンパイルされた実行可能体は、それに対応するソースプログラムに基づき既存の実行可能体に加えて将来呼び出すために記憶される。更に、実行可能体は、オフラインでコンパイルされて、APIコールを使用して計算ランタイム109へロードされてもよい。計算アプリケーションライブラリー105及び/又はアプリケーション103は、アプリケーションからのライブラリーAPI要求に応答して関連実行可能体をロードすることができる。新たにコンパイルされた実行可能体は、計算アプリケーションライブラリー105又はアプリケーション103に対して動的に更新される。一実施形態において、計算ランタイム109は、アプリケーションにおける既存の計算プログラム実行可能体を、コンピューティング装置の新たにアップグレードされたバージョンに対して計算コンパイラー107を通してオンラインコンパイルされた新たな実行可能体に置き換える。計算ランタイム109は、オンラインコンパイルされた新たな実行可能体を挿入して、計算アプリケーションライブラリー105を更新することができる。一実施形態において、計算ランタイム109は、処理タスクに対して実行可能体をロードするときに計算コンパイラー107を呼び出す。別の実施形態では、計算コンパイラー107は、計算アプリケーションライブラリー105に対して実行可能体を構築するためにオフラインで呼び出される。計算コンパイラー107は、計算プログラム実行可能体を生成するように計算カーネルプログラムをコンパイルしリンクする。一実施形態において、計算アプリケーションライブラリー105は、例えば、開発ツールキット及び/又は映像処理をサポートするための複数の機能を含む。各ライブラリー機能は、複数の物理的コンピューティング装置に対して計算アプリケーションライブラリー105に記憶された1つの計算プログラムソース及び1つ以上の計算プログラム実行可能体に対応する。
図2は、複数スレッドを同時に実行するためにパラレルに動作する複数の計算プロセッサ(例えば、計算ユニット)を伴うコンピューティング装置を例示するブロック図である。各計算プロセッサは、複数のスレッドをパラレルに(又は同時に)実行する。計算プロセッサ又は計算ユニットにおいてパラレルに実行できるスレッドは、スレッドグループと称される。コンピューティング装置は、パラレルに実行できる複数のスレッドグループをもつことができる。例えば、コンピューティング装置205においてスレッドグループとして実行するためにM個のスレッドが示されている。複数のスレッドグループ、例えば、計算processor_1 205のスレッド1、及び計算processor_L 203のスレッドNは、1つのコンピューティング装置における個別の計算プロセッサにわたり、又は複数のコンピューティング装置にわたりパラレルに実行することができる。複数の計算プロセッサにわたる複数のスレッドグループは、計算プログラム実行可能体をパラレルに実行する。2つ以上の計算プロセッサは、ASIC(特定用途向け集積回路)装置のような単一チップをベースとする。一実施形態において、アプリケーションからの複数スレッドは、複数のチップにわたり2つ以上の計算プロセッサにおいて同時に実行される。
コンピューティング装置は、Processor_1 205及びProcessor_L 203のような1つ以上の計算プロセッサ又は計算ユニットを含む。計算プロセッサには、ローカルメモリが結合される。計算プロセッサで実行される単一スレッドグループのスレッド間に共有されるローカルメモリは、計算プロセッサに結合されたローカルメモリによってサポートされる。異なるスレッドグループからの複数スレッド、例えば、スレッド1 213及びスレッドN 209は、コンピューティング装置201に結合されたコンピューティング装置メモリ217に記憶されたストリームのような計算メモリオブジェクトを共有する。コンピューティング装置メモリ217は、グローバルメモリ及びコンスタントメモリを含む。グローバルメモリは、ストリームのような計算メモリオブジェクトを割り当てるのに使用される。計算メモリオブジェクトは、計算プログラム実行可能体により操作できるデータエレメントの集合を含む。計算メモリオブジェクトは、映像、テクスチャ、フレームバッファ、スカラーデータ形式のアレイ、ユーザ定義構造のアレイ、変数、等を表す。コンスタントメモリは、計算プログラム実行可能体により頻繁に使用されるコンスタント変数を記憶するリードオンリメモリである。
一実施形態において、計算プロセッサ又は計算ユニットのローカルメモリは、スレッドグループ内の全てのスレッドにより共有される変数を割り当てるのに使用される。ローカルメモリは、専用のローカル記憶装置、例えば、Processor_1のためのローカル共有メモリ219及びProcessor_Lのためのローカル共有メモリ211として実施される。別の実施形態では、計算プロセッサのためのローカルメモリは、コンピューティング装置の1つ以上の計算プロセッサのためのコンピューティング装置メモリの読み取り/書き込みキャッシュ、例えば、コンピューティング装置201における計算プロセッサ205、203のためのデータキャッシュ215として実施される。専用のローカル記憶装置は、異なるスレッドグループにわたってスレッドにより共有されるのではない。Processor_1 205のような計算プロセッサのローカルメモリが、例えば、データキャッシュ215のような読み取り/書き込みキャッシュとして実施される場合には、ローカルメモリにあると宣言された変数は、コンピューティング装置メモリ217から割り当てられ、そしてローカルメモリを実施する例えばデータキャッシュ215のような読み取り/書き込みキャッシュにキャッシュ記憶される。スレッドグループ内のスレッドは、例えば、対応するコンピューティング装置に対して読み取り/書き込みキャッシュも専用のローカル記憶装置も利用できないときに、コンピューティング装置メモリ217に割り当てられたローカル変数を共有する。一実施形態において、各スレッドは、スレッドにおいてコールされるファンクションにより使用されるスレッドプライベート変数を記憶するためにプライベートメモリに関連付けられる。例えば、プライベートメモリ1 211は、スレッド1 213以外のスレッドからは見えない。
図3は、コンピューティング装置識別子を使用する論理的コンピューティング装置として構成された複数の物理的コンピューティング装置の一実施形態を示すブロック図である。一実施形態において、アプリケーション303及びプラットホームレイヤ305は、ホストCPU301において実行される。アプリケーション303は、図1のアプリケーション103の1つである。ホストシステム101は、ホストCPU301を含む。物理的コンピューティング装置Physical_Compute_Device−1 305ないしPhysical_Compute_Device−N 311の各々は、図1のCPU117又はGPU115の1つである。一実施形態において、計算プラットホームレイヤ111は、API要求に含まれた能力要求のリストに基づきデータパラレル処理リソースを構成するためにアプリケーション303からのAPI要求に応答してコンピューティング装置識別子307を発生する。このコンピューティング装置識別子307は、計算プラットホームレイヤ111による構成に基づき実際の物理的コンピューティング装置Physical_Compute_Device−1 305ないしPhysical_Compute_Device−N 311の選択を指す。一実施形態において、論理的コンピューティング装置309は、ホストCPU301とは個別の選択された実際の物理的コンピューティング装置のグループを表す。
図4は、アプリケーションから受け取られる能力要求とマッチングさせることによりコンピューティング装置識別子をもつ複数の物理的コンピューティング装置を構成するためのプロセス400の一実施形態を示すフローチャートである。規範的プロセス400は、ハードウェア(回路、専用ロジック、等)、ソフトウェア(専用マシンで実行されるような)、又はその両方の組み合わせで構成される処理ロジックにより遂行される。例えば、プロセス400は、図1のシステム100に基づき、ホストシステム101によりホストされるデータ処理システムにおいて遂行される。データ処理システムは、図1の計算プラットホームレイヤ111のようなプラットホームレイヤをホストするホストプロセッサと、図1のCPU117及びGPU115のようなホストプロセッサにアタッチされる複数の物理的コンピューティング装置とを備えている。
ブロック401において、一実施形態では、プロセス400の処理ロジックは、1つ以上の対応する能力に関連した複数の物理的コンピューティング装置を表すデータ構造(又はコンピューティング装置データ構造)を構築する。各物理的コンピューティング装置は、プロセス400の処理ロジックを遂行する処理システムにアタッチされる。CPU又はGPUのような物理的コンピューティング装置の能力又は計算能力は、物理的コンピューティング装置が処理特徴をサポートするか、メモリアクセスメカニズムをサポートするか、命名拡張をサポートするか、又は関連制限をサポートするかを含む。処理特徴は、専用テクスチャハードウェアサポート、倍精度フローティングポイント演算又は同期サポート(例えば、ミューテックス)に関連している。
コンピューティング装置の能力は、コンピューティング装置に関連した処理特性或いは制限を指示する形式を含む。アプリケーションは、要求されるコンピューティング装置の形式を指定するか、又はAPIを使用して特定のコンピューティング装置の形式を問合せる。コンピューティング装置の異なる形式の例が次のテーブルに示されている。
Figure 0005232914
更に、コンピューティング装置の能力は、例えば、次のテーブルに示す構成値を含む。
Figure 0005232914

Figure 0005232914

Figure 0005232914
物理的な処理装置のためのメモリアクセスメカニズムは、変数キャッシュの形式(例えば、サポートなし、リードオンリ、又はリード/ライト)、計算メモリオブジェクトキャッシュの形式、キャッシュサポートのサイズ、専用ローカルメモリサポート又はその関連制限に関連したものである。メモリアクセス制限は、計算プログラム実行可能体により同時に読み取り又は書き込みできる計算メモリオブジェクトの最大数、割り当てることのできる計算メモリオブジェクトの最大数、又は多次元の計算メモリオブジェクトのある次元に沿った最大サイズ、例えば、2D(二次元)映像に対する計算メモリオブジェクトの最大巾を含む。データ処理システムのシステムアプリケーションは、新たな物理的コンピューティング装置をデータ処理システムにアタッチするのに応答してデータ構造を更新することができる。一実施形態では、物理的コンピューティング装置の能力を予め決定することができる。別の実施形態では、データ処理システムのシステムアプリケーションが、ランタイム中に、新たにアタッチされた物理的処理装置を発見する。システムアプリケーションは、その新たに発見された物理的コンピューティング装置の能力を検索して、そのアタッチされた物理的コンピューティング装置及びそれに対応する能力を表すデータ構造を更新することができる。
一実施形態によれば、プロセス400の処理ロジックは、ブロック403において、アプリケーションから計算能力要求を受け取る。アプリケーションは、APIをコールすることによりシステムアプリケーションへその計算能力要求を送信する。システムアプリケーションは、そのアプリケーションに対するホストシステムのソフトウェアスタックのプラットホームレイヤに対応する。一実施形態では、計算能力要求は、アプリケーションに対するタスクを遂行するための処理リソースを要求するために要求された能力のリストを識別する。一実施形態では、アプリケーションは、要求された処理リソースが複数のスレッドにおけるタスクを同時に遂行することを要求する。それに応答して、プロセス400の処理ロジックは、ブロック405において、アタッチされた物理的コンピューティング装置から物理的コンピューティング装置のグループを選択する。この選択は、計算能力要求と、能力データ構造に記憶された計算能力との間の一致に基づいて決定される。一実施形態では、プロセス400の処理ロジックは、能力要求により与えられるヒントに基づいてマッチングをとる。
プロセス400の処理ロジックは、物理的コンピューティング装置と計算能力要求との間で一致した計算能力の数に基づいてマッチングスコアを決定する。一実施形態では、プロセス400の処理ロジックは、マッチングスコアが最も高い複数の物理的コンピューティング装置を選択する。別の実施形態では、プロセス400の処理ロジックは、能力要求における各能力が一致した場合に、物理的コンピューティング装置を選択する。プロセス400の処理ロジックは、ブロック405において、一致する物理的コンピューティング装置の複数グループを決定する。一実施形態では、一致する物理的コンピューティング装置の各グループは、各装置の負荷バランス能力に基づいて選択される。ブロック407において、一実施形態では、プロセス400の処理ロジックは、ブロック405で選択された物理的コンピューティング装置のグループごとにコンピューティング装置識別子を発生する。プロセス400の処理ロジックは、APIをコールすることにより、発生されたコンピューティング装置識別子の1つ以上をアプリケーションへ返送する。アプリケーションは、コンピューティング装置識別子に基づいてタスクを遂行するためにどの処理リソースを使用すべきか選択する。一実施形態において、プロセス400の処理ロジックは、受け取った能力要求ごとに、ブロック407において、せいぜい1つのコンピューティング装置識別子を発生する。
ブロック409において、一実施形態では、プロセス400の処理ロジックは、対応するコンピューティング装置識別子に基づきブロック405で選択された物理的コンピューティング装置のグループに対して論理的コンピューティング装置を初期化するためにリソースを割り当てる。論理的コンピューティング装置は、1つ以上の物理的コンピューティング装置を含むコンピューティング装置である。プロセス400の処理ロジックは、ブロック405での選択に基づき1つ以上のコンピューティング装置識別子を受け取ったアプリケーションからのAPI要求に応答して論理的コンピューティング装置の初期化を遂行する。プロセス400の処理ロジックは、アプリケーションに対して論理的コンピューティング装置にコンテクストオブジェクトを生成する。コンテクストオブジェクトに対して計算メモリオブジェクト、計算プログラムオブジェクト、及び/又は計算プログラム実行可能体を操作するコマンドは、そのコンテクストオブジェクトを生成するときAPI要求で指定されたパラメータに基づいて順序正しく(例えば、同期状態で)又は順序ずれして(例えば、非同期状態で)実行される。計算メモリオブジェクト、計算プログラム、又は計算カーネルを操作するプロファイリングコマンドは、API要求を使用してコンテクストオブジェクトに対してイネーブルされる。一実施形態において、コンテクストオブジェクトは、アプリケーションを実行するホストシステム内の1つのアプリケーションスレッドに関連付けられる。1つの論理的コンピューティング装置内で又は異なる論理的コンピューティング装置にわたって処理タスクを同時に遂行する複数スレッドは、個別のコンテクストオブジェクトに基づく。
一実施形態において、プロセス400の処理ロジックは、clCreateContext、clRetainContext、及びclReleaseContextを含む複数のAPIに基づく。API clCreateContextは、計算コンテクストを生成する。この計算コンテクストは、計算コンテクストオブジェクトに対応する。API clRetainContextは、コンテクストにより識別された特定の計算コンテクストをclReleaseContextへの入力引数として使用してインスタンスの数をインクリメントする。API clCreateContextは、暗示保有(an implicit retain)である。これは、典型的に、アプリケーションによってコンテクストが通される第三者ライブラリーにとって非常に有益である。しかしながら、アプリケーションは、ライブラリーに通知せずにコンテクストを削除することがあると考えられる。複数のインスタンスをコンテクストにアタッチしたりコンテクストから解除したりできることで、ライブラリーにより使用されている計算コンテクストがもはや有効でなくなる問題を解消する。clRetainContextへの入力引数が有効な計算コンテクストオブジェクトに対応しない場合には、clRetainContextが、CU_INVALID_CONTEXTを返送する。API clReleaseContextは、有効な計算コンテクストからインスタンスを解除する。clReleaseContextへの入力引数が有効な計算コンテクストオブジェクトに対応しない場合には、clReleaseContextが、CU_INVALID_CONTEXTを返送する。
図5は、論理的コンピューティング装置において計算実行可能体を実行するための規範的プロセス500の一実施形態を示すフローチャートである。一実施形態において、プロセス500は、図1の計算ランタイムレイヤ109のようなデータ処理システムのランタイムレイヤにより遂行される。ブロック501において、プロセス500の処理ロジックは、計算実行可能体を実行するために論理的コンピューティング装置に1つ以上の計算メモリオブジェクト(例えば、ストリーム)を割り当てる。この計算メモリオブジェクトは、例えば、映像メモリオブジェクト又はアレイメモリオブジェクトを表すために1つ以上のデータエレメントを含む。アレイメモリオブジェクトは、データエレメントの一次元集合である。映像メモリオブジェクトは、テクスチャ、フレームバッファ又は映像のような二次元、三次元又は他の多次元データを記憶するための集合である。処理タスクは、入力計算メモリオブジェクトから読み取りそして出力計算メモリオブジェクトへ書き込むことを含む計算メモリAPIを使用して計算メモリオブジェクト又はストリームで動作する計算プログラム実行可能体により遂行される。一実施形態において、計算メモリオブジェクトは、計算メモリAPIを使用してデータオブジェクトを更新するために、バッファオブジェクト、テクスチャオブジェクト、又はレンダーバッファオブジェクトのようなデータオブジェクトにアタッチされる。データオブジェクトは、そのデータオブジェクトにおいてテキストレンダリングのようなグラフィックデータ処理オペレーションをアクチベートするAPIに関連付けられる。
計算メモリオブジェクトを割り当てるとき、プロセス500の処理ロジックは、APIの仕様に基づいてどこに割り当てを存在させるべきか決定する。例えば、計算メモリオブジェクトは、図1のホストシステム101のホストメモリのようなホストメモリ、及び/又は図2のグローバルメモリ又はコンスタントメモリ217のようなコンピューティング装置メモリから割り当てられる。ホストメモリに割り当てられる計算メモリオブジェクトは、コンピューティング装置メモリにキャッシュ記憶される必要がある。プロセス500の処理ロジックは、例えば、データが計算メモリオブジェクトへロードされたかどうかを指示する同期データを含む発生されたイベントオブジェクトに基づいて、非ブロッキングAPIインターフェイスを使用して、割り当てられた計算メモリオブジェクトへデータを非同期でロードする。一実施形態において、プロセス500の処理ロジックは、割り当てられた計算メモリオブジェクトから読み取るか又はそこへ書き込むときにメモリアクセスオペレーションをスケジューリングする。プロセス500の処理ロジックは、割り当てられたストリームメモリをマップして、アプリケーションの論理的アドレスを形成する。一実施形態において、プロセス500の処理ロジックは、ブロック501において、図1のアプリケーション103のような、ホストプロセッサで実行中のアプリケーションからのAPI要求に基づき、オペレーションを遂行する。
ブロック503において、一実施形態によれば、プロセス500の処理ロジックは、論理的コンピューティング装置(例えば、コンピューティング装置グループ)に対して計算プログラムオブジェクトを生成する。計算プログラムオブジェクトは、データパラレルプログラムのエクスポートされたファンクション又はエントリーポイントを表す計算カーネルのグループを含む。計算カーネルは、データパラレルタスク(例えば、ファンクション)を遂行するために計算ユニットにおいて実行できる計算プログラム実行可能体に対するポインタを含む。各計算カーネルは、ブロック501において割り当てられるストリームのような、ファンクション入力又は出力に対して割り当てられる計算メモリオブジェクト又はストリームを含むファンクション引数のグループに関連付けられる。
プロセス500の処理ロジックは、ブロック509において、計算プログラムバイナリー及び/又は計算プログラムソースを計算プログラムオブジェクトへロードする。計算プログラムバイナリーは、コンピューティング装置で実行される計算プログラム実行可能体を示すビットを含む。計算プログラムバイナリーは、計算プログラム実行可能体、及び/又は計算プログラム実行可能体へと変換されるべき計算プログラムソースの中間表示である。一実施形態において、計算プログラム実行可能体は、例えば、ターゲット物理的コンピューティング装置の形式(例えば、GPU又はCPU)、バージョン、及び/又はコンパイルオプション又はフラグ、例えば、スレッドグループサイズ及び/又はスレッドグループ次元に関連した記述データを含む。計算プログラムソースは、計算プログラム実行可能体がコンパイルされるソースコードである。プロセス500の処理ロジックは、ブロック509において、計算プログラムソースに対応する複数の計算プログラム実行可能体をロードする。一実施形態において、プロセス500の処理ロジックは、計算プログラム実行可能体を、アプリケーションから、又は図1の計算アプリケーションライブラリーのような計算ライブラリーを経てロードする。計算プログラム実行可能体は、それに対応する計算プログラムソースと共にロードされる。プロセス500の処理ロジックは、ブロック505において、計算プログラムオブジェクトに対するファンクション引数を設定する。一実施形態では、プロセス500の処理ロジックは、アプリケーションからのAPI要求に基づいて、ブロック503、505及び509においてオペレーションを遂行する。
ブロック511において、プロセス500の処理ロジックは、論理的コンピューティング装置で計算カーネルオブジェクトを実行するために実行キューを更新する。プロセス500の処理ロジックは、図1のアプリケーション103又は計算アプリケーションライブラリー105のようなアプリケーション又は計算アプリケーションライブラリーから、例えば、図1の計算ランタイム109のような計算ランタイムへの適当な引数を伴うAPIコールに応答して計算カーネルを実行する。計算カーネルを実行することは、計算カーネルに関連した計算プログラム実行可能体を実行することを含む。一実施形態において、プロセス500の処理ロジックは、計算カーネルを実行するために計算カーネル実行インスタンスを発生する。計算カーネルを実行するための図1の計算ランタイム109のような計算ランタームへのAPIコールは、その性質が非同期である。実行インスタンスは、図1の計算ランタイム109のような計算ランタイムにより返送される計算イベントオブジェクトにより識別される。計算カーネル実行インスタンスは、計算カーネルインスタンスを実行するために実行キューへ追加される。
一実施形態において、計算カーネルを実行するための計算ランタイムへのAPIコールは、計算プロセッサ上でスレッドグループとしてパラレルに同時に実行するスレッドの数を含む。APIコールは、使用すべき計算プロセッサの数を含む。計算カーネル実行インスタンスは、対応する計算プログラム実行可能体を実行するための希望のプライオリティを指示するプライオリティ値を含む。又、計算カーネル実行インスタンスは、以前の実行インスタンスを識別するイベントオブジェクト、及び/又はスレッドの予想合計数、及び実行すべきスレッドグループの数も含む。スレッドグループの数及びスレッドの合計数は、APIコールに指定される。一実施形態において、イベントオブジェクトは、そのイベントオブジェクトを含む実行インスタンスと、そのイベントオブジェクトにより識別される別の実行インスタンスとの間の実行順序関係を指示する。イベントオブジェクトを含む実行インスタンスは、イベントオブジェクトにより識別された別の実行インスタンスが実行を終了した後に実行されることが要求される。イベントオブジェクトは、queue_after_event_objectと称される。一実施形態において、実行キューは、対応する計算プログラム実行可能体を実行するために複数の計算カーネル実行インスタンスを含む。計算プログラム実行可能体のための1つ以上の計算カーネル実行インスタンスは、実行キューにおいて実行されるようにスケジュールされる。一実施形態において、プロセス500の処理ロジックは、アプリケーションからのAPI要求に応答して実行キューを更新する。実行キューは、アプリケーションが実行されるホストデータシステムによりホストされる。
ブロック513において、プロセス500の処理ロジックは、実行のための実行キューから計算カーネル実行インスタンスを選択する。一実施形態において、プロセス500の処理ロジックは、対応する論理的コンピューティング装置により同時に実行されるべき2つ以上の計算カーネル実行インスタンスを選択する。プロセス500の処理ロジックは、計算カーネル実行インスタンスが実行キューから選択されるかどうかを、それに関連したプライオリティ、及び実行キュー内の他の実行インスタンスとの依存関係に基づいて決定する。計算カーネル実行インスタンスは、それに対応する計算カーネルオブジェクトを、その計算カーネルオブジェクトへロードされる実行可能体に基づいて実行することにより、実行される。
ブロック517において、一実施形態では、プロセス500の処理ロジックは、計算カーネルオブジェクトに対し論理的コンピューティング装置に関連した物理的コンピューティング装置において実行するためにその選択された計算カーネルインスタンスに対応する計算カーネルオブジェクトにロードされる複数の実行可能体の1つを選択する。プロセス500の処理ロジックは、1つの計算カーネル実行インスタンスに対し2つ以上の物理的コンピューティング装置においてパラレルに実行されるべき2つ以上の実行可能体を選択する。この選択は、選択された計算カーネル実行インスタンスに関連した論理的コンピューティング装置に対応する物理的コンピューティング装置の現在実行状態に基づいて行われる。物理的コンピューティング装置の実行状態は、実行中のスレッドの数、ローカルメモリ使用レベル、及びプロセッサ使用レベル(例えば、単位時間当たりのピークオペレーション数)、等を含む。一実施形態において、この選択は、所定の使用レベルに基づいて行われる。別の実施形態では、この選択は、計算カーネル実行インスタンスに関連したスレッドの数及びスレッドグループの数に基づいて行われる。プロセス500の処理ロジックは、物理的コンピューティング装置から実行状態を検索する。一実施形態において、プロセス500の処理ロジックは、ホストシステムで実行中のアプリケーションに対してブロック513、517を非同期で実行するように実行キューから計算カーネル実行インスタンスを選択するためのオペレーションを遂行する。
ブロック519において、プロセス500の処理ロジックは、実行キューにおいて実行するようにスケジュールされた計算カーネル実行インスタンスの実行状態をチェックする。各実行インスタンスは、独特の計算イベントオブジェクトにより識別される。イベントオブジェクトは、図1のランタイム109のような計算ランタイムに基づいて、対応する計算カーネル実行インスタンスがキューイングされたとき、実行インスタンスを実行するためにAPIをコールする図5のアプリケーション103又は計算アプリケーションライブラリー105のようなアプリケーション又は計算アプリケーションライブラリーへ返送される。一実施形態において、プロセス500の処理ロジックは、アプリケーションからのAPI要求に応答して実行状態チェックを遂行する。プロセス500の処理ロジックは、計算カーネル実行インスタンスを識別する計算イベントオブジェクトの状態を問合せることにより計算カーネル実行インスタンスの実行の完了を決定する。プロセス500の処理ロジックは、アプリケーションからのAPIコールへ戻るために計算カーネル実行インスタンスの実行が完了するまで待機する。プロセス500の処理ロジックは、計算イベントオブジェクトに基づき種々のストリームからの実行インスタンスの読み取り及び/又はそこへの書き込みの処理を制御する。
ブロック521において、一実施形態により、プロセス500の処理ロジックは、計算カーネル実行インスタンスの実行結果を検索する。その後、プロセス500の処理ロジックは、計算カーネル実行インスタンスを実行するために割り当てられた処理リソースをクリーンアップする。一実施形態において、プロセス500の処理ロジックは、計算カーネル実行可能体の実行結果を保持するストリームメモリをローカルメモリへコピーする。プロセス500の処理ロジックは、ブロック501において割り当てられた変数ストリーム又は映像ストリームを削除する。プロセス500の処理ロジックは、計算カーネル実行が完了するときを検出するためにカーネル事象オブジェクトを削除する。特定の計算カーネルオブジェクトに関連した各計算カーネル実行インスタンスが完全に実行された場合には、プロセス500の処理ロジックは、特定の計算カーネルオブジェクトを削除する。一実施形態において、プロセス500の処理ロジックは、アプリケーションにより開始されたAPI要求に基づいてブロック521においてオペレーションを遂行する。
図6は、実行可能体を実行すると決定された1つ以上の物理的コンピューティング装置のソースをコンパイルすることを含めて実行可能体をロードするためのランタイムプロセス600の一実施形態を示すフローチャートである。このプロセス600は、図5のブロック507におけるプロセス500の一部分として遂行される。一実施形態において、プロセス600は、ブロック601において、論理的コンピューティング装置に関連した物理的コンピューティング装置ごとに、その物理的コンピューティング装置に適合する1つ以上の既存の計算カーネル実行可能体を選択する。計算カーネル実行可能体は、適合する物理的コンピューティング装置において実行される。既存の計算カーネル実行可能体は、アプリケーションから得られるか、又は図1の計算アプリケーションライブラリー105のような計算ライブラリーを通して得られる。選択された計算カーネル実行可能体の各々は、少なくとも1つの物理的コンピューティング装置により実行される。一実施形態において、その選択は、既存の計算カーネル実行可能体に関連した記述データに基づいて行われる。
既存の計算カーネルオブジェクトが選択された場合には、プロセス600は、ブロック603において、選択された計算カーネル実行可能体のいずれかが物理的コンピューティング装置に対して最適であるかどうか決定する。この決定は、例えば、物理的コンピューティング装置のバージョンに基づいて行われる。一実施形態において、プロセス600は、記述データにおけるターゲット物理的コンピューティング装置のバージョンが物理的コンピューティング装置のバージョンに一致する場合に既存の計算カーネル実行可能体が物理的コンピューティング装置に対して最適であると決定する。
ブロック605において、一実施形態では、プロセス600は、図1の計算コンパイラー107のようなオンラインコンパイラーを使用して、対応する計算カーネルソースから物理的コンピューティング装置に最適な新たな計算カーネル実行可能体を構築する。プロセス600は、ブロック603において、選択された計算カーネル実行可能体のどれもが物理的コンピューティング装置に最適でないと分かった場合には、オンライン構築を遂行する。一実施形態において、プロセス600は、ブロック601において、既存の計算カーネル実行可能体のいずれもが物理的コンピューティング装置に適合しないと分かった場合には、オンライン構築を遂行する。計算カーネルソースは、アプリケーションから得られるか、又は図1の計算アプリケーションライブラリー105のような計算ライブラリーを通して得られる。
ブロック605における構築が成功である場合には、一実施形態では、プロセス600は、ブロック607において、新たに構築された計算カーネル実行可能体をそれに対応する計算カーネルオブジェクトへロードする。さもなければ、プロセス600は、ブロック609において、選択された計算カーネル実行可能体をカーネルオブジェクトへロードする。一実施形態において、プロセス600は、計算カーネル実行可能体がまだロードされない場合には、計算カーネル実行可能体を計算カーネルオブジェクトへロードしてもよい。別の実施形態では、プロセス600は、計算カーネルオブジェクトに対する既存の計算カーネル実行可能体のいずれもが物理的コンピューティング装置に適合せず且つそれに対応する計算カーネルソースが得られない場合には、エラーメッセージを発生してもよい。
図7は、実行インスタンスに関連した論理的コンピューティング装置に対応する1つ以上の物理的コンピューティング装置において実行するために実行キューから計算カーネル実行インスタンスを選択するためのプロセス700の一実施形態を示すフローチャートである。このプロセス700は、図5のブロック513においてプロセス500の一部分として遂行される。一実施形態では、プロセス700は、ブロック701において、実行キュー内で現在スケジュールされている計算カーネル実行インスタンス間で依存条件を識別する。計算カーネル実行インスタンスの依存条件は、その条件が顕著なものである場合に計算カーネル実行インスタンスの実行を防止する。一実施形態では、依存条件は、出力ストリームにより供給される入力ストリーム間の関係に基づく。一実施形態では、プロセス700は、実行インスタンスのための対応するファンクションの入力ストリーム及び出力ストリームに基づき実行インスタンス間の依存条件を検出する。別の実施形態では、プライオリティレベルの低い実行インスタンスは、プライオリティレベルの高い別の実行とで依存関係を有する。
ブロック703において、一実施形態では、プロセス700は、顕著な依存条件のない複数のスケジュールされた計算カーネル実行インスタンスから実行のための計算カーネル実行インスタンスを選択する。この選択は、実行インスタンスに指定されたプライオリティレベルに基づく。一実施形態では、その選択された計算カーネル実行インスタンスは、顕著な依存条件のない複数の計算カーネル実行インスタンス間で最も高いプライオリティレベルが関連付けられる。ブロック705において、プロセス700は、選択された計算カーネル実行インスタンスに対応する1つ以上の物理的コンピューティング装置の現在実行状態を検索する。一実施形態では、物理的コンピューティング装置の実行状態は、所定のメモリ位置から検索される。別の実施形態では、プロセス700は、実行状態レポートを受け取るために物理的コンピューティング装置へ状態要求を送信する。プロセス700は、ブロック707において、検索された実行状態に基づいて、選択された計算カーネル実行インスタンスを実行するために、1つ以上簿物理的コンピューティング装置を指定する。一実施形態では、物理的コンピューティング装置は、他の物理的コンピューティング装置との負荷バランス考慮に基づき、実行のために指定される。選択された物理的コンピューティング装置は、所定のプロセッサ使用レベル及び/又はメモリ使用レベルより低いといった1つ以上の特定の(例えば、所定の)基準を満足する実行状態が関連付けられる。一実施形態では、所定の基準は、選択された計算カーネル実行インスタンスに関連したスレッドの数及びスレッドグループの数に依存する。プロセス700は、複数のスレッドをパラレルに実行するため、同じ実行インスタンス又は複数のインスタンスに対する個別の計算カーネル実行可能体を1つ以上の指定の物理的コンピューティング装置にロードする。
図8は、複数の計算ユニット間で計算カーネルオブジェクトを同時に実行するための最適なスレッドグループサイズを決定するプロセス800の一実施形態を示すフローチャートである。この規範的プロセス800は、ハードウェア(回路、専用ロジック、等)、ソフトウェア(専用マシンで実行されるような)、又はその両方の組み合わせで構成される処理ロジックにより遂行される。例えば、プロセス800は、図1のシステム100の幾つかのコンポーネントにより遂行されるか、又は図5のブロック523においてプロセス500の一部分として遂行される。一実施形態では、ブロック801において、プロセス800の処理ロジックは、異なる計算ユニットをターゲットとする単一ソースからコンパイルされた実行可能なコードからリソース要求を決定する。実行可能なコードのリソース要求は、実行可能なコードに対するターゲット計算ユニットのレジスタ、メモリ及び/又は他のハードウェアコンポーネントに関する使用データを含む。単一ソースは、その単一ソースにより指定されるデータパラレルタスク(又はファンクション)を遂行するために異なる形式の計算ユニットへロードされる異なる実行可能なコードへとコンパイルされる。幾つかの実施形態では、プロセス800の処理ロジックは、ソースコードと、そのソースコードからコンパイルされるインストラクションを実行するためのターゲット計算ユニットとに基づいて、リソース要求を決定する。
プロセス800の処理ロジックは、ターゲット計算ユニットにおいて実行可能なコードを実行するための必要なリソースを決定するために計算ユニットをターゲットとするソースコードからコンパイルされた実行可能なコードの中間表示を分析(及び/又はトラバース)する。この分析中に、プロセス800の処理ロジックは、マッチング最適化条件に基づいてソースコードの一部分を識別し、そのソースコードの識別された部分を再コンパイルして、ターゲット計算ユニットで実行するのに必要なリソースを減少する。例えば、プロセス800の処理ロジックは、ソースコードの変数を定数値に置き換える。プロセス800の処理ロジックは、対応する実行可能なコードの分析に基づいてデータパラレルタスクの次元を識別する。識別された次元が、例えば、APIを使用して指定された次元とは異なるときには、プロセス800の処理ロジックは、例えば、システム設定に基づいて、識別された次元及び指定の次元の一方を選択する。
ブロック803において、幾つかの実施形態では、プロセス800の処理ロジックは、決定されたリソース要求に基づき、複数の計算ユニット間で実行可能なコードをパラレルに実行するための最適なスレッドグループサイズを決定する。スレッドのグループは、ターゲット計算ユニットにおいてコンパイルされた実行可能なコードを同時に実行する。最適なスレッドグループサイズは、計算ユニット内のリソース使用を最大にするように計算ユニットにおいて実行可能なコードを実行するためのスレッドグループ内のスレッドの数である。計算ユニットのリソース使用は、データパラレルタスクを遂行するための時間長さに関して測定される。幾つかの実施形態では、プロセス800の処理ロジックは、実行可能なコードに対する最適なスレッドグループサイズを決定するために計算ユニットから現在リソース使用状態を検索する。最適なスレッドグループサイズは、遂行すべき実行可能なコードのためのデータパラレルタスクに関連した次元に基づく。次元は、データパラレルタスクに対する2つ以上の尺度に沿った繰り返し計算を指定する数である。例えば、映像処理タスクには、映像の巾及び映像の高さに沿った2の次元が関連付けられる。
ブロック805において、一実施形態によれば、プロセス800の処理ロジックは、データパラレルタスク(又はファンクション)を遂行するために単一ソースからコンパイルされた1つ以上の実行可能なコード(又は計算カーネル)を複数の計算ユニット間でパラレルに実行するための合計スレッド数を決定する。プロセス800の処理ロジックは、ホストプロセッサ(又はホスト処理ユニット)で実行中のアプリケーション、例えば、図1のホストシステム101のアプリケーション103からAPI要求を受け取る。このAPI要求は、多次元値をN個の整数のアレイ(G1、G2・・・GN)として有するグローバルスレッド数を含む。整数Nは、データパラレルタスクに関連した次元である。プロセス800の処理ロジックは、次元を決定するために多次元値からアレイ内の整数の数をカウントする。API要求に応答して、プロセス800の処理ロジックは、G1*G2・・・*GNのようなN個の整数の積に基づき複数の計算ユニット間で実行可能なコードを実行するスレッドの合計数を決定する。
一実施形態では、プロセス800の処理ロジックは、ブロック807において、ローカルスレッドグループ数が指定されたかどうか検証する。ローカルスレッドグループ数は、N個の整数のアレイ(L1、L2・・・LN)として指定された多次元値を有する。一実施形態では、ローカルスレッドグループ数の次元は、データパラレルタスクを遂行するための合計スレッド数の次元に等しい。プロセス800の処理ロジックは、ソースコード及び/又はターゲット計算ユニットに対してそのソースコードからコンパイルされた実行可能なコードに関連したプログラムカーネルオブジェクトからローカルスレッドグループ数を検索する。一実施形態では、ローカルスレッドグループ数は、ソースコードをコンパイルするためにAPIを使用して指定される。ローカルスレッドグループ数を検索できる場合には、プロセス800の処理ロジックは、ローカルスレッドグループ数が既に指定されていることを検証する。幾つかの実施形態では、ローカルスレッドグループ数は、ホストプロセッサで実行中のアプリケーションからAPI要求を使用して指定される。API要求は、多次元のグローバルスレッド数と、多次元のローカルスレッドグループ数の両方を含む。
ブロック809において、ローカルスレッドグループ数が指定された場合には、プロセス800の処理ロジックは、その指定されたローカルスレッドグループ数に基づき、計算ユニットのためのスレッドグループサイズを指定する。一実施形態では、多次元値(L1、L2、・・・LN)を有するローカルスレッドグループ数に対応するスレッドグループサイズは、N個の整数の積L1*L2*・・・*LNに等しい。異なる計算ユニットに対してコンパイルされた実行可能なコードは、異なるローカルスレッドグループ数が関連付けられる。ローカルスレッドグループ数が実行可能なコードに対して指定された場合には、プロセス800の処理ロジックは、複数の計算ユニットに対する決定された最適なスレッドグループサイズに基づいて、例えば、ブロック803における最適なスレッドグループサイズの決定に基づいて、スレッドグループサイズを指定する。
プロセス800の処理ロジックは、指定されたスレッドグループサイズを、ターゲット計算ユニットに対するランタイム中に許容スレッドグループサイズに対してチェックする。例えば、計算ユニットは、利用可能なリソースに基づき最大ランタイムスレッドグループサイズにより制限される。プロセス800の処理ロジックは、ターゲットとするコンピューティング装置のランタイムリソース制約を満足するように、指定のスレッドグループサイズを調整する。幾つかの実施形態では、プロセス800の処理ロジックは、多次元ローカルスレッドグループ数が指定されなかったときに、ブロック811において、最適なスレッドグループサイズを識別するための決定を遂行する。
ブロック813において、プロセス800の処理ロジックは、データパラレルタスクに対し複数の計算ユニットにおいて同時に実行するようにスレッドグループサイズに基づいて合計スレッド数を区画する。実行可能なコードは、対応するスレッドグループサイズに等しいサイズをもつスレッドのグループとして計算ユニットにおいてパラレルに実行することができる。スレッドのグループのサイズは、グループにおけるスレッドの数である。プロセス800の処理ロジックは、データパラレルタスクを、1つ以上の計算ユニットにわたって同時に実行できる適当な多次元ブロック又はスレッドグループへと分解する。
一実施形態では、実行可能なコードを実行するスレッドは、2つの個別のスレッド変数、即ちグローバルスレッドID(識別子)及びローカルスレッドIDにより識別される。グローバルスレッドIDは、(0、0、・・・0)でスタートしてグローバルスレッド数(G1、G2、・・・GN)に基づき(G1−1、G2−1、・・・GN−1)へと進む多次元値で指定される。同様に、ローカルスレッドIDは、(0、0、・・・0)でスタートしてローカルスレッドグループ数(L1、L2、・・・LN)に基づき(L1−1、L2−1、・・・LN−1)へと進む多次元値で指定される。スレッドに対するグローバルスレッドID及びローカルスレッドIDは、同じ次元の多次元値である。
図9Aは、ソースを記憶するAPIライブラリー、及びそのライブラリー内の1つ以上のAPIに対する複数の実行可能体を複数の物理的コンピューティング装置により構築するプロセス900Aの一実施形態を示すフローチャートである。このプロセス900Aは、ブロック901において、APIファンクションのソースコードをデータ処理システムへロードするためにオフラインで遂行される。ソースコードは、1つ以上の物理的コンピューティング装置において実行されるべき計算カーネルソースである。一実施形態では、プロセス900Aは、ブロック903において、APIファンクションに対して複数のターゲット物理的コンピューティング装置を指定する。ターゲット物理的コンピューティング装置は、CPU又はGPUのような形式、バージョン又はベンダーに基づいて指定される。プロセス900Aは、ブロック905において、指定のターゲット物理的コンピューティング装置ごとに、ソースコードを計算カーネル実行可能体のような実行可能体へとコンパイルする。一実施形態では、プロセス900Aは、図1の計算コンパイラー107のようなオンラインコンパイラーに基づいて、オフラインでコンパイルを遂行する。
ブロック907において、プロセス900Aは、APIファンクションのソースコードを、指定のターゲット物理的コンピューティング装置に対してコンパイルされた対応する実行可能体と共にAPIライブラリーへ記憶する。ホストプロセッサで実行される図1のアプリケーション103のようなホストアプリケーションのソースコードを収容するために、単一の実行可能体に対する1つ以上のAPIファンクションがAPIライブラリーからエクスポートされる。例えば、アプリケーションは、OpenCL APIを通常の“C”ファンクションコールとして使用して実行可能なコード(又は計算カーネル)を実行する。一実施形態では、各実行可能体は、例えば、ターゲット物理的コンピューティング装置の形式、バージョン及びベンダー、及び/又はコンパイルオプションを含む記述データと共に記憶される。この記述データは、ランタイム中に、図5のプロセス500のようなプロセスにより検索される。
図9Bは、API要求に基づいてAPIライブラリーから検索された対応ソースと共に複数の実行可能体の1つを実行するためのアプリケーションに対するプロセス900Bの一実施形態を示すフローチャートである。一実施形態では、このプロセス900Bは、図1の計算アプリケーションライブラリー105のようなAPIライブラリーを含む図1のホストシステム101のようなデータ処理システムにおいて図1のアプリケーション103のようなアプリケーションプログラムを実行する。ブロック911において、プロセス900Bは、計算カーネルソースのようなソース及び計算カーネル実行可能体のような1つ以上の対応する実行可能体を、図5のプロセス500のブロック507のように、API要求に基づいてAPIライブラリーから検索する。各実行可能体は、1つ以上のターゲット物理的コンピューティング装置が関連付けられる。一実施形態では、計算カーネル実行可能体は、物理的コンピューティング装置の複数のバージョンと後方互換性がある。ブロック913において、プロセス900Bは、図5のプロセス500のブロック517のように、関連APIファンクションを遂行するために、複数の物理的コンピューティング装置におけるAPI要求に基づいて検索された実行可能体の1つを実行する。プロセス900Bは、ブロック909においてアプリケーションを非同期で実行し、ブロック913においてAPIファンクションを遂行する。
図10は、複数の物理的コンピューティング装置において実行されるべき計算プログラム実行可能体のための計算プログラムソースコードの一実施例を示すサンプルソースコードである。この実施例1000は、変数1001及びストリーム(又は計算メモリオブジェクト)1003を含む引数を伴うAPIファンクションを表す。この実施例1000は、図1のシステム101のようなパラレル計算環境のためのプログラミング言語に基づく。一実施形態では、パラレルプログラミング言語は、ここに述べる実施形態の1つ以上を具現化するように設計された付加的な拡張及び制約を伴うANSI(アメリカンナショナルスタンダードインスティテュート)C規格に基づいて指定される。拡張は、コンピューティング装置において実行されるべき計算カーネルファンクションを指定するためのクオリファイア1005のようなファンクションクオリファイアを含む。計算カーネルファンクションは、他の計算カーネルファンクションによってコールされない。一実施形態では、計算カーネルファンクションは、パラレルプログラム言語においてホストファンクションによりコールされる。ホストファンクションは、通常のANSIファンクションである。ホストファンクションは、計算カーネルファンクションを実行するコンピューティング装置とは別のホストプロセッサにおいて実行される。一実施形態では、拡張は、スレッドグループの全てのスレッドにより共有されるコンピューティング装置に関連したローカルメモリに割り当てる必要のある変数を記述するためのローカルクオリファイアを含む。このローカルクオリファイアは、計算カーネルファンクションの内部で宣言される。パラレルプログラミング言語の制約は、コンパイラー時間中又はランタイム中に、制約に違反するときに、エラーメッセージを出力するか又は実行から退出するといったエラー条件を発生するように実施される。
図11A−11Cは、APIをコールすることにより複数の物理的コンピューティング装置において複数の実行可能体の1つを実行するための論理的コンピューティング装置を構成する実施例を示すサンプルソースコードである。実施例1100A−1100Cは、図1のホストシステム101のような複数の物理的コンピューティング装置がアタッチされたホストシステムにおいて実行されるアプリケーションによって実行される。実施例1100A−1100Cは、パラレルプログラム言語のホストファンクションを指定する。実施例1100A−1100Cは、における処理オペレーションは、図4のプロセス400及び/又は図5のプロセス500のようなプロセスによりAPIコールとして遂行される。コンピューティング装置、コンピューティング装置グループ又は論理的コンピューティング装置1101からコンテクストオブジェクトを生成する処理オペレーションは、図4のブロック411においてプロセス400の処理ロジックにより遂行される。入力/出力映像メモリオブジェクト(例えば、計算メモリオブジェクト)を割り当てるための処理オペレーションは、図5のブロック501においてプロセス500の処理ロジックにより遂行される。
図11Bを参照するに、アレイメモリオブジェクト1103bを割り当て及びロードするための処理オペレーションは、図5のブロック501においてプロセス500の処理ロジックにより遂行される。計算プログラムオブジェクト1105を生成するための処理オペレーションは、図5のブロック503においてプロセス500の処理ロジックにより遂行される。処理オペレーション1107は、図9の実施例900のような計算プログラムソースを、生成される計算プログラムオブジェクトへロードする。処理オペレーション1109は、ロードされた計算プログラムソースから計算プログラム実行可能体を明確に構築する。一実施形態では、処理オペレーション1109は、既に構築された計算プログラム実行可能体を、生成された計算プログラムオブジェクトへロードする。従って、処理オペレーション1111は、コンピューティング装置での実行をスケジュールするために構築された計算プログラム実行可能体を指す計算カーネルオブジェクトを生成する。
図11Cを参照するに、一実施形態では、処理オペレーション1113は、変数及び計算メモリオブジェクトを、生成された計算カーネルオブジェクトのファンクション引数としてアタッチする。処理オペレーション1113は、図5のブロック505においてプロセス500の処理ロジックにより遂行される。処理オペレーション1115は、生成された計算カーネルオブジェクトを実行する。一実施形態では、処理オペレーション1115は、図5のブロック511においてプロセス500の処理ロジックにより遂行される。処理オペレーション1115は、生成された計算カーネルオブジェクトに対応する計算カーネル実行インスタンスで実行キューを更新させる。処理オペレーション1117は、生成された計算カーネルオブジェクトの実行完了を同期的に待機する。一実施形態では、処理オペレーション1119は、計算カーネルオブジェクトの実行結果を検索する。従って、処理オペレーション1121は、イベントオブジェクト、生成された計算カーネルオブジェクト及び割り当てられたメモリのような計算カーネルオブジェクトを実行するために割り当てられたリソースをクリーンアップする。一実施形態では、処理オペレーション1117は、カーネルイベントオブジェクトがセットされたかどうかに基づいて非同期で遂行される。処理オペレーション1117は、図5のブロック519においてプロセス500により遂行される。
図12は、本発明の一実施形態に使用できるコンピュータシステム1200の一実施例を示す。例えば、このシステム1200は、図1に示すシステムの一部分として実施される。図12は、コンピュータシステムの種々のコンポーネントを示すが、そのような細部は本発明に関係ないのでコンポーネントを相互接続する特定のアーキテクチャー又は仕方を表すものでないことに注意されたい。又、本発明の1つ以上の実施形態を具現化するために、より少数のコンポーネント又はおそらくより多くのコンポーネントを有するネットワークコンピュータ及び他のデータ処理システム(例えば、ハンドヘルドコンピュータ、パーソナルデジタルアシスタント(PDA)、セルラー電話、娯楽システム、消費者向け電子装置、等)も使用できることが明らかである。
図12に示すように、データ処理システムの一形式であるコンピュータシステム1200は、CPU及び/又はGPUのようなマイクロプロセッサ1205、ROM(リードオンリメモリ)1207、揮発性RAM1209、及び不揮発性メモリ1211に結合されたバス1203を備えている。マイクロプロセッサ1205は、メモリ120、1209、1211からインストラクションを検索し、そしてキャッシュ1221を使用してインストラクションを実行して、上述したオペレーションを遂行する。バス1203は、これらの種々のコンポーネントを一緒に相互接続すると共に、これらのコンポーネント1205、1207、1209及び1211を、ディスプレイコントローラ及びディスプレイ装置1213へ、並びにマウス、キーボード、モデム、ネットワークインターフェイス、プリンタである入力/出力(I/O)装置、及びこの技術で良く知られた他の装置のような周辺装置へも相互接続する。典型的に、入力/出力装置915は、入力/出力コントローラ1217を経てシステムに結合される。揮発製RAM(ランダムアクセスメモリ)1209は、典型的に、メモリ内のデータをリフレッシュ又は維持するために電力を常時要求するダイナミックRAM(DRAM)として具現化される。ディスプレイ装置1213に結合されるディスプレイコントローラは、表示データを処理するために1つ以上のGPUを任意に含む。任意であるが、GPUメモリ1219は、ディスプレイ装置1213に含まれたGPUをサポートするために設けられる。
大量記憶装置1211は、典型的に、システムから電力が取り去られた後も、データ(例えば、大量のデータ)を維持する磁気ハードドライブ又は磁気光学ドライブ又は光学ドライブ又はDVD RAM又はフラッシュメモリ又は他の形式のメモリシステムである。又、典型的に、大量記憶装置1211は、ランダムアクセスメモリであるが、これは必要でない。図12は、大量記憶装置1211がデータ処理システムのコンポーネントの残り部分に直結されたローカル装置であることを示しているが、本発明は、システムから離れた不揮発性メモリ、例えば、モデム又はイーサネットインターフェイス又はワイヤレスネットワークインターフェイスのようなネットワークインターフェイスを通してデータ処理システムに結合されたネットワーク記憶装置を利用できることが明らかであろう。バス1203は、この技術で良く知られた種々のブリッジ、コントローラ、及び/又はアダプタを通して互いに接続された1つ以上のバスを含む。
上述した説明の各部分は、専用ロジック回路のようなロジック回路で具現化するか、或いはプログラムコードインストラクションを実行するマイクロコントローラ又は他の形態の処理コアで具現化することができる。従って、前記説明で教示されたプロセスは、インストラクション実行マシンに幾つかのファンクションを遂行させるマシン実行可能なインストラクションのようなプログラムコードで遂行することができる。この状況において、「マシン」とは、中間形態(又は「抽象的」)インストラクションを、プロセッサ特有のインストラクション(例えば、「バーチャルマシン」(例えば、Javaバーチャルマシン)、インタープリター、共通言語ランタイム、高レベル言語バーチャルマシン等の抽象的実行環境)へ、及び/又は汎用プロセッサ及び/又は特殊目的プロセッサのようなインストラクションを実行するように設計された半導体チップ(例えば、トランジスタで実施された「ロジック回路」)に配置された電子回路へ変換するマシンである。又、前記説明で教示されたプロセスは、(マシンとは別に又はマシンとの組み合わせで)プログラムコードを実行せずにプロセス(又はその一部分)を遂行するように設計された電子回路により遂行されてもよい。
例えば、複数のトークンを含むプログラムコードを記憶するための製品が使用される。プログラムコードを記憶する製品は、1つ以上のメモリ(例えば、1つ以上のフラッシュメモリ、ランダムアクセスメモリ(スタティック、ダイナミック、等))、光学ディスク、CD−ROM、DVD ROM、EPROM、EEPROM、磁気又は光学カード、或いは電子的インストラクションを記憶するのに適した他の形式のマシン読み取り可能な媒体として実施されるが、これに限定されない。又、プログラムコードは、伝播媒体で実施されるデータ信号により(例えば、通信リンク(例えば、ネットワーク接続)を使用して)リモートコンピュータ(例えば、サーバー)から要求側コンピュータ(例えば、クライアント)へダウンロードすることもできる。
上述した詳細な説明は、コンピュータメモリ内のデータビットに対するオペレーションのアルゴリズム及び記号表現に関して表現される。これらのアルゴリズムの説明及び表現は、データ処理技術の当業者が、その仕事の実体を他の当業者へ最も効率的に伝達するために使用されるツールである。アルゴリズムは、ここでは、そして一般的には、希望の結果を導くオペレーションの自己矛盾のないシーケンスであると考えられる。これらオペレーションは、物理的量の物理的な操作を必要とする。通常、必ずしもそうでないが、これらの量は、記憶、転送、合成、比較、及びその他、操作することのできる電気的又は磁気的信号の形態をとる。主として普通に使用されるという理由で、これらの信号をビット、値、エレメント、記号、キャラクタ、項、数字、等として参照するのが時々は便利であると分かっている。
しかしながら、これら及び同様の語は、全て、適当な物理量に関連付けられるべきであり、且つそれらの量に適用される便利な表示に過ぎないことを銘記されたい。特に指示のない限り、前記説明から明らかなように、説明全体にわたって、「処理」又は「コンピューティング」又は「計算」又は「決定」又は「表示」等の用語を使用する説明は、コンピュータシステムのレジスタ及びメモリ内の物理的(電子的)量として表されたデータを、コンピュータシステムのメモリ又はレジスタ或いは他のそのような情報記憶、伝達又は表示装置内の物理的量として同様に表された他のデータへと操作及び変換するコンピュータシステム又は同様の電子的コンピューティング装置のアクション及びプロセスを指すことが明らかである。
又、本発明は、ここに述べるオペレーションを遂行するための装置にも係る。この装置は、要求された目的に対して特別に構成されてもよいし、又はコンピュータに記憶されたコンピュータプログラムにより選択的にアクチベート又は再構成される汎用コンピュータを備えてもよい。そのようなコンピュータプログラムは、コンピュータ読み取り可能な記憶媒体、例えば、これに限定されないが、フロッピーディスク、光学的ディスク、CD−ROM、及び磁気/光学ディスクを含む任意の形式のディスク、リードオンリメモリ(ROM)、RAM、EPROM、EEPROM、磁気又は光学カード、或いは電子的インストラクションを記憶するのに適したもので、コンピュータシステムバスに各々結合される任意の形式の媒体、に記憶することができる。
ここに述べたプロセス及び表示は、特定のコンピュータ又は他の装置に固有に関連したものではない。種々の汎用システムを、ここでの教示に基づくプログラムと共に使用することもできるし、又はここに述べるオペレーションを遂行するための特殊な装置を構成するのも便利であることが分かっている。種々のこれらシステムに要求される構造は、以下の説明から明らかとなろう。更に、本発明は、特定のプログラミング言語を参照して説明されるものではない。ここに述べる本発明の教示を具現化するのに種々のプログラム言語を使用できることが明らかであろう。
以上の説明は、本発明の幾つかの規範的な実施形態を説明するに過ぎない。当業者であれば、このような説明、添付図面及び特許請求の範囲から、本発明の精神及び範囲から逸脱せずに種々の変更がなされ得ることがように認識されよう。
100:システム
101:ホストシステム
103:アプリケーション
105:計算アプリケーションライブラリー
107:計算コンパイラー
109:計算ランタイムレイヤ
111:計算プラットホームレイヤ
113:データバス
115:メディアプロセッサ(GPU)
117:中央プロセッサ(CPU)
201:コンピューティング装置
203、205:計算プロセッサ
209:スレッドN
211:プライベートメモリ1
213:スレッド1
215:データキャッシュ
217:コンピューティング装置メモリ
219、221:ローカル共有メモリ
301:ホストCPU
303:アプリケーション
305:プラットホームレイヤ
307:コンピューティング装置識別子
309:論理的コンピューティング装置
1200:コンピュータシステム
1203:バス
1205:マイクロプロセッサ
1207:ROM
1209:揮発性RAM
1211:不揮発性メモリ
1213:ディスプレイ装置
1217:入力/出力コントローラ

Claims (20)

  1. ホストプロセッサと、
    前記ホストプロセッサに結合された1つ以上の計算ユニットと、
    前記ホストプロセッサ及び前記1つ以上の計算ユニットの少なくとも1つに結合されたメモリと、
    を備え、前記メモリには、パラレルコンピューティングプログラムが記憶され、このパラレルコンピューティングプログラムは、前記ホストプロセッサが、
    処理要求に基づいて前記計算ユニットを選択すること、
    データ処理タスクのためのソースコードに対応するプログラムオブジェクトを発生すること、
    前記1つ以上の計算ユニットに対して前記プログラムオブジェクトから実行可能なコードを発生すること、及び
    データ処理タスクを遂行するために前記1つ以上の計算ユニット間で同時に実行されるべき実行可能なコードをロードすること、
    を遂行するために1つ以上のAPI(アプリケーションプログラミングインターフェイス)へのコールを含むものであり、
    前記APIへのコールの少なくとも1つが、前記計算ユニットの選択のための処理要求を特定し、前記プログラムオブジェクトの発生のためのソースコードを特定し、前記実行可能なコードの発生のためのプログラムオブジェクトを特定する
    パラレルコンピューティングシステム。
  2. 前記プログラムオブジェクトは、前記ソースコードからコンパイルされたバイナリーコードを含み、このバイナリーコードは、前記1つ以上の計算ユニットのうちの少なくとも1つについての記述を含み、そして前記1つ以上の計算ユニットは、中央処理ユニット(CPU)又はグラフィック処理ユニット(GPU)を含む、請求項1に記載のシステム。
  3. 前記プログラムオブジェクトを発生することは、予めコンパイルされたライブラリーからバイナリーコードを検索することを含み、そのバイナリーコードは、前記実行可能なコードを含むものである、請求項2に記載のシステム。
  4. 前記実行可能なコードを発生することは、前記1つ以上の計算ユニットのうちの少なくとも1つにおいて前記実行可能なコードの1つを実行するスレッドの数を指定するために多次元値を含む1つ以上のコンパイルフラグに基づいて前記ソースコードを前記バイナリーコードへとコンパイルすることを含む、請求項2に記載のシステム。
  5. 前記実行可能なコードをロードすることは、
    前記ソースコードでデータ処理タスクを具現化するファンクションを識別するファンクション名に関連したカーネルオブジェクトを発生することを含み、そのカーネルオブジェクトは、ファンクションの引数の記憶部を含み、
    更に、前記1つ以上の計算ユニット間で前記実行可能なコードの実行をスケジューリングすることを含み、前記実行は、前記1つ以上の計算ユニットの少なくとも1つにおいて前記実行可能なコードの1つを同時に実行するためのスレッドグループにおけるスレッドの数を含む、請求項1に記載のシステム。
  6. 前記実行可能なコードをロードすることは、更に、前記引数の記憶部に対応するメモリに1つ以上のメモリオブジェクトを割り当てることを含む、請求項5に記載のシステム。
  7. 前記スケジューリングは、前記1つ以上の計算ユニットにおいて前記実行可能なコードをパラレルに実行するためのスレッドの合計数を決定することを含む、請求項5に記載のシステム。
  8. 前記決定することは、前記バイナリーコードを分析して、データ処理タスクを遂行するためのファンクションに対するリソース要求を決定することを含む、請求項7に記載のシステム。
  9. 前記決定することは、更に、前記1つ以上の計算ユニットのうちの少なくとも1つについてのランタイムリソース利用性に基づきスレッドグループにおけるスレッドの数を決定することを含む、請求項8に記載のシステム。
  10. 前記ロードすることは、更に、1つ以上のAPIへの1つ以上のコールに応答してスレッドグループにおけるスレッドの数を検索することを含む、請求項5に記載のシステム。
  11. ホストプロセッサが、
    処理要求に基づいて前記ホストプロセッサに結合された1つ以上の計算ユニットを選択すること、
    データ処理タスクのためのソースコードに対応するプログラムオブジェクトを発生すること、
    前記ホストプロセッサに結合された1つ以上の計算ユニットに対して前記プログラムオブジェクトから実行可能なコードを発生すること、及び
    データ処理タスクを遂行するために前記1つ以上の計算ユニット間で同時に実行されるべき実行可能なコードをロードすること、
    を含む1つ以上のホストファンクションを遂行するための1つ以上のAPI(アプリケーションプログラミングインターフェイス)に対応するホストファンクショントークンと、 前記データ処理タスクのための前記ソースコードに対応するカーネルファンクショントークンと、
    を含み、
    前記処理要求、前記データ処理タスクのためのソースコード及び前記実行可能なコードの発生のためのプログラムオブジェクトが、前記1つ以上のAPIによって特定される、
    複数のトークンを記憶するマシン読み取り可能な記憶媒体。
  12. 前記プログラムオブジェクトは、前記ソースコードからコンパイルされたバイナリーコードを含み、このバイナリーコードは、前記1つ以上の計算ユニットのうちの少なくとも1つについての記述を含む、請求項11に記載のマシン読み取り可能な記憶媒体。
  13. 前記プログラムオブジェクトを発生することは、予めコンパイルされたライブラリーからバイナリーコードを検索することを含み、そのバイナリーコードは、前記実行可能なコードを含むものである、請求項12に記載のマシン読み取り可能な記憶媒体。
  14. 前記実行可能なコードを発生することは、前記1つ以上の計算ユニットのうちの少なくとも1つにおいて前記実行可能なコードの1つを実行するスレッドの数を指定するために多次元値を含む1つ以上のコンパイルフラグに基づき前記ソースコードを前記バイナリーコードへとコンパイルすることを含む、請求項12に記載のマシン読み取り可能な記憶媒体。
  15. 前記実行可能なコードをロードすることは、
    前記ソースコードでデータ処理タスクを具現化するファンクションを識別するファンクション名に関連したカーネルオブジェクトを発生することを含み、そのカーネルオブジェクトは、ファンクションの引数の記憶部を含み、
    更に、前記1つ以上の計算ユニット間で前記実行可能なコードの実行をスケジューリングすることを含み、前記スケジューリングは、前記1つ以上の計算ユニットの少なくとも1つにおいて前記実行可能なコードの1つを同時に実行するためのスレッドグループにおけるスレッドの数を含む、請求項11に記載のマシン読み取り可能な記憶媒体。
  16. 前記実行可能なコードをロードすることは、更に、前記引数の記憶部に対するメモリに1つ以上のメモリオブジェクトを割り当てることを含む、請求項15に記載のマシン読み取り可能な記憶媒体。
  17. 前記スケジューリングは、前記1つ以上の計算ユニットにおいて前記実行可能なコードをパラレルに実行するためのスレッドの合計数を決定することを含む、請求項15に記載のマシン読み取り可能な記憶媒体。
  18. 前記決定することは、前記バイナリーコードを分析して、データ処理タスクを遂行するためのファンクションに対するリソース要求を決定することを含む、請求項17に記載のマシン読み取り可能な記憶媒体。
  19. 前記決定することは、更に、前記1つ以上の計算ユニットのうちの少なくとも1つについてのランタイムリソース利用性に基づきスレッドグループにおけるスレッドの数を決定することを含む、請求項18に記載のマシン読み取り可能な記憶媒体。
  20. 前記スケジュールされた実行が完了したかどうか指示する状態値を含むイベントオブジェクトを発生すること、及び
    前記1つ以上のAPIへの1つ以上のコールに応答して前記スケジュールされた実行に対する状態値を検索すること、
    を更に備えた請求項15に記載のマシン読み取り可能な記憶媒体。
JP2011512491A 2008-06-06 2009-04-20 マルチプロセッサにおけるデータパラレルコンピューティングのためのアプリケーションプログラミングインターフェイス Active JP5232914B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US5973908P 2008-06-06 2008-06-06
US61/059,739 2008-06-06
US12/264,896 2008-11-04
US12/264,896 US8286198B2 (en) 2008-06-06 2008-11-04 Application programming interfaces for data parallel computing on multiple processors
PCT/US2009/041152 WO2009148714A1 (en) 2008-06-06 2009-04-20 Application programming interfaces for data parallel computing on multiple processors

Publications (2)

Publication Number Publication Date
JP2011523141A JP2011523141A (ja) 2011-08-04
JP5232914B2 true JP5232914B2 (ja) 2013-07-10

Family

ID=40720829

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011512491A Active JP5232914B2 (ja) 2008-06-06 2009-04-20 マルチプロセッサにおけるデータパラレルコンピューティングのためのアプリケーションプログラミングインターフェイス

Country Status (6)

Country Link
US (5) US8286198B2 (ja)
EP (1) EP2304563B1 (ja)
JP (1) JP5232914B2 (ja)
KR (1) KR101239025B1 (ja)
CN (2) CN105159761B (ja)
WO (1) WO2009148714A1 (ja)

Families Citing this family (98)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102006033863A1 (de) * 2006-07-21 2008-01-24 Siemens Ag Verschaltungsschnittstelle für flexibles Online/Offline-Deployment einer n-schichtigen Softwareapplikation
US9191625B2 (en) * 2008-09-26 2015-11-17 Janos Redei System and methods for transmitting and distributing media content
US9354944B2 (en) * 2009-07-27 2016-05-31 Advanced Micro Devices, Inc. Mapping processing logic having data-parallel threads across processors
US20110063305A1 (en) * 2009-09-16 2011-03-17 Nvidia Corporation Co-processing techniques on heterogeneous graphics processing units
CN102023844B (zh) * 2009-09-18 2014-04-09 深圳中微电科技有限公司 并行处理器及其线程处理方法
US20110161495A1 (en) * 2009-12-26 2011-06-30 Ralf Ratering Accelerating opencl applications by utilizing a virtual opencl device as interface to compute clouds
KR101613971B1 (ko) * 2009-12-30 2016-04-21 삼성전자주식회사 프로그램 코드의 변환 방법
US9830889B2 (en) 2009-12-31 2017-11-28 Nvidia Corporation Methods and system for artifically and dynamically limiting the display resolution of an application
US8392463B2 (en) * 2010-04-22 2013-03-05 International Business Machines Corporation GPU enabled database systems
US8725913B2 (en) 2010-09-17 2014-05-13 Oracle International Corporation Numa I/O framework
US9489183B2 (en) 2010-10-12 2016-11-08 Microsoft Technology Licensing, Llc Tile communication operator
US9430204B2 (en) 2010-11-19 2016-08-30 Microsoft Technology Licensing, Llc Read-only communication operator
US9507568B2 (en) 2010-12-09 2016-11-29 Microsoft Technology Licensing, Llc Nested communication operator
US8830245B2 (en) * 2010-12-14 2014-09-09 Amazon Technologies, Inc. Load balancing between general purpose processors and graphics processors
US9395957B2 (en) 2010-12-22 2016-07-19 Microsoft Technology Licensing, Llc Agile communication operator
KR101754998B1 (ko) * 2011-01-27 2017-07-06 삼성전자주식회사 멀티 코어 시스템 및 멀티 코어 시스템에서의 데이터 병렬 처리 방법
US20120259843A1 (en) * 2011-04-11 2012-10-11 Timothy Child Database acceleration using gpu and multicore cpu systems and methods
WO2013010318A1 (zh) * 2011-07-19 2013-01-24 天津海润恒通高性能计算系统科技有限公司 一种利用通用处理器进行软件无线电的方法和装置
US8789026B2 (en) * 2011-08-02 2014-07-22 International Business Machines Corporation Technique for compiling and running high-level programs on heterogeneous computers
TWI523144B (zh) * 2011-10-31 2016-02-21 財團法人國家實驗研究院國家晶片系統設計中心 具有履歷電路單元之晶片結構
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
WO2013097098A1 (zh) * 2011-12-27 2013-07-04 华为技术有限公司 数据处理方法、图形处理器gpu及第一节点设备
US9348676B2 (en) * 2012-01-05 2016-05-24 Google Technology Holdings LLC System and method of processing buffers in an OpenCL environment
KR101332839B1 (ko) * 2012-01-05 2013-11-27 서울대학교산학협력단 병렬 컴퓨팅 프레임워크 기반 클러스터 시스템의 호스트 노드 및 메모리 관리 방법
US9424089B2 (en) * 2012-01-24 2016-08-23 Samsung Electronics Co., Ltd. Hardware acceleration of web applications
US9996394B2 (en) * 2012-03-01 2018-06-12 Microsoft Technology Licensing, Llc Scheduling accelerator tasks on accelerators using graphs
KR20130115574A (ko) * 2012-04-12 2013-10-22 삼성전자주식회사 단말기에서 태스크 스케줄링을 수행하는 방법 및 장치
US10599404B1 (en) * 2012-06-01 2020-03-24 Altera Corporation M/A for compiling parallel program having barrier synchronization for programmable hardware
US9830172B2 (en) * 2012-06-30 2017-11-28 Microsoft Technology Licensing, Llc Implementing functional kernels using compiled code modules
WO2014021817A1 (en) * 2012-07-30 2014-02-06 Hewlett-Packard Development Company, L.P. Compilation system for executable objects
KR101893796B1 (ko) 2012-08-16 2018-10-04 삼성전자주식회사 동적 데이터 구성을 위한 방법 및 장치
GB2506595A (en) * 2012-10-02 2014-04-09 Ibm Provisioning systems in parallel based on success rate
TWI482118B (zh) * 2012-10-18 2015-04-21 Wistron Corp 處理圖形運算負載平衡之方法及系統
KR20140054948A (ko) * 2012-10-30 2014-05-09 한국전자통신연구원 임베디드 시스템을 위한 오픈씨엘 응용 소프트웨어 개발 지원 도구 구성 및 방법
US20140259023A1 (en) * 2013-03-07 2014-09-11 Seagate Technology Llc Adaptive vibration mitigation
US9424079B2 (en) 2013-06-27 2016-08-23 Microsoft Technology Licensing, Llc Iteration support in a heterogeneous dataflow engine
KR102213668B1 (ko) 2013-09-06 2021-02-08 삼성전자주식회사 제너럴 퍼포즈 프로그래머블 컴퓨팅 디바이스에서의 멀티미디어 데이터 프로세싱 방법 및 그에 따른 데이터 프로세싱 시스템
US9473545B2 (en) * 2013-09-13 2016-10-18 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Administering group identifiers of processes in a parallel computer
US10200508B2 (en) * 2013-09-17 2019-02-05 Nvidia Corporation System and method for sharing special-purpose processing resources
CN103713902B (zh) * 2013-12-26 2017-10-24 Tcl集团股份有限公司 一种基于Android系统的BOA编译方法和系统
US9632761B2 (en) * 2014-01-13 2017-04-25 Red Hat, Inc. Distribute workload of an application to a graphics processing unit
CN105900065A (zh) * 2014-01-13 2016-08-24 华为技术有限公司 模式处理方法
US9547553B1 (en) 2014-03-10 2017-01-17 Parallel Machines Ltd. Data resiliency in a shared memory pool
US9436972B2 (en) 2014-03-27 2016-09-06 Intel Corporation System coherency in a distributed graphics processor hierarchy
US9781027B1 (en) 2014-04-06 2017-10-03 Parallel Machines Ltd. Systems and methods to communicate with external destinations via a memory network
US9529622B1 (en) 2014-12-09 2016-12-27 Parallel Machines Ltd. Systems and methods for automatic generation of task-splitting code
US9477412B1 (en) 2014-12-09 2016-10-25 Parallel Machines Ltd. Systems and methods for automatically aggregating write requests
US9690713B1 (en) 2014-04-22 2017-06-27 Parallel Machines Ltd. Systems and methods for effectively interacting with a flash memory
US9740464B2 (en) 2014-05-30 2017-08-22 Apple Inc. Unified intermediate representation
US20150348224A1 (en) * 2014-05-30 2015-12-03 Apple Inc. Graphics Pipeline State Object And Model
US10430169B2 (en) 2014-05-30 2019-10-01 Apple Inc. Language, function library, and compiler for graphical and non-graphical computation on a graphical processor unit
US10346941B2 (en) 2014-05-30 2019-07-09 Apple Inc. System and method for unified application programming interface and model
GB2524346B (en) * 2014-09-19 2016-12-21 Imagination Tech Ltd Separating Cores
CN104391747A (zh) * 2014-11-18 2015-03-04 北京锐安科技有限公司 一种并行计算方法及装置
US9781225B1 (en) 2014-12-09 2017-10-03 Parallel Machines Ltd. Systems and methods for cache streams
US9632936B1 (en) 2014-12-09 2017-04-25 Parallel Machines Ltd. Two-tier distributed memory
US9639473B1 (en) 2014-12-09 2017-05-02 Parallel Machines Ltd. Utilizing a cache mechanism by copying a data set from a cache-disabled memory location to a cache-enabled memory location
US9753873B1 (en) 2014-12-09 2017-09-05 Parallel Machines Ltd. Systems and methods for key-value transactions
CN105808342B (zh) * 2014-12-30 2019-12-13 中国电信股份有限公司 用于分配客户请求的方法、判断装置和系统
US10185547B2 (en) * 2015-06-26 2019-01-22 Intel Corporation Techniques for distributed operation of secure controllers
US10249073B2 (en) 2015-07-21 2019-04-02 Intel Corporation Distributed frame buffer and API for scalable parallel rendering
KR102402584B1 (ko) * 2015-08-26 2022-05-27 삼성전자주식회사 사용자 어플리케이션의 특성에 따른 연산 디바이스 동적 제어 기법
CN105159679A (zh) * 2015-09-15 2015-12-16 北京国科世纪激光技术有限公司 视窗类软件的消息响应和处理方法及系统
US9898261B1 (en) 2015-09-30 2018-02-20 Open Text Corporation Method and system for configuring processes of software applications using activity fragments
US9626627B1 (en) * 2016-01-26 2017-04-18 International Business Machines Corporation Predicting API storytelling mapping
US10614370B2 (en) 2016-01-31 2020-04-07 QC Ware Corp. Quantum computing as a service
US10484479B2 (en) 2016-01-31 2019-11-19 QC Ware Corp. Integration of quantum processing devices with distributed computers
KR101858565B1 (ko) 2016-02-19 2018-05-16 서영준 대용량 데이터 처리를 위한 분산 플랫폼 독립적 병렬 처리 방법 및 시스템
CN105786523B (zh) * 2016-03-21 2019-01-11 北京信安世纪科技股份有限公司 数据同步系统及方法
CN106560794A (zh) * 2016-08-08 2017-04-12 柏建民 基于远程智能存储单元的分布式多处理器单元系统
US10565017B2 (en) * 2016-09-23 2020-02-18 Samsung Electronics Co., Ltd. Multi-thread processor and controlling method thereof
KR102592330B1 (ko) * 2016-12-27 2023-10-20 삼성전자주식회사 OpenCL 커널을 처리하는 방법과 이를 수행하는 컴퓨팅 장치
US10541927B2 (en) * 2016-12-29 2020-01-21 Google Llc System and method for hardware-independent RDMA
CN107066378B (zh) * 2017-01-24 2020-12-04 成都皓图智能科技有限责任公司 一种实时在线gpu通用计算模拟及调试方法
US10929294B2 (en) 2017-03-01 2021-02-23 QC Ware Corp. Using caching techniques to improve graph embedding performance
US11353868B2 (en) * 2017-04-24 2022-06-07 Intel Corporation Barriers and synchronization for machine learning at autonomous machines
CN108958796B (zh) * 2017-05-23 2023-08-04 创新先进技术有限公司 业务请求处理方法及装置、业务请求处理系统
US10664943B2 (en) * 2017-06-02 2020-05-26 Apple Inc. Compound shader object and use thereof
US11385930B2 (en) * 2017-06-21 2022-07-12 Citrix Systems, Inc. Automatic workflow-based device switching
US10796240B2 (en) 2017-07-22 2020-10-06 QC Ware Corp. Performing fault tree analysis on quantum computers
CN107678752B (zh) * 2017-08-31 2021-09-21 北京百度网讯科技有限公司 一种面向异构集群的任务处理方法及装置
US11567807B2 (en) * 2018-03-30 2023-01-31 EMC IP Holding Company LLC Allocation of shared computing resources using source code feature extraction and machine learning
US11487573B2 (en) * 2018-05-08 2022-11-01 Thomson Reuters Enterprise Centre Gmbh Systems and method for automating security workflows in a distributed system using encrypted task requests
CN110659278A (zh) * 2018-06-12 2020-01-07 上海郑明现代物流有限公司 基于cpu-gpu异构架构的图数据分布式处理系统
US11436056B2 (en) 2018-07-19 2022-09-06 EMC IP Holding Company LLC Allocation of shared computing resources using source code feature extraction and clustering-based training of machine learning models
JP7141905B2 (ja) * 2018-10-12 2022-09-26 株式会社日立産機システム コントロール装置及びコントロール方法
CN111327921A (zh) * 2018-12-17 2020-06-23 深圳市炜博科技有限公司 视频数据处理方法及设备
CN110032407B (zh) * 2019-03-08 2020-12-22 创新先进技术有限公司 提升cpu并行性能的方法及装置和电子设备
US10884664B2 (en) * 2019-03-14 2021-01-05 Western Digital Technologies, Inc. Executable memory cell
CN110413317B (zh) * 2019-08-02 2023-06-06 四川新网银行股份有限公司 基于配置化的流程接口调用方法
US11567555B2 (en) * 2019-08-30 2023-01-31 Intel Corporation Software assisted power management
WO2021068115A1 (en) 2019-10-08 2021-04-15 Citrix Systems, Inc. Application and device recommendation engine
US20210149719A1 (en) * 2019-11-15 2021-05-20 Nvidia Corporation Techniques for modifying executable graphs to perform different workloads
CN111292223B (zh) * 2020-01-22 2023-07-25 北京百度网讯科技有限公司 图计算的处理方法、装置、电子设备及存储介质
CN111447561B (zh) * 2020-03-16 2023-04-18 阿波罗智联(北京)科技有限公司 车辆的图像处理系统
CN112579215B (zh) * 2020-12-23 2023-12-15 潍柴动力股份有限公司 一种调度函数的生成方法及装置
US11941722B2 (en) * 2021-10-13 2024-03-26 Mellanox Technologies, Ltd. Kernel optimization and delayed execution
US20230305883A1 (en) * 2022-03-22 2023-09-28 Nvidia Corporation Application programming interface to perform selective loading

Family Cites Families (98)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE4129614C2 (de) * 1990-09-07 2002-03-21 Hitachi Ltd System und Verfahren zur Datenverarbeitung
US5301324A (en) 1992-11-19 1994-04-05 International Business Machines Corp. Method and apparatus for dynamic work reassignment among asymmetric, coupled processors
US6179489B1 (en) 1997-04-04 2001-01-30 Texas Instruments Incorporated Devices, methods, systems and software products for coordination of computer main microprocessor and second microprocessor coupled thereto
US5946487A (en) 1996-06-10 1999-08-31 Lsi Logic Corporation Object-oriented multi-media architecture
US6513057B1 (en) * 1996-10-28 2003-01-28 Unisys Corporation Heterogeneous symmetric multi-processing system
US6115550A (en) 1997-06-11 2000-09-05 Digital Equipment Corporation Loader conditionally replacing a code sequence with a functionally-alike code sequence in an executable program intended for execution in different run-time environments
AU2468899A (en) * 1998-01-26 1999-08-23 Unif/X Inc. A transaction execution system interface and enterprise system architecture thereof
US6425017B1 (en) * 1998-08-17 2002-07-23 Microsoft Corporation Queued method invocations on distributed component applications
JP3633404B2 (ja) * 1999-11-04 2005-03-30 日本電気株式会社 メモリ割り付け最適化システム、方法、及び記録媒体
JP2001147819A (ja) * 1999-11-19 2001-05-29 Fujitsu Ltd 最適化装置および記録媒体
US6986128B2 (en) 2000-01-07 2006-01-10 Sony Computer Entertainment Inc. Multiple stage program recompiler and method
US7159041B2 (en) 2000-03-07 2007-01-02 Microsoft Corporation Method and system for defining and controlling algorithmic elements in a graphics display system
US6588008B1 (en) 2000-04-11 2003-07-01 International Business Machines Corporation Assembler tool for processor-coprocessor computer systems
US6970206B1 (en) * 2000-04-20 2005-11-29 Ati International Srl Method for deinterlacing interlaced video by a graphics processor
US20030154284A1 (en) * 2000-05-31 2003-08-14 James Bernardin Distributed data propagator
US6768901B1 (en) 2000-06-02 2004-07-27 General Dynamics Decision Systems, Inc. Dynamic hardware resource manager for software-defined communications system
US7137124B2 (en) * 2001-10-05 2006-11-14 International Business Machines Corporation Storage area network methods and apparatus for storage device masking
US7234144B2 (en) * 2002-01-04 2007-06-19 Microsoft Corporation Methods and system for managing computational resources of a coprocessor in a computing system
US6919896B2 (en) 2002-03-11 2005-07-19 Sony Computer Entertainment Inc. System and method of optimizing graphics processing
US20040068716A1 (en) 2002-10-04 2004-04-08 Quicksilver Technology, Inc. Retargetable compiler for multiple and different hardware platforms
CN100557550C (zh) * 2002-10-16 2009-11-04 鲍志超 计算机通用关联应用处理器
US7406699B2 (en) * 2003-04-02 2008-07-29 Microsoft Corporation Enhanced runtime hosting
US7181382B2 (en) * 2003-05-08 2007-02-20 Microsoft Corporation System and method for testing, simulating, and controlling computer software and hardware
US7015913B1 (en) * 2003-06-27 2006-03-21 Nvidia Corporation Method and apparatus for multithreaded processing of data in a programmable graphics processor
US6862027B2 (en) 2003-06-30 2005-03-01 Microsoft Corp. System and method for parallel execution of data generation tasks
US7546553B2 (en) 2003-07-28 2009-06-09 Sap Ag Grid landscape component
US7272730B1 (en) 2003-07-31 2007-09-18 Hewlett-Packard Development Company, L.P. Application-driven method and apparatus for limiting power consumption in a processor-controlled hardware platform
US7389508B2 (en) 2003-09-25 2008-06-17 International Business Machines Corporation System and method for grouping processors and assigning shared memory space to a group in heterogeneous computer environment
US7068284B2 (en) 2003-11-10 2006-06-27 Microsoft Corporation Color management system that supports legacy and advanced color management applications
US8035646B2 (en) 2003-11-14 2011-10-11 Microsoft Corporation Systems and methods for downloading algorithmic elements to a coprocessor and corresponding techniques
US20050132239A1 (en) 2003-12-16 2005-06-16 Athas William C. Almost-symmetric multiprocessor that supports high-performance and energy-efficient execution
FR2865047B1 (fr) * 2004-01-14 2006-04-07 Commissariat Energie Atomique Systeme de generation automatique de codes optimises
US7472391B2 (en) 2004-02-20 2008-12-30 Microsoft Corporation Resource loader for applications that utilize relative uniform resource identifiers
US7847800B2 (en) 2004-04-16 2010-12-07 Apple Inc. System for emulating graphics operations
US7725643B1 (en) 2004-05-04 2010-05-25 Oracle America, Inc. Methods and systems for detecting and avoiding an address dependency between tasks
US20060048157A1 (en) 2004-05-18 2006-03-02 International Business Machines Corporation Dynamic grid job distribution from any resource within a grid environment
US7426724B2 (en) 2004-07-02 2008-09-16 Nvidia Corporation Optimized chaining of vertex and fragment programs
US7868891B2 (en) 2004-09-16 2011-01-11 Nvidia Corporation Load balancing
US20060069909A1 (en) 2004-09-23 2006-03-30 Roth Steven T Kernel registry write operations
US7603546B2 (en) 2004-09-28 2009-10-13 Intel Corporation System, method and apparatus for dependency chain processing
US7598953B2 (en) 2004-11-05 2009-10-06 Microsoft Corporation Interpreter for simplified programming of graphics processor units in general purpose programming languages
US7800620B2 (en) 2004-11-05 2010-09-21 Microsoft Corporation Optimizing automated shader program construction
US7733347B2 (en) 2004-11-05 2010-06-08 Microsoft Corporation Automated construction of shader programs
US20070208956A1 (en) * 2004-11-19 2007-09-06 Motorola, Inc. Energy efficient inter-processor management method and system
US20060132489A1 (en) 2004-12-21 2006-06-22 Hewlett-Packard Development Company, L.P. Remote computing
JP4367337B2 (ja) * 2004-12-28 2009-11-18 セイコーエプソン株式会社 マルチメディア処理システム及びマルチメディア処理方法
US7665143B2 (en) * 2005-05-16 2010-02-16 Microsoft Corporation Creating secure process objects
JP2006350686A (ja) * 2005-06-16 2006-12-28 Seiko Epson Corp 命令セット・シミュレータ生成装置及びシミュレータ生成方法
WO2006138706A2 (en) 2005-06-17 2006-12-28 Computer Associates Think, Inc. System and method for identifying application resources
US7353369B1 (en) * 2005-07-13 2008-04-01 Nvidia Corporation System and method for managing divergent threads in a SIMD architecture
US20070033592A1 (en) 2005-08-04 2007-02-08 International Business Machines Corporation Method, apparatus, and computer program product for adaptive process dispatch in a computer system having a plurality of processors
US7856618B2 (en) 2005-08-04 2010-12-21 International Business Machines Corporation Adaptively generating code for a computer program
US7463268B2 (en) 2005-09-15 2008-12-09 Microsoft Corporation Providing 3D graphics across partitions of computing device
TWI348652B (en) 2005-10-17 2011-09-11 Via Tech Inc Driver assisted asynchronous command processing
KR100713505B1 (ko) 2005-10-24 2007-04-30 삼성전자주식회사 디지털 방송 수신 단말기의 선호 채널 공유 방법
US7330962B2 (en) 2005-11-14 2008-02-12 Nvidia Corporation Dynamic instruction sequence selection during scheduling
US7788468B1 (en) * 2005-12-15 2010-08-31 Nvidia Corporation Synchronization of threads in a cooperative thread array
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
US7958509B2 (en) 2005-12-21 2011-06-07 International Business Machines Corporation Method and system for scheduling of jobs
US9038040B2 (en) * 2006-01-25 2015-05-19 International Business Machines Corporation Method for partitioning programs between a general purpose core and one or more accelerators
US7441224B2 (en) * 2006-03-09 2008-10-21 Motorola, Inc. Streaming kernel selection for reconfigurable processor
JP4784827B2 (ja) * 2006-06-06 2011-10-05 学校法人早稲田大学 ヘテロジニアスマルチプロセッサ向けグローバルコンパイラ
US20070294693A1 (en) 2006-06-16 2007-12-20 Microsoft Corporation Scheduling thread execution among a plurality of processors based on evaluation of memory access data
US8549499B1 (en) * 2006-06-16 2013-10-01 University Of Rochester Parallel programming using possible parallel regions and its language profiling compiler, run-time system and debugging support
WO2007149884A2 (en) 2006-06-20 2007-12-27 Google, Inc. A multi-thread high performance computing system
US8136102B2 (en) 2006-06-20 2012-03-13 Google Inc. Systems and methods for compiling an application for a parallel-processing computer system
US7814486B2 (en) 2006-06-20 2010-10-12 Google Inc. Multi-thread runtime system
US8375368B2 (en) 2006-06-20 2013-02-12 Google Inc. Systems and methods for profiling an application running on a parallel-processing computer system
US8108844B2 (en) 2006-06-20 2012-01-31 Google Inc. Systems and methods for dynamically choosing a processing element for a compute kernel
US8146066B2 (en) 2006-06-20 2012-03-27 Google Inc. Systems and methods for caching compute kernels for an application running on a parallel-processing computer system
US8756264B2 (en) 2006-06-20 2014-06-17 Google Inc. Parallel pseudorandom number generation
US8443348B2 (en) 2006-06-20 2013-05-14 Google Inc. Application program interface of a parallel-processing computer system that supports multiple programming languages
US8136104B2 (en) 2006-06-20 2012-03-13 Google Inc. Systems and methods for determining compute kernels for an application in a parallel-processing computer system
CN100377042C (zh) 2006-07-04 2008-03-26 浙江大学 结合静态编译器和动态调频技术优化运行频率的节能方法
US8116207B2 (en) * 2006-08-21 2012-02-14 Citrix Systems, Inc. Systems and methods for weighted monitoring of network services
US7750913B1 (en) 2006-10-24 2010-07-06 Adobe Systems Incorporated System and method for implementing graphics processing unit shader programs using snippets
US20080109795A1 (en) 2006-11-02 2008-05-08 Nvidia Corporation C/c++ language extensions for general-purpose graphics processing unit
JP4785710B2 (ja) * 2006-11-14 2011-10-05 富士通株式会社 資源に対する重要度算出方法及び装置
US8370818B2 (en) * 2006-12-02 2013-02-05 Time Warner Cable Inc. Methods and apparatus for analyzing software interface usage
US7969444B1 (en) 2006-12-12 2011-06-28 Nvidia Corporation Distributed rendering of texture data
US8719807B2 (en) * 2006-12-28 2014-05-06 Intel Corporation Handling precompiled binaries in a hardware accelerated software transactional memory system
US8321849B2 (en) * 2007-01-26 2012-11-27 Nvidia Corporation Virtual architecture and instruction set for parallel thread computing
US7925900B2 (en) 2007-01-26 2011-04-12 Microsoft Corporation I/O co-processor coupled hybrid computing device
US7975001B1 (en) 2007-02-14 2011-07-05 The Mathworks, Inc. Bi-directional communication in a parallel processing environment
US8010954B2 (en) * 2007-02-14 2011-08-30 The Mathworks, Inc. Parallel programming interface to dynamically allocate program portions
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
US7685409B2 (en) 2007-02-21 2010-03-23 Qualcomm Incorporated On-demand multi-thread multimedia processor
JP2008226181A (ja) * 2007-03-15 2008-09-25 Fujitsu Ltd 並列実行プログラム、該プログラムを記録した記録媒体、並列実行装置および並列実行方法
US8276164B2 (en) 2007-05-03 2012-09-25 Apple Inc. Data parallel computing on multiple processors
US8108633B2 (en) 2007-04-11 2012-01-31 Apple Inc. Shared stream memory on multiple processors
US8341611B2 (en) 2007-04-11 2012-12-25 Apple Inc. Application interface on multiple processors
WO2008127622A2 (en) 2007-04-11 2008-10-23 Apple Inc. Data parallel computing on multiple processors
US8286196B2 (en) 2007-05-03 2012-10-09 Apple Inc. Parallel runtime execution on multiple processors
US7941791B2 (en) * 2007-04-13 2011-05-10 Perry Wang Programming environment for heterogeneous processor resource integration
US8996846B2 (en) * 2007-09-27 2015-03-31 Nvidia Corporation System, method and computer program product for performing a scan operation
US20090158299A1 (en) * 2007-10-31 2009-06-18 Carter Ernst B System for and method of uniform synchronization between multiple kernels running on single computer systems with multiple CPUs installed
US8074087B2 (en) * 2008-06-24 2011-12-06 Microsoft Corporation Configuring processors and loads for power management
US8286172B2 (en) * 2008-10-02 2012-10-09 Nec Laboratories America, Inc. Systems and methods for implementing best-effort parallel computing frameworks

Also Published As

Publication number Publication date
CN105159761A (zh) 2015-12-16
EP2304563B1 (en) 2020-05-06
US20130081066A1 (en) 2013-03-28
US20170075730A1 (en) 2017-03-16
EP2304563A1 (en) 2011-04-06
US8806513B2 (en) 2014-08-12
US20160188371A1 (en) 2016-06-30
KR20110019775A (ko) 2011-02-28
CN102099788B (zh) 2015-05-13
US10067797B2 (en) 2018-09-04
US20090307699A1 (en) 2009-12-10
US8286198B2 (en) 2012-10-09
WO2009148714A1 (en) 2009-12-10
CN102099788A (zh) 2011-06-15
KR101239025B1 (ko) 2013-03-04
JP2011523141A (ja) 2011-08-04
US20140237457A1 (en) 2014-08-21
CN105159761B (zh) 2019-01-15
US9250697B2 (en) 2016-02-02
US9477525B2 (en) 2016-10-25

Similar Documents

Publication Publication Date Title
JP5232914B2 (ja) マルチプロセッサにおけるデータパラレルコンピューティングのためのアプリケーションプログラミングインターフェイス
JP5227454B2 (ja) マルチプロセッサのための多次元スレッドグループ化
US11237876B2 (en) Data parallel computing on multiple processors
US10552226B2 (en) Data parallel computing on multiple processors
US9766938B2 (en) Application interface on multiple processors
US9471401B2 (en) Parallel runtime execution on multiple processors
US20080276064A1 (en) Shared stream memory on multiple processors
AU2018226440B2 (en) Data parallel computing on multiple processors
AU2016203532A1 (en) Parallel runtime execution on multiple processors

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110114

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20121022

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121101

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130129

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130325

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

Free format text: PAYMENT UNTIL: 20160329

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 5232914

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250