JP2015503161A - ヘテロジニアス並列処理プラットフォームのためのソフトウェアライブラリ - Google Patents
ヘテロジニアス並列処理プラットフォームのためのソフトウェアライブラリ Download PDFInfo
- Publication number
- JP2015503161A JP2015503161A JP2014544823A JP2014544823A JP2015503161A JP 2015503161 A JP2015503161 A JP 2015503161A JP 2014544823 A JP2014544823 A JP 2014544823A JP 2014544823 A JP2014544823 A JP 2014544823A JP 2015503161 A JP2015503161 A JP 2015503161A
- Authority
- JP
- Japan
- Prior art keywords
- binary
- kernel
- intermediate representation
- compiled
- library
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
OpenCL(登録商標)フレームワーク内にライブラリを提供するためのシステム、方法及び媒体である。ライブラリソースコードは、中間表現にコンパイルされ、エンドユーザのコンピューティングシステムに配信される。コンピューティングシステムは、典型的に、CPUと、1つ以上のGPUとを含む。CPUは、ライブラリの中間表現を、GPU上で実行することをターゲットとした実行可能なバイナリにコンパイルする。CPUは、ホストアプリケーションを実行し、ホストアプリケーションは、バイナリからカーネルを呼び出す。CPUは、バイナリからカーネルを検索し、カーネルを実行のためにGPUに伝達する。【選択図】図5
Description
本発明は、概して、コンピュータ及びソフトウェアに関し、特に、種々の異なる並列ハードウェアプラットフォームのためのソフトウェアライブラリを抽象化することに関する。
コンピュータ及び他のデータ処理デバイスは、典型的に、中央処理装置(CPU)として一般に知られている少なくとも1つの制御プロセッサを有する。また、こうしたコンピュータ及びデバイスは、種々のタイプの特化された処理に用いられるグラフィックス処理ユニット(GPU)などの他のプロセッサを有し得る。例えば、第1のアプリケーションセットにおいて、GPUは、グラフィックス処理動作を行うように設計され得る。GPUは、一般に、並列データストリームに対して同じ命令を実行することの可能な複数の処理要素を含む。一般に、CPUは、ホストとして機能し、特化された並列タスクを、GPUなどの他のプロセッサに委ねることがある。
CPU及びGPUを有するヘテロジニアスコンピューティングプラットフォームのためのいくつかのフレームワークが開発されている。これらのフレームワークは、スタンフォード大学によるBrookGPUや、NVIDIAによるCUDAや、Khronos Groupと呼ばれる産業団体によるOpenCL(登録商標)を含む。OpenCL(登録商標)フレームワークは、種々の異なるタイプのCPU、GPU、デジタル信号プロセッサ(DSP)及び他のプロセッサ上で実行するアプリケーションをユーザが作成可能なC−like開発環境を提供する。また、OpenCL(登録商標)は、ヘテロジニアスコンピューティングシステム内でコードをコンパイル及び実行することの可能なコンパイラ及びランタイム環境を提供する。開発者は、OpenCL(登録商標)を使用しているときに、現在使用されている全てのプロセッサをターゲットとするために、単一の統一されたツールチェーン及び言語を使用することができる。これは、これらのアーキテクチャの全てを同様の方法で概念化する抽象型プラットフォームモデルと、ヘテロジニアスアーキテクチャにわたるデータ及びタスクの並列性をサポートする実行モデルとを、開発者に提示することによってなされる。
OpenCL(登録商標)は、これまでグラフィックスアプリケーションでのみ利用可能であった多くのコンピューティングプラットフォームに含まれていた莫大なGPUコンピューティングパワーを、任意のアプリケーションによって活用できるようにする。OpenCL(登録商標)を用いて、ベンダーがOpenCL(登録商標)ドライバを提供した任意のGPU上で実行するプログラムを書き込むことができる。OpenCL(登録商標)プログラムが実行されると、一連のAPIコールがシステムを実行用に構成し、組み込み実行時(Just In Time:JIT)コンパイラがOpenCL(登録商標)コードをコンパイルし、ランタイムが並列カーネル間の実行を非同期的に協調させる。タスクは、ホスト(例えば、CPU)から同じシステム内のアクセラレータデバイス(例えば、GPU)にオフロードされ得る。
典型的なOpenCL(登録商標)ベースのシステムは、ソースコードを取得し、ソースコードを、JITコンパイラを通じて実行して、ターゲットGPUに関する実行可能コードを生成し得る。次いで、実行可能コード又は実行可能コードの一部は、ターゲットGPUに送信され、実行される。しかしながら、この手法では、時間がかかりすぎることがあり、OpenCL(登録商標)ソースコードを露出することがある。したがって、当該技術分野では、ライブラリを生成するのに用いられるソースコードを露出せずにOpenCL(登録商標)ランタイム環境内のアプリケーションにソフトウェアライブラリを提供するためのOpenCL(登録商標)ベースの手法が必要とされている。
一実施形態では、ソースコード及びソースライブラリは、高レベルソフトウェア言語から特定のターゲットハードウェア上で実行可能なカーネルを含む命令セットアーキテクチャ(ISA)バイナリに至るまでにいくつかのコンパイルステージを経由してもよい。一実施形態では、ソースコード及びライブラリの高レベルソフトウェア言語は、オープンコンピューティング言語(OpenCL(登録商標))であってもよい。各ソースライブラリは、CPU上で実行しているソフトウェアアプリケーションから呼び出され得る、及び、実際の実行のためにGPUに伝達され得る、複数のカーネルを含んでもよい。
ライブラリソースコードは、エンドユーザのコンピューティングシステムに伝達される前に、中間表現にコンパイルされてもよい。一実施形態では、中間表現は、低レベル仮想機械(low level virtual machine:LLVM)中間表現であってもよい。中間表現は、ソフトウェアインストレーションパッケージの一部としてエンドユーザのコンピューティングシステムに提供されてもよい。インストール時に、LLVMファイルは、所与のエンドユーザのコンピューティングシステムの特定のターゲットハードウェア用にコンパイルされてもよい。所与のコンピューティングシステムにおけるCPU又は他のホストデバイスは、システム内のGPUなどのハードウェアターゲットのためのISAバイナリを生成するために、LLVMファイルをコンパイルしてもよい。
実行時に、ISAバイナリは、適正なインストールを確認し得るソフトウェア開発キット(software development kit:SDK)であって、ISAバイナリから1つ以上の特定のカーネルを検索し得るSDKを介して開かれてもよい。カーネルは、次いで、メモリに格納されてもよく、実行しているアプリケーションは、実行のための各カーネルを、OpenCL(登録商標)ランタイム環境を介してGPUに送達してもよい。
これらの特徴及び利点、並びに、他の特徴及び利点は、本明細書で提示される手法の以下の詳細な説明に照らせば、当該技術分野の当業者には明らかとなるであろう。
方法及び機構の上述した利点及び更なる利点は、以下の説明を付属の図面と併せて参照することでより良く理解されるであろう。
以下の説明では、本明細書で提示される方法及び機構の十分な理解を提供するために、多くの具体的詳細が記載される。しかしながら、当業者は、これらの具体的詳細がなくても、種々の実施形態が実施され得ることを認識するはずである。ある場合には、本明細書に記載の手法を不明瞭にすることを避けるために、周知の構造体、コンポーネント、信号、コンピュータプログラム命令及び技術が詳細に示されていない。例証の簡素さ及び明確さのために、図面に示される要素は必ずしも縮尺で描かれていないことが理解されるであろう。例えば、要素のうちのいくつかの寸法は、他の要素に対して誇張されていることがある。
本明細書は、「一実施形態」への言及を含む。異なる文脈での「一実施形態では」という文言の出現は、必ずしも同じ実施形態を指していない。特定の特徴、構造体又は特色が、本開示と一致するあらゆる適切な方法で組み合わされてもよい。さらに、本願の全体を通して用いられる場合の「〜であってもよい、〜ことがある、〜得る」という言葉は、義務付けの意味(すなわち、しなければならないという意味)ではなく、許容の意味で用いられる(すなわち、可能性を有することを意味する)。同様に、「〜を含む(include、includes)」、「〜を含んでいる」という言葉は、〜を含むがこれに限定されないことを意味する。
用語。以下のパラグラフは、本開示(添付の請求項を含む)で見られる用語に関する定義及び/又は文脈を提供する。
「〜を備える、含む」。この用語は幅広い解釈ができる。添付の請求項で用いられる場合には、この用語は、付加的な構造体又はステップを除外するものではない。「ホストプロセッサ…を備えるシステム。」と記載する請求項を考える。こうした請求項は、システムが付加的なコンポーネント(例えば、ネットワークインターフェース、メモリ)を含むことを除外するものではない。
「〜ように構成される」。種々のユニット、回路又は他のコンポーネントが、1つ以上のタスクを行う「ように構成される」として説明又は特許請求されることがある。このような文脈では、「〜ように構成される」とは、ユニット/回路/コンポーネントの動作中に1つ以上のタスクを行う構造体(例えば、回路)を含むことを示すことによって、構造体を表すのに用いられる。したがって、ユニット/回路/コンポーネントは、特定のユニット/回路/コンポーネントが現在動作可能ではない(例えば、オンではない)ときであって、もタスクを行うように構成されると言える。「〜ように構成される」という語と共に用いられるユニット/回路/コンポーネントは、ハードウェア(例えば、回路や、動作を実施するように実行可能なプログラム命令を格納するメモリなど)を含む。ユニット/回路/コンポーネントが1つ以上のタスクを行う「ように構成される」という記述は、該ユニット/回路/コンポーネントに対して35U.S.C.§112、第6パラグラフを行使しないことを明確に意図される。加えて、「〜ように構成される」とは、当該タスクを行うことができる態様で動作するソフトウェア及び/又はファームウェア(例えば、ソフトウェアを実行するFPGA若しくは汎用プロセッサ)によって取り扱われる一般的な構造体(例えば、一般的な回路)を含むことができる。「〜ように構成される」はまた、製造プロセス(例えば、半導体製造設備)を、1つ以上のタスクを実施又は実行するように適合されるデバイス(例えば、集積回路)を製造することに適合させることを含むことがある。
「第1の」、「第2の」など。本明細書で用いられる場合のこれらの用語は、それらが前につく名詞に対するラベルとして用いられ、そのように明示的に定義されない限りにおいて、どのようなタイプの順序付け(例えば、空間的、一時的、論理的)も意味しない。例えば、4つのGPUを有するシステムでは、「第1の」GPU及び「第2の」GPUという用語は、4つのGPUのうち何れか2つを指すのに用いることができる。
「〜に基づいて」。本明細書で用いられる場合には、この用語は、判定に影響する1つ以上の因子を説明するのに用いられる。この用語は、判定に影響することがある付加的な因子を除外するものではない。すなわち、判定は、これらの因子だけに基づいて、又は、これらの因子に少なくとも部分的に基づいてなされてもよい。「Bに基づいてAを判定する」という文言を考える。Bは、Aの判定に影響する因子であり得るが、こうした文言は、Aの判定がCにも基づいていることを除外するものではない。他の場合、Aは、Bだけに基づいて判定されることがある。
ここで図1を参照すると、一実施形態に係るコンピューティングシステム100のブロック図が示されている。コンピューティングシステム100は、CPU102と、GPU106とを含み、コプロセッサ108を任意に含んでもよい。図1に示される実施形態では、CPU102及びGPU106は、別個の集積回路(IC)又はパッケージ上に含まれる。しかしながら、他の実施形態では、CPU102及びGPU106、又は、これらの集合的な機能性は、単一のIC又はパッケージ内に含まれてもよい。一実施形態では、GPU106は、データ並列アプリケーションの実行をサポートする並列アーキテクチャを有してもよい。
また、コンピューティングシステム100は、CPU102と、GPU106と、コプロセッサ108によってアクセスされ得るシステムメモリ112とを含む。種々の実施形態では、コンピューティングシステム100は、スーパーコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、ビデオゲームコンソール、組み込みデバイス、ハンドヘルドデバイス(例えば、モバイル電話、スマートフォン、MP3プレーヤ、カメラ、GPSデバイスなど)、又は、GPUを含む若しくは含むように構成された、いくつかの他のデバイスを含んでもよい。また、図1には具体的に示されないが、コンピューティングシステム100は、コンピューティングシステム100のコンテンツ(例えば、グラフィックス、ビデオなど)を表示するためのディスプレイ装置(例えば、陰極線管、液晶ディスプレイ、プラズマディスプレイなど)を含んでもよい。
GPU106は、いくつかの特化した機能(例えば、グラフィックス処理タスク及びデータ並列汎用計算タスク)を、通常、CPU102がソフトウェアで実行できるよりも速く行うことによって、CPU102を支援する。また、コプロセッサ108は、CPU102が種々のタスクを行うことを支援してもよい。コプロセッサ108は、浮動小数点コプロセッサ、GPU、ビデオ処理ユニット(VPU)、ネットワーキングコプロセッサ、並びに、他のタイプのコプロセッサ及びプロセッサを含んでもよいが、これらに限定されない。
GPU106及びコプロセッサ108は、バス114を経由してCPU102及びシステムメモリ112と通信してもよい。バス114は、周辺機器インターフェース(PCI)バス、アクセラレーテッドグラフィックスポート(AGP)バス、PCI Express(PCIE)バス、若しくは、現在利用可能若しくは将来開発される別のタイプのバスを含む、コンピュータシステムで用いられるどのようなタイプのバス又は通信ファブリックであってもよい。
システムメモリ112に加えて、コンピューティングシステム100は、ローカルメモリ104と、ローカルメモリ110とをさらに含む。ローカルメモリ104は、GPU106に結合されており、且つ、バス114に結合されてもよい。ローカルメモリ110は、コプロセッサ108に結合されており、且つ、バス114に結合されてもよい。ローカルメモリ104,110の各々は、データがシステムメモリ112に格納された場合と比べて、特定のデータ(例えば頻繁に用いられるデータ)に対する高速なアクセスを提供するために、GPU106及びコプロセッサ108を利用可能である。
ここで図2を参照すると、分散型コンピューティング環境の一実施形態を示すブロック図が示されている。ホストアプリケーション210は、ホストデバイス208上で実行してもよく、ホストデバイス208は、1つ以上のCPU及び/又は他のタイプのプロセッサ(例えば、システム・オン・チップ(SoC)、グラフィックス処理ユニット(GPU)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、特定用途向け集積回路(ASIC))を含んでもよい。ホストデバイス208は、直接接続、バス接続、ローカルエリアネットワーク(LAN)接続、インターネット接続などを含む種々のタイプの接続を介して、計算デバイス206A〜206Nの各々に結合されてもよい。また、計算デバイス206A〜206Nのうち1つ以上の計算デバイスは、クラウドコンピューティング環境の一部であってもよい。
計算デバイス206A〜206Nは、ホストデバイス208に結合され得る任意の数のコンピューティングシステム及び処理デバイスの代表的なものである。各計算デバイス206A〜206Nは、複数の計算ユニット202を含んでもよい。各計算ユニット202は、GPU、CPU、FPGAなどの任意の種々のタイプのプロセッサを表わしてもよい。また、各計算ユニット202は、複数の処理要素204A〜204Nを含んでもよい。
ホストアプリケーション210は、計算デバイス206A〜206N上で実行している他のプログラムを監視及び制御してもよい。計算デバイス206A〜206N上で実行しているプログラムは、OpenCL(登録商標)カーネルを含んでもよい。一実施形態では、ホストアプリケーション210は、OpenCL(登録商標)ランタイム環境内で実行してもよく、計算デバイス206A〜206N上で実行しているカーネルを監視してもよい。本明細書で用いられる場合、「カーネル」という用語は、OpenCL(登録商標)フレームワーク内のターゲットデバイス(例えば、GPU)上で実行するプログラムにおいて宣言される機能を指すことがある。カーネルに関するソースコードは、OpenCL(登録商標)言語で記述され、実行可能な形式のカーネルを作成するために1つ以上のステップでコンパイルされてもよい。一実施形態では、計算デバイス206の計算ユニット202によって実行されるべきカーネルは、複数のワークロードに分解されてもよく、ワークロードは、異なる処理要素204A〜204Nに並列に課されてもよい。他の実施形態では、OpenCL(登録商標)以外の他のタイプのランタイム環境が、分散型コンピューティング環境によって用いられてもよい。
ここで図3を参照すると、OpenCL(登録商標)ソフトウェア環境の一実施形態を示すブロック図が示されている。特定のタイプの処理(例えば、ビデオ編集、メディア処理、グラフィックス処理)に特有のソフトウェアライブラリは、コンピューティングシステムのためのインストレーションパッケージにダウンロードされてもよいし、含まれてもよい。ソフトウェアライブラリは、インストレーションパッケージに含まれる前に、ソースコードからデバイスに依存しない中間表現にコンパイルされてもよい。一実施形態では、中間表現(intermediate representation:IR)は、LLVM IR302などの低レベル仮想機械(LLVM)中間表現であってもよい。LLVMは、言語に依存しないコンパイラフレームワークに関する業界標準であって、ソースコードの変換に関する共通の低レベルコード表現を定義する。他の実施形態では、他のタイプのIRが用いられてもよい。ソースコードの代わりにLLVM IR302を配信することで、意図しないアクセス、又は、オリジナルのソースコードの修正を防ぐことができる。
LLVM IR302は、種々のタイプのエンドユーザのコンピューティングシステムに関するインストレーションパッケージに含まれてもよい。一実施形態では、LLVM IR302は、インストール時に、中間言語(intermediate language:IL)304にコンパイルされてもよい。コンパイラ(図示せず)は、LLVM IR302からIL304を生成してもよい。IL304は、ターゲットデバイス(例えば、GPU318)に特有の技術的詳細を含んでもよいが、IL304は、ターゲットデバイス上で実行可能でなくてもよい。別の実施形態では、IL304は、LLVM IR302の代わりにインストレーションパッケージの一部として提供されてもよい。
次いで、IL304は、デバイスに特有のバイナリ306にコンパイルされてもよい。バイナリ306は、後で用いるためにCPU316によってキャッシュされてもよいし、他の方法でアクセス可能であってもよい。IL304からバイナリ306(及びLLVM IR302からIL304)を生成するのに用いられるコンパイラは、GPU318のためのドライバパックの一部としてCPU314に提供されてもよい。本明細書で用いられる場合において「バイナリ」という用語は、コンパイルされた実行可能なバージョンのカーネルのライブラリを指すことがある。バイナリ306は、特定のターゲットデバイスをターゲットにしてもよく、カーネルは、バイナリから検索され、特定のターゲットデバイスによって実行されてもよい。第1のターゲットデバイスに関してコンパイルされるバイナリからのカーネルは、第2のターゲットデバイス上で実行可能でなくてもよい。また、バイナリ306は、命令セットアーキテクチャ(instruction set architecture:ISA)バイナリと呼ばれることがある。一実施形態では、LLVM IR302、IL304及びバイナリ306は、カーネルデータベース(kernel database:KDB)ファイル形式で格納されてもよい。例えば、ファイル302は、LLVM IRバージョンのKDBファイルとしてマークされてもよく、ファイル304はILバージョンのKDBファイルであってもよく、ファイル306はバイナリバージョンのKDBファイルであってもよい。
デバイスに特有のバイナリ306は、複数の実行可能なカーネルを含んでもよい。カーネルは、何れかのGPU318に伝送され、実行時(JIT)コンパイルステージを経由する必要なしに実行され得るように、既にコンパイルされた実行可能な形態であってもよい。特定のカーネルが、ソフトウェアアプリケーション310によってアクセスされるときに、特定のカーネルは、メモリから検索され及び/又はメモリに格納されてもよい。したがって、同じカーネルの将来のアクセスのために、カーネルは、バイナリ306から検索されるのではなく、メモリから検索されてもよい。別の実施形態では、カーネルは、カーネルが実行される次の時点でカーネルに迅速にアクセスできるように、GPU318内のメモリに格納されてもよい。
動的リンクライブラリSDK.dll308を介してバイナリ306へのアクセスを提供するために、ソフトウェア開発キット(SDK)ライブラリ(.lib)ファイルSDK.lib312がソフトウェアアプリケーション310によって用いられてもよい。SDK.dll308は、実行時にソフトウェアアプリケーション310からバイナリ306にアクセスするのに用いられてもよく、SDK.dll308は、LLVM IR302と共にエンドユーザのコンピューティングシステムに配信されてもよい。ソフトウェアアプリケーション310は、適切なAPIコールを行うことによってSDK.dll308を介してバイナリ306にアクセスするのにSDK.lib312を用いてもよい。
SDK.lib312は、バイナリ306におけるカーネルにアクセスするための複数の機能を含んでもよい。これらの機能は、オープン機能、ゲットプログラム機能及びクローズ機能を含んでもよい。オープン機能は、バイナリ306を開き、バイナリ306からCPU316内のメモリにマスターインデックステーブルをロードすることができる。ゲットプログラム機能は、マスターインデックステーブルから単一のカーネルを選択し、バイナリ306からCPU316メモリにカーネルをコピーすることができる。クローズ機能は、オープン機能によって用いられるリソースを解放することができる。
一部の実施形態では、ソフトウェアアプリケーション310は、オープン機能がコールされるときに、バイナリ306が最後のドライバと共にコンパイルされているかどうかを判定してもよい。CPU316によって新しいドライバがインストールされており、且つ、コンパイラによって以前のドライバからバイナリ306がコンパイルされた場合に、オリジナルのLLVM IR302は、新しいバイナリ306を作成するために、新しいコンパイラと共に再びコンパイルされてもよい。一実施形態では、呼び出されている個々のカーネルだけが再びコンパイルされてもよい。別の実施形態では、カーネルの全てのライブラリが再びコンパイルされてもよい。さらなる実施形態では、実行時に再コンパイルが行われなくてもよい。代わりに、インストーラは、CPU316に格納された全てのバイナリを認識してもよく、新しいドライバがインストールされる場合には、インストーラは、CPU316がビジーではないときに、LLVM IR302及び任意の他のLLVM IRをバックグラウンドで再コンパイルしてもよい。
一実施形態では、CPU316は、OpenCL(登録商標)ランタイム環境を動作させてもよい。ソフトウェアアプリケーション310は、OpenCL(登録商標)ランタイム環境にアクセスするためのOpenCL(登録商標)アプリケーション−プログラミングインターフェース(API)を含んでもよい。他の実施形態では、CPU316は、他のタイプのランタイム環境を動作させてもよい。例えば、別の実施形態では、DirectComputeランタイム環境が用いられてもよい。
ここで図4を参照すると、暗号化されたライブラリの一実施形態のブロック図が示されている。LLVM IR404を生成するためにソースコード402がコンパイルされてもよい。LLVM IR404は、CPU416に伝達され得る暗号化されたLLVM IR406を生成するのに用いられてもよい。暗号化されたLLVM IR406をエンドユーザに配信することで、ソースコード402の付加的な保護を提供することができ、無許可のユーザが、ソースコード402の近似物を生成するために、LLVM IR404をリバースエンジニアリングするのを防ぐことができる。暗号化されたLLVM IR406の作成及び配信は、特定のライブラリ及び特定のインストレーションパッケージのために利用可能なオプションであってもよい。例えば、ソースコード402のソフトウェア開発者は、それらのソースコードに関する付加的な保護を提供するために暗号化を用いることを決定してもよい。他の実施形態では、ILバージョンのソースコード402がエンドユーザに提供されてもよく、これらの実施形態では、ILファイルは、ターゲットコンピューティングシステムに送達される前に暗号化されてもよい。
暗号化が用いられる場合に、コンパイラ408は、暗号化されたLLVM IRファイルを復号化するように構成された組み込みデクリプタ410を含んでもよい。コンパイラ408は、暗号化されたLLVM IR406を復号化し、次いで、コンパイルを行って、暗号化されていないバイナリ414を作成してもよい。バイナリ414はメモリ412に格納されてもよい。別の実施形態では、暗号化されていないバイナリ414は、CPU416の外部の別のメモリ(図示せず)に格納されてもよい。一部の実施形態では、コンパイラ408は、LLVM IR406からIL表現(図示せず)を生成してもよく、次いで、ILから暗号化されていないバイナリ414を生成してもよい。種々の実施形態では、LLVM IR406が暗号化されていることを示すために、暗号化されたLLVM IR406にフラグが設定されてもよい。
ここで図5を参照すると、別のコンピューティングシステムの一部の一実施形態のブロック図が示されている。ソースコード502は、システム500によって用いられ得る任意の数のライブラリ及びカーネルを表わしてもよい。一実施形態では、ソースコード502は、LLVM IR504にコンパイルされてもよい。LLVM IR504は、GPU510A〜510Nに関して同じであってもよい。一実施形態では、LLVM IR504は、別個のコンパイラによって中間言語(IL)表現506A〜506Nにコンパイルされてもよい。CPU512上で実行している第1のコンパイラ(図示せず)は、IL506Aを生成してもよく、次いで、IL506Aは、バイナリ508Aにコンパイルされてもよい。バイナリ508Aは、GPU510Aをターゲットにしてもよく、GPU510Aは、第1のタイプのマイクロアーキテクチャを有してもよい。同様に、CPU512上で実行している第2のコンパイラ(図示せず)は、IL506Nを生成してもよく、次いで、IL506Nは、バイナリ508Nにコンパイルされてもよい。バイナリ508Nは、GPU510Nをターゲットにしてもよく、GPU510Nは、GPU510Aの第1のタイプのマイクロアーキテクチャとは異なる第2のタイプのマイクロアーキテクチャを有してもよい。
バイナリ508A〜508Nは、生成され得る任意の数のバイナリの代表的なものであり、GPU510A〜510Nは、コンピューティングシステム500に含まれ得る任意の数のGPUの代表的なものである。また、バイナリ508A〜508Nは、任意の数のカーネルを含んでもよく、ソースコード502からの異なるカーネルが異なるバイナリ内に含まれてもよい。例えば、ソースコード502は複数のカーネルを含んでもよい。第1のカーネルは、GPU510A上で実行することを意図されてもよく、そのため、第1のカーネルは、GPU510Aをターゲットとするバイナリ508Aにコンパイルされてもよい。ソースコード502からの第2のカーネルは、GPU510N上で実行することを意図されてもよく、そのため、第2のカーネルは、GPU510Nをターゲットとするバイナリ508Nにコンパイルされてもよい。このプロセスは、任意の数のカーネルがバイナリ508A内に含まれ得るように、及び、任意の数のカーネルがバイナリ508N内に含まれ得るように、繰り返されてもよい。ソースコード502からの一部のカーネルは、両方のバイナリにコンパイルされ、及び、含まれてもよく、一部のカーネルはバイナリ508Aにのみコンパイルされてもよく、他のカーネルはバイナリ508Nにのみコンパイルされてもよく、他のカーネルはバイナリ508A又はバイナリ508Nの何れにも含まれなくてもよい。このプロセスは、任意の数のバイナリに関して繰り返されてもよく、各バイナリは、ソースコード502由来のカーネルのサブセット又は全てを含んでもよい。他の実施形態では、コンピューティングシステム500内で他のタイプのデバイス(例えば、FPGA、ASIC)が用いられてもよく、バイナリ508A〜508Nのうち1つ以上のバイナリによってターゲットにされてもよい。
ここで図6を参照すると、OpenCL(登録商標)環境内にライブラリを提供するための方法の一実施形態が示されている。説明目的のために、この実施形態におけるステップは、連続した順序で示されている。後述する方法の種々の実施形態では、説明される要素のうち1つ以上の要素は、同時に、示された順序とは異なる順序で行われてもよく、又は、完全に省略されてもよいことに留意されたい。また、他の付加的な要素が所望に応じて行われてもよい。
方法600は、ブロック605で始まってもよく、次いで、ライブラリのソースコードが中間表現(IR)にコンパイルされてもよい(ブロック610)。一実施形態では、ソースコードはOpenCL(登録商標)で記述されてもよい。他の実施形態では、ソースコードは他の言語(例えば、C、C++、Fortran)で記述されてもよい。一実施形態では、IRはLLVM中間表現であってもよい。他の実施形態では、他のIRが用いられてもよい。次に、IRは、コンピューティングシステムに伝達されてもよい(ブロック620)。コンピューティングシステムは、1つ以上のCPU及び1つ以上のGPUを含む複数のプロセッサを含んでもよい。コンピューティングシステムはIRをダウンロードしてもよい。IRはインストール・ソフトウェア・パッケージの一部であってもよい。IRをコンピューティングシステムに伝達するための種々の他の方法の何れかが用いられてもよい。
ブロック620の後で、IRは、コンピューティングシステムのホストプロセッサによって受信されてもよい(ブロック630)。一実施形態では、ホストプロセッサはCPUであってもよい。他の実施形態では、ホストプロセッサは、デジタル信号プロセッサ(DSP)、システム・オン・チップ(SoC)、マイクロプロセッサ、GPUなどであってもよい。次いで、IRは、CPU上で実行するコンパイラによってバイナリにコンパイルされてもよい(ブロック640)。バイナリは、コンピューティングシステム内の特定のターゲットプロセッサ(例えば、GPU、FPGA)をターゲットにしてもよい。代替的に、バイナリは、コンピューティングシステムの外部のデバイス又はプロセッサをターゲットにしてもよい。バイナリは複数のカーネルを含んでもよく、各カーネルは、特定のターゲットプロセッサ上で直接実行可能である。一部の実施形態では、カーネルは、並列アーキテクチャと共に、GPU又は他のデバイスの並列処理能力を利用する機能であってもよい。バイナリは、CPUローカルメモリ内、システムメモリ内、又は、別の格納場所に格納されてもよい。
一実施形態では、CPUは、ソフトウェアアプリケーションを実行してもよく(ブロック650)、ソフトウェアアプリケーションは、1つ以上のターゲットプロセッサによって行われるべき特定のタスクをスケジューリングするために、OpenCL(登録商標)ランタイム環境と相互作用してもよい。これらのタスクを行うために、ソフトウェアアプリケーションは、バイナリからカーネルに対応する1つ以上の機能へのコールを呼び出してもよい。機能コールを実行するときに、アプリケーションによってカーネルに関する要求が生成されてもよい(条件ブロック660)。カーネルに関する要求の生成に応答して、アプリケーションは、バイナリからカーネルを検索するために1つ以上のAPIコールを呼び出してもよい(ブロック670)。
カーネルに関する要求が生成されない場合(条件ブロック660)、ソフトウェアアプリケーションは、自身の実行を続けてもよく、カーネルへの要求が生成されるときに応答できる状態にあってもよい。次いで、バイナリからカーネルが検索された後に(ブロック670)、カーネルは、特定のターゲットプロセッサに伝達されてもよい(ブロック680)。カーネルは、ストリングとして、又は、バッファに入れることを含む種々の方法で、特定のターゲットプロセッサに伝達されてもよい。次いで、カーネルは、特定のターゲットプロセッサによって実行されてもよい(ブロック690)。ブロック690の後に、ソフトウェアアプリケーションは、カーネルに関する別の要求が生成されるまで、CPU上で実行され続けてもよい(条件ブロック660)。ステップ610〜640は、コンピューティングシステムによって用いられる複数のライブラリに関して複数回繰り返されてもよい。カーネルが、GPUなどの高度に並列化されたプロセッサ上で通常実行されている間に、カーネルは、CPU上、又は、GPU、CPU及び他のデバイスの組合せ上で分散された状態で実行されてもよいことに留意されたい。
上記の実施形態はソフトウェアを含んでもよいことに留意されたい。このような実施形態では、説明される方法及び機構を表すプログラム命令及び/又はデータベースは、一時的でない(non−transitory)コンピュータ可読記憶媒体上に格納されてもよい。プログラム命令は、任意の不揮発性メモリデバイスと共に、又は、不揮発性メモリデバイスによって用いられる機械、プロセッサ及び/又は任意の汎用コンピュータによる実行のための機械可読命令を含んでもよい。適切なプロセッサは、単なる例として、汎用プロセッサと特殊用途プロセッサとの両方を含む。
一般的に言えば、一時的でないコンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータに提供するために、使用中にコンピュータによってアクセス可能な任意の記憶媒体を含んでもよい。例えば、一時的でないコンピュータ可読記憶媒体は、磁気媒体又は光学媒体、例えば、ディスク(固定若しくはリムーバブル)、テープ、CD−ROM、DVD−ROM、CD−R、CD−RW、DVD−R、DVD−RW若しくはブルーレイなどの記憶媒体を含んでもよい。記憶媒体は、RAM(例えば、シンクロナスダイナミックRAM(SDRAM)、ダブルデータ転送速度(DDR、DDR2、DDR3など)SDRAM、低パワーDDR(LPDDR2など)SDRAM、Rambus DRAM(RDRAM)、スタティックRAM(SRAM))、ROM、USBインターフェースなどの周辺機器インターフェースを介してアクセス可能な不揮発性メモリ(例えば、フラッシュメモリ)などの、揮発性記憶媒体又は不揮発性記憶媒体をさらに含んでもよい。記憶媒体は、微小電気機械システム(MEMS)、並びに、ネットワーク及び/又は無線リンクなどの通信媒体を介してアクセス可能な記憶媒体を含んでもよい。
他の実施形態では、説明される方法及び機構を表すプログラム命令は、Verilog又はVHDLなどのハードウェア設計言語(HDL)でのハードウェア機能性の動作レベルの記述、又は、レジスタ転送レベル(RTL)の記述であってもよい。記述は、合成ライブラリからゲートのリストを含むネットリストを生成するために、記述を合成し得る合成ツールによって読み出されてもよい。ネットリストは、システムを構成するハードウェアの機能性も表す一組のゲートを含む。ネットリストは、次いで、マスクに適用されるべき幾何学的形状を記述するデータセットを生成するために、配置及びルーティングされてもよい。マスクは、次いで、システムに対応する1つ以上の半導体回路を生産するために、種々の半導体製造ステップで用いられてもよい。代替的に、コンピュータがアクセス可能な記憶媒体上のデータベースは、所望に応じてネットリスト(合成ライブラリを伴う、若しくは、伴わない)又はデータセットであってもよい。コンピュータがアクセス可能な記憶媒体は、システムの表現を搬送してもよいが、他の実施形態は、所望に応じて、IC、プログラムの任意の組(例えば、API、DLL、コンパイラ)又はプログラムの一部を含むシステムの任意の部分の表現を搬送してもよい。
本発明によって、又は、本発明と併せて用いられ得るタイプのハードウェアコンポーネント、プロセッサ又はマシンは、ASIC、FPGA、マイクロプロセッサ又は任意の集積回路を含む。こうしたプロセッサは、処理されたHDL命令(こうした命令はコンピュータ可読媒体上に格納することができる)の結果を用いて製造プロセスを構成することによって製造されてもよい。こうした処理の結果は、次いで、本明細書で説明される方法及び機構の態様を実装するプロセッサを製造するために半導体製造プロセスで用いられる、マスクワークであってもよい。
特徴及び要素が、例示的な実施形態において特定の組み合わせで説明されるが、各特徴又は要素は、例示的な実施形態の他の特徴及び要素を伴わずに単独で、又は、他の特徴及び要素を伴う若しくは伴わない種々の組み合わせで用いることができる。上記の実施形態は、実装の限定ではない単なる例であることも強調されるべきである。上記の開示が十分に認識されれば、当業者には多くの変形及び修正が明らかとなるであろう。以下の請求項は、全てのこうした変形及び修正を包含するように解釈されることが意図される。
Claims (22)
- ホストプロセッサと、
前記ホストプロセッサに結合されたターゲットプロセッサと、を備え、
前記ホストプロセッサは、
予めコンパイルされたライブラリを受信し、前記予めコンパイルされたライブラリは、前記ホストプロセッサに受信される前に、ソースコードから第1の中間表現にコンパイルされており、
前記予めコンパイルされたライブラリを、前記第1の中間表現からバイナリにコンパイルし、前記バイナリは、前記ターゲットプロセッサによって実行可能な1つ以上のカーネルを含み、
前記バイナリをメモリに格納する、ように構成されており、
前記カーネルは、前記バイナリの所与のカーネルに関する要求の検出に応じて、前記ターゲットプロセッサによる実行のために提供される、
システム。 - 前記ターゲットプロセッサによる実行のための前記カーネルの提供は、前記ターゲットプロセッサが前記カーネルを格納場所から検索すること、又は、前記ホストプロセッサが前記カーネルを前記ターゲットプロセッサに伝達することを含む、請求項1に記載のシステム。
- 前記ホストプロセッサは、オープンコンピューティング言語(OpenCL)ランタイム環境を動作させ、
前記バイナリを開くことは、前記バイナリに対応するマスターインデックステーブルを、前記ホストプロセッサのメモリにロードすることを含み、
前記バイナリから前記所与のカーネルを検索することは、前記バイナリ内の前記所与のカーネルの場所を判定するために、前記マスターインデックステーブルにおいて前記所与のカーネルを参照することを含む、請求項1に記載のシステム。 - 前記ホストプロセッサは中央処理装置(CPU)であり、前記ターゲットプロセッサはグラフィックス処理ユニット(GPU)であり、前記GPUは複数の処理要素を含む、請求項1に記載のシステム。
- 前記ソースコードは、オープンコンピューティング言語(OpenCL)で記述されている、請求項1に記載のシステム。
- 前記予めコンパイルされたライブラリを、第1の中間表現からバイナリにコンパイルすることは、前記第1の中間表現を第2の中間表現にコンパイルすることと、前記第2の中間表現を前記バイナリにコンパイルすることとを含む、請求項1に記載のシステム。
- 前記予めコンパイルされたライブラリの前記第1の中間表現は暗号化されており、
前記ホストプロセッサは、前記第1の中間表現をバイナリにコンパイルする前に、前記第1の中間表現を復号化するように構成されている、請求項1に記載のシステム。 - 前記第1の中間表現は、低レベル仮想機械(LLVM)中間表現である、請求項1に記載のシステム。
- ライブラリの中間表現を、特定のターゲットプロセッサをターゲットとするバイナリにコンパイルすることと、
カーネルに関する要求の検出に応じて、前記バイナリから前記カーネルを検索することと、
前記特定のターゲットプロセッサ上で前記カーネルを実行することと、
を含む、方法。 - 前記バイナリからカーネルを検索することは、
前記バイナリに対応するマスターインデックステーブルを前記CPUのメモリにロードすることと、
前記マスターインデックステーブルから前記カーネルに関する場所情報を検索することと、
を含む、請求項9に記載の方法。 - 前記特定のターゲットプロセッサは、グラフィックス処理ユニット(GPU)である、請求項9に記載の方法。
- 前記ライブラリは複数のカーネルを備えている、請求項9に記載の方法。
- 前記ライブラリは、オープンコンピューティング言語(OpenCL)で記述されたソースコードを含む、請求項9に記載の方法。
- 前記IRは、低レベル仮想機械(LLVM)IRを含み、
前記方法は、前記LLVM IRを中間言語(IL)表現にコンパイルすることと、前記IL表現を前記バイナリにコンパイルすることとを含む、請求項9に記載の方法。 - 前記IRは、前記カーネルに関する要求を検出する前に、バイナリにコンパイルされる、請求項9に記載の方法。
- 前記IRは、前記ターゲットプロセッサによって実行可能ではない、請求項9に記載の方法。
- プログラム命令を備えるコンピュータ可読記憶媒体であって、
前記プログラム命令は、実行されると、
予めコンパイルされたライブラリを受信し、前記予めコンパイルされたライブラリは、受信される前にソースコードから第1の中間表現にコンパイルされており、
前記予めコンパイルされたライブラリを、前記第1の中間表現からバイナリにコンパイルし、前記バイナリは、ターゲットプロセッサによって直接実行可能な1つ以上のカーネルを含み、
前記バイナリをメモリに格納し、
前記バイナリの所与のカーネルに関する要求の検出に応じて、前記バイナリを開き、前記バイナリから前記所与のカーネルを検索し、前記所与のカーネルを実行のために前記ターゲットプロセッサに提供する、
ように動作可能である、
コンピュータ可読記憶媒体。 - 前記ターゲットプロセッサは、グラフィックス処理ユニット(GPU)である、請求項17に記載のコンピュータ可読記憶媒体。
- 前記ソースコードはオープンコンピューティング言語(OpenCL)で記述されている、請求項17に記載のコンピュータ可読記憶媒体。
- 前記第1の中間表現は、前記バイナリの所与のカーネルに関する要求を検出する前に、バイナリにコンパイルされる、請求項17に記載のコンピュータ可読記憶媒体。
- 前記予めコンパイルされたライブラリを、第1の中間表現からバイナリにコンパイルすることは、前記第1の中間表現を第2の中間表現にコンパイルすることと、前記第2の中間表現を前記バイナリにコンパイルすることとを含む、請求項17に記載のコンピュータ可読記憶媒体。
- 前記第1の中間表現は、低レベル仮想機械(LLVM)中間表現である、請求項17に記載のコンピュータ可読記憶媒体。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/309,203 | 2011-12-01 | ||
US13/309,203 US20130141443A1 (en) | 2011-12-01 | 2011-12-01 | Software libraries for heterogeneous parallel processing platforms |
PCT/US2012/066707 WO2013082060A1 (en) | 2011-12-01 | 2012-11-28 | Software libraries for heterogeneous parallel processing platforms |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2015503161A true JP2015503161A (ja) | 2015-01-29 |
Family
ID=47436182
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2014544823A Pending JP2015503161A (ja) | 2011-12-01 | 2012-11-28 | ヘテロジニアス並列処理プラットフォームのためのソフトウェアライブラリ |
Country Status (6)
Country | Link |
---|---|
US (1) | US20130141443A1 (ja) |
EP (1) | EP2786250A1 (ja) |
JP (1) | JP2015503161A (ja) |
KR (1) | KR20140097548A (ja) |
CN (1) | CN104011679A (ja) |
WO (1) | WO2013082060A1 (ja) |
Families Citing this family (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101332840B1 (ko) * | 2012-01-05 | 2013-11-27 | 서울대학교산학협력단 | 병렬 컴퓨팅 프레임워크 기반의 클러스터 시스템, 호스트 노드, 계산 노드 및 어플리케이션 실행 방법 |
US9069549B2 (en) | 2011-10-12 | 2015-06-30 | Google Technology Holdings LLC | Machine processor |
US20130103931A1 (en) * | 2011-10-19 | 2013-04-25 | Motorola Mobility Llc | Machine processor |
US9348676B2 (en) * | 2012-01-05 | 2016-05-24 | Google Technology Holdings LLC | System and method of processing buffers in an OpenCL environment |
US9448823B2 (en) | 2012-01-25 | 2016-09-20 | Google Technology Holdings LLC | Provision of a download script |
US9164735B2 (en) * | 2012-09-27 | 2015-10-20 | Intel Corporation | Enabling polymorphic objects across devices in a heterogeneous platform |
KR20140054948A (ko) * | 2012-10-30 | 2014-05-09 | 한국전자통신연구원 | 임베디드 시스템을 위한 오픈씨엘 응용 소프트웨어 개발 지원 도구 구성 및 방법 |
US9411715B2 (en) * | 2012-12-12 | 2016-08-09 | Nvidia Corporation | System, method, and computer program product for optimizing the management of thread stack memory |
US9632761B2 (en) * | 2014-01-13 | 2017-04-25 | Red Hat, Inc. | Distribute workload of an application to a graphics processing unit |
CN104866295B (zh) * | 2014-02-25 | 2018-03-06 | 华为技术有限公司 | OpenCL运行时系统框架的设计方法及装置 |
US9710245B2 (en) * | 2014-04-04 | 2017-07-18 | Qualcomm Incorporated | Memory reference metadata for compiler optimization |
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 |
US9740464B2 (en) * | 2014-05-30 | 2017-08-22 | Apple Inc. | Unified intermediate representation |
CN104331302B (zh) * | 2014-09-29 | 2018-10-02 | 华为技术有限公司 | 一种应用更新方法、移动终端和通信系统 |
US10719303B2 (en) * | 2015-06-07 | 2020-07-21 | Apple Inc. | Graphics engine and environment for encapsulating graphics libraries and hardware |
WO2017035497A1 (en) * | 2015-08-26 | 2017-03-02 | Pivotal Software, Inc. | Database acceleration through runtime code generation |
CN108536644B (zh) * | 2015-12-04 | 2022-04-12 | 格兰菲智能科技有限公司 | 由装置端推核心入队列的装置 |
KR101936950B1 (ko) * | 2016-02-15 | 2019-01-11 | 주식회사 맴레이 | 컴퓨팅 디바이스, 코프로세서와 비휘발성 메모리 사이의 데이터 이동 방법 및 이를 포함하는 프로그램 |
US10545739B2 (en) | 2016-04-05 | 2020-01-28 | International Business Machines Corporation | LLVM-based system C compiler for architecture synthesis |
US9947069B2 (en) | 2016-06-10 | 2018-04-17 | Apple Inc. | Providing variants of digital assets based on device-specific capabilities |
KR102592330B1 (ko) * | 2016-12-27 | 2023-10-20 | 삼성전자주식회사 | OpenCL 커널을 처리하는 방법과 이를 수행하는 컴퓨팅 장치 |
CN108228189B (zh) * | 2018-01-15 | 2020-07-28 | 西安交通大学 | 一种隐藏异构编程多线程的关联结构及基于其的映射方法 |
KR102228586B1 (ko) * | 2018-01-19 | 2021-03-16 | 한국전자통신연구원 | Gpu 기반의 적응적 blas 연산 가속화 장치 및 방법 |
US10467724B1 (en) * | 2018-02-14 | 2019-11-05 | Apple Inc. | Fast determination of workgroup batches from multi-dimensional kernels |
CN111124594B (zh) * | 2018-10-31 | 2023-04-07 | 杭州海康威视数字技术股份有限公司 | 容器运行方法、装置、异构gpu服务器及容器集群系统 |
CN109727376B (zh) * | 2018-12-29 | 2022-03-04 | 北京沃东天骏信息技术有限公司 | 生成配置文件的方法、装置及售货设备 |
US11144290B2 (en) * | 2019-09-13 | 2021-10-12 | Huawei Technologies Co., Ltd. | Method and apparatus for enabling autonomous acceleration of dataflow AI applications |
US20210103433A1 (en) * | 2019-10-02 | 2021-04-08 | Nvidia Corporation | Kernel fusion for machine learning |
WO2021174538A1 (zh) * | 2020-03-06 | 2021-09-10 | 深圳市欢太科技有限公司 | 应用处理方法及相关装置 |
CN111949329B (zh) * | 2020-08-07 | 2022-08-02 | 苏州浪潮智能科技有限公司 | 基于x86架构的AI芯片任务处理方法和装置 |
US12020075B2 (en) | 2020-09-11 | 2024-06-25 | Apple Inc. | Compute kernel parsing with limits in one or more dimensions with iterating through workgroups in the one or more dimensions for execution |
WO2021101643A2 (en) * | 2020-10-16 | 2021-05-27 | Futurewei Technologies, Inc. | Cpu-gpu lockstep system |
CN114003932A (zh) * | 2021-11-02 | 2022-02-01 | 北京奇艺世纪科技有限公司 | 字符串字面量的处理方法、装置、电子设备和存储介质 |
CN114783545B (zh) * | 2022-04-26 | 2024-03-15 | 南京邮电大学 | 基于gpu加速的分子对接方法和装置 |
CN116861470B (zh) * | 2023-09-05 | 2024-01-26 | 苏州浪潮智能科技有限公司 | 加解密方法、装置、计算机可读存储介质和服务器 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7814486B2 (en) * | 2006-06-20 | 2010-10-12 | Google Inc. | Multi-thread runtime system |
US8479177B2 (en) * | 2009-05-20 | 2013-07-02 | Microsoft Corporation | Attribute based method redirection |
EP2336882A1 (en) * | 2009-12-18 | 2011-06-22 | Telefonaktiebolaget L M Ericsson (PUBL) | Technique for run-time provision of executable code using off-device services |
US8473933B2 (en) * | 2010-05-12 | 2013-06-25 | Microsoft Corporation | Refactoring call sites |
US8723877B2 (en) * | 2010-05-20 | 2014-05-13 | Apple Inc. | Subbuffer objects |
US8933954B2 (en) * | 2011-03-23 | 2015-01-13 | Qualcomm Incorporated | Register allocation for graphics processing |
US8566537B2 (en) * | 2011-03-29 | 2013-10-22 | Intel Corporation | Method and apparatus to facilitate shared pointers in a heterogeneous platform |
US8935683B2 (en) * | 2011-04-20 | 2015-01-13 | Qualcomm Incorporated | Inline function linking |
-
2011
- 2011-12-01 US US13/309,203 patent/US20130141443A1/en not_active Abandoned
-
2012
- 2012-11-28 CN CN201280064759.5A patent/CN104011679A/zh active Pending
- 2012-11-28 WO PCT/US2012/066707 patent/WO2013082060A1/en active Application Filing
- 2012-11-28 JP JP2014544823A patent/JP2015503161A/ja active Pending
- 2012-11-28 EP EP12806746.9A patent/EP2786250A1/en not_active Withdrawn
- 2012-11-28 KR KR1020147018267A patent/KR20140097548A/ko not_active Application Discontinuation
Also Published As
Publication number | Publication date |
---|---|
KR20140097548A (ko) | 2014-08-06 |
EP2786250A1 (en) | 2014-10-08 |
US20130141443A1 (en) | 2013-06-06 |
CN104011679A (zh) | 2014-08-27 |
WO2013082060A1 (en) | 2013-06-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2015503161A (ja) | ヘテロジニアス並列処理プラットフォームのためのソフトウェアライブラリ | |
US10372431B2 (en) | Unified intermediate representation | |
US8683468B2 (en) | Automatic kernel migration for heterogeneous cores | |
Harvey et al. | Swan: A tool for porting CUDA programs to OpenCL | |
US9841958B2 (en) | Extensible data parallel semantics | |
JP5906325B2 (ja) | トランザクションをサポートするコンピューターアーキテクチャにおけるコード特殊化のための例外を用いるプログラム及びコンピューティングデバイス | |
KR20230013277A (ko) | 바이너리 변환을 수행하기 위한 시스템들 및 방법들 | |
Mikushin et al. | KernelGen--The Design and Implementation of a Next Generation Compiler Platform for Accelerating Numerical Models on GPUs | |
Gschwind et al. | An open source environment for cell broadband engine system software | |
Gohringer et al. | RAMPSoCVM: runtime support and hardware virtualization for a runtime adaptive MPSoC | |
US11281495B2 (en) | Trusted memory zone | |
US20120272210A1 (en) | Methods and systems for mapping a function pointer to the device code | |
Chang et al. | Enabling PoCL-based runtime frameworks on the HSA for OpenCL 2.0 support | |
Bauer et al. | Programmable hsa accelerators for zynq ultrascale+ mpsoc systems | |
Lonardi et al. | On the Co-simulation of SystemC with QEMU and OVP Virtual Platforms | |
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 | |
Oden et al. | Implementation and Evaluation of CUDA-Unified Memory in Numba | |
Larsen et al. | Jacket: GPU powered MATLAB acceleration | |
Hanlon | Final Year Project Report | |
Rele | Processor Options | |
Simpson et al. | High Level Design |