CN102625934B - 共享虚拟存储器 - Google Patents
共享虚拟存储器 Download PDFInfo
- Publication number
- CN102625934B CN102625934B CN200980154460.7A CN200980154460A CN102625934B CN 102625934 B CN102625934 B CN 102625934B CN 200980154460 A CN200980154460 A CN 200980154460A CN 102625934 B CN102625934 B CN 102625934B
- Authority
- CN
- China
- Prior art keywords
- gpu
- cpu
- shared
- page
- address
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- 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/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
-
- 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/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
- G06F12/1036—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
-
- 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/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
- G06F12/1045—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
- G06F12/1063—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache the data cache being concurrently virtually addressed
-
- 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
- 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/1081—Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
-
- 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/109—Address translation for multiple virtual address spaces, e.g. segmentation
-
- 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/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- 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/1009—Address translation using page tables, e.g. page table structures
-
- 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/16—General purpose computing application
- G06F2212/161—Portable computer, e.g. notebook
-
- 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/62—Details of cache specific to multiprocessor cache arrangements
- G06F2212/622—State-only directory, i.e. not recording identity of sharing or owning nodes
-
- 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/656—Address space sharing
-
- 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
Abstract
本发明的多个实施例提供了用于CPU-GPU平台的编程模型。特别是,本发明的多个实施例提供用于集成和分离设备的统一编程模型。该模型也可以统一地对多个GPU卡和混合GPU系统(分离的和集成的)工作。这允许软件销售商编写单个应用堆栈并使其面向所有不同的平台。此外,本发明的实施例提供了在CPU和GPU之间的共享存储器模型。代替了共享整个虚拟地址空间,仅仅虚拟地址空间的一部分需要被共享。这允许在分离的和集成的设置中的高效实施。
Description
背景技术
这通常涉及共享虚拟存储器实施方式。
计算工业正在朝向多样性的平台体系结构发展,该平台体系结构由通用CPU以及作为分离设备或集成设备而附连的可编程GPU所构成。这些GPU通过连续或非连续互连来连接,具有不同的工业标准体系结构(ISA)并可使用它们自己的操作系统。
由通用处理器(CPU)以及图形处理器(GPU)的组合所组成的计算平台已经无处不在,特别是在客户机计算空间中。如今,几乎所有桌面和笔记本平台都载有一个或多个CPU以及集成或分离的GPU。例如,一些平台具有与集成图形芯片组成对的处理器,而其余的使用通过诸如PCI-Express之类的接口连接的分离图形处理器。一些平台载有CPU和GPU的组合。例如,它们中的一些包括更为集成的CPU-GPU平台,而其他的包括图形处理器以补偿集成GPU供给。
这些CPU-GPU平台可提供在图形处理、医疗成像、数据挖掘、以及其他领域的非图形工作负载上的极大的性能提升。大量的数据并行GPU可被用于获取代码的高度并行部分上的高吞吐量。多样性的CPU-GPU平台可具有多个独特的体系结构约束,诸如:
●GPU可以集成和分离的方式连接。例如,一些图形处理器与芯片组集成。另一方面,其他当前的GPU以分离方式通过诸如PCI-Express之类的接口附连。虽然硬件可提供CPU和集成图形处理器之间的缓存一致性,但是对分离的GPU却很难如此。系统也可具有混合配置,其中低功率低性能GPU与CPU集成,且具有更高性能的分离GPU。最终,平台也可具有多个GPU卡。
●CPU和GPU可具有不同的操作系统。例如,处理器可具有它自己的操作系统内核。这意味着虚拟存储器翻译机制在CPU和GPU之间可能是不同的。相同的虚拟地址可能被通过CPU和GPU上的两个不同的页表被同时映射到两个不同的物理地址。这也意味着系统环境(加载器、链接器、等等)在CPU和GPU之间可以是不同的。例如,加载器可将应用加载在CPU和GPU上的不同基地址。
●CPU和GPU可具有不同的ISA,并因此相同的代码可能无法在两个处理器上运行。
附图简述
图1是根据一个实施例的CPU-GPU存储器模型的图示。
图2是用于增加了所有权权限的共享存储器模型的一个实施例的流程图。
图3是共享存储器模型的一个实施例的流程图。
图4是利用PCI开口的共享存储器模型的一个实施例的流程图。
图5是利用PCI开口的共享存储器模型的一个实施例的流程图。
图6是操作中的共享存储器模型的一个实施例的流程图。
详细描述
本发明的多个实施例提供了用于CPU-GPU平台的编程模型。特别是,本发明的多个实施例提供用于集成和分离设备的统一编程模型。该模型也可以统一地对多个GPU卡和混合GPU系统(分离的和集成的)工作。这允许软件销售商编写单个应用堆栈并将使其面向所有不同的平台。此外,本发明的实施例提供了在CPU和GPU之间的共享存储器模型。代替了共享整个虚拟地址空间,仅仅一部分虚拟地址空间需要被共享。这允许在分离的和集成的设置中的有效实现。进一步的,语言注释可被用于区分必须被运行在GPU上的代码。语言支持可被扩展为包括诸如函数指针之类的特征。
共享存储器模型的诸实施例提供了新颖的编程式样。特别是,数据结构可以在CPU和GPU之间无缝共享,并且可以从一端向另一端传递指针而不要求任何格式编组。例如,在一个实施例中,游戏引擎和包括物理、人工智能(AI)以及渲染。物理和AI代码最好在CPU上执行,而渲染最好在GPU上执行。诸如场景图片之类的数据结构可能需要在CPU和GPU之间共享。在一些当前的编程环境中这样的执行模型可能是行不通的,因为场景图片需要被来来回回地串行化(或格式编组)。然而在共享存储器模型的诸实施例中,场景图片可简单地位于共享存储器中,并可被CPU和GPU共同访问。
在一个实施例中,实现了包括语言和运行时支持的完全编程环境。多个高度并行的非图形负载可经由端口与该环境对接。该实现可工作在多样性的操作系统上,即,在CPU和GPU上运行不同操作系统。此外,可在CPU和GPU之间允许用户级通信。这可使得应用堆栈更为高效,因为可以消除CPU-GPU通信中的OS驱动器堆栈的开销。该编程环境可经由端口与两个不同的多样性CPU-GPU平台模拟器对接——一个模拟作为分离设备附加到CPU的GPU,另一个模拟集成CPU-GPU平台。
总之,CPU-GPU平台的编程模型的诸实施例可以:
●为分离的、集成的、多GPU卡和混合GPU配置提供统一编程模型。
●在CPU和GPU之间提供共享存储器语义,允许在CPU和GPU之间自由地传递指针并共享数据结构。
●被实现在具有CPU和GPU上不同的ISA和不同操作系统的多样性的CPU-GPU平台中。
●在CPU和GPU之间使能用户级通信,因此使得应用堆栈更为高效。
存储器模型
图1是根据一个实施例的GPU-CPU存储器模型的图示。在一个实施例中,存储器模型100提供CPU 110和GPU 120之间的共享虚拟地址窗口130,诸如以分割全局地址空间(PGAS)语言。在CPU 100和GPU 120之间共享的任何数据结构通常必须被编程者分配在该空间130中。本系统可提供将数据分配在该空间130中的特殊存储器分配(malloc)函数。静态变量可被注释以类型量词,以使它们被分配在共享窗口130中。然而,与PGAS语言不同,在共享窗口中没有亲和力(affinity)的概念。这是因为在共享空间130中的数据随着它被每个处理器所使用而在CPU和GPU高速缓存之间迁移。也与PGAS实现方式不同,指针的表示在共享和私有空间中不发生改变。剩余的虚拟地址空间对CPU 110和GPU 120而言是私有的。默认地,数据被分配在该空间130中,且对另一侧不可见。该分割地址空间方式可削减需要保持一致性的存储量,并实现对分离设备的更为高效的实施。
该存储器模型的实施例可被扩展到多GPU和混合配置中。特别是,共享虚拟地址窗口可以跨所有的设备而扩展。被分配在该共享地址窗口130中的任何数据结构可对所有代理而言都是可见的,且该空间中的指针可以自由地交换。此外,每个代理具有其自有的私有存储器。
由于多个原因,可使用共享地址空间中的释放一致性。第一,本系统仅仅需要记住连续释放指针之间的所有写入,而不是单独写入的序列。这更易于在释放点进行批量转换(诸如,在同一时间对若干页),这在分离配置中很重要。第二,这允许存储器更新被完全保持在本地直到释放点,这在分离配置中很重要。第三,释放一致性模型可以对CPU-GPU平台的编程模式是良好的匹配,因为存在自然释放和获取点。例如,从CPU到GPU的调用是一个这样的点。在调用之前使得任何CPU更新对GPU可见可能不起到任何作用,并且对向CPU更新如何变得可见强加任何命令都是没有意义的,只要它们都在GPU开始执行之前是可见的既可。进一步的,所提出的C/C++存储器模型可被容易地映射到共享存储器空间。通常,非竞争程序可能不受共享存储器空间的弱连续性模型的影响。该实现方式可能不需要被限制在为竞争程序提供更强的保证。然而,不同的实施例可选择为共享空间提供不同的连续性模型。
图2是用于增加了所有权权限的共享存储器模型的一个实施例的流程图。顺序200可被实现在固件、软件或硬件中。软件实施例可被存储在诸如光盘、磁盘或半导体存储器之类的计算机可读介质上。特别是,可向共享存储器模型的诸实施例添加所有权权限以实现进一步的一致性优化。在共享虚拟地址窗口中,CPU或GPU可指定其拥有特定的地址块(框210)。如果在共享窗口中的地址范围是由CPU所拥有的(框220),那么CPU知道GPU无法访问那些地址并因此不需要维持那些地址与GPU的一致性(框230)。例如,这可以避免向GPU发送任何监听或其他一致性信息。对于GPU拥有的地址也一样。如果GPU访问CPU拥有的地址,那么该地址变为非拥有的(对于GPU拥有的地址存在对称的行为)。或者,由GPU(CPU)对CPU(GPU)拥有的地址的访问可以触发错误情况。
本发明的诸实施例可提供这些所有权权限以利用公共CPU-GPU使用模型。例如,CPU首先访问一些数据(诸如,初始化数据结构),并且随后将其转交给GPU(诸如,以数据并行方式在数据结构上进行计算),并随后CPU分析计算结构,等等。所有权权限允许应用通知系统该临时局部性,并优化一致性实施方式。注意到,这些所有权权限是优化提示,并且本系统可以合法地忽略这些提示。
私有化和全局化
在一个实施例中,共享数据可通过从共享空间复制到私有空间而被私有化。不含指针数据结构可简单地通过复制存储器内容而被私有化。当复制含指针数据结构时,指向共享数据的指针必须被转换为指向私有数据的指针。
私有数据可以通过从私有空间复制到共享空间并对其他计算可见而被全局化。不含指针数据结构可简单地通过复制存储器内容而被全局化。当复制含指针数据结构时,指向私有数据的指针必须被转换为指向共享数据的指针(私有化示例的相反示例)。
例如,在一个实施例中,考虑在私有和共享空间中的节点链表。对于私有链表的类型定义是标准的:
typedef struct{
int val;//仅仅是int字段
Node*next;
}Node;
对于共享链表的类型定义如下所示。注意,指向下一节点的指针被定义为放置在共享空间中。用户必须明确地声明类型的私有和共享版本。
typedef struct{
shared int val;
shared Node*shared next;
}shared Node;
现在用户可通过下面的代码而明确地将私有链表复制到共享空间:
…
myNode=(shared Node*)sharedMalloc(..);
//指向私有链表的头指针
myNode->val=head->val
myNode->next=(shared Node*)sharedMalloc(..);
…
由编译器使用的运行时API如下示出:
//分配并释放私有地址空间中的存储器
Maps to regular malloc
void*privateMalloc(int);
void privateFree(void*);
//从共享空间分配并释放。
shared void*sharedMalloc(size_t size);
void sharedFree(shared void*ptr);
//对于共享存储器的存储器连续性
void sharedAcquire();
void sharedRelease();
最后,运行时也为互斥体(mutex)和屏障体(barrier)提供API,以允许应用执行显式同步。这些结构经常分配在共享区域中。
本语言提供了自然获取和释放点。例如,从CPU向GPU的调用是CPU上的释放点紧接着在GPU上的获取点。类似地,从GPU的返回是在GPU上的释放点以及在CPU上的获取点。获取互斥体(mutex)的所有权并释放互斥体(mutex)分别是处理器进行互斥(mutex)操作的获取点和释放点,而命中屏障体(barrier)并通过屏障体(barrier)也是释放点和获取点。
在一个实施例中,运行时系统可为所有权的获取和释放提供API调用。例如,sharedMemoryAcquire()和sharedMemoryRelease()可以获取并释放整个存储器范围的所有权。或者,系统可提供sharedMemoryAcquire(addr,len)和sharedMemoryRelease(addr,len)以获取特定地址范围内的所有权。
实现
在一个实施例中,编译器生成两种二进制代码——一个用于在GPU上执行,而另一个用于CPU执行。生成两种不同的可执行代码,因为两个操作系统可能具有不同的可执行代码格式。GPU二进制代码包含将在GPU上执行的代码,而CPU二进制代码包含CPU函数。运行时库包括CPU和GPU部分,其与CPU和GPU应用二进制代码相链接以创建CPU和GPU可执行代码。当CPU二进制代码开始执行时,它调用运行时函数,该运行时函数加载GPU可执行代码。CPU和GPU二进制代码都创建用于CPU-GPU通信的虚拟线程。
实施CPU-GPU共享存储器
图3是共享存储器模型的一个实施例的流程图。顺序300可被实现在固件、软件或硬件中。在一个实施例中,CPU和GPU可具有不同的页表以及不同的虚拟到物理存储器翻译(框310)。因此,为了在CPU和GPU之间(诸如,在释放点)同步虚拟地址V的内容,不同物理地址的内容(诸如,CPU上的P1和GPU上的P2)被同步(框320)。然而,CPU可能不具有对GPU页表的访问权(且因此不知道P2),并且GPU不具有对CPU页表的访问权因此不知道P1。
这个问题可通过以新颖的方式来使用PCI开口而解决。图4是利用PCI开口的共享存储器模型的一个实施例的流程图。序列400可被实现在固件、软件或硬件中。在初始化时,PCI开口空间的一部分可被映射到应用的用户空间,并且以任务队列、消息队列以及复制缓冲器来例示(框410)。当需要复制页(例如,从CPU到GPU)时(框420),运行时将页复制到PCI开口复制缓冲器中,并使用虚拟地址和进程标识符对缓冲器进行标记(框430)。在GPU侧,虚拟线程通过使用虚拟地址标记将缓冲器的内容复制到它的地址空间(框440)。因此,该复制可以以2步进程来执行——CPU从其地址空间复制到CPU和GPU都可访问的公共缓冲器(PCI开口),而GPU从该公共缓冲器提取页到其地址空间。GPU-CPU复制可以类似方式来完成。因为开口是插针存储器,如果CPU或GPU进程发生上下文切换,开口的内容不会丢失。这允许两个处理器异步地执行,这是非常关键的,因为两个处理器可能具有不同的操作系统并且因此上下文切换可能不是同步的。进一步的,开口空间可被映射到应用的用户空间中,由此实现用户级的CPU-GPU通信。这使得应用堆栈比起通过OS驱动器堆栈而言高效得多。
本发明的诸实施例可使用传统软件DSM和CPU-GPU平台之间的另一个差别。传统DSM被设计为规模在中型或大型群集。相反,CPU-GPU系统是非常小规模的群集。超过手持大小的GPU卡和CPU插槽在未来被良好使用几乎不太可能。此外,PCI开口提供了在不同处理器之间的方便共享的物理存储器空间。
本发明的诸实施例能够集中许多数据结构并使得实施更为高效。图5是利用PCI开口的共享存储器模型的一个实施例的流程图。序列500可被实现在固件、软件或硬件中。参考框510,将包括与共享地址区域中的页有关的元数据的目录放置在PCI开口中。元数据描述了CPU或GPU是否保持页的贵重副本(该页的主页),包含了追踪页的更新次数的版本号、在更新页之前获取的互斥体(mutexes)、以及各种元数据。该目录可由页的虚拟地址来索引(框520)。CPU和GPU运行时系统都维持类似的私有结构,该私有结构包含页的本地访问许可以及页的本地版本号。
图6是操作中的共享存储器模型的一个实施例的流程图。序列500可被实现在固件、软件或硬件中。在一个实施例中,序列600可被实现在固件、软件或硬件中。当GPU执行获取操作时(框610),对应的页可被设置为在GPU上是不可访问的(620)。在后续的读取操作时,如果在最后一次GPU获取之后页已经被CPU更新并释放(630),则GPU上的页面错误管理器从CPU复制页(框640)。目录和私有版本号可被用于确定该情况。该页随后被设置为只读(框650)。在后续的写入操作时,页错误管理器创建页的备份副本,将页标记为可读写并递增页的本地版本号(框660)。在释放点,使用页的备份副本执行差异处理(diff),并将更改发送到主页位置,同时递增目录版本号(框670)。差异处理(diff)操作计算两个页(即,页及其备份)之间存储器位置的差异,以寻找已经被执行的更改。CPU操作以对称的方式来完成。因此,在获取点和释放点之间,GPU和CPU超出它们的本地存储器和高速缓存而操作并仅仅在显式同步点上彼此进行通信。
在开始时,本实施方式确定将在CPU和GPU之间共享的地址范围,并确保该地址范围一直保持映射(诸如,使用Linux上的mmap)。该地址范围可以动态地增长,并不需要是连续的,虽然在64位地址空间中,运行时系统在最开始可能保留连续的块。
本发明的诸实施例可被实现在基于处理器的系统中,在一个实施例中该系统可包括耦合到芯片组的通用处理器。芯片组可耦合到系统存储器和图形处理器。图形处理器可耦合到帧缓冲器,并依次耦合到显示器。在一个实施例中,图1-6中示出的本发明的诸实施例可被实现为存储在计算机可读介质(诸如,系统存储器)中的软件。然而,本发明的诸实施例也可被实现为硬件或固件。
结论
本编程模型的诸实施例提供了用于CPU-GPU平台的共享存储器模型,其实现了CPU和GPU之间的细粒化一致性。可以为分离配置以及集成配置、以及多GPU和混合配置实现本统一编程模型。用户注释也被用于区分CPU和GPU执行的代码。可在CPU和GPU之间提供用户级通信,因此消除了OS驱动器调用的开销。可以为编程模型实现完全的软件堆栈,包括编译器和运行时支持。
在说明书通篇中提及的“一个实施例”、“实施例”意味着结合该实施例所描述的特定特征、结构或特性被包括在本发明内涵盖的至少一个实现中。因此,短语“一个实施例”或“在实施例中”的出现不一定是指同一个实施例。此外,还可以以除所示出的特定实施例以外的其他合适的形式构成该特定特征、结构或特性,所有这样的形式都可以涵盖在本申请的权利要求书内。
尽管本发明已针对有限数量的实施例作了描述,然而本领域技术人员将会从其中领会到许多修改和变型。所附权利要求旨在覆盖所有这样的修改和变型,只要其落在本发明的真实精神和范围内。
Claims (23)
1.一种用于操作具有CPU和GPU的处理装置的方法,包括:
在所述CPU和所述GPU之间共享存储器语义,包括允许在CPU和GPU之间传递指针并共享数据结构;
允许共享存储器中存储的数据结构被CPU和GPU两者所访问;
确定CPU和GPU是否具有不同的页表和不同的虚拟到物理存储器翻译;以及
响应于不同的页表和不同的虚拟到物理存储器翻译,同步在CPU和GPU之间的虚拟地址内容以及不同物理地址的内容,包括:
在初始化时,将PCI开口的一部分映射到应用的用户空间,并使用任务队列、消息队列以及复制缓冲器来例示所述用户空间,所述PCI开口的一部分是对CPU和GPU都可访问的;
对于从CPU到GPU的页复制,将页从CPU地址空间复制到PCI开口中,并使GPU从PCI开口将页存取到其地址空间;以及
对于从GPU到CPU的页复制,将页从GPU地址空间复制到PCI开口中,并使CPU从PCI开口将页存取到其地址空间。
2.如权利要求1所述的方法,其特征在于,还包括:
在CPU和GPU之间共享地址,包括向存储器空间分配在CPU和GPU之间共享的数据结构。
3.如权利要求1所述的方法,其特征在于,还包括:在CPU和GPU之间共享虚拟地址,但使所述虚拟地址被映射到CPU和GPU上不同的物理地址。
4.如权利要求3所述的方法,其特征在于,向存储器空间分配在CPU和GPU之间共享的数据结构进一步包括:使用在存储器空间中分配数据的存储器分配函数。
5.如权利要求4所述的方法,其特征在于,向存储器空间分配在CPU和GPU之间共享的数据结构进一步包括静态变量的编程者注释,使这些变量被分配在共享存储器空间中。
6.如权利要求1所述的方法,其特征在于,还包括:当共享在存储器空间中的数据被CPU或GPU使用时,将共享在存储器空间中的数据在CPU和GPU存储器之间按需迁移。
7.如权利要求1所述的方法,其特征在于,还包括:将地址空间分割为CPU和GPU之间的共享地址空间以及对CPU或GPU私有的剩余地址空间;以及
将默认数据分配到私有空间。
8.如权利要求7所述的方法,其特征在于,指针的表示在共享和私有空间之间不发生改变。
9.如权利要求7所述的方法,其特征在于,还包括:
CPU或GPU指定其在共享虚拟地址空间中拥有特定的地址块。
10.如权利要求7所述的方法,其特征在于,CPU或GPU指定其在共享虚拟地址空间中拥有特定的地址块进一步包括:
当共享虚拟地址空间中的地址范围由CPU所拥有时,CPU知道GPU无法访问那些地址,并且不需要维持那些地址与GPU的一致性;以及
当CPU拥有的地址被GPU访问时,所述地址变为非拥有的。
11.如权利要求1所述的方法,其特征在于,所述PCI开口可以被映射到应用的用户空间,因此实现了用户级CPU和GPU通信。
12.如权利要求11所述的方法,其特征在于,还包括:
将包括与共享地址区域中的页有关的元数据的目录放置在PCI开口中,其中所述元数据指示CPU或GPU是否保持页的主页,包含了追踪对页的更新次数的版本号以及在更新页之前获取的互斥体。
13.如权利要求12所述的方法,其特征在于,所述目录可以通过页的虚拟地址来索引。
14.权利要求1所述的方法,其特征在于,GPU包括离散的设备或集成的设备或以不同配置的多个GPU的组合。
15.权利要求1所述的方法,其特征在于,进一步包括:对于多个图形卡和混合图形系统,统一地共享存储器语义。
16.一种共享存储器,其中在CPU和GPU之间共享数据结构并且可将指针从一侧传递到另一侧而不需要要求任何格式编组,使得共享存储器中的相同的指针可以被CPU和GPU中的每一个所访问,
其中允许共享存储器中存储的数据结构被CPU和GPU两者所访问;
所述共享存储器适于:
确定CPU和GPU是否具有不同的页表和不同的虚拟到物理存储器翻译;以及
响应于不同的页表和不同的虚拟到物理存储器翻译,同步在CPU和GPU之间的虚拟地址内容以及不同物理地址的内容,包括:
在初始化时,将PCI开口的一部分映射到应用的用户空间,并使用任务队列、消息队列以及复制缓冲器来例示所述用户空间,所述PCI开口的一部分是对CPU和GPU都可访问的;
对于从CPU到GPU的页复制,将页从CPU地址空间复制到PCI开口中,并使GPU从PCI开口将页存取到其地址空间;以及
对于从GPU到CPU的页复制,将页从GPU地址空间复制到PCI开口中,并使CPU从PCI开口将页存取到其地址空间。
17.如权利要求16所述的共享存储器,其特征在于,场景图片位于共享存储器中,并且可以由CPU和GPU来访问。
18.如权利要求16所述的共享存储器,其特征在于,在CPU和GPU上运行不同的操作系统的情况下实现所述共享存储器。
19.如权利要求16所述的共享存储器,其特征在于,在GPU以分离设备附加到CPU上的情况下实现所述共享存储器。
20.如权利要求16所述的共享存储器,其特征在于,在集成CPU-GPU平台中实现所述共享存储器。
21.一种用于操作具有CPU和GPU的处理装置的设备,包括:
用于在所述CPU和所述GPU之间共享存储器语义,包括允许在CPU和GPU之间传递指针并共享数据结构的装置;
用于允许共享存储器中存储的数据结构被CPU和GPU两者所访问的装置;
用于确定CPU和GPU是否具有不同的页表和不同的虚拟到物理存储器翻译的装置;以及
用于响应于不同的页表和不同的虚拟到物理存储器翻译,同步在CPU和GPU之间的虚拟地址内容以及不同物理地址的内容的装置,包括:
在初始化时,将PCI开口的一部分映射到应用的用户空间,并使用任务队列、消息队列以及复制缓冲器来例示所述用户空间,所述PCI开口的一部分是对CPU和GPU都可访问的;
对于从CPU到GPU的页复制,将页从CPU地址空间复制到PCI开口中,并使GPU从PCI开口将页存取到其地址空间;以及
对于从GPU到CPU的页复制,将页从GPU地址空间复制到PCI开口中,并使CPU从PCI开口将页存取到其地址空间。
22.如权利要求21所述的设备,其特征在于,进一步包括:
用于在CPU和GPU之间共享地址,包括向存储器空间分配在CPU和GPU之间共享的数据结构的装置。
23.如权利要求22所述的设备,其特征在于,进一步包括:
用于在CPU和GPU之间共享虚拟地址,并且使所述虚拟地址被映射到CPU和GPU上不同的物理地址的装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410562398.8A CN104298621B (zh) | 2008-11-13 | 2009-11-05 | 共享虚拟存储器 |
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US19909508P | 2008-11-13 | 2008-11-13 | |
US61/199,095 | 2008-11-13 | ||
US12/317,853 US8531471B2 (en) | 2008-11-13 | 2008-12-30 | Shared virtual memory |
US12/317,853 | 2008-12-30 | ||
PCT/US2009/063368 WO2010056587A2 (en) | 2008-11-13 | 2009-11-05 | Shared virtual memory |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410562398.8A Division CN104298621B (zh) | 2008-11-13 | 2009-11-05 | 共享虚拟存储器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102625934A CN102625934A (zh) | 2012-08-01 |
CN102625934B true CN102625934B (zh) | 2015-06-17 |
Family
ID=42164803
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410562398.8A Active CN104298621B (zh) | 2008-11-13 | 2009-11-05 | 共享虚拟存储器 |
CN200980154460.7A Active CN102625934B (zh) | 2008-11-13 | 2009-11-05 | 共享虚拟存储器 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410562398.8A Active CN104298621B (zh) | 2008-11-13 | 2009-11-05 | 共享虚拟存储器 |
Country Status (5)
Country | Link |
---|---|
US (7) | US8531471B2 (zh) |
EP (2) | EP2889782A1 (zh) |
CN (2) | CN104298621B (zh) |
HK (1) | HK1172108A1 (zh) |
WO (1) | WO2010056587A2 (zh) |
Families Citing this family (126)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8776030B2 (en) * | 2008-04-09 | 2014-07-08 | Nvidia Corporation | Partitioning CUDA code for execution by a general purpose processor |
US8531471B2 (en) * | 2008-11-13 | 2013-09-10 | Intel Corporation | Shared virtual memory |
US8776088B2 (en) | 2009-03-30 | 2014-07-08 | Microsoft Corporation | Operating system distributed over heterogeneous platforms |
US8395631B1 (en) * | 2009-04-30 | 2013-03-12 | Nvidia Corporation | Method and system for sharing memory between multiple graphics processing units in a computer system |
US8619086B2 (en) * | 2009-04-30 | 2013-12-31 | Intel Corporation | Managing three dimensional scenes using shared and unified graphics processing unit memory |
US9547535B1 (en) * | 2009-04-30 | 2017-01-17 | Nvidia Corporation | Method and system for providing shared memory access to graphics processing unit processes |
US8451281B2 (en) | 2009-06-23 | 2013-05-28 | Intel Corporation | Shared virtual memory between a host and discrete graphics device in a computing system |
US8868848B2 (en) | 2009-12-21 | 2014-10-21 | Intel Corporation | Sharing virtual memory-based multi-version data between the heterogenous processors of a computer platform |
US20110212761A1 (en) * | 2010-02-26 | 2011-09-01 | Igt | Gaming machine processor |
US8537169B1 (en) | 2010-03-01 | 2013-09-17 | Nvidia Corporation | GPU virtual memory model for OpenGL |
US9128849B2 (en) * | 2010-04-13 | 2015-09-08 | Apple Inc. | Coherent memory scheme for heterogeneous processors |
US8723877B2 (en) | 2010-05-20 | 2014-05-13 | Apple Inc. | Subbuffer objects |
US8756590B2 (en) * | 2010-06-22 | 2014-06-17 | Microsoft Corporation | Binding data parallel device source code |
CN102298567A (zh) * | 2010-06-28 | 2011-12-28 | 安凯(广州)微电子技术有限公司 | 一种集成中央运算和图形加速的移动处理器架构 |
CN101894051A (zh) * | 2010-07-29 | 2010-11-24 | 中国科学技术大学 | 基于主辅数据结构的cpu-gpu合作计算方法 |
US20120036301A1 (en) * | 2010-08-03 | 2012-02-09 | Caspole Eric R | Processor support for filling memory regions |
US9164886B1 (en) | 2010-09-21 | 2015-10-20 | Western Digital Technologies, Inc. | System and method for multistage processing in a memory storage subsystem |
CN104536740B (zh) * | 2010-09-24 | 2018-05-08 | 英特尔公司 | 计算平台的异质处理器之间的共享虚拟存储器中的虚函数共享 |
EP2619687B1 (en) * | 2010-09-24 | 2016-04-06 | Intel Corporation | Sharing virtual functions in a shared virtual memory between heterogeneous processors of a computing platform |
WO2012050560A1 (en) | 2010-10-11 | 2012-04-19 | Hewlett-Packard Development Company, L.P. | First and second software stacks and discrete and integrated graphics processing units |
US8732496B2 (en) * | 2011-03-24 | 2014-05-20 | Nvidia Corporation | Method and apparatus to support a self-refreshing display device coupled to a graphics controller |
US8566537B2 (en) | 2011-03-29 | 2013-10-22 | Intel Corporation | Method and apparatus to facilitate shared pointers in a heterogeneous platform |
US8949777B2 (en) * | 2011-04-22 | 2015-02-03 | Intel Corporation | Methods and systems for mapping a function pointer to the device code |
CN102253919A (zh) * | 2011-05-25 | 2011-11-23 | 中国石油集团川庆钻探工程有限公司 | 基于gpu和cpu协同运算的并行数值模拟方法和系统 |
US9164923B2 (en) * | 2011-07-01 | 2015-10-20 | Intel Corporation | Dynamic pinning of virtual pages shared between different type processors of a heterogeneous computing platform |
US9633407B2 (en) * | 2011-07-29 | 2017-04-25 | Intel Corporation | CPU/GPU synchronization mechanism |
US9075913B2 (en) * | 2012-02-27 | 2015-07-07 | Qualcomm Incorporated | Validation of applications for graphics processing unit |
US20130262814A1 (en) * | 2012-03-29 | 2013-10-03 | Advanced Micro Devices, Inc. | Mapping Memory Instructions into a Shared Memory Address Place |
US9116809B2 (en) | 2012-03-29 | 2015-08-25 | Ati Technologies Ulc | Memory heaps in a memory model for a unified computing system |
US9456354B2 (en) | 2012-04-12 | 2016-09-27 | Tarana Wireless, Inc. | Non-line of sight wireless communication system and method |
US9252908B1 (en) | 2012-04-12 | 2016-02-02 | Tarana Wireless, Inc. | Non-line of sight wireless communication system and method |
US9735940B1 (en) | 2012-04-12 | 2017-08-15 | Tarana Wireless, Inc. | System architecture for optimizing the capacity of adaptive array systems |
US9325409B1 (en) | 2012-04-12 | 2016-04-26 | Tarana Wireless, Inc. | Non-line of sight wireless communication system and method |
WO2013159288A1 (en) | 2012-04-25 | 2013-10-31 | Intel Corporation | Method and system for maintaining release consistency in shared memory programming |
US9697120B2 (en) | 2012-05-09 | 2017-07-04 | Intel Corporation | Execution using multiple page tables |
US10025643B2 (en) * | 2012-05-10 | 2018-07-17 | Nvidia Corporation | System and method for compiler support for kernel launches in device code |
US9009419B2 (en) * | 2012-07-31 | 2015-04-14 | Advanced Micro Devices, Inc. | Shared memory space in a unified memory model |
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 |
US9373182B2 (en) * | 2012-08-17 | 2016-06-21 | Intel Corporation | Memory sharing via a unified memory architecture |
US9348580B2 (en) | 2012-10-26 | 2016-05-24 | Hewlett Packard Enterprise Development Lp | Processing streaming data with open executors |
US9110795B2 (en) | 2012-12-10 | 2015-08-18 | Qualcomm Incorporated | System and method for dynamically allocating memory in a memory subsystem having asymmetric memory components |
US9092327B2 (en) | 2012-12-10 | 2015-07-28 | Qualcomm Incorporated | System and method for allocating memory to dissimilar memory devices using quality of service |
US8959298B2 (en) | 2012-12-10 | 2015-02-17 | Qualcomm Incorporated | System and method for managing performance of a computing device having dissimilar memory types |
US10110270B2 (en) | 2013-03-14 | 2018-10-23 | Tarana Wireless, Inc. | Precision array processing using semi-coherent transceivers |
DE102013022169A1 (de) | 2013-03-14 | 2014-09-18 | Nvidia Corporation | Fehlerpuffer zur verfolgung von seitenfehlern in einem vereinheitlichten virtuellen speichersystem |
US10303616B2 (en) * | 2013-03-14 | 2019-05-28 | Nvidia Corporation | Migration scheme for unified virtual memory system |
US10133677B2 (en) * | 2013-03-14 | 2018-11-20 | Nvidia Corporation | Opportunistic migration of memory pages in a unified virtual memory system |
US9619364B2 (en) | 2013-03-14 | 2017-04-11 | Nvidia Corporation | Grouping and analysis of data access hazard reports |
US10499456B1 (en) | 2013-03-15 | 2019-12-03 | Tarana Wireless, Inc. | Distributed capacity base station architecture for broadband access with enhanced in-band GPS co-existence |
CN104102542A (zh) * | 2013-04-10 | 2014-10-15 | 华为技术有限公司 | 一种网络数据包处理方法和装置 |
WO2014178450A1 (ko) * | 2013-04-30 | 2014-11-06 | 전자부품연구원 | Cpu와 gpu 간의 협업 시스템 및 그 방법 |
US10255650B2 (en) * | 2013-05-24 | 2019-04-09 | Sony Interactive Entertainment Inc. | Graphics processing using dynamic resources |
US9495722B2 (en) | 2013-05-24 | 2016-11-15 | Sony Interactive Entertainment Inc. | Developer controlled layout |
US9948571B2 (en) * | 2013-06-28 | 2018-04-17 | Oracle International Corporation | System and method for cloud connection pool |
US9311011B2 (en) * | 2013-08-07 | 2016-04-12 | Qualcomm Incorporated | Dynamic address negotiation for shared memory regions in heterogenous multiprocessor systems |
US9535826B2 (en) * | 2013-08-30 | 2017-01-03 | Nec Corporation | Automatic communication and optimization of multi-dimensional arrays for many-core coprocessor using static compiler analysis |
US8719374B1 (en) | 2013-09-19 | 2014-05-06 | Farelogix, Inc. | Accessing large data stores over a communications network |
US9478000B2 (en) | 2013-09-27 | 2016-10-25 | Intel Corporation | Sharing non-page aligned memory |
US20150091837A1 (en) * | 2013-09-27 | 2015-04-02 | Raman M. Srinivasan | Providing Touch Engine Processing Remotely from a Touch Screen |
US9881592B2 (en) | 2013-10-08 | 2018-01-30 | Nvidia Corporation | Hardware overlay assignment |
CN104635258B (zh) * | 2013-11-06 | 2017-06-13 | 中国石油天然气集团公司 | 一种应用cpu‑gpu平台进行地震波逆时偏移成像方法 |
US20150134765A1 (en) * | 2013-11-11 | 2015-05-14 | Qualcomm Innovation Center, Inc. | Point-to-point shared memory protocol with feature negotiation |
US9971576B2 (en) * | 2013-11-20 | 2018-05-15 | Nvidia Corporation | Software development environment and method of compiling integrated source code |
CA2925753A1 (en) * | 2014-01-13 | 2015-07-16 | Huawei Technologies Co., Ltd. | Method for pattern processing |
US9886736B2 (en) | 2014-01-20 | 2018-02-06 | Nvidia Corporation | Selectively killing trapped multi-process service clients sharing the same hardware context |
US10152312B2 (en) | 2014-01-21 | 2018-12-11 | Nvidia Corporation | Dynamic compiler parallelism techniques |
US9436395B2 (en) | 2014-03-14 | 2016-09-06 | Advanced Micro Devices, Inc. | Mechanisms to save user/kernel copy for cross device communications |
US10348394B1 (en) | 2014-03-14 | 2019-07-09 | Tarana Wireless, Inc. | System architecture and method for enhancing wireless networks with mini-satellites and pseudollites and adaptive antenna processing |
US20150301955A1 (en) * | 2014-04-21 | 2015-10-22 | Qualcomm Incorporated | Extending protection domains to co-processors |
US9507726B2 (en) | 2014-04-25 | 2016-11-29 | Apple Inc. | GPU shared virtual memory working set management |
US9563571B2 (en) | 2014-04-25 | 2017-02-07 | Apple Inc. | Intelligent GPU memory pre-fetching and GPU translation lookaside buffer management |
US20160188251A1 (en) * | 2014-07-15 | 2016-06-30 | Nvidia Corporation | Techniques for Creating a Notion of Privileged Data Access in a Unified Virtual Memory System |
JP5902273B2 (ja) * | 2014-10-23 | 2016-04-13 | インテル コーポレイション | 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有 |
KR102355573B1 (ko) * | 2014-10-29 | 2022-01-27 | 삼성전자주식회사 | 선형 리맵퍼 및 액세스 윈도우를 포함하는 메모리 시스템 및 시스템 온 칩 |
KR101620602B1 (ko) | 2014-10-29 | 2016-05-11 | 재단법인대구경북과학기술원 | Gpu를 이용한 큰 규모 그래프 처리 시스템 및 방법 |
US9342384B1 (en) | 2014-12-18 | 2016-05-17 | Intel Corporation | Function callback mechanism between a central processing unit (CPU) and an auxiliary processor |
US9886934B2 (en) * | 2014-12-24 | 2018-02-06 | Intel Corporation | Ordering mechanism for offload graphics scheduling |
WO2016139534A2 (en) * | 2015-03-02 | 2016-09-09 | Strand Life Sciences Private Limited | Apparatuses and methods for determining a patient's response to multiple cancer drugs |
CN104809078B (zh) * | 2015-04-14 | 2019-05-14 | 苏州中晟宏芯信息科技有限公司 | 基于退出退让机制的共享高速缓存硬件资源访问方法 |
DE102016106939B4 (de) | 2015-04-17 | 2024-05-02 | Suunto Oy | Eingebettetes Rechengerät |
US20170004647A1 (en) * | 2015-06-30 | 2017-01-05 | Microsoft Technology Licensing, Llc | Rendering graphics data on demand |
US11068401B2 (en) * | 2015-09-25 | 2021-07-20 | Intel Corporation | Method and apparatus to improve shared memory efficiency |
CN106651748B (zh) | 2015-10-30 | 2019-10-22 | 华为技术有限公司 | 一种图像处理方法与图像处理装置 |
GB2546343A (en) * | 2016-01-15 | 2017-07-19 | Stmicroelectronics (Grenoble2) Sas | Apparatus and methods implementing dispatch mechanisms for offloading executable functions |
CN105573852B (zh) * | 2016-02-03 | 2018-11-30 | 南京大学 | 一种虚拟地址隔离环境下超高速数据对象通信的方法 |
JP6280581B2 (ja) * | 2016-03-10 | 2018-02-14 | インテル コーポレイション | 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有 |
US10019377B2 (en) * | 2016-05-23 | 2018-07-10 | Advanced Micro Devices, Inc. | Managing cache coherence using information in a page table |
US10157440B2 (en) * | 2016-09-20 | 2018-12-18 | Intel Corporation | Static data sharing mechanism for a heterogeneous processing environment |
CN107870800A (zh) * | 2016-09-23 | 2018-04-03 | 超威半导体(上海)有限公司 | 虚拟机活跃性检测 |
CN107977251B (zh) * | 2016-10-21 | 2023-10-27 | 超威半导体(上海)有限公司 | 对在虚拟化系统中的共享寄存器的排他访问 |
CN108206937B (zh) * | 2016-12-20 | 2020-05-19 | 浙江宇视科技有限公司 | 一种提升智能分析性能的方法和装置 |
US10614356B2 (en) * | 2017-04-24 | 2020-04-07 | International Business Machines Corporation | Local multicast in single-host multi-GPU machine for distributed deep learning systems |
US10872394B2 (en) * | 2017-04-27 | 2020-12-22 | Daegu Gyeongbuk Institute Of Science And Technology | Frequent pattern mining method and apparatus |
US10489881B2 (en) * | 2017-06-30 | 2019-11-26 | H3 Platform Inc. | Direct memory access for co-processor memory |
US11294653B2 (en) * | 2017-09-27 | 2022-04-05 | Jayant Shukla | Methods and systems of disassembling executable code |
CN107943743A (zh) * | 2017-11-17 | 2018-04-20 | 江苏微锐超算科技有限公司 | 计算设备的信息存储、读取方法及共享虚拟介质承载芯片 |
CN107958214A (zh) * | 2017-11-21 | 2018-04-24 | 中国科学院深圳先进技术研究院 | Ecg信号的并行分析装置、方法和移动终端 |
CN107945098B (zh) * | 2017-11-24 | 2022-03-01 | 腾讯科技(深圳)有限公司 | 图像处理方法、装置、计算机设备和存储介质 |
KR102533241B1 (ko) | 2018-01-25 | 2023-05-16 | 삼성전자주식회사 | 적응적으로 캐시 일관성을 제어하도록 구성된 이종 컴퓨팅 시스템 |
US11792307B2 (en) | 2018-03-28 | 2023-10-17 | Apple Inc. | Methods and apparatus for single entity buffer pool management |
CN108768940A (zh) * | 2018-04-19 | 2018-11-06 | 丙申南京网络技术有限公司 | 一种基于计算机网络安全并行分隔保护的数据挖掘系统及方法 |
US10846224B2 (en) * | 2018-08-24 | 2020-11-24 | Apple Inc. | Methods and apparatus for control of a jointly shared memory-mapped region |
CN109614086B (zh) * | 2018-11-14 | 2022-04-05 | 西安翔腾微电子科技有限公司 | 基于SystemC和TLM模型的GPU纹理缓冲区数据存储硬件及存储装置 |
KR102655094B1 (ko) * | 2018-11-16 | 2024-04-08 | 삼성전자주식회사 | 메모리를 공유하는 이종의 프로세서들을 포함하는 스토리지 장치 및 그것의 동작 방법 |
CN109656868B (zh) * | 2018-11-19 | 2022-12-06 | 浙江大学宁波理工学院 | 一种cpu与gpu之间的内存数据转移方法 |
US11734192B2 (en) | 2018-12-10 | 2023-08-22 | International Business Machines Corporation | Identifying location of data granules in global virtual address space |
US11016908B2 (en) * | 2018-12-11 | 2021-05-25 | International Business Machines Corporation | Distributed directory of named data elements in coordination namespace |
KR20200109973A (ko) * | 2019-03-15 | 2020-09-23 | 에스케이하이닉스 주식회사 | 메모리 공유를 위한 메모리 시스템 및 그것을 포함하는 데이터 처리 시스템 |
US10761821B1 (en) * | 2019-03-27 | 2020-09-01 | Sap Se | Object oriented programming model for graphics processing units (GPUS) |
CN110189245A (zh) * | 2019-05-27 | 2019-08-30 | 武汉中导光电设备有限公司 | 基于GPUDirect技术的图像检测方法及系统 |
US11558348B2 (en) | 2019-09-26 | 2023-01-17 | Apple Inc. | Methods and apparatus for emerging use case support in user space networking |
US11477123B2 (en) | 2019-09-26 | 2022-10-18 | Apple Inc. | Methods and apparatus for low latency operation in user space networking |
US11829303B2 (en) * | 2019-09-26 | 2023-11-28 | Apple Inc. | Methods and apparatus for device driver operation in non-kernel space |
US11256522B2 (en) * | 2019-11-22 | 2022-02-22 | Advanced Micro Devices, Inc. | Loader and runtime operations for heterogeneous code objects |
US11467812B2 (en) | 2019-11-22 | 2022-10-11 | Advanced Micro Devices, Inc. | Compiler operations for heterogeneous code objects |
US11606302B2 (en) | 2020-06-12 | 2023-03-14 | Apple Inc. | Methods and apparatus for flow-based batching and processing |
CN112513817B (zh) * | 2020-08-14 | 2021-10-01 | 华为技术有限公司 | 一种主cpu与npu的数据交互方法及计算设备 |
US11775359B2 (en) | 2020-09-11 | 2023-10-03 | Apple Inc. | Methods and apparatuses for cross-layer processing |
US11954540B2 (en) | 2020-09-14 | 2024-04-09 | Apple Inc. | Methods and apparatus for thread-level execution in non-kernel space |
US11799986B2 (en) | 2020-09-22 | 2023-10-24 | Apple Inc. | Methods and apparatus for thread level execution in non-kernel space |
CN112230931B (zh) * | 2020-10-22 | 2021-11-02 | 上海壁仞智能科技有限公司 | 适用于图形处理器的二次卸载的编译方法、装置和介质 |
US11876719B2 (en) | 2021-07-26 | 2024-01-16 | Apple Inc. | Systems and methods for managing transmission control protocol (TCP) acknowledgements |
US11882051B2 (en) | 2021-07-26 | 2024-01-23 | Apple Inc. | Systems and methods for managing transmission control protocol (TCP) acknowledgements |
US11954785B2 (en) * | 2021-12-07 | 2024-04-09 | Canon Medical Systems Corporation | Data processing method and apparatus |
US20240012629A1 (en) * | 2022-07-11 | 2024-01-11 | Xilinx, Inc. | Compiler-based generation of transaction accurate models from high-level languages |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1666182A (zh) * | 2002-05-08 | 2005-09-07 | 英特尔公司 | 用于在主机处理器和图形处理器之间优化存储器共享的方法和系统 |
US7355601B2 (en) * | 2003-06-30 | 2008-04-08 | International Business Machines Corporation | System and method for transfer of data between processors using a locked set, head and tail pointers |
Family Cites Families (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5479630A (en) | 1991-04-03 | 1995-12-26 | Silicon Graphics Inc. | Hybrid cache having physical-cache and virtual-cache characteristics and method for accessing same |
US5848234A (en) * | 1993-05-21 | 1998-12-08 | Candle Distributed Solutions, Inc. | Object procedure messaging facility |
US6822654B1 (en) * | 2001-12-31 | 2004-11-23 | Apple Computer, Inc. | Memory controller chipset |
US6947051B2 (en) * | 2003-02-18 | 2005-09-20 | Microsoft Corporation | Video memory management |
US7075541B2 (en) * | 2003-08-18 | 2006-07-11 | Nvidia Corporation | Adaptive load balancing in a multi-processor graphics processing system |
US7248265B2 (en) * | 2004-04-16 | 2007-07-24 | Apple Inc. | System and method for processing graphics operations with graphics processing unit |
US7231632B2 (en) * | 2004-04-16 | 2007-06-12 | Apple Computer, Inc. | System for reducing the number of programs necessary to render an image |
EP1589433A1 (en) | 2004-04-20 | 2005-10-26 | Ecole Polytechnique Federale De Lausanne | Virtual memory window with dynamic prefetching support |
JP2005309867A (ja) * | 2004-04-22 | 2005-11-04 | Fujitsu Ltd | マルチコア・プロセサ試験方法 |
US7489318B1 (en) * | 2004-05-20 | 2009-02-10 | Nvidia Corporation | Apparatus and method for managing memory to generate a texture from a render target when forming graphical images |
US7305524B2 (en) * | 2004-10-08 | 2007-12-04 | International Business Machines Corporation | Snoop filter directory mechanism in coherency shared memory system |
US7598953B2 (en) * | 2004-11-05 | 2009-10-06 | Microsoft Corporation | Interpreter for simplified programming of graphics processor units in general purpose programming languages |
US20060164425A1 (en) * | 2005-01-24 | 2006-07-27 | Ati Technologies, Inc. | Methods and apparatus for updating a memory address remapping table |
TWI322354B (en) * | 2005-10-18 | 2010-03-21 | Via Tech Inc | Method and system for deferred command issuing in a computer system |
US8099538B2 (en) * | 2006-03-29 | 2012-01-17 | Intel Corporation | Increasing functionality of a reader-writer lock |
US7685371B1 (en) * | 2006-04-19 | 2010-03-23 | Nvidia Corporation | Hierarchical flush barrier mechanism with deadlock avoidance |
US20080030510A1 (en) * | 2006-08-02 | 2008-02-07 | Xgi Technology Inc. | Multi-GPU rendering system |
US7739466B2 (en) * | 2006-08-11 | 2010-06-15 | Intel Corporation | Method and apparatus for supporting immutable memory |
US7769979B1 (en) * | 2006-09-19 | 2010-08-03 | Nvidia Corporation | Caching of page access parameters |
US7928990B2 (en) * | 2006-09-27 | 2011-04-19 | Qualcomm Incorporated | Graphics processing unit with unified vertex cache and shader register file |
US20080109795A1 (en) * | 2006-11-02 | 2008-05-08 | Nvidia Corporation | C/c++ language extensions for general-purpose graphics processing unit |
US8860741B1 (en) * | 2006-12-08 | 2014-10-14 | Nvidia Corporation | Graphics processor with memory management unit and cache coherent link |
US8095735B2 (en) * | 2008-08-05 | 2012-01-10 | Convey Computer | Memory interleave for heterogeneous computing |
US8122229B2 (en) * | 2007-09-12 | 2012-02-21 | Convey Computer | Dispatch mechanism for dispatching instructions from a host processor to a co-processor |
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 |
US8102391B2 (en) * | 2008-04-11 | 2012-01-24 | International Business Machines Corporation | Hybrid rendering of image data utilizing streaming geometry frontend interconnected to physical rendering backend through dynamic accelerated data structure generator |
US8531471B2 (en) * | 2008-11-13 | 2013-09-10 | Intel Corporation | Shared virtual memory |
-
2008
- 2008-12-30 US US12/317,853 patent/US8531471B2/en active Active
- 2008-12-30 US US12/317,854 patent/US8397241B2/en active Active
-
2009
- 2009-11-05 EP EP14004361.3A patent/EP2889782A1/en not_active Withdrawn
- 2009-11-05 CN CN201410562398.8A patent/CN104298621B/zh active Active
- 2009-11-05 CN CN200980154460.7A patent/CN102625934B/zh active Active
- 2009-11-05 WO PCT/US2009/063368 patent/WO2010056587A2/en active Application Filing
- 2009-11-05 EP EP09826579.6A patent/EP2386087B1/en active Active
-
2012
- 2012-12-10 HK HK12112728.0A patent/HK1172108A1/zh unknown
-
2013
- 2013-03-11 US US13/792,427 patent/US8683487B2/en active Active
- 2013-09-04 US US14/017,498 patent/US20140049550A1/en not_active Abandoned
-
2014
- 2014-02-05 US US14/173,071 patent/US8997114B2/en active Active
- 2014-07-01 US US14/320,985 patent/US9400702B2/en active Active
- 2014-12-10 US US14/566,654 patent/US9588826B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1666182A (zh) * | 2002-05-08 | 2005-09-07 | 英特尔公司 | 用于在主机处理器和图形处理器之间优化存储器共享的方法和系统 |
US7355601B2 (en) * | 2003-06-30 | 2008-04-08 | International Business Machines Corporation | System and method for transfer of data between processors using a locked set, head and tail pointers |
Also Published As
Publication number | Publication date |
---|---|
US20140375662A1 (en) | 2014-12-25 |
EP2386087B1 (en) | 2017-06-21 |
CN102625934A (zh) | 2012-08-01 |
US9400702B2 (en) | 2016-07-26 |
US20140306972A1 (en) | 2014-10-16 |
CN104298621B (zh) | 2017-09-12 |
EP2386087A2 (en) | 2011-11-16 |
US20150123978A1 (en) | 2015-05-07 |
HK1172108A1 (zh) | 2013-04-12 |
US20130187936A1 (en) | 2013-07-25 |
CN104298621A (zh) | 2015-01-21 |
US20100118041A1 (en) | 2010-05-13 |
EP2889782A1 (en) | 2015-07-01 |
US9588826B2 (en) | 2017-03-07 |
US20140049550A1 (en) | 2014-02-20 |
WO2010056587A3 (en) | 2010-08-26 |
US8531471B2 (en) | 2013-09-10 |
US20100122264A1 (en) | 2010-05-13 |
US8683487B2 (en) | 2014-03-25 |
US8397241B2 (en) | 2013-03-12 |
EP2386087A4 (en) | 2013-02-27 |
WO2010056587A2 (en) | 2010-05-20 |
US8997114B2 (en) | 2015-03-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102625934B (zh) | 共享虚拟存储器 | |
US8719548B2 (en) | Method and system for efficient emulation of multiprocessor address translation on a multiprocessor | |
CN101484883B (zh) | 用于重新映射图形数据的存储器地址的装置和方法 | |
CN102541619B (zh) | 虚拟机管理装置和方法 | |
US10055254B2 (en) | Accelerated data operations in virtual environments | |
CN102971727B (zh) | 在软件分布式共享存储器系统中记录脏信息 | |
US20070261038A1 (en) | Code Translation and Pipeline Optimization | |
US8352718B1 (en) | Method, system, and computer-readable medium for expediting initialization of computing systems | |
KR101650424B1 (ko) | 기점 가상 머신으로부터 목적지 가상 머신으로의 동작 전송 | |
US7558724B2 (en) | Operation region describing a virtual device | |
US10565131B2 (en) | Main memory including hardware accelerator and method of operating the same | |
JP2015135696A (ja) | ローカル物理メモリとリモート物理メモリとの間で共有されるバーチャルメモリのためのハードウェアサポートの提供 | |
US9817689B2 (en) | Dirty page tracking of guest-uncached memory | |
GB2476360A (en) | Passing data from a CPU to a graphics processor by writing multiple versions of the data in a shared memory | |
JP2013521570A (ja) | ガーベッジコレクションに対するcpuサポート | |
US20040111707A1 (en) | Debugger for multiple processors and multiple debugging types | |
JP2003531434A (ja) | Javaコンピュータプログラムを実行するためのコンピュータ方法およびシステム | |
CN100405295C (zh) | 用于提供原地执行功能的系统和方法 | |
KR102326280B1 (ko) | 데이터 처리 방법, 장치, 기기 및 매체 | |
US20160041917A1 (en) | System and method for mirroring a volatile memory of a computer system | |
JP2005182780A (ja) | ランタイムデータ領域を設定するプラットフォーム独立方法 | |
Asokan | Designing multiprocessor systems in platform studio | |
US7694301B1 (en) | Method and system for supporting input/output for a virtual machine | |
Bryson et al. | Twizzer: The Design and Implementation of a NVM Aware OS | |
Yang et al. | A RISC-V On-chip Operating System Based on Rust |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1172108 Country of ref document: HK |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: GR Ref document number: 1172108 Country of ref document: HK |