Fully Utilized Hardware in a Multitenancy Graphics Processing Unit

Spatial partitioning of GPU resources isolates applications, enabling concurrent execution and optimizing hardware utilization in multi-tenancy scenarios, addressing the inefficiencies of traditional GPUs.

JP7607665B2Active Publication Date: 2024-12-27ADVANCED MICRO DEVICES INC
View PDF 4 Cites 0 Cited by

Patent Information

Application Number
JP2022548924
Authority / Receiving Office
JP · JP
Patent Type
Patents
Current Assignee / Owner
Priority Date
2020-02-28
Filing Date
2021-02-26
Publication Date
2024-12-27
Estimated Expiration
2041-02-26

AI Technical Summary

Technical Problem

Conventional graphics processing units (GPUs) face inefficiencies in handling multiple applications simultaneously due to resource contention, leading to the 'hourglass problem' where only one application can access memory at a time, affecting performance.

Method used

Implement spatial partitioning of GPU resources, including command buses, caches, and memory channels, to isolate applications and optimize resource usage by mapping subsets of FE circuits and shader engines based on application characteristics.

Benefits of technology

Enhances GPU performance by allowing concurrent execution of multiple applications without interference, maximizing hardware utilization and reducing bottlenecks.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 0007607665000001
    Figure 0007607665000001
  • Figure 0007607665000002
    Figure 0007607665000002
  • Figure 0007607665000003
    Figure 0007607665000003
Patent Text Reader

Abstract

A device such as a graphics processing unit (GPU) [105] includes a set of shader engines [140, 141, 142, 143] and a set of front-end (FE) circuits [150, 151]. A subset of the set of FE circuits schedules geometry workloads to a subset of the set of shader engines based on a mapping. The device includes a set of physical paths [310-317] that communicate information from the set of FE circuits through the set of shader engines to memory [132]. The subset of the set of physical paths is assigned to the subset of the set of FE circuits and the subset of the set of shader engines based on the mapping. The mapping determines information stored in a set of registers [335] used to configure the device. In some cases, the set of registers stores information indicating a spatial division of the set of physical paths.
Need to check novelty before this filing date? Find Prior Art

Description

[Background technology]

[0001] Gaming and other graphics-intensive applications are greedy consumers of the physical resources of a graphics processing unit (GPU), including shader engines and fixed-function hardware units used to implement the graphics pipeline as a user-defined, reconfigurable virtual pipeline. For example, a traditional graphics pipeline for processing three-dimensional (3D) graphics is formed of a series of fixed-function hardware blocks supported by programmable shaders. These configurations are typically configured through graphics application programming interfaces (APIs), such as APIs defined by Microsoft DX 11 / 12, the Khronos Group, OpenGL, Vulkan, and others. Games are typically played on consoles (such as Xbox and PlayStation 4) and personal computers (PCs) that are optimized to handle the graphics processing requirements of the games. However, consoles and gaming PCs are expensive, and some games are only available in one of the gaming formats. Cloud gaming overcomes these shortcomings by offloading graphics processing to GPUs in cloud servers that stream rendered graphics to users, thereby reducing the hardware requirements of the users and allowing users to play games in multiple formats.

[0002] The present disclosure may be better understood, and its numerous features and advantages made apparent to those skilled in the art by reference to the following drawings, in which: The use of the same reference numbers in different drawings indicates similar or identical items. [Brief description of the drawings]

[0003] [Figure 1] FIG. 1 is a block diagram of a processing system that implements spatially partitioned, fully available hardware within a multi-tenancy graphics processing unit (GPU) in accordance with some embodiments. [Diagram 2] FIG. 2 is a block diagram of a GPU that uses flexible spatial partitioning to improve hardware utilization, according to some embodiments. [Diagram 3] 1 is a block diagram of a portion of a GPU including a command bus configured for spatial partitioning in accordance with some embodiments. [Figure 4] FIG. 1 is a block diagram of a portion of a GPU that includes a spatially partitioned command bus to allow a single front-end (FE) circuit to schedule commands to a set of shader engines (SEs), in accordance with some embodiments. [Diagram 5] FIG. 3 is a block diagram of a portion of a GPU including a spatially partitioned command bus 305 to provide a first physical path between a first subset of the FE circuitry and a first subset of the set of SEs in accordance with some embodiments. [Figure 6] FIG. 13 is a block diagram of a portion of a GPU including a spatially partitioned command bus to provide a second physical path between a second subset of the FE circuitry and a second subset of the set of SEs in accordance with some embodiments. [Figure 7] 1 is a block diagram of a portion of a GPU including a cache available for spatial partitioning, according to some embodiments. [Figure 8] 1 is a block diagram of a portion of a GPU including a cache partitioned to provide a first subset of SEs with access to a first subset of cache portions in accordance with some embodiments. [Figure 9] 1 is a block diagram of a portion of a GPU including a cache partitioned to provide a second subset of SEs with access to a second subset of cache portions in accordance with some embodiments. [Figure 10] 1 is a block diagram of a portion of a GPU including a set of memory channels available for spatial partitioning in accordance with some embodiments. [Figure 11]1 is a block diagram of a portion of a GPU including memory lanes divided into a first subset that provide a first path to memory, in accordance with some embodiments. [Figure 12] FIG. 1 is a block diagram of a portion of a GPU including memory lanes divided into a second subset that provide a second path to memory, in accordance with some embodiments. [Figure 13] 2 is a flow diagram of a method for spatially partitioning resources of a GPU according to some embodiments. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

