CN109656710A - 资源分配 - Google Patents
资源分配 Download PDFInfo
- Publication number
- CN109656710A CN109656710A CN201811083351.8A CN201811083351A CN109656710A CN 109656710 A CN109656710 A CN 109656710A CN 201811083351 A CN201811083351 A CN 201811083351A CN 109656710 A CN109656710 A CN 109656710A
- Authority
- CN
- China
- Prior art keywords
- memory
- task
- window
- resource
- working group
- 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
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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/084—Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0842—Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
-
- 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/5022—Mechanisms to release resources
-
- 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/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
-
- 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/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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)
Abstract
本公开涉及资源分配。一种用于单指令多数据(SIMD)处理器的存储器子系统,该SIMD处理器包括被配置用于处理分别包括多个SIMD任务的一个或多个工作组的多个处理单元,该存储器子系统包括:共享存储器,被划分为用于分配给将由处理器处理的任务的多个存储器部分;资源分配器,被配置为响应于接收到有关工作组的第一接收任务的针对第一存储器资源的存储器资源请求,向工作组分配一块存储器部分,所述一块存储器部分的大小足够工作组的每个任务接收所述一块存储器部分中相当于第一存储器资源的存储器资源。
Description
技术领域
本公开涉及用于多个处理单元的存储器子系统。
背景技术
在包括多个处理单元的系统中,通常提供可以由至少一些处理单元存取的共享存储器。由于可以在处理单元运行的、分别具有不同的存储器需求的处理任务的范围,共享存储器资源在设计时一般对于每个处理单元来说不是固定的。通常提供允许在不同处理单元上运行的处理任务分别请求共享存储器的一个或多个区域的分配机制。这使得共享存储器能够被动态分配,供在处理单元处执行的任务使用。
可以通过分配机制的精心设计来实现共享存储器的高效使用。
发明内容
提供本发明内容以介绍下面在详细描述中进一步描述的概念的选择。本发明内容不用于识别请求保护的主题的关键特征或本质特征,也不用于限制请求保护的主题的范围。
提供了一种存储器子系统,用于包括多个处理单元的单指令多数据(SIMD)处理器,该多个处理单元被配置用于处理分别包括多个SIMD任务的一个或多个工作组,该存储器子系统包括:
共享存储器,被划分为用于分配给将由处理器处理的任务的多个存储器部分;以及
资源分配器,被配置为响应于接收到有关工作组的第一接收任务的对于第一存储器资源的存储器资源请求,向工作组分配一块存储器部分,该块存储器部分的大小足够该工作组中的每个任务接收该块存储器部分中相当于第一存储器资源的存储器资源。
资源分配器可以被配置为分配连续块的存储器资源作为该块存储器部分。
资源分配器可以被配置为在服务工作组的第一接收任务时从该块存储器部分向该任务分配所请求的第一存储器资源,并且保留该块存储器部分的剩余存储器部分以防分配给其他工作组的任务。
资源分配器可以被配置为响应于随后接收到有关工作组的第二任务的存储器资源请求,向第二任务分配该块存储器部分的存储器资源。
资源分配器可以被布置为接收来自多个不同请求器的存储器资源请求,并且响应于向工作组分配该块存储器部分而优先服务从以下请求器接收到的存储器请求,该工作组的第一接收任务是从该请求器接收到的。
资源分配器可以进一步被配置为响应于接收到工作组的任务的处理已经完成的指示,释放分配给该任务的存储器资源而无需等待工作组的处理完成。
共享存储器可以进一步被划分为多个非重叠窗口,每个非重叠窗口包括多个存储器部分,资源分配器被配置为保持指示当前窗口的窗口指针,其中,将在当前窗口中响应于下一个接收到的存储器请求而尝试分配存储器部分。
资源分配器可以实现在二进制逻辑电路中,并且窗口长度可以为可以在二进制逻辑电路的单个时钟周期中检查每个窗口的所有存储器部分的可用性。
资源分配器可以进一步被配置为保持细状态数组,该细状态数组被布置为指示共享存储器的每个存储器部分是否被分配给任务。
资源分配器可以被配置为响应于接收到有关工作组的第一接收任务的存储器资源请求,在当前窗口中搜索被细状态数组指示为可用于分配的连续块的存储器部分,资源分配器被配置为如果在当前窗口中识别出这样的连续块,则向工作组分配该连续块。
资源分配器可以被配置为分配连续块的存储器部分,使得该块在窗口中的最低可能位置开始。
资源分配器可以进一步被配置为保持粗状态数组,该粗状态数组被布置为针对共享存储器的每个窗口指示该窗口的所有存储器部分是否是未被分配的,资源分配器被配置为与在当前窗口中搜索连续块的存储器部分相并行地检查粗状态数组,以确定所请求的块的大小是否可以由一个或多个后续窗口提供;资源分配器被配置为如果在当前窗口中不能识别出足够大的连续块且所请求的块可以由一个或多个后续窗口提供,则向工作组分配包括从与一个或多个后续窗口在连续块中的当前窗口的第一存储器部分开始、并且延伸到这些后续窗口中的存储器部分的块。
资源分配器可以进一步被配置为与搜索当前窗口并行地形成溢出度量,该溢出度量表示在紧邻后续窗口的连续块的未分配存储器部分中不能从当前窗口的第一存储器部分开始在当前窗口中提供的所需要的块的存储器部分的存储器资源,资源分配器被配置为如果不能在当前窗口中识别出足够大的连续块且所请求的块不能由一个或多个后续窗口提供,则接下来通过在后续窗口中从后续窗口的第一存储器部分开始搜索总大小足够提供溢出度量的连续块的未分配存储器部分来尝试向工作组分配一块存储器部分。
细状态数组可以是其中的每个比特对应于共享存储器的一个存储器部分并且每个比特的值指示对应的存储器部分是否被分配的比特数组。
粗状态数组可以是其中的每个比特对应于共享存储器的一个窗口并且每个比特的值指示相应的窗口是否完全被分配的比特数组。
资源分配器可以被配置为通过以下处理形成粗状态数组的每个比特:对细状态数组的对应于存在于与粗状态数组中的该比特对应的窗口中的存储器部分的所有比特执行OR减少(OR reduction)。
窗口长度可以是2的幂。
资源分配器可以保持识别当前正在为一个或多个工作组中的哪些工作组分配存储器部分块的数据结构。
根据第二方面,提供了一种向在单指令多数据(SIMD)处理器中执行的任务分配共享存储器资源的方法,该SIMD处理器包括多个处理单元,每个处理单元被配置为处理分别包括多个SIMD任务的一个或多个工作组,该方法包括:
接收有关工作组的第一接收任务的对于第一存储器资源的共享存储器资源请求;以及
向工作组分配共享存储器的一块存储器部分,该块存储器部分的大小足够工作组中的每个任务接收该块存储器部分中相当于第一存储器资源的存储器资源。
向工作组分配一块存储器部分可以包括分配该块存储器部分作为连续块的存储器部分。
该方法还可以包括:在服务工作组的第一接收任务时从该块存储器部分向该任务分配所请求的第一存储器资源,并且保留该块存储器部分的剩余存储器部分以防分配给其他工作组的任务。
该方法还可以包括:响应于随后接收到有关工作组的第二任务的存储器资源请求,向第二任务分配该块存储器部分的存储器资源。
该方法还可以包括:接收来自多个不同请求器的存储器资源请求,并且响应于向工作组分配该块存储器部分而优先服务从以下请求器接收到的存储器请求,该工作组的第一接收任务是从该请求器接收到的。
该方法还可以包括:响应于接收到工作组的任务的处理已经完成的指示,释放分配给该任务的存储器资源而无需等待工作组的处理完成。
该方法还可以包括:保持细状态数组,该细状态数组被布置为指示共享存储器的每个存储器部分是否被分配给任务。
向工作组分配一块存储器部分可以包括:在当前窗口中搜索被细状态数组指示为可用于分配的连续块的存储器部分,并且如果在当前窗口中识别出这样的连续块则向工作组分配该连续块。
向工作组分配连续块可以包括:分配连续块的存储器部分,使得该连续块在窗口中的最低可能位置开始。
该方法可以进一步包括:
保持粗状态数组,该粗状态数组指示对于共享存储器的每个窗口,该窗口的所有存储器部分是否被分配;
与在当前窗口中搜索连续块的存储器部分并行地检查粗状态数组,以确定所请求的块的大小能否由一个或多个后续窗口提供;以及
如果在当前窗口中不能识别足够大的连续块且所请求的块不能由一个或多个后续窗口提供,则向工作组分配包括从与后续窗口在连续块中的当前窗口的第一存储器部分开始、并且延伸到这些后续块中的存储器部分的块。
该方法还可以包括:
与搜索当前窗口并行地形成表示溢出度量,该溢出度量表示在紧邻后续窗口的连续块的未分配存储器部分中不能从当前窗口的第一存储器部分开始在当前窗口中提供的所需要的块的存储器部分的存储器资源;以及
如果不能在当前窗口中识别出足够大的连续块并且所请求的块不能由一个或多个后续窗口提供,则后续通过在后续窗口中从该后续窗口的第一存储器部分开始搜索总大小足够容纳溢出度量的连续块的未分配存储器部分来尝试向工作组分配一块存储器部分。
根据第三方面,提供了一种用于单指令多数据(SIMD)处理器的存储器子系统,该SIMD处理器包括用于处理SIMD任务的多个处理单元,该存储器子系统包括:
共享存储器,被划分为用于分配给将由处理器处理的任务的多个存储器部分;
转换单元,被配置为将任务与共享存储器的一个或多个物理地址相关联;以及
资源分配器,被配置为响应于接收到有关任务的针对第一存储器资源的存储器资源请求,向该任务分配连续虚拟存储器块并使得转换单元将任务与分别对应于虚拟存储器块的分区的存储器部分的多个物理地址相关联,所述存储器部分共同实现完整的虚拟存储器块。
该块的多个存储器部分中的至少一些存储器部分可以在共享存储器中不连续。
虚拟存储器块可以包括作为与任务相关联的存储器部分之一的物理地址的基址。
虚拟存储器块可以包括作为虚拟存储器块的逻辑地址的基址。
转换单元可操作以随后服务有关虚拟存储器块的从任务接收到的存取请求,该存取请求包括任务的标识符和虚拟存储器块中的存储区域的偏移,该转换单元被配置为在对应于偏移所指示的虚拟存储器块的分区的存储器部分服务存取请求。
转换单元可以包括:内容可寻址存储器,被配置为响应于接收到项目的标识符和虚拟存储器块中的偏移,返回一个或多个对应的物理地址。
SIMD处理器可以被配置用于处理包括多个任务的工作组,该任务是工作组的第一接收任务,并且资源分配器被配置为保留用于工作组的足够的存储器部分以使工作组的每个任务能够接收相当于第一存储器资源的存储器资源,并且从为工作组保留的存储器部分向第一接收任务分配所请求的存储器资源。
资源分配器可以被配置为向工作组的每个任务分配虚拟存储器块,使得分配给工作组的任务的虚拟存储器块共同表示连续超块的虚拟存储器块。
资源分配器可以被配置为响应于后续接收到有关工作组的第二任务的存储器资源请求,从超块向第二任务分配连续虚拟存储器块。
根据第四方面,提供了一种向在单指令多数据(SIMD)处理器中执行的任务分配共享存储器资源的方法,该SIMD处理器包括分别被配置为处理SIMD任务的多个处理单元,该方法包括:
接收有关任务的针对第一存储器资源的存储器资源请求;
向任务分配连续虚拟存储器块;以及
将任务与共享存储器的存储器部分的多个物理地址相关联,每个存储器部分对应于虚拟存储器块的分区,所述存储器部分共同实现完整的虚拟存储器块。
该方法可以进一步包括:
后续接收有关虚拟存储器块的从任务接收的存取请求,该存取请求包括任务的标识符和虚拟存储器块中的存储区域的偏移;以及
通过存取对应于偏移所指示的虚拟存储器块的分区的存储器部分来服务存取请求。
任务可以一起集合在工作组中供在SIMD处理器处执行,任务可以是工作组的第一接收任务,向任务分配连续虚拟存储器块可以包括:
为工作组保留足够的存储器部分,供工作组的每个任务接收相当于第一存储器资源的存储器资源;以及
从为工作组保留的存储器部分中向第一接收任务分配所请求的存储器资源。
为工作组保留可以包括为工作组的每个任务保留虚拟存储器块,以使得分配给工作组的任务的虚拟存储器块共同表示连续超块的虚拟存储器块。
该方法可以进一步包括:响应于随后接收到有关工作组的第二任务的存储器资源请求,从该超块向第二任务分配连续虚拟存储器块。
存储器子系统可以被实现在集成电路上的硬件中。
提供了一种使用集成电路制造系统制造本文描述的存储器子系统的方法。
提供了一种使用集成电路制造系统制造本文描述的存储器子系统的方法,该方法包括:
使用布局处理系统处理图形处理系统的计算机可读描述,以生成实现图形处理系统的集成电路的电路布局描述;以及
使用集成电路生成系统根据电路布局描述制造图形处理系统。
提供了一种集成电路定义数据集,该集成电路定义数据集在集成电路制造系统中被处理时将该系统配置为制造本文描述的存储器子系统。
提供了一种非暂态计算机可读存储介质,其上存储有集成电路的计算机可读描述,该计算机可读描述在集成电路制造系统中被处理时使得该集成电路制造系统制造本文描述的存储器子系统。
提供了一种非暂态计算机可读存储介质,其上存储有本文描述的存储器子系统的计算机可读描述,该计算机可读描述在集成电路制造系统中被处理时使得该集成电路制造系统:
使用布局处理系统处理图形处理系统的计算机可读描述,以生成实现图形处理系统的集成电路的电路布局描述;以及
使用集成电路生成系统根据电路布局描述制造图形处理系统。
提供了一种集成电路制造系统,被配置为制造本文描述的存储器子系统。
提供了一种集成电路制造系统,包括:
非暂态计算机可读存储介质,其上存储有描述本文描述的存储器子系统的计算机可读集成电路描述;
布局处理系统,被配置为处理集成电路描述以生成实现存储器子系统的集成电路的电路布局描述;以及
集成电路生成系统,被配置为根据电路布局描述制造存储器子系统。
提供了一种存储器子系统,被配置为执行本文描述的方法。提供了一种计算机程序代码,用于执行本文描述的方法。提供了一种非暂态计算机可读存储介质,其上存储有计算机可读指令,该计算机可读指令在计算机系统处被执行时使得计算机系统执行本文描述的方法。
附图说明
参考附图,通过示例描述本发明。在附图中:
图1示出了对于在SIMD处理器处执行的任务的共享存储器的传统分配。
图2是包括根据本文描述的原理配置的资源分配器的第一存储器子系统的示意图。
图3示出了在具有多个处理核的计算机系统的上下文中的存储器子系统。
图4示出了包括按片分配给工作组的任务的块的共享存储器。
图5示出了资源分配器对作为工作组在SIMD处理器处执行的任务进行的共享存储器的分配。
图6示出了根据本文描述的特定实施例配置的资源分配器进行的共享存储器的分配。
图7是包括根据本文描述的原理配置的资源分配器的第二存储器子系统的示意图。
图8示出了虚拟存储器块及其下层的共享存储器的存储器部分之间的对应关系。
图9是示出根据本文描述的原理配置的第一存储器子系统的操作的流程图。
图10是示出根据本文描述的原理配置的第二存储器子系统的操作的流程图。
图11是集成电路制造系统的示意图。
具体实施方式
通过示例给出以下描述,以使本领域技术人员可以做出并使用本发明。本发明不限于本文描述的实施例,并且对于所公开的实施例的各种修改对于本领域技术人员来说将是显而易见的。仅通过示例描述实施例。
这里使用术语“任务”来指代一组数据项以及将对这些数据项执行的工作。例如,除了将根据程序(例如,相同序列的ALU指令或者对这些ALU指令的引用)处理的一组数据以外,任务还可以包括程序或者与程序相关联或者还可以包括对程序的引用,其中,该组数据可以包括一个或多个数据元素(或者数据项,例如,多个像素或顶点)。
这里使用术语“程序实例”来指代走过代码的个别实例。因此,程序实例指代单个数据项以及对将在数据项上执行的程序的引用(例如,指针)。因此,可以认为任务包括多个程序实例(例如,多达32个程序实例),尽管在实践中每个任务仅需要公用程序(或引用)的单个实例。共享共同目的的任务组共享本地存储器并且可以执行相同的程序(尽管它们可以执行该程序的不同部分)或者不同数据块上的兼容程序可以由群组ID连接。可以将具有相同群组ID的任务群组称为“工作组”(因此,可以将群组ID称为“工作组ID”)。因此,存在术语的层次结构,其中,任务包括多个程序实例,群组(或工作组)包括多个任务。
提供共享存储器的一些处理系统可以包括一个或多个SIMD(单指令多数据)处理器,每个SIMD处理器被配置为并行执行工作组的任务。工作组的每个任务可能需要分配共享存储器。但是,通常,在SIMD处理器处执行的任务的处理之间存在一定的相互依赖关系。例如,对于一些工作组定义了所有任务必须到达的障碍同步点,以便继续越过障碍同步点对这些任务中的任意任务进行处理并且将该工作组作为整体来完成其处理。有时可以为工作组定义一个以上障碍同步点,其中,所有任务需要到达给定障碍,以便继续越过障碍处理这些任务中的任意任务。
对于共享存储器的传统分配机制,障碍同步点的使用会导致工作组的处理死锁。这在图1的简单示例中示出,其中,图1示出了共享存储器100被划分为多个存储器部分101并且具有五个处理元件109-113的SIMD处理器102被配置为并行处理包括五个任务103-107的工作组‘A’。在该示例中,仅开启了四个任务的处理,并且所有这些任务都已经到达障碍同步点108。这是因为每个任务都需要共享存储器中的连续块的两个存储器部分(用字母‘A’标记),但是一旦为头四个任务分配了它们在共享存储器中的块,就不可能为第五个任务分配连续块的两个存储器部分。属于第二工作组的存储器部分用字母‘B’标记。共享存储器中的若干存储器部分114可用,但是这些存储器部分是碎片化的并且不能提供连续块的存储器。结果发生了死锁:四个任务103-106的处理已经停止,等待第五个任务107到达障碍同步点108,但是由于不能满足其分配共享存储器的请求,不能启动第五个任务107的处理。
这样的死锁会导致重大延迟,并且一般只有在死锁的工作组的处理达到预定超时时才能解决。这不仅浪费了等待超时所花费的时间,而且在达到障碍同步点的任务上执行了部分处理(将需要重复该处理)。死锁的情况在包括多个SIMD处理器并且所有这些SIMD处理器共享公用存储器的系统中尤其有问题,因为在可用的共享存储器有限时或者在任务需要相对较大的连续块的存储器时,每次可以锁死一个以上工作组。
避免碎片
图2是示出被配置为以解决上述问题的方式分配共享存储器的存储器子系统200的示意图。存储器子系统200包括资源分配器201和共享存储器202,共享存储器202被划分为多个存储器部分203。资源分配器可以被配置为接收来自多个请求器205的存储器请求,例如,在处理单元处运行的每个任务都可以是请求器,每个处理单元都可以是请求器,或者每个类型的处理单元都可以是请求器。不同请求器可以具有去往资源分配器的不同的硬连接输入端,分配器需要在这些硬连接输入端之间进行仲裁。资源分配器可以基于任何适当方式对来自请求器的存储器请求进行服务,例如,可以基于简单的轮询或者根据用于选择将服务的下一个请求器的一组仲裁规则来对存储器请求进行服务。在其他实施例中,可以将来自多个请求器的存储器请求聚集在请求队列处,其中,存储器分配请求被接收到请求队列中,并且资源分配器可以从请求队列接收需要服务的存储器请求。
处理单元可以通过输入/输出仲裁器204存取共享存储器的被分配部分。I/O仲裁器204在通过接口211提交存取请求(例如,读/写)的多个单元(例如,处理单元或者能够存取共享存储器的其他单元)之间仲裁对共享存储器的存取,其中,接口211可以包括一个或多个硬连接,I/O仲裁器在该一个或多个硬连接之间进行仲裁。
图3示出了在包括多个处理单元301和工作调度器302的计算机系统300的上下文中的存储器子系统200,其中,工作调度器302被配置为对其接收到的用于在处理单元进行处理的任务进行调度。一个或多个处理单元可以是SIMD处理器。计算机系统可以是例如,图形处理单元(GPU),处理单元可以包括用于执行整数运算、浮点运算、复合算术、纹理地址计算、取样操作等的一个或多个单元(均可以是SIMD处理器)。处理单元可以共同形成一组并行流水线305,其中,每个处理单元代表该组流水线中的一个流水线。计算机系统可以是例如,向量处理器。
每个处理单元可以包括一个或多个算术逻辑单元(ALU),每个SIMD处理器可以包括一个或多个不同类型的ALU,例如,每个类型的ALU被优化用于特定类型的计算。在GPU提供处理单元301的示例中,处理块104可以包括多个着色器核,每个着色器核包括一个或多个ALU。
工作调度器302可以包括调度器单元303和指令解码器304,调度器单元被配置为执行用于在处理单元301执行的任务的调度,指令解码器被配置为将任务解码为适于在处理单元301执行的形式。将明白的是,由指令解码器执行的任务的特定解码将由处理单元301的类型和配置决定。
资源分配器201可操作以接收向在计算机系统的处理单元301处执行的任务分配存储器资源的请求。每个任务或处理单元都可以是请求器205。一个或多个处理单元可以是被配置为并行执行工作组的任务的SIMD处理器。工作组的每个任务可以请求资源分配器进行存储器的分配(取决于系统的特定架构),这样的请求可以由例如,工作调度器在向并行处理器指派任务时代表任务做出或者由任务本身做出。
在一些架构中,与各种工作组有关或者用于在不同类型的处理单元执行的任务可以排队用于在一个或多个公用工作队列进行处理,从而使得作为工作组用于并行处理的任务在某时间段由工作调度器302指派给适当的处理单元。与其他工作组和/或处理单元有关的任务可以与工作组的任务穿插。对于资源分配器的存储器资源的请求一般可以针对任务作出,因为任务在处理器处被调度。任务本身可能不需要作出对于存储器资源的请求。例如,在一些架构中,工作调度器302可以代表其在处理单元调度的任务作出对于存储器资源的请求。很多其他架构是可能的。
资源分配器被配置为在第一次接收到关于工作组的任务的分配请求时,向整个工作组分配存储器资源。分配请求一般指示所需要的存储器资源的大小,例如,任务可能需要某个数目的字节或存储器部分。由于SIMD处理器在不同源数据上并行执行相同的指令,所以用于在SIMD处理器处执行的工作组的每个任务具有相同的存储器需求。资源分配器被配置为响应于其接收到的关于工作组的任务的对于存储器的第一请求,为整个工作组分配连续块的存储器。该块的大小为第一请求中请求的存储器资源的至少N倍,其中,N是工作组中的任务的数目(例如,32)。工作组中的任务的数目针对给定系统可以是固定的,因此对于资源分配器而言是提前知道的,并且工作组中的任务的数目可以与对于存储器资源的第一请求一起提供给资源分配器,和/或工作组中的任务的数目对于资源分配器可用(例如,作为资源分配器可访问的数据存储区处保持的参数)。
如果共享存储器中存在用于整块工作流的足够的连续空间,则资源分配器被配置为利用工作流的任务所请求的存储器资源来对针对用于该任务的存储器资源的第一接收请求进行响应。这使得工作组的第一任务的处理开始。资源分配器还保留该共享存储器块的剩余部分(该剩余部分将被分配给工作组的其他任务),以防止该块分配到其他工作组的任务。如果共享存储器中不存在用于整块工作流的充足的连续空间,则拒绝第一接收存储器请求。该过程确保了在工作组的第一任务一旦接收到存储器的分配的情况下,系统可以保证工作组的所有任务将接收到它们的存储器分配。这避免了上述死锁场景。
当资源分配器接收到针对用于相同工作组的后续接收到的任务的存储器资源的请求时,资源分配器从所保留的块向这些任务分配所需要的资源。资源分配器随后可以按照接收到相应存储器请求的次序,顺序地向任务分配所保留的共享存储器块的相邻“片”,其中,第一接收任务接收该块的第一片。这在图4中示出,图4示出了共享存储器202包括多个存储器部分203以及在接收到针对工作组的任务的第一存储器请求之后保留用于工作组的块402。在该示例中,每个片包括两个存储器部分。该块的第一片403被分配给第一任务,并且该块的后续片被保留在共享存储器中,以使得在接收到针对工作组的任务的下一个存储器请求时,分配下一片404,等等,直到该块的片403-407被分配给任务并且工作组可以被处理完成为止。
在工作组的任务具有期望或者预定顺序的情况下,资源分配器可以替代地根据该顺序将所保留的存储器块的存储器片分配给工作组的任务。在一些架构中,可以不按顺序接收针对任务的存储器请求。例如,即使在针对第二任务的存储器请求之前接收到了针对第三任务的存储器请求,也可以向五个任务中的三号任务分配块的第三片。这样,可以为工作组的每个任务分配保留用于工作组的块的预定片。由于第一接收任务可以不是工作组的第一任务,所以不需要将保留用于工作组的块的第一片分配给第一任务。
在一些架构中,任务可能在处理期间做出对于存储器的进一步请求。可以通过与对存储器的初始请求相同的方式来处理这些存储器请求,其中,当接收到有关工作组的第一请求时,基于用于在SIMD处理器处理的每个任务将需要相同的存储器资源,为工作组的所有任务分配一块存储器资源。所分配的块大小将是第一请求中请求的存储器资源的至少N倍,其中,N是工作组中的任务的数目。
一旦已经在处理单元处调度某项任务,则该任务可以如数据路径210所指示地存取其在共享存储器202处所分配的存储器资源(例如,通过执行读和/或写)。
资源分配器可以被配置为在处理单元处完成每个任务的处理时,立即释放共享存储器的分配给该任务的片(即,不需要等到整个工作组完成)。这确保了尽快释放不再需要的存储器部分供其他任务使用。例如,最后“片”的释放可以创建大小足够分配给接下来处理的工作组的后续连续块。
图5示出了根据本文描述的原理向任务分配共享存储器。示出了共享存储器202被划分为多个存储器部分203,SIMD处理器502具有五个处理元件503-507。与共享存储器分配的传统方式相反,该布置对应于图1所示的布置。共享存储器包括分配给工作组B的现有块的存储器部分508(在图中相应的存储器部分被标记为‘B’)。考虑接收到有关第二工作组A的任务509的第一存储器请求的点。在接收到针对任务509的存储器请求时,将块514的存储器部分(标记为‘A’)分配给共享存储器,如图所示。因此,如上所述,响应于接收到有关工作组的任务的第一存储器请求,执行针对整个工作组的该块存储器部分的分配。将块514的两个存储器部分的片515分配给第一任务。保留该块的片516-519用于工作组A的其他任务。
当接收到针对后续任务510-513的存储器请求时,可以通过向相应的任务和调度用于在SIMD处理器502执行的任务分配所保留的片516-519中的一个来服务每个存储器请求。由于提前分配了工作组所需要的所有存储器,所以最后任务513接收到了块的片519。自从所有任务接收到它们需要的存储器分配开始,所有任务的处理可以进行到障碍同步点520。一旦已经将所有任务处理到障碍520,则可以准许所有任务的处理继续完成,从而可以将工作组作为整体处理完。由于向整个块分配连续空间的方法,共享存储器对于碎片更加鲁棒,在共享存储器中连续空间更加可用,以供分配给新块。
如果没有充足的连续空间可用于整个块514,则拒绝有关工作组A的第一任务的存储器请求。可以通过各种方式来处理拒绝的存储器请求,但是一般情况下,可以等到下次资源分配器期望根据其定义的机制为相应请求器服务时再为被拒绝的存储器请求服务(例如,基于轮询或者根据用于请求器之间的仲裁的一组规则)。一旦充足的存储器变得可用,后续的存储器分配请求就可以成功(例如,通过在其他处理单元完成任务以及对应的存储器部分被释放)。
资源分配器可以保持识别已经为哪个工作组分配存储器块的数据结构206。例如,在为工作组保留存储器块时,资源分配器可以向将存储器块与工作组相关联的数据结构添加条目,从而使得后续接收到该工作组的任务时,任务分配器可以识别哪个块的存储器片将被分配。类似地,资源分配器可以使用数据结构206来识别哪些任务不属于已经分配有存储器块的工作组,从而识别将为其执行新块分配的任务。数据结构206可以具有任何适当的配置,例如,它可以是简单的查找表或者寄存器。
为了向工作组的后续接收到的任务分配预留块的片,资源分配器需要知道其接收到的存储器请求属于哪个工作组。存储器请求可以包括相应任务所属于的工作组的标识符,以允许资源分配器识别属于已经为其保留块的工作组的存储器请求。替代地,资源分配器可以存取识别哪些任务属于哪些工作组的数据存储区(例如,工作调度器302保存的查找表)。一般,存储器请求将识别有关其的存储器请求正在做出的任务,并且这样的任务标识符可以被用来在数据存储区中查找相应的工作组。
可以优选地优先处理有关已经分配有存储器块的工作组接收到的存储器请求。这有助于通过确保一旦已经为工作组分配存储器并且在系统中保留了用于将该工作组处理完成的资源,工作组的所有任务就能够尽快开始处理并且达到工作组的任何定义的障碍同步点来最小化系统中的延迟。换言之,确保在为任务预留存储器作为用于工作组的块之后可以尽快向任务分配存储器,有助于避免随后被分配以它们的存储器片的任务拖延工作组中已经分配有其他片并且准备好开始处理的其他任务的处理。
可以实现用于优先处理存储器请求的任何适当机构。例如,资源分配器可以被配置为优先处理来自从其接收到初始请求的相同请求器205的请求,其中,该初始请求导致块被分配。可以通过增大请求器的存储器请求被处理的频率来使得该请求器相比其他请求器优先。可以通过在分配块以后重复处理从同一请求器接收到的存储器请求直到接收到有关属于不同工作组的任务的存储器请求为止来使请求器优先。资源分配器可以使用上述数据结构206来识别哪个存储器请求对应于已经保留有存储器块的工作组从而识别应该优先处理哪个存储器请求。
注意,在本文描述的系统的一些实施方式中,资源分配器接收到的存储器请求所针对的一些任务将不属于工作组。例如,图3中用于处理任务的一个或多个处理单元301可以不是SIMD处理器。资源分配器可以被配置为在其接收到的存储器请求中识别不属于来自一个或多个标识符的工作组的任务,或者识别一个或多个标识符的缺乏(例如,没有工作组标识符)。替代地或者另外,资源分配器可以通过在识别哪个任务属于哪个工作组的数据存储区(例如,工作调度器302保存的查找表)中查找在存储器请求中接收到的标识符,来确定接收到的存储器请求是否是针对不属于工作组的任务作出的。
现在将描述在资源分配器201处分配存储器部分的方法。
资源分配器可以被配置为进一步将共享存储器202划分为多个非重叠窗口,每个非重叠窗口包括多个存储器部分。每个窗口的长度可以是2的幂,以使能资源分配器在二进制逻辑电路的高效实现。窗口可以全部是相同长度的。资源分配器可以保持指示哪些存储器部分被分配以及哪些存储器部分没有分配的细状态数组207,例如,细状态数组可以包括一维比特数组,其中的每个比特对应于共享存储器的一个存储器部分并且每个比特的值指示相应的存储器部分是否被分配(例如,‘1’指示部分被分配;‘0’指示部分没有被分配)。可以选择每个窗口的大小,使得资源分配器能够在实现资源分配器的数字硬件的单个时钟周期中在窗口中搜索足够包含给定大小的连续块的未分配存储器部分。一般,共享存储器202的大小对于资源分配器来说太大,以致于资源分配器不能在一个时钟周期中搜索整个存储器空间。
资源分配器可以保持窗口指针208(例如,资源分配器内部的寄存器),该窗口指针识别资源分配器在接收到针对尚未分配存储器的工作组的第一存储器请求时,将在共享存储器的哪个窗口中开启新存储器分配。在接收到针对工作组的第一任务的存储器请求时,资源分配器在当前窗口中检查将为工作组保留的连续存储器块可以适配的位置。这称为“精细检查(fine check)”。资源分配器使用细状态数组207识别未分配的存储器部分。资源分配器可以在当前窗口的最低位置开始并在增大存储器地址的方向扫描,以识别块的最低可能开始位置并且最小化共享存储器的碎片化。可以使用用于识别能够提供该存储器块的连续组的存储器部分的任何适当的算法。
当向工作组分配块时,更新细状态数组以将该块的所有相应的存储器部分标记为已分配。这样,可以保留该块供该工作组的任务使用。
资源分配器还可以保持粗状态数组209,该粗状态数组指示共享存储器的每个窗口是否完全没有被分配,换言之,窗口的所有存储器部分是否没有被分配。粗状态数组可以是一维比特数组,其中的每个比特对应于共享存储器的一个窗口,并且每个比特的值指示相应窗口是否完全被分配。粗状态数组中的窗口的比特值可以计算为该状态数组中对应于位于该窗口中的存储器部分的所有比特的OR减少。
资源分配器可以被配置为结合精细检查执行粗略检查。粗略检查包括从粗状态数组209识别在窗口指针208指示的当前窗口后面的接下来的一个或多个窗口是否可以提供工作组所需要的新存储器块,即,如果粗状态数组209指示下一个窗口完全没有被分配,则所有这些存储器部分可以被该块使用。可以检查当前窗口后面的一个或多个窗口,因为在一些系统中所需要的块有可能超过窗口的大小。
资源分配器可以被配置为使用如下的精细检查和粗略检查向工作组分配共享存储器块:
1.如果对用于分配给工作组的存储器块的精细检查成功并且该存储器块可以在当前窗口中提供,则保留该存储器块供该工作组使用(例如,通过在细状态数组中将相应的存储器部分标记为已分配并且将工作组添加到数据结构206)并且向有关其的存储器请求被做出的任务分配该存储器块的片(例如,第一片)。如果存储器的粗略检查指示共享存储器的当前窗口完全没有被分配,则可以更新粗状态数组以指示当前窗口现在不再是完全未分配的。
2.如果对用于分配给工作组的存储器块的精细检查不成功但是存储器的粗略检查成功,则该存储器块可以由当前窗口后面的一个或多个未分配窗口提供,该存储器块被保留用于该工作组。可以从与接下来的窗口形成连续分区的未分配存储器部分的第一未分配存储器部分开始分配该存储器块。所分配的存储器块延伸到被标识为粗略检查可用的一个或多个接下来的窗口中。
如果精细检查和粗略检查二者都失败了,则可以推迟存储器请求并随后再次尝试存储器请求(可能在下一个时钟周期上或者在经过预定数目的时钟周期以后)。资源分配器可以在返回失败的存储器请求之前服务其他存储器请求(例如,资源分配器可以根据所定义的用于在请求器之间进行仲裁的一些规则移向服务来自下一个请求器的存储器请求)。
图6示出了根据上述方法的示例分配,其中,共享存储器被划分为128个存储器部分以及分别包括32个存储器部分的4个窗口。细状态数组207中的‘1’比特601指示头24个存储器部分被分配给工作组,但是所有的更高的存储器部分未分配。粗状态数组指示仅第一窗口包括所分配的存储器部分(参见对应于第一窗口的‘1’比特602)。在该示例中,工作组需要存储器603的48存储器部分块。资源分配器可以在接收到有关工作组的第一任务的对于3个存储器部分的存储器请求时确定需要这样的块:已知已经从作为用于处理16个任务的工作组的SIMD处理器的请求器接收到存储器请求,并且资源分配器确定工作组作为整体需要48个存储器部分。
假定资源分配器的窗口指针指示的当前窗口是第一窗口‘0’(有可能是因为所分配的存储器部分之后的第一个未分配存储器部分是存储器部分24)。当前窗口的精细检查将因为第一窗口‘0’中没有剩余48个存储器部分而失败。但是,粗略检查将因为第二和第三窗口被粗状态数组209指示为完全没有被分配而成功。因此,将分配从第一窗口的存储器部分24开始直到第三窗口的存储器部分71的块48。可以更新窗口指针以将第三窗口识别为当前窗口,因为下一个可用的未分配存储器部分是数字72。
资源分配器可以被配置为与精细检查和粗略检查并行地计算溢出度量。溢出度量由工作组需要的存储器块的数目减去当前窗口顶部未分配的存储器部分的数目给出,以便在从当前窗口顶部的连续块的未分配存储器的最低存储器部分开始分配该块的情况下给出将溢出当前窗口的存储器部分的数目的度量。
资源分配器可以被配置为在上述步骤1和2之后的附加步骤中使用溢出度量来尝试向工作流分配存储器块:
3.如果精细检查和粗略检查失败但是当前窗口的顶部仍有一些空闲的存储器部分,则使用溢出度量作为所请求的大小,从共享存储器的接下来的窗口的最低地址开始,在下一个时机(例如,下一个时钟周期)做出分配该存储器块的新尝试。对于初次分配尝试,可以执行如上所述的精细检查和粗略检查。该另外的新尝试是有利的,因为尽管接下来的窗口上的粗略检查失败了,但是接下来的窗口的较低分区和当前窗口的空闲存储器部分足以提供足够的连续的未分配空间来接收该存储器块。
如果步骤3失败,则可以推迟存储器请求并且随后再如上所述地尝试存储器请求。
一旦成功分配,资源分配器就在成功分配存储器部分块结束之后立即更新到包含该存储器部分的窗口的窗口指针(这可以是当前窗口或接下来的窗口)。
使用并行执行的精细检查和粗略检查(可选地,结合使用与精细检查和粗略检查并行执行的溢出度量),使得资源分配器能够在最小数目的时钟周期内高效地尝试向工作组分配共享存储器。在适当硬件上,上述方法可以使块分配在两个时钟周期内执行(在第一时钟周期内,执行精细检查和粗略检查并且可选地计算溢出度量;在第二时钟周期内,尝试根据以上步骤1-2以及可选的步骤3进行分配)。
图9示出了示出资源分配器分配共享存储器的流程图。资源分配器接收有关工作组的第一任务(即,已经接收到针对其的共享存储器请求的工作组的任务中的第一任务)的共享存储器资源请求901。作为响应,向工作组分配共享存储器块,该共享存储器块的大小足够向工作组的所有任务提供第一任务所请求的资源。一般,该共享存储器块将是连续共享存储器块。为第一任务分配共享存储器块的一部分903,该步骤可以或者不可以被认为是对工作组的存储器分配的一部分902,因此可以在向工作组分配存储器资源之前、同时、之后执行。在一些实施方式中,可以保留剩余部分的共享存储器用于工作组的其他任务。
当接收到用于相同工作组的另一任务的后续共享存储器请求904时,向该任务分配被分配给工作组的共享存储器块的一部分905。在一些实施方式中,可以响应于接收到来自工作组的任务的第一存储器请求901,为所有任务执行共享存储器的分配。在这样的实施方式中,进一步的分配可以包括通过向响应于有关工作组的第一接收存储器请求建立的任务分配存储器资源进行响应。
重复来自块的存储器资源的分配907,直到工作组的所有任务都已经接收到所需要的存储器资源为止。然后,可以执行工作组的执行906,其中每个任务使用分配给工作组的块中分配给该任务的共享存储器资源。
碎片不敏感
现在将描述同样解决了用于分配共享存储器的现有技术的系统的上述限制的存储器子系统的第二配置。
图7示出了包括资源分配器701、共享存储器702、输入/输出仲裁器703、以及转换单元704的存储器子系统700。共享存储器被划分为多个存储器部分705。资源分配器可以被配置为接收来自多个请求器205的存储器请求,例如,在处理单元运行的每个任务可以是请求器,每个处理单元可以是请求器,或者每个类型的处理单元可以是请求器。不同请求器可以具有到资源分配器的不同硬连线输入端,资源分配器需要在这些硬连线输入端之间进行仲裁。资源分配器可以在任何基础上服务来自请求器的存储器请求,例如,可以基于简单的轮询或者根据用于选择将要服务的下一个请求器的一组仲裁规则来服务存储器请求。在其他实施例中,来自多个请求器的存储器请求可以聚集在请求队列处,存储器分配请求可以接收到该请求队列中并且资源分配器可以从该请求队列接收待服务的存储器请求。共享存储器的分配部分可以由处理单元利用输入/输出仲裁器703存取。
存储器子系统700可以按照图3所示以及以上所述的方式被布置在计算机系统中。
在本配置中,资源分配器被配置为使用转换单元704向任务分配共享存储器702,并且输入/输出仲裁器703被配置为利用转换单元704存取共享存储器702。转换单元704被配置为将有关接收到的存储器请求的每个任务与共享存储器的多个存储器部分705相关联。每个任务一般具有在关于该任务做出的存储器请求中提供的标识符。与任务相关联的多个存储器部分不需要是共享存储器中的连续部分。但是,从任务的角度看,任务将接收到连续存储器块的分配。在相同的任务实际在转换单元处与潜在的非连续集合的存储器部分相关联时,这可以由被配置为向任务分配连续的虚拟存储器块的资源分配器实现。
在任务存取分配给它的存储器区域(例如,通过读或写操作)时,转换单元704被配置为在任务所提供的逻辑地址和保存其数据或者其数据将被写到的物理地址之间转换。注意,由资源分配器提供给任务的虚拟地址不需要属于恒定的虚拟地址空间,并且在一些示例中,虚拟地址将对应于共享存储器处的物理地址。任务使用的逻辑地址相对于虚拟块中的预定位置(一般是块的起始位置)的一些基址(其本身可以是0偏移或者一些其他预定值)存在偏移是有利的。由于虚拟块是连续的,所以只有需要存取的块中的数据的相对位置需要被提供给转换单元。共享存储器中组成任务的虚拟块的特定集合的存储器部分可以由转换单元根据数据存储区706中的任务标识符与存储器部分的关联关系来确定。
响应于接收到对于存储器资源的请求,资源分配器被配置为向任务分配足够满足请求的一组存储器部分。存储器部分不需要是连续的或者顺序存储在共享存储器中。资源分配器被配置为促使转换单元将任务与该组存储器部分中的每个存储器部分相关联。资源分配器可以利用指示哪些存储器部分可用的数据结构707来追踪共享存储器处未分配的存储器部分。例如,该数据结构可以是其比特识别共享存储器处的每个存储器部分是否被分配的状态数组(例如,上述细状态数组)。
转换单元可以包括数据存储区706,并且可以被配置为通过在数据存储区中相对应地存储任务的标识符(例如,task_id)和一组存储器部分中的每个存储器部分的物理地址、以及有关分配给任务的每个存储器部分对应于连续虚拟存储器块的哪个分区的指示(例如,虚拟存储器块中的分区的偏移或者分区的逻辑地址)来将任务与一组存储器部分相关联。这样,转换单元可以响应于任务提供其标识符以及有关其需要其虚拟存储器块的哪个分区的指示(例如,其虚拟块中的偏移),向任务返回适当的物理地址。偏移可以是存储器区域相对于基址的存储器部分的数目(例如,在存储器部分是基本分配间隔的情况下)、字节或比特的数目、或者任何其他位置指示。基址可以是但是不必须是虚拟存储器块开始的存储器地址;基址可以是零偏移。数据存储区可以是关联存储器(例如,内容可寻址存储器),其输入可以是任务标识符和其块中的所需要的存储器分区的指示(例如,相对于其块的基址的存储器偏移)。
更一般而言,可以在沿资源分配器701和共享存储器702之间、以及I/O仲裁器703和共享存储器702之间的数据路径的任意适当点提供转换单元。可以提供一个以上转换单元。多个转换单元可以共享诸如内容可寻址存储器的公用数据存储区。
资源分配器可以被配置为向工作组的不同任务分配逻辑基址,以识别分配给工作组的每个任务的、存在于用于作为整体的工作组的连续虚拟存储器超块中的连续虚拟存储器块。
图8示出了共享存储器702的分配给任务的存储器部分805与分配给任务的虚拟块801之间的对应关系。共享存储器的被标记为A-F的存储器部分805为虚拟连续存储器块801的分区806提供下层存储区域。存储器块A-F是不连续的或者被顺序存储在共享存储器中,并且位于分配给其他任务的存储器部分804中间。虚拟块801具有基址802,并且可以通过该块中的分区相对于基址的偏移803来识别这些分区。
在一个示例中,响应于接收到对于存储器资源的请求,资源分配器被配置为向任务分配从对应于该块的第一分区的存储器部分的物理地址开始的连续范围的存储器地址。换言之,虚拟块的基址802(以及图8中的分区‘A’或809的基址)是图8中的存储器部分‘A’或808的物理地址。假定共享存储器中存在足够的未分配的存储器部分服务存储器请求,则资源分配器向任务分配从存储器分区809的物理存储器地址开始的所请求的大小的虚拟存储器块。因此,从任务的角度看,其被分配以共享存储器中从存储器部分808开始的六个存储器部分的连续块;实际上,任务被分配以共享存储器702中标记为A、B、C、D、E、和F的六个非连续的存储器部分。因此,对于任务的存储器部分的实际分配由其接收到的虚拟块801标记。在该示例中,虚拟块具有物理地址并且不存在这样的虚拟地址空间。
一旦已经为任务分配虚拟存储器块,其就可以利用I/O仲裁器703来访问该存储器,其中,I/O仲裁器一般在通过接口708(该接口可以包括一个或多个硬线连接,I/O仲裁器在这些硬线连接之间进行仲裁)提交存取请求(例如,读/写)的多个单元(例如,处理单元或者能够存取共享存储器的其他单元)之间仲裁对于共享存储器的存取。
继续以上示例,考虑任务请求存取位于分区‘D’中的块801的区域。任务可以向I/O仲裁器703提交包括其任务标识符(例如,task_id)和其需要存取的块的区域的指示的请求。该指示可以是例如,相对于基址802的偏移803(例如,比特、字节、存储器部分单元的数目),或者基于分配给工作的物理基址802以及所请求的存储器区域被找到的块中的偏移803形成的物理地址。转换单元将在数据存储区706中查找工作单元标识符和期望偏移/地址,以识别标识共享存储器702中的存储器部分811的对应物理地址。转关单元将服务来自共享存储器中的存储器部分811的存取请求。在块中的存储器区域跨越一个以上存储器分区的情况下,数据存储区将为相应的数据部分返回一个以上物理地址。
在任务提供存储区域的物理地址的实施方式中,所提交的物理地址在这种情况下是指分配给另一任务的存储器部分810中的存储区域。因此,不同任务在表面上可以存取共享存储器中的重叠块。但是,由于转换单元704对每个存取请求进行转换,所以由任务提交的对于物理地址的存取被转换单元重定向到正确的存储器部分(在该示例中是811)。因此,在这种情况下,引用虚拟存储器块的逻辑地址实际上是物理地址,但不一定是块的相应数据被保存在共享存储器中的物理地址。
在第二示例中,响应于接收到对于存储器资源的请求,资源分配器被配置为向任务分配从逻辑基址开始并表示虚拟存储器块的连续范围的逻辑存储器地址。可以通过任意合适的方式分配逻辑地址,因为给定的逻辑地址将被映射到对应的下层存储器部分的物理地址。例如,可以向任务分配在任务之间保持一致的虚拟地址空间中的逻辑地址,以使分配给不同任务的虚拟块不共享重叠的逻辑地址范围;可以向任务分配一组逻辑地址中的逻辑基址以及被用来指代虚拟块中的位置的相对于基址的偏移;或者可以分配作为零偏移的逻辑基址。
转换单元响应于经由I/O仲裁器703从任务接收的存取请求(例如,读/写)。每个存取请求可以包括任务的标识符以及标识其需要存取的虚拟块的区域的偏移或逻辑地址。在经由I/O仲裁器703从任务接收到存取请求时,转换单元被配置为基于工作单元的标识符和偏移/逻辑地址识别数据结构中的期望物理地址。偏移/逻辑地址被用来识别与任务相关联的哪些存储器部分将被存取。
例如,再次考虑任务请求存取图8所示的虚拟块801的分区‘D’中的存储区域的情况。转换单元将从任务接收包括任务的标识符、以及指向分区‘D’中的位置的偏移803的存取请求。使用任务的标识符和偏移,转换单元在数据存储区706查找共享存储器中的对应存储器部分811的物理地址(即,数据存储区中与该任务和偏移相关联的物理地址)。转换单元然后可以继续在对应的存储器部分811服务存取请求(例如,通过执行所请求的从/到存储器部分811的读/写)。
将明白的是,本文描述的“碎片不敏感”方法允许下层的共享存储器702变得碎片化,而任务本身接收连续存储器块。在共享存储器处有足够数目的存储器部分的情况下,这使得即使在共享存储器中没有足够的连续空间以分配所需要的大小的连续块的存储器部分时,存储器块也能够被分配给任务和包括多个任务的工作组。
图10示出了示出资源分配器向任务分配存储器资源的流程图。在接收到有关任务的共享存储器资源请求1001时,为任务分配连续块的虚拟存储器1002。将虚拟存储器块与共享存储器的物理存储器地址相关联1003,从而使得虚拟块的每个部分对应于物理共享存储器的下层部分。一旦任务接收到其分配的虚拟存储器,可以在SIMD处理器执行任务1004,其中,任务使用对应于其所分配的虚拟存储器块的物理地址处的下层共享存储器资源。图2、3、7的存储器子系统被示出为包括多个功能块。这只是示意性的并且不希望限定这些实体的不同逻辑元件之间的严格划分。可以通过任意合适的方式提供每个功能块。将理解的是,本文描述的由每个功能块形成的中间值不需要由功能块在任意时间物理生成,而可以仅表示在传统上描述功能块在其输入和输出之间执行的处理的逻辑值。
这里描述的存储器子系统可以实现在集成电路上的硬件中。本文描述的存储器子系统可以被配置为执行本文描述的任意方法。一般,以上描述的任意功能、方法、技术、或者组件可以实现在软件、固件、硬件(例如,固定逻辑电路)、或者它们的任意组合中。这里可以使用术语“模块”、“功能”、“组件”、“元件”、“单元”、“块”、以及“逻辑”来一般地表示软件、固件、硬件、或者它们的任意组合。在软件实现的情况中,模块、功能、组件、元件、单元、块、或者逻辑表示在处理器上被执行时执行指定任务的程序代码。本文描述的算法和方法可以由执行代码的一个或多个处理器执行,该代码使得该一个或多个处理器执行该算法/方法。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器、以及可以使用磁、光、或者其他技术来存储指令或者可以被机器存取的其他数据的其他存储器设备。
这里使用术语“计算机程序代码”和“计算机可读指令”来指代用于处理器的任意种类的可执行代码,包括利用机器语言、解释语言、或者脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(例如,硬件描述语言或者网络列表)、以及利用编程语言代码(例如,C、Java、或者OpenCL)表达的代码。可执行代码可以是例如,任何种类的软件、硬件、脚本、模块、或者程序库,该可执行代码在虚拟机或其他软件环境被适当地执行、处理、解释、汇编、执行时使得支持可执行代码的计算机系统的处理器执行该代码指定的任务。
处理器、计算机、或者计算机系统可以是具有处理能力从而使得其能够执行指令的任何种类的设备、机器、或者专用电路、或者它们的集合或部分。处理器可以是任意种类的通用或专用处理器,例如,CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可以包括一个或多个处理器。
还希望覆盖定义本文描述的硬件配置的软件,例如,用于设计集成电路或者用于配置可编程芯片以实现期望功能的HDL(硬件描述语言)软件。即,可以提供其上编码有集成电路定义数据集形式的计算机可读程序代码的计算机可读存储介质,该计算机可读程序代码在集成电路制造系统中被处理时将该系统配置为制造被配置为执行这里描述的任意方法的存储器子系统,或者制造包括本文描述的任意装置的存储器子系统。集成电路定义数据集可以是例如,集成电路描述。
提供了一种在集成电路制造系统制造本文描述的存储器子系统的方法。可以提供一种集成电路定义数据集,该集成电路定义数据集在被集成电路制造系统处理时,使得制造存储器子系统的方法被执行。
集成电路定义数据集可以是计算机代码的形式,例如,作为网络列表、用于配置可编程芯片的代码,作为在任意等级定义集成电路的硬件描述语言(包括寄存器传送级(RTL)代码),作为高级电路表示(例如,Verilog或者VHDL),以及作为低级电路表示(例如,OASIS(RTM)和GDSII)。可以在被配置用于在软件环境的上下文中生成集成电路的制造定义的计算机系统处理在逻辑上定义集成电路的较高级表示(例如,RTL),其中该制造定义包括电路元件的定义和用于接合这些元件的规则,以生成表示所定义的集成电路的制造定义。在计算机系统执行软件以定义机器的一般情况中,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以使被配置用于生成集成电路的制造定义的计算机系统执行定义集成电路的执行代码从而生成该集成电路的制造定义。
现在参考图11,描述在集成电路制造系统处理集成电路定义数据集,以配置该系统制造存储器子系统的示例。
图11示出了可以被配置为制造本文中的任意示例中描述的存储器子系统的集成电路(IC)制造系统1102的示例。具体地,IC制造系统1102包括布局处理系统1104和集成电路生成系统1106。IC制造系统1102被配置为接收IC定义数据集(例如,定义在本文的任意示例中描述的存储器子系统),处理IC定义数据集,并且根据IC定义数据集(例如,体现本文的任意示例中描述的存储器子系统的IC定义数据集)生成IC。IC定义数据集的处理将IC制造系统1102配置为制造体现本文中的任意示例描述的存储器子系统的集成电路。
布局处理系统1104被配置为接收并处理IC定义数据集,以确定电路布局。根据IC定义数据集确定电路布局的方法是本领域已知的,例如,可以包括综合RTL代码来确定将要生成的电路的门级表示(例如,在逻辑组件(例如,NAND、NOR、AND、OR、MUX、以及FLIP-FLOP组件)方面)。可以通过确定逻辑组件的位置信息,从电路的门级表示确定电路布局。这可以自动或者在用户的控制下实现,以优化电路布局。当布局处理系统1104已经确定电路布局时,其可以向IC生成系统1106输出电路布局定义。电路布局定义可以是例如,电路布局描述。
IC生成系统1106根据电路布局定义生成IC,如本领域已知的。例如,IC生成系统1106可以执行半导体器件装配处理来生成IC,该半导体器件装配处理可以包括多步骤顺序的光刻处理以及化学处理不走,在这些化学处理步骤期间电子电路逐渐形成在由半导体材料制成的晶片上。电路布局定义可以是掩模形式的,该掩模可以用在根据电路定义生成IC的光刻处理中。替代地,提供给IC生成系统1106的电路布局定义可以是计算机可读代码形式的,IC生成系统1106可以使用计算机可读代码来形成用于生成IC的适当掩模。
可以由IC制造系统1102执行的不同处理可以全部在一个位置,例如,由一方实现。替代地,IC制造系统1102可以是分布式系统,因此一些处理可以在不同位置执行,并且可以由不同方执行。例如,以下阶段中的一些阶段可以在不同位置和/或由不同方执行:(i)综合表示IC定义数据集的RTL代码以形成将要生成的电路的门级表示,(ii)基于门级表示生成电路布局,(iii)根据电路布局形成掩模,以及(iv)使用掩模装配集成电路。
在其他示例中,集成电路制造系统处的集成电路定义数据集的处理可以将系统配置为制造存储器子系统,而不对IC定义数据集进行处理以便确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器(例如FPGA)的配置,并且该数据集的处理可以配置IC制造系统以生成具有该定义的配置的可重新配置的处理器(例如,通过将配置数据加载到FPGA)。
在一些实施例中,集成电路制造定义数据集在集成电路制造系统中被处理时,可以使得集成电路制造系统生成本文描述的设备。例如,通过集成电路制造定义数据集以针对图11描述的方式对集成电路制造系统的配置可以使本文描述的设备被制造出来。
在一些示例中,集成电路定义数据集可以包括在该数据集处定义的硬件上运行的软件或者与在该数据集处定义的硬件接合。在图11所示的示例中,可以通过集成电路定义数据集进一步将IC生成系统配置为在制造集成电路时,根据集成电路定义数据集处定义的程序代码将硬件加载到集成电路中或者向集成电路提供程序代码供集成电路使用。
本文描述的图形处理系统可以实现在集成电路上的硬件中。本文描述的图形处理系统可以被配置为执行本文描述的任何方法。
本申请中阐述的概念在设备、装置、模块、和/或系统(以及在这里实现的方法)中的实施方式相比已知的实施方式可以产生性能改进。性能改进可以包括计算性能增加、延迟减小、吞吐量增加、和/或功耗减少中的一项或多项。在(例如,集成电路中)制造这些设备、装置、模块、和系统期间,可以在性能改进和物理实现之间进行平衡,从而改善制造方法。例如,可以在性能改进和布局区域之间进行平衡,从而匹配已知实施方式的性能但使用更少的硅。这可以通过例如,以连续方式重复使用功能块或者在设备、装置、模块、和/或系统的元件之间共享功能块来实现。相反,导致设备、装置、模块、以及系统的物理实现的改进(例如,硅面积减小)的本申请的概念可以换取改进性能。这可以通过例如,在预定区域预算中制造模块的多个实例来实现。
申请人单独公开了这里描述的每个单独特征、以及两个以上这样的特征的任意组合,以使得能够根据本领域技术人员的公知常识基于说明书实施这些特征或组合,而不管这些特征或特征组合是否解决了本文公开的任何问题。鉴于以上描述,对于本领域技术人员显而易见的是,可以在本发明的范围内做出各种修改。
Claims (20)
1.一种存储器子系统,用于单指令多数据(SIMD)处理器,该SIMD处理器包括被配置用于处理分别包括多个SIMD任务的一个或多个工作组的多个处理单元,所述存储器子系统包括:
共享存储器,被划分为用于分配给将由所述处理器处理的任务的多个存储器部分;以及
资源分配器,被配置为响应于接收到有关工作组的第一接收任务的针对第一存储器资源的存储器资源请求,向所述工作组分配一块存储器部分,所述一块存储器部分的大小足够所述工作组的每个任务接收所述一块存储器部分中相当于所述第一存储器资源的存储器资源。
2.如权利要求1所述的存储器子系统,其中,所述资源分配器被配置为执行以下处理中的至少一项:
分配作为连续块的存储器部分的所述一块存储器部分;
在服务所述工作组的所述第一接收任务时,从所述一块存储器部分向该任务分配所请求的第一存储器资源,并保留所述一块存储器部分的剩余存储器部分以防止分配给其他工作组的任务;以及
响应于后续接收到有关所述工作组的第二任务的存储器资源请求,向所述第二任务分配所述一块存储器部分的存储器资源。
3.如权利要求1或2所述的存储器子系统,其中,所述资源分配器被配置为接收来自多个不同请求器的存储器资源请求,响应于向所述工作组分配所述一块存储器部分而优先服务从以下请求器接收的存储器请求,其中,所述工作组的所述第一接收任务是从该请求器接收的。
4.如权利要求1或2所述的存储器子系统,其中,所述资源分配器还被配置为响应于接收到所述工作组的任务的处理已经完成的指示,释放分配给该任务的存储器资源而无需等待所述工作组的处理完成。
5.如权利要求1或2所述的存储器子系统,其中,所述共享存储器进一步被划分为多个非重叠窗口,其中,每个非重叠窗口包括多个存储器部分,并且所述资源分配器被配置为保持指示当前窗口的窗口指针,在该当前窗口中将响应于下一个接收到的存储器请求而尝试进行存储器部分的分配。
6.如权利要求5所述的存储器子系统,其中,所述资源分配器被实现在二进制逻辑电路中,并且所述窗口长度为能够在所述二进制逻辑电路的单个时钟周期中检查每个窗口的所有存储器部分的可用性。
7.如权利要求1或2所述的存储器子系统,其中,所述资源分配器进一步被配置为保持细状态数组,该细状态数组被布置为指示所述共享存储器的每个存储器部分是否被分配给任务。
8.如权利要求7所述的存储器子系统,其中,所述资源分配器被配置为响应于接收到有关所述工作组的所述第一接收任务的存储器资源请求,在所述当前窗口中搜索被所述细状态数组指示为可用于分配的连续块的存储器部分,所述资源分配器被配置为在所述当前窗口中识别出这样的连续块的情况下将该连续块分配给所述工作组。
9.如权利要求8所述的存储器子系统,其中,所述资源分配器被配置为分配所述连续块的存储器部分,使得该块开始于所述窗口的最低可能位置。
10.如权利要求7所述的存储器子系统,其中,所述资源分配器进一步被配置为保持粗状态数组,该粗状态数组被布置为针对所述共享存储器的每个窗口,指示该窗口的所有存储器部分是否是未分配的,并且所述资源分配器被配置为与在所述当前窗口中搜索连续块的存储器部分相并行地检查所述粗状态数组,以确定所请求的块的大小是否能够由一个或多个后续窗口提供;所述资源分配器被配置为如果在所述当前窗口中不能识别出足够大的连续块且所请求的块能够由一个或多个后续窗口提供,则将包括从与所述一个或多个后续窗口在连续块中的所述当前窗口的所述第一存储器部分开始、且延伸到所述一个或多个后续窗口的存储器部分的块分配给所述工作组。
11.如权利要求10所述的存储器子系统,其中,所述资源分配器进一步被配置为与搜索所述当前窗口相并行地形成溢出度量,该溢出度量表示在紧邻所述后续窗口的连续块的未分配存储器部分中不能从所述当前窗口的所述第一存储器部分开始在所述当前窗口中提供的所需要的块的存储器部分的存储器资源,所述资源分配器被配置为如果不能在所述当前窗口中识别出足够大的连续块且所请求的块不能由一个或多个后续窗口提供,则接下来通过在所述后续窗口中从所述后续窗口的第一存储器部分开始搜索总大小足够提供所述溢出度量的连续块的未分配存储器部分来尝试向所述工作组分配一块存储器部分。
12.如权利要求7所述的存储器子系统,其中,所述细状态数组是其中的每个比特对应于所述共享存储器的一个存储器部分且每个比特的值指示对应的存储器部分是否被分配的比特数组。
13.如权利要求10所述的存储器子系统,其中,所述粗状态数组是其中的每个比特对应于所述共享存储器的一个窗口且每个比特的值指示相应的窗口是否被完全分配的比特数组。
14.如权利要求12所述的存储器子系统,其中,所述粗状态数组是其中的每个比特对应于所述共享存储器的一个窗口且每个比特的值指示相应的窗口是否被完全分配的比特数组,并且其中,所述资源分配器被配置为通过以下处理形成所述粗状态数组的每个比特:对所述细状态数组的对应于位于与所述粗状态数组的该比特相对应的窗口中的存储器部分的所有比特执行OR减少。
15.如权利要求6所述的存储器子系统,其中,所述窗口长度是2的幂。
16.如权利要求1或2所述的存储器子系统,其中,所述资源分配器可以保持识别所述一个或多个工作组中的哪些工作组当前被分配以一块存储器部分的数据结构。
17.一种向用于在单指令多数据(SIMD)处理器中执行的任务分配共享存储器资源的方法,该SIMD处理器包括分别被配置用于处理一个或多个工作组的多个处理单元,所述一个或多个工作组中的每个工作组包括多个SIMD任务,该方法包括:
接收有关工作组的第一接收任务的针对第一存储器资源的共享存储器资源请求;以及
向所述工作组分配共享存储器的一块存储器部分,所述一块存储器部分的大小足够所述工作组中的每个任务接收所述一块存储器部分中相当于所述第一存储器资源的存储器资源。
18.一种非暂态计算机可读存储介质,其上存储有集成电路的计算机可读描述,该计算机可读描述在集成电路制造系统中被处理时使得所述集成电路制造系统制造权利要求1的存储器子系统。
19.一种集成电路制造系统,包括:
非暂态计算机可读存储介质,其上存储有描述权利要求1的存储器子系统的计算机可读集成电路描述;
布局处理系统,被配置为处理所述集成电路描述,以生成实现所述存储器系统的集成电路的电路布局描述;以及
集成电路生成系统,被配置为根据所述电路布局描述制造所述存储器子系统。
20.一种非暂态计算机可读存储介质,其上存储有计算机可读指令,所述计算机可读指令在计算机系统处被执行使得所述计算机系统执行权利要求17所述的方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1714922.0 | 2017-09-15 | ||
GB1714922.0A GB2566514B (en) | 2017-09-15 | 2017-09-15 | Resource allocation |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109656710A true CN109656710A (zh) | 2019-04-19 |
Family
ID=60159415
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811083351.8A Pending CN109656710A (zh) | 2017-09-15 | 2018-09-17 | 资源分配 |
Country Status (4)
Country | Link |
---|---|
US (3) | US10990448B2 (zh) |
EP (2) | EP3457280B1 (zh) |
CN (1) | CN109656710A (zh) |
GB (1) | GB2566514B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021169496A1 (zh) * | 2020-02-28 | 2021-09-02 | 平安科技(深圳)有限公司 | 数据读取方法、装置、设备及存储介质 |
CN114925139A (zh) * | 2022-07-21 | 2022-08-19 | 沐曦科技(成都)有限公司 | 分级同步数据链的方法、装置及电子设备 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10990387B2 (en) * | 2019-02-27 | 2021-04-27 | Micron Technology, Inc. | Converting floating-point operands into universal number format operands for processing in a multi-user network |
US11017857B2 (en) * | 2019-07-15 | 2021-05-25 | Micron Technology, Inc. | Ranged content-addressable memory |
GB2599125B (en) * | 2020-09-24 | 2023-09-20 | Imagination Tech Ltd | Memory allocation in a ray tracing system |
GB2599124A (en) * | 2020-09-24 | 2022-03-30 | Imagination Tech Ltd | Memory allocation for recursive processing in a ray tracing system |
CN112181662B (zh) * | 2020-10-13 | 2023-05-02 | 深圳壹账通智能科技有限公司 | 任务调度方法、装置、电子设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110055511A1 (en) * | 2009-09-03 | 2011-03-03 | Advanced Micro Devices, Inc. | Interlocked Increment Memory Allocation and Access |
US20150163324A1 (en) * | 2013-12-09 | 2015-06-11 | Nvidia Corporation | Approach to adaptive allocation of shared resources in computer systems |
CN104937539A (zh) * | 2012-11-28 | 2015-09-23 | 英特尔公司 | 用于提供推入缓冲器复制和存储功能的指令和逻辑 |
CN105917311A (zh) * | 2014-01-21 | 2016-08-31 | 高通股份有限公司 | 用于便携式设备中的同步任务分发的系统和方法 |
CN107003934A (zh) * | 2014-12-08 | 2017-08-01 | 英特尔公司 | 改进共享本地存储器和系统全局存储器之间的存储器访问性能的装置和方法 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6996663B1 (en) * | 2001-09-12 | 2006-02-07 | Cisco Technology, Inc. | Method and apparatus for performing address translation using a CAM |
US6947051B2 (en) * | 2003-02-18 | 2005-09-20 | Microsoft Corporation | Video memory management |
US7233335B2 (en) * | 2003-04-21 | 2007-06-19 | Nividia Corporation | System and method for reserving and managing memory spaces in a memory resource |
US7761697B1 (en) * | 2005-07-13 | 2010-07-20 | Nvidia Corporation | Processing an indirect branch instruction in a SIMD architecture |
US9354944B2 (en) * | 2009-07-27 | 2016-05-31 | Advanced Micro Devices, Inc. | Mapping processing logic having data-parallel threads across processors |
US8627041B2 (en) * | 2009-10-09 | 2014-01-07 | Nvidia Corporation | Efficient line and page organization for compression status bit caching |
US20140281366A1 (en) * | 2013-03-15 | 2014-09-18 | Cognitive Electronics, Inc. | Address translation in a system using memory striping |
US20140310484A1 (en) * | 2013-04-16 | 2014-10-16 | Nvidia Corporation | System and method for globally addressable gpu memory |
US9977745B2 (en) * | 2016-01-05 | 2018-05-22 | Knuedge, Inc. | Flow control through packet router |
-
2017
- 2017-09-15 GB GB1714922.0A patent/GB2566514B/en active Active
-
2018
- 2018-09-14 EP EP18194407.5A patent/EP3457280B1/en active Active
- 2018-09-14 EP EP23165880.8A patent/EP4224320A1/en active Pending
- 2018-09-17 CN CN201811083351.8A patent/CN109656710A/zh active Pending
- 2018-09-17 US US16/132,703 patent/US10990448B2/en active Active
-
2021
- 2021-04-01 US US17/220,849 patent/US11656908B2/en active Active
-
2023
- 2023-05-23 US US18/201,010 patent/US20230297425A1/en active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110055511A1 (en) * | 2009-09-03 | 2011-03-03 | Advanced Micro Devices, Inc. | Interlocked Increment Memory Allocation and Access |
CN104937539A (zh) * | 2012-11-28 | 2015-09-23 | 英特尔公司 | 用于提供推入缓冲器复制和存储功能的指令和逻辑 |
US20150163324A1 (en) * | 2013-12-09 | 2015-06-11 | Nvidia Corporation | Approach to adaptive allocation of shared resources in computer systems |
CN105917311A (zh) * | 2014-01-21 | 2016-08-31 | 高通股份有限公司 | 用于便携式设备中的同步任务分发的系统和方法 |
CN107003934A (zh) * | 2014-12-08 | 2017-08-01 | 英特尔公司 | 改进共享本地存储器和系统全局存储器之间的存储器访问性能的装置和方法 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021169496A1 (zh) * | 2020-02-28 | 2021-09-02 | 平安科技(深圳)有限公司 | 数据读取方法、装置、设备及存储介质 |
CN114925139A (zh) * | 2022-07-21 | 2022-08-19 | 沐曦科技(成都)有限公司 | 分级同步数据链的方法、装置及电子设备 |
CN114925139B (zh) * | 2022-07-21 | 2022-11-18 | 沐曦科技(成都)有限公司 | 分级同步数据链的方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
US20190087229A1 (en) | 2019-03-21 |
US20230297425A1 (en) | 2023-09-21 |
GB201714922D0 (en) | 2017-11-01 |
EP3457280A1 (en) | 2019-03-20 |
US11656908B2 (en) | 2023-05-23 |
US10990448B2 (en) | 2021-04-27 |
EP4224320A1 (en) | 2023-08-09 |
GB2566514A (en) | 2019-03-20 |
US20210224123A1 (en) | 2021-07-22 |
GB2566514B (en) | 2020-01-08 |
EP3457280B1 (en) | 2023-05-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109656710A (zh) | 资源分配 | |
US10467051B2 (en) | Support of non-trivial scheduling policies along with topological properties | |
US9442760B2 (en) | Job scheduling using expected server performance information | |
CN103218208B (zh) | 用于实施成形的存储器访问操作的系统和方法 | |
CN107168782A (zh) | 一种基于Spark与GPU的并行计算系统 | |
CN106371888A (zh) | 支持虚拟机的存储设备,包括其的存储系统和其操作方法 | |
US20090100249A1 (en) | Method and apparatus for allocating architectural register resources among threads in a multi-threaded microprocessor core | |
CN105190541A (zh) | 利用具有寄存器视图、源视图、指令视图以及多个注册模板的微处理器体系架构执行指令块的方法 | |
US20120079501A1 (en) | Application Load Adaptive Processing Resource Allocation | |
CN103559088A (zh) | 维持公平性和顺序的资源管理子系统 | |
CN105579961A (zh) | 数据处理系统 | |
US8527988B1 (en) | Proximity mapping of virtual-machine threads to processors | |
CN107871301A (zh) | 在gpu中的任务调度 | |
US20150128136A1 (en) | Graphics processing unit controller, host system, and methods | |
CN104050032A (zh) | 用于有条件的屏障和急迫的屏障的硬件调度的系统和方法 | |
CN105027075A (zh) | 具有共享前端单元的处理核 | |
CN107729267A (zh) | 资源的分散分配以及用于支持由多个引擎执行指令序列的互连结构 | |
US7315935B1 (en) | Apparatus and method for port arbitration in a register file on the basis of functional unit issue slots | |
CN111125070A (zh) | 一种数据交换方法及平台 | |
JP7325437B2 (ja) | リソースインデックス置換を実施するデバイス及びプロセッサ | |
GB2572248A (en) | Resource allocation | |
CN116450334A (zh) | Gpu资源调度方法 | |
JPH1015785A (ja) | 生産計画方法及び生産計画システム | |
CN109597768A (zh) | 对存储器地址请求进行分类以用于并行存储器访问 | |
CN116260876A (zh) | 基于K8s的AI应用调度方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |