CN102696023B - 用于访问并行存储器空间的统一寻址和指令 - Google Patents
用于访问并行存储器空间的统一寻址和指令 Download PDFInfo
- Publication number
- CN102696023B CN102696023B CN201080053742.0A CN201080053742A CN102696023B CN 102696023 B CN102696023 B CN 102696023B CN 201080053742 A CN201080053742 A CN 201080053742A CN 102696023 B CN102696023 B CN 102696023B
- Authority
- CN
- China
- Prior art keywords
- storage space
- address
- thread
- unified
- shared
- 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
- 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/1054—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 physically addressed
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4004—Coupling between buses
- G06F13/4027—Coupling between buses using bus bridges
- G06F13/404—Coupling between buses using bus bridges with address mapping
-
- 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/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0284—Multiple user address space allocation, e.g. using different base addresses
-
- 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
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/30—Providing cache or TLB in specific location of a processing system
- G06F2212/302—In image processor or graphics adapter
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
- Multi Processors (AREA)
Abstract
本发明的一个实施例提出了一种用于将对多个各异的并行存储器空间的寻址统一到用于线程的单个地址空间的技术。将统一的存储器空间地址转换到对并行存储器空间中一个用于该线程的空间进行访问的地址。可使用指定用于线程的统一的存储器空间地址的单一类型的加载或存储指令来取代使用不同类型的加载或存储指令以访问每一个各异的并行存储器空间。
Description
相关申请的交叉引用
本申请要求于2009年9月25日提交的序列号为12/567,637的美国临时专利申请的优先权。
技术领域
本发明总体上涉及存储器系统,且更具体地涉及将对多个各异的(distinct)存储器空间的寻址统一到单一地址空间中。
背景技术
数据处理系统中对性能的要求不断提高。多个处理单元可以被配置为通过执行多个并行线程而并行操作。对于一些应用软件而言,多个并行线程独立地执行。对于另一些应用软件而言,多个并行线程共享一些数据。例如,第一线程可计算由一个或多个其他线程使用的输入。最后,线程可以被组织成群组,其中数据在每个群组内而非在群组之间共享。
使用诸如由NVIDIA提供的CUDATM C(通用并行计算架构)和PTXTM(低级并行线程执行虚拟机和虚拟指令集架构)这类编程模块写入的多线程并行程序来访问两个或更多各异的存储器地址空间,这些存储器地址空间均具有不同的并行作用域(scope),例如,每线程的私有本地存储器、每群组的共享存储器和每应用的全局存储器。编程人员在每一个变量声明中指定存储器地址空间,并一般在访问变量时使用针对该存储器地址空间的加载和存储指令。例如,可以使用不同的三组加载/存储存储器访问指令来访问具有不同并行共享作用域的三个各异的存储器空间。第一组加载/存储存储器访问指令可被用于访问每线程所私有的本地存储器。第二组加载/存储存储器访问指令可被用于访问在单个组中所有线程之间所共享的共享存储器。第三组加载/存储存储器访问指令可被用于访问被所有组中的所有线程所共享的全局存储器。
在如C/C++这类语言中必须使用正确的存储器访问指令来引用指针。因此,当程序没有为指针引用指定存储器地址空间时,则在执行该程序之前,由编译器确定存储器地址空间并且将特定的加载或存储指令插入到被编译的程序中。另外,必须为存储器访问指令指定位于存储器地址空间中正确的地址。当从调用代码中单独编译C/C++函数时,编译器并不知道作为函数参数引用而被指针所传送的是哪个存储器空间,因此不知道插入哪个存储器访问指令。类似地,当使用不同存储器空间的指针参数从多个调用点进行函数调用时,或者经由函数的指针调用函数时,编译器不确定插入哪个存储器访问指令。对于指向任何具有不同作用域的存储器空间的任意指针,都必须在程序中插入若干指令的序列以访问正确的存储器空间。插入若干指令的序列适用于一些静态的编译时(compile-time)的情况,但不足以应对动态情况,诸如经由函数指针对库函数的多个调用,或者分开编译的函数。
据此,本领域中需要这样一种技术,使程序能够使用公共加载或存储指令来访问各自具有不同作用域的存储器空间。
发明内容
本发明的一个实施例提出了一种使程序能够使用共同的加载或存储指令来访问具有不同作用域的各异的并行存储器空间的技术。将统一的存储器空间地址转换到仅访问所述并行存储器空间之一的地址中。所述统一的存储器空间地址转换的优势在于,可以使用指定了所述统一的存储器空间地址的单一类型的加载或存储指令来取代使用不同类型的加载或存储指令以访问每一个各异的并行存储器空间。
本发明的用于使用统一的存储器空间地址来访问单独的并行存储器空间的方法的各种实施例包括,从所述统一的存储器空间地址中的字段提取并行存储器空间窗口位置,当所述并行存储器空间窗口位置与本地存储器空间相对应时将所述统一的存储器空间地址转换至用于每一个线程的本地存储器地址,当所述并行存储器空间窗口位置与共享存储器空间相对应时将所述统一的存储器空间地址转换至用于每一个线程阵列的共享存储器地址,以及当所述并行存储器空间窗口位置不与所述本地存储器空间或者所述共享存储器空间相对应时将所述统一的存储器空间地址转换至全局存储器地址。在每一个线程的本地存储器空间窗口内的所述统一的存储器空间地址可由该线程进行访问。在每一个线程阵列的共享存储器空间窗口内的所述统一的存储器空间地址可由该线程阵列中的线程进行访问。在所述全局存储器空间窗口内的所述统一的存储器空间地址可由所有线程阵列中的所有线程进行访问。
本发明的各种实施例包括处理器,所述处理器被配置为通过以下步骤使用统一的存储器空间地址来访问单独的并行存储器空间:从所述统一的存储器空间地址中的字段提取并行存储器空间窗口位置,当所述并行存储器空间窗口位置与本地存储器空间相对应时将所述统一的存储器空间地址转换至本地存储器地址,当所述并行存储器空间窗口位置与共享存储器空间相对应时将所述统一的存储器空间地址转换至共享存储器地址,以及当所述并行存储器空间窗口位置不与所述本地存储器空间或者所述共享存储器空间相对应时将所述统一的存储器空间地址转换至全局存储器地址。在每一个线程的本地存储器空间窗口内的所述统一的存储器空间地址可由该线程进行访问。在每一个线程阵列的共享存储器空间窗口内的所述统一的存储器空间地址可由该线程阵列中的线程进行访问。在所述全局存储器空间窗口内的所述统一的存储器空间地址可由所有线程阵列中的所有线程进行访问。
附图说明
为了详细地理解本发明的上述特征,对于以上简要说明的发明,可以参照实施例进行更为具体的描述,其中一些实施例示出于附图中。然而,应注意的是,附图中示出的只是本发明的代表性实施例,因此不应被认为是对本发明的范围的限制,本发明可以适用于其他同等有效的实施例。
图1是示出了被配置为实施本发明的一个或多个方面的计算机系统的框图;
图2是根据本发明一个实施例的、用于图1的计算机系统的并行处理子系统的框图;
图3A是根据本发明一个实施例的、图2的一个PPU内的GPC的框图;
图3B是根据本发明一个实施例的、在图2的一个PPU内的分区单元的框图;
图3C是根据本发明的一个实施例的、图3A的SPM的一部分的框图;
图4是根据本发明一个实施例的、从统一的地址空间到并行存储器地址空间的映射的示意图;
图5A示出了根据本发明一个实施例的64位统一地址格式;
图5B示出了根据本发明一个实施例的32位统一地址格式;以及
图6是根据本发明一个实施例的、用于将统一的地址转换到并行存储器空间地址中的方法步骤的流程图。
具体实施方式
在下面的描述中,阐释了大量具体细节以提供对本发明更为彻底的理解。然而,对于本领域技术人员来讲将显而易见的是,在缺少这些具体细节中的一个或多个的情况下也可以实施本发明。在其他例子中,为了避免与本发明发生混淆,对公知特征没有进行描述。
系统概述
图1是示出了被配置为实施本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括中央处理单元(CPU)102和系统存储器104,两者经由可包括存储器桥105的互连路径通信。存储器桥105例如可以是北桥芯片,经由总线或其他通信路径106(例如,超传输链接)连接到I/O(输入/输出)桥107。I/O桥107例如可以是南桥芯片,从一个或多个用户输入设备108(例如,键盘、鼠标)接收用户输入,并将该输入经由路径106和存储器桥105转发(forward)至CPU 102。并行处理子系统112经由总线或其他通信路径113(例如,PCI Express、加速图形端口或超传输链接)耦合至存储器桥105;在一个实施例中,并行处理子系统112是将像素传送到显示设备110(例如,常规的基于CRT或LCD的监视器)的图形子系统。系统盘114还连接到I/O桥107。开关116为I/O桥107和诸如网络适配器118以及各种外插卡(add-in card))120和121的其他组件之间提供了连接。其他组件(未明确示出)也可以连接到I/O桥107,包括USB或其他端口连接、CD驱动器、DVD驱动器、胶片记录设备等。图1中将各种组件互连的通信路径可以使用任何合适的协议来实现,比如PCI(外围组件互连)、PCI-Express、AGP(加速图形端口)、超传输或任何其他总线或点对点通信协议,并且不同设备之间的连接可以使用本领域已知的不同协议。
在一个实施例中,并行处理子系统112包含被优化用于图形和视频处理的电路,例如包括视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含被优化用于通用处理的电路,同时保留底层的(underlying)计算架构,本文将进行更为详细的描述。在又一些实施例中,并行处理子系统112可与一个或多个其他系统元件集成,诸如存储器桥105、CPU 102和I/O桥107,以形成片上系统(SoC)。
应予以理解的是,本文所示系统是例示性的,可以对其进行变形和修改。可根据需要修改连接拓扑结构,包括桥的数量和布置、CPU 102的数量以及并行处理子系统112的数量。例如,在一些实施例中,系统存储器104直接连接到CPU 102而非通过桥连接,并且其他设备经由存储器桥105和CPU 102与系统存储器104通信。在其他替代拓扑结构中,并行处理子系统112连接到I/O桥107或者直接连接到CPU 102,而非连接到存储器桥105。在又一些实施例中,I/O桥107和存储器桥105可能被集成到单个芯片中。多数实施例可包括两个或更多CPU 102以及包括两个或更多并行处理子系统112。本文所示特定组件是可选的;例如,任何数量的外插卡或外围设备都可能得到支持。在一些实施例中,开关116被省去,并且网络适配器118和外插卡120、121直接连接到I/O桥107。
图2示出了根据本发明一个实施例的并行处理子系统112。如图所示,并行处理子系统112包括一个或多个并行处理单元(PPU)202,其每一个均耦合至本地并行处理(PP)存储器204。一般来讲,并行处理子系统包括U个PPU,其中U≥1。(本文中,相似对象的多个实体用标识该对象的参考数字并根据需要结合标识该实体的带括号的数字加以表示)。PPU 202和并行处理存储器204可用一个或多个诸如可编程处理器、专用集成电路(ASIC)或存储器器件这类集成电路器件来实现,或者以任何其他在技术上可行的方式来实现。
再次参照图1,在一些实施例中,并行处理子系统112中的一些或所有PPU 202是具有渲染管线的图形处理器,可以被配置为执行与下述各项相关的各种任务:由图形数据生成像素数据,所述图形数据是由CPU 102和/或系统存储器104经由存储器桥105和总线113而供给的;与本地并行处理存储器204(可以作为图形存储器加以使用,包括例如常规的帧缓冲区)交互,以存储和更新像素数据;将像素数据输送到显示设备110;等等。在一些实施例中,并行处理子系统112可包括作为图形处理器而操作的一个或多个PPU 202以及供通用计算使用的一个或多个其他PPU 202。这些PPU可相同或不同,并且每个PPU均可具有其自己的专用并行处理存储器装置或非专用并行处理存储器装置。一个或多个PPU 202可向显示设备110输出数据,或者每个PPU 202均可向一个或多个显示设备110输出数据。
操作时,CPU 102是计算机系统100的主处理器,控制并协调其他系统组件的操作。具体来讲,CPU 102发出控制PPU 202的操作的命令。在一些实施例中,CPU 102将针对每个PPU 202的命令流写入到入栈缓冲区(pushbuffer)(图1和图2中均未明确示出),所述入栈缓冲区可位于系统存储器104、并行处理存储器204或者可由CPU 102和PPU 202访问的其他的存储位置中。PPU 202从入栈缓冲区读取命令流,然后相对于CPU 102的操作异步地执行命令。
现在返回参照图2,每个PPU 202均包括I/O(输入/输出)单元205,该I/O单元205经由通信路径113与计算机系统100其余部分通信,其连接到存储器桥105(或者,在一个替代实施例中,直接连接到CPU 102)。PPU 202与计算机系统100其余部分的连接也可以改变。在一些实施例中,并行处理子系统112被实现为可以被插入到计算机系统100的扩展槽中的外插卡。在另一些实施例中,PPU 202可以被集成在具有诸如存储器桥105或I/O桥107这类总线桥的单个芯片上。在又一些实施例中,PPU 202中的一些或全部元件可被集成在具有CPU 102的单个芯片上。
在一个实施例中,通信路径113是PCI-EXPRESS链接,其中给每个PPU 202分配有专用通道(lane),如本技术领域已知的。也可使用其他通信路径。I/O单元205生成数据包(或其他信号)用于在通信路径113上传送,并且也从通信路径113接收所有传入的数据包(或其他信号),将传入的数据包引向PPU 202的适当组件。例如,可将与处理任务相关的命令引向主机接口206,而可将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引向存储器交叉开关(crossbar)单元210。主机接口206对每个入栈缓冲区进行读取并将由该入栈缓冲区指定的工作输出到前端212。
每个PPU 202有利地实现高度并行的处理架构。如图中详细所示,PPU202(0)包括处理集群阵列230,该阵列包括C个通用处理集群(GPC)208,其中C≥1。每个GPC 208均能够并发执行大量(例如,数百个或数千个)线程,其中每个线程均为程序的实例(instance)。在各种应用中,可分配不同的GPC 208,用于处理不同类型的程序或用于执行不同类型的计算。例如,在图形应用中,可分配第一组GPC 208来执行曲面细分(tessellation)操作以及为曲面片(patch)生成基元(jprimitive)拓扑,并且可分配第二组GPC 208来执行曲面细分着色以估计基元拓扑的曲面片参数以及确定顶点位置和每顶点的其他属性。GPC 208的分配可依据每个类型的程序或计算产生的工作量而不同。
GPC 208经由工作分布单元200接收将要执行的处理任务,工作分布单元200从前端单元212接收定义处理任务的命令。处理任务包括将要处理的数据索引(index)以及定义将如何处理数据(例如,将执行哪个程序)的命令和状态参数,该将要处理的数据索引例如表面(曲面片)数据、基元数据、顶点数据和/或像素数据。工作分布单元200可被配置为获取与这些任务相对应的索引,或者工作分布单元200可从前端212接收索引。前端212确保在开始由入栈缓冲区所指定的处理之前GPC 208被配置为有效状态。
当PPU 202被用于图形处理时,例如,将每个曲面片的处理工作量分成大小近似相等的任务,以使曲面细分处理能够被分布到多个GPC 208。工作分布单元200可被配置为以能够将任务提供给多个GPC 208进行处理的频率生成任务。相比较来讲,在常规系统中,处理一般由单个处理引擎执行,而其他处理引擎仍处于空闲状态,在开始它们的处理任务之前等待前述单个处理引擎完成它的任务。在本发明的一些实施例中,GPC 208的各部分被配置为执行不同类型的处理。例如,第一部分可被配置为执行顶点着色和拓扑生成,第二部分可被配置为执行曲面细分和几何着色,并且第三部分可被配置为在屏幕空间中执行像素着色以生成渲染后的图像。由GPC 208生成的中间数据可被存储在缓冲区中,以允许中间数据在GPC208之间传送以用于进一步处理。
存储器接口214包括D个分区单元215,这些分区单元每一个均直接耦合至并行处理存储器204的一部分,其中D≥1。如图所示,分区单元215的数量通常等于DRAM 220的数量。在另一些实施例中,分区单元215的数量可以不等于存储器装置的数量。本领域技术人员将认识到,DRAM220可用其他合适的存储设备代替,并且可以采用一般常规设计。因此省略详细描述。可跨DRAM220来存储诸如帧缓冲区或纹理映射这样的渲染对象,允许分区单元215并行地写入每个渲染对象的一部分,以高效地使用并行处理存储器204的可用带宽。
GPC 208中的任何一个都可处理将被写入并行处理存储器204内任何DRAM 220的数据。交叉开关单元210被配置为将每个GPC 208的输出路由(route)至任一分区单元215的输入或路由至另一GPC 208,用于进一步处理。GPC 208通过交叉开关单元210与存储器接口214通信,以对各种外部存储器装置进行读写。在一个实施例中,交叉开关单元210具有连至存储器接口214以与I/O单元205通信的连接以及连至本地并行处理存储器204的连接,从而使不同GPC 208内的处理内核能够与系统存储器104或相对于PPU 202来讲非本地的其他存储器通信。在图2所示实施例中,交叉开关单元210与I/O单元205直接相连接。交叉开关单元210可使用虚拟信道在GPC 208和分区单元215之间分割业务(traffic)流。
再者,GPC 208可以被编程为执行与种类繁多的应用相关的处理任务,包括但不限于线性和非线性数据变换、视频和/或音频数据的过滤、建模操作(例如,运用物理定律确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分着色、顶点着色、几何着色和/或像素着色程序)等等。PPU 202可将数据从系统存储器104和/或本地并行处理存储器204传送到内部(片上)存储器中,对数据进行处理,并将结果数据写回到系统存储器104和/或本地并行处理存储器204,在这里这类数据可以由其他系统组件访问,包括CPU 102或另一并行处理子系统112。
PPU 202可设置有任何容量(amount)的本地并行处理存储器204,包括不设置本地存储器,并且可以任何组合方式来使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU 202可以是图形处理器。在这样的实施例中,将会提供极少的甚至不提供专用图形(并行处理)存储器,并且PPU 202将以排他的方式或者几乎以排他的方式使用系统存储器。在UMA实施例中,PPU 202可被集成到桥式芯片或处理器芯片中,或者可被提供为具有高速链接(例如,PCI-EXPRESS)的分立芯片,所述高速链接经由桥式芯片或其他通信装置将PPU 202连接到系统存储器。
如上所述,并行处理子系统112中可以包括有任何数量的PPU 202。例如,多个PPU 202可以被设置在单个外插卡上,或者多个外插卡可以连接到通信路径113,或者PPU 202中的一个或多个可以被集成到桥式芯片中。多PPU系统中的PPU 202可彼此相同或不同。例如,不同的PPU 202可能具有不同数量的处理内核、不同容量的本地并行处理存储器等。当存在有多个PPU 202时,可以并行地操作这些PPU从而以高于单个PPU202可能达到的吞吐量来处理数据。包含一个或多个PPU 202的系统可以以各种配置和形式因素来加以实现,包括桌上型电脑、膝上型电脑或者手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等。
处理集群阵列概述
图3A是根据本发明一个实施例的、图2的一个PPU 202内的GPC 208的框图。每个GPC 208可被配置为并行地执行大量线程,其中术语“线程”是指对特定的一组输入数据执行的特定程序的实例。在一些实施例中,采用单指令多数据(SIMD)指令发送技术来支持大量线程的并行执行,而无需提供多个独立指令单元。在另一些实施例中,采用单指令多线程(SIMT)技术,使用被配置为发送指令到每一个GPC 208内一组处理引擎的公共指令单元,来支持大量通常同步化的线程的并行执行。不同于其中所有处理引擎一般都执行相同指令的SIMD执行机制,SIMT执行允许不同的线程更容易跟随(follow)通过给定线程程序的发散的执行路径。本领域技术人员将理解的是,SIMD处理机制代表SIMT处理机制的功能子集。
经由管线管理器305来有利地控制GPC 208的操作,所述管线管理器305将处理任务分布到流多处理器(SPM)310。管线管理器305也可被配置为通过为由SPM 310输出的处理后的数据指定目的地来控制工作分布交叉开关330。
在一个实施例中,每个GPC 208均包括M个SPM 310,其中M≥1,每个SPM 310均被配置为处理一个或多个线程组。而且,每个SPM 310最好还包括同样的一组可被管线化的功能执行单元(例如,算术逻辑单元、加载-存储单元等,如图3C中的Exec单元302和LSU 303所示),从而允许在前一个指令结束之前发送新的指令,如本领域所已公知的。可提供功能执行单元的任何组合。在一个实施例中,这些功能单元支持多种运算,包括整数和浮点算法(例如,加法和乘法)、比较运算、布尔运算(AND、OR、XOR)、移位以及各种代数函数的计算(例如,平面插值、三角、指数和对数函数等);并且相同的功能单元硬件可均衡地用于(be leveragedto)执行不同运算。
传送到特定GPC 208的指令序列构成线程,如本文前面所定义的,并且跨SPM 310内并行处理引擎(为示出)的一定数量并发执行的线程的集合在本文中被称为“卷绕包(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同的输入数据并发执行同一程序的一组线程,且该组中有一个线程被分配给SPM 310内不同的处理引擎。线程组可包括比SPM 310内处理引擎的数量少的线程,在此情况下,在正在处理该线程组的周期内,一些处理引擎将处于空闲状态。线程组也可包括比SPM 310内处理引擎的数量多的线程,在此情况下,处理将在连续的时钟周期上进行。由于每个SPM 310可以支持多达G个线程组并发执行,所以在任一给定时间都可以允许多达G×M个线程组在GPC 208中执行。
另外,在SPM 310内,多个相关的线程组可同时处于激活状态(处于不同执行阶段)。这种线程组的集合在本文中被称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m×k,其中k是线程组中并发执行的线程的数量,并且一般是SPM 310内处理引擎的数量的整数倍,m是SPM 310内同时处于激活状态的线程组的数量。CTA的大小通常由编程人员和CTA可用的硬件资源例如存储器或寄存器的容量决定。
每个SPM 310均包括L1高速缓存(未示出),或使用在SPM 310之外对应的L1高速缓存中用以执行加载和存储操作的的空间。每个SPM 310也有权访问分区单元215内的L2高速缓存,这些分区单元215在所有GPC208之间被共享,并且可用于在线程之间传送数据。最后,SPM 310也有权访问片外“全局”存储器,该存储器可以包括例如并行处理存储器204和/或系统存储器104。应予以理解的是,PPU 202外部的任何存储器都可被用作全局存储器。此外,L1.5高速缓存335可被包括在GPC 208之内,被配置为经由存储器接口214来接收和保持从存储器中获取的、SPM 310所请求的数据,包括指令、一致性(uniform)数据以及常数数据,以及向SPM 310提供所请求的数据。在GPC 208中具有多个SPM 310的实施例有利地共享被高速缓存于L1.5高速缓存335中的公共指令和数据。
每个GPC 208可包括存储器管理单元(MMU)328,该单元被配置为将虚拟地址映射到物理地址。在另一些实施例中,MMU 328可处于存储器接口214内。MMU 328包括一组页表条目(PTE)以及可选地包括高速缓存线索引(cache line index),该组PTE被用于将虚拟地址映射到像素块(tile)的物理地址。MMU 328可包括地址转译后备缓冲区(translationlookaside buffer,TLB)或高速缓存,其可处于多处理器SPM 310或L1高速缓存或GPC 208内。物理地址被处理为分布表面数据访问位置以允许在分区单元之间交错的高效请求。高速缓存线索引可用于确定对于高速缓存线的请求是否命中或未命中。
在图形应用中,GPC 208可被配置为使得每个SPM 310耦合至纹理单元315,用于执行纹理映射操作,例如,确定纹理采样位置、读取纹理数据以及过滤纹理数据。纹理数据是从内部纹理L1高速缓存(未示出)读取的,或者在一些实施例中是从SPM 310内的L1高速缓存读取的,并且根据需要从L2高速缓存、并行处理存储器204或系统存储器104获取。每个SPM 310将处理后的任务输出到工作分布交叉开关330,以便将处理后的任务提供到另一个GPC 208用于进一步处理,或者经由交叉开关单元210将处理后的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中。preROP(pre-raster operations,预光栅操作)325被配置为从SPM 310接收数据,将数据引向分区单元215中的ROP单元,并执行对色彩混合的优化、组织像素色彩数据以及执行地址转译。
应予以理解的是,本文所描述的内核架构是例示性的,可以对其进行各种变形和修改。GPC 208内可包含有任何数量的处理单元,例如,SPM310或纹理单元315、preROP 325。此外,虽然仅示出了一个GPC 208,但PPU 202可包含任何数量的GPC 208,这些GPC 208最好在功能上彼此相似,以使执行行为不依赖于接收具体处理任务的GPC 208。此外,每个GPC208最好使用单独的且各异的处理单元、L1高速缓存等,相对于其他GPC208独立地操作。
图3B是根据本发明一个实施例的、图2的一个PPU 202内分区单元215的框图。如图所示,分区单元215包括L2高速缓存350、帧缓冲区(FB)DRAM接口355以及光栅操作单元(ROP)360。L2高速缓存350是读/写高速缓存,其被配置为对从交叉开关单元210及ROP 360接收的操作执行加载和存储。读缺失和紧急写回请求由L2高速缓存350输出到FBDRAM接口355用于处理。脏更新也被发送到FB 355用于伺机处理。FB355直接与DRAM 220交互,输出读和写请求,并接收从DRAM 220读取的数据。
在图形应用中,ROP 360是执行诸如模板(stencil)、z测试、混合等等光栅操作的处理单元,并输出像素数据作为处理后的图形数据用于在图形存储器中存储。在本发明的一些实施例中,将ROP 360包括在每个GPC208中,而不是分区单元215中,并且通过交叉开关单元210传送像素读写请求而不是像素片段数据。
处理后的图形数据可以在显示设备110上显示,或者被路由用于由CPU 102或由并行处理子系统112内的处理实体之一来进一步处理。为了分布光栅操作的处理,每个分区单元215均包括ROP 360。在一些实施例中,ROP 360可被配置为压缩被写入存储器的z数据或色彩数据,以及解压缩从存储器中读出的z数据或色彩数据。
本领域技术人员应理解的是,图1、2、3A和3B中所描述的架构决非限制本发明的范围,并且在不脱离本发明的范围的情况下,本文所教导的技术可在任何适当配置的处理单元上实施,这些处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU 202、一个或多个GPC 208、一个或多个图形或专用处理单元等。
统一寻址以访问并行存储器空间
在本发明的实施例中,所期望的是,用PPU 202或计算系统的其他处理器使用线程阵列来执行通用计算。给线程阵列中的每个线程分配唯一的线程标识符(“线程ID”),所述线程标识符在线程执行期间可由该线程访问。线程ID可以被定义为一维或多维数值,控制线程的处理行为的各个方面。例如,线程ID可用于确定线程输入数据集中将要处理的部分和/或确定线程输出数据集中将要生成或写入的部分。
每线程的指令序列可包含至少一个指令,所述至少一个指令定义线程阵列中代表性线程和一个或多个其他线程之间的协作行为。例如,每线程的指令序列可能包含下列指令:指示在序列中的特定点处暂定执行代表性线程的操作直至一个或多个其他线程到达该特定点时为止的指令;指示代表性线程将数据存储在一个或多个其他线程有权访问的共享存储器中的指令;指示代表性线程自动读取和更新存储在共享存储器中的数据的指令,一个或多个其他线程基于它们的线程ID有权访问所述共享存储器;等等。CTA程序也可以包含计算将从中读取数据的共享存储器中的地址的指令,其中地址为线程ID的函数。通过定义合适的功能并提供同步技术,可以以可预测的方式通过CTA的一个线程将数据写入到共享存储器中的给定位置,并且通过同一CTA的不同线程从该位置读取出来。因此,线程之间任何期望模式的数据共享都可以得到支持,并且CTA中的任何线程都可以与同一CTA中的任何其他线程共享数据。CTA的线程之间如果存在数据共享,则数据共享的程度由CTA程序决定;因而,应予以理解的是,在使用CTA的具体应用中,取决于CTA程序,CTA的线程实际上可能彼此共享或者不共享数据,并且术语“CTA”和“线程阵列”在本文中具有相同含义。
图3C为根据本发明的一个实施例的、图3A的SPM 310的框图。该SPM 310包括指令L1高速缓存370,其被配置为经由L1.5高速缓存335从存储器接收指令和常数。Warp调度器和指令单元312从指令L1高速缓存单元370接收指令和常数,并且根据该指令和常数来控制本地寄存器文件304和SPM 310功能单元。SPM 310功能单元包括N个exec(执行或处理)单元302以及P个加载-存储单元(LSU)303。
SPM 310提供具有不同可访问级别的片上(内部)数据存储。专用寄存器(未示出)对于LSU可读但不可写,并被用于存储定义每个CTA线程的“位置”的参数。在一个实施例中,专用寄存器包括每CTA线程(或SPM 310内每exec单元302)一个的存储线程ID的寄存器;每个线程ID寄存器仅可由各自的exec单元302所访问。专用寄存器还可以包括可由所有CTA线程(或由所有LSU 303)读取的附加寄存器,所述附加寄存器存储CTA标识符、CTA维度、CTA所属的栅格(grid)的维度以及CTA所属栅格的标识符。在初始化期间,响应从设备驱动器103经由前端212接收的命令对专门寄存器进行写入,并且在CTA执行期间不变。
参数存储器(图中未示出)存储运行时间参数(常数),这些参数可由任一CTA线程(或任一LSU 303)读取但不可由其写入。在一个实施例中,设备驱动器103在指引SPM 310开始执行使用这些参数的CTA之前将这些参数提供给参数存储器。任一CTA(或者SPM 310内的任一exec单元302)内的任一CTA线程可以通过存储器接口214访问全局存储器。该全局存储器的一部分可被存储在L1高速缓存320中。
每个CTA线程均可使用本地寄存器文件304作为临时空间(scratchspace);每个寄存器均被分配用于一个线程的排他性使用,并且任何本地寄存器文件304中的数据均只可由其被分配给的CTA线程所访问。通过在物理上或逻辑上将寄存器文件划分为P个通道(lane)来实现本地寄存器文件,每个通道均具有某一数量的条目(其中每个条目可能存储例如32位字)。给N个exec单元302和P个加载-存储单元LSU 303中的每一个分配一个通道,并且不同通道中对应的条目可以填充有供执行同一程序的不同线程使用的数据,以利于SIMD执行。可以将这些通道的不同部分分配给G个并发线程组中的不同的线程组,以使本地寄存器文件304中的给定条目只可由特定线程访问。在一个实施例中,本地寄存器文件304内的某些条目被保留用于存储线程标识符,实现专用寄存器之一。
所有CTA线程(在单个CTA内)均可访问共享存储器306;共享存储器306中的任一位置均可由同一CTA内(或由SPM 310内任一处理引擎)内的任一CTA线程所访问。共享存储器306也可被实现为具有互连的共享片上高速缓存存储器或共享寄存器文件,允许任一处理引擎对该共享存储器中任一位置进行读写。在其他一些实施例中,共享的状态空间可能映射到片外存储器的每CTA区域上,并被高速缓存在L1高速缓存320中。参数存储器可以被实现为在同一共享寄存器文件内或者在实现了共享存储器306的共享高速缓存存储器内的指定扇区(section),或者被实现为LSU303只能以只读方式访问的单独的共享寄存器文件或片上高速缓存存储器。在一个实施例中,也可使用实现参数存储器的区域来存储CTA ID和栅格ID,以及CTA和栅格维度,从而实现专用寄存器的一部分。
可以使用每个SPM 310中的L1高速缓存320来高速缓存每线程的私有本地数据以及每应用程序的全局数据。在一些实施例中,每CTA的共享数据可以在L1高速缓存320中被高速缓存。LSU 303经由存储器和高速缓存的互连380耦合到一致性L1高速缓存375、共享存储器306以及L1高速缓存320。一致性L1高速缓存375被配置为经由L1.5高速缓存335从存储器接收只读数据和常数。
在现有的并行处理系统中,编程人员或编译器在引用如C/C++这类语言中的指针时,必须使用正确的存储器访问指令来对线程可访问的每一个各异的并行存储器空间进行访问,一般被设计为具有单一存储器空间的串行处理器。例如,变量被声明为位于各异的并行存储器空间之一中,例如每线程的本地存储器、每CTA的共享存储器或者每应用程序的全局存储器,并且使用相应的加载或存储指令,例如全局加载(load.global)、全局存储(store.global)、本地加载(load.local)、本地存储(store.local)、共享加载(load.shared)以及共享存储(store.shared),来访问该变量。与常规系统相比,SPM 310中每个加载-存储单元LSU 303均使用统一地址映射单元352,该统一地址映射单元352将在统一的存储器空间中提供给所指定的加载和存储指令的地址转换为在每个各异的存储器空间中的地址。因此,通过指定在统一的存储器空间中的地址,例如加载或存储这类的统一的访问指令可用于访问任何本地、共享或者全局存储器空间。
在应用程序和编译器层面,各异的存储器空间出现在单个的统一地址空间中。因此使用统一的存储器访问指令,而非针对每个各异的存储器空间单独的加载和存储指令。C/C++程序可以使用一个统一指针以及一个统一访问指令来高效访问三个各异的地址空间中的任何一个。示例性的统一加载指令格式为:LD.32Rd,[Ra+offset];其执行于一组P个并行线程上,并按照由每个线程的寄存器Ra加上偏移量的总和所指定的每个统一的字节地址,将来自存储器的32位数据加载到每个线程的寄存器Rd。示例性的统一存储指令格式为:ST.32[Ra+offset],Rb;其执行于一组P个并行线程上,并且按照由每个线程的寄存器Ra加上偏移量的总和所指定的每个统一的字节地址,将来自每个线程的寄存器Rb的32位数据存储到存储器中。
统一的地址空间具有一个或者多个窗口(window),每一个窗口均将统一的地址空间中的地址映射为在各异的存储器空间例如本地、共享和全局存储器空间中的地址。一组并行线程(线程组)中的每个线程均具有对应于本地存储器空间的其自己私有的每线程本地地址空间。对于所有线程而言,这些窗口被按照相一致的统一地址来放置,但每个线程对于本地存储器的访问均被引导至其私有的本地存储器空间。类似地,每个CTA或者线程阵列均具有对应于共享存储器空间的其自己的每线程的阵列地址空间。每个线程对于共享存储器的访问均被引导至用于该线程的线程阵列的共享存储器空间。
图4是根据本发明的一个实施例的、从统一的每线程地址空间400到各异的并行存储器地址空间的映射示意图。统一的存储器访问指令(加载和存储)计算在统一的地址空间内的有效地址(在0和最大值之间)。典型的存储器访问指令将寄存器值加上立即数(immediate)偏移量以形成有效的统一的存储器空间地址。一个或多个各异的并行存储器空间可以是物理存储器空间或者由MMU 328进一步映射至物理存储器空间的虚拟存储器空间,其可以采用常规的地址转译后备缓冲区(TLB)或者地址转译高速缓存。
统一的每线程地址空间400包括两个窗口,本地窗口406和共享窗口408。由统一地址映射单元352将本地窗口406内的统一的存储器空间地址映射到在每线程的本地存储器空间416内的地址。由统一地址映射单元352将共享窗口408内的统一的存储器空间地址映射到在每线程阵列的共享存储器空间418内的地址。对全局410中本地窗口406和共享窗口408之外的访问被映射到在全局的每应用程序地址空间425内的全局存储器空间420。在统一的存储器空间地址LWIN 412处放置本地窗口406,以及在统一的存储器空间地址SWin 414处放置共享窗口408。
在统一的每线程地址空间400内的窗口可以以不同的方式来实现。一种方式为将统一的每线程地址空间400定义为全局存储器空间420、本地存储器空间416和共享存储器空间418这些各异的存储器空间的串联(concatenation)。如图4所示,统一的每线程地址空间400与最大的地址空间(全局存储器空间420)的大小一致,并且定义了较小的窗口大小,所述较小的窗口大到足以寻址较小的各异并行存储器空间。由于每线程的本地存储器空间416和每线程阵列的共享存储器空间418比全局存储器空间420小得多,因此如隐藏的本地窗口426和隐藏的共享窗口428所示,该本地窗口406和共享窗口408仅遮挡全局存储器空间420的一小块区域。可以对本地窗口406和共享窗口408的位置(LWin 412和SWIn 414)进行调整以满足操作系统的约束条件。重要的是,由于使用统一的加载或存储指令可能无法访问全局存储器空间420被隐藏的部分,因此隐藏的本地窗口426和隐藏的共享窗口428应被放置在统一的每线程地址空间400中,以便应用程序不会访问全局存储器空间420中被这些窗口所隐藏起来的部分。
一个实施例使用16MB(24位)的窗口大小用于1TB(40位)统一的每线程地址空间400中的本地窗口406和共享窗口408。存储器访问指令(加载和存储)使用64位寄存器来容纳40位的统一的存储器空间的地址,用零来填充最高的24位。可将本地窗口406和共享窗口408按照16MB边界进行对齐,与窗口大小相同,以简化硬件实现。各种其他实施例可以根据需要使用不同的窗口大小。
图5A示出了根据本发明的一个实施例的64位统一地址格式500、505和510。对于引用40位全局存储器空间地址501的统一的加载或存储指令,64位统一地址可以包括全局存储器空间地址501,所述全局存储器空间地址501位于64位的统一地址500的低40位中。隐藏于LWin 412和SWin 414处的两个窗口位置后的全局存储器空间地址在隐藏的本地窗口426和隐藏的共享窗口428之内,并且不可由统一的全局存储器空间地址501来访问。系统软件对LWin 412和SWin 414进行调整以隐藏应用程序不需要访问的全局存储器空间地址。
对于引用共享存储器空间地址的统一的加载或存储指令,在共享窗口408之内的64位统一地址505将共享存储器地址506指定为地址位[23:0],通过在地址位[31:24]中放置SWin 414以及在更高的地址位[63:32]中放置零来选择共享窗口408。类似地,在本地窗口406之内的统一地址510将本地存储器地址512指定为地址位[23:0],通过在地址位[31:24]中放置LWin412以及在更高的地址位[63:32]中放置零来选择本地窗口406。
图5B示出了根据本发明的一个实施例的32位统一地址格式520、525和530以及特定存储器空间地址格式540和550。短的32位统一地址可仅引用统一的每线程地址空间400中由短地址522所指定的低的4GB空间。对于引用共享存储器地址的统一的加载或存储指令,在共享窗口408之内的的短的32位统一地址将共享存储器地址526指定为地址位[23:0],并且采用地址位[31:24]中的SWin 414来选择共享窗口。对于引用本地存储器地址的统一的加载或存储指令,在本地窗口406之内的短的32位地址将本地存储器地址536指定为地址位[23:0],并且采用地址位[31:24]中的LWin 412来选择本地窗口。短的32位统一地址将窗口位置限制到统一的每线程地址空间400中较低的4GB空间,还将全局存储器访问限制到统一的每线程地址空间400中较低的4GB空间。
除了统一的地址指令,用于特定存储器空间的常规指令被保留以备兼容,例如全局加载(load.global)、全局存储(store.global)、本地加载(load.local)、本地存储(store.local)、共享加载(load.shared)以及共享存储(store.shared)。用于本地加载或本地存储指令的特定存储器空间地址将本地存储器空间地址550指定为地址位[23:0]中的本地地址556,并将较高的地址位设置为零。类似地,用于共享加载或共享存储指令的特定存储器空间地址将共享存储器空间地址540指定为地址位[23:0]中的共享地址546,并将较高的地址位设置为零。
一些实施例在1TB(40位)统一的每线程地址空间400中使用16MB(24位)用于本地窗口406和共享窗口408。可将本地窗口406和共享窗口408按照16MB边界进行对齐,等于16MB窗口大小,以简化硬件实现。各种其他实施例可以在窗口小于统一的每线程地址空间400的情况下采用任何大小。
统一的地址映射单元352接收统一的存储器空间地址,并通过执行对地址位[31:24]与LWin[31:24]及SWin[31:24]之间的相等性比较以及执行对较高地址位[63:32]的零比较,在统一的存储器空间地址落入本地窗口406或共享窗口408时进行删除。表1中示出了与统一的加载指令一起被提供的用于使用64位统一的存储器空间地址的伪码。
表1
尽管围绕加载和存储指令来描述统一的存储器空间地址,但超出加载和存储的其他存储器访问指令也可使用统一地址。示例性指令包括原子存储器操作读取-修改-写入(read-modify-write)指令、减少操作读取-修改-写入指令以及使用存储器地址的高速缓存控制指令,所述高速缓存控制指令包括将对应于统一地址的高速缓存线预取到高速缓存中、使对应于统一地址的高速缓存线无效以及按照统一地址询问高速缓存状态。这些其他指令也被用于使用仅仅一个统一地址和统一存储器指令来访问全局存储器、共享存储器以及本地存储器。
一旦将统一的存储器空间地址转换到本地、共享或全局存储器空间地址中,则可以应用进一步的地址映射。例如,在一个实施例中,全局存储器地址是由MMU 328采用例如页表和转译后备缓冲区(TLB)映射到物理地址的虚拟地址。用于每个线程的本地存储器空间地址可以使用线程ID号映射到每线程的虚拟存储器地址。用于每个CTA的共享存储器地址可以使用CTA ID号映射到物理RAM地址。此外,实际的加载或存储操作可以访问高速缓存存储器架构中的高速缓存,例如L1高速缓存320,或者直接访问被指定的RAM。例如,在一个实施例中,共享存储器空间位于片上RAM中,而本地和全局存储器空间位于片上高速缓存层级和片外DRAM存储器系统内。
图6是根据本发明的一个实施例的、用于将统一地址转换到并行存储器空间地址中的方法步骤的流程图。虽然结合图1、2、3A、3B和3C的系统来描述这些方法步骤,但本领域技术人员将理解,被配置为按照任何次序执行这些方法步骤的任何系统都在本发明的范围内。在步骤600,统一地址映射单元352接收统一的存储器空间地址。在步骤605,统一地址映射单元352从统一的存储器空间地址提取窗口字段。当统一地址位[63:32]为零时该窗口字段在位[31:24]中,并且如果统一地址落入共享或本地窗口中则该窗口字段包括SWin 414或LWin 412。在步骤610,统一地址映射单元352确定窗口字段中的值是否落入本地存储器空间内。当较高位为零且窗口字段中的值匹配LWIN时,统一地址映射单元352前进至访问本地存储器空间,例如在步骤615使用线程ID和从统一的存储器空间地址提取的本地地址,经由L1高速缓存320访问每线程的本地存储器地址。否则,统一地址映射单元352前进至步骤620并确定窗口字段中的值是否落入共享存储器空间内。当较高位为零且窗口字段中的值匹配SWIN时,统一地址映射单元352前进至访问每CTA的共享存储器空间,例如在步骤625使用CTA ID和从统一的存储器空间地址提取的共享地址来访问共享存储器306。
否则,统一的存储器空间地址落入全局存储器空间内且统一地址映射单元352前进至步骤630。统一地址映射单元352向L1高速缓存320输出全局存储器空间地址以访问全局存储器空间,以及在步骤630,可由MMU 328将全局地址从虚拟地址映射到物理地址。在步骤635,MMU 328使用物理地址来访问全局存储器以完成加载或存储操作。
将对多个各异的并行存储器空间的寻址统一到单个地址空间中,使得能够使用单一类型的加载或存储指令来取代用于每个各异的并行存储器空间的不同类型的加载及存储指令。编程被简化,以及由于当执行程序时进行从统一的存储器空间到各异的并行存储器空间的转译,因此访问不同并行存储器空间的程序也被简化。
本发明的一个实施例可被实施为与计算机系统一起使用的程序产品。该程序产品的程序定义实施例的各功能(包括本文中描述的方法)并且可以被包含在各种计算机可读存储介质上。示出的计算机可读存储介质包括但不限于:(i)不可写入的存储介质(例如,计算机内的只读存储器设备,例如可由CD-ROM驱动器读取的CD-ROM盘、闪存、ROM芯片或任何类型的固态非易失性半导体存储器),在其上存储永久性信息;和(ii)可写存储介质(例如,磁盘驱动器或硬盘驱动器内的软盘或者任何类型的固态随机访问半导体存储器),在其上存储可更改的信息。
以上已参照具体实施例对本发明进行了描述。然而,本领域技术人员将理解的是,在不脱离如随附权利要求书中所阐释的本发明的较宽精神和范围的情况下,可对此做出各种修改和变化。因此,前面的描述以及附图应被视为是例示性而非限制性的。
Claims (9)
1.一种使用统一的存储器空间地址来寻址单独的并行存储器空间的方法,所述方法包括:
从所述统一的存储器空间地址中的窗口字段提取值;以及
确定所述值是否与本地存储器空间相对应,其中在所述本地存储器空间窗口内的统一的存储器空间地址能够由个别线程进行访问;
如果所述值与所述本地存储器空间相对应,则将所述统一的存储器空间地址映射至能够由线程进行访问的本地存储器地址;
如果所述值不与所述本地存储器空间相对应,则确定所述值是否与共享存储器空间相对应,其中在所述共享存储器空间窗口内的统一的存储器空间地址能够由线程阵列中的线程进行访问;
如果所述值与所述共享存储器空间相对应,则将所述统一的存储器空间地址映射至能够由线程阵列中的线程进行访问的共享存储器地址;
如果所述值不与所述共享存储器空间相对应,则将所述统一的存储器空间地址映射至全局存储器地址,其中在全局存储器空间窗口内的统一的存储器空间地址能够由所有线程阵列中的所有线程进行访问。
2.根据权利要求1所述的方法,其中,从所述全局存储器空间对所述本地存储器空间加以排除,以在所述全局存储器空间内产生不能通过所述统一的存储器空间地址来寻址的隐藏区域。
3.根据权利要求1所述的方法,其中,从所述全局存储器空间对所述共享存储器空间加以排除,以在所述全局存储器空间内产生不能通过所述统一的存储器空间地址来寻址的隐藏区域。
4.根据权利要求1所述的方法,其中,所述本地存储器空间包括每线程的私有存储器。
5.根据权利要求1所述的方法,其中,所述本地存储器空间、所述共享存储器空间以及所述全局存储器空间的每一个均包括能够在片上被高速缓存的片外存储器。
6.根据权利要求1所述的方法,其中,所述共享存储器空间包括由所述线程阵列中所有线程所共享的每线程阵列的存储器。
7.根据权利要求1所述的方法,其中,进一步包括当所述全局存储器地址为虚拟地址时,将所述全局存储器地址映射至物理存储器地址。
8.一种被配置为允许使用统一的存储器空间地址来访问单独的并行存储器空间的处理单元,所述处理单元包括:
映射单元,所述映射单元被配置为:
从所述统一的存储器空间地址中的窗口字段提取值;以及
确定所述值是否与本地存储器空间相对应,其中在所述本地存储器空间窗口内的统一的存储器空间地址能够由个别线程进行访问;
如果所述值与所述本地存储器空间相对应,则将所述统一的存储器空间地址映射至能够由线程进行访问的本地存储器地址;
如果所述值不与所述本地存储器空间相对应,则确定所述值是否与共享存储器空间相对应,其中在所述共享存储器空间窗口内的统一的存储器空间地址能够由线程阵列中的线程进行访问;
如果所述值与所述共享存储器空间相对应,则将所述统一的存储器空间地址映射至能够由线程阵列中的线程进行访问的共享存储器地址;
如果所述值不与所述共享存储器空间相对应,则将所述统一的存储器空间地址映射至全局存储器地址,其中在全局存储器空间窗口内的统一的存储器空间地址能够由所有线程阵列中的所有线程进行访问。
9.根据权利要求8所述的处理单元,其中,所述本地存储器空间、所述共享存储器空间以及所述全局存储器空间的每一个均包括能够在片上被高速缓存的片外存储器。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/567,637 | 2009-09-25 | ||
US12/567,637 US8271763B2 (en) | 2009-09-25 | 2009-09-25 | Unified addressing and instructions for accessing parallel memory spaces |
PCT/US2010/050240 WO2011038257A1 (en) | 2009-09-25 | 2010-09-24 | Unified addressing and instructions for accessing parallel memory spaces |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102696023A CN102696023A (zh) | 2012-09-26 |
CN102696023B true CN102696023B (zh) | 2015-02-25 |
Family
ID=43781592
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201080053742.0A Active CN102696023B (zh) | 2009-09-25 | 2010-09-24 | 用于访问并行存储器空间的统一寻址和指令 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8271763B2 (zh) |
EP (1) | EP2480985B1 (zh) |
CN (1) | CN102696023B (zh) |
WO (1) | WO2011038257A1 (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8516185B2 (en) | 2009-07-16 | 2013-08-20 | Netlist, Inc. | System and method utilizing distributed byte-wise buffers on a memory module |
US9128632B2 (en) | 2009-07-16 | 2015-09-08 | Netlist, Inc. | Memory module with distributed data buffers and method of operation |
US8411103B1 (en) * | 2009-09-29 | 2013-04-02 | Nvidia Corporation | Processing global atomic operations using the bending unit datapath |
US9158592B2 (en) * | 2011-05-02 | 2015-10-13 | Green Hills Software, Inc. | System and method for time variant scheduling of affinity groups comprising processor core and address spaces on a synchronized multicore processor |
US9009686B2 (en) * | 2011-11-07 | 2015-04-14 | Nvidia Corporation | Algorithm for 64-bit address mode optimization |
US10007527B2 (en) * | 2012-03-05 | 2018-06-26 | Nvidia Corporation | Uniform load processing for parallel thread sub-sets |
CN104102542A (zh) * | 2013-04-10 | 2014-10-15 | 华为技术有限公司 | 一种网络数据包处理方法和装置 |
CN110428855B (zh) | 2013-07-27 | 2023-09-22 | 奈特力斯股份有限公司 | 具有本地分别同步的内存模块 |
US9576071B2 (en) | 2013-09-12 | 2017-02-21 | Dropbox, Inc. | Graph-based data models for partitioned data |
US9595075B2 (en) * | 2013-09-26 | 2017-03-14 | Nvidia Corporation | Load/store operations in texture hardware |
US9652373B2 (en) | 2013-12-16 | 2017-05-16 | International Business Machines Corporation | Adaptive statistics for a linear address space |
GB2524063B (en) | 2014-03-13 | 2020-07-01 | Advanced Risc Mach Ltd | Data processing apparatus for executing an access instruction for N threads |
US9804883B2 (en) * | 2014-11-14 | 2017-10-31 | Advanced Micro Devices, Inc. | Remote scoped synchronization for work stealing and sharing |
US9996354B2 (en) * | 2015-01-09 | 2018-06-12 | International Business Machines Corporation | Instruction stream tracing of multi-threaded processors |
CN106339327B (zh) * | 2015-07-06 | 2019-08-20 | 上海大学 | 一种计算机系统及刀片式服务器机箱 |
EP3469480B1 (en) | 2016-04-25 | 2023-12-27 | Netlist, Inc. | Method and apparatus for uniform memory access in a storage cluster |
JP6960479B2 (ja) * | 2017-03-14 | 2021-11-05 | アズールエンジン テクノロジーズ ヂュハイ インク.Azurengine Technologies Zhuhai Inc. | 再構成可能並列処理 |
US11436143B2 (en) | 2017-12-22 | 2022-09-06 | Alibaba Group Holding Limited | Unified memory organization for neural network processors |
US11249724B1 (en) * | 2018-09-26 | 2022-02-15 | Habana Labs Ltd. | Processing-memory architectures performing atomic read-modify-write operations in deep learning systems |
CN109491648B (zh) * | 2018-11-19 | 2022-05-17 | 上海新时达电气股份有限公司 | 嵌入式软件中库函数独立分区的实现方法和系统以及设备 |
CN109902059B (zh) * | 2019-02-28 | 2021-06-29 | 苏州浪潮智能科技有限公司 | 一种cpu与gpu之间的数据传输方法 |
CN112565474B (zh) * | 2019-09-25 | 2024-02-06 | 无锡江南计算技术研究所 | 面向分布式共享spm的批量数据传输方法 |
CN113176911B (zh) * | 2021-04-29 | 2024-07-12 | 上海阵量智能科技有限公司 | 一种配置方法、数据处理方法、芯片和电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5854638A (en) * | 1996-02-02 | 1998-12-29 | Opti Inc. | Unified memory architecture with parallel access by host and video controller |
CN1731370A (zh) * | 2004-08-06 | 2006-02-08 | 华为技术有限公司 | 光模块寻址装置及其方法 |
US7339590B1 (en) * | 2004-09-02 | 2008-03-04 | Nvidia Corporation | Vertex processing unit supporting vertex texture mapping |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH02202652A (ja) * | 1989-02-01 | 1990-08-10 | Hitachi Ltd | 多重仮想記憶管理方式 |
US6738889B2 (en) * | 1999-07-12 | 2004-05-18 | International Business Machines Corporation | Apparatus and method for providing simultaneous local and global addressing with hardware address translation |
US6694380B1 (en) | 1999-12-27 | 2004-02-17 | Intel Corporation | Mapping requests from a processing unit that uses memory-mapped input-output space |
US6999088B1 (en) | 2003-12-23 | 2006-02-14 | Nvidia Corporation | Memory system having multiple subpartitions |
US8766996B2 (en) | 2006-06-21 | 2014-07-01 | Qualcomm Incorporated | Unified virtual addressed register file |
US8286196B2 (en) | 2007-05-03 | 2012-10-09 | Apple Inc. | Parallel runtime execution on multiple processors |
US8341611B2 (en) | 2007-04-11 | 2012-12-25 | Apple Inc. | Application interface on multiple processors |
CN101657795B (zh) | 2007-04-11 | 2013-10-23 | 苹果公司 | 多处理器上的数据并行计算 |
US8086806B2 (en) | 2008-03-24 | 2011-12-27 | Nvidia Corporation | Systems and methods for coalescing memory accesses of parallel threads |
-
2009
- 2009-09-25 US US12/567,637 patent/US8271763B2/en active Active
-
2010
- 2010-09-24 WO PCT/US2010/050240 patent/WO2011038257A1/en active Application Filing
- 2010-09-24 CN CN201080053742.0A patent/CN102696023B/zh active Active
- 2010-09-24 EP EP10819552.0A patent/EP2480985B1/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5854638A (en) * | 1996-02-02 | 1998-12-29 | Opti Inc. | Unified memory architecture with parallel access by host and video controller |
CN1731370A (zh) * | 2004-08-06 | 2006-02-08 | 华为技术有限公司 | 光模块寻址装置及其方法 |
US7339590B1 (en) * | 2004-09-02 | 2008-03-04 | Nvidia Corporation | Vertex processing unit supporting vertex texture mapping |
Also Published As
Publication number | Publication date |
---|---|
WO2011038257A1 (en) | 2011-03-31 |
EP2480985B1 (en) | 2018-03-21 |
US8271763B2 (en) | 2012-09-18 |
US20110078406A1 (en) | 2011-03-31 |
EP2480985A1 (en) | 2012-08-01 |
CN102696023A (zh) | 2012-09-26 |
EP2480985A4 (en) | 2014-04-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102696023B (zh) | 用于访问并行存储器空间的统一寻址和指令 | |
CN102640127B (zh) | 在一级高速缓存内分配单独的存储器空间的方法 | |
CN102713837B (zh) | 用于管理并行高速缓存层级的指令 | |
US8982140B2 (en) | Hierarchical memory addressing | |
US8751771B2 (en) | Efficient implementation of arrays of structures on SIMT and SIMD architectures | |
CN103365631B (zh) | 用于存储器访问的动态库模式寻址 | |
CN103218309B (zh) | 多级指令高速缓存预取的方法、系统与设备 | |
US8327071B1 (en) | Interprocessor direct cache writes | |
TWI498819B (zh) | 執行成型記憶體存取作業的系統和方法 | |
CN103207774B (zh) | 用于解决线程发散的方法和系统 | |
US20130014118A1 (en) | Simultaneous submission to a multi-producer queue by multiple threads | |
CN103777926A (zh) | 多线程处理单元中的高效存储器虚拟化 | |
US20110080416A1 (en) | Methods to Facilitate Primitive Batching | |
TW201351277A (zh) | 平行執行緒子集合的均衡載入處理 | |
US8752018B2 (en) | Emitting coherent output from multiple threads for printf | |
CN103777925A (zh) | 多线程处理单元中的高效存储器虚拟化 | |
CN104050705A (zh) | 处置光栅操作中的post-z覆盖数据 | |
CN104050706A (zh) | 用于低功率图形渲染的像素着色器旁路 | |
CN103885902A (zh) | 用于经由纹理硬件实施存储器访问操作的技术 | |
CN103870309A (zh) | 用于集群多级寄存器堆的寄存器分配 | |
US20110084976A1 (en) | Shader Program Headers | |
CN103996216A (zh) | 用于曲面细分和几何着色器的电力高效属性处置 | |
US9348751B2 (en) | System and methods for distributing a power-of-two virtual memory page across a non-power-of two number of DRAM partitions | |
CN103885903A (zh) | 用于经由纹理硬件实施存储器访问操作的技术 | |
US8266382B1 (en) | Cache interface protocol including arbitration and hints |
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 |