CN103389944A - 用于具有存储器分配限制的协处理器的虚拟存储器结构 - Google Patents
用于具有存储器分配限制的协处理器的虚拟存储器结构 Download PDFInfo
- Publication number
- CN103389944A CN103389944A CN2013101703048A CN201310170304A CN103389944A CN 103389944 A CN103389944 A CN 103389944A CN 2013101703048 A CN2013101703048 A CN 2013101703048A CN 201310170304 A CN201310170304 A CN 201310170304A CN 103389944 A CN103389944 A CN 103389944A
- Authority
- CN
- China
- Prior art keywords
- buffer zone
- thread
- memory
- coprocessor
- storer
- 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.)
- Pending
Links
- 230000015654 memory Effects 0.000 title claims abstract description 146
- 238000000034 method Methods 0.000 claims abstract description 49
- 238000012545 processing Methods 0.000 claims description 104
- 238000004891 communication Methods 0.000 claims description 40
- 230000003139 buffering effect Effects 0.000 claims description 20
- 230000008569 process Effects 0.000 abstract description 16
- 230000015572 biosynthetic process Effects 0.000 description 13
- 238000007726 management method Methods 0.000 description 8
- 238000013316 zoning Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 230000007246 mechanism Effects 0.000 description 7
- 230000008859 change Effects 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 6
- 238000004088 simulation Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 238000013508 migration Methods 0.000 description 4
- 230000005012 migration Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000008676 import Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000008054 signal transmission Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 239000006185 dispersion Substances 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- 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
-
- 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/25—Using a specific main memory architecture
- G06F2212/251—Local memory within processor subsystem
-
- 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/25—Using a specific main memory architecture
- G06F2212/253—Centralized memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一个实施例阐述用于不支持动态存储器分配、存储器分页或存储器交换的协处理器的用于在多线程程序执行期间动态地分配存储器的技术。协处理器在程序的执行开始之前分配一些存储器给程序作为放置缓冲区。如果在由协处理器执行程序期间,由线程所提出的、将数据存储在放置缓冲区中的请求因为放置缓冲区是满的而不能满足,则线程通知工作者线程。工作者线程通过动态地分配不能由协处理器所访问的存储器内的交换缓冲区来处理由线程所生成的通知。工作者线程之后在程序的执行期间将放置缓冲区页入交换缓冲区以将放置缓冲区清空,从而使得在协处理器上执行的线程能够在程序的执行期间动态地接收存储器分配。
Description
技术领域
本发明总地涉及动态存储器分配,并且,更具体地,涉及用于具有存储器分配限制的协处理器的虚拟存储器结构。
背景技术
一些常规的协处理器具有存储器分配限制并且不能在程序的执行期间动态地分配存储器。这些常规的协处理器将程序限制于在程序的执行开始之前分配给程序的存储器的最大量。然而,对于一些程序,执行期间可能需要的存储器的最大量并非已知的。如果在执行期间,所分配给程序的存储器的量不足,那么程序的执行失败。
因此,本领域需要用于在执行期间向程序提供附加存储器的技术。
发明内容
用于在处理任务的执行期间动态地分配附加存储器的系统和方法使能处理任务消耗在处理任务的执行开始之前未被分配的附加存储器。
本发明用于在程序执行期间分配存储器给程序的方法的各实施例包括当多个线程在协处理器上执行时分配多个线程可访问的第一存储器内的第一缓冲区。在处理任务在协处理器上执行期间;通知在中央处理单元上执行的工作者线程第一缓冲区是满的。在多个线程执行期间,分配多个线程不可访问的第二存储器内的交换缓冲区的第一部分以及将第一缓冲区换入交换缓冲区的第一部分。
当由不支持存储器分页或交换的协处理器执行程序时,在程序的执行期间动态地分配存储器。由在确实支持存储器分页或交换的不同处理器上执行的工作者线程动态地执行存储器。
附图说明
因此,可以详细地理解本发明的上述特征,并且可以参考实施例得到对如上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,本发明可以具有其他等效的实施例。
图1是示出了配置为实现本发明的一个或多个方面的计算机系统的框图;
图2是根据本发明的一个实施例的、用于图1的计算机系统的并行处理子系统的框图;
图3是根据本发明的一个实施例的、图2的任务/工作单元的框图;
图4A是根据本发明的一个实施例的、示出了协处理器不可访问的存储器和协处理器可访问的存储器的示意图;
图4B示出了根据本发明的一个实施例的、图4A的通信缓冲区;
图4C示出了根据本发明的一个实施例的、用于在由协处理器执行程序期间动态地分配附加存储器的方法;
图5A示出了根据本发明的一个实施例的、用于将图4A的放置缓冲区清空的方法;以及
图5B示出了根据本发明的一个实施例的、用于填充图4A的获得缓冲区的方法。
具体实施方式
在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。在其他实例中,未描述公知特征以避免对本发明造成混淆。
系统概述
图1为示出了配置为实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括经由可以包括存储器桥105的互连路径通信的中央处理单元(CPU)102和系统存储器104。存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106(例如超传输(HyperTransport)链路)连接到I/O(输入/输出)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108(例如键盘、鼠标)接收用户输入并且经由通信路径106和存储器桥105将该输入转发到CPU102。并行处理子系统112经由总线或第二通信路径113(例如外围部件互连(PCI)Express、加速图形端口或超传输链路)耦连到存储器桥105;在一个实施例中,并行处理子系统112是将像素传递到显示设备110的图形子系统,显示设备110可以是任意常规的阴极射线管、液晶显示器、发光二极管显示器等。系统盘114也连接到I/O桥107并且可以配置为存储内容和应用程序和数据以由CPU102和并行处理子系统112使用。系统盘114为应用程序和数据提供非易失性存储并且可以包括固定的或可移动的硬盘驱动器、闪存设备以及CD-ROM(压缩磁盘只读存储器)、DVD-ROM(数字多功能光盘ROM)、蓝光、HD-DVD(高清DVD)或其他磁性、光学或固态存储设备。
交换器116提供I/O桥107与诸如网络适配器118以及各种插卡120和121的其他部件之间的连接。其他部件(未明确示出),包括通用串行总线(USB)或其他端口连接、压缩磁盘(CD)驱动器、数字多功能光盘(DVD)驱动器、胶片录制设备及类似部件,也可以连接到I/O桥107。图1所示的各种通信路径包括具体命名的通信路径106和113可以使用任何适合的协议实现,诸如PCI-Express、AGP(加速图形端口)、超传输或者任何其他总线或点到点通信协议,并且如本领域已知的,不同设备间的连接可使用不同协议。
在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个其他系统元件集成在单个子系统中,诸如结合存储器桥105、CPU102以及I/O桥107,以形成片上系统(SoC)。
应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数目和布置、CPU102的数目以及并行处理子系统112的数目,可根据需要修改。例如,在一些实施例中,系统存储器104直接连接到CPU102而不是通过桥,并且其他设备经由存储器桥105和CPU102与系统存储器104通信。在其他替代性拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU102,而不是连接到存储器桥105。而在其他实施例中,I/O桥107和存储器桥105可能被集成到单个芯片上而不是作为一个或多个分立设备存在。大型实施例可以包括两个或两个以上的CPU102以及两个或两个以上的并行处理子系统112。本文所示的特定部件是可选的;例如,任意数目的插卡或外围设备都可能得到支持。在一些实施例中,交换器116被去掉,网络适配器118和插卡120、121直接连接到I/O桥107。
图2示出了根据本发明一个实施例的并行处理子系统112。如所示的,并行处理子系统112包括一个或多个并行处理单元(PPU)202,每个并行处理单元202都耦连到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U≥1。(本文中,类似对象的多个实例需要时以标识对象的参考数字和标识实例的括号中的数字来表示。)PPU202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。
再参考图1以及图2,在一些实施例中,并行处理子系统112中的一些或所有PPU202是具有渲染管线的图形处理器,其可以配置为实施与下述相关的各种操作:经由存储器桥105和第二通信路径113从CPU102和/或系统存储器104所供应的图形数据生成像素数据,与本地并行处理存储器204(可被用作图形存储器,包括例如常规帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU202以及一个或多个用于通用计算的其他PPU202。这些PPU可以是同样的或不同的,并且每个PPU可具有专用并行处理存储器设备或不具有专用并行处理存储器设备。并行处理子系统112中的一个或多个PPU202可输出数据到显示设备110,或者并行处理子系统112中的每个PPU202可输出数据到一个或多个显示设备110。
在操作中,CPU102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU102发出控制PPU202的操作的命令。在一些实施例中,CPU102写入用于每个PPU202的命令流到数据结构中(在图1或图2中未明确示出),该数据结构可位于系统存储器104、并行处理存储器204、或CPU102和PPU202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以发起对数据结构中的命令流的处理。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU102的操作异步地执行命令。可以经由设备驱动程序103由应用程序为每个入栈缓冲区指定执行优先级以控制对不同入栈缓冲区的调度。
现在返回参考图2和图1,每个PPU202包括经由连接到存储器桥105(或者,在一个替代性实施例中,直接连接到CPU102)的通信路径113与计算机系统100的其余部分通信的I/O(输入/输出)单元205。PPU202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可实现为可插入到计算机系统100的扩展槽中的插卡。在其他实施例中,PPU202可以和诸如存储器桥105或I/O桥107的总线桥集成在单个芯片上。而在其他实施例中,PPU202的一些或所有元件可以和CPU102集成在单个芯片上。
在一个实施例中,通信路径113是PCI Express链路,如本领域所知的,其中专用通道被分配给每个PPU202。也可以使用其他通信路径。I/O单元205生成用于在通信路径113上传送的包(或其他信号),并且还从通信路径113接收所有传入的包(或其他信号),将传入的包引导到PPU202的适当部件。例如,可将与处理任务相关的命令引导到主机接口206,而将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。
有利地,每个PPU202都实现高度并行处理架构。如详细示出的,PPU202(0)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥1。每个GPC208能够并发执行大量的(例如,几百或几千)线程,其中每个线程是程序的实例(instance)。在各种应用中,可分配不同的GPC208用于处理不同类型的程序或用于执行不同类型的计算。GPC208的分配可以取决于因每种类型的程序或计算所产生的工作量而变化。
GPC208从任务/工作单元207内的工作分布单元接收所要执行的处理任务。工作分布单元接收指向编码为任务元数据(TMD)并存储在存储器中的处理任务的指针。指向TMD的指针包括在存储为入栈缓冲区并由前端单元212从主机接口206接收的命令流中。可以编码为TMD的处理任务包括所要处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个TMD所指定的处理发起前,将GPC208配置为有效状态。可以为每个TMD指定用来调度处理任务的执行的优先级。还可从处理集群阵列230接收处理任务。可选地,TMD可包括控制将TMD添加到处理任务列表(或指向处理任务的指针的列表)的头部还是尾部的参数,从而提供除优先级以外的另一级别的控制。
存储器接口214包括D个分区单元215,每个分区单元215直接耦连到并行处理存储器204的一部分,其中D≥1。如所示的,分区单元215的数目一般等于动态随机存取存储器(DRAM)220的数目。在其他实施例中,分区单元215的数目也可以不等于存储器设备的数目。本领域的技术人员应该理解DRAM220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM220加以存储,这允许分区单元215并行写入每个渲染目标的各部分以有效地使用并行处理存储器204的可用带宽。
任意一个GPC208都可以处理要被写到并行处理存储器204内的任意DRAM220的数据。交叉开关单元210配置为路由每个GPC208的输出到任意分区单元215的输入或到另一个GPC208用于进一步处理。GPC208通过交叉开关单元210与存储器接口214通信,以对各种外部存储器设备进行读取或写入。在一个实施例中,交叉开关单元210具有到存储器接口214的连接以和I/O单元205通信,以及到本地并行处理存储器204的连接,从而使得在不同GPC208内的处理内核能够与系统存储器104或对于PPU202而言非本地的其他存储器通信。在图2所示的实施例中,交叉开关单元210直接与I/O单元205连接。交叉开关单元210可使用虚拟信道来分开GPC208与分区单元215之间的业务流。
另外,GPC208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分(tessellation)着色器、顶点着色器、几何着色器、和/或像素着色器程序)等等。PPU202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,处理该数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统部件访问,所述其他系统部件包括CPU102或另一个并行处理子系统112。
PPU202可配备有任意容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任意组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU202可集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCI Express)的分立芯片提供,所述高速链路经由桥式芯片或其他通信手段将PPU202连接到系统存储器。
如上所示,在并行处理子系统112中可以包括任意数目的PPU202。例如,可在单个插卡上提供多个PPU202、或可将多个插卡连接到通信路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PPU系统中的PPU202可以彼此同样或不同。例如,不同的PPU202可能具有不同数目的处理内核、不同容量的本地并行处理存储器等等。在存在多个PPU202的情况下,可并行操作那些PPU从而以高于单个PPU202所可能达到的吞吐量来处理数据。包含一个或多个PPU202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。
任务处理概述
图2所示的每个GPC208可配置为并行执行大量线程,其中术语“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行执行。在其他实施例中,单指令、多线程(SIMT)技术用于使用配置为向GPC208中的每一个内的处理引擎集发出指令的公共指令单元来支持大量一般来说同步的线程的并行执行。不同于所有处理引擎通常都执行同样指令的SIMD执行机制,SIMT执行通过给定线程程序允许不同线程更容易跟随分散执行路径。本领域普通技术人员应该理解SIMD处理机制代表SIMT处理机制的功能子集。
在一个实施例中,每个GPC208包括M个流多处理器,每个流多处理器配置为处理一个或多个线程组。如本文之前所定义的,传送到特定GPC208的一系列指令构成线程,并且跨流多处理器内的并行处理引擎的某一数目的并发执行线程的集合在本文中称为“线程束(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的一组线程,所述组的一个线程被指派到流多处理器内的不同处理引擎。线程组可以包括比流多处理器内的处理引擎数目少的线程,在这种情况下一些处理引擎将在该线程组正在被处理的周期期间处于闲置状态。线程组还可以包括比流多处理器内的处理引擎数目多的线程,在这种情况下处理将在连续的时钟周期内发生。因为每个流多处理器可以并发支持多达G个线程组,结果是在任意给定时间在GPC208中可以执行多达G*M个线程组。
此外,多个相关线程组可以在流多处理器内同时活动(在执行的不同阶段)。该线程组集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m*k,其中k是线程组中并发执行线程的数目并且通常是流多处理器内的并行处理引擎数目的整数倍,以及m是流多处理器内同时活动的线程组的数目。CTA的大小一般由编程者以及可用于CTA的硬件资源诸如存储器或寄存器的容量来确定。
每个流多处理器包含一级(L1)高速缓存或使用用于实施加载和存储操作的流多处理器外部的相应L1高速缓存中的空间。每个流多处理器都还有权访问在所有GPC208之间共享并且可用于在线程之间转移数据的二级(L2)高速缓存。最后,流多处理器还有权访问片外“全局”存储器,所述“全局”存储器可以包括例如并行处理存储器204和/或系统存储器104。应该理解,PPU202外部的任意存储器可用作全局存储器。
每个GPC208可以包括配置为将虚拟地址映射到物理地址中的存储器管理单元(MMU)。在其他实施例中,MMU可以驻留在存储器接口214内。MMU包括用于将虚拟地址映射到像素块(tile)的物理地址的页表条目(PTE)集和可选地包括高速缓存行索引。MMU可以包括地址转换后备缓冲区(TLB)或高速缓存。物理地址经处理以分布表面数据访问位置来允许高效请求在分区单元215之间交错。高速缓存行索引可用于确定用于高速缓存行的请求是命中还是未命中。
应该理解本文所述的内核架构是示例性的并且变化和修改都是可能的。例如,当仅示出一个GPC208时,PPU202可以包括任意数目的GPC208,所述GPC208有利地在功能上彼此相似以使得执行行为不取决于哪个GPC208接收特定处理任务。进一步地,每个GPC208有利地使用分开且各异的处理单元、L1高速缓存等来独立于其他GPC208操作。
本领域普通技术人员应该理解图1、2和3所描述的架构决不限制本发明的范围并且在不脱离本发明范围的情况下本文所教导的技术可以在任意经适当配置的处理单元上实现,所述处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU202、一个或多个GPC208、一个或多个图形或专用处理单元等等。
在本发明的实施例中,使用计算系统的PPU202或其他处理器来使用线程阵列执行通用计算是可取的。为线程阵列中的每个线程指派在其执行期间对于线程可访问的唯一的线程标识符(“线程ID”)。可被定义为一维或多维数值的线程ID控制线程处理行为的各方面。例如,线程ID可用于确定线程将要处理输入数据集的哪部分和/或确定线程将要产生或写输出数据集的哪部分。
每线程指令序列可包括定义线程阵列的代表性线程和一个或多个其他线程之间的协作行为的至少一个指令。例如,每线程指令序列可能包括在序列中的特定点处挂起用于代表性线程的操作执行直到诸如其他线程的一个或多个到达该特定点的时间为止的指令、用于代表性线程将数据存储在其他线程的一个或多个有权访问的共享存储器中的指令、用于代表性线程原子地读取和更新存储在其他线程的一个或多个基于它们的线程ID有权访问的共享存储器中的数据的指令等等。CTA程序还可以包括计算数据将从其读取的共享存储器中的地址的指令,该地址是线程ID的函数。通过定义合适的函数并提供同步技术,可以以可预测的方式由CTA的一个线程将数据写入共享存储器中的给定位置并由同一个CTA的不同线程从该位置读取数据。因此,数据在线程之间共享的任意期望模式可以得到支持,以及CTA中的任意线程可以与同一个CTA中的任意其他线程共享数据。如果存在数据在CTA的线程之间的共享,则其范围由CTA程序确定;因此,应该理解的是,在使用CTA的特定应用中,CTA的线程可能会或可能不会真正互相共享数据,这取决于CTA程序,术语“CTA”和“线程阵列”在本文作为同义词使用。
多个并发任务调度
可以在GPC208上并发执行多个处理任务并且处理任务在执行期间可以生成一个或多个“子”处理任务。任务/工作单元207接收任务并动态调度处理任务和子处理任务用于由GPC208执行。
图3是根据本发明的一个实施例的图2的任务/工作单元207的框图。任务/工作单元207包括任务管理单元300和工作分布单元340。任务管理单元300基于执行优先级级别来组织所要调度的任务。对于每个优先级级别,任务管理单元300将指向与任务相对应的TMD322的任务指针的列表存储在调度器表321中,其中所述列表可以用链表实现,并且下文中假设为链表。TMD322是代表任务的元数据,诸如执行任务所需要的配置数据和状态信息。TMD322可以存储在并行处理子系统112可以访问的PP存储器204或系统存储器104中。任务管理单元300接受任务并将任务存储在调度器表321中的速度与任务管理单元300调度任务用于执行的速度是解耦的,这使得任务管理单元300能够基于优先级信息或使用其他技术来调度任务。
工作分布单元340包括具有槽的任务表345,每个槽可以被用于正在执行的任务的TMD322所占用。当任务表345中有空闲槽时,任务管理单元300可以调度任务用于执行。当没有空闲槽时,未占用槽的较高优先级任务可以驱逐占用槽的较低优先级任务。当任务被驱逐时,该任务被停止,并且如果该任务的执行没有完成,则将该任务添加到调度器表321中的链表。当生成子处理任务时,将子处理任务添加到调度器表321中的链表。当任务被驱逐时从槽移除该任务。。
TMD322封装元数据用于处理任务,包括网格维数。网格维数(n,m)指定被执行以对任务进行处理的CTA的数目,其中n和m是整数。例如,网格维数1,1指定单个CTA和网格维数2,1或1,2指定两个CTA。网格可以具有两个以上的维数,并且所有维数大小在TMD中指定。每个CTA要求一些架构资源用于执行。架构资源可以包括每任务存储器存储、每CTA共享存储器、每线程本地存储器、寄存器、CTA标识符、线程组的数目、线程的数目、处理资源或可由任务所消耗的任意其他可量化架构资源的一部分。
工作分布单元340追踪对任务进行处理所需要的可用资源,并且在一些情况下可被消耗的资源的最大量是有限的。因为PPU202不配置为支持动态存储器分配、存储器分页或存储器交换,所以存储用于特定应用程序的每任务数据所需要的存储器需要在由PPU202执行应用程序之前被分配(或保留)。因为给定的处理任务可以生成若干子任务,并且子任务的数目是未知的,所以确定在任务的执行期间将消耗的存储器的最大量是不可能的。该挑战的一个解决方案是限制可由每个CTA消耗的存储器的量。工作分布单元340可以配置为确保存储器的每CTA有限的量是可用的,其作为启动每个CTA的前提,否则CTA的状态可能无法被保存并随后被恢复。另一个解决方案是提供通过其可以在任务的执行期间动态地分配存储器以使得CTA可以消耗的存储器的量不受到限制的机制。
虚拟存储器结构
如之前所解释的,诸如PPU202的某些协处理器设备不具有在PPU202上的线程正在执行用于应用程序的代码的同时分配存储器的能力。因此,将由在PPU202上执行的线程所使用的所有存储器必须在执行在任意PPU202上开始之前由主处理器、CPU102分配。PPU202还不能按需页入(pagein)或页出(page out)存储器片段,其约束在PPU202上执行的应用程序在线程正在运行的同时使用不多于与PPU202相关联的物理存储器。
虽然这类限制对于许多针对常规图形处理器的应用程序可能已经是可接受的,但是期望更灵活的解决方案。特别地,PPU202的嵌套并行性能力增加从已经在PPU202上运行的线程启动新的子任务的能力。虽然用于新任务或子任务的单个启动的存储器的量可能不大,但是嵌套并行性允许线程启动任意无界数目的新的子任务。因此,甚至单个任务所需要的存储器的量也不可被预测。虚拟存储器结构可以用来在任务已经启动之后实施动态存储器分配。
虚拟存储器结构可以实现以模拟先入先出队列结构或存储器池。虚拟存储器结构配置为,甚至当在既不能够动态地分配存储器也不能够动态地分配可交换的(可分页的)存储器的协处理器(例如PPU202)上运行时,不确定地增长。增大虚拟存储器结构中的存储器的量的能力允许可用于PPU202的队列或存储器池被用来存储无界数目的元素,尽管在开始执行用于应用程序的任意任务之前仅要求小的存储器分配。当在应用程序的执行期间将被创建的子任务的数目是未知的时,随着新的任务被启动存储器的动态分配是关键的。在许多情况下,应用程序的执行期间所需要的存储器的最大大小可能是不可知的或者显著大于被分配到PPU202的存储器。
模拟队列的虚拟存储器结构可具有任意标准队列接口,例如push_tail()和pop_head(),但是不同于在电路中所实现的队列,其不受队列中的任意固定的最大数目的元素的制约。类似地,模拟池的虚拟存储器结构可具有任意标准访问接口,例如put_entry()和get_entry(),并且也不受池中的任意固定的最大数目的元素制约。虚拟存储器结构仅要求一些少量的存储器,其在线程开始在PPU202上执行之前被预分配给PPU202。当经预分配的存储器耗尽时,运用虚拟存储器结构实现方案的运行时将一些存储在经预分配的存储器中的数据迁移到PPU202不可访问的存储器,其由CPU102动态地分配并且对CPU102是可访问的,但是其对PPU202是不可访问的。在一个实施例中,PPU202配置为产生稍后将由PPU202消耗的数据。当所产生的数据超出经预分配的存储器的容量时,将数据迁移到附加存储器。支持动态存储器分配和分页的主处理器、CPU102提供经预分配用于应用程序的存储器以外的并且可由PPU202访问的附加存储器。当在PPU202上执行的线程请求从虚拟队列结构移除(取出(pop)或获得(get))元素时,运行时将从PPU202不可访问的存储器迁移数据到经预分配的存储器,如果必要的话,之后将数据返回给线程。
由虚拟存储器结构所实施的底层运行时和数据迁移对于在PPU202上执行的线程是不可见的。对于在PPU202上执行的线程,虚拟存储器结构简单地表现为不由PPU202的正常存储器限制所制约的队列或池。换言之,虚拟存储器结构可以保持增长为大于所预分配到PPU202的存储器或者甚至大于与PPU202相关联的物理存储器(PP存储器204)。
图4A是示出了根据本发明的一个实施例的、包括协处理器不可访问的存储器和协处理器可访问的存储器的虚拟存储器结构400的示意图。虚拟存储器结构400包括协处理器405不可访问的存储器和协处理器410可访问的存储器。主处理器、CPU102能够分配CPU102和协处理器二者都可访问的存储器,其中协处理器是一个或多个PPU202。CPU102和协处理器二者都可访问的存储器,诸如协处理器410可访问的存储器,可以是固定(pinned)系统存储器,即系统存储器104的一部分。系统存储器104可以直接耦连到CPU102或通过存储器桥105耦连到CPU102。系统存储器104通过通信路径113间接耦连到并行处理子系统112。
如本文所使用的,术语可访问指示存储器的一部分已经被分配或保留以由在CPU102或PPU202上执行的特定程序使用。虽然系统存储器104和PP存储器204之间的连接可以提供在CPU102和系统存储器104和/或PP存储器204之间传递信号(读和写请求)的机制,但是当系统存储器104和/或PP存储器204的一部分被分配给在CPU102上执行的特定程序时,系统存储器104和PP存储器204仅被认为对CPU102可访问。类似地,尽管系统存储器104和PP存储器204之间的连接可以提供在PPU202和系统存储器104和/或PP存储器204之间传递信号的机制,但是当系统存储器104和/或PP存储器204的一部分被分配给在PPU202上执行的特定程序时,系统存储器104和PP存储器204仅被认为对PPU202可访问。典型地,为在PPU202上执行的应用程序分配PP存储器204的一部分并且为在CPU102上执行的应用程序分配系统存储器104的一部分以最小化存储器访问延迟。然而,可以为在PPU202上执行的应用程序分配系统存储器104的一部分并且可以为在CPU102上执行的应用程序分配PP存储器204的一部分。
CPU102支持存储器分页或交换并且能够动态地分配存储器和能够分配系统存储器104或PP存储器204中的可分页的或可交换的存储器。协处理器(PPU202)不能动态地分配存储器和/或不支持存储器分页或交换并且不能分配可分页的或可交换的存储器。因此,在开始应用程序之前,设备驱动程序103分配协处理器和主处理器可访问的存储器410以由PPU202在应用程序的执行期间使用。协处理器和主处理器可访问的存储器410的量在分配时间设置。因此,分配中获得缓冲区412、放置(put)缓冲区413和通信缓冲区415可用的存储器的量在分配时间设置。获得缓冲区412、放置缓冲区413和通信缓冲区415可由协处理器和CPU102二者读取或写入。
在由PPU202执行应用程序期间,线程生成表示为数据的任务,其存储在协处理器和主处理器可访问的存储器410中。所生成的任务未来将被消耗或处理并且所消耗以存储所生成的任务的存储器被放入放置缓冲区413中。放置缓冲区413可以配置为存储指向物理存储器的一部分的指针。获得缓冲区412可以配置为存储指向存储表示将由线程所处理的(所生成的)处理任务的物理存储器的一部分的指针。当线程请求处理任务时,线程从获得缓冲区412移除(“取出”或“获得”)处理任务,其存储在协处理器和主处理器可访问的存储器410的一部分中。
当虚拟存储器结构400模拟队列时,维护线程将存储器分配推入放置缓冲区413中所依照的顺序,并且在稍后的时间点,依照先入先出的顺序从获得缓冲区412取出存储器分配。当虚拟存储器结构400模拟池时,由在PPU202上执行的线程插入放置缓冲区413的数据(所生成的处理任务)所消耗的存储器分配可以由在PPU202上执行的相同线程或不同线程依照不同顺序从获得缓冲区412进行检索。
因为分配存储器的有限的量用于获得缓冲区412和放置缓冲区413,所以获得缓冲区412可以变为空的并且放置缓冲区413可以变为满的。在CPU102上执行的工作者线程通过通信缓冲区415监视获得缓冲区412和放置缓冲区413的状况。保证至少偶尔地调度工作者线程以轮询通信缓冲区415。工作者线程配置为根据需要动态地分配交换存储器401以提供附加存储器用于分配给在协处理器上执行的线程。工作者线程在交换状态402维护专用于交换存储器401的状态信息,例如交换存储器的物理位置。交换存储器401中的存储器的量从0开始,根据需要增大以重新填充获得缓冲区412,以及随着存储器分配被释放(当线程根据处理任务的完成退出时)而减小。交换存储器401可以仅由CPU102读取或写入。
在协处理器上执行的线程可以使用pop_head()和push_tail()方法来从获得缓冲区412检索处理任务并且请求存储器分配用于存储处理任务到放置缓冲区413。当虚拟存储器结构400模拟队列时,获得缓冲区412是队列的头部,交换存储器401(如果有的话)是队列的中部,并且放置缓冲区413是队列的尾部。队列的大小可以随着工作者线程动态地增大交换存储器401的大小而增长。
图4B示出了根据本发明的一个实施例的、图4A的通信缓冲区415。当协处理器线程请求存储器分配并且请求将存储器分配(所生成的处理任务或其他数据)插入放置缓冲区413并且放置缓冲区413是满的时,线程通过将清空放置缓冲区通知416写到通信缓冲区415中来通知工作者线程。在CPU102上执行的工作者线程连续地、周期性地或根据其他异步通知(例如从CPU102所接收的中断)读取清空放置缓冲区通知416。当工作者线程确定协处理器线程已经通过写(或设置)清空放置缓冲区通知416发布通知时,工作者线程清除清空放置缓冲区通知416。
如果交换存储器401不具有足够的容量来存储放置缓冲区413,那么工作者线程可以动态地分配附加存储器作为交换存储器401。从协处理器不可访问的存储器分配交换存储器401中所需要的附加存储器。工作者线程更新交换状态402以追踪交换存储器401中所新分配的附加存储器。可以使用链表追踪交换存储器401中的分配。工作者线程之后将放置缓冲区413的内容拷贝到交换存储器401,消耗交换存储器401的容量的一部分。因为交换存储器401存储在协处理器不可访问的存储器中,所以在工作者线程将放置缓冲区413的内容移动到交换存储器401之后,协处理器可访问的放置缓冲区413的内容对协处理器不再是可访问的。当协处理器需要内容时,可以将内容从交换存储器401移入获得缓冲区412,如本文所进一步描述的。
一旦工作者线程已经清空放置缓冲区413,工作者线程就将清空放置缓冲区完成418写到通信缓冲区415中,以通知协处理器线程放置缓冲区413已经被清空。协处理器线程之后读取并清除清空放置缓冲区完成418。清空放置缓冲区完成418可以是通信缓冲区415中的单个位,其可由在CPU102上执行的工作者线程写并且由协处理器线程读取和清除。
当协处理器线程尝试从获得缓冲区412检索之前存储在虚拟存储器结构400中的数据,例如现在准备开始执行的处理任务,并且获得缓冲区412是空的时,线程通过将填充获得缓冲区通知420写到通信缓冲区415中来通知工作者线程。在CPU102上执行的工作者线程连续地、周期性地或根据其他异步通知(例如从CPU102所接收的中断)读取填充获得缓冲区通知420。当工作者线程确定协处理器线程已经通过写(或设置)填充获得缓冲区通知420发布通知时,工作者线程清除填充获得缓冲区通知420。填充获得缓冲区通知420可以是通信缓冲区415中的单个位,其可由协处理器线程写并且由在CPU102上执行的工作者线程读取和清除。
如果交换存储器401是空的,工作者线程之后确定放置缓冲区413是否不是空的,并且如果放置缓冲区413不是空的,那么工作者线程将一个或多个所生成的任务从放置缓冲区413移动到获得缓冲区412。工作者线程在检查放置缓冲区413之前检查交换存储器401是空的,即没有所生成的任务存储在交换缓冲区401中,以使得当虚拟存储器结构400模拟队列时FIFO顺序被维护用于存储在虚拟存储器结构400中的数据。如果根据交换状态402,交换存储器401不是空的,那么工作者线程将存储在交换存储器401中的所生成的任务拷贝到获得缓冲区412。更新交换状态402以指示填充获得缓冲区412的交换存储器401的一部分可用于分配。在一个实施例中,交换存储器401的该部分可以从协处理器不可访问的存储器405解除分配或从交换存储器401释放。
一旦工作者线程已经重新填充获得缓冲区412,工作者线程就将填充获得缓冲区完成422写到通信缓冲区415中以通知协处理器线程获得缓冲区415已经被填充。协处理器线程之后读取并清除填充获得缓冲区完成422。填充获得缓冲区完成422可以是通信缓冲区415中的单个位,其可由在CPU102上执行的工作者线程写并且由协处理器线程读取和清除。
在协处理器上执行的线程使用握手类型的协议通过通信缓冲区415与工作者线程通信。可以使用也确保在CPU102和PPU202之间通信是相干的的其他握手类型机制。此外,因为多个协处理器线程可以尝试同时从获得缓冲区412接收数据和/或同时将数据(例如所生成的任务结构)插到放置缓冲区413,所以应该使用原子操作来插入和返回数据以保证一致的虚拟存储器结构400。此外,应该取得锁来确保仅单个协处理器线程访问通信缓冲区415以通知工作者线程重新填充获得缓冲区412或将放置缓冲区413清空。应该直到工作者线程已经通过写通信缓冲区415确认重新填充或清空操作的完成才释放锁以完成握手。虽然使用锁定技术来实施对于虚拟存储器结构400的单生产者单消费者访问,但是其他的、更复杂的多生产者多消费者协议可以实现。
图4C示出了根据本发明的一个实施例的、用于在由协处理器执行程序期间动态地分配附加存储器的方法440。尽管结合图1、2、3、4A和4B的系统描述了该方法步骤,但是本领域技术人员应该理解配置为以任意顺序实施该方法步骤的任意系统均在本发明的范围内。
在步骤445,设备驱动程序103(例如CUDA设备驱动程序)当多个线程在诸如一个或多个PPU202的协处理器上执行时分配多个线程可访问的第一存储器内的第一缓冲区、放置缓冲区413。第一存储器是如图4A所示的协处理器和主处理器可访问的存储器410。在步骤450,设备驱动程序103分配第一存储器内的第二缓冲区、获得缓冲区412。在步骤455,设备驱动程序103分配并初始化第一存储器内的第三缓冲区、通信缓冲区415。初始化通信缓冲区415以清除与第一和第二缓冲区相关联的通知并且清除工作者线程已经完成通知的处理的指示。
在步骤460由协处理器执行处理任务。在步骤465,协处理器线程确定存储器请求是否失败,即放置缓冲区413是否是满的或者获得缓冲区412是否是空的。如果在步骤465存储器请求没有失败,那么协处理器线程将所生成的任务插入放置缓冲区413或从获得缓冲区412接收所生成的任务并且在步骤460处理任务的执行继续。如果在步骤465存储器请求失败,那么在步骤470协处理器线程通知在CPU102执行的工作者线程第一缓冲区是满的或第二缓冲区是空的。
在步骤475,工作者线程在多个线程执行期间动态地分配多个线程不可访问的第二存储器内的交换缓冲区401的第一部分,以当放置缓冲区413是满的时存储放置缓冲区413。第二存储器是协处理器不可访问的存储器405。如果交换缓冲区401是空的,则工作者线程首先动态地分配协处理器不可访问的存储器给交换缓冲区401。当获得缓冲区412是空的时,工作者线程分配存储所生成的任务的交换缓冲区401的第一部分以换入获得缓冲区412。在步骤480,当获得缓冲区412是空的时工作者线程将交换缓冲区401的第一部分换入获得缓冲区412并且当放置缓冲区413是满的时工作者线程将放置缓冲区413换入交换缓冲区401的第一部分,从而使得在处理任务的执行期间交换缓冲区405的第一部分对于协处理器可访问。
图5A示出了根据本发明的一个实施例的、用于将放置缓冲区413清空的方法。尽管结合图1、2、3、4A和4B的系统描述了该方法步骤,但是本领域技术人员应该理解配置为以任意顺序实施该方法步骤的任意系统均在本发明的范围内。在步骤555协处理器线程从放置缓冲区413请求分配用于存储数据,例如任务结构。在步骤510协处理器线程确定放置缓冲区413是否是满的,并且如果放置缓冲区413不是满的,则在步骤565协处理器线程实施原子操作以返回存储器分配到放置缓冲区413。使用原子操作确保当多个协处理器线程尝试同时将数据插入放置缓冲区413时,每个分配被返回到放置缓冲区413中的一个且仅一个槽。
如果在步骤560协处理器线程确定放置缓冲区413是满的,那么在步骤570协处理器线程尝试锁定对放置缓冲区413的访问,以使得在缓冲区清空过程中放置缓冲区413不能由任何其他协处理器线程访问。在步骤575,协处理器线程确定是否获取锁,并且如果没有获取锁,那么协处理器线程返回步骤560。否则,协处理器线程获取锁,并且在步骤580协处理器线程通知在CPU102上执行的工作线程放置缓冲区413是满的。在步骤585,协处理器线程通过读取清空放置缓冲区完成418确定放置缓冲区413是否已经由工作线程清空。重复步骤585直到协处理器线程确定放置缓冲区413已经被清空。那么,在步骤590协处理器线程返回分配到放置缓冲区413。在步骤590,协处理器线程解锁放置缓冲区413,这允许其他协处理器线程访问放置缓冲区413,包括在步骤570不能获取锁的任意协处理器线程。
图5B示出了根据本发明的一个实施例的、用于填充获得缓冲区412的方法500。尽管结合图1、2、3、4A和4B的系统描述了该方法步骤,但是本领域技术人员应该理解配置为以任意顺序实施该方法步骤的任意系统均在本发明的范围内。在步骤505协处理器线程从获得缓冲区412请求数据。在步骤510协处理器线程确定获得缓冲区412是否是空的,并且如果获得缓冲区412不是空的,则在步骤515协处理器线程实施原子操作以从获得缓冲区412检索数据。使用原子操作确保当多个协处理器线程尝试同时从获得缓冲区412接收数据时,所检索的数据中的每一个被提供到一个且仅一个协处理器线程。
如果在步骤510协处理器线程确定获得缓冲区412是空的,那么在步骤520协处理器线程尝试锁定对获得缓冲区412的访问以使得在缓冲区重新填充过程中获得缓冲区412不能由任何其他协处理器线程访问。在步骤525,协处理器线程确定是否获取锁,并且如果没有获取锁,那么协处理器线程返回步骤510。否则,协处理器线程获取锁,并且在步骤530协处理器线程通知在CPU102上执行的工作线程获得缓冲区412是空的。在步骤535,协处理器线程通过读取填充获得缓冲区完成422确定获得缓冲区412是否已经由工作线程填充。重复步骤535直到协处理器线程确定获得缓冲区412已经被填充。那么,在步骤540协处理器线程从获得缓冲区412接收数据。在步骤545,协处理器线程解锁获得缓冲区412,这允许其他协处理器线程访问获得缓冲区412,包括在步骤520不能获取锁的任意协处理器线程。
总之,协处理器在程序的执行开始之前分配一些存储器给程序作为放置缓冲区。如果在由协处理器执行程序期间,由线程所提出的、将数据存储在放置缓冲区中的请求因为放置缓冲区是满的而不能满足,则线程通知工作者线程。工作者线程通过动态地分配不能由协处理器所访问的存储器内的交换缓冲区来处理由线程所生成的通知。工作者线程之后在程序的执行期间将放置缓冲区页入交换缓冲区以将放置缓冲区清空。工作者线程使能线程在由协处理器执行程序期间动态地接收存储器分配。在程序的执行期间可用的存储器的量不受被分配用于放置缓冲区的存储器的量的限制。
在处理任务的执行期间动态地分配存储器的能力使能处理任务产生无限数目的子任务,其也可产生子任务。换言之,用于嵌套并行任务的嵌套级别的数目不是有限的。同样,可生成的子处理任务的数目和每个任务和子任务可消耗的存储器的量不基于存储器的固定分配而受约束。即使当执行应用程序的协处理器不支持存储器分页或交换时,虚拟存储器结构也使能在应用程序的执行期间的存储器的动态分配。
本发明的一个实施例可实现为与计算机系统一起使用的程序产品。该程序产品的程序定义实施例的功能(包括本文中描述的方法)并且可以被包含在各种计算机可读存储介质上。示例性计算机可读存储介质包括但不限于:(i)不可写入的存储介质(例如,计算机内的只读存储器设备,诸如可由光盘只读存储器(CD-ROM)驱动器读取的CD-ROM盘、闪存、只读存储器(ROM)芯片或任何类型的固态非易失性半导体存储器),在其上永久性地存储信息;和(ii)可写入的存储介质(例如,软盘驱动器内的软盘或硬盘驱动器或者任意类型的固态随机存取半导体存储器),在其上存储可更改的信息。
以上已参照特定实施例对本发明进行了描述。然而,本领域技术人员将理解的是,可对此做出各种修改和变化,而不脱离如所附权利要求书中所阐述的本发明的较宽精神和范围。因此,前面的描述以及附图应被视为是示例性的而非限制性的。
Claims (10)
1.一种在程序的执行期间分配存储器给所述程序的计算机实现的方法,所述方法包括:
当多个线程在协处理器上执行时分配所述多个线程可访问的第一存储器内的第一缓冲区;
在处理任务在所述协处理器上执行期间;通知在中央处理单元上执行的工作者线程所述第一缓冲区是满的;
在所述多个线程的执行期间分配所述多个线程不可访问的第二存储器内的交换缓冲区的第一部分;以及
将所述第一缓冲区换入所述交换缓冲区的所述第一部分。
2.如权利要求1所述的方法,进一步包括分配所述多个线程可访问的所述第一存储器内的第三缓冲区以产生在所述处理任务的执行期间存储由所述多个线程所生成的数据的获得缓冲区。
3.如权利要求2所述的方法,进一步包括:
在所述处理任务在所述协处理器上执行期间;通知所述工作者线程所述第三缓冲区是空的;
确定所述交换缓冲区是空的;以及
将与所述第一缓冲区相对应的所述第一存储器的至少一部分换入所述第三缓冲区。
4.如权利要求2所述的方法,进一步包括:
确定所述第三缓冲区是空的;以及
通知所述工作者线程所述第三缓冲区是空的;以及
将所述交换缓冲区的所述第一部分换入与所述第三缓冲区相对应的所述第一存储器的一部分。
5.如权利要求1所述的方法,进一步包括,在将所述第一缓冲区换入所述交换缓冲区之前:
确定所述交换缓冲区是空的;以及
分配所述第二存储器的附加部分到所述交换缓冲区。
6.如权利要求1所述的方法,进一步包括:
分配所述多个线程可访问的所述第一存储器内的第二缓冲区以产生通信缓冲区;以及
初始化所述通信缓冲区。
7.如权利要求1所述的方法,进一步包括,在交换之后通知所述多个线程所述第一缓冲区不是满的。
8.如权利要求1所述的方法,其中通知所述工作者线程包括:
由所述多个线程的线程写所述通信缓冲区;以及由所述工作者线程读取所述通信缓冲区。
9.如权利要求1所述的方法,其中所述第一缓冲区是放置缓冲区,其配置为在所述处理任务的执行期间向所述多个线程提供存储器分配用于存储在所述处理任务的执行期间所生成的至少一个附加的处理任务。
10.如权利要求1所述的方法,其中所述第一缓冲区和所述交换缓冲区配置为模拟先入先出队列或存储器分配池。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/467,611 US8904068B2 (en) | 2012-05-09 | 2012-05-09 | Virtual memory structure for coprocessors having memory allocation limitations |
US13/467,611 | 2012-05-09 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103389944A true CN103389944A (zh) | 2013-11-13 |
Family
ID=49475718
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2013101703048A Pending CN103389944A (zh) | 2012-05-09 | 2013-05-09 | 用于具有存储器分配限制的协处理器的虚拟存储器结构 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8904068B2 (zh) |
CN (1) | CN103389944A (zh) |
DE (2) | DE102013208423B4 (zh) |
TW (1) | TWI475386B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107111455A (zh) * | 2014-12-26 | 2017-08-29 | 威斯康星校友研究基金会 | 使用虚拟地址的缓存访问 |
CN108139966A (zh) * | 2016-05-03 | 2018-06-08 | 华为技术有限公司 | 管理转址旁路缓存的方法和多核处理器 |
CN109313611A (zh) * | 2016-06-21 | 2019-02-05 | Arm有限公司 | 检测电路 |
CN110417514A (zh) * | 2019-07-22 | 2019-11-05 | 北京地平线机器人技术研发有限公司 | 数据发送方法和装置、数据接收方法和装置 |
CN110851076A (zh) * | 2018-08-21 | 2020-02-28 | 三星电子株式会社 | 存储器系统和删除重复存储器系统 |
CN112527494A (zh) * | 2019-09-19 | 2021-03-19 | 富士通株式会社 | 信息处理设备和方法以及非暂态计算机可读记录介质 |
CN112822494A (zh) * | 2020-12-30 | 2021-05-18 | 稿定(厦门)科技有限公司 | 双缓冲编码系统及其控制方法 |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101950282B (zh) * | 2010-08-30 | 2012-05-23 | 中国科学院计算技术研究所 | 一种多处理器系统及其同步引擎 |
US9396030B2 (en) * | 2013-03-13 | 2016-07-19 | Samsung Electronics Co., Ltd. | Quota-based adaptive resource balancing in a scalable heap allocator for multithreaded applications |
US20140331014A1 (en) * | 2013-05-01 | 2014-11-06 | Silicon Graphics International Corp. | Scalable Matrix Multiplication in a Shared Memory System |
US9785480B2 (en) | 2015-02-12 | 2017-10-10 | Netapp, Inc. | Load balancing and fault tolerant service in a distributed data system |
TWI601017B (zh) * | 2016-01-20 | 2017-10-01 | 后旺科技股份有限公司 | 複合式硬碟的交握方法 |
US10002106B2 (en) * | 2016-04-20 | 2018-06-19 | Allone Solution Co., Ltd. | Handshaking method of hybrid hard-disk drive |
CN107885666B (zh) | 2016-09-28 | 2021-07-20 | 华为技术有限公司 | 一种内存管理方法和装置 |
US10552321B2 (en) * | 2017-08-04 | 2020-02-04 | Microsoft Technology Licensing, Llc | Flexible buffer sizing in graphics processors |
US10560394B2 (en) * | 2017-09-22 | 2020-02-11 | Cisco Technology, Inc. | Dynamic transmission side scaling |
US10713746B2 (en) * | 2018-01-29 | 2020-07-14 | Microsoft Technology Licensing, Llc | FIFO queue, memory resource, and task management for graphics processing |
TWI650648B (zh) | 2018-02-09 | 2019-02-11 | 慧榮科技股份有限公司 | 系統晶片及存取系統晶片中記憶體的方法 |
US10719268B2 (en) | 2018-06-29 | 2020-07-21 | Microsoft Technology Licensing, Llc | Techniques for safely and efficiently enqueueing and dequeueing data on a graphics processor |
US10459849B1 (en) | 2018-08-31 | 2019-10-29 | Sas Institute Inc. | Scheduling operations in an access-controlled region of memory |
US10871996B2 (en) * | 2018-10-17 | 2020-12-22 | Oracle International Corporation | Detection, modeling and application of memory bandwith patterns |
US10909652B2 (en) * | 2019-03-15 | 2021-02-02 | Intel Corporation | Enabling product SKUs based on chiplet configurations |
WO2020226880A1 (en) | 2019-05-03 | 2020-11-12 | University Of Pittsburgh-Of The Commonwealth System Of Higher Education | Method and apparatus for adaptive page migration and pinning for oversubscribed irregular applications |
WO2021126216A1 (en) | 2019-12-19 | 2021-06-24 | Google Llc | Resource management unit for capturing operating system configuration states and offloading tasks |
EP3857371A1 (en) * | 2019-12-19 | 2021-08-04 | Google LLC | Resource management unit for capturing operating system configuration states and memory management |
US12056382B2 (en) | 2020-05-26 | 2024-08-06 | Qualcomm Incorporated | Inference in memory |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060161757A1 (en) * | 2004-12-23 | 2006-07-20 | Intel Corporation | Dynamic allocation of a buffer across multiple clients in a threaded processor |
CN101351773A (zh) * | 2005-12-30 | 2009-01-21 | 英特尔公司 | 基于存储器访问数据结构执行直接高速缓存访问事务 |
US20100146222A1 (en) * | 2008-12-10 | 2010-06-10 | Michael Brian Cox | Chipset Support For Non-Uniform Memory Access Among Heterogeneous Processing Units |
CN101952801A (zh) * | 2008-01-16 | 2011-01-19 | 诺基亚公司 | 用于流数据处理的协处理器 |
US20110078381A1 (en) * | 2009-09-25 | 2011-03-31 | Heinrich Steven James | Cache Operations and Policies For A Multi-Threaded Client |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6076137A (en) * | 1997-12-11 | 2000-06-13 | Lexar Media, Inc. | Method and apparatus for storing location identification information within non-volatile memory devices |
US6909443B1 (en) * | 1999-04-06 | 2005-06-21 | Microsoft Corporation | Method and apparatus for providing a three-dimensional task gallery computer interface |
US6931641B1 (en) * | 2000-04-04 | 2005-08-16 | International Business Machines Corporation | Controller for multiple instruction thread processors |
US7155727B2 (en) * | 2001-06-19 | 2006-12-26 | Sun Microsystems, Inc. | Efficient data buffering in a multithreaded environment |
WO2003023656A1 (en) * | 2001-09-13 | 2003-03-20 | Jda Software Group, Inc | Database interface architecture with time-based load balancing in a real-time environment |
EP1492006B1 (en) * | 2003-06-24 | 2007-10-10 | Research In Motion Limited | Detection of out of memory and graceful shutdown |
US20050120351A1 (en) * | 2003-10-31 | 2005-06-02 | De Bonet Jeremy S. | System and method for a synchronized shared buffer architecture for multimedia players |
US7802028B2 (en) * | 2005-05-02 | 2010-09-21 | Broadcom Corporation | Total dynamic sharing of a transaction queue |
US7720802B2 (en) * | 2007-01-03 | 2010-05-18 | International Business Machines Corporation | Reclaiming resident buffers when a reclaim threshold has been exceeded by swapping the oldest in use buffer and a new buffer, and referencing the new buffer via an updated set of read and write pointers |
US8127074B2 (en) * | 2009-06-09 | 2012-02-28 | Red Hat, Inc. | Mechanism for a reader page for a ring buffer |
US8099546B2 (en) * | 2009-06-09 | 2012-01-17 | Red Hat, Inc. | Mechanism for a lockless ring buffer in overwrite mode |
US8572617B2 (en) * | 2009-07-21 | 2013-10-29 | Sas Institute Inc. | Processor-implemented systems and methods for event handling |
US8752018B2 (en) * | 2011-06-21 | 2014-06-10 | Nvidia Corporation | Emitting coherent output from multiple threads for printf |
-
2012
- 2012-05-09 US US13/467,611 patent/US8904068B2/en active Active
-
2013
- 2013-05-07 DE DE102013208423.4A patent/DE102013208423B4/de active Active
- 2013-05-07 DE DE102013022712.7A patent/DE102013022712B4/de active Active
- 2013-05-08 TW TW102116393A patent/TWI475386B/zh not_active IP Right Cessation
- 2013-05-09 CN CN2013101703048A patent/CN103389944A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060161757A1 (en) * | 2004-12-23 | 2006-07-20 | Intel Corporation | Dynamic allocation of a buffer across multiple clients in a threaded processor |
CN101351773A (zh) * | 2005-12-30 | 2009-01-21 | 英特尔公司 | 基于存储器访问数据结构执行直接高速缓存访问事务 |
CN101952801A (zh) * | 2008-01-16 | 2011-01-19 | 诺基亚公司 | 用于流数据处理的协处理器 |
US20100146222A1 (en) * | 2008-12-10 | 2010-06-10 | Michael Brian Cox | Chipset Support For Non-Uniform Memory Access Among Heterogeneous Processing Units |
US20110078381A1 (en) * | 2009-09-25 | 2011-03-31 | Heinrich Steven James | Cache Operations and Policies For A Multi-Threaded Client |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107111455A (zh) * | 2014-12-26 | 2017-08-29 | 威斯康星校友研究基金会 | 使用虚拟地址的缓存访问 |
CN107111455B (zh) * | 2014-12-26 | 2020-08-21 | 威斯康星校友研究基金会 | 电子处理器架构以及缓存数据的方法 |
CN108139966A (zh) * | 2016-05-03 | 2018-06-08 | 华为技术有限公司 | 管理转址旁路缓存的方法和多核处理器 |
CN108139966B (zh) * | 2016-05-03 | 2020-12-22 | 华为技术有限公司 | 管理转址旁路缓存的方法和多核处理器 |
CN109313611B (zh) * | 2016-06-21 | 2023-02-24 | Arm有限公司 | 用于处理数据的设备和方法 |
CN109313611A (zh) * | 2016-06-21 | 2019-02-05 | Arm有限公司 | 检测电路 |
CN110851076A (zh) * | 2018-08-21 | 2020-02-28 | 三星电子株式会社 | 存储器系统和删除重复存储器系统 |
US12099736B2 (en) | 2018-08-21 | 2024-09-24 | Samsung Electronics Co., Ltd. | Scalable architecture enabling large memory system for in-memory computations |
CN110851076B (zh) * | 2018-08-21 | 2024-09-13 | 三星电子株式会社 | 存储器系统和删除重复存储器系统 |
CN110417514A (zh) * | 2019-07-22 | 2019-11-05 | 北京地平线机器人技术研发有限公司 | 数据发送方法和装置、数据接收方法和装置 |
CN110417514B (zh) * | 2019-07-22 | 2022-02-01 | 北京地平线机器人技术研发有限公司 | 数据发送方法和装置、数据接收方法和装置 |
CN112527494A (zh) * | 2019-09-19 | 2021-03-19 | 富士通株式会社 | 信息处理设备和方法以及非暂态计算机可读记录介质 |
CN112822494A (zh) * | 2020-12-30 | 2021-05-18 | 稿定(厦门)科技有限公司 | 双缓冲编码系统及其控制方法 |
Also Published As
Publication number | Publication date |
---|---|
TW201416856A (zh) | 2014-05-01 |
DE102013022712B4 (de) | 2024-04-18 |
DE102013208423B4 (de) | 2023-08-03 |
DE102013208423A1 (de) | 2013-11-14 |
TWI475386B (zh) | 2015-03-01 |
US8904068B2 (en) | 2014-12-02 |
US20130305009A1 (en) | 2013-11-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103389944A (zh) | 用于具有存储器分配限制的协处理器的虚拟存储器结构 | |
CN103226481A (zh) | 自动从属任务启动 | |
CN103365631B (zh) | 用于存储器访问的动态库模式寻址 | |
CN103425533B (zh) | 用于管理嵌套执行流的方法和系统 | |
US9542227B2 (en) | Parallel dynamic memory allocation using a lock-free FIFO | |
CN103294753A (zh) | 无锁先入先出 | |
TWI509519B (zh) | 維持公平和秩序的資源管理子系統 | |
CN104050033A (zh) | 用于有索引的屏障的硬件调度的系统和方法 | |
CN103207774B (zh) | 用于解决线程发散的方法和系统 | |
US9710306B2 (en) | Methods and apparatus for auto-throttling encapsulated compute tasks | |
TWI488118B (zh) | 處理系統中動態產生任務的傳訊、排序和執行 | |
CN103176848A (zh) | 计算工作分布参考计数器 | |
CN103197916A (zh) | 用于源操作数收集器高速缓存的方法和装置 | |
CN103777926A (zh) | 多线程处理单元中的高效存储器虚拟化 | |
TWI533222B (zh) | 處理任務的工作分配控制 | |
CN103778072A (zh) | 多线程处理单元中的高效存储器虚拟化 | |
CN103425534A (zh) | 在许多应用之间共享的图形处理单元 | |
CN103777925A (zh) | 多线程处理单元中的高效存储器虚拟化 | |
CN103559014A (zh) | 用于处理嵌套流事件的方法和系统 | |
CN103885893A (zh) | 用于访问内容寻址存储器的技术 | |
CN103309702A (zh) | 用于并行线程子集的一致加载处理 | |
CN104050032A (zh) | 用于有条件的屏障和急迫的屏障的硬件调度的系统和方法 | |
US9417881B2 (en) | Parallel dynamic memory allocation using a lock-free pop-only FIFO | |
CN103885902A (zh) | 用于经由纹理硬件实施存储器访问操作的技术 | |
CN103207810A (zh) | 计算任务状态封装 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
AD01 | Patent right deemed abandoned |
Effective date of abandoning: 20170111 |
|
AD01 | Patent right deemed abandoned |