CN102625934B - 共享虚拟存储器 - Google Patents

共享虚拟存储器 Download PDF

Info

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
Application number
CN200980154460.7A
Other languages
English (en)
Other versions
CN102625934A (zh
Inventor
H·陈
Y·高
周小成
S·闫
P·张
J·方
A·孟德尔森
B·萨哈
莫罕·拉贾戈帕兰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Priority to CN201410562398.8A priority Critical patent/CN104298621B/zh
Publication of CN102625934A publication Critical patent/CN102625934A/zh
Application granted granted Critical
Publication of CN102625934B publication Critical patent/CN102625934B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • 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/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • 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/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1036Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
    • 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/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1045Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
    • G06F12/1063Address 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
    • 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
    • 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/1081Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
    • 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/109Address translation for multiple virtual address spaces, e.g. segmentation
    • 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/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • 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/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/16General purpose computing application
    • G06F2212/161Portable computer, e.g. notebook
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • G06F2212/622State-only directory, i.e. not recording identity of sharing or owning nodes
    • 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/656Address space sharing
    • 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

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上不同的物理地址的装置。
CN200980154460.7A 2008-11-13 2009-11-05 共享虚拟存储器 Active CN102625934B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (2)

* Cited by examiner, † Cited by third party
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