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

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

Info

Publication number
JP5639274B2
JP5639274B2 JP2013529523A JP2013529523A JP5639274B2 JP 5639274 B2 JP5639274 B2 JP 5639274B2 JP 2013529523 A JP2013529523 A JP 2013529523A JP 2013529523 A JP2013529523 A JP 2013529523A JP 5639274 B2 JP5639274 B2 JP 5639274B2
Authority
JP
Japan
Prior art keywords
processor
shared
virtual
gpu
virtual table
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
JP2013529523A
Other languages
English (en)
Other versions
JP2013542497A (ja
Inventor
イエン,ショウムオン
ルオ,サイ
ジョウ,シヤオチュヨン
ガオ,イーン
チェン,ホゥ
サハ,ブラティン
Original Assignee
インテル コーポレイション
インテル コーポレイション
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 インテル コーポレイション, インテル コーポレイション filed Critical インテル コーポレイション
Publication of JP2013542497A publication Critical patent/JP2013542497A/ja
Application granted granted Critical
Publication of JP5639274B2 publication Critical patent/JP5639274B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1072Decentralised address translation, e.g. in distributed shared memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • 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
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
    • 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
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • 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
    • G06F9/547Remote procedure calls [RPC]; Web services
    • G06F9/548Object oriented; Remote method invocation [RMI]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/50Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Devices For Executing Special Programs (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)
  • Stored Programmes (AREA)

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は、一実施例によるコンピュータプラットフォームに備えられるヘテロジニアスプロセッサの間で共有されるバーチャルメモリに格納されるバーチャル関数の共有をサポートするプラットフォーム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サイドデータのものと異なるものになってもよい。一実施例では、共有非コヒーラント領域は、各共有クラスについてバーチャルメソッドテーブルの新たなコピーを格納するのに利用されてもよい。一実施例では、このようなアプローチは、同一のアドレスにおいてバーチャルテーブルを維持してもよい。
ここに開示されたグラフィックス処理技術は、各種ハードウェアアーキテクチャにより実現されてもよい。例えば、グラフィックス機能は、チップセット内に統合されてもよい。あるいは、独立したグラフィックプロセッサが利用されてもよい。さらなる他の実施例として、グラフィックス関数は、マルチコアプロセッサを含む汎用プロセッサにより、又はマシーン可読媒体に格納されるソフトウェア命令セットとして実現されてもよい。

Claims (31)

  1. 計算プラットフォームにおける方法であって、
    複数のバーチャル関数を含む共有オブジェクトを生成するステップと、
    前記共有オブジェクトを共有バーチャルメモリに格納するステップと、
    第1プロセッサと第2プロセッサとの間で前記複数のバーチャル関数の少なくとも1つを共有するステップと、
    を有し、
    前記計算プラットフォームは、前記第1プロセッサと前記第2プロセッサとを含み、
    前記第1プロセッサと前記第2プロセッサとはヘテロジニアスプロセッサである方法。
  2. 第2プロセッササイドテーブルが、クラスネーム、第1プロセッササイドバーチャルテーブルアドレス及び第2プロセッササイドバーチャルテーブルアドレスを有する場合、第1プロセッササイドバーチャルテーブルポインタを用いて第2プロセッササイドバーチャルテーブルを決定するステップを有する、請求項1記載の方法。
  3. 前記第1プロセッササイドバーチャルテーブルポインタを前記共有オブジェクトに含めるステップをさらに有する、請求項2記載の方法。
  4. プログラムを実行する初期化段階中に前記第2プロセッササイドテーブルを生成するステップを有する、請求項2記載の方法。
  5. 前記共有オブジェクトのレジストレーション関数への関数ポインタを初期化セクションに含めるようにし、
    前記方法は、さらに、前記初期化セクションに含められた、前記共有オブジェクトのレジストレーション関数への関数ポインタを用いて、前記初期化セクションに基づく初期化段階中に前記レジストレーション関数を実行するステップを有する、請求項4記載の方法。
  6. 前記第1プロセッササイドで前記レジストレーション関数を実行中に、前記クラスネーム及び前記第1プロセッササイドバーチャルテーブルアドレスを第1テーブルに登録するステップと、
    前記第2プロセッササイドで前記レジストレーション関数を実行中に、前記クラスネーム及び前記第2プロセッササイドバーチャルテーブルアドレスを第2テーブルに登録するステップと、
    前記第1テーブルと前記第2テーブルとをマージすることによって、前記第2プロセッササイドテーブルを生成するステップと、
    を有する、請求項5記載の方法。
  7. 前記第2プロセッササイドテーブルは、DLL(Dynamically Linked Library)及びSLL(Statically Linked Libary)をサポートする、請求項6記載の方法。
  8. 前記第1プロセッサのバーチャルテーブルと前記第2プロセッサのバーチャルテーブルとを格納するため、前記共有バーチャルメモリ内に共有非コヒーラント領域を生成するステップを有する、請求項1記載の方法。
  9. 前記共有非コヒーラント領域を生成するため、非コヒーラントタグを前記共有バーチャルメモリの領域に加えるステップを有する、請求項8記載の方法。
  10. 前記第1プロセッサと前記第2プロセッサとのプライベートアドレススペースから前記共有非コヒーラント領域に前記共有オブジェクトのバーチャルテーブルをコピーするステップを有し、
    前記第1プロセッサのプライベートアドレススペースから前記共有非コヒーラント領域にコピーされたバーチャルテーブルである第1プロセッササイドバーチャルテーブルのコンテンツと、前記第2プロセッサのプライベートアドレススペースから前記共有非コヒーラント領域にコピーされたバーチャルテーブルである第2プロセッササイドバーチャルテーブルのコンテンツが異なる場合でさえ、前記第1プロセッササイドバーチャルテーブルと前記第2プロセッササイドバーチャルテーブルは、前記共有非コヒーラント領域において、同一のアドレスに配置される、請求項8記載の方法。
  11. 前記共有オブジェクトの生成中、前記第1プロセッササイドバーチャルテーブルと前記第2プロセッササイドバーチャルテーブルとを指示するバーチャルポインタを前記共有非コヒーラント領域を指示するよう変更するステップを有する、請求項10記載の方法。
  12. 実行されることに応答して、
    複数のバーチャル関数を含む共有オブジェクトを生成するステップと、
    前記共有オブジェクトを共有バーチャルメモリに格納するステップと、
    第1プロセッサと第2プロセッサとの間で前記複数のバーチャル関数の少なくとも1つを共有するステップと、
    計算プラットフォームに含まれるプロセッサに実行させる複数の命令を有するマシーン可読記憶媒体であって、
    前記計算プラットフォームは、前記第1プロセッサと前記第2プロセッサとを有し、
    前記第1プロセッサと前記第2プロセッサとは、ヘテロジニアスプロセッサであるマシーン可読記憶媒体。
  13. 第2プロセッササイドテーブルが、クラスネーム、第1プロセッササイドバーチャルテーブルアドレス及び第2プロセッササイドバーチャルテーブルアドレスを有する場合、第1プロセッササイドバーチャルテーブルポインタを用いて第2プロセッササイドバーチャルテーブルを決定するステップをプロセッサに実行させるための命令を有する、請求項12記載のマシーン可読記憶媒体。
  14. 前記第1プロセッササイドバーチャルテーブルポインタを前記共有オブジェクトに含めるステップをプロセッサに実行させるための命令を有する、請求項13記載のマシーン可読記憶媒体。
  15. プログラムを実行する初期化段階中に前記第2プロセッササイドテーブルを生成するステップをプロセッサに実行させるための命令を有する、請求項13記載のマシーン可読記憶媒体。
  16. 前記共有オブジェクトのレジストレーション関数への関数ポインタを初期化セクションに含めるようにし、
    前記マシーン可読記憶媒体は、
    前記初期化セクションに含められた、前記共有オブジェクトのレジストレーション関数への関数ポインタを用いて、初期化セクションに基づく初期化段階中に前記レジストレーション関数を実行するステップを、
    プロセッサに実行させるための命令を有する、請求項15記載のマシーン可読記憶媒体。
  17. 前記第1プロセッササイドで前記レジストレーション関数を実行中に、前記クラスネーム及び前記第1プロセッササイドバーチャルテーブルアドレスを第1テーブルに登録するステップと、
    前記第2プロセッササイドで前記レジストレーション関数を実行中に、前記クラスネーム及び前記第2プロセッササイドバーチャルテーブルアドレスを第2テーブルに登録するステップと、
    前記第1テーブルと前記第2テーブルとをマージすることによって、前記第2プロセッササイドテーブルを生成するステップと、
    プロセッサに実行させるための命令を有する、請求項16記載のマシーン可読記憶媒体。
  18. 前記第2プロセッササイドテーブルは、DLL(Dynamically Linked Library)及びSLL(Statically Linked Libary)をサポートする、請求項17記載のマシーン可読記憶媒体。
  19. 前記第1プロセッサのバーチャルテーブルと前記第2プロセッサのバーチャルテーブルとを格納するため、前記共有バーチャルメモリ内に共有非コヒーラント領域を生成するステップをプロセッサに実行させるための命令を有する、請求項12記載のマシーン可読記憶媒体。
  20. 前記共有非コヒーラント領域を生成するため、非コヒーラントタグを前記共有バーチャルメモリの領域に加えるステップをプロセッサに実行させるための命令を有する、請求項19記載のマシーン可読記憶媒体。
  21. 前記マシーン可読記憶媒体は、前記第1プロセッサと前記第2プロセッサとのプライベートアドレススペースから前記共有非コヒーラント領域に前記共有オブジェクトのバーチャルテーブルをコピーするステップをプロセッサに実行させるための命令を有し、
    前記第1プロセッサのプライベートアドレススペースから前記共有非コヒーラント領域にコピーされたバーチャルテーブルである第1プロセッササイドバーチャルテーブルのコンテンツと、前記第2プロセッサのプライベートアドレススペースから前記共有非コヒーラント領域にコピーされたバーチャルテーブルである第2プロセッササイドバーチャルテーブルのコンテンツが異なる場合でさえ、前記第1プロセッササイドバーチャルテーブルと前記第2プロセッササイドバーチャルテーブルは、前記共有非コヒーラント領域において、同一のアドレスに配置される、請求項19記載のマシーン可読記憶媒体。
  22. 前記共有オブジェクトの生成中、前記第1プロセッササイドバーチャルテーブルと前記第2プロセッササイドバーチャルテーブルとを指示するバーチャルポインタを前記共有非コヒーラント領域を指示するよう変更するステップをプロセッサに実行させるための命令を有する、請求項21記載のマシーン可読記憶媒体。
  23. 第1コンパイラに接続される第1プロセッサと、第2コンパイラに接続される第2プロセッサとを有する複数のヘテロジニアスプロセッサを有する装置であって、
    前記第1コンパイラは、共有オブジェクトに含まれる、前記第1プロセッサに割り当てられた第1バーチャルメンバ関数のコンパイルされたコードを生成するものであり、前記第2コンパイラは、共有オブジェクトに含まれる、前記第2プロセッサに割り当てられた第2バーチャルメンバ関数のコンパイルされたコードを生成するものであり
    前記第1プロセッサは、複数のバーチャル関数を含む共有オブジェクトを生成し、前記共有オブジェクトを共有バーチャルメモリに格納し、前記複数のバーチャル関数の少なくとも1つを第2プロセッサと共有する装置。
  24. 前記第プロセッサは、第2プロセッササイドテーブルがクラスネーム、第1プロセッササイドバーチャルテーブルアドレス及び第2プロセッササイドバーチャルテーブルアドレスを含む場合、第1プロセッササイドバーチャルテーブルポインタを用いて、第2プロセッササイドバーチャルテーブルを決定する、請求項23記載の装置。
  25. 前記第1プロセッササイドバーチャルテーブルポインタは、前記共有オブジェクトに含まれる、請求項24記載の装置。
  26. 前記第1プロセッサと前記第2プロセッサは、協働して、プログラムを実行する初期化段階中に前記第2プロセッササイドテーブルを生成する、請求項24記載の装置。
  27. 記共有オブジェクトのレジストレーション関数への関数ポインタを初期化セクションに含めるようにし
    前記装置は、さらに、
    前記初期化セクションに含められた、前記共有オブジェクトのレジストレーション関数への関数ポインタを用いて、前記初期化セクションに基づく初期化段階中に前記レジストレーション関数を実行するものである、請求項26記載の装置。
  28. 前記第1プロセッサと前記第2プロセッサは、協働して
    前記第1プロセッササイドで前記レジストレーション関数を実行中に、前記クラスネーム及び前記第1プロセッササイドバーチャルテーブルアドレスを第1テーブルに登録し、
    前記第2プロセッササイドで前記レジストレーション関数を実行中に、前記クラスネーム及び前記第2プロセッササイドバーチャルテーブルアドレスを第2テーブルに登録し、
    前記第1テーブルと前記第2テーブルとをマージすることによって、前記第2プロセッササイドテーブルを生成する、ことをサポートする、請求項27記載の装置。
  29. 前記第1プロセッサは、前記第1プロセッサのバーチャルテーブルと前記第2プロセッサのバーチャルテーブルとを格納するため前記共有バーチャルメモリ内に共有非コヒーラント領域を生成し、
    前記共有非コヒーラント領域は、非コヒーラントタグを前記共有バーチャルメモリの領域に加えることによって生成される、請求項23記載の装置。
  30. 前記第1プロセッサと前記第2プロセッサとは、前記第1プロセッサと前記第2プロセッサとのプライベートアドレススペースから前記共有非コヒーラント領域に前記共有オブジェクトのバーチャルテーブルをコピーすることをサポートし、
    前記第1プロセッサのプライベートアドレススペースから前記共有非コヒーラント領域にコピーされたバーチャルテーブルである第1プロセッササイドバーチャルテーブルのコンテンツと、前記第2プロセッサのプライベートアドレススペースから前記共有非コヒーラント領域にコピーされたバーチャルテーブルである第2プロセッササイドバーチャルテーブルのコンテンツが異なる場合でさえ、前記第1プロセッササイドバーチャルテーブルと前記第2プロセッササイドバーチャルテーブルは、前記共有非コヒーラント領域において、同一のアドレスに配置される、請求項29記載の装置。
  31. 前記第1プロセッサは、前記共有オブジェクトの生成中、前記共有非コヒーラント領域を指示するように、前記第1プロセッササイドバーチャルテーブルと前記第2プロセッササイドバーチャルテーブルとを指示するバーチャルポインタを変更することをサポートする、請求項30記載の装置。
JP2013529523A 2010-09-24 2010-09-24 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有 Active JP5639274B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2010/001470 WO2012037706A1 (en) 2010-09-24 2010-09-24 Sharing virtual functions in a shared virtual memory between heterogeneous processors of a computing platform

Related Child Applications (1)

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

Publications (2)

Publication Number Publication Date
JP2013542497A JP2013542497A (ja) 2013-11-21
JP5639274B2 true JP5639274B2 (ja) 2014-12-10

Family

ID=45873372

Family Applications (1)

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

Country Status (7)

Country Link
US (2) US8997113B2 (ja)
EP (2) EP3043269B1 (ja)
JP (1) JP5639274B2 (ja)
KR (3) KR101534037B1 (ja)
CN (1) CN103109286B (ja)
TW (1) TWI573094B (ja)
WO (1) WO2012037706A1 (ja)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101534037B1 (ko) 2010-09-24 2015-07-08 인텔 코포레이션 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유
US8806503B2 (en) * 2011-01-24 2014-08-12 Nec Laboratories America, Inc. Method and system for memory aware runtime to support multitenancy in heterogeneous clusters
GB2489278B (en) * 2011-03-24 2019-12-25 Advanced Risc Mach Ltd Improving the scheduling of tasks to be performed by a non-coherent device
US8949777B2 (en) * 2011-04-22 2015-02-03 Intel Corporation Methods and systems for mapping a function pointer to the device code
CN104335162B (zh) 2012-05-09 2018-02-23 英特尔公司 使用多个页表的执行
US9733953B2 (en) * 2012-06-22 2017-08-15 Microsoft Technology Licensing, Llc API redirection for limited capability operating systems
US9405556B2 (en) 2012-06-28 2016-08-02 Microsoft Technology Licensing, Llc Dynamic addition and removal of operating system components
US9830172B2 (en) * 2012-06-30 2017-11-28 Microsoft Technology Licensing, Llc Implementing functional kernels using compiled code modules
US9405561B2 (en) * 2012-08-08 2016-08-02 Nvidia Corporation Method and system for memory overlays for portable function pointers
US9378572B2 (en) * 2012-08-17 2016-06-28 Intel Corporation Shared virtual memory
US9881592B2 (en) 2013-10-08 2018-01-30 Nvidia Corporation Hardware overlay assignment
US20150106587A1 (en) * 2013-10-16 2015-04-16 Advanced Micro Devices, Inc. Data remapping for heterogeneous processor
US9436395B2 (en) 2014-03-14 2016-09-06 Advanced Micro Devices, Inc. Mechanisms to save user/kernel copy for cross device communications
US9720832B2 (en) * 2015-03-27 2017-08-01 International Business Machines Corporation Store operations to maintain cache coherence
US10140104B2 (en) * 2015-04-14 2018-11-27 Micron Technology, Inc. Target architecture determination
US9830676B2 (en) * 2015-07-28 2017-11-28 Intel Corporation Packet processing on graphics processing units using continuous threads
KR101897624B1 (ko) 2016-01-19 2018-10-04 서울대학교산학협력단 이종 시스템에서의 데이터 분배 기법
CN107239315B (zh) 2017-04-11 2019-11-15 赛灵思公司 面向神经网络异构计算平台的编程模型
KR102403379B1 (ko) * 2017-09-12 2022-06-02 주식회사 코코링크 다중 gpu간 데이터 공유 방법
US12086705B2 (en) * 2017-12-29 2024-09-10 Intel Corporation Compute optimization mechanism for deep neural networks
CN109086086B (zh) * 2018-08-06 2021-06-08 深圳忆联信息系统有限公司 一种非空间共享的多核cpu的启动方法及装置
CN112673348A (zh) * 2018-09-19 2021-04-16 英特尔公司 混合虚拟gpu协同调度
US11467812B2 (en) * 2019-11-22 2022-10-11 Advanced Micro Devices, Inc. Compiler operations for heterogeneous code objects
US11256522B2 (en) 2019-11-22 2022-02-22 Advanced Micro Devices, Inc. Loader and runtime operations for heterogeneous code objects
US11599467B2 (en) * 2021-05-27 2023-03-07 Arm Limited Cache for storing coherent and non-coherent data
DE102022107294A1 (de) * 2022-03-28 2023-09-28 Bayerische Motoren Werke Aktiengesellschaft Steuerung eines Fahrzeugs

Family Cites Families (34)

* 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 汎用オブジエクトコ−ド生成方式
US5297284A (en) * 1991-04-09 1994-03-22 Microsoft Corporation Method and system for implementing virtual functions and virtual base classes and setting a this pointer for an object-oriented programming language
EP0620520A1 (en) * 1993-03-30 1994-10-19 AT&T Corp. Method for making persistent data objects having hidden pointers
FR2717280B1 (fr) * 1994-03-10 1996-04-05 Bull Sa Procédé de gestion de l'héritage multiple d'objets persistants et partagés.
US5802367A (en) * 1995-07-07 1998-09-01 Microsoft Corporation Method and system for transparently executing code using a surrogate process
US5812852A (en) * 1996-11-14 1998-09-22 Kuck & Associates, Inc. Software implemented method for thread-privatizing user-specified global storage objects in parallel computer programs via program transformation
JPH10207709A (ja) 1997-01-20 1998-08-07 Meidensha Corp オブジェクトの共有方法
US6189046B1 (en) * 1997-03-27 2001-02-13 Hewlett-Packard Company Mechanism and method for merging cached location information in a distributed object environment
JPH10320203A (ja) * 1997-05-22 1998-12-04 Meidensha Corp 共有メモリシステム
US6446259B2 (en) * 1997-09-15 2002-09-03 Compaq Computer Corporation System and method for generating an object structure at run time in an object-oriented programming language
US6148438A (en) * 1998-01-06 2000-11-14 National Instruments Corporation System and method for creating composite classes for objects having virtual functions for avoidance of user mode/kernel mode transitions
US6049668A (en) * 1998-04-13 2000-04-11 Intel Corporation Method and apparatus for supporting multiple processor-specific code segments in a single executable
US7409694B2 (en) * 1998-09-09 2008-08-05 Microsoft Corporation Highly componentized system architecture with loadable virtual memory manager
US6704924B1 (en) * 1999-02-03 2004-03-09 William H. Gates, III Method and system for implementing virtual functions of an interface
US6286092B1 (en) * 1999-05-12 2001-09-04 Ati International Srl Paged based memory address translation table update method and apparatus
US6754887B1 (en) * 1999-10-22 2004-06-22 International Business Machines Corporation Methods for implementing virtual bases with fixed offsets in object oriented applications
US6810519B1 (en) * 2000-09-29 2004-10-26 International Business Machines Corporation Achieving tight binding for dynamically loaded software modules via intermodule copying
JP3874603B2 (ja) 2000-11-21 2007-01-31 株式会社日立製作所 計算機システムの共有メモリ構築方法
US6684305B1 (en) 2001-04-24 2004-01-27 Advanced Micro Devices, Inc. Multiprocessor system implementing virtual memory using a shared memory, and a page replacement method for maintaining paged memory coherence
US7000238B2 (en) * 2001-10-10 2006-02-14 Borland Software Corporation Development system providing extensible remoting architecture
US6842759B2 (en) * 2002-01-16 2005-01-11 International Business Machines Corporation Single-instance class objects across multiple JVM processes in a real-time system
US7093080B2 (en) 2003-10-09 2006-08-15 International Business Machines Corporation Method and apparatus for coherent memory structure of heterogeneous processor systems
US20060070069A1 (en) * 2004-09-30 2006-03-30 International Business Machines Corporation System and method for sharing resources between real-time and virtualizing operating systems
US7653789B2 (en) * 2006-02-01 2010-01-26 Sun Microsystems, Inc. Multiprocessor system that supports both coherent and non-coherent memory accesses
US20070283336A1 (en) * 2006-06-01 2007-12-06 Michael Karl Gschwind System and method for just-in-time compilation in a heterogeneous processing environment
US7490191B2 (en) * 2006-09-22 2009-02-10 Intel Corporation Sharing information between guests in a virtual machine environment
US7941791B2 (en) * 2007-04-13 2011-05-10 Perry Wang Programming environment for heterogeneous processor resource integration
US8156307B2 (en) * 2007-08-20 2012-04-10 Convey Computer Multi-processor system having at least one processor that comprises a dynamically reconfigurable instruction set
US7996628B2 (en) * 2008-02-14 2011-08-09 International Business Machines Corporation Cross adapter shared address translation tables
JP5151559B2 (ja) 2008-02-29 2013-02-27 富士通株式会社 プログラム実行システム
US8531471B2 (en) * 2008-11-13 2013-09-10 Intel Corporation Shared virtual memory
US8307350B2 (en) * 2009-01-14 2012-11-06 Microsoft Corporation Multi level virtual function tables
US9117071B2 (en) * 2009-06-03 2015-08-25 Apple Inc. Methods and apparatuses for secure compilation
KR101534037B1 (ko) 2010-09-24 2015-07-08 인텔 코포레이션 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유

Also Published As

Publication number Publication date
WO2012037706A1 (en) 2012-03-29
EP2619687B1 (en) 2016-04-06
EP3043269A1 (en) 2016-07-13
TWI573094B (zh) 2017-03-01
KR20150006903A (ko) 2015-01-19
KR101534037B1 (ko) 2015-07-08
JP2013542497A (ja) 2013-11-21
EP2619687A4 (en) 2014-04-09
KR20160008245A (ko) 2016-01-21
KR20130040264A (ko) 2013-04-23
EP2619687A1 (en) 2013-07-31
US20130173894A1 (en) 2013-07-04
EP3043269B1 (en) 2017-07-26
US8997113B2 (en) 2015-03-31
US20150113255A1 (en) 2015-04-23
CN103109286A (zh) 2013-05-15
TW201214325A (en) 2012-04-01
KR101761650B1 (ko) 2017-07-28
CN103109286B (zh) 2016-08-24
KR101581796B1 (ko) 2016-01-04

Similar Documents

Publication Publication Date Title
JP5639274B2 (ja) 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有
US8719839B2 (en) Two way communication support for heterogenous processors of a computer platform
US11175896B2 (en) Handling value types
US9830176B2 (en) Methods, systems, and media for binary compatible graphics support in mobile operating systems
KR101240092B1 (ko) 컴퓨터 플랫폼에서의 방법 및 컴퓨터 플랫폼
Andrus et al. Cider: Native execution of ios apps on android
JP6280581B2 (ja) 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有
JP5902273B2 (ja) 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有
Szabó et al. Real-time rendering with OpenGL and Vulkan in C#
Bieniusa et al. The architecture of the DecentVM: Towards a decentralized virtual machine for many-core computing
CN104536740B (zh) 计算平台的异质处理器之间的共享虚拟存储器中的虚函数共享
Cohen et al. NDK and C/C++ optimization
Ciocarlie et al. Considerations regarding the implementation of the ESPL programming language
Silva et al. Mercury: a reflective middleware for automatic parallelization of bags-of-tasks
Bieniusa et al. The Architecture of the DecentVM
Goyal et al. Function Overloading and Default Arguments
Molina Huemul–A Smalltalk Implementation

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140422

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140520

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140818

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141023

R150 Certificate of patent or registration of utility model

Ref document number: 5639274

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250