JP5957006B2 - 拡張可能なデータ並列セマンティクス - Google Patents

拡張可能なデータ並列セマンティクス Download PDF

Info

Publication number
JP5957006B2
JP5957006B2 JP2013546453A JP2013546453A JP5957006B2 JP 5957006 B2 JP5957006 B2 JP 5957006B2 JP 2013546453 A JP2013546453 A JP 2013546453A JP 2013546453 A JP2013546453 A JP 2013546453A JP 5957006 B2 JP5957006 B2 JP 5957006B2
Authority
JP
Japan
Prior art keywords
data parallel
function
level
computer
resource
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
JP2013546453A
Other languages
English (en)
Other versions
JP2014501412A5 (ja
JP2014501412A (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.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2014501412A publication Critical patent/JP2014501412A/ja
Publication of JP2014501412A5 publication Critical patent/JP2014501412A5/ja
Application granted granted Critical
Publication of JP5957006B2 publication Critical patent/JP5957006B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/314Parallel programming languages

Description

本発明は、拡張可能なデータ並列セマンティクスに関する。
コンピュータシステムに多くの場合に含まれるものには、1つまたは複数の汎用プロセッサ(例えば、CPU(central processing unit))、および、1つまたは複数の専用データ並列計算ノード(例えば、GPU(graphics processing unit)、またはCPU内のSIMD(single instruction,multiple data)実行ユニット)がある。汎用プロセッサは、概してコンピュータシステム上で汎用の処理を実施し、データ並列計算ノードは、概してコンピュータシステム上でデータ並列処理(例えば、グラフック処理)を実施する。汎用プロセッサは、データ並列アルゴリズムを実装する能力を有するが、データ並列計算ノード内に最適化されたハードウェアリソースが見つからない状態で行うことが多い。その結果、汎用プロセッサは、データ並列アルゴリズムの実行においてデータ並列計算ノードよりはるかに非効率的になってしまう。
データ並列計算ノードは、従来、コンピュータシステム上でプログラム実行時に汎用プロセッサに対するサポートの役割を担ってきた。データ並列アルゴリズム用に最適化されたハードウェアの役割がデータ並列計算ノードの処理能力の増大により高まるのに連れて、データ並列計算ノードをプログラミングするプログラマの能力が向上し、データ並列計算ノードのプログラミングが容易になることが望ましい。しかし、データ並列アルゴリズムは典型的には、汎用プログラミング言語とは異なるセマンティック(意味的)制限を有するデータ並列言語を用いてプログラミングされる。
この概要は、以下の「発明を実施するための形態」でさらに述べる概念を選択して簡略化した形式で紹介するために提供するものである。この要約は、特許請求の主題の重要な特徴または主要な特徴を特定することを意図しておらず、特許請求の主題の範囲を制限するものとして使用されることも意図していない。
高レベルのプログラミング言語により、拡張可能なデータ並列セマンティクスを提供する。ユーザコードは、計算デバイスオブジェクトおよびリソースビューオブジェクトを使用してデータ並列コードを実行するためのハードウェアおよびソフトウェアのリソースを指定する。ユーザコードは、オブジェクトおよびセマンティックメタデータを使用して、新しいおよび/または更新された型の計算ノード、ならびに新しいおよび/または更新された型のランタイムライブラリによる実行を可能にする。拡張可能なデータ並列セマンティクスにより、ユーザコードを新しいおよび/または更新された型の計算ノードおよびランタイムライブラリにより実行することが可能となる。
添付の図面は、実施形態のさらなる理解を提供するために含まれ、また、本明細書に組み込まれかつその一部を構成する。図面は実施形態を例示し、また、記載と共に実施形態の原理の説明に役立つ。他の実施形態および実施形態の意図される利点の多くが、以下の詳細説明を参照することにより、より良く理解されて、容易に認められるであろう。図面の要素は必ずしもお互いに相対して縮尺されていない。同様の参照番号は対応する同様の部分を示す。
拡張可能なデータ並列セマンティクスを用いたランタイム環境の一実施形態を例示するブロック図である。 拡張可能なデータ並列セマンティクスを実装するコードの一実施形態を例示するコンピュータコードの図である。 拡張可能なデータ並列セマンティクスを実装するランタイム環境におけるランタイムライブラリの実施形態を例示するブロック図である。 拡張可能なデータ並列セマンティクスを実装するランタイム環境におけるランタイムライブラリの実施形態を例示するブロック図である。 拡張可能なデータ並列セマンティクスを実装するランタイム環境におけるランタイムライブラリの実施形態を例示するブロック図である。 拡張可能なデータ並列セマンティクスをサポートするデータ構造の実施形態を例示するブロック図である。 拡張可能なデータ並列セマンティクスをサポートするデータ構造の実施形態を例示するブロック図である。 拡張可能なデータ並列セマンティクスを用いてデータ並列コードをコンパイルかつ実行するべく構成されるコンピュータシステムの一実施形態を例示するブロック図である。
以下の「発明を実施するための形態」において、添付の図面を参照するが、該図面はその一部を成し、本発明を実践できる特定の実施形態を例として示すものである。この点に関して、方向性を表す用語である「上部」、「底部」、「表」、「裏」、「前」、「後」などを、記載されている図面の向きに関連して使用している。実施形態の構成要素は多数の異なる向きで位置付けることが可能であるため、方向を表す用語は例示目的で使用し、制限のために使用するものではない。他の実施形態を利用してよく、また、構造または論理の変更を本発明の範囲から逸脱することなく加えてよいことは、理解されるべきである。従って、以下の詳細説明は、制限する意味でとらえられるべきではなく、本発明の範囲は、添付の請求項により定義するものである。別段言及しない限り、本明細書に記載する種々の例示の実施形態の特徴をお互いに組み合わせてよいことは、理解されるべきである。
図1は、図5に示すコンピュータシステム100などのコンピュータシステムにおける拡張可能なデータ並列セマンティクスを用いたランタイム環境2の一実施形態を例示するブロック図である。ランタイム環境2は、コンピュータシステムにおけるランタイムモードの動作を表すもので、該コンピュータシステムは、1つまたは複数の計算ノード121上でユーザコード10および1つまたは複数のランタイムライブラリ20の組からの命令を実行している(図5にも示し、以下でさらに詳細に説明する)。
コード10には、1つまたは複数の計算ノード121による実行用の1つまたは複数の実行ファイル(例えば、図5に示すDP実行ファイル138)にコンパイルすることができる高レベルの汎用またはデータ並列のプログラミング言語からの一連の命令が含まれる。コード10は、1つまたは複数のランタイムライブラリ20と連動して実行され、この場合ランタイムライブラリ20には、データ並列関数を提供するデータ並列API(アプリケーションプログラミングインターフェース)が含まれる。
コード10は、ランタイムライブラリ20から計算デバイスオブジェクト12を生成させて、コード10の少なくとも一部を実行するための計算ノード121を指定し、また、ランタイムライブラリ20からリソースビューオブジェクト14を生成させて、コード10の実行時に使用されるランタイムライブラリ20を指定する。計算デバイスオブジェクト12は、デバイスレベル(すなわち、計算ノード121の1つの型)を指定するハードウェアのアブストラクションを形成する。リソースビューオブジェクト14は、計算デバイスオブジェクト12が指定するハードウェアをどのように使用するかについて記述するリソースレベルを指定する。リソースビューオブジェクト14は、例えば、異なるDirectXの実装(例えば、DirectX11、DirectX11.1、DirectX12、およびDirectX13)またはSSE/AVXの実装を、ネイティブコード生成、またはWARP(DirectXのソフトウェアエミュレータ)を用いて記述することができる。リソースビューオブジェクト14にはまた、メモリ管理およびカーネル実行のサービスを含んでよい。計算デバイスオブジェクト12およびリソースビューオブジェクト14を、関連するセマンティックメタデータと共に使用することにより、コード10の下層のプログラミング言語のセマンティックな変更を扱う拡張可能なデータ並列セマンティクスを提供する。拡張可能なデータ並列セマンティクスにより、コード10を、新しいおよび/または更新された型の計算ノード121、ならびに新しいおよび/または更新された型のランタイムライブラリ20を用いて実行することが可能となる。その結果、特定の型の計算ノード121を用いた使用向けに設計されていたコード10の構造を、新しいおよび/または更新された型の計算ノード121により実行することができる。
一実施形態において、コード10には、1つまたは複数のモジュールのセット内に記憶させるプログラムを形成する、データ並列拡張を有する高レベルの汎用プログラミング言語(以後、GP言語)からの一連の命令が含まれる。GP言語により、プログラムを異なる部分(すなわち、モジュール)に記述することが可能となり、そのため、各モジュールをコンピュータシステムがアクセス可能な別々のファイルまたは場所に記憶することができる。GP言語により、1つまたは複数の汎用プロセッサおよび1つまたは複数の専用のDP最適計算ノードを含むコンピュータ環境をプログラミングするための単一の言語を提供する。DP最適計算ノードは典型的には、GPU(graphic processing unit)または汎用プロセッサのSIMDユニットであるが、いくつかのコンピュータ環境においては、汎用プロセッサのスカラまたはベクトルの実行ユニット、FPGA(field programmable gate array)、または他の適切なデバイスを含んでもよい。GP言語を使用して、プログラマは、汎用プロセッサおよびDPソースコードの両方を、それぞれ汎用プロセッサおよびDP計算ノードによる実行用にコード10に含めることができ、また、汎用プロセッサおよびDPソースコードの実行を調和させることができる。コード10は、本実施形態においては、アプリケーション、ライブラリ関数、またはオペレーティングシステムサービスなどの任意の適切な型のコードを表してよい。
GP言語は、データ並列の特徴を含むべく、CまたはC++などの広く適応した高レベルの汎用プログラミング言語を拡張することにより形成してよい。DPの特徴が現れる汎用言語の他の例には、Java(登録商標)、PHP、Visual Basic、Perl、Python(商標)、C#、Ruby、Delphi、Fortran、VB、F#、OCaml、Haskell、Erlang、NESL、Chapel、およびJavaScript(登録商標)が含まれる。GP言語の実装には、プログラムの異なる部分を異なるモジュールに含めることが可能な豊富なリンク機能を含んでよい。データ並列の特徴により、DP最適計算ノードの専用アーキテクチャの利点を生かしてデータ並列操作を汎用プロセッサ(すなわち、非DP最適計算ノード)で行うよりも速くまたはより効率的に実行することを可能にするプログラミングツールを提供する。GP言語はまた、プログラマが汎用プロセッサおよびDP最適計算ノードの両方についてプログラミングすることを可能にする別の適切な高レベルの汎用プログラミング言語であってよい。
別の実施形態において、コード10には、プログラムを形成する高レベルのデータ並列プログラミング言語(以後、DP言語)からの一連の命令が含まれる。DP言語により、1つまたは複数のDP最適計算ノードを有するコンピュータ環境においてDP最適計算ノードをプログラミングするための専用言語を提供する。DP言語を使用して、プログラマは、DP最適計算ノード上での実行が意図されるDPソースコードをコード10内に生成する。DP言語により、DP最適計算ノードの専用アーキテクチャの利点を生かしてデータ並列操作を汎用プロセッサで行うよりも速くまたはより効率的に実行することを可能にするプログラミングツールを提供する。DP言語は、既存のDPプログラミング言語であってよく、例えば、HLSL、GLSL、Cg、C、C++、NESL、Chapel、CUDA、OpenCL、Accelerator、Ct、PGI GPGPU Accelerator、CAPS GPGPU Accelerator、Brook+、CAL、APL、Fortran90(後継を含む)、Data Parallel C、DAPPLE、またはAPLである。コード10は、本実施形態においては、アプリケーション、ライブラリ関数、またはオペレーティングシステムサービスなどの任意の適切な型のDPソースコードを表してよい。
コード10には、DP最適計算ノード121上での実行用に指定されるコード部分が含まれる。DP最適計算ノード121は、データ並列計算(すなわち、DPプログラムまたはアルゴリズムの実行)用に最適化されるハードウェアアーキテクチャを伴う1つまたは複数の計算リソースを有する。図2に示す一実施形態において、コード10がGP言語で記述されており、GP言語により、プログラマが、ベクトル関数を定義する際にアノテーション29(例えば、rl_annote)を使用してDPソースコードを指定することが可能となる。アノテーション29は、DP最適計算ノード上での実行が意図されるベクトル関数の関数名27(例えば、vector_func)に関連付けされる。コード10にはまた、ベクトル関数の1つまたは複数の呼び出し28(例えば、forall...,vector_func,...)を呼び出しサイト(例えば、forall、reduce、scan、またはsort)において含んでよい。呼び出しサイトに対応するベクトル関数をカーネル関数と称する。カーネル関数は、他のベクトル関数をコード10(すなわち、他のDPソースコード)に呼び出してよく、また、カーネル関数をベクトル関数呼び出しグラフのルートと見なしてよい。カーネル関数はまた、コード10により定義される型(例えば、クラスまたは構造体)を使用することもできる。型はDPソースコードとして注釈付けされてもされなくてもよい。他の実施形態において、他の適切なプログラミング言語構造を使用して、DPソースコードおよび/または汎用プロセッサコードとして、コード10の部分を指定してもよい。加えて、アノテーション29は、コード10がDP言語で記述される実施形態においては省略してもよい。
アノテーション29は、ベクトル関数についてリソースレベルのセマンティクスを指定する。アノテーション29により、計算デバイスオブジェクト12およびリソースビューオブジェクト14において反映されるように、コンパイラがベクトル関数のセマンティック状態がセマンティクスおよび対象の計算ノード121の他の特性との互換性を確実に持つことが可能となる。セマンティック制限が時と共に緩和されるにつれて、より新しい計算ノード121ほどセマンティック制限が少なくなり、高レベルのセマンティック制限を示すより古いアノテーション29を有するベクトル関数を実行することができる。
ランタイムライブラリ20には、タスク並列および/またはデータ並列(DP)の実行能力を提供する任意の適切な型および/または数のライブラリが含まれる。例えば、ランタイムライブラリ20には、一実施形態において、DirectXランタイムライブラリ、および、並列パターンライブラリ(PPL)を有する同時実行ランタイムライブラリを含んでよい。ランタイムライブラリ20は、API(appplication programming interface)、または、タスク並列および/またはデータ並列の能力と共に関数を与える他の適切なプログラミング構造を提供する。
図3Aから3Cは、それぞれ、図1に示すランタイム環境2において使用するためのランタイムライブラリ20の実施形態20(l)から20(3)を例示する。図3Aの実施形態において、ランタイムライブラリ20(1)には、計算デバイス関数42、リソースビュー関数43、データ並列(DP)関数44、および、呼び出しサイトアブストラクション関数46が含まれる。
計算デバイス関数42は、ユーザコード10が供給するパラメータに従って計算デバイスオブジェクト12(図1に示す)を作成する。特に、ユーザコード10は、計算デバイスオブジェクト12を作成するために、少なくともコード10の一部を実行するための計算ノードの型を指定するデバイスレベル(例えば、device_level)を渡す。計算デバイス関数42は、一実施形態において、図4Aのデータ構造に示されるデバイスレベル(すなわち、none、custom、GPU、WARP、REF、NATIVE、SSE、AVX、およびLRB)を認識する。従って、ユーザコード10は、本実施形態においてこれらのデバイスレベルの内の1つを渡すことができる。
リソースビュー関数43は、ユーザコード10が供給するパラメータに従って、リソースビューオブジェクト14(図1に示す)を作成する。特に、ユーザコード10は、計算デバイスオブジェクト12が指定するハードウェアをどのように使用するかについて記述するリソースレベル(例えば、resource_level)を渡す。リソースビュー関数43は、一実施形態において、図4Bのデータ構造に示されるリソースレベル(すなわち、none、NATIVE、CUSTOM、DX11、DX11.1、およびDX12)を認識する。従って、ユーザコード10は、本実施形態において、これらのリソースレベルの内の1つを渡すことができる。
ユーザコード10のデバイスレベルおよびリソースレベルは、ユーザコード10が満たす必要があるセマンティック制限のレベルを示す。これらのセマンティック制限は、新しいおよび更新された計算ノード121およびランタイムライブラリ20がユーザコード10の実行に使用されるため、時と共に減少すると推測される。従って、計算ノード121およびランタイムライブラリ20が、ユーザコード10のデバイスレベルおよびリソースレベルと同じまたはより少ないセマンティック制限を有する場合に、計算ノード121およびランタイムライブラリ20は、ユーザコード10を実行することが可能である。
一実施形態において、ユーザコード10は、GPUのデバイスレベルを用いて計算デバイスオブジェクト12を作成し、DX11のリソースレベルを用いてリソースビューオブジェクト14を作成する。ユーザコード10にはまた、DX11を示すアノテーション29を有する少なくとも1つのベクトル関数が含まれる。GPUのデバイスレベルは、ユーザコード10の少なくとも一部が、GPU上での実行用に記述されることを示し、DX11のリソースレベルは、ユーザコード10の少なくとも一部が、DirectX11を含むまたはサポートするランタイムライブラリ20を用いた実行用に記述されることを示す。従って、ベクトル関数(複数可)は、DirectX11のセマンティック制限と一致し、GPU上でDirectX11を用いて実行してよい。リソースビューオブジェクト14が、DX11ではなくDX12のリソースレベルを有する場合(すなわち、ユーザコード10が、DirectX12を含むまたはサポートするランタイムライブラリ20を用いた実行用に記述される)、ベクトル関数(複数可)のアノテーション29(複数可)は、DX11、DX11.1、またはDX12であってよく、何故ならDirectX12にはDirectX11およびDirectX11.1より少ないセマンティック制限しか含まれていないためである。
別の実施形態において、ユーザコード10は、WARPのデバイスレベルを用いて計算デバイスオブジェクト12を作成し、DX11またはDX12のリソースレベルを用いてリソースビューオブジェクト14を作成する。ユーザコード10にはまた、リソースレベルがDX11またはDX11、DX11.1である場合にDX11を示し、リソースレベルがDX12である場合にDX12を示すアノテーション29を有する少なくとも1つのベクトル関数が含まれる。WARPのデバイスレベルは、ユーザコード10の少なくとも一部がSSE、AVX、またはLRBniが可能なDirectXシミュレータによる実行用に記述されること示し、DX11またはDX12のリソースレベルは、ユーザコード10の少なくとも一部が、DirectX11またはDirectX12を含むまたはサポートするランタイムライブラリ20を用いる実行用に記述されることを示す。従って、DirectX11のセマンティック制限と一致するベクトル関数を、DirectX11またはその上位を用いてWARPシミュレータ上で実行してよく、DirectX12のセマンティック制限と一致するベクトル関数を、DirectX12を用いてWARPシミュレータ上で実行してよい。
さらなる一例において、ユーザコード10は、REFのデバイスレベルを用いて計算デバイスオブジェクト12を作成し、DX11またはDX12のリソースレベルを用いてリソースビューオブジェクト14を作成する。ユーザコード10にはまた、リソースレベルがDX11またはDX11、DX11.1である場合にDX11を示し、リソースレベルがDX12である場合にDX12を示すアノテーション29を有する少なくとも1つのベクトル関数が含まれる。REFのデバイスレベルは、ユーザコード10の少なくとも一部が、シングルスレッドCPUベースのDirectXシミュレータによる実行用に記述されることを示し、DX11またはDX12のリソースレベルはそれぞれ、ユーザコード10の少なくとも一部が、DirectX11またはDX12を含むまたはサポートするランタイムライブラリ20を用いる実行用に記述されることを示す。従って、DirectX11のセマンティック制限と一致するベクトル関数を、DirectX11またはその上位を用いてREFシミュレータ上で実行してよく、DirectX12のセマンティック制限と一致するベクトル関数を、DirectX12を用いてREFシミュレータ上で実行してよい。
上記の例では、DirectXをサポートするランタイムライブラリ20が使用される。他の例では、他の実装を、デバイスレベルとしてハードウェア型を示し、リソースレベルとしてネイティブ型を示すことによりサポートすることができる。例えば、ユーザコード10は、計算デバイスオブジェクト12を、SSEのデバイスレベルを用いて作成してIntelおよびAMDのCPU上でSSEベクトルユニットを有効にすることができ、AVXのデバイスレベルを用いて作成してIntelのSandy Bridge CPUを有効にすることができ、または、LRBのデバイスレベルを用いて作成してIntelのKnights Ferryの専用データ並列最適化CPUを有効にすることができる。これらの例を用いると、ユーザコード10は、リソースビューオブジェクト14を、ネイティブレベル(すなわち、NATIVE)を用いて作成することができ、ユーザコード10のベクトル関数が、データ並列セマンティクスに関して制限されず、下層にある汎用言語(例えば、C++)のセマンティクスと一致する。
図3Aのランタイムライブラリ20(1)に戻ると、DP関数44は、データ並列関数を提供して、GPU、またはWARPもしくはREFのソフトウェアシミュレータを有する計算ノードなどの計算ノード121の選択された型について、forall、scan、reduce、およびsortなどの呼び出しサイトを実装させる。他の型の計算ノード121(例えば、新しいおよび/または更新された型)を用いて、ランタイムライブラリ20(1)は、呼び出しサイトを抽象化する呼び出しサイトアブストラクション関数46を提供する。呼び出しサイトアブストラクション関数46を使用して、新しいおよび/または更新された型の計算ノード121について、呼び出しサイト機能を実装することができる。
図3Bに示すように、ユーザはまた、カスタム計算デバイス関数48、カスタムリソースビュー関数、および/またはカスタムDP関数50を含む1つまたは複数のランタイムライブラリ20(2)を提供してもよい。カスタム計算デバイス関数48を、抽象基底クラスとして実装してよく、また、ユーザがユーザコード10を実行するための新しいおよび/または更新された型の計算ノード121についてセマンティックメタデータを提供することが可能となる。カスタムリソースビュー関数49もまた、抽象基底クラスとして実装してよく、ユーザがユーザコード10を実行するためにハードウェアをどのように使用するかについて記述する新しいおよび/または更新されたリソースレベルを提供することが可能となる。カスタムDP関数50により、ユーザが新しいおよび/または更新された型の計算ノード121上で実行できるforall、scan、reduce、およびsortなどのカスタム呼び出しサイトの実装を提供することが可能となる。
一例において、ランタイムライブラリ20(2)を使用するために、ユーザコード10は、CUSTOMのデバイスレベルを用いて計算デバイスオブジェクト12を作成し、NATIVEのリソースレベルを用いてリソースビューオブジェクト14を作成する。ユーザコード10はまた、カスタム計算デバイス関数48を呼び出して、新しいおよび/または更新された型の計算ノード121についてセマンティックメタデータを提供する。呼び出しサイトに関しては、ユーザコード10は、ランタイムライブラリ20(1)の呼び出しサイトアブストラクション関数46を使用して、計算ノード121について適切な呼び出しサイト機能を実装してもよいし、呼び出しサイトを実装するカスタムDP関数50を提供してもよい。
別の例において、ランタイムライブラリ20(2)を使用するために、ユーザコード10は、NATIVEのデバイスレベルを用いて計算デバイスオブジェクト12を作成し、CUSTOMのリソースレベルを用いてリソースビューオブジェクト14を作成する。ユーザコード10はまた、カスタムリソースビュー関数49を呼び出して、ユーザコード10を実行するための計算デバイスオブジェクト12により指定される計算ノード121をどのように使用するかについて記述する新しいおよび/または更新されたリソースレベルを提供する。例えば、リソースレベルは、カスタムバージョンのIntel(登録商標)Thread Building Blocks(TBB)であってよい。呼び出しサイトについては、ユーザコード10は、ランタイムライブラリ20(1)の呼び出しサイトアブストラクション関数46を使用して、計算ノード121について適切な呼び出しサイト機能を実装してもよいし、呼び出しサイトを実装するカスタムDP関数50を提供してもよい。
さらなる例において、ランタイムライブラリ20(2)を使用するために、ユーザコード10は、CUSTOMのデバイスレベルを用いて計算デバイスオブジェクト12を作成し、CUSTOMのリソースレベルを用いてリソースビューオブジェクト14を作成する。ユーザコード10は、カスタム計算デバイス関数48を呼び出して、新しいおよび/または更新された型の計算ノード121についてセマンティックメタデータを提供する。ユーザコード10はまた、カスタムリソースビュー関数49を呼び出して、ユーザコード10を実行するための計算デバイスオブジェクト12により指定される計算ノード121をどのように使用するかについて記述する新しいおよび/または更新されたリソースレベルを提供する。呼び出しサイトについては、ユーザコード10は、ランタイムライブラリ20(1)の呼び出しサイトアブストラクション関数46を使用して、計算ノード121について適切な呼び出しサイト機能を実装してもよいし、呼び出しサイトを実装するカスタムDP関数50を提供してもよい。
ベクトル関数をホスト(すなわち、非ベクトルCPU)上で実行するために、ユーザコード10は、NATIVEのデバイスレベルを用いて計算デバイスオブジェクト12を作成し、NATIVEのリソースレベルを用いてリソースビューオブジェクト14を作成する。NATIVEのデバイスレベルは、ユーザコード10の少なくとも一部をホスト上で実行してよいことを示す。NATIVEのリソースレベルにより、ユーザコード10のベクトル関数が、データ並列セマンティクスに関して制限されず、下層にある汎用言語(例えば、C++)のセマンティクスと一致することが可能となる。ホストの実行を用いて、ユーザコード10は、ランタイムライブラリ20(1)の呼び出しサイトアブストラクション関数46を使用して、計算ノード121について適切な呼び出しサイト機能を実装してもよいし、呼び出しサイトを実装するカスタムDP関数50を提供してもよい。
データ並列セマンティック制限が低減または除去された拡張可能なデータ並列セマンティクスを提供することによりタスクベースの並列プログラミングランタイムライブラリ20との統合(またはヘテロジニアスプログラミング)を達成することができる。特に、図3Cに示す、タスク並列関数52を有するランタイムライブラリ20(3)を、DP関数44(図3A)と連動して使用してよい。タスク並列関数52が並列バターンライブラリ(PPL)を有する同時実行ランタイムライブラリ(ConcRT)を表す一例において、タスク並列関数52を使用するforallの実装を、仮想プロセッサを使用するホスト上での実行用に生成してよい。同様に、PPLおよびC++の標準テンプレートライブラリ(STL)からのforeachおよびtransformの実装には、直線的なイテレータ(反復子)の代わりにrange based(範囲ベース)の記号を含んでよい。一実施形態において、範囲パターンのオプションは以下の通り。
エニュメレータ (基本的に、標準的なSTLのイテレータパターンであって前方、双方向、等の変形を有する)
再帰的二分割(タスク並列)
チャンキング(タスク並列)
ランダムアクセス(タスク並列またはデータ並列)
foreachおよびtransformの実装により、これらの範囲パターンを使用する範囲トレイトまたはカテゴリをアクティブにする。
データ並列形式のforeachにおいて、「range」は、forallにおける計算ドメインの類似物である。単純な実装では、データ並列サブトレイトでランダムアクセス「range」を用いて示される場合、foreachの内部にforallを呼び出すことができる。foreachまたはtransformにおけるカーネル引数の数の制限を、ラムダ閉鎖を使用することにより緩和する。
ユーザが、forall機能(forallと呼ばれない場合でも)のConcRT実装の使用を望む場合、foreachが呼び出されると、ConcRTのforeachが実装されていないと仮定して(あるいは、自明に焼かれるかもしれない−呼び出されたforallのバージョンが、計算デバイスオブジェクト12およびリソースビューオブジェクト14のセマンティック状態に依存する)、foreachを、ConcRT(または他のカスタム)ベースのデータ並列呼び出しサイトの実装用に作成される「range」型に対して特殊化してよい。
組み込みの「range」ベースのforeachおよびtransformの実装は、「range」トレイトをアクティブにしてどの実装パターンであるかを決定する。カスタムデータ並列呼び出しサイトの実装を導入するために、新しい「range」型を多重定義することができる。従って、データ並列関数44とタスクベースの並列プログラミングランタイムライブラリ20との統合(例えば、ランタイムライブラリ20(3)とタスク並列関数52との統合)は、既存の言語機構を使用してユーザ拡張性を用いて達成することができる。
図5は、拡張可能なデータ並列セマンティクスを用いてデータ並列コード10をコンパイルかつ実行するべく構成されるコンピュータシステム100の一実施形態を例示するブロック図である。
コンピュータシステム100は、1つまたは複数のプロセッサパッケージ(図示せず)内に収容される1つまたは複数の処理要素(PE)102を有するホスト101、およびメモリシステム104を含む。コンピュータシステム100はまた、ゼロまたはそれ以上の入力/出力装置106、ゼロまたはそれ以上の表示装置108、ゼロまたはそれ以上の周辺装置110、および、ゼロまたはそれ以上のネットワーク装置112を含む。コンピュータシステム100は、1つまたは複数のDP最適型または他の型の計算ノード121を有する計算エンジン120をさらに含み、各DP最適計算ノード121は、1つまたは複数の処理要素(PE)122およびDP実行ファイル138を記憶するメモリ124のセットを含む。
ホスト101、入力/出力装置106、表示装置108、周辺装置110、ネットワーク装置112、および計算エンジン120は、任意の最適な型、数、および構成のコントローラ、バス、インターフェース、および/または、他の有線もしくは無線の接続を含む相互接続114のセットを使用して通信する。
コンピュータシステム100は、汎用または専用に構成される任意の適切な処理装置を表す。コンピュータシステム100の例に含まれるものには、サーバ、パーソナルコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、PDA(personal digital assistant)、携帯電話、および、音声/映像装置がある。コンピュータシステム100の構成要素(すなわち、ホスト101、入力/出力装置106、表示装置108、周辺装置110、ネットワーク装置112、相互接続114、および計算エンジン120)を、共通の筺体(図示せず)または任意の適切な数の別個の筺体(図示せず)内に包含してよい。
処理要素102はそれぞれ、メモリシステム104内に記憶される命令(すなわち、ソフトウェア)を実行するべく構成される、実行ハードウェアを形成する。各プロセッサパッケージ内の処理要素102は、同じまたは異なるアーキテクチャおよび/または命令セットを有することができる。例えば、処理要素102には、順次実行要素、スーパースカラ実行要素、およびデータ並列実行要素(例えば、GPU実行要素)の任意の組み合わせを含んでよい。各処理要素102は、メモリシステム104内に記憶される命令にアクセスして実行するべく構成される。命令には、BIOS(basic input output system)またはファームウェア(図示せず)、OS(operating system )132、コード10、コンパイラ134、GP実行ファイル136、およびDP実行ファイル138を含んでよい。各処理要素102は、入力/出力装置106、表示装置108、周辺装置110、ネットワーク装置112、および/または、計算エンジン120と連動して、またはこれらから受け取る情報に応じて、命令を実行することができる。
ホスト101は、OS132をブートして実行する。OS132は、処理要素により実行可能な命令を含み、コンピュータシステム100の構成要素を管理し、プログラムに構成要素へのアクセスおよび使用を可能にする関数のセットを提供する。一実施形態において、OS132は、Windows(登録商標)オペレーティングシステムである。他の実施形態において、OS132は、コンピュータシステム100を用いる使用に適した別のオペレーティングシステムである。
コンピュータシステムが、コンパイラ134を実行してコード10をコンパイルすると、コンパイラ134は、1つまたは複数の実行ファイル−例えば、1つまたは複数のGP実行ファイル136および1つまたは複数のDP実行ファイル138を生成する。他の実施形態において、コンパイラ134は、1つまたは複数のGP実行ファイル136を生成して、それぞれが1つまたは複数のDP実行ファイル138を含むようにしてもよく、または、1つまたは複数のDP実行ファイル138を生成して、いずれのGP実行ファイル136も生成しなくてもよい。GP実行ファイル136および/またはDP実行ファイル138は、データ並列拡張を用いてコンパイラ134の呼び出しに応じて生成されて、コード10の全てまたは選択された部分がコンパイルされる。呼び出しを、例えば、プログラマもしくはコンピュータシステム100の他のユーザ、コンピュータシステム100内の他のコード、または、別のコンピュータシステム(図示せず)内の他のコードにより生成してよい。
GP実行ファイル136は、1つまたは複数の汎用の処理要素102(例えば、CPU(central processing unit))上での実行用に意図されるプログラムを表す。GP実行ファイル136には、1つまたは複数の汎用の処理要素102の命令セットからの低レベルの命令が含まれる。
DP実行ファイル138は、1つまたは複数のデータ並列(DP)最適計算ノード121上での実行用に意図され最適化されるデータ並列のプログラムまたはアルゴリズム(例えば、シェーダ)を表す。一実施形態において、DP実行ファイル138には、DPバイトコード、または、DP最適計算ノード121上で実行される前にデバイスドライバ(図示せず)を使用してDP最適計算ノード121の命令セットからの低レベルの命令に変換される何らかの他の中間表現(IL)が含まれる。他の実施形態において、DP実行ファイル138には、コンパイラ134によって低レベルの命令が挿入された1つまたは複数のDP最適計算ノード121の命令セットからの低レベルの命令が含まれる。従って、GP実行ファイル136は、1つまたは複数の汎用プロセッサ(例えば、CPU)により直接実行可能であり、また、DP実行ファイル138は、1つまたは複数のDP最適計算ノード121により直接実行可能であるか、または、DP最適計算ノード121の低レベルの命令に変換された後に、1つまたは複数のDP最適計算ノード121により実行可能である。
コンピュータシステム100は、1つまたは複数の処理要素102を使用してGP実行ファイル136を実行してよく、また、コンピュータシステム100は、以下追加的に詳細に記載するように1つまたは複数のPE122を使用して、DP実行ファイル138を実行してもよい。
メモリシステム104には、命令およびデータを記憶するべく構成される、任意の適切な型、数、および構成の揮発性または不揮発性の記憶装置が含まれる。メモリシステム104の記憶装置は、OS132、コード10、コンパイラ134、GP実行ファイル136、およびDP実行ファイル138を含むコンピュータ実行可能命令(すなわち、ソフトウェア)を記憶する、コンピュータ可読記憶媒体を表す。命令は、コンピュータシステム100により実行可能であり、本明細書に記載されるようなOS132、コード10、コンパイラ134、GP実行ファイル136、およびDP実行ファイル138の関数および方法を実施する。メモリシステム104は、処理要素102、入力/出力装置106、表示装置108、周辺装置110、ネットワーク装置112、および計算エンジン120から受け取った命令およびデータを記憶する。メモリシステム104は、記憶した命令およびデータを、処理要素102、入力/出力装置106、表示装置108、周辺装置110、ネットワーク装置112、および計算エンジン120に提供する。メモリシステム104内の記憶装置の例に含まれるものには、ハードディスクドライブ、RAM(random access memory)、ROM(read only memory)、フラッシュメモリドライブおよびカード、ならびに、CDおよびDVDなどの磁気ディスクおよび光ディスクがある。
入力/出力装置106には、命令またはデータをユーザからコンピュータシステム100に入力し、かつ、命令またはデータをコンピュータシステム100からユーザに出力するべく構成される任意の適切な型、数、および構成の入力/出力装置が含まれる。入力/出力装置106の例に含まれるものには、キーボード、マウス、タッチパッド、タッチスクリーン、ボタン、ダイアル、ノブ、およびスイッチがある。
表示装置108には、テキストおよび/またはグラフィックの情報をコンピュータシステム100のユーザに出力するべく構成される任意の適切な型、数、および構成の表示装置が含まれる。表示装置108の例に含まれるものには、モニタ、表示スクリーン、およびプロジェクタがある。
周辺装置110には、コンピュータシステム100内の1つまたは複数の他の構成要素と共に動作して、汎用または専用の処理機能を実施するべく構成される任意の適切な型、数、および構成の周辺装置が含まれる。
ネットワーク装置112には、コンピュータシステム100が1つまたは複数のネットワーク(図示せず)に渡って通信することを可能にするべく構成される任意の適切な型、数、および構成のネットワーク装置が含まれる。ネットワーク装置112は、任意の適切なネットワーキングプロトコルおよび/または構成に従って動作して、情報が、コンピュータシステム100によりネットワークに送信され、または、コンピュータシステム100によりネットワークから受信されることを可能にすることができる。
計算エンジン120は、DP実行ファイル138を実行するべく構成される。計算エンジン120には、1つまたは複数の計算ノード121が含まれる。各計算ノード121は、メモリ階層を共有する計算リソースの集合体である。計算ノード121は、1つまたは複数のPE122およびDP実行ファイル138を記憶するメモリ124のセットを含む。PE122は、DP実行ファイル138を実行し、DP実行ファイル138により生成される結果をメモリ124内に記憶する。
上記で触れたように、データ並列計算(すなわち、DPプログラムまたはアルゴリズムの実行)用に最適化されるハードウェアアーキテクチャを伴う1つまたは複数の計算リソースを有する計算ノード121を、DP最適計算ノード121と称する。DP最適計算ノード121の例に含まれるものには、PE122のセットが1つまたは複数のGPUを含むノード121、および、PE122のセットが汎用プロセッサパッケージ内にSIMDユニットのセットを含むノード121がある。データ並列計算用に最適化されるハードウェアアーキテクチャを伴う計算リソースを何ら持たない計算ノード121(例えば、汎用の処理要素102のみを有するプロセッサパッケージ)を、非DP最適計算ノード121と称する。各計算ノード121において、メモリ124は、メモリシステム104から分離されてよく(例えば、GPUが使用するGPUメモリ)、または、メモリシステム104の一部であってもよい(例えば、汎用プロセッサパッケージにおいてSIMDユニットが使用するメモリ)。
ホスト101は、相互接続114を使用して、DP実行ファイル138を実行用に計算ノード121に提供するべく、かつ、DP実行ファイル138によって生成された結果を受け取るべく構成される、ホスト計算ノードを形成する。ホスト計算ノードには、メモリ階層(すなわち、メモリシステム104)を共有する汎用計算リソース(すなわち、汎用の処理要素102)の集合体を含む。ホスト計算ノードを、SMP(symmetric multiprocessing architecutre)を用いて構成してよく、また、例えば、NUMA(non−uniform memory access)アーキテクチャを使用してメモリシステム104のメモリの局所性を最大化するべく構成してもよい。
ホスト計算ノードのOS132は、DP呼び出しサイトを実行して、DP実行ファイル138がDP最適計算ノードまたは非DP最適計算ノード121により実行されるようにするべく構成される。メモリ124がメモリシステム104から分離される実施形態において、ホスト計算ノードは、DP実行ファイル138および1つまたは複数のインデックス付け可能な型14がメモリシステム104からメモリ124にコピーされるようにする。メモリシステム104がメモリ124を含む実施形態において、ホスト計算ノードは、DP実行ファイル138および/または1つまたは複数のインデックス付け可能な型14のコピーをメモリ124としてのメモリシステム104内に指定してよく、および/または、DP実行ファイル138および/または1つまたは複数のインデックス付け可能な型14を、メモリシステム104の一部から、メモリ124を形成するメモリシステム104の別の部分にコピーしてもよい。計算ノード121とホスト計算ノードとの間のコピー処理は、非同期と指定されない場合は同期点であってよい。
ホスト計算ノードおよび各計算ノード121は、お互いに独立してコードを同時に実行することができる。ホスト計算ノードおよび各計算ノード121は、同期点において相互作用して、ノード計算を調和させることができる。
一実施形態において、計算エンジン120は、1つまたは複数のGPU(graphics processing unit)にPE122およびメモリシステム104から分離されるメモリ124が含まれるグラフィックカードを表す。本実施形態において、グラフィックカードのドライバ(図示せず)は、バイトコードまたはDP実行ファイル138の何らかの他の中間表現(IL)を、GPUのPE122による実行用のGPUの命令セットに変換してよい。
別の実施形態において、計算エンジン120は、1つまたは複数の汎用の処理要素102を有するプロセッサパッケージ内に含まれる1つまたは複数のGPU(すなわち、PE122)と、メモリ124を含むメモリシステム104の一部との組み合わせから形成される。本実施形態において、追加のソフトウェアをコンピュータシステム100上に提供して、バイトコードまたはDP実行ファイル138の何らかの他の中間表現(IL)を、プロセッサパッケージ内のGPUの命令セットに変換してよい。
さらなる実施形態において、計算エンジン120は、処理要素102を含む1つまたは複数のプロセッサパッケージ内の1つまたは複数のSIMDユニットと、メモリ124を含むメモリシステム104の一部との組み合わせから形成される。本実施形態において、追加のソフトウェアをコンピュータシステム100上に提供して、バイトコードまたはDP実行ファイル138の何らかの他の中間表現(IL)を、プロセッサパッケージ内のSIMDユニットの命令セットに変換してよい。
さらに別の実施形態において、計算エンジン120は、処理要素102を含む1つまたは複数のプロセッサパッケージ内の1つまたは複数のスカラまたはベクトル処理パイプランと、メモリ124を含むメモリシステム104の一部との組み合わせから形成される。本実施形態において、追加のソフトウェアをコンピュータシステム100上に提供して、バイトコードまたはDP実行ファイル138の何らかの他の中間表現(IL)を、プロセッサパッケージ内のスカラ処理パイプラインの命令セットに変換してよい。
本明細書において特定の実施形態を例示し記載したが、種々の代替のおよび/または等価の実装が、本発明の範囲から逸脱することなく、示し記載した特定の実施形態と入れ替えられることは、当業者には理解されるであろう。本出願は、本明細書において検討した特定の実施形態のいずれの適用または変形も含むことを意図している。従って、本発明が特許請求の範囲およびその等価物によってのみ制限されることを意図している。

Claims (14)

  1. コンピュータ実行可能命令を記憶するコンピュータ可読記憶媒体であって、前記命令は、コンピュータシステムにより実行されると、コンピュータシステムに方法を実行させ、該方法が、
    データ並列ソースコードに応答して、計算デバイスオブジェクトおよびリソースビューオブジェクトを生成するステップであって、前記計算デバイスオブジェクトがデバイスレベルを指定し、前記リソースビューオブジェクトがリソースレベルを指定し、前記デバイスレベルが、計算ノードのタイプを示し、前記リソースレベルが、前記データ並列ソースコードの実行において使用するランタイムライブラリのタイプを示す、ステップと、
    前記データ並列ソースコードのデータ並列関数を前記デバイスレベルに対応する計算ノードを使用して実行するステップであって、該実行が、前記データ並列関数に適用されるアノテーションに応答し、該アノテーションが、前記データ並列関数が前記リソースレベルと互換性があることを示す、ステップと
    を含む、コンピュータ可読記憶媒体。
  2. 前記リソースビューオブジェクトにより指定される前記リソースレベルはネイティブである、請求項記載のコンピュータ可読記憶媒体。
  3. 前記デバイスレベルは前記計算デバイスオブジェクトにおいてカスタムであることを検出するステップと、
    前記デバイスレベルがカスタムであることを検出したことに応答して、カスタム計算デバイス関数またはカスタムデータ並列関数の一方を使用するステップと
    をさらに含む、請求項1記載のコンピュータ可読記憶媒体。
  4. 呼び出しサイトアブストラクション関数を使用して前記計算ノードについて呼び出しサイトの実装を生成するステップ
    をさらに含む、請求項1記載のコンピュータ可読記憶媒体。
  5. 前記データ並列ソースコードは、データ並列拡張を有するプログラミング言語で記述される、請求項1記載のコンピュータ可読記憶媒体。
  6. 前記データ並列ソースコードは、高レベルのデータ並列プログラミング言語で記述される、請求項1記載のコンピュータ可読記憶媒体。
  7. 1つまたは複数の前記計算ノードは、少なくとも1つのグラフィックスプロセッシングユニットを含む、請求項1記載のコンピュータ可読記憶媒体。
  8. つまたは複数の前記計算ノードは、少なくとも1つの汎用プロセッサを含む、請求項1記載のコンピュータ可読記憶媒体。
  9. コンピュータシステムにおいてコンパイラにより実行される方法であって、
    1つまたは複数のデータ並列計算ノード上での実行用に構成されるデータ並列ソースコードのデータ並列関数内のアノテーションを識別するステップと、
    前記アノテーションのアプリケーションに応答して、前記データ並列ソースコードからデータ並列実行可能コードを生成するステップであって、前記アノテーションが、前記データ並列関数が前記データ並列ソースコードにより指定されるリソースレベルと互換性があることを示し、前記リソースレベルが、前記データ並列ソースコードの実行において使用するランタイムライブラリのタイプを示す、ステップと
    を含む方法。
  10. リソースビューオブジェクトに対応する前記リソースレベルはネイティブである、請求項記載の方法。
  11. カスタムのデバイスレベルの検出に応答して、カスタム計算デバイス関数またはカスタムデータ並列関数の一方を含むようにデータ並列実行可能コードを生成するステップ
    をさらに含む請求項記載の方法。
  12. 呼び出しサイトアブストラクション関数を使用して前記1つまたは複数のデータ並列計算ノードについて呼び出しサイトの実装を生成するステップをさらに含む、請求項記載の方法。
  13. 前記データ並列ソースコードは、データ並列拡張を有する高レベルの汎用プログラミング言語で記述される、請求項記載の方法。
  14. 請求項13のいずれかに記載の方法をコンピュータに実行させるためのコンピュータ・プログラム。
JP2013546453A 2010-12-23 2011-12-23 拡張可能なデータ並列セマンティクス Active JP5957006B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/977,207 2010-12-23
US12/977,207 US9841958B2 (en) 2010-12-23 2010-12-23 Extensible data parallel semantics
PCT/US2011/067185 WO2012088508A2 (en) 2010-12-23 2011-12-23 Extensible data parallel semantics

Publications (3)

Publication Number Publication Date
JP2014501412A JP2014501412A (ja) 2014-01-20
JP2014501412A5 JP2014501412A5 (ja) 2015-02-19
JP5957006B2 true JP5957006B2 (ja) 2016-07-27

Family

ID=46314971

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013546453A Active JP5957006B2 (ja) 2010-12-23 2011-12-23 拡張可能なデータ並列セマンティクス

Country Status (8)

Country Link
US (1) US9841958B2 (ja)
EP (1) EP2656203A4 (ja)
JP (1) JP5957006B2 (ja)
KR (1) KR101962484B1 (ja)
CN (1) CN102566980B (ja)
CA (1) CA2822100A1 (ja)
HK (1) HK1172968A1 (ja)
WO (1) WO2012088508A2 (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9841958B2 (en) * 2010-12-23 2017-12-12 Microsoft Technology Licensing, Llc. Extensible data parallel semantics
US9632771B2 (en) * 2012-12-13 2017-04-25 Microsoft Technology Licensing, Llc Association of metadata with source code and applications and services premised thereon
US10101982B2 (en) * 2013-01-31 2018-10-16 Htc Corporation Methods for application management in an electronic device supporting hardware acceleration
KR101632027B1 (ko) * 2014-11-11 2016-06-20 포트리스이노베이션 주식회사 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체
US20170046168A1 (en) * 2015-08-14 2017-02-16 Qualcomm Incorporated Scalable single-instruction-multiple-data instructions
US10409560B1 (en) * 2015-11-18 2019-09-10 Amazon Technologies, Inc. Acceleration techniques for graph analysis programs
JP6563363B2 (ja) * 2016-05-13 2019-08-21 日本電信電話株式会社 設定サーバ、設定方法および設定プログラム
WO2018094087A1 (en) * 2016-11-17 2018-05-24 The Mathworks, Inc. Systems and methods for generating code for parallel processing units
WO2019134084A1 (zh) * 2018-01-04 2019-07-11 深圳市天软科技开发有限公司 代码执行方法、装置、终端设备及计算机可读存储介质
CN109918133A (zh) * 2019-01-24 2019-06-21 董栋挺 一种电力传输系统用多核心任务处理方法
KR20200093105A (ko) 2019-01-25 2020-08-05 삼성전자주식회사 이기종 프로세서들을 위해 전자 장치의 프로세서에 의해 구현되는 방법 및 전자 장치를 동작시키기 위한 프로세서
CN111832736B (zh) * 2019-04-19 2024-04-12 伊姆西Ip控股有限责任公司 用于处理机器学习模型的方法、设备和计算机可读存储介质

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11316688A (ja) 1998-05-06 1999-11-16 Mitsubishi Electric Corp プログラミング言語処理装置、プログラミング言語処理方法および記録媒体
US6675189B2 (en) 1998-05-28 2004-01-06 Hewlett-Packard Development Company, L.P. System for learning and applying integrated task and data parallel strategies in dynamic applications
US6828975B2 (en) 2001-03-01 2004-12-07 Microsoft Corporation Method and system for managing graphics objects in a graphics display system
US7733347B2 (en) * 2004-11-05 2010-06-08 Microsoft Corporation Automated construction of shader programs
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
US7822594B2 (en) * 2006-08-07 2010-10-26 Voltaire Ltd. Service-oriented infrastructure management
US20080109795A1 (en) 2006-11-02 2008-05-08 Nvidia Corporation C/c++ language extensions for general-purpose graphics processing unit
CN101657795B (zh) 2007-04-11 2013-10-23 苹果公司 多处理器上的数据并行计算
US8341611B2 (en) * 2007-04-11 2012-12-25 Apple Inc. Application interface on multiple processors
US8069190B2 (en) 2007-12-27 2011-11-29 Cloudscale, Inc. System and methodology for parallel stream processing
FR2931269A1 (fr) * 2008-05-16 2009-11-20 Ateji Soc Par Actions Simplifi Procede et systeme de developpement de programmes paralleles
US8566830B2 (en) 2008-05-16 2013-10-22 Microsoft Corporation Local collections of tasks in a scheduler
US8214814B2 (en) * 2008-06-24 2012-07-03 International Business Machines Corporation Sharing compiler optimizations in a multi-node system
US8645933B2 (en) * 2008-08-01 2014-02-04 Leon Schwartz Method and apparatus for detection and optimization of presumably parallel program regions
US8495603B2 (en) * 2008-08-11 2013-07-23 International Business Machines Corporation Generating an executable version of an application using a distributed compiler operating on a plurality of compute nodes
US8418155B2 (en) 2009-02-10 2013-04-09 International Business Machines Corporation Generating parallel SIMD code for an arbitrary target architecture
US8549496B2 (en) * 2009-02-27 2013-10-01 Texas Tech University System Method, apparatus and computer program product for automatically generating a computer program using consume, simplify and produce semantics with normalize, transpose and distribute operations
US8239847B2 (en) * 2009-03-18 2012-08-07 Microsoft Corporation General distributed reduction for data parallel computing
US8209664B2 (en) * 2009-03-18 2012-06-26 Microsoft Corporation High level programming extensions for distributed data parallel processing
US9349154B2 (en) * 2010-04-05 2016-05-24 Nvidia Corporation Bindless texture and image API
US9424087B2 (en) * 2010-04-29 2016-08-23 International Business Machines Corporation Optimizing collective operations
US20110314256A1 (en) * 2010-06-18 2011-12-22 Microsoft Corporation Data Parallel Programming Model
US8589867B2 (en) * 2010-06-18 2013-11-19 Microsoft Corporation Compiler-generated invocation stubs for data parallel programming model
US8756590B2 (en) * 2010-06-22 2014-06-17 Microsoft Corporation Binding data parallel device source code
US9395957B2 (en) * 2010-12-22 2016-07-19 Microsoft Technology Licensing, Llc Agile communication operator
US9841958B2 (en) * 2010-12-23 2017-12-12 Microsoft Technology Licensing, Llc. Extensible data parallel semantics

Also Published As

Publication number Publication date
CA2822100A1 (en) 2012-06-28
HK1172968A1 (en) 2013-05-03
JP2014501412A (ja) 2014-01-20
EP2656203A2 (en) 2013-10-30
CN102566980B (zh) 2015-03-18
KR20130137652A (ko) 2013-12-17
WO2012088508A3 (en) 2012-11-29
US20120166772A1 (en) 2012-06-28
KR101962484B1 (ko) 2019-03-26
EP2656203A4 (en) 2016-03-30
CN102566980A (zh) 2012-07-11
WO2012088508A2 (en) 2012-06-28
US9841958B2 (en) 2017-12-12

Similar Documents

Publication Publication Date Title
JP5957006B2 (ja) 拡張可能なデータ並列セマンティクス
US8756590B2 (en) Binding data parallel device source code
JP6027021B2 (ja) アジャイル通信演算子
JP6092780B2 (ja) タイルコミュニケーションオペレーター
JP2015503161A (ja) ヘテロジニアス並列処理プラットフォームのためのソフトウェアライブラリ
US8402450B2 (en) Map transformation in data parallel code
US20160371061A1 (en) Read-only communication operator
Acosta et al. Towards a Unified Heterogeneous Development Model in Android TM
US8713039B2 (en) Co-map communication operator
Gray et al. Model-based hardware generation and programming-the MADES approach
Sandrieser et al. Explicit platform descriptions for heterogeneous many-core architectures
KR101632027B1 (ko) 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체
Chen et al. Design and implementation of high-level compute on Android systems
Bhimani et al. Design space exploration of GPU Accelerated cluster systems for optimal data transfer using PCIe bus
Yang et al. Support OpenCL 2.0 Compiler on LLVM for PTX Simulators
Acosta et al. Android TM development and performance analysis
Luecke Software Development for Parallel and Multi-Core Processing
Tsog et al. Time Predictability of GPU Kernel on an HSA Compliant Platform
Liao et al. A profile-guided synergistic computation framework for Halide
Damevski Tool Support for Efficient Programming of Graphics Processing Units

Legal Events

Date Code Title Description
RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20130827

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20130828

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141224

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20141224

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20150519

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151209

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160120

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160418

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160617

R150 Certificate of patent or registration of utility model

Ref document number: 5957006

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250