[0004] A graphics processing unit (GPU) in a cloud server includes front-end (FE) hardware for handling tasks such as fetching commands, handling jitter, performing geometry operations, and performing ray tracing. The FE hardware typically includes a command fetcher, a queue such as a first-in-first-out (FIFO) buffer for holding the fetched commands, and a scheduler for scheduling commands from the command buffer for execution on a shader engine in the GPU. The shader engine is implemented using one or more processors and one or more arithmetic logic units (ALUs) to execute commands provided by the FE hardware. Results generated by the shaders, such as values ​​of shaded pixels, are output to one or more caches that store frequently used information, which is also stored in corresponding memories. Thus, the GPU includes memories or registers for holding results, caches, ports, and interfaces between these entities. Information flows from the FE hardware to memory through paths that include a command bus for carrying commands from the FE hardware to the shader engine, a cache for storing output from the shader engine, and a memory channel for communicating the cached information to the memory. Thus, a GPU's resources include the bandwidth used to communicate commands and data to the shader engines via a command bus, caches that store results generated by the shader engines, and memory channels that communicate information between the caches and memory.

[0005] A set of GPUs in a cloud server runs a dynamically changing mix of different applications. For example, a cloud server might be running four easy games (with relatively low resource consumption) in a first time interval, two medium games (with medium resource consumption) in a second time interval, and a single complex game (with relatively high resource consumption) in a third time interval. Games running on a cloud server should be isolated from each other so that each game on the cloud server is not affected by other games running on the cloud server. Thus, applications running on a GPU should not be allowed to share paths through the GPU, as this would affect the performance of other applications if the simultaneously running applications depend on the same shared path (or part of the path). As a result, when multiple applications are running simultaneously on a traditional GPU, only one application at a time is given access to memory from the FE hardware via the bus, caches, and memory channels shared within the GPU, which is sometimes referred to as the "hourglass problem."

[0006] 1-13 disclose embodiments of a GPU that uses spatial partitioning of the GPU's resources to provide resource isolation between applications simultaneously executing on the GPU. In some embodiments, the GPU partitions a command bus that conveys commands from the front-end (FE) hardware to a subset of shader engines assigned to the application, a shared cache that receives output from the subset of shader engines, and memory channels between the shared cache and memory. The spatial partitioning is performed based on characteristics of the concurrent applications, such as application complexity, graphics resolution, etc. Each application's command bus partition is mapped to a corresponding partition of the shared cache and partition of the memory channel. Some embodiments of the GPU include a data fabric that supports multiple FE circuits, a command bus that implements a set of lanes, a set of shader engines, a cache shared by the shader engines, and a set of memory channels between the cache and memory. The lanes of the command bus, the cache, and the set of memory channels are then partitioned between the applications simultaneously executing on the GPU. For example, when a first application and a second application are running simultaneously on the GPU, a first subset of lanes is assigned to communicate commands generated by the first application from the first subset of FE circuits to the first subset of shader engines, and a second subset of lanes is assigned to communicate commands generated by the second application from the second subset of FE circuits to the second subset of shader engines. Results generated by the first and second subsets of shader engines are provided to the first and second portions of the cache, respectively. The first and second subsets of memory channels are then used to write information from the first and second portions of the cache back to memory, respectively.In some embodiments, the first and second subsets of memory channels are mapped to different portions of memory, for example, by writing information to memory locations and memory strides indicated by a first base address and a second base address.

[0007] 1 is a block diagram of a processing system 100 that implements spatially partitioned, fully available hardware in a multi-tenancy graphics processing unit (GPU) 105, according to some embodiments. The processing system 100 includes one or more central processing units (CPUs) 110, 111. Although two CPUs 110, 111 are shown in FIG. 1, some embodiments of the processing system 100 include more or fewer CPUs. A Scalable Data Fabric (SDF) 115 supports data flow between endpoints within the processing system 100. Some embodiments of the SDF 115 support data flow between connection points such as peripheral component interface (PCI) physical layers, memory controllers, universal serial bus (USB) hubs, compute and execution units including the GPU 105 and the CPUs 110, 111, and other endpoints. In the illustrated embodiment, the SDF 115 is connected to an input / output (I / O) hub 120, which in turn is connected to a PCI Express (PCI-E) bus 125 and a Northbound Interface (NBIF) 130. The SDF 115 also provides a set of memory channels for communicating with memory 132, which may be implemented using dynamic random access memory (DRAM) or other memory types. A scalable control fabric (SCF) 135 provides a control communication plane for communicating system control signals within the processing system 100. Examples of system control signals are control signals used to support thermal and power management, testing, security, etc.

[0008] GPU 105 includes a set of shader engines (SEs) 140, 141, 142, 143 (collectively referred to herein as "SEs 140-143") that are used to execute commands simultaneously or in parallel. Some embodiments of SEs 140-143 are configured to shade vertices of primitives that represent a model of a scene using information in draw calls received from any of CPUs 110, 111. SEs 140-143 also shade pixels generated based on the shaded primitives and provide the shaded pixels to a display for presentation to a user, e.g., via I / O hub 120. Although four shader engines are shown in FIG. 1, some embodiments of GPU 105 include more or fewer shader engines. SEs 140-143 are connected to a graphics L2 cache 145 that stores frequently used data and instructions. In some embodiments, L2 cache 145 is coupled to one or more L1 caches implemented in SEs 140-143 and to one or more L3 caches (or other last level caches) implemented in processing system 100. The caches form a cache hierarchy that includes L2 cache 145. Other caches in the cache hierarchy are not shown in FIG. 1 for clarity.

