CN103109286B - 计算平台的异质处理器之间的共享虚拟存储器中的虚函数共享 - Google Patents
计算平台的异质处理器之间的共享虚拟存储器中的虚函数共享 Download PDFInfo
- Publication number
- CN103109286B CN103109286B CN201080069225.2A CN201080069225A CN103109286B CN 103109286 B CN103109286 B CN 103109286B CN 201080069225 A CN201080069225 A CN 201080069225A CN 103109286 B CN103109286 B CN 103109286B
- Authority
- CN
- China
- Prior art keywords
- processor
- virtual
- shared
- gpu
- function
- 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
Links
- 230000006870 function Effects 0.000 title claims abstract description 156
- 238000000034 method Methods 0.000 claims description 27
- 239000011800 void material Substances 0.000 claims description 9
- 230000003068 static effect Effects 0.000 claims description 3
- 238000005516 engineering process Methods 0.000 description 20
- 239000000853 adhesive Substances 0.000 description 18
- 230000001070 adhesive effect Effects 0.000 description 18
- 238000004891 communication Methods 0.000 description 16
- 230000007246 mechanism Effects 0.000 description 4
- 206010008190 Cerebrovascular accident Diseases 0.000 description 3
- 208000006011 Stroke Diseases 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 235000019580 granularity Nutrition 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 241000406668 Loxodonta cyclotis Species 0.000 description 1
- 238000004026 adhesive bonding Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 235000015170 shellfish Nutrition 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations 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/163—Interprocessor communication
- G06F15/167—Interprocessor communication using a common memory, e.g. mailbox
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1072—Decentralised address translation, e.g. in distributed shared memory systems
-
- 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
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3863—Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
- G06F9/548—Object oriented; Remote method invocation [RMI]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/65—Details of virtual memory and virtual address translation
- G06F2212/657—Virtual address space management
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing 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)
Abstract
一种计算平台可包含异质处理器(例如CPU和GPU)以支持这种处理器之间虚函数的共享。在一个实施例中,用于访问来自CPU 110的共享对象的CPU侧虚函数表指针可用于确定GPU虚函数表,如果存在GPU侧表的话。在其它实施例中,可在共享虚拟存储器内创建可不保持数据一致性的共享非相干区域。存储在共享非相干区域内的CPU和GPU侧数据可具有与从CPU和GPU侧看到的相同的地址。然而,CPU侧数据的内容可不同于GPU侧数据的内容,因为共享虚拟存储器在运行时期间可不保持一致性。在一个实施例中,vptr可修改成指向存储在共享虚拟存储器中的CPU虚函数表和GPU虚函数表。
Description
背景技术
计算平台可包含异质处理器,诸如中央处理单元(CPU)和图形处理单元(GPU)、对称和不对称处理器。类实例(或对象)可驻留在与CPU-GPU平台的第一侧(例如CPU)相关联的第一存储器中。不可能使第二侧(GPU侧)调用驻留在与CPU-GPU平台的第一侧(CPU侧)相关联的第一存储器中的对象和相关联的成员函数。也不可能使第一侧能够调用驻留在第二侧(GPU)侧上第二存储器中的对象和相关联的成员函数。当类实例或对象被存储在不同地址空间时,现有通信机制可能仅允许异质处理器(CPU与GPU)之间的单向通信来调用类实例和相关联的虚函数。
这种单向通信方法防止了异质处理器之间的类实例的自然功能性划分。对象可包括面向吞吐量的成员函数和一些标量成员函数。例如,游戏应用中的场景类可具有可适合于GPU的渲染函数,并且还可包括可适合于在CPU上执行的物理学和人工智能(AI)函数。用当前的单向通信机制,通常存在两个不同的场景类,分别包括CPU(上例中的物理学和AI)成员函数和GPU(适合GPU的渲染函数)成员函数。使两个不同的场景类一个用于CPU而另一个用于GPU可能需要在两个场景类之间来回拷贝数据。
附图说明
在附图中作为示例而非作为限制说明了本文描述的本发明。为了说明的简化和清晰,图中示出的单元不一定按比例绘制。例如,为了清楚起见,一些单元的尺寸可能相对于其它单元放大了。另外,在认为适当的情况下,附图标记已经在各图之间重复使用来指示对应或类似的单元。
图1示出了根据一个实施例支持在计算机平台中提供的异质处理器之间的共享虚拟存储器中存储的虚函数共享的平台100;
图2是示出了根据一个实施例由平台100执行的支持在计算机平台中提供的异质处理器之间的共享虚拟存储器中存储的虚函数共享的操作的流程图;
图3示出了根据一个实施例用于从共享对象加载虚函数指针的CPU侧和GPU侧代码;
图4是示出了根据第一实施例由平台100执行的生成表以支持在计算机平台中提供的异质处理器之间的共享虚拟存储器中存储的虚函数共享的操作的流程图;
图5示出了根据一个实施例由平台100用于支持通过异质处理器可共享的对象的成员函数进行CPU 110与GPU 180之间双向通信的流程图;
图6示出了根据第一实施例实际地描绘由CPU侧进行的GPU虚函数和GPU函数调用的处理的流程图;
图7是示出了根据实施例由平台100执行的使用虚拟共享非相干区域支持异质处理器之间的虚函数共享的操作的流程图;
图8是示出了根据实施例使用虚拟共享非相干区域支持异质处理器之间的虚函数共享的关系图;
图9示出了根据一个实施例可提供对在计算机平台中提供的异质处理器之间的共享虚拟存储器中存储的虚函数共享的支持的计算机系统。
具体实施方式
以下描述描述了在计算平台的异质处理器之间的共享虚拟存储器中存储的虚函数共享的技术。在以下描述中,阐述了许多特定细节,诸如逻辑实现、资源划分或共享或系统组件的副本实现、类型和相互关系以及逻辑划分或综合选择,以便提供本发明的更透彻理解。然而,本领域技术人员将认识到,没有此类特定细节也可实施本发明。在其它实例中,未详细示出控制结构、门级电路和完整软件指令序列,以免使本发明模糊。本领域技术人员用所包含的描述将能够实现适当的功能性,无需过多实验。
在说明书中提到“一个实施例”、“实施例”、“示例实施例”指示所描述的实施例可包含具体特征、结构或特性,但每个实施例可能不一定都包含该具体特征、结构或特性。此外,这种短语不一定是指同一实施例。另外,当结合一个实施例描述具体特征、结构或特性时,认为它在本领域技术人员的知识范围内,以结合其它实施例影响这种特征、结构或特性,不管是否明确描述了。
可用硬件、固件、软件或它们的任何组合来实现本发明的实施例。本发明的实施例还可实现为存储在机器可读介质上的指令,它们可由一个或多个处理器读取和执行。机器可读存储介质可包含用于存储或传输采用机器(例如计算装置)可读形式的信息的任何机构。
例如,机器可读存储介质可包含只读存储器(ROM);随机存取存储器(RAM);磁盘存储介质;光存储介质;闪存装置;电、光形式的信号。另外,固件、软件、例程和指令在本文可描述为执行某些动作。然而,应该认识到,这种描述只是出于方便,并且这种动作实际上源于计算装置、处理器、控制器和执行固件、软件、例程和指令的其它装置。
在一个实施例中,计算平台可支持一种或多种技术以允许通过细粒度划分共享对象来通过诸如共享对象的虚函数的成员函数进行异质处理器(例如CPU与GPU)之间的双向通信(函数调用)。在一个实施例中,计算平台可允许使用称为“基于表”的技术的第一技术进行CPU与GPU之间的双向通信。在其它实施例中,计算平台可允许使用称为“非相干区域”技术的第二技术进行CPU与GPU之间的双向通信,在该技术中,可在虚拟共享存储器中创建虚拟共享非相干区域。
在一个实施例中,当使用基于表的技术时,可用于访问来自CPU或GPU侧的共享对象的共享对象的CPU侧虚函数表(vtable)指针可用于确定GPU虚函数表,如果存在GPU侧表的话。在一个实施例中,GPU侧虚函数表可包含<"类名"、CPU虚函数表地址、GPU虚函数表地址>。在一个实施例中,下面将更详细地描述获得GPU侧虚函数表地址和生成GPU侧表的技术。
在其它实施例中,当使用“非相干区域”技术时,在共享虚拟存储器内创建共享非相干区域。在一个实施例中,共享非相干区域可以不保持数据一致性。在一个实施例中,共享非相干区域内的CPU侧数据和GPU侧数据可具有与从CPU侧和GPU侧看到的相同的地址。然而,CPU侧数据的内容可不同于GPU侧数据的内容,因为共享虚拟存储器在运行时期间可以不保持一致性。在一个实施例中,共享非相干区域可用于存储每个共享类的虚拟方法表的新拷贝。在一个实施例中,这种方法可将虚拟表保持在同一地址。
图1中示出了提供可在异质处理器、诸如CPU与GPU之间共享的虚拟共享存储器中的虚函数的计算平台100的实施例。在一个实施例中,平台100可包括中央处理单元(CPU)110、与CPU 110相关联的操作系统(OS)112、CPU私有空间115、CPU编译器118、共享虚拟存储器(或多版本共享存储器)130、图形处理单元(GPU)180、与GPU 180相关联的操作系统(OS)182、GPU私有空间185和GPU编译器188。在一个实施例中,OS 112和OS182可分别管理CPU 110和CPU私有空间115,以及GPU 180和GPU私有空间185的资源。在一个实施例中,为了支持共享虚拟存储器130,CPU私有空间115和GPU私有空间185可包括多版本数据的拷贝。在一个实施例中,为了保持存储器一致性,诸如对象131的元数据可用于同步存储在CPU私有空间115和GPU私有空间185中的拷贝。在其它实施例中,多版本数据可存储在物理共享存储器诸如共享存储器950(图9的,下面描述)中。在一个实施例中,共享虚拟存储器可由物理私有存储器空间(诸如异质处理器CPU 110和GPU180的CPU私有空间115和GPU私有空间185)或物理共享存储器(诸如由异质处理器共享的共享存储器950)支持。
在一个实施例中,CPU编译器118和GPU编译器188可分别耦合到CPU 110和GPU 180,或者也可远程提供在其它平台或计算机系统上。与CPU 110相关联的编译器(一个或多个)118可生成用于CPU 110的编译代码,并且与GPU 180相关联的编译器188可生成用于GPU 180的编译代码。在一个实施例中,CPU编译器118和GPU编译器188可通过编译用户用高级语言诸如面向对象的语言提供的对象的一个或多个成员函数来生成编译代码。在一个实施例中,编译器118和188可使对象存储在共享存储器130中,并且共享对象131可包括分配给CPU侧110或GPU侧180的成员函数。在一个实施例中,存储在共享存储器130中的共享对象131可包括成员函数诸如虚函数VF 133-A到133-K和非虚函数NVF136-A到136-L。在一个实施例中,成员函数诸如共享对象131的VF 133和NVF 136可提供CPU 110与GPU 180之间的双向通信。
在一个实施例中,为了实现动态绑定目的,CPU 110或GPU 180之一可通过索引虚函数表(虚函数表)来调用虚函数,诸如VF 133-A(例如C++虚函数)。在一个实施例中,共享对象131中的隐藏指针可指向该虚函数表。然而,CPU 110和GPU 180可具有不同的指令集架构(ISA),并且当对于具有不同ISA的CPU 110和GPU 180编译函数时,表示由编译器118和188编译的相同函数的代码可具有不同的大小。以同样方式将代码布局在GPU侧和CPU侧(即,共享类中的虚函数的CPU版本和共享类中的同一虚函数的GPU版本),可能具有挑战性。如果在共享类Foo()中存在三个虚函数,则在代码的CPU版本中,函数可位于地址A1、A2和A3。然而,在代码的GPU版本中,函数可位于地址B1、B2和B3,它们可不同于A1、A2和A3。共享类中同一函数的CPU侧和GPU侧代码的这种不同地址位置可暗示共享对象(即共享类的实例)可能需要2个虚函数表(第一虚函数表和第二虚函数表)。第一虚函数表可包含函数的CPU侧版本的地址(A1、A2和A3),并且当在CPU侧可使用对象(或调用CPU侧函数)时,可使用第一虚函数表。第二虚函数表可包含函数的GPU侧版本的地址(B1、B2和B3),并且当在GPU侧可使用对象(或调用GPU侧函数)时,可使用第二虚函数表。
在一个实施例中,可通过将第一和第二虚函数表与共享对象131相关联来实现在CPU 110与GPU 180之间的共享虚拟存储器中存储的虚函数共享。在一个实施例中,可通过将共享对象131的第一与第二虚函数表相关联来创建公用虚函数表,其可用于CPU侧和GPU侧上的虚函数调用。
在图2的流程图中描绘了异质处理器CPU 110和GPU 180共享存储在共享虚拟存储器中的虚函数的实施例。在块210,第一处理器诸如CPU 110可标识共享对象131的第一处理器侧虚函数表指针(CPU侧虚函数表指针)。在一个实施例中,对于共享对象131,可存在CPU侧虚函数表指针,不管共享对象131可由CPU侧还是GPU侧访问。
在一个实施例中,对于计算系统诸如仅有CPU的环境中的正常虚函数调用,代码序列可如图3的块310中所示。在一个实施例中,甚至在计算系统诸如100中,其可包含异质处理器,用于正常虚函数调用的CPU侧代码序列可与在图3的块310中描绘的相同。如在块310中所描绘的,行301中的代码:Mov r1,[obj]可将共享对象131的虚函数表加载到变量r1。行305中的代码:(Call*[r1+offsetFunction])可调用虚函数,诸如共享对象131的VF133-A。
在块250中,第二处理器诸如GPU 180可使用共享对象131的第一处理器侧虚函数表指针(CPU侧虚函数表指针)确定第二处理器侧虚函数表(GPU侧虚函数表),如果存在第二处理器侧表(GPU表)的话。在一个实施例中,第二处理器侧表(GPU表)可包含<"类名"、第一处理器侧虚函数表地址、第二处理器侧虚函数表地址>。
在一个实施例中,在GPU侧,GPU 180可生成在块350中描绘的代码序列,其可不同于在块310中描绘的代码序列。在一个实施例中,因为GPU编译器188可根据类型知道每个可共享类,因此GPU 180可生成在块350中描绘的代码序列,用于从共享对象诸如共享对象131加载虚函数指针。在一个实施例中,行351中的代码:Mov r1,[obj]可加载CPU虚函数表地址,并且行353中的代码:R2=getvtableAddress(r1)可从GPU表中获得GPU虚函数表。在一个实施例中,行358中的代码:(Call*[r2+offsetFunction])可基于使用CPU虚函数表地址生成的GPU虚函数表调用虚函数。在一个实施例中,getvtableAddress函数可使用CPU侧虚函数表地址索引到GPU表中来确定GPU侧虚函数表。
在块280,使用共享对象131可实现第一处理器(CPU 110)和第二处理器(GPU 180)进行双向通信。
使用图4的流程图示出了创建GPU表的实施例。在块410,可在初始化时间期间,在一个实施例中,通过将指向可共享类(共享对象131)的注册函数(registration function)的函数指针包含到初始化段(例如MSC++的CRT$XCI段)中,形成该表。例如,可共享类的注册函数可被包含到MS CRT$XCI段初始化段中。
在块420,可在初始化时间期间执行注册函数。作为将指向注册函数的函数指针包含到初始化段中的结果,可在执行初始化段的同时执行注册函数。
在块430,在第一处理器侧(CPU侧),注册函数可将“类名”和“CPU虚函数表地址”注册到第一表中。在块440,在第二处理器侧(GPU侧),注册函数可将“类名”和“GPU虚函数表地址”注册到第二表中。
在块480,第一表和第二表可合并成一个公用表。例如,如果第一和第二表包含相同“类名”,则第一表的第一项可与第二表的第一项组合。作为合并的结果,第一和第二表的组合项可看起来像具有单个类名的一项。在一个实施例中,公用表可驻留在GPU侧,并且公用表或GPU表可包含“类名”、CPU虚函数表地址和GPU虚函数表地址。
在一个实施例中,创建公用表或GPU表可避免对CPU侧和GPU侧上虚函数表地址匹配的要求。还有,GPU表可支持动态链接库(DLL)。在一个实施例中,在GPU侧上可使用或初始化共享对象131之前,可在CPU侧上加载类。然而,因为应用一般被加载在CPU侧,因此对于在应用中定义的类还有静态链接库,GPU表可实现CPU 110与GPU 180之间的双向通信。对于DLL,DLL可加载在CPU侧上,并且GPU表也可用于DLL的双向通信。
可共享对象131可包含CPU侧虚函数表指针,并且可没有额外的虚函数表指针用于GPU侧虚函数表。在一个实施例中,使用对象中的CPU虚函数表指针,可生成GPU虚函数表指针,如上面在图4的块350中所描述的。在一个实施例中,可原样使用CPU侧上的CPU虚函数表指针,而GPU侧上的GPU虚函数表指针可用于虚函数调用。在一个实施例中,这种方法可不涉及链接器/加载器的修改或参与,并且不要求共享对象131中的额外vptr指针字段。这种方法可允许在CPU 110与GPU 180之间用面向对象的语言写的应用的细粒度划分。
图5中示出了计算平台100用于支持通过可由异质处理器共享的对象的成员函数进行CPU 110与GPU 180之间双向通信的流程图的实施例。在一个实施例中,GPU编译器188可生成用于GPU函数的CPU存根(stub)510和CPU侧110上的CPU远程调用API520。还有,GPU编译器188可生成GPU侧粘合逻辑(gluing logic)530用于第一成员函数的GPU侧180上的GPU函数。在一个实施例中,CPU 110可使用第一路径的第一启用路径(包括存根逻辑510、API 520和粘合逻辑530)对第一成员函数进行调用。在一个实施例中,第一启用路径可允许CPU 110与GPU侧180建立远程调用,并将信息从CPU侧110传送到GPU侧180。在一个实施例中,GPU侧粘合逻辑530可允许GPU 180接收从CPU侧110传送的信息。
在一个实施例中,CPU存根510可包括与第一成员函数(即原始GPU成员函数)相同的名称,但可封入API 520以将调用从CPU 110定向到GPU 180。在一个实施例中,由CPU编译器118生成的代码可原样地调用第一成员函数,但调用可被重新定向到CPU存根510和远程调用API 520。再者,当进行远程调用时,CPU存根510可发送表示正在调用的第一成员函数的唯一名称和指向共享对象的指针以及被调用的第一成员函数的其它参数。在一个实施例中,GPU侧粘合逻辑530可接收参数,并调度第一成员函数调用。在一个实施例中,GPU编译器188可生成粘合逻辑(或调度器),其可通过用作为第一参数传递的对象指针调用第一成员函数的GPU侧函数地址来调度非虚函数。在一个实施例中,GPU编译器188可生成GPU侧上的跳转表注册调用来注册GPU侧粘合逻辑530,以使CPU存根510能够与GPU侧粘合逻辑530通信。
在一个实施例中,GPU编译器188可创建第二启用路径,包括用于CPU函数的GPU存根550、GPU侧180上的GPU远程调用API 570以及用于分配给CPU 110的第二成员函数的CPU侧粘合逻辑580。在一个实施例中,GPU 180可使用第二启用路径对CPU侧110进行调用。在一个实施例中,GPU存根550和API 570可允许GPU 180与CPU侧110建立远程调用,并将信息从GPU侧180传送到CPU侧110。在一个实施例中,CPU侧粘合逻辑580可允许CPU 110接收从GPU侧180传送的信息。
在一个实施例中,为了支持第二成员函数调用,GPU编译器188可生成用于CPU侧粘合逻辑580的跳转表注册。在一个实施例中,可在CPU粘合逻辑580中调用第二成员函数的CPU侧函数地址。在一个实施例中,由CPU粘合逻辑580生成的代码可与由CPU编译器118生成的其它代码链接。这种方法可提供支持异质处理器110与180之间双向通信的路径。在一个实施例中,CPU存根逻辑510和CPU侧粘合逻辑580可经由CPU链接器590耦合到CPU 110。在一个实施例中,CPU链接器590可使用CPU存根510、CPU侧粘合逻辑580和由CPU编译器118生成的其它代码生成CPU可执行595。在一个实施例中,GPU存根逻辑550和GPU侧粘合逻辑530可经由GPU链接器540耦合到GPU 180。在一个实施例中,GPU链接器540可使用GPU粘合逻辑530、GPU存根逻辑550和由GPU编译器188生成的其它代码生成GPU可执行545。
图6中示出了CPU侧110使用上面描述的基于表的技术调用GPU虚函数和GPU非虚函数的流程图600的实施例。示出了块610,包括标题为共享类Foo()的对象的共享类实例,其包含注释虚函数(例如VF 133-A)和虚函数调用“Virtual void SomeVirtFunc()”的第一注释标签#Pragma GPU以及注释非虚函数(例如NVF 136-A)和非虚函数调用“voidSomeNon VirtuFunc()”的第二注释标签#Pragma GPU。
在一个实施例中,'pFoo'可指向类Foo()的共享对象131,并且可从CPU侧110到GPU侧180完成远程虚函数调用。在一个实施例中,'pFoo=new(SharedMemoryAllocator())Foo();'可以是用共享存储器分配/释放运行时调用覆盖新的/删除运算符的一种可能方式。在一个实施例中,CPU编译器118响应于在块610中编译'pFoo->SomeVirtuFunc()',可发起在块620中描绘的任务。
在块620,CPU侧110可调用GPU虚函数。在块630,CPU侧存根(用于GPU成员函数)510和API 520可向GPU侧180发送信息(参数)。在块640,GPU侧粘合逻辑(用于GPU成员函数)530可从THIS对象获得pGPUVptr(CPU侧虚函数表指针),并且可找到GPU虚函数表。在块650,GPU侧粘合逻辑530(或调度器)可具有上面描述的在块350中描绘的代码序列,以使用CPU侧虚函数表指针获得GPU侧虚函数表。
在一个实施例中,GPU编译器188响应于在块610中编译#Pragma GPU'voidSomeNonVirtuFunc()',可生成使用'pFooSomeNonVirtuFunc()'发起在块670中描绘的任务的代码。在块670,CPU侧110可调用GPU非虚函数。在块680,CPU侧存根510和API520可向GPU侧180发送信息(参数)。在块690,GPU侧粘合逻辑530可推送参数并直接调用地址,因为函数地址可能已经已知了。
在图7的流程图中示出了由计算平台100执行的使用虚拟共享非相干区域支持异质处理器之间的虚函数共享的操作的实施例。在计算系统诸如包含异质处理器(诸如CPU 110和GPU 180)的计算系统100中,CPU 110和GPU 180可运行由不同编译器诸如118和188(或具有不同目标的相同编译器)生成的不同代码,不可能保证相同虚函数位于相同地址。虽然有可能将编译器/链接器/加载器修改成支持虚函数共享,但下面描述的“非相干区域”方法(仅有运行时的方法)可能是允许CPU 110与GPU 180之间虚函数共享的更简单技术。这种方法可允许容易地接受和部署共享虚拟存储器系统,诸如我的/你的/我们的(MYO)。尽管作为示例使用C++面向对象的语言,但下面的方法可应用于支持虚函数的其它面向对象的编程语言。
在块710,CPU 110可在共享虚拟存储器130内创建共享非相干区域以存储CPU 110和GPU 180的共享类的虚函数表。在一个实施例中,可通过规定到共享虚拟存储器130内区域的非相干标签来创建共享非相干区域。在一个实施例中,MYO运行时可提供一个或多个应用可编程接口(API)函数来创建虚拟共享区域(在MYO的术语中称为“场所(arena)”,并且在MYO中可创建许多此类场所)。例如,可使用诸如myoArenaCreate(xxx,...,NonCoherentTag)或myoArenaCreateNon CoherentTag(xxx,...)的标签。在一个实施例中,使用以上标签可创建相干或非相干场所。然而,在其它实施例中,可使用API函数来改变存储器大块(或部分)的属性。例如,可使用myoChangeToNonCoherent(addrsize)创建第一区域作为非相干区域或场所,以及第二区域(或部分)作为相干场所。在一个实施例中,第一区域可由地址大小规定。
在一个实施例中,可创建存储器场所(即,管理的存储器大块),其可允许数据共享而无需保持数据一致性,并且这种存储器场所可称为共享非相干区域。在一个实施例中,存储在共享非相干区域内的CPU数据和GPU数据可具有与由CPU 110和GPU 180看到的相同的地址。然而,内容(CPU数据和GPU数据)可不同,因为共享虚拟存储器130诸如MYO在运行时可以不保持一致性。在一个实施例中,共享非相干区域可用于存储每个共享类的虚拟方法表的新拷贝。在一个实施例中,从CPU 110和GPU 180所看到的虚函数表地址可相同;然而,虚函数表可不同。
在块750,在初始化时间期间,每个可共享类的虚函数表可从CPU私有空间115和GPU私有空间185拷贝到共享虚拟存储器130。在一个实施例中,CPU侧虚函数表可被拷贝到共享虚拟存储器130内的非相干区域中,并且GPU侧虚函数表也可被拷贝到共享虚拟存储器130内的非相干区域中。在一个实施例中,在共享空间中,CPU侧虚函数表和GPU侧虚函数表可位于相同地址。
在一个实施例中,如果工具链支持是可用的,则CPU编译器118或GPU编译器188可在特殊数据段中包含CPU和GPU虚函数表数据,并且加载器540或590可将特殊数据段加载到共享非相干区域。在其它实施例中,CPU编译器118或GPU编译器188可允许例如使用API调用诸如myoChangeToNonCoherent在共享非相干区域中创建特殊数据段。在一个实施例中,CPU编译器118和GPU编译器188可确保CPU虚函数表和GPU虚函数表可在特殊数据段内位于相同偏移地址(要不就具有恰当填充)。在一个实施例中,在多重继承的情况下,在对象布局中可能存在多个虚函数表指针。在一个实施例中,CPU编译器118和GPU编译器188也可确保CPU虚函数表和GPU虚函数表指针可在对象布局中位于相同偏移。
在缺乏工具链支持的情况下,在一个实施例中,可允许用户将CPU虚函数表和GPU虚函数表拷贝到共享非相干区域。在一个实施例中,可生成一个或多个宏以便于CPU和GPU表到共享非相干存储区域的这种人工拷贝。
在运行时,在可创建共享对象诸如共享对象131之后,可创建对象布局801,其可包含用于多重继承的多个"vptr"。在一个实施例中,对象表801中的共享对象131的虚拟表指针(vptr)可被更新(打补丁)成指向共享非相干区域中的虚函数表的新拷贝。在一个实施例中,可使用类的构造器更新共享对象的虚拟表指针,该类可包含虚函数。在一个实施例中,如果类不包含任何虚函数,则这种类的数据和函数可被共享,并且可能不一定在运行时期间更新(或打补丁)。
在块780,vptr(虚函数表指针)可被修改成指向共享非相干区域,同时创建共享对象131。在一个实施例中,vptr通过默认指向私有虚函数表(CPU虚函数表或GPU虚函数表)可被修改(如在图8中由实线802-C所指示)成指向共享非相干区域860。在一个实施例中,虚函数可按如下调用:
Mov eax,[ecx]#ecx含有“this”指针,eax含有vptr;
Call[eax,vfunc]#vfunc是虚函数表中的虚函数索引。
在CPU侧,以上代码可调用虚函数的CPU实现;而在GPU侧,以上代码可调用虚函数的GPU实现。这种方法可允许类的数据共享和虚函数共享。
在图8中示出了使用虚拟共享非相干区域支持异质处理器之间的虚函数共享的关系图800的实施例。在一个实施例中,对象布局801可包含第一槽801-A中的虚拟表指针(vptr)以及其它字段诸如槽801-B和801-C中的字段1和字段2。在一个实施例中,在CPU编译器118和GPU编译器188执行位于槽801-A中的虚函数表指针(vptr)之后,生成(如虚线802-A所指示的)CPU虚函数表和GPU虚函数表(如虚线802-B所指示的)。CPU虚函数表(CPU虚函数表)可位于CPU私有地址空间115内的地址810,并且GPU虚函数表可位于GPU私有地址空间185内的地址840。在一个实施例中,CPU虚函数表可包含诸如vfunc1和vfunc2的函数指针,并且GPU虚函数表可包含诸如vfunc1'和vfunc2'的函数指针。在一个实施例中,函数指针(vfunc1和vfunc2)与(vfunc1'和vfunc2')也可不同,因为指针指向同一函数的不同实现。
在一个实施例中,作为修改vptr(如在块780中所示)的结果,vptr可指向共享虚拟存储器130内的共享非相干区域860。在一个实施例中,CPU虚函数表可位于地址Address870,并且GPU虚函数表可位于相同地址Address 870。在一个实施例中,CPU虚函数表可包含诸如vfunc1和vfunc2的函数指针,并且GPU虚函数表可包含诸如vfunc1'和vfunc2'的函数指针。在一个实施例中,函数指针(vfunc1和vfunc2)与(vfunc1'和vfunc2')可不同。在一个实施例中,将CPU虚函数表和GPU虚函数表保存在共享非相干区域860中可使CPU 110和GPU 180分别能够在同一地址位置Address870看到CPU虚函数表和GPU虚函数表,然而,CPU虚函数表的内容(vfunc1和vfunc2)可不同于GPU虚函数表的内容(vfunc1'和vfunc2')。
在图9中示出了包括支持双向通信的异质处理器的计算机系统900的实施例。参考图9,计算机系统900可包含包括单指令多数据(SIMD)处理器的通用处理器(或CPU)902和图形处理器单元(GPU)905。在一个实施例中,CPU 902除了执行各种其它任务或存储指令序列之外还可执行增强操作,以在机器可读存储介质925中提供增强操作。然而,指令序列还可存储在CPU私有存储器920中,或者任何其它适当的存储介质中。在一个实施例中,CPU 902可与CPU旧编译器903和CPU链接器/加载器904相关联。在一个实施例中,GPU905可与GPU专有编译器906和GPU链接器/加载器907相关联。
虽然在图9中描绘了单独图形处理器单元GPU 905,但在一些实施例中,作为另一个示例,处理器902可用于执行增强操作。操作计算机系统900的处理器902可以是耦合到逻辑930的一个或多个处理器核。逻辑930可耦合到一个或多个I/O装置960,其可提供到计算机系统900的接口。逻辑930在一个实施例中例如可以是芯片集逻辑。逻辑930耦合到存储器920,其可以是任何种类的储存器,包含光、磁或半导体储存装置。图形处理器单元905通过帧缓冲器耦合到显示器940。
在一个实施例中,计算平台900可支持一种或多种技术以允许通过细粒度划分共享对象来通过诸如共享对象的虚函数的成员函数进行异质处理器CPU 902与GPU 905之间的双向通信(函数调用)。在一个实施例中,计算机系统900可允许使用称为“基于表”的技术的第一技术进行CPU 902与GPU 905之间的双向通信。在其它实施例中,计算平台可允许使用称为“非相干区域”技术的第二技术进行CPU 902与GPU 905之间的双向通信,在该技术中,可在位于私有CPU存储器920、私有GPU存储器930或共享存储器950中的虚拟共享存储器中创建虚拟共享非相干区域。在一个实施例中,在计算机系统900中可不提供单独的共享存储器诸如共享存储器950,并且在这种情况下,可在其中一个私有存储器诸如CPU存储器920或GPU存储器930内提供共享存储器。
在一个实施例中,当使用基于表的技术时,可用于访问来自CPU 110或GPU 180的共享对象的共享对象的CPU侧虚函数表指针可用于确定GPU虚函数表,如果存在GPU侧表的话。在一个实施例中,GPU侧虚函数表可包含<"类名"、CPU虚函数表地址、GPU虚函数表地址>。在一个实施例中,获得GPU侧虚函数表地址和生成GPU侧表的技术,如上所述。
在其它实施例中,当使用“非相干区域”技术时,在共享虚拟存储器内创建共享非相干区域。在一个实施例中,共享非相干区域可以不保持数据一致性。在一个实施例中,共享非相干区域内的CPU侧数据和GPU侧数据可具有与从CPU侧和GPU侧看到的相同的地址。然而,CPU侧数据的内容可不同于GPU侧数据的内容,因为共享虚拟存储器在运行时期间可以不保持一致性。在一个实施例中,共享非相干区域可用于存储每个共享类的虚拟方法表的新拷贝。在一个实施例中,这种方法可将虚拟表保持在同一地址。
本文描述的图形处理技术可用各种硬件架构实现。例如,图形功能性可集成在芯片集内。备选地,可使用分立图形处理器。作为又一实施例,图形功能可由通用处理器实现,包含多核处理器,或实现为存储在机器可读介质中的软件指令集。
Claims (31)
1.一种在计算平台中的方法,包括:
创建包含多个虚函数的共享对象;
将所述共享对象存储在共享虚拟存储器中;以及
在第一处理器与第二处理器之间共享所述多个虚函数中的至少一个;
其中所述计算平台包含第一处理器和第二处理器;
其中所述第一处理器和所述第二处理器是异质处理器。
2.如权利要求1所述的方法,包括如果第二处理器侧表包含类名、第一处理器侧虚拟表地址和第二处理器侧虚拟表地址,则使用第一处理器侧虚拟表指针确定第二处理器侧虚拟表。
3.如权利要求2所述的方法,还包括:将第一处理器侧虚拟表指针包含在所述共享对象中。
4.如权利要求2所述的方法,包括:在执行程序的初始化阶段生成第二处理器侧表。
5.如权利要求4所述的方法,包括:将指向所述共享对象的注册函数的函数指针包含到初始化段,其中将指向所述共享对象的所述注册函数的所述函数指针包含到所述初始化段要在所述初始化阶段执行所述注册函数。
6.如权利要求5所述的方法,包括:
在第一表中注册所述类名和所述第一处理器侧虚拟表地址,同时在所述第一处理器侧执行所述注册函数;
在第二表中注册所述类名和所述第二处理器侧虚拟表地址,同时在所述第二处理器侧执行所述注册函数;以及
通过合并所述第一表和所述第二表生成第二处理器侧表。
7.如权利要求6所述的方法,其中所述第二处理器侧表支持动态链接库和静态链接库。
8.如权利要求1所述的方法,包括:在所述共享虚拟存储器内创建共享非相干区域以存储第一处理器的虚函数表和第二处理器的虚函数表。
9.如权利要求8所述的方法,包括:将非相干标签添加到所述共享虚拟存储器中的区域以创建所述共享非相干区域。
10.如权利要求8所述的方法,包括:将所述共享对象的虚拟表从所述第一处理器和所述第二处理器的私有地址空间拷贝到所述共享非相干区域,其中即使所述虚拟表的内容不同,所述共享对象的所述虚拟表也位于所述共享非相干区域中的相同地址。
11.如权利要求10所述的方法,包括:将指向所述第一处理器侧虚拟表和所述第二处理器侧虚拟表的虚拟指针修改成指向所述共享非相干区域,同时创建所述共享对象。
12.一种计算平台,包括:
用于创建包含多个虚函数的共享对象的装置;
用于将所述共享对象存储在共享虚拟存储器中的装置;以及
用于在第一处理器与第二处理器之间共享所述多个虚函数中的至少一个的装置;
其中所述计算平台包含第一处理器和第二处理器;
其中所述第一处理器和所述第二处理器是异质处理器。
13.如权利要求12所述的计算平台,包括装置,用于如果第二处理器侧表包含类名、第一处理器侧虚拟表地址和第二处理器侧虚拟表地址,则使用第一处理器侧虚拟表指针确定第二处理器侧虚拟表。
14.如权利要求13所述的计算平台,还包括:用于将第一处理器侧虚拟表指针包含在所述共享对象中的装置。
15.如权利要求13所述的计算平台,包括:用于在执行程序的初始化阶段生成第二处理器侧表的装置。
16.如权利要求15所述的计算平台,包括:用于将指向所述共享对象的注册函数的函数指针包含到初始化段的装置,其中将指向所述共享对象的所述注册函数的所述函数指针包含到所述初始化段要在所述初始化阶段执行所述注册函数。
17.如权利要求16所述的计算平台,包括:
用于在第一表中注册所述类名和第一处理器侧虚拟表地址,同时在第一处理器侧执行所述注册函数的装置;
用于在第二表中注册所述类名和第二处理器侧虚拟表地址,同时在第二处理器侧执行所述注册函数的装置;以及
用于通过合并所述第一表和所述第二表生成第二处理器侧表的装置。
18.如权利要求17所述的计算平台,其中第二处理器侧表支持动态链接库和静态链接库。
19.如权利要求12所述的计算平台,包括:用于在所述共享虚拟存储器内创建共享非相干区域以存储所述第一处理器的虚函数表和所述第二处理器的虚函数表的装置。
20.如权利要求19所述的计算平台,包括:用于将非相干标签添加到所述共享虚拟存储器中的区域以创建所述共享非相干区域的装置。
21.如权利要求19所述的计算平台,包括:用于将所述共享对象的虚拟表从第一处理器和第二处理器的私有地址空间拷贝到所述共享非相干区域的装置,其中即使所述虚拟表的内容不同,所述共享对象的所述虚拟表也位于所述共享非相干区域中的相同地址。
22.如权利要求21所述的计算平台,包括:用于将指向第一处理器侧虚拟表和第二处理器侧虚拟表的虚拟指针修改成指向所述共享非相干区域,同时创建所述共享对象的装置。
23.一种计算平台,包括:
多个异质处理器,包含第一处理器和第二处理器,其中所述第一处理器耦合到第一编译器,并且所述第二处理器耦合到第二编译器;
其中第一编译器创建共享对象,所述共享对象包含分配给所述第一处理器的第一虚拟成员函数和分配给所述第二处理器的第二虚拟成员函数;
其中所述第一处理器创建包含多个虚函数的共享对象,将所述共享对象存储在共享虚拟存储器中,并与第二处理器共享所述多个虚函数中的至少一个。
24.如权利要求23所述的计算平台,其中如果第二处理器侧表包含类名、第一处理器侧虚拟表地址和第二处理器侧虚拟表地址,则所述第一处理器使用第一处理器侧虚拟表指针确定第二处理器侧虚拟表。
25.如权利要求24所述的计算平台,其中所述第一处理器侧虚拟表指针被包含在所述共享对象中。
26.如权利要求24所述的计算平台,其中所述第一处理器在执行程序的初始化阶段生成所述第二处理器侧表。
27.如权利要求26所述的计算平台,其中所述第一处理器将指向所述共享对象的注册函数的函数指针包含到初始化段,其中将指向所述共享对象的所述注册函数的所述函数指针包含到所述初始化段要在所述初始化阶段执行所述注册函数。
28.如权利要求27所述的计算平台,其中第一处理器支持:
在第一表中注册所述类名和所述第一处理器侧虚拟表地址,同时在所述第一处理器侧执行所述注册函数;
在第二表中注册所述类名和所述第二处理器侧虚拟表地址,同时在所述第二处理器侧执行所述注册函数;以及
通过合并所述第一表和所述第二表生成第二处理器侧表。
29.如权利要求23所述的计算平台,其中所述第一处理器在所述共享虚拟存储器内创建共享非相干区域以存储所述第一处理器的虚函数表和第二处理器的虚函数表,其中通过将非相干标签添加到所述共享虚拟存储器中的区域来创建所述共享非相干区域。
30.如权利要求29所述的计算平台,其中所述第一处理器和所述第二处理器支持将所述共享对象的虚拟表从所述第一处理器和所述第二处理器的私有地址空间拷贝到所述共享非相干区域,其中即使所述虚拟表的内容不同,所述共享对象的所述虚拟表也位于所述共享非相干区域中的相同地址。
31.如权利要求30所述的计算平台,其中所述第一处理器支持将指向所述第一处理器侧虚拟表和所述第二处理器侧虚拟表的虚拟指针修改成指向所述共享非相干区域,同时创建所述共享对象。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410790536.8A CN104536740B (zh) | 2010-09-24 | 2010-09-24 | 计算平台的异质处理器之间的共享虚拟存储器中的虚函数共享 |
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 |
---|---|---|---|
CN201410790536.8A Division CN104536740B (zh) | 2010-09-24 | 2010-09-24 | 计算平台的异质处理器之间的共享虚拟存储器中的虚函数共享 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103109286A CN103109286A (zh) | 2013-05-15 |
CN103109286B true CN103109286B (zh) | 2016-08-24 |
Family
ID=45873372
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201080069225.2A Active CN103109286B (zh) | 2010-09-24 | 2010-09-24 | 计算平台的异质处理器之间的共享虚拟存储器中的虚函数共享 |
Country Status (7)
Country | Link |
---|---|
US (2) | US8997113B2 (zh) |
EP (2) | EP3043269B1 (zh) |
JP (1) | JP5639274B2 (zh) |
KR (3) | KR101534037B1 (zh) |
CN (1) | CN103109286B (zh) |
TW (1) | TWI573094B (zh) |
WO (1) | WO2012037706A1 (zh) |
Families Citing this family (26)
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 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101187902A (zh) * | 2006-09-22 | 2008-05-28 | 英特尔公司 | 在虚拟机环境中的客户机之间共享信息 |
Family Cites Families (33)
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 |
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 | 인텔 코포레이션 | 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유 |
-
2010
- 2010-09-24 KR KR1020137006592A patent/KR101534037B1/ko active IP Right Grant
- 2010-09-24 KR KR1020147036803A patent/KR101581796B1/ko active IP Right Grant
- 2010-09-24 WO PCT/CN2010/001470 patent/WO2012037706A1/en active Application Filing
- 2010-09-24 EP EP16158622.7A patent/EP3043269B1/en active Active
- 2010-09-24 CN CN201080069225.2A patent/CN103109286B/zh active Active
- 2010-09-24 KR KR1020157036580A patent/KR101761650B1/ko active IP Right Grant
- 2010-09-24 JP JP2013529523A patent/JP5639274B2/ja active Active
- 2010-09-24 EP EP10857421.1A patent/EP2619687B1/en active Active
- 2010-09-24 US US13/000,621 patent/US8997113B2/en active Active
-
2011
- 2011-03-29 TW TW100110745A patent/TWI573094B/zh active
-
2014
- 2014-12-12 US US14/569,454 patent/US20150113255A1/en not_active Abandoned
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101187902A (zh) * | 2006-09-22 | 2008-05-28 | 英特尔公司 | 在虚拟机环境中的客户机之间共享信息 |
Also Published As
Publication number | Publication date |
---|---|
WO2012037706A1 (en) | 2012-03-29 |
EP2619687B1 (en) | 2016-04-06 |
EP3043269A1 (en) | 2016-07-13 |
JP5639274B2 (ja) | 2014-12-10 |
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 |
KR101581796B1 (ko) | 2016-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103109286B (zh) | 计算平台的异质处理器之间的共享虚拟存储器中的虚函数共享 | |
US8719839B2 (en) | Two way communication support for heterogenous processors of a computer platform | |
US10620988B2 (en) | Distributed computing architecture | |
EP1942411B1 (en) | Producer graph oriented programming and execution | |
TW200844853A (en) | Virtual architecture and instruction set for parallel thread computing | |
WO2008064902A2 (en) | Producer graph oriented programming framework with scenario support | |
Heller et al. | Closing the performance gap with modern c++ | |
Breitbart | CuPP-a framework for easy CUDA integration | |
CN104536740B (zh) | 计算平台的异质处理器之间的共享虚拟存储器中的虚函数共享 | |
Bieniusa et al. | The architecture of the DecentVM: Towards a decentralized virtual machine for many-core computing | |
Aldinucci et al. | Accelerating sequential programs using FastFlow and self-offloading | |
JP6280581B2 (ja) | 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有 | |
JP5902273B2 (ja) | 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有 | |
Edmonds et al. | Extensible PGAS semantics for C++ | |
Breitbart | A framework for easy CUDA integration in C++ applications | |
Ohlemacher | Conception and development of a Pipe & Filter framework for C++ | |
Farahaninia | Acceleration of Parallel Applications by Moving Code Instead of Data | |
Garcia | Prof. Renato Fontoura de Gusmao Cerqueira |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |