JP2015038770A - 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有 - Google Patents

計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有 Download PDF

Info

Publication number
JP2015038770A
JP2015038770A JP2014216090A JP2014216090A JP2015038770A JP 2015038770 A JP2015038770 A JP 2015038770A JP 2014216090 A JP2014216090 A JP 2014216090A JP 2014216090 A JP2014216090 A JP 2014216090A JP 2015038770 A JP2015038770 A JP 2015038770A
Authority
JP
Japan
Prior art keywords
gpu
cpu
shared
virtual
vtable
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2014216090A
Other languages
English (en)
Other versions
JP5902273B2 (ja
Inventor
イエン,ショウムオン
Shoumeng Yan
ルオ,サイ
Sai Luo
ジョウ,シヤオチュヨン
Xiaocheng Zhou
ガオ,イーン
Ying Gao
チェン,ホゥ
Hu Chen
サハ,ブラティン
Bratin Saha
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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Priority to JP2014216090A priority Critical patent/JP5902273B2/ja
Publication of JP2015038770A publication Critical patent/JP2015038770A/ja
Application granted granted Critical
Publication of JP5902273B2 publication Critical patent/JP5902273B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Multi Processors (AREA)

Abstract

【課題】計算プラットフォームのヘテロジニアスプロセッサ間で共有されるバーチャルメモリにおけるバーチャル機能の共有技術を提供する。【解決手段】CPU110から共有オブジェクト131にアクセスするのに利用されるCPUサイドvtableポインタは、GPUサイドテーブルが存在する場合GPU_vtableを決定するのに利用される。データ一貫性を維持しない共有非コヒーラント領域が共有バーチャルメモリ内に生成される。共有非コヒーラント領域内に格納されるCPU及びGPUサイドデータは、CPU及びGPUサイドから参照されるような同一のアドレスを有する。CPUサイドデータのコンテンツは、共有バーチャルメモリ130がランタイム中に一貫性を維持しないため、GPUサイドデータのものと異なる。vptrは、共有バーチャルメモリ130に格納されているCPU_vtable及びGPU_vtableを指示するよう変更される。【選択図】図1

Description

本発明は、バーチャルメモリに関する。
計算プラットフォームは、CPU(Central Processing Unit)とGPU(Graphics Processing Unit)、シンメトリックプロセッサとアシンメトリックプロセッサなどのヘテロジニアスプロセッサを含むかもしれない。クラスインスタンス(又はオブジェクト)は、CPU−GPUプラットフォームの第1サイド(CPUなど)に関する第1メモリにあるかもしれない。第2サイド(GPUサイド)は、CPU−GPUプラットフォームの第1サイド(CPUサイド)に関する第1メモリにあるオブジェクト及び関連するメンバ関数を呼び出すことが有効とされていないかもしれない。また、第1サイドは、第2サイド(GPUサイド)上の第2メモリにあるオブジェクト及び関連するメンバ関数を呼び出すことが有効とされていないかもしれない。クラスインスタンス又はオブジェクトが異なるアドレススペースに格納されているとき、既存の通信機構は、単にヘテロジニアスプロセッサ(CPU及びGPU)の間の一方向通信がクラスインスタンス及び関連するバーチャル関数を呼び出すことしか可能にしないかもしれない。
このような一方向通信アプローチは、ヘテロジニアスプロセッサの間のクラスインスタンスの自然な機能分割を妨げる。オブジェクトは、スループット指向メンバ関数といくつかのスカラメンバ関数を有する。例えば、ゲームアプリケーションのシーンクラスは、GPUに適したレンダリング関数を有し、さらにCPU上の実行に適した物理及び人工知能(AI)関数を有するかもしれない。現在の一方向通信機構では、典型的には、CPU(上記の例における物理及び人工知能)メンバ関数とGPU(GPUに適したレンダリング関数)メンバ関数をそれぞれ有する2つの異なるシーンクラスである必要がある。CPUのための1つとGPUのための1つとの2つの異なるシーンクラスを有することは、データが2つのシーンクラスの間で互いにコピーされることを要求するかもしれない。
上述した問題点を鑑み、本発明の課題は、計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有のための技術を提供することである。
上記課題を解決するため、本発明の一態様は、
計算プラットフォームにおける方法であって、
複数のバーチャル関数を含む共有オブジェクトを生成するステップと、
前記共有オブジェクトを共有バーチャルメモリに格納するステップと、
第1プロセッサと第2プロセッサとの間で前記複数のバーチャル関数の少なくとも1つを共有するステップと、
を有し、
前記計算プラットフォームは、前記第1プロセッサと前記第2プロセッサとを含み、
前記第1プロセッサと前記第2プロセッサとはヘテロジニアスプロセッサである方法に関する。
本発明の他の態様は、
実行されることに応答して、
複数のバーチャル関数を含む共有オブジェクトを生成するステップと、
前記共有オブジェクトを共有バーチャルメモリに格納するステップと、
第1プロセッサと第2プロセッサとの間で前記複数のバーチャル関数の少なくとも1つを共有するステップと、
をプロセッサに実行させる複数の命令を有するマシーン可読記憶媒体であって、
前記計算プラットフォームは、前記第1プロセッサと前記第2プロセッサとを有し、
前記第1プロセッサと前記第2プロセッサとは、ヘテロジニアスプロセッサであるマシーン可読記憶媒体に関する。
本発明の他の態様は、
第1コンパイラに接続される第1プロセッサと、第2コンパイラに接続される第2プロセッサとを有する複数のヘテロジニアスプロセッサを有する装置であって、
前記第1コンパイラは、前記第1プロセッサに割り当てられた第1バーチャルメンバ関数と、前記第2プロセッサに割り当てられた第2バーチャルメンバ関数とを含む共有オブジェクトを生成し、
前記第1プロセッサは、複数のバーチャル関数を含む共有オブジェクトを生成し、前記共有オブジェクトを共有バーチャルメモリに格納し、前記複数のバーチャル関数の少なくとも1つを第2プロセッサと共有する装置に関する。
本発明によると、計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有のための技術を提供することができる。
図1は、一実施例によるコンピュータプラットフォームに備えられるヘテロジニアスプロセッサの間で共有されるバーチャルメモリに格納されるバーチャル関数の共有をサポートするプラットフォーム100を示す。 図2は、一実施例によるコンピュータプラットフォームに備えられるヘテロジニアスプロセッサの間で共有されるバーチャルメモリに格納されるバーチャル関数の共有をサポートするプラットフォーム100により実行される処理を示すフローチャートである。 図3は、一実施例による共有オブジェクトからバーチャル関数ポインタをロードするためのCPUサイド及びGPUサイドのコードを示す。 図4は、第1実施例によるコンピュータプラットフォームに備えられるヘテロジニアスプロセッサの間で共有されるバーチャルメモリに格納されるバーチャル関数の共有をサポートするためのテーブルを生成するため、プラットフォーム100により実行される処理を示すフローチャートである。 図5は、一実施例によるヘテロジニアスプロセッサにより共有されるオブジェクトのメンバ関数を介しCPU110とGPU180との間の双方向通信をサポートするためプラットフォーム100により利用されるフロー図を示す。 図6は、第1実施例によるCPUサイドにより行われるGPUバーチャル関数及びGPU関数のコールの処理を示すフロー図を示す。 図7は、一実施例によるヘテロジニアスプロセッサの間のバーチャル関数の共有をサポートするバーチャルな共有非コヒーラント領域を利用するため、プラットフォーム100により実行される処理を示すフローチャートである。 図8は、一実施例によるヘテロジニアスプロセッサの間のバーチャル関数の共有をサポートするためバーチャル共有非コヒーラント領域の利用を示す関係図である。 図9は、一実施例によるコンピュータプラットフォームに備えられるヘテロジニアスプロセッサの間で共有されるバーチャルメモリに格納されるバーチャル関数を共有するためのサポートを提供するコンピュータシステムを示す。
ここに開示される本発明が、添付した図面により限定することなく例示的に説明される。説明の簡単化のため、図面に示される要素は、必ずしもスケーリングして示されていない。例えば、いくつかの要素の大きさは、簡単化のため他の要素に対して誇張されるかもしれない。さらに、適切であると考えられる場合、対応する又は類似する要素を示す参照番号は、図面において繰り返されている。
以下の説明は、計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリに格納されるバーチャル関数を共有するための技術を説明する。以下の説明では、ロジック実現形態、リソース分割、共有、重複実現形態、システムコンポーネントのタイプ及び相互関係、及びロジック分割若しくは統合選択などの多数の具体的詳細が、本発明のより完全な理解を提供するため提供される。しかしながら、本発明がこのような具体的詳細なしに実現可能であることは当業者に理解されるであろう。他の例では、本発明を不明りょうにしないため、制御構成、ゲートレベル回路及びフルソフトウェア命令シーケンスは、詳細には説明されない、当業者は、含まれている説明によって、過度な実験なしに適切な機能を実現可能であろう。
明細書における“一実施例”、“実施例”、“一例となる実施例”という表現は、説明された実施例が特定の特徴、構成又は特性を含むが、すべての実施例が必ずしも当該特徴、構成又は特性を含む必要がないことを示す。さらに、このような表現は、必ずしも同一の実施例を参照しているとは限らない。さらに、特定の特徴、構成又は特性が実施例に関して説明されているとき、明示的に説明されているか否かに関係なく、他の実施例に関してこのような特徴、構成又は特性に影響を与えることが当業者の知識の範囲内であることが主張される。
本発明の実施例は、ハードウェア、ファームウェア、ソフトウェア又はこれらの何れかの組み合わせにより実現されてもよい。本発明の実施例はまた、1以上のプロセッサにより読み込まれ、実行されるマシーン可読媒体に格納される命令として実現されてもよい。マシーン可読記憶媒体は、マシーン(計算装置など)により可読な形式により情報を格納又は送信するための何れかの機構を含むものであってもよい。
例えば、マシーン可読記憶媒体は、ROM(Read Only Memory)、RAM(Random Access Memory)、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリデバイス、電気又は光形態の信号を含むものであってもよい。さらに、ファームウェア、ソフトウェア、ルーチン及び命令は、特定のアクションを実行するとしてここでは説明される。しかしながら、このような説明は単に便宜的なものであり、このようなアクションは実際には、計算装置、プロセッサ、コントローラ及び他の装置がファームウェア、ソフトウェア、ルーチン及び命令を実行することにより生じることが理解されるべきである。
一実施例では、計算プラットフォームは、共有されるオブジェクトを詳細に分割することによって、共有オブジェクトのバーチャル関数などのメンバ関数を介しヘテロジニアスプロセッサ(CPUとGPUなど)の間の双方向通信(関数コール)を可能にするための1以上の技術をサポートするものであってもよい。一実施例では、計算プラットフォームは、“テーブルベース”技術として参照される第1技術を用いて、CPUとGPUとの間の双方向通信を可能にするものであってもよい。他の実施例では、計算プラットフォームは、バーチャル共有非コヒーラント領域がバーチャル共有メモリにおいて生成される“非コヒーラント領域”技術として参照される第2技術を用いて、CPUとGPUとの間の双方向通信を可能にするものであってもよい。
一実施例では、テーブルベース技術の利用中、CPUからGPUサイドに共有オブジェクトにアクセスするのに利用可能な共有オブジェクトのCPUサイドvtableポインタが、GPUサイドテーブルが存在する場合、GPU vtableを決定するのに利用されてもよい。一実施例では、GPUサイドvtableは、<“className”,CPU vtable addr,GPU vtable addr>を含むものであってもよい。一実施例では、GPUサイドvtableアドレスを取得し、GPUサイドテーブルを生成するための技術が、以下において詳細に説明される。
他の実施例では、非コヒーラント領域技術の利用中、共有非コヒーラント領域が共有バーチャルメモリ内に生成される。一実施例では、共有非コヒーラント領域は、データ一貫性を維持しないかもしれない。一実施例では、共有非コヒーラント領域内のCPUサイドデータとGPUサイドデータとは、CPUサイドとGPUサイドから観察されるように同一のアドレスを有してもよい。しかしながら、共有バーチャルメモリはランタイム中にコヒーレンシを維持しなくてもよいため、CPUサイドデータのコンテンツは、GPUサイドデータのものと異なるものであってもよい。一実施例では、共有非コヒーラント領域は、共有される各クラスについてバーチャルメソッドテーブルの新たなコピーを格納するのに利用されてもよい。一実施例では、このようなアプローチは、同一のアドレスにおいてバーチャルテーブルを維持するようにしてもよい。
図1において、CPUとGPUなどのヘテロジニアスプロセッサの間で共有されるバーチャル共有メモリにおけるバーチャル関数を提供する計算プラットフォーム100の実施例が説明される。一実施例では、プラットフォーム100は、CPU110、CPU110に関連するオペレーティングシステム(OS)112、CPUプライベートスペース115、CPUコンパイラ118、共有バーチャルメモリ(又はマルチバージョン共有メモリ)130、GPU180、GPU180に関するオペレーティングシステム(OS)182、GPUプライベートスペース185、及びGPUコンパイラ188を有する。一実施例では、OS112及びOS182はそれぞれ、CPU110及びCPUプライベートスペース115と、GPU180及びGPUプライベートスペース185とのリソースを管理する。一実施例では、共有バーチャルメモリ130をサポートするため、CPUプライベートスペース115及びGPUプライベートスペース185、マルチバージョンデータのコピーを有する。一実施例では、メモリ一貫性を維持するため、オブジェクト131などのメタデータが、CPUプライベートスペース115及びGPUプライベートスペース185に格納されているコピーを同期するのに利用されてもよい。他の実施例では、マルチバージョンデータが、共有メモリ950(後述される図9の)などの物理的共有メモリに格納されてもよい。一実施例では、共有バーチャルメモリは、ヘテロジニアスプロセッサCPU110,GPU180のCPUプライベートスペース115及びGPUプライベートスペース185などの物理的なプライベートメモリスペース、又はヘテロジニアスプロセッサにより共有される共有メモリ950などの物理的共有メモリによりサポートされてもよい。
一実施例では、CPUコンパイラ118及びGPUコンパイラ188はそれぞれ、CPU110及びGPU180に接続されるか、又は他のプラットフォーム若しくはコンピュータシステムにリモートに備えられてもよい。CPU110に関連するコンパイラ118は、CPU110のためのコンパイルされたコードを生成し、GPU180に関連するコンパイラ188は、GPU180のためのコンパイルされたコードを生成してもよい。一実施例では、CPUコンパイラ118及びGPUコンパイラ188は、オブジェクト指向言語などのハイレベル言語によりユーザにより提供されるオブジェクトの1以上のメンバ関数をコンパイルすることによって、コンパイルされたコードを生成するようにしてもよい。一実施例では、コンパイラ118,188は、共有メモリ130にオブジェクトを格納し、共有オブジェクト131は、CPUサイド110又はGPUサイド180に配分されたメンバ関数を有してもよい。一実施例では、共有メモリ130に格納されている共有オブジェクト131は、バーチャル関数VF133−A〜133−Kや非バーチャル関数NVF136−A〜136−Lなどのメンバ関数を有してもよい。一実施例では、CPU110とGPU180との間の双方向通信は、共有オブジェクト131のVF133やNVF136などのメンバ関数により提供されてもよい。
一実施例では、動的なバインディング目標を達成するため、VF133−A(例えば、C++バーチャル関数など)などのバーチャル関数が、バーチャル関数テーブル(vtable)をインデックス化することを介し、CPU110又はGPU180によりコールされてもよい。一実施例では、バーチャル関数テーブルは、共有オブジェクト131の隠しポインタにより示されてもよい。しかしながら、CPU110及びGPU180は、異なる命令セットアーキテクチャ(ISA)を有してもよく、異なるISAを有するCPU110,GPU180に対して関数がコンパイルされている間、コンパイラ118,188によりコンパイルされる同一の関数を表すコードは、異なるサイズを有してもよい。同じ方法によりGPUサイドとCPUサイド上でコードをレイアウトすることは困難であるかもしれない(すなわち、共有クラスのバーチャル関数のCPUバージョンと、共有クラスの同一のバーチャル関数のGPUバージョン)。共有クラスFoo()に3つのバーチャル関数がある場合、コードのCPUバージョンでは、関数はアドレスA1,A2,A3に配置されてもよい。しかしながら、コードのGPUバージョンでは、関数は、A1,A2,A3と異なるものであってもよいアドレスB1,B2,B3に配置されてもよい。共有クラスにおける同一の関数のためのCPUサイドとGPUサイドとの異なるアドレス位置は、共有オブジェクト(すなわち、共有クラスのインスタンス)が2つのvtable(第1vtable及び第2vtable)を要求するかもしれない。第1vtableは、関数のCPUサイドバージョンのアドレス(A1,A2,A3)を有し、オブジェクトがCPUサイドにおいて利用されている間(又はCPUサイド関数を呼び出すため)、利用されてもよい。第2vtableは、関数のGPUバージョンのアドレス(B1,B2,B3)を有し、第2vtableは、オブジェクトがGPUサイドにおいて利用されている間(又はGPUサイド関数を呼び出すため)、利用されてもよい。
一実施例では、CPU110とGPU180との間で共有されるバーチャルメモリに格納されているバーチャル関数の共有は、第1及び第2vtableを共有オブジェクト131に関連付けることによって可能とされてもよい。一実施例では、CPUサイドとGPUサイドとの双方においてバーチャル関数コールに利用可能な共通のvtableが、共有オブジェクト131の第1及び第2vtableを関連付けることによって生成されてもよい。
図2のフローチャートにおいて、共有バーチャルメモリに格納されているバーチャル関数を共有するヘテロジニアスプロセッサCPU110,GPU180の実施例が示される。ブロック210において、CPU110などの第1プロセッサは、共有オブジェクト131の第1プロセッササイドvtableポインタ(CPUサイドvtableポインタ)を特定する。一実施例では、CPUサイドvtableポインタは、共有オブジェクト131がCPUサイド又はGPUサイドによりアクセスされるか否かに関係なく、共有オブジェクト131について存在してもよい。
一実施例では、CPU専用環境などの計算システムにおける通常のバーチャル関数コールについて、コードシーケンスが、図3のブロック310において示される。一実施例では、ヘテロジニアスプロセッサを含む100などの計算システムにおいてさえ、通常のバーチャル関数コールのCPUサイドコードシーケンスは、図3のブロック310に示されるものと同一であってもよい。ブロック310に示されるように、ライン301のコードMov r1,[obj]は、変数r1に共有オブジェクト131のvtableをロードする。ライン305のコード(Call*[r1+offsetFunction])は、共有オブジェクト131のVF133−Aなどのバーチャル関数を呼び出すものであってもよい。
ブロック250において、GPU180などの第2プロセッサは、共有オブジェクト131の第1プロセッササイドのvtableポインタ(CPUサイドvtableポインタ)を利用して、第2プロセッササイドテーブル(GPUテーブル)が存在する場合、第2プロセッササイドvtable(GPUサイドvtable)を決定する。一実施例では、第2プロセッササイドテーブル(GPUテーブル)は、<“className”,first processor side vtable address,second processor side vtable address>を含むものであってもよい。
一実施例では、GPUサイドにおいて、GPU180は、ブロック310に示されるコードシーケンスと異なるものであってもよいブロック350に示されるコードシーケンスを生成するものであってもよい。一実施例では、GPUコンパイラ188はタイプからすべての共有可能なクラスを認識しているため、GPU180は、共有オブジェクト131などの共有オブジェクトからバーチャル関数ポインタをロードするため、ブロック350に示されるコードシーケンスを生成可能である。一実施例では、ライン351のコードMov r1,[obj]はCPUのvtable addrをロードし、ライン353のコードR2=getVtableAddress(r1)は、GPUテーブルからGPUvtableを取得してもよい。一実施例では、ライン358のコード(Call*[r2+offsetFunction])は、CPUvtableアドレスを用いて生成されるGPUvtableに基づきバーチャル関数をコールしてもよい。一実施例では、getVtableAddress関数は、CPUサイドvtableアドレスを用いて、GPUサイドvtableを決定するためにGPUテーブルにインデックス化するようにしてもよい。
ブロック280において、第1プロセッサ(CPU110)及び第2プロセッサ(GPU180)は、共有オブジェクト131を用いた双方向通信のため可能とされてもよい。
図4のフローチャートを用いてGPUテーブルを生成する実施例が説明される。ブロック410において、テーブルは、一実施例では、共有可能なクラス(共有オブジェクト131)のレジストレーション関数への関数ポインタを初期化セクション(MS C++のためのCRT$XCIセクションなど)に含めることによって、初期化時間中に生成可能である。例えば、共有可能クラスのレジストレーション関数は、MS CRT$XCIセクションの初期化セクションに含まれてもよい。
ブロック420において、レジストレーション関数は、初期化時間中に実行されてもよい。レジストレーション関数への関数ポインタを初期化セクションに含めた結果として、レジストレーション関数は、初期化セクションの実行中に実行されてもよい。
ブロック430において、第1プロセッササイド(CPUサイド)上で、レジストレーション関数は、“className”及び“CPU vtable addr”を第1テーブルに登録する。ブロック440において、第2プロセッササイド(GPUサイド)上で、レジストレーション関数は、“className”及び“GPU vtable addr”を第2テーブルに登録する。
ブロック480において、第1テーブルと第2テーブルとが、1つの共通のテーブルにマージされる。例えば、第1テーブルと第2テーブルとが同一の“className”を有する場合、第1テーブルの第1エントリは、第2テーブルの第1エントリと合成されてもよい。マージの結果として、第1テーブルと第2テーブルの合成されたエントリは、単一のclassNameを有する1つのエントリとして現れる。一実施例では、共通のテーブルはGPUサイドにあり、共通のテーブル又はGPUテーブルは、“className”、CPU vtable addr及びGPU vtable addrを含むものであってもよい。
一実施例では、共通のテーブル又はGPUテーブルの作成は、CPUサイド及びGPUサイドにおけるvtableアドレスを一致させる要求を回避してもよい。また、GPUテーブルは、DLL(Dynamic Linked Library)をサポートしてもよい。一実施例では、クラスは、共有オブジェクト131がGPUサイドにおいて初期化又は利用される前に、CPUサイドにロードされてもよい。しかしながら、アプリケーションはCPUサイドに一般にロードされるため、GPUテーブルは、アプリケーション及びSLL(Statically Linked Library)に規定されるクラスについて、CPU110とGPU180との間の双方向通信を可能にする。DLLについて、DLLはCPUサイドにロードされ、GPUテーブルはDLLの双方向通信に利用されてもよい。
共有可能なオブジェクト131は、CPUサイドvtableを有し、GPUサイドvtableのための余分なvtableポインタを有さなくてもよい。一実施例では、インオブジェクトCPU vtableポインタを利用して、GPU vtableポインタは、ブロック350及び図4に示されるように生成されてもよい。一実施例では、GPUサイドでGPU vtableポインタがバーチャル関数コールのために利用される間、CPUサイドのCPU vtableポインタは、そのまま利用されてもよい。一実施例では、そのようなアプローチは、リンカ/ローダの変更又は関与を伴わず、共有オブジェクト131の余分なvptrポインタフィールドを要求しない。このようなアプローチは、CPU110とGPU180との間のオブジェクト指向言語により記述されたアプリケーションの詳細な分割を可能にする。
図5において、ヘテロジニアスプロセッサにより共有されるオブジェクトのメンバ関数を介しCPU110とGPU180との間の双方向通信をサポートするため、計算プラットフォーム100により利用されるフロー図の実施例が示される。一実施例では、GPUコンパイラ188は、GPU関数のためのCPUスタブ510と、CPUサイド110上のCPUリモートコールAPI520とを生成する。また、GPUコンパイラ188は、第1メンバ関数のためのGPUサイド180のGPU関数のためのGPUサイドグルーイングロジック(gluing logic)530を生成する。一実施例では、CPU110は、第1パスの第1イネーブリングパス(スタブロジック510、API520及びグルーイングロジック530を有する)を用いて、第1メンバ関数へのコールを生成してもよい。一実施例では、第1イネーブリングパスは、CPU110がGPUサイド180とのリモートコールを確立し、CPUサイド110からGPUサイド180に情報を伝送することを可能にする。一実施例では、GPUサイドグルーイングロジック530は、GPU180がCPUサイド110から伝送される情報を受信することを可能にする。
一実施例では、CPUスタブ510は、第1メンバ関数(すなわち、オリジナルGPUメンバ関数)と同じ名前を有するが、CPU110からのコールをGPU180に導くため、API520を含むものであってもよい。一実施例では、CPUコンパイラ118により生成されるコードは、第1メンバ関数をそのままコールするが、当該コールはCPUスタブ510及びリモートコールAPI520にリダイレクトされてもよい。また、リモートコールの作成中、CPUスタブ510は、第1メンバ関数がコールされていることを表す一意的な名前、共有オブジェクトへのポインタ、及びコールされた第1メンバ関数の他の引数を送信してもよい。一実施例では、GPUサイドのグルーイングロジック530は、引数を受信し、第1メンバ関数コールをディスパッチする。一実施例では、GPUコンパイラ188は、第1パラメータとしてわたされたオブジェクトポインタにより第1メンバ関数のGPUサイド関数アドレスをコールすることによって、非バーチャル関数をディスパッチするグルーイングロジック(又はディスパッチャ)を生成する。一実施例では、GPUコンパイラ188は、CPUスタブ510がGPUサイドのグルーイングロジック530と通信することを可能にするため、GPUサイドグルーイングロジック530を登録するためGPUサイドにおいてジャンプテーブルレジストレーションコールを生成する。
一実施例では、GPUコンパイラ188は、CPU関数のためのGPUスタブ550、GPUサイド180上のGPUリモートコールAPI570及びCPU110に配分された第2メンバ関数のためのCPUサイドグルーイングロジック580を有する第2イネーブリングパスを生成する。一実施例では、GPU180は、第2イネーブリングパスを用いてCPUサイド110に対するコールを作成する。一実施例では、GPUスタブ560及びAPI570は、GPU180がCPUサイド110とのリモートコールを確立し、GPUサイド180からの情報をCPUサイド110に伝送することを可能にする。一実施例では、CPUサイドグルーイングロジック580は、CPU110がGPUサイド180から伝送された情報を受信することを可能にする。
一実施例では、第2メンバ関数コールをサポートするため、GPUコンパイラ188は、CPUサイドグルーイングロジック580のためのジャンプテーブルレジストレーションを生成する。一実施例では、第2メンバ関数のCPUサイド関数アドレスが、CPUグルーイングロジック580においてコールされる。一実施例では、CPUグルーイングロジック580により生成されるコードは、CPUコンパイラ118により生成される他のコードとリンクされてもよい。このようなアプローチは、ヘテロジニアスプロセッサ110と180との間の双方向通信をサポートするためのパスを提供する。一実施例では、CPUスタブロジック510及びCPUサイドグルーイングロジック580は、CPUリンカ590を介しCPU110に接続されてもよい。一実施例では、CPUリンカ590は、CPUスタブ510、CPUサイドグルーイングロジック580及びCPUコンパイラ118により生成される他のコードを用いて、CPUエグゼキュータブル(CPU executable)595を生成する。一実施例では、GPUスタブロジック560及びGPUサイドグルーイングロジック570は、GPUリンカ540を介しGPU180に接続される。一実施例では、GPUリンカ540は、GPUグルーイングロジック570、GPUスタブ560及びGPUコンパイラ188により生成される他のコードを用いて、GPUエグゼキュータブル(GPU executable)545を生成する。
図6において、上述したテーブルベース技術を用いてGPUバーチャル関数とGPU非バーチャル関数とがCPUサイド110によりコールされるフロー図600の実施例が示される。ブロック610は、バーチャル関数(例えば、VF133−Aなど)とバーチャル関数コール“Virtual void SomeVirtFunc()”とを注釈付けする第1アノテーションタグ#Pragma GPUと、非バーチャル関数(例えば、NVF136−Aなど)と非バーチャル関数コール“void SomeNonVirtuFunc()”とを注釈付けする第2アノテーションタグ#Pragma GPUとを含む共有クラスインスタンス又は共有クラスFoo()のタイトルのオブジェクトを有して示される。
一実施例では、“pFoo”は、クラスFoo()の共有オブジェクト131を指定し、CPUサイド110からGPUサイド180へのリモートバーチャル関数コールが完了する。一実施例では、“pFoo()=new(Shared MemoryAllocator())Foo();”は、共有されたメモリ割当て/リリースランタイムコールにより新たなオペレータを上書き又は削除するための1つの可能な方法である。一実施例では、CPUコンパイラ118は、ブロック610における“pFoo→SomeVirtuFunc()”のコンパイルに応答して、ブロック620に示されるタスクを開始する。
ブロック620において、CPUサイド110は、GPUバーチャル関数をコールする。ブロック630において、CPUサイドスタブ(GPUメンバ関数のための)510及びAPI520は、GPUサイド180に情報(引数)を送信する。ブロック640において、GPUサイドグルーイングロジック(GPUメンバ関数のための)530は、THISオブジェクトからpGPUVptr(CPUサイドvtableポインタ)を取得し、GPU vtableを検出する。ブロック650において、GPUサイドグルーイングロジック540(又はディスパッチャ)は、CPUサイドvtableポインタを用いてGPUサイドvtableを取得するため、上述されたブロック350に示されるコードシーケンスを有してもよい。
一実施例では、ブロック610における#Pragma GPU“void SomeNonVirtuFunc()”のコンパイルに応答して、GPUコンパイラ188は、ブロック670に示されるタスクを開始するため、“pFoo→SomeNonVirtuFunc()”を利用するためのコードを生成する。ブロック670において、CPUサイド110は、GPU非バーチャル関数をコールする。ブロック680において、CPUサイドスタブ510及びAPI520は、GPUサイド180に情報(引数)を送信する。ブロック690において、GPUサイドグルーイングロジック530は、パラメータをプッシュし、関数のアドレスが既知であるとき、直接アドレスをコールする。
図7のフローチャートにおいて、バーチャル共有非コヒーラント領域を用いてヘテロジニアスプロセッサの間のバーチャル関数の共有をサポートするため計算プラットフォーム100により実行される処理の実施例が示される。CPU110及びGPU180などのヘテロジニアスプロセッサを含む計算システム100などの計算システムでは、CPU110及びGPU180は、118及び188などの異なるコンパイラ(又は異なるターゲットを有する同一のコンパイラ)により生成される異なるコードを実行し、同一のバーチャル関数が、同一のアドレスに配置されることを保証されなくてもよい。バーチャル関数の共有をサポートするためコンパイラ/リンカ/ローダを修正可能であるが、後述される“非コヒーラント領域”アプローチ(ランタイムオンリーアプローチ)は、CPU110とGPU180との間のバーチャル関数の共有を可能にするためのよりシンプルな技術である。このようなアプローチは、Mine/Yours/Ours(MYO)などの共有されたバーチャルメモリシステムが容易に受け入れられ、配置されることを可能にする。C++オブジェクト指向言語が一例として利用されるが、以下のアプローチは、バーチャル関数をサポートする他のオブジェクト指向プログラミング言語に適用可能であってもよい。
ブロック710において、CPU110は、CPU110とGPU180との共有クラスのvtableを格納するため、共有バーチャルメモリ130内に共有非コヒーラント領域を生成する。一実施例では、共有非コヒーラント領域は、共有バーチャルメモリ130内の領域への非コヒーラントタグを指定することによって生成されてもよい。一実施例では、MYOランタイムは、バーチャル共有領域(MYOの用語では“アリーナ”と呼ばれ、このような多数のアリーナがMYOにおいて生成されてもよい)を生成するため、1以上のAPI(Application Programmable Interface)関数を提供する。例えば、myoArenaCreate(xxx,...,NonCoherentTag)又はmyoArenaCreateNonCoherentTag(xxx,...)が利用されてもよい。一実施例では、上記タグの利用は、コヒーラントアリーナ又は非コヒーラントアリーナを生成する。しかしながら、他の実施例では、API関数は、メモリチャンク(又は部分)の性質を変更するのに利用されてもよい。例えば、myoChangeToNonCoherent(addr size)は、非コヒーラント領域又はアリーナとして第1領域を生成し、コヒーラントアリーナとして第2領域(又は部分)を生成するのに利用されてもよい。一実施例では、第1領域はアドレスサイズにより指定されてもよい。
一実施例では、データ一貫性を維持することなくデータ共有を可能にするメモリアリーナ(すなわち、管理されたメモリチャンク)が生成され、このようなメモリアリーナは、共有非コヒーラント領域と呼ばれてもよい。一実施例では、共有非コヒーラント領域に格納されているCPUデータ及びGPUデータは、CPU110とGPU180との双方により観察されるような同一のアドレスを有してもよい。しかしながら、MYOなどの共有バーチャルメモリ130がランタイム時に一貫性を維持しなくてもよいため、コンテンツ(CPUデータ及びGPUデータ)は異なるものであってもよい。一実施例では、共有非コヒーラント領域は、各共有クラスについてバーチャルメソッドテーブルの新たなコピーを格納するのに利用されてもよい。一実施例では、CPU110及びGPU180から観察されるようなバーチャル関数テーブルアドレスは同一であってもよく、しかしながら、バーチャル関数テーブルは異なるものであってもよい。
ブロック750において、初期化時間中、共有可能な各クラスのvtableは、CPUプライベートスペース115及びGPUプライベートスペース185から共有バーチャルメモリ130にコピーされる。一実施例では、CPUサイドvtableは、共有バーチャルメモリ130内の非コヒーラント領域にコピーされ、GPUサイドvtableはまた、共有バーチャルメモリ130内の非コヒーラント領域にコピーされてもよい。一実施例では、共有スペースにおいて、CPUサイドvtable及びGPUサイドvtableは、同一アドレスに配置されてもよい。
一実施例では、ツールチェーンサポートが利用可能である場合、CPUコンパイラ118又はGPUコンパイラ188は、特別なデータセクションにおいてCPU及びGPUvtableデータを有してもよく、ローダ540又は570は、共有非コヒーラント領域に特別なデータセクションをロードする。他の実施例では、CPUコンパイラ118又はGPUコンパイラ188は、例えば、myoChangeToNonCoherentなどのAPIコールなどを用いて、特別なデータセクションが共有非コヒーラント領域に生成されることを可能にする。一実施例では、CPUコンパイラ118及びGPUコンパイラ188は、CPU vtable及びGPU vtableが特別なデータセクション内の同一のオフセットアドレスに配置されることを保証してもよい(存在しない場合には、適切なパディングによって)。一実施例では、多重継承の場合、オブジェクトレイアウトに複数のvtableポインタがあってもよい。一実施例では、CPUコンパイラ118及びGPUコンパイラ188はまた、CPU vtable及びGPU vtableポインタがオブジェクトレイアウトにおいて同一のオフセットに配置されることを保証するようにしてもよい。
ツールチェーンサポートがない場合、一実施例では、ユーザは、CPU vtable及びGPU vtableを共有非コヒーラント領域にコピーすることが可能とされてもよい。一実施例では、1以上のマクロが、CPU及びGPUテーブルを共有非コヒーラントメモリ領域に手動によりコピーすることを容易にするため生成される。
ランタイム時、共有オブジェクト131などの共有オブジェクトが生成された後、多重継承のために複数の“vptr”を有するオブジェクトレイアウト801が生成される。一実施例では、オブジェクトテーブル801の共有オブジェクト131のバーチャルテーブルポインタ(vptr)は、共有非コヒーラント領域におけるバーチャル関数テーブルの新たなコピーを指定するため更新(パッチ)される。一実施例では、共有オブジェクトのバーチャルテーブルポインタは、バーチャル関数を含むクラスのコンストラクタを用いて更新される。一実施例では、クラスがバーチャル関数を有さない場合、当該クラスのデータ及び関数が共有され、ランタイム中に更新(又はパッチ)する必要はない。
ブロック780において、vptr(vtableポインタ)は、共有オブジェクト131を作成しながら、共有非コヒーラント領域を示すよう変更される。一実施例では、デフォルトによりプライベートなvtable(CPU vtable又はGPU vtable)を示すvptrは、共有非コヒーラント領域860を示すよう変更される(図8の実線802−Cにより示されるように)。一実施例では、バーチャル関数は以下のようにコールされてもよい。
Mov eax,[ecx] #ecxは“this”ポインタを含み、eaxはvptrを含む
Call[eax,vfunc] #vfuncはバーチャル関数テーブルにおけるバーチャル関数インデックスである
CPUサイドにおいて、上記コードはバーチャル関数のCPUの実装をコールし、GPUサイドでは、上記コードはバーチャル関数のGPU実装をコールしてもよい。このようなアプローチは、クラスに対するデータ共有及びバーチャル関数共有を可能にする。
図8において、ヘテロジニアスプロセッサの間のバーチャル関数共有をサポートするためのバーチャル共有非コヒーラント領域の利用を示す関係図800の実施例が示される。一実施例では、オブジェクトレイアウト801は、第1スロット801−Aのバーチャルテーブルポインタ(vptr)と、スロット801−B及び801−Cのフィールド1及びフィールド2などの他のフィールドとを含む。一実施例では、以降に、CPUコンパイラ118及びGPUコンパイラ188は、スロット801−Aに配置されるvtableポインタ(vptr)を実行し、CPU vtable及びGPU vtable(破線802−Bに示されるように)を生成する(破線802−Aに示されるように)。CPUバーチャル関数テーブル(CPU vtable)は、CPUプライベートアドレススペース115内のアドレス810に配置され、GPU vtableは、GPUプライベートアドレススペース185内のアドレス840に配置されてもよい。一実施例では、CPU vtableは、vfunc1及びvfunc2などの関数ポインタを含み、GPU vtableは、vfunc1’及びvfunc2’などの関数ポインタを含むようにしてもよい。一実施例では、関数ポインタ(vfunc1及びvfunc2)及び(vfunc1’及びvfunc2’)はまた、これらのポインタが同一の関数の異なる実装を指定するとき、異なるものであってもよい。
一実施例では、vptrを変更した結果として(ブロック780に示されるように)、vptrは、共有バーチャルメモリ130内の共有非コヒーラント領域860を指示する。一実施例では、CPU vtableはアドレスAddress 870に配置され、GPU vtableは同一アドレスAddress 870に配置されてもよい。一実施例では、CPU vtableは、vfunc1及びvfunc2などの関数ポインタを含み、GPU vtableは、vfunc1’及びvfunc2’などの関数ポインタを含むものであってもよい。一実施例では、関数ポインタ(vfunc1及びvfunc2)及び(vfunc1’及びvfunc2’)は異なるものであってもよい。一実施例では、CPU vtable及びGPU vtableを共有非コヒーラント領域860に保存することは、CPU110及びGPU180がそれぞれ同一のアドレス位置Address 870にCPU vtable及びGPU vtableを参照することを可能にするが、CPU vtableのコンテンツ(vfunc1及びvfunc2)は、GPU vtableのコンテンツ(vfunc1’及びvfunc2’)と異なるものであってもよい。
図9において、双方向通信をサポートするヘテロジニアスプロセッサを有するコンピュータシステム900の実施例が示される。図9を参照すると、コンピュータシステム900は、SIMD(Single Instruction Multiple Data)プロセッサとGPU(Graphics Processor Unit)905とを含む汎用プロセッサ(又はCPU)902を有する。一実施例では、CPU902は、マシーン可読記憶媒体925にエンハンスメント処理を提供するため、他の各種タスクの実行又は命令シーケンスの格納に加えて、エンハンスメント処理を実行する。しかしながら、命令シーケンスはまた、CPUプライベートメモリ920又は他の何れか適切な記憶媒体に格納されてもよい。一実施例では、CPU902は、CPUレガシコンパイラ903及びCPUリンカ/ローダ904に関連付けされてもよい。一実施例では、GPU905は、GPU専用コンパイラ906及びGPUリンカ/ローダ907に関連付けされてもよい。
図9では独立したGPU905が示されるが、いくつかの実施例では、プロセッサ902は、他の例としてエンハンスメント処理を実行するのに利用されてもよい。コンピュータシステム900を処理するプロセッサ902は、ロジック930に接続された1以上のプロセッサコアであってもよい。ロジック930は、コンピュータシステム900とのインタフェースを提供する1以上のI/Oデバイス960に接続されてもよい。例えば、ロジック930は、一実施例では、チップセットロジックとすることができる。ロジック930は、光、磁気又は半導体ストレージを含む何れかのタイプのストレージとすることが可能なメモリ920に接続される。グラフィックプロセッサユニット905は、フレームバッファを介しディスプレイ940に接続される。
一実施例では、コンピュータシステム900は、共有オブジェクトを詳細に分割することによって、共有オブジェクトのバーチャル関数などのメンバ関数を介しヘテロジニアスプロセッサCPU902とGPU905との間の双方向通信(関数コール)を可能にするための1以上の技術をサポートする。一実施例では、コンピュータシステム900は、“テーブルベース”技術と呼ばれる第1技術を用いて、CPU902とGPU905との間の双方向通信を可能にする。他の実施例では、計算プラットフォームは、バーチャル共有非コヒーラント領域がプライベートCPUメモリ920、プライベートGPUメモリ930又は共有メモリ950の何れかに配置されるバーチャル共有メモリに作成される“非コヒーラント領域”技術と呼ばれる第2技術を利用して、CPU902とGPU905との間の双方向通信を可能にする。一実施例では、共有メモリ950などの独立した共有メモリはコンピュータシステム900に設けられなくてもよく、このような場合、共有メモリは、CPUメモリ920又はGPUメモリ930などのプライベートメモリの1つに設けられてもよい。
一実施例では、テーブルベース技術を利用しながら、CPU110又はGPU180から共有オブジェクトにアクセスするのに利用される共有オブジェクトのCPUサイドvtableポインタが、GPUサイドテーブルが存在する場合、GPU vtableを決定するのに利用されてもよい。一実施例では、GPUサイドvtableは、<“className”,CPU vtable addr,GPU vtable addr>を含むものであってもよい。一実施例では、GPUサイドのvtableアドレスを取得し、GPUサイドテーブルを生成するための技術が上述された。
他の実施例では、“非コヒーラント領域”技術を利用しながら、共有非コヒーラント領域が共有バーチャルメモリ内に作成される。一実施例では、共有非コヒーラント領域は、データ一貫性を維持しなくてもよい。一実施例では、共有非コヒーラント領域内のCPUサイドデータとGPUサイドデータとは、CPUサイド及びGPUサイドから参照されるように同一のアドレスを有してもよい。しかしながら、CPUサイドデータのコンテンツは、共有バーチャルメモリがランタイム中に一貫性を維持しないとき、GPUサイドデータのものと異なるものになってもよい。一実施例では、共有非コヒーラント領域は、各共有クラスについてバーチャルメソッドテーブルの新たなコピーを格納するのに利用されてもよい。一実施例では、このようなアプローチは、同一のアドレスにおいてバーチャルテーブルを維持してもよい。
ここに開示されたグラフィックス処理技術は、各種ハードウェアアーキテクチャにより実現されてもよい。例えば、グラフィックス機能は、チップセット内に統合されてもよい。あるいは、独立したグラフィックプロセッサが利用されてもよい。さらなる他の実施例として、グラフィックス関数は、マルチコアプロセッサを含む汎用プロセッサにより、又はマシーン可読媒体に格納されるソフトウェア命令セットとして実現されてもよい。
100 計算プラットフォーム
110 CPU
180 GPU
900 コンピュータシステム

Claims (1)

  1. 計算プラットフォームにおける方法であって、
    複数のバーチャル関数を含む共有オブジェクトを生成するステップと、
    前記共有オブジェクトを共有バーチャルメモリに格納するステップと、
    第1プロセッサと第2プロセッサとの間で前記複数のバーチャル関数の少なくとも1つを共有するステップと、
    を有し、
    前記計算プラットフォームは、前記第1プロセッサと前記第2プロセッサとを含み、
    前記第1プロセッサと前記第2プロセッサとはヘテロジニアスプロセッサである方法。
JP2014216090A 2014-10-23 2014-10-23 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有 Active JP5902273B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014216090A JP5902273B2 (ja) 2014-10-23 2014-10-23 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014216090A JP5902273B2 (ja) 2014-10-23 2014-10-23 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2013529523A Division JP5639274B2 (ja) 2010-09-24 2010-09-24 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2016047076A Division JP6280581B2 (ja) 2016-03-10 2016-03-10 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有

Publications (2)

Publication Number Publication Date
JP2015038770A true JP2015038770A (ja) 2015-02-26
JP5902273B2 JP5902273B2 (ja) 2016-04-13

Family

ID=52631768

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014216090A Active JP5902273B2 (ja) 2014-10-23 2014-10-23 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有

Country Status (1)

Country Link
JP (1) JP5902273B2 (ja)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6184740A (ja) * 1984-10-03 1986-04-30 Hitachi Ltd 汎用オブジエクトコ−ド生成方式
JPH10207709A (ja) * 1997-01-20 1998-08-07 Meidensha Corp オブジェクトの共有方法
JPH10320203A (ja) * 1997-05-22 1998-12-04 Meidensha Corp 共有メモリシステム
US6049668A (en) * 1998-04-13 2000-04-11 Intel Corporation Method and apparatus for supporting multiple processor-specific code segments in a single executable
US20080178163A1 (en) * 2006-06-01 2008-07-24 Michael Karl Gschwind Just-In-Time Compilation in a Heterogeneous Processing Environment
JP2009211167A (ja) * 2008-02-29 2009-09-17 Fujitsu Ltd プログラム実行システム
US20100118041A1 (en) * 2008-11-13 2010-05-13 Hu Chen Shared virtual memory
US20100180266A1 (en) * 2009-01-14 2010-07-15 Microsoft Corporation Multi Level Virtual Function Tables

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6184740A (ja) * 1984-10-03 1986-04-30 Hitachi Ltd 汎用オブジエクトコ−ド生成方式
JPH10207709A (ja) * 1997-01-20 1998-08-07 Meidensha Corp オブジェクトの共有方法
JPH10320203A (ja) * 1997-05-22 1998-12-04 Meidensha Corp 共有メモリシステム
US6049668A (en) * 1998-04-13 2000-04-11 Intel Corporation Method and apparatus for supporting multiple processor-specific code segments in a single executable
US20080178163A1 (en) * 2006-06-01 2008-07-24 Michael Karl Gschwind Just-In-Time Compilation in a Heterogeneous Processing Environment
JP2009211167A (ja) * 2008-02-29 2009-09-17 Fujitsu Ltd プログラム実行システム
US20100118041A1 (en) * 2008-11-13 2010-05-13 Hu Chen Shared virtual memory
US20100180266A1 (en) * 2009-01-14 2010-07-15 Microsoft Corporation Multi Level Virtual Function Tables

Also Published As

Publication number Publication date
JP5902273B2 (ja) 2016-04-13

Similar Documents

Publication Publication Date Title
JP5639274B2 (ja) 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有
US8719839B2 (en) Two way communication support for heterogenous processors of a computer platform
KR101240092B1 (ko) 컴퓨터 플랫폼에서의 방법 및 컴퓨터 플랫폼
US9830176B2 (en) Methods, systems, and media for binary compatible graphics support in mobile operating systems
EP2950206B1 (en) Extracting source code
US20150331681A1 (en) Handling value types
Andrus et al. Cider: Native execution of ios apps on android
US9696990B2 (en) Method and apparatus for implementing inter-component function calls
JP6280581B2 (ja) 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有
JP5902273B2 (ja) 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有
CN104536740B (zh) 计算平台的异质处理器之间的共享虚拟存储器中的虚函数共享
Phung et al. Accelerating Function-Centric Applications by Discovering, Distributing, and Retaining Reusable Context in Workflow Systems
Goyal et al. Function Overloading and Default Arguments
Wills et al. Pointers and Unsafe Code
Ciocarlie et al. Considerations regarding the implementation of the ESPL programming language

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141225

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150831

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151006

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160106

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160309

R150 Certificate of patent or registration of utility model

Ref document number: 5902273

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250