[0009] A front-end (FE) circuit in the GPU 105 fetches primitives for a geometry workload, schedules the geometry workload for execution on the shader engine, and possibly handles serial synchronization, state updates, draw calls, cache activity, and tessellation of primitives. The FE circuit in the GPU 105 includes FE circuits 150 and 151, although some embodiments of the FE circuit are split to include additional FE circuits as described herein. The FE circuit also includes (or has access to) a shared resource 153 that is shared by (and distributed between) the FE circuits 150 and 151. For example, the shared resource 153 is split into two portions that are assigned separately to the FE circuits 150 and 151 when both FE circuits 150 and 151 are active and running different threads or applications. In another example, all of the shared resources 153 are assigned to a single FE circuit when only one of the FE circuits 150, 151 is active or when the combined resources of the FE circuits 150, 151 are used to support a single thread or application. The shared resources 153 include caches, arithmetic logic units (ALUs), etc. The FE circuits 150, 151 are coupled to a bus 155 that communicates commands and data associated with the commands to the SEs 140-143. Some embodiments of the bus 155 are command buses, such as a graphics register bus manager (GRBM), that acts as a hub for registering read and write operations supporting multiple masters and multiple slaves. The GRBM is sometimes implemented in a daisy store configuration.

[0010] The spatial division of resources of GPU 105 allows GPU 105 to simultaneously execute different workloads or threads associated with different applications. For example, a first subset of SEs 140-143 may execute commands of a first application simultaneously with a second subset of SEs 140-143 executing commands of a second application. The subset of the set of FE circuits 150, 151 schedules geometry workloads to the subset of the set of SEs 140-143 based on a mapping, possibly determined based on characteristics of the workload or application. GPU 105 also includes a set of physical paths (not shown in FIG. 1 for clarity) that communicate information from FE circuits 150, 151 to memory 132 via SEs 140-143. The subset of the set of physical paths is assigned to a combination of the subset of the set of FE circuits 150, 151 and the subset of the set of SEs 140-143 based on the mapping. The mapping determines the information stored in a set of registers (not shown in FIG. 1 for clarity) that is used to configure GPU 105. In some cases, the set of registers stores information indicating a spatial division of the set of physical paths, which is used to provide isolation between commands associated with different applications. In some embodiments, physical paths in different spatial partitions are given exclusive access to their corresponding assigned physical paths, such that a physical path assigned to one combination of FE circuits 150, 151 and a subset of SEs 140-143 is used only by that combination and cannot be used by any other combination of FE circuits 150, 151 and a subset of SEs 140-143.

[0011] FIG. 2 is a block diagram of a GPU 200 using flexible spatial partitioning to improve hardware utilization, according to some embodiments. The GPU 200 is used to implement some embodiments of the GPU 105 shown in FIG. 1. The GPU 200 includes a set of FE circuits 201, 202, and 203, collectively referred to herein as “FE circuits 201-203.” As used herein, the phrase “set of FE circuits” refers to different physical components that are turned on or off as needed, and different threads that utilize a multi-threaded FE circuit. As described herein, the FE circuits 201-203 perform front-end functions, including scheduling command buffers for execution on corresponding SEs 205, 206, and 207, collectively referred to herein as “SEs 205-207.” The FE circuits 201-203 are selectively connected to different paths formed by spatially partitioning the resources of the GPU 200. In the illustrated embodiment, FE circuits 201-203 are selectively connected to paths 211, 212, 213 using switching circuit 215. Although switching circuit 215 is depicted in Figure 2 as a demultiplexer, switching circuit 215 may also include one or more switches, data fabrics, routers, multiplexers, demultiplexers, etc. Switching circuit 215 and other portions of the spatially divided paths are configured based on values ​​stored in configuration registers (not shown in Figure 2 for clarity).

[0012] The spatially divided paths 211-213 provide paths for commands and data flowing from the FE circuits 201-203 through the SEs 205-207 to memory. In the illustrated embodiment, the memory is divided into memory partitions 221, 222, and 223, collectively referred to herein as "memory partitions 221-223." The resources of the GPU 200 include a command bus including multiple lanes for communicating information between the FE circuits 201-203 and the SEs 205-207. Thus, the spatially divided paths include subsets 231, 232, and 233 of lanes of the command bus, collectively referred to herein as "lane subsets 231-233." The resources of the GPU 200 also include a set of memory channels that communicate information generated by the SEs 205-207 to memory. Thus, the spatially divided path includes subsets of memory channels 241, 242, and 243, collectively referred to herein as "memory channel subsets 241-243."

[0013] In the illustrated embodiment, the switching circuitry 215 maps each of the FE circuits 201-203 to a corresponding one of the paths 211-213. However, the switching circuitry 215 selectively and reconfigurably maps a subset of the FE circuits 201-203 to a subset or combination of the paths 211-213. Furthermore, in some embodiments, the paths 211-213 include multiple SEs 205-207 and corresponding resources of the GPU 200, as described herein. The allocation of resources of the FE circuits 201-203, the SEs 205-207, and the spatially divided paths 211-213 is determined such that the resources of the GPU 200 are fully utilized when executing different numbers of applications or threads. For example, when a single thread is executing on the GPU 200, the resources of the FE circuits 201-203, the SEs 205-207, and the spatially divided paths 211-213 are allocated to the single thread. In another example, when multiple threads are executing on GPU 200, the resources of FE circuits 201-203, SEs 205-207, and spatially divided paths 211-213 are divided and shared among the multiple threads as described herein.

[0014] 3 is a block diagram of a portion 300 of a GPU including a command bus 305 configured for spatial partitioning, according to some embodiments. The portion 300 may be used to implement some embodiments of the GPU 105 shown in FIG. The command bus 305 includes lanes 310, 311, 312, 313, 314, 315, 316, 317 (collectively referred to herein as "lanes 310-317") that independently communicate information between a set of FE circuits 320, 321 and a set of SEs 325, 326, 327, 328, collectively referred to herein as "SEs 325-328."

[0015] Portion 300 includes switching circuitry 330 that selectively connects a subset of FE circuits 320, 321 to a corresponding subset of lanes 310-317. In some embodiments, switching circuitry 330 is configured based on information stored in one or more registers 335. Portion 300 also includes switching circuitry 340 that selectively connects a subset of lanes 310-317 to a subset of SEs 325-328. In some embodiments, switching circuitry 340 is configured based on information stored in one or more registers 345. The information stored in registers 335, 345 represents a mapping that associates a subset of FE circuits 320, 321 to a corresponding subset of SEs 325-328. Switching circuits 330, 340 use the information stored in registers 335, 345 to partition lanes 310-317 to form a physical path between a subset of FE circuits 320, 321 and a corresponding subset of SEs 325-328. Thus, mutually exclusive subsets of lanes 310-317 are provided to communicate information between a subset of FE circuits 320, 321 and a corresponding subset of SEs 325-328, thereby providing isolation between commands processed by portion 300 of the GPU for different assignments associated with different physical paths.

[0016] FIG. 4 is a block diagram of a portion 300 of a GPU including a command bus 305 that is spatially partitioned to allow a single FE circuit to schedule commands for a set of SEs, according to some embodiments. As described herein with respect to FIG. 3, the command bus 305 includes a set of lanes 310-317 that communicate information between a subset of the FE circuits 320, 321 and a subset of the SEs 325-328. In the illustrated embodiment, the switching circuit 330 is configured to assign the entire set of lanes 310-317 to the subset of the FE circuits that includes the FE circuit 320 based on information stored in a register 335. The switching circuit 330 does not provide access of any of the lanes 310-317 to another subset of the FE circuits that includes the FE circuit 321, as indicated by the dashed outline of the box representing the FE circuit 321. The switching circuit 340 is configured to connect the lanes 310-317 to the set of SEs 325-328 based on information stored in a register 345. Thus, spatial partitioning provides FE circuitry 320 with exclusive access to the physical path that includes lanes 310-317. FE circuitry 320 uses lanes 310-317 to schedule and service commands to the set of SEs 325-328.

[0017] FIG. 5 is a block diagram of a portion 300 of a GPU including a spatially partitioned command bus 305 to provide a first physical path between a first subset of the FE circuits and a first subset of the set of SEs, according to some embodiments. As described herein with respect to FIG. 3, the command bus 305 includes a set of lanes 310-317 that convey information between a subset of the FE circuits 320, 321 and a subset of the SEs 325-328. In the illustrated embodiment, the switching circuit 330 is configured to provide the FE circuit 320 with exclusive access to the first subset including the lanes 310-313 based on information stored in a register 335. The switching circuit 330 does not provide the FE circuit 321 with access to the first subset of lanes 310-313, as indicated by the dashed outline of the box representing the FE circuit 321. The switching circuit 340 is configured to connect the lanes 310-313 to the first subset of the SEs 325, 326 based on information stored in a register 345. Switching circuit 340 does not connect lanes 310-313 to the second subset of SEs 327, 328. Thus, spatial partitioning provides FE circuit 320 with exclusive access to the physical path that includes lanes 310-313. FE circuit 320 uses lanes 310-313 to schedule and service commands to the set of SEs 325, 326.

[0018] FIG. 6 is a block diagram of a portion 300 of a GPU including a spatially partitioned command bus 305 to provide a second physical path between a second subset of the FE circuits and a second subset of the set of SEs, according to some embodiments. As described herein with respect to FIG. 3, the command bus 305 includes a set of lanes 310-317 that communicate information between a subset of the FE circuits 320, 321 and a subset of the SEs 325-328. In the illustrated embodiment, the switching circuit 330 is configured to provide the FE circuit 321 with exclusive access to the second subset including the lanes 314-317 based on information stored in a register 335. The switching circuit 330 does not provide the FE circuit 320 with access to the second subset of lanes 314-317, as indicated by the dashed outline of the box representing the FE circuit 320. The switching circuit 340 is configured to connect the lanes 314-317 to the second subset of SEs 327, 328 based on information stored in a register 345. Switching circuit 340 does not connect lanes 314-317 to the first subset of SEs 325, 326. Thus, spatial partitioning provides FE circuit 321 with exclusive access to the physical path that includes lanes 314-317. FE circuit 321 uses lanes 314-317 to schedule and service commands to the set of SEs 327, 328. In this manner, the physical path assigned to FE circuit 320 (as shown in FIG. 5) is used simultaneously with the physical path assigned to FE circuit 321, as shown in FIG. 6.

[0019] FIG. 7 is a block diagram of a portion 700 of a GPU including a cache 705 available for spatial partitioning, according to some embodiments. The portion 700 is used to implement some embodiments of the GPU 105 shown in FIG. 1. The cache 705 is selectively partitioned to assign portions 710, 711, 712, 713 (collectively referred to herein as "cache portions 710-713") to different physical paths associated with different applications and subsets of the FE circuitry. The portion 700 of the GPU also includes switching circuitry 715 that selectively connects a subset of the SEs 720, 721, 722, 723 (collectively referred to herein as "SEs 720-723") to the cache portions 710-713. The switching circuitry 715 is configured based on information stored in a register 725. The cache portions 710-713 are thus part of the physical paths used to communicate information from the FE circuitry to memory via the SEs 720-723.

[0020] In the illustrated embodiment, cache 705 is partitioned such that cache portions 710-713 are part of different physical paths. Switching circuitry 715 connects SE 720 to cache portion 710, SE 721 to cache portion 711, SE 722 to cache portion 712, and SE 723 to cache portion 713. Thus, SEs 720-723 have exclusive access to their corresponding cache portions 710-713, and information stored by SEs 720-723 in cache portions 710-713 is isolated from information stored by other SEs 720-723 in other cache portions 710-713.

[0021] 8 is a block diagram of a portion 700 of a GPU including a cache 705 partitioned to provide a first subset of SEs with access to a first subset of cache portions, according to some embodiments. The portion 700 may be used to implement some embodiments of the GPU 105 shown in FIG. 1. In the illustrated embodiment, the cache 705 is partitioned such that a first subset 710, 711 of cache portions is assigned to a first physical path that includes a first subset 720, 721 of SEs. A switching circuit 715 connects the first subset 720, 721 of SEs to the first subset 710, 711 of cache portions. The first subset 720, 721 of SEs utilize the first subset 710, 711 of cache portions as a single shared cache. Thus, the SEs 720, 721 have exclusive access to the shared cache resources in the first subset of cache portions 710, 711, and information stored in the first subset of cache portions 710, 711 by the SEs first subset 720, 721 is isolated from information stored in the other cache portions 712, 713 by the other SEs 722, 723.

[0022] 9 is a block diagram of a portion 700 of a GPU including a cache 705 partitioned to provide a second subset of SEs with access to a second subset of cache portions, according to some embodiments. The portion 700 may be used to implement some embodiments of the GPU 105 shown in FIG. 1. In the illustrated embodiment, the cache 705 is partitioned such that the second subset of cache portions 712, 713 are assigned to a second physical path that includes the second subset of SEs 722, 723. A switching circuit 715 connects the second subset of SEs 722, 723 to the second subset of cache portions 712, 713. The second subsets of SEs 722, 723 utilize the second subset of cache portions 712, 713 as a single shared cache. Thus, the SEs 722, 723 have exclusive access to the shared cache resources in the second subset of cache portions 712, 713, and information stored in the second subset of cache portions 712, 713 by the second subset of SEs 722, 723 is isolated from information stored in the other cache portions 710, 711 by the other SEs 720, 721. In this manner, the physical paths that include the first subset of cache portions 710, 711 (as shown in FIG. 8) are used simultaneously with the physical paths assigned to the second subset of cache portions 712, 713, as shown in FIG.

[0023] FIG. 10 is a block diagram of a portion 1000 of a GPU including a set of memory channels available for spatial partitioning, according to some embodiments. The portion 1000 of the GPU may be used to implement some embodiments of the GPU 105 shown in FIG. 1. The memory channels 1001, 1002, 1003, and 1004 (collectively referred to herein as “memory channels 1001-1004”) are used to provide paths between the cache 1010 and the memory 1020 available for partitioning into portions 1011, 1012, 1013, and 1014 (collectively referred to herein as “cache portions 1011-1014”). The switching circuitry 1025 selectively connects a subset of the cache portions 1011-1014 to the memory 1020 to form a physical path that is part of a physical path that includes the FE circuitry and the SE, as described herein. The switching circuitry 1025 is configured using information stored in a register 1030. In the illustrated embodiment, each of the cache portions 1011-1014 is independently connected to the memory 1020 by switching circuitry 1025. In some embodiments, the cache portions 1011-1014 are mapped to different portions of the memory 1020, for example, by writing information to memory locations and memory strides indicated by different base addresses.

[0024] 11 is a block diagram of a portion 1000 of a GPU including memory lanes divided into a first subset that provide a first path to memory, according to some embodiments. A switching circuit 1025 assigns the first subset, including memory lanes 1001, 1002, to a first subset 1011, 1012 of cache portions. In the illustrated embodiment, the cache portions 1011, 1012 are utilized as a single shared cache (as described herein) that shares the memory lanes 1001, 1002 to provide a path to memory 1020. The switching circuit 1025 is configured using information stored in a register 1030. The first subset 1011, 1012 of cache portions is provided with exclusive access to the first subset 1001, 1002 of memory lanes. A second subset of cache portions 1013,1014 is not provided with access to the first subset of memory lanes 1001,1002, as indicated by the dashed boxes representing cache portions 1013,1014.

[0025] 12 is a block diagram of a portion 1000 of a GPU including memory lanes divided into a second subset that provides a second path to memory, according to some embodiments. A switching circuit 1025 assigns the second subset, including memory lanes 1003, 1004, to a second subset 1013, 1014 of cache portions. In the illustrated embodiment, the second subset 1013, 1014 of cache portions are utilized as a single shared cache (described herein) that shares the second subset 1003, 1004 of memory lanes to provide a path to memory 1020. The switching circuit 1025 is configured using information stored in a register 1030. The second subset 1013, 1014 of cache portions is provided with exclusive access to the second subset 1003, 1004 of memory lanes. A first subset of cache portions 1011, 1012 is not provided with access to a second subset of memory lanes 1003, 1004, as indicated by the dashed boxes representing cache portions 1011, 1012. In this manner, the path including the first subset of cache portions 1011, 1012 and memory lanes 1001, 1002 is used simultaneously with the path including the second subset of cache portions 1013, 1014 and memory lanes 1003, 1004 (as shown in FIG. 11 ).

[0026] 13 is a flow diagram of a method 1300 for spatially partitioning resources of a GPU, according to some embodiments. The method 1300 is implemented in some embodiments of the GPU 105 shown in FIG.

[0027] At block 1305, the GPU identifies a processing workload and determines characteristics of the workload. This determination may be made based on analysis of a command buffer, configuration information received from the CPU, or using other techniques. For example, the GPU may determine that the workload includes commands generated by a single application that has high complexity or requires high graphics resolution. In another example, the GPU may determine that the workload includes commands generated by multiple applications that have different complexity or graphics resolution.

[0028] At block 1310, the GPU allocates a subset of the FE circuits to schedule commands for a corresponding subset of the SEs. For example, the GPU may allocate a single FE circuit to schedule commands for a set of SEs implemented in the GPU in response to determining that a workload includes high complexity or high resolution commands from a single application. In another example, the GPU may allocate a subset of the FE circuits to independently schedule commands for lower complexity / resolution commands from multiple applications to a subset of the set of SEs.

[0029] At block 1310, the GPU divides the lanes of the command bus into subsets that correspond to the assignment of FE circuits to the SEs. For example, if a single FE circuit is assigned to schedule commands for a set of SEs for a single application, a path is formed that includes all lanes of the command bus. In another example, if multiple subsets of FE circuits are assigned to schedule commands for corresponding subsets of the set of SEs, the lanes of the command bus are divided into subsets and a separate path is formed for each combination of a subset of FE circuits and a corresponding subset of the set of SEs.

[0030] At block 1315, the GPU divides the cache into subsets that correspond to the allocation of FE circuits to the SEs. For example, if a single FE circuit is assigned to schedule commands for a set of SEs for a single application, the entire cache is assigned to the path. In another example, if multiple subsets of FE circuits are assigned to schedule commands for corresponding subsets of the set of SEs, the cache is divided into portions that are assigned to each combination of a subset of FE circuits and a subset of SEs.

[0031] At block 1320, the memory channel connecting the cache to the memory is partitioned based on the assignment of FE circuits to the SEs. For example, if a single FE circuit is assigned to schedule commands for a set of SEs for a single application, all memory channels are assigned to the path. In another example, if multiple subsets of FE circuits are assigned to schedule commands for corresponding subsets of the set of SEs, the memory channel is partitioned into subsets assigned to each combination of subset of FE circuits and subset of SEs. In this way, independent paths from the FE circuits to the memory are provided for exclusive use by one or more applications, so that one or more applications can run simultaneously using the isolated paths.

[0032] As disclosed herein, in some embodiments, an apparatus includes a set of shader engines, a set of front-end (FE) circuits, a subset of the set of FE circuits configured to schedule geometry workloads for the subset of the set of shader engines based on the mapping, and a set of physical paths configured to communicate information from the set of FE circuits to a memory through the shader engines, the subset of the set of physical paths being assigned to the subset of the set of FE circuits and the subset of the set of shader engines based on the mapping. In one aspect, the set of physical paths includes a command bus having a set of lanes that communicate information from the set of FE circuits to the set of shader engines, the subset of the set of lanes being assigned to the subset of the set of FE circuits and the subset of the set of shader engines based on the mapping. In another aspect, the set of physical paths includes a cache for holding information received from the set of shader engines, a portion of the cache being assigned to hold information received from the subset of the set of shader engines based on the mapping.

[0033] In one aspect, the set of physical paths includes a set of memory channels configured to communicate information from the cache to the memory, and a subset of the set of memory channels is assigned to communicate information from the portion of the cache to the memory. In another aspect, the apparatus includes a set of registers configured to store information for configuring the set of physical paths. In another aspect, the set of registers includes a first subset of registers for storing information used to assign a subset of the set of lanes to a subset of the set of FE circuits based on the mapping, a second subset of registers for storing information used to divide the cache to assign a portion to hold information received from a subset of the set of shader engines, and a third subset of registers configured to assign a subset of the set of memory channels to communicate information from the portion of the cache to the memory.

[0034] In one aspect, a subset of the set of physical paths is associated with applications simultaneously executing on a subset of the shader engines. In another aspect, the mapping is determined based on characteristics of the applications. In yet another aspect, the mapping is determined based on at least one of a complexity and a graphics resolution associated with the applications.

[0035] In some embodiments, an apparatus includes a set of shader engines, a set of front-end (FE) circuitry, a subset of the set of FE circuits configured to schedule geometry workloads to a corresponding subset of the set of shader engines, and a set of registers including information indicating a spatial division of a set of physical paths that communicate information from the set of FE circuits through the set of shader engines to a memory. In one aspect, the spatial division indicated by the information stored in the set of registers represents an assignment of a subset of the set of physical paths to a subset of the set of FE circuits and a corresponding subset of the set of shader engines.

[0036] In one aspect, the set of physical paths includes a command bus having a set of lanes that communicate information from the set of FE circuits to the set of shader engines, and the set of registers stores information indicating an allocation of a subset of the set of lanes to a subset of the set of FE circuits and to a subset of the set of shader engines. In another aspect, the set of physical paths includes a cache for holding information received from the set of shader engines, and the set of registers stores information indicating an allocation of a portion of the cache to hold information received from the subset of the set of shader engines. In yet another aspect, the set of physical paths includes a set of memory channels configured to communicate information from the cache to a memory, and the set of registers stores information indicating an allocation of a subset of the set of memory channels to communicate information from a portion of the cache to the memory.

[0037] In one aspect, the set of registers includes a first subset of registers for storing information used to allocate a subset of the set of registers to a subset of the set of FE circuits, a second subset of registers for storing information used to divide the cache to allocate a portion for holding information received from the subset of the set of shader engines, and a third subset of registers configured to allocate a subset of the set of memory channels for communicating information from the portion of the cache to the memory. In another aspect, the subset of the set of physical paths is associated with an application simultaneously executing on the subset of the shader engines. In yet another aspect, the mapping indicative of a spatial division of the set of physical paths is determined based on characteristics of the application. In yet another aspect, the mapping is determined based on at least one of a complexity and a graphics resolution associated with the application.

[0038] In some embodiments, the method includes accessing a set of registers including mapping information that maps a subset of a set of front-end (FE) circuitry to a corresponding subset of the set of shader engines, and spatially dividing the set of physical paths into subsets that communicate information from the subset of the set of FE circuitry to a memory via the corresponding subset of the set of shader engines based on the mapping information. In one aspect, the set of physical paths includes a command bus having a set of lanes that communicate information from the set of FE circuitry to the set of shader engines, and spatially dividing the set of physical paths includes assigning a subset of the set of lanes to the subset of the set of FE circuitry and the subset of the set of shader engines.

[0039] In one aspect, the set of physical paths includes a cache for holding information received from the set of shader engines, and spatially partitioning the set of physical paths includes partitioning the cache into portions for holding information received from a subset of the set of shader engines. In another aspect, the set of physical paths includes a set of memory channels configured to communicate information from the cache to a memory, and spatially partitioning the set of physical paths includes allocating a subset of the set of memory channels for communicating information from the portion of the cache to the memory.

[0040] In some embodiments, the apparatus and techniques described above are implemented in a system that includes one or more integrated circuit (IC) devices (also referred to as integrated circuit packages or microchips), such as the spatially partitioned GPUs described above with reference to FIGS. 1-13. Electronic design automation (EDA) and computer-aided design (CAD) software tools are used to design and manufacture these IC devices. These design tools are typically represented as one or more software programs. The one or more software programs include code executable by a computer system for operating the computer system to operate on code representing circuits of one or more IC devices to perform at least a portion of a process for designing or adapting a manufacturing system for manufacturing the circuits. This code may include instructions, data, or a combination of instructions and data. The software instructions representing the design tool or manufacturing tool are typically stored in a computer readable storage medium accessible to the computing system. Similarly, code representing one or more stages of the design or manufacture of the IC device is stored in and accessed from the same computer readable storage medium or a different computer readable storage medium.

[0041] A computer-readable storage medium includes any non-transitory storage medium or combination of non-transitory storage media that can be accessed by a computer system during use to provide instructions and / or data to the computer system. Such storage media may include, but are not limited to, optical media (e.g., compact discs (CDs), digital versatile discs (DVDs), Blu-ray discs), magnetic media (e.g., floppy disks, magnetic tape, magnetic hard drives), volatile memory (e.g., random access memory (RAM) or cache), non-volatile memory (e.g., read-only memory (ROM) or flash memory), or micro-electromechanical systems (MEMS) based storage media. The computer-readable storage medium (e.g., system RAM or ROM) may be internal to the computing system, the computer-readable storage medium (e.g., a magnetic hard drive) may be permanently attached to the computing system, the computer-readable storage medium (e.g., an optical disk or Universal Serial Bus (USB)-based flash memory) may be removably attached to the computing system, or the computer-readable storage medium (e.g., network-accessible storage (NAS)) may be coupled to the computer system via a wired or wireless network.

[0042] In some embodiments, some aspects of the above techniques may be implemented by one or more processors of a processing system executing software. The software includes one or more sets of executable instructions stored in or tangibly embodied on a non-transitory computer-readable storage medium. The software may include instructions and specific data that, when executed by one or more processors, operate the one or more processors to perform one or more aspects of the above techniques. The non-transitory computer-readable storage medium may include, for example, a magnetic or optical disk storage device, a solid-state storage device such as a flash memory, a cache, a random access memory (RAM), or one or more other non-volatile memory devices, etc. The executable instructions stored on the non-transitory computer-readable storage medium may be source code, assembly language code, object code, or other instruction formats that can be interpreted or executed by one or more processors.

[0043] In addition to the above, it should be noted that not all activities or elements described in the summary description are required, some of the specific activities or devices may not be required, one or more additional activities may be performed, and one or more additional elements may be included. Furthermore, the order in which the activities are listed is not necessarily the order in which they are performed. Also, the concepts have been described with reference to specific embodiments. However, those skilled in the art will appreciate that various changes and modifications can be made without departing from the scope of the invention as set forth in the claims. Thus, the specification and drawings should be regarded in an illustrative rather than a restrictive sense, and all such modifications are intended to be included within the scope of the invention.

[0044] Benefits, other advantages, and solutions to problems have been described above with respect to specific embodiments. However, the benefits, advantages, solutions to problems, and features by which any benefit, advantage, or solution may occur or be manifested are not to be construed as critical, essential, or essential features of any or all claims. Moreover, the specific embodiments described above are illustrative only, as the disclosed invention may be modified and practiced in different but similar manners apparent to those skilled in the art having the benefit of the teachings herein. No limitations are intended to the details of construction or design herein shown, other than as set forth in the appended claims. It is therefore apparent that the specific embodiments described above may be altered or modified, and all such variations are considered to be within the scope of the disclosed invention. Accordingly, the protection sought herein is set forth in the appended claims.

Claims

1. An apparatus comprising: A set of shader engines [140, 141, 142, 143]; a set of front-end (FE) circuitry [150, 151], a subset of the set of FE circuitry configured to schedule geometry workloads to a subset of the set of shader engines based on a mapping; a set of physical paths [310-317] configured to communicate information from the set of FE circuits through the set of shader engines to a memory [132], a subset of the set of physical paths being assigned to a subset of the set of FE circuits and a subset of the set of shader engines based on the mapping; Device.

2. the set of physical paths includes a command bus [305] having a set of lanes that convey information from the set of FE circuitry to the set of shader engines, a subset of the set of lanes being assigned to a subset of the set of FE circuitry and a subset of the set of shader engines based on the mapping; 2. The apparatus of claim 1.

3. the set of physical paths includes a cache [705] for holding information received from the set of shader engines, and portions of the cache are allocated to hold information received from a subset of the set of shader engines based on the mapping; 3. The apparatus of claim 2.

4. the set of physical paths includes a set of memory channels [1001, 1002, 1003, 1004] configured to communicate information from the cache to the memory, a subset of the set of memory channels being assigned to communicate information from a portion of the cache to the memory; 4. The apparatus of claim 3.

5. a set of registers [335] configured to store information for configuring the set of physical paths; 5. The apparatus of claim 4.

6. the set of registers includes: a first subset of registers for storing information used to assign the subset of the set of lanes to the subset of the set of FE circuits based on the mapping; a second subset of registers for storing information used to divide the cache to assign the portions for holding information received from the subset of the set of shader engines; and a third subset of registers configured to assign a subset of the set of memory channels for communicating information from the portions of the cache to the memory.

6. The apparatus of claim 5.

7. a subset of the set of physical paths is associated with an application concurrently executing on the subset of the shader engines; An apparatus according to any one of claims 1 to 6.

8. the mapping is determined based on characteristics of the application.

8. The apparatus of claim 7.

9. the mapping is determined based on at least one of a complexity and a graphics resolution associated with the application.

9. The apparatus of claim 8.

10. 1. A method comprising: accessing a set of registers containing mapping information that maps a subset of the set of front-end (FE) circuits [150, 151] to a corresponding subset of the set of shader engines [140, 141, 142, 143]; and spatially dividing the set of physical paths [310-317] based on the mapping information into subsets that convey information from a subset of the set of FE circuits to a memory [132] via a corresponding subset of the set of shader engines. method.

11. the set of physical paths includes a command bus [305] having a set of lanes that communicate information from the set of FE circuitry to the set of shader engines, and spatially dividing the set of physical paths includes assigning a subset of the set of lanes to a subset of the set of FE circuitry and to a subset of the set of shader engines. The method of claim 10.

12. the set of physical paths includes a cache [705] for holding information received from the set of shader engines, and spatially dividing the set of physical paths includes dividing the cache into portions for holding information received from a subset of the set of shader engines.

12. The method of claim 11.

13. the set of physical paths includes a set of memory channels [1001, 1002, 1003, 1004] configured to communicate information from the cache to the memory, and spatially partitioning the set of physical paths includes allocating a subset of the set of memory channels to communicate information from a portion of the cache to the memory.

13. The method of claim 12.

14. The method of claim 13, wherein spatially dividing the set of physical paths comprises spatially dividing the set of physical paths based on information stored in a set of registers.

14. The method of claim 13.

15. The set of registers includes: a first subset of registers for storing information used to assign the subset of the set of lanes to the subset of the set of FE circuits based on the mapping; a second subset of registers for storing information used to divide the cache to assign the portions for holding information received from the subsets of the set of shader engines; and a third subset of registers configured to assign a subset of the set of memory channels for conveying information from the portions of the cache to the memory.

15. The method of claim 14.

Citation Information

Patent Citations

  • Processing unit with multiple shader engines

    JP2013504129A

  • Real-time on-chip texture deployment using a shader processor

    JP2014520328A

  • Inter-shader attribute buffer optimization

    US20110080415A1

  • Coherent shader output for multiple targets

    US7728841B1