CN110032395B - 用于提高资源利用率的统一寄存器文件 - Google Patents
用于提高资源利用率的统一寄存器文件 Download PDFInfo
- Publication number
- CN110032395B CN110032395B CN201811352961.3A CN201811352961A CN110032395B CN 110032395 B CN110032395 B CN 110032395B CN 201811352961 A CN201811352961 A CN 201811352961A CN 110032395 B CN110032395 B CN 110032395B
- Authority
- CN
- China
- Prior art keywords
- thread
- cohesive
- block
- value
- thread 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.)
- Active
Links
- 230000015654 memory Effects 0.000 claims description 69
- 238000000034 method Methods 0.000 claims description 65
- 230000000694 effects Effects 0.000 claims description 13
- 230000004044 response Effects 0.000 claims description 8
- 230000001360 synchronised effect Effects 0.000 claims description 7
- 238000012545 processing Methods 0.000 description 80
- 238000010586 diagram Methods 0.000 description 20
- 238000003860 storage Methods 0.000 description 13
- 239000000872 buffer Substances 0.000 description 11
- 230000008901 benefit Effects 0.000 description 10
- 238000004891 communication Methods 0.000 description 10
- 238000005192 partition Methods 0.000 description 9
- 239000011159 matrix material Substances 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 238000013459 approach Methods 0.000 description 6
- 230000006399 behavior Effects 0.000 description 6
- 238000004590 computer program Methods 0.000 description 6
- 238000009826 distribution Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000007796 conventional method Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000004888 barrier function Effects 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 238000012884 algebraic function Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013501 data transformation Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30141—Implementation provisions of register files, e.g. ports
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
- G06F8/434—Pointers; Aliasing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30123—Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3888—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
编译器将多线程应用程序解析为内聚指令块。内聚块包括不发散或不收敛的指令。每个内聚块与一个或更多个统一寄存器相关联。当线程集执行给定内聚块中的指令时,该线程集中的每个线程可独立于该线程集中的其他线程访问统一寄存器。因此,统一寄存器可以代表该线程集中的所有线程存储单个数据副本,从而节省资源。
Description
相关申请的交叉引用
本申请要求于2017年11月14日提交的并且序列号为62/586,031且题为“用于提高资源利用率的统一数据路径(Uniform Datapath for Improved Resource Utilization)”的美国临时专利申请的优先权权益。该相关申请的主题通过引用并入本文。
技术领域
本发明的实施例总地涉及多线程处理,并且更具体地,涉及用于提高资源利用率的统一寄存器文件。
背景技术
传统的并行处理器通常并行执行多个线程集以执行各种操作。传统的并行处理器包括用于执行面向向量的操作的向量处理器。向量处理器通常包括寄存器文件,该寄存器文件基于每个线程存储数据。寄存器文件包括给定线程集中的每个线程的单独存储槽。对于给定线程集中的特定线程,寄存器文件中的相应存储槽存储在执行期间线程使用的值。当给定的线程集执行时,给定的线程集中的每个线程访问相应的存储槽并从该存储槽读取和/或写入该存储槽。
在执行期间,线程集中的每个线程可以对不同数据执行操作。因此,在某些情况下,寄存器文件中的每个存储槽存储不同的数据。然而,在某些情况下,线程集中的线程可以对至少一些相同数据执行操作。因此,在这些情况下,寄存器文件中的一些或所有存储槽存储相同的数据副本。例如,当线程集被配置为执行矩阵乘法运算时,寄存器文件中的每个存储槽可以存储矩阵数据结构的基址的不同副本,其中矩阵乘法运算的结果将被写入其中。在执行矩阵乘法运算期间,给定线程将访问寄存器文件中的相应数据槽,以读取存储在其中的基址的副本。然后,线程将执行矩阵乘法运算的一部分,并使用与线程相关联的基址和偏移量将该运算的结果写入矩阵数据结构。因此,对于一组32个线程,寄存器文件将在32个单独的存储槽中存储32个相同基址的副本。
在执行期间,线程集中的每个线程还可以根据各种因素执行不同的操作,包括输入参数、线程索引等。但是,在某些情况下,线程集中的每个线程可以执行相同的操作。例如,当线程集被配置为执行上面讨论的矩阵乘法运算时,每个线程可以被配置为执行两个常量值之间的除法运算。在执行期间,每个线程将使两个常量值相除以生成结果。然后,结果将用于执行整个矩阵乘法运算的一部分。因此,对于一组32个线程,将执行相同的除法运算32次。
上述方法的一个缺点是寄存器文件最终可存储冗余的数据副本。同样,对于32个线程,寄存器文件有时可以存储32个线程使用的32个相同的数据副本。为冗余数据供应存储空间本质上是低效的并且不必要地浪费处理器裸片区域。上述方法的另一个缺点是多个线程最终可以执行相同的操作以生成相同的结果。如上所述,在涉及一组32个线程的某些情况下,所有32个线程可以执行相同的操作并生成相同的结果。多次执行相同的操作会浪费处理器周期并且不必要地消耗功率。
如前所述,本领域需要的是用于在并行处理器中执行线程的更有效的技术。
发明内容
本发明的一个实施例阐述了一种用于执行内聚指令块的计算机实现的方法,包括解析应用程序以生成第一内聚块,其中第一内聚块包括不收敛且不发散的第一指令集。使得在执行第一内聚块时,第一线程组中的第一线程访问第一统一寄存器文件以读取第一值,并使得在执行第一内聚块时,第一线程组中的第二线程访问第一统一寄存器以读取第一值,其中第二线程至少部分地与第一线程访问第一值并行地访问第一值。
本文描述的方法的一个优点是只需要代表线程组中的所有线程存储输入数据的一个副本。因此,可以节省存储空间和处理器区域。因此,所公开的方法代表了相对于传统技术的技术进步,传统技术要求为每个不同的线程存储输入数据的单独副本。所公开方法的另一个优点是多个线程不需要执行相同的操作来生成相同的结果,从而节省了处理器周期并提高了处理器效率。因此,本文描述的方法通过改进计算设备的操作而赋予技术优势。
附图说明
因此,可以通过参考实施例获得可以详细地理解本发明的上述特征的方式、上面简要概述的本发明的更具体的描述,其中一些实施例在附图中示出。然而,应注意,附图仅示出了本发明的典型实施例,因此不应视为限制本发明的范围,因为本发明可允许其他同等有效的实施例。
图1是被配置为实现本发明的一个或更多个方面的计算机系统的框图;
图2是根据本发明的各种实施例的包括在图1的并行处理子系统中的并行处理单元的框图;
图3A是根据本发明的各种实施例的包括在图2的并行处理单元中的通用处理集群的框图;
图3B是根据本发明的各种实施例的图3A的流式多处理器的更详细的图示;
图4是根据本发明的各种实施例的在执行内聚块之前如何将统一寄存器分配给线程组的概念图示;
图5是根据本发明的各种实施例的由线程组执行的示例性内聚块的图示;
图6是根据本发明的各种实施例的由以只读模式操作的线程组执行的示例性内聚块的图示;
图7是根据本发明的各种实施例的由被配置为彼此同步的线程组执行的示例性内聚块的图示;和
图8A-图8B阐述了根据本发明的各种实施例的用于执行机器代码的内聚块的方法步骤的流程图。
具体实施方式
在以下描述中,阐述了许多具体细节以提供对本发明的更透彻的理解。然而,对于本领域技术人员显而易见的是,可以在没有这些具体细节中的一个或更多个的情况下实践本发明。
如上所述,传统的并行处理器实现寄存器文件,该寄存器文件为线程组中的每个不同线程存储相同的数据副本。为这些相同的副本供应存储空间本质上是低效的并且不必要地浪费处理器区域。此外,传统的并行处理器经常使线程组中的多个线程执行相同的操作以产生相同的结果。多次执行相同的操作会浪费处理器周期并且不必要地消耗过多的功率。
为了解决这些低效问题,数据路径核心包括统一寄存器文件(URF),其存储在线程组中的所有线程之间共享的单个数据副本。URF还可以存储操作结果的单个副本,线程组中的每个线程被配置为执行该操作。
在操作中,编译器解析应用程序以生成将由一个或更多个线程集执行的一个或更多个“内聚块”。内聚块(CB)包括不收敛或不发散的指令子集。给定的CB还指定URF内的特定统一寄存器(UR),其被配置为存储将由执行CB的线程集使用的数据。当线程组中的每个线程执行依赖于给定值的操作时,UR存储该值的单个副本。向每个线程都提供对所述值的单个副本的独立访问。此外,当线程组中的每个线程执行相同的操作以生成单个结果时,UR存储该结果的单个副本。向每个线程都提供对所述结果的单个副本的独立访问。
该方法的一个优点是可以释放通常为冗余数据分配的任何附加存储槽,从而以更高的效率利用存储空间。该方法的另一个优点是多个线程不需要执行相同的操作来生成相同的结果,从而节省处理器周期并进一步提高存储效率。此外,由于每个线程都具有对存储在UR中的单个数据副本的独立访问权限,因此应用程序员可以根据提供对各个线程的粒度控制的通用编程范例来编写程序。
系统总览
图1是被配置为实现本发明的一个或更多个方面的计算机系统100的框图。概括地说,计算机系统100可以是包括存储器、并行处理单元或图形处理单元和中央处理单元的任何系统。然而,如图所示,计算机系统100包括但不限于中央处理单元(CPU)102和系统存储器104,系统存储器104经由存储器桥105和通信路径113耦合到并行处理子系统112。存储器桥105进一步经由通信路径106耦合到I/O(输入/输出)桥107,并且I/O桥107又耦合到开关116。
在操作中,I/O桥107被配置为从诸如键盘或鼠标的输入设备108接收用户输入信息,并且将输入信息转发到CPU 102以经由通信路径106和存储器桥105进行处理。开关116被配置为在I/O桥107与计算机系统100的其他组件之间提供连接,例如网络适配器118和各种插卡120和插卡121。
还如图所示,I/O桥107耦合到系统盘114,系统盘114可以配置为存储内容和应用程序以及数据以供CPU 102和并行处理子系统112使用。一般而言,系统盘114提供用于应用程序和数据的非易失性存储器,并且可包括固定的或可移除的硬盘驱动器、闪存设备和CD-ROM(光盘只读存储器)、DVD-ROM(数字通用盘ROM)、蓝光、HD-DVD(高清晰度DVD)或其他磁、光或固态存储设备。最后,虽然未明确示出,但是其他组件,例如通用串行总线或其他端口连接、光盘驱动器、数字通用盘驱动器、胶片记录设备等也可以连接到I/O桥107。
在各种实施例中,存储器桥105可以是北桥芯片,并且I/O桥107可以是南桥芯片。另外,通信路径106和通信路径113以及计算机系统100内的其他通信路径可以使用任何技术上合适的协议来实现,包括但不限于AGP(加速图形端口)、超传输或本领域已知的任何其他总线或点对点通信协议。
在一些实施例中,并行处理子系统112包括将像素传送到显示设备110的图形子系统,显示设备110可以是任何传统的阴极射线管、液晶显示器、发光二极管显示器等。在这样的实施例中,并行处理子系统112包含针对图形和视频处理而优化的电路,其包括例如视频输出电路。如下面在图2中更详细描述的,这种电路可以包含在包括在并行处理子系统112内的一个或更多个并行处理单元(PPU)中。在其他实施例中,并行处理子系统112包含针对通用和/或计算处理而优化的电路。同样,这种电路可以包含在包括在并行处理子系统112内的一个或更多个PPU中,这些PPU被配置为执行这样的通用和/或计算操作。在又一其他实施例中,包括在并行处理子系统112内的一个或更多个PPU可以配置为执行图形处理、通用处理和计算处理操作。系统存储器104包括至少一个设备驱动程序103,设备驱动程序103配置为管理并行处理子系统112内的一个或更多个PPU的处理操作。如下面结合图4更详细地描述的,设备驱动程序103可以包括一个或更多个编译器,所述编译器配置为将应用级指令编译成机器级指令。
在各种实施例中,并行处理子系统112可以与图1的一个或更多个其他元件集成以形成单个系统。例如,并行处理子系统112可以与CPU 102和单个芯片上的其他连接电路集成以形成片上系统(SoC)。
应当理解,本文所示的系统是说明性的,并且可以进行变化和修改。可以根据需要修改连接拓扑(包括桥的数量和布置、CPU 102的数量以及并行处理子系统112的数量)。例如,在一些实施例中,系统存储器104可以直接连接到CPU 102而不是通过存储器桥105,并且其他设备将经由存储器桥105和CPU 102与系统存储器104通信。在其他备选拓扑中,并行处理子系统112可以连接到I/O桥107或直接连接到CPU 102,而不是连接到存储器桥105。在其他实施例中,I/O桥107和存储器桥105可以集成到单个芯片中而不是作为一个或更多个分立器件存在。最后,在某些实施例中,可能不存在图1中所示的一个或更多个组件。例如,可以取消开关116,并且网络适配器118和插卡120、121将直接连接到I/O桥107。
图2是根据本发明的各种实施例的包括在图1的并行处理子系统112中的并行处理单元(PPU)202的框图。尽管图2描绘了一个PPU 202,如上所述,并行处理子系统112可以包括任何数量的PPU 202。如图所示,PPU 202耦合到本地并行处理(PP)存储器204。PPU 202和PP存储器204可以使用一个或更多个集成电路设备(例如可编程处理器、专用集成电路(ASIC)或存储器设备)实现,或以任何其他技术上可行的方式实现。
在一些实施例中,PPU 202包括图形处理单元(GPU),图形处理单元(GPU)可配置为实现图形渲染管线以执行与基于CPU 102和/或系统存储器104提供的图形数据生成像素数据相关的各种操作。当处理图形数据时,PP存储器204可以用作存储一个或更多个传统帧缓冲器的图形存储器,并且如果需要,还可以存储一个或更多个其他渲染目标。其中,PP存储器204可用于存储和更新像素数据,并将最终像素数据或显示帧传送到显示设备110以供显示。在一些实施例中,PPU 202还可以配置用于通用处理和计算操作。
在操作中,CPU 102是计算机系统100的主处理器,其控制和协调其他系统组件的操作。特别地,CPU 102发出控制PPU 202的操作的命令。在一些实施例中,CPU 102将用于PPU 202的命令流写入可位于系统存储器104、PP存储器204或CPU 102和PPU 202都可访问的另一个存储位置的数据结构(未在图1或图2中明确示出)。指向数据结构的指针被写入推送缓冲器以启动对数据结构中的命令流的处理。PPU 202从推送缓冲器读取命令流,然后相对于CPU 102的操作异步地执行命令。在生成多个推送缓冲器的实施例中,应用程序可以经由设备驱动程序103指定每个推送缓冲器的执行优先级,以控制不同的推送缓冲器的调度。
还如图所示,PPU 202包括I/O(输入/输出)单元205,I/O单元205经由通信路径113和存储器桥105与计算机系统100的其余部分通信。I/O单元205生成用于在通信路径113上传输的分组(或其他信号),并且还从通信路径113接收所有输入分组(或其他信号),将输入分组引导到PPU 202的适当组件。例如,与处理任务相关的命令可以被引导到主机接口206,但是与存储器操作有关的命令(例如,从PP存储器204读取或向PP存储器204写入)可以被引导到交叉开关单元210。主机接口206读取每个推送缓冲器并将存储在推送缓冲器中的命令流发送到前端212。
如上面结合图1所述,可以改变PPU 202与计算机系统100的其余部分的连接。在一些实施例中,包括至少一个PPU 202的并行处理子系统112被实现为可以插入计算机系统100的扩展槽中的插卡。在其他实施例中,PPU 202可以与总线桥(例如,存储器桥105或I/O桥107)集成在单个芯片上。此外,在其他实施例中,PPU 202的一些或所有元件可以与CPU102一起包括在单个集成电路或片上系统(SoC)中。
在操作中,前端212将从主机接口206接收的处理任务发送到任务/工作单元207内的工作分配单元(未示出)。工作分配单元接收指向编码为任务元数据(TMD)并存储在内存中的处理任务的指针。指向TMD的指针包括在命令流中,该命令流被存储为推送缓冲器并由前端单元212从主机接口206接收。可被编码为TMD的处理任务包括与要处理的数据相关联的索引以及定义如何处理数据的命令和状态参数。例如,状态参数和命令可以定义要对数据执行的程序。任务/工作单元207从前端212接收任务并确保在启动由每个TMD指定的处理任务之前将GPC 208配置为有效状态。可以为用于调度处理任务的执行的每个TMD指定优先级。处理任务还可以从处理集群阵列230接收。可选地,TMD可以包括控制TMD是否被添加到处理任务列表的头部或尾部(或者指向处理任务的指针列表)的参数,从而提供对执行优先级的另一级控制。
PPU 202基于处理集群阵列230有利地实现高度并行处理架构,处理集群阵列230包括一组C个通用处理集群(GPC)208,其中C≥1。每个GPC 208能够同时执行大量(例如,数百或数千个)线程,其中每个线程是程序的实例。在各种应用中,可以分配不同的GPC 208用于处理不同类型的程序或用于执行不同类型的计算。GPC 208的分配可以根据针对每种类型的程序或计算产生的工作量而变化。
存储器接口214包括一组D个分区单元215,其中D≥1。每个分区单元215耦合到驻留在PPM存储器204内的一个或更多个动态随机存取存储器(DRAM)220。在一个实施例中,分区单元215的数量等于DRAM 220的数量,并且每个分区单元215耦合到不同的DRAM 220。在其他实施例中,分区单元215的数量可以与DRAM 220的数量不同。本领域普通技术人员可以理解,DRAM 220可以用任何其他技术上合适的存储设备代替。在操作中,各种渲染目标(例如纹理贴图和帧缓冲器)可以跨DRAM 220存储,允许分区单元215并行地写入每个渲染目标的部分,以有效地使用PP存储器204的可用带宽。
给定GPC 208可以处理要写入PP存储器204内的任何DRAM 220的数据。交叉开关单元210配置为将每个GPC 208的输出路由到任何分区单元215的输入或任何其他GPC 208,以用于进一步处理。GPC 208经由交叉开关单元210与存储器接口214通信,以从各种DRAM 220读取或写入各种DRAM 220。在一个实施例中,除了经由存储器接口214与PP存储器204的连接之外,交叉开关单元210还具有与I/O单元205的连接,从而使得不同GPC 208内的处理核心能够与系统存储器104或非PPU 202本地的其他存储器通信。在图2的实施例中,交叉开关单元210直接与I/O单元205连接。在各种实施例中,交叉开关单元210可以使用虚拟信道来分离GPC 208和分区单元215之间的业务流。
再次,GPC 208可以被编程为执行与各种各样的应用有关的处理任务,包括但不限于线性和非线性的数据变换、过滤视频和/或音频数据、建模操作(例如,应用物理定律确定对象的位置、速度和其他属性)、图像渲染操作(例如,曲面细分着色器、顶点着色器、几何着色器和/或像素/片段着色器程序)以及通用计算操作等。在操作中,PPU 202被配置为将数据从系统存储器104和/或PP存储器204传输到一个或更多个片上存储器单元,处理数据,并将结果数据写回系统存储器104和/或PP存储器204。然后结果数据可以由其他系统组件(包括CPU 102、并行处理子系统112内的另一个PPU 202或计算机系统100内的另一个并行处理子系统112)访问。
如上所述,任何数量的PPU 202可以包括在并行处理子系统112中。例如,可以在单个插卡中提供多个PPU 202,或者可以将多个插卡连接到通信路径113,或者,PPU 202中的一个或更多个可以集成到桥芯片中。多PPU系统中的PPU 202可以彼此相同或不同。例如,不同的PPU 202可以具有不同数量的处理核心和/或不同数量的PP存储器204。在存在多个PPU202的实现方式中,那些PPU可以并行操作以比单个PPU 202实现的吞吐量更高的吞吐量处理数据。包含一个或更多个PPU 202的系统可以以各种配置和形式因素实现,包括但不限于台式机、膝上型计算机、手持式个人计算机或其他手持设备、服务器、工作站、游戏控制台、嵌入式系统等等。
图3A是根据本发明的各种实施例的包括在图2的PPU 202中的GPC208的框图。在操作中,GPC 208可以配置为并行执行大量线程以执行图形处理、通用处理和/或计算操作。如本文所使用的,“线程”指的是在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发布技术用于支持大量线程的并行执行,而无需提供多个独立指令单元。在其他实施例中,使用配置为向GPC 208内的一组处理引擎发出指令的公共指令单元,单指令、多线程(SIMT)技术被用于支持大量通常同步的线程的并行执行。与SIMD执行机制(其中所有处理引擎通常执行相同的指令)不同,SIMT执行允许不同的线程更容易地遵循通过给定程序的不同执行路径。本领域普通技术人员将理解,SIMD处理机制表示SIMT处理机制的功能子集。
经由管线管理器305控制GPC 208的操作,管线管理器305将从任务/工作单元207内的工作分配单元(未示出)接收的处理任务分配给一个或更多个流式多处理器(SM)310。管线管理器305还可以配置为通过指定SM 310输出的经处理数据的目的地来控制工作分配交叉开关330。
在一个实施例中,GPC 208包括一组M个SM 310,其中M≥1。此外,每个SM 310包括一组功能执行单元(未示出),例如执行单元和加载存储单元。特定于任何功能执行单元的处理操作可以是管线化的,这使得能够在先前指令完成执行之前发出新指令以供执行。可以提供给定SM 310内的功能执行单元的任何组合。在各种实施例中,功能执行单元可以配置为支持各种不同的运算,包括整数和浮点运算(例如,加法和乘法),比较运算、布尔运算(AND,OR,XOR)、比特移位和各种代数函数(例如,平面插值和三角函数、指数函数和对数函数等)的计算。有利地,相同的功能执行单元可以配置为执行不同的操作。
在操作中,每个SM 310配置为处理一个或更多个线程组。如本文所使用的,“线程组”或“线程束(warp)”指的是对不同的输入数据同时执行相同程序的一组线程,其中该组中的一个线程被指派给SM 310内的不同执行单元。线程组可以包括比SM 310内的执行单元的数量更少的线程,在这种情况下,一些执行在处理该线程组的周期期间可以是空闲的。线程组还可以包括比SM 310内的执行单元的数量更多的线程,在这种情况下,处理可以在连续的时钟周期上发生。由于每个SM 310可以同时支持多达G个线程组,因此可以在任何给定时间在GPC 208中执行多达G×M个线程组。
另外,多个相关线程组可以在SM 310内同时是活动的(在执行的不同阶段中)。该线程组的集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m×k,其中k是线程组中同时执行的线程的数量,其通常是SM 310内执行单元数量的整数倍,而m是SM 310内同时活动的线程组的数量。
尽管未在图3A中示出,但是每个SM 310包含一级(L1)高速缓存或使用SM 310外部的相应L1高速缓存中的空间来支持由执行单元执行的加载和存储操作等。每个SM 310还可以访问在PPU 202中的所有GPC 208之间共享的二级(L2)高速缓存(未示出)。L2高速缓存可以用于在线程之间传输数据。最后,SM 310还可以访问片外“全局”存储器,其可以包括PP存储器204和/或系统存储器104。应当理解,PPU 202外部的任何存储器都可以用作全局存储器。另外,如图3A所示,1.5级(L1.5)高速缓存335可以包括在GPC 208内,并且配置为由SM310经由存储器接口214接收和保持从存储器请求的数据。这样的数据可以包括但不限于指令、统一数据和常量数据。在GPC 208内具有多个SM 310的实施例中,SM 310可以有益地共享在L1.5高速缓存335中高速缓存的公共指令和数据。
每个GPC 208可以具有相关联的存储器管理单元(MMU)320,其配置为将虚拟地址映射到物理地址。在各种实施例中,MMU 320可以驻留在GPC 208内或存储器接口214内。MMU320包括一组页表条目(PTE),用于将虚拟地址映射到图块或内存页的物理地址以及可选的高速缓存行索引。MMU 320可以包括可以驻留在SM 310内、一个或更多个L1高速缓存内或GPC 208内的地址转换后备缓冲器(TLB)或高速缓存。
在图形和计算应用中,GPC 208可以配置为使得每个SM 310耦合到用于执行纹理贴图操作的纹理单元315,诸如确定纹理样本位置、读取纹理数据和过滤纹理数据。
在操作中,每个SM 310将经处理的任务发送到工作分配交叉开关330,以便将经处理的任务提供给另一个GPC 208以进一步处理或将经处理的任务通过交叉开关单元210存储在L2高速缓存(未示出)、并行处理存储器204或系统存储器104中。此外,预光栅操作(preROP)单元325配置为从SM 310接收数据,将数据引导到分区单元215内的一个或更多个光栅操作(ROP)单元,执行颜色混合的优化,组织像素颜色数据和执行地址转换。
应当理解,本文描述的核心架构是说明性的,并且可以进行变化和修改。其中,任何数量的处理单元,例如SM 310、纹理单元315或preROP单元325,可以包括在GPC 208中。此外,如上面结合图2所述,PPU 202可以包括任意数量的GPC 208,GPC 208配置为在功能上彼此相似,使得执行行为不依赖于哪个GPC 208接收特定处理任务。此外,每个GPC 208独立于PPU 202中的其他GPC 208而操作,以执行一个或更多个应用程序的任务。鉴于前述内容,本领域普通技术人员将理解,图1-图3A中描述的架构绝不限制本发明的范围。
图3B是根据本发明的各种实施例的图3A的流式多处理器(SM)的更详细的图示。如图所示,SM 310包括耦合到一个或更多个数据路径核心350的收敛障碍单元(convergencebarrier unit,CBU)340。每个数据路径核心350向下游耦合到数据路径接口370,数据路径接口370又耦合到SM高速缓存380。SM高速缓存380例如可以是图3A的L1.5高速缓存335。
每个数据路径核心350配置为执行与线程组或线程束中包括的线程相关联的指令。给定数据路径核心350包括指令高速缓存(I-高速缓存)352、零级(L0)常量高速缓存354、统一寄存器文件(URF)356、指令调度器358,包括向量寄存器文件(VRF)362的向量数据路径(VDP)360和包括收集器366和数学单元368的统一数据路径(UDP)364。指令高速缓存352高速缓存由一个或更多个线程组中的线程和/或面向指令的数据执行的指令。L0常量高速缓存354高速缓存最近使用的常量值以用于加速访问。URF 356是共享存储器资源,其配置为包括可由给定线程组内的线程独立访问的统一寄存器(UR)。指令调度器358调度高速缓存的指令用于执行。指令调度器358调度高速缓存的指令用于执行。指令调度器358可以调度线程组中包括的每个线程以独立于线程组中的其他线程执行,从而保留了一种通用的编程范例,其中,线程被认为是独立的实体。
VDP 360包括涉及面向向量的指令的执行的各种单元。那些单元可以包括执行单元、加载/存储单元等。向量寄存器文件362配置为存储由在VDP 360内执行的线程组处理的数据。经由VDP 360执行的指令本质上可以是不同的。UDP 364包括涉及执行统一指令的各种单元,包括收集器366和数学单元368。数学单元368通常也可称为“数学运算符”。在本公开的上下文中,“统一”指令指的是通常遵循相同或类似控制路径并处理相同或密切相关数据的那些指令。UDP 364内的单元可以在执行期间访问URF 366。
在操作中,VDP 360和UDP 364彼此结合操作以执行经由驱动程序103编译的程序指令。这些程序指令可在编译期间被解析为“内聚”指令块,其不包括发散或重新收敛的指令。包括发散或重新收敛的指令的其他程序指令可以界定这些内聚指令块。VDP 360可以执行发散/收敛指令,而UDP 364可以执行内聚指令块。可以在URF 356内为每个内聚块分配特定UR。配置为执行内聚块的线程组可以在执行期间访问所分配的UR。此外,线程组中的每个线程都可以独立访问UR。
在一个实施例中,当UDP 364执行内聚块时,收集器366首先从关联的UR收集该内聚块的输入数据。在某些情况下,数据也可以在URF 356本地高速缓存。然后,每个收集器366将收集的输入数据提供给数学单元368。然后,数学单元368可以代表相关联的线程对输入数据执行各种处理操作。因此,当线程组中的任何给定线程执行与内聚块相关联的指令时,每个这样的线程可以独立访问从UR收集的输入数据。该方法不同于传统技术,因为数据路径核心350仅在UR内保留输入数据的单个副本,而不是存储多个副本(如传统技术所要求的)。在另一实施例中,当线程组中的每个线程依赖于相同的基址时,该基址可以仅计算一次然后存储在UR内。然后,每个收集器366可以代表线程组中的线程收集该基址,从而通过避免冗余计算来减少处理周期。下面结合图4-图8B更详细地描述使用相应UR的内聚块的生成和执行。
用于高效执行内聚块的统一寄存器文件
图4是根据本发明的各种实施例的在执行内聚块之前如何将统一寄存器分配给线程组的概念图示。如图所示,驱动程序103最初接收多线程应用程序400,然后通过一个或更多个编译器410编译该应用程序,以生成经编译代码420。多线程应用程序400可以是任何技术上可行类型的应用程序,包括图形特定的多线程应用程序或通用并行处理应用程序等。编译器410可以包括编译器的层次结构,其中层次结构中的给定编译器将所接收的指令转换成中间指令,以便由层次结构中的后续编译器进一步编译。编译器410还可以包括各种硬件特定编译器,其生成与特定底层处理器硬件相对应的不同类型的机器代码。在一个实施例中,第一编译器410编译多线程应用程序400以生成并行线程执行(PTX)代码,然后第二编译器410执行PTX代码的即时(just-in-time,JIT)编译以在运行时生成机器特定的经编译代码420。在相关实施例中,第二编译器420可以改为在编译时生成机器可执行二进制代码。在另一个实施例中,驱动程序103外部的一个或更多个附加编译器可以首先编译多线程应用程序400,然后在上述编译步骤之前将经编译代码发送到驱动程序103。本领域技术人员将理解,在不脱离本公开的整个范围的情况下,可以应用许多编译范例。
在编译期间,编译器410识别多线程应用程序400的描述发散或重新收敛的程序行为的部分(或其经编译的导出)以及不描述任何发散或重新收敛行为的其他部分。然后,编译器410生成经编译代码420以包括内聚块(CB)424。CB 424包括在执行时不收敛、不发散或不重新收敛的指令。CB 424可以由引起收敛、发散或重新收敛的程序行为的其他指令界定。
编译器410可以实现许多技术来识别CB 424。在一个实施例中,编译器410首先将多线程应用程序400的所有区域指定为包括“统一”指令,“统一”指令可能包括在CB 424中。然后,编译器410迭代地应用不同的标准以将某些区域重新指定为包括“非统一”指令,其不能包括在CB 424中。那些重新指定的区域界定CB 424。给定标准可以指示,例如,如果两个或更多个线程在执行给定的指令子集期间写入不同的值,那么该指令子集应该被指定为“非统一”。另一个标准可以指示,例如,在同步指令之后的块中包括的任何指令都应该被指定为“非统一”。编译器410可以实现任何技术上可行的标准集来识别非统一指令,尽管通常这些标准用于识别收敛、发散或重新收敛的指令的区域。
SM 310发出各种线程组以执行CB 424。例如,如图所示,线程组426(0)、426(1)和426(2)配置为分别执行与CB 424(1)、424(2)和424(4)相关联的指令。当执行给定CB 424时,UDP 364(或数据路径核心330内的另一实体)分配和初始化URF 356内的相应的UR 432。执行给定CB 424的线程组中的每个线程可以访问相应的UR 432以获得执行给定CB 424所需的输入数据。给定的CB 424可以包括例如指向相应UR 432的指针。在所示的例子中,线程组426(0)执行CB 424(1),其中数据存储在UR 432(0)中。线程组426(1)执行CB 424(2),其中数据也存储在UR 432(0)中。线程组426(2)执行CB 424(4),其中数据存储在UR 432(1)中。一般而言,可以使用任何一个或更多个UR 432来调度任何一个或更多个线程组426以执行任何一个或更多个CB 424。
如上所述,线程组426中的每个线程可独立于线程组中的其他线程访问存储在对应UR 432内的特定数据。该特定数据可以包括特定值或特定值的数组等。因为给定线程组中的每个线程可以以所描述的方式独立地访问特定数据,所以不需要分配冗余的数据副本来支持CB 424的执行。此外,可以避免针对每个线程单独执行冗余操作,例如对于组中的所有线程计算相同的基址。图5-图7阐述了解析成内聚块的程序指令的示例性序列。
内聚块的示例性序列
图5是根据本发明的各种实施例的由线程组执行的示例性内聚块的图示。如图所示,程序500包括块510、内聚块520、序列内聚块522和块530。还如图所示,程序流从块510通过内聚块520进行到块530。程序流还从块510通过内聚块522(0)和内聚块522(1)进行到块530。在一些情况下,块510和530可以简单地包括单独的指令。
一个或更多个线程组可以配置为使用包括在数据路径核心330中的计算资源来执行程序500。此外,具有活动掩码0x0F的线程组配置为执行内聚块520,并且具有活动掩码0xF0的线程组配置为执行内聚块522(0)和内聚块522(1)。在一个实施例中,不改变给定线程组的活动掩码并且还用相同的程序计数器操作的指令可以被分组在一起成为内聚块。通常,如果线程组的活动掩码在给定边界处发生更改,则该边界任一侧的指令将分组到不同的块中。
在内聚块520的执行期间,相关联的线程组中的每个线程可以独立地访问存储在统一寄存器UR1中的数据。当内聚块520的执行完成时,UR1不活动并且可以重新初始化以准备执行内聚块522。
内聚块522(0)和522(1)可以表示程序500内的不同分支。例如,内聚块522(0)可以包括当满足第一条件时要执行的指令,而内聚块522(1)可以包括在满足第二条件时要执行的指令。通常,只要线程组中的所有线程都分支在一起,就可以产生相关的内聚块(例如522(0)和522(1))。换句话说,所有线程执行内聚块522(0)或者所有线程执行内聚块522(1)。
在内聚块522(0)或522(1)的执行期间,相关联的线程组中的每个线程还可以独立地访问存储在统一寄存器UR1中的数据。例如,每个线程可以从UR1读取给定的基址,以便执行各种计算。如上所述,只需要一个基址的副本。当内聚块522的执行完成时,UR1的使用也完成,并且UR1可以重新分配在别处。当程序流到达块530时,BSYNC指令使CBU 320同步线程组。在内聚块中可能不允许BSYNC指令,因为BSYNC实现了重新收敛的线程行为。结合图6阐述另一示例性程序。
图6是根据本发明的各种实施例的由以只读模式操作的线程组执行的示例性内聚块的图示。如图所示,程序600包括块610、内聚块620、序列内聚块622、块630和块640。还如图所示,程序流从块610通过内聚块620进行到块630。程序流还从块610通过内聚块622(0)和622(1)进行到块630。然后,程序流从块630进行到块640。具有活动掩码0xFF的线程组配置为执行程序600。
在执行期间,线程组执行块600以用数据填充统一寄存器UR2。然后,线程组以只读模式执行内聚块610以从UR2读取数据。当内聚块620的执行完成时,UR2保持活动。然后,线程组以只读模式执行内聚块622(0)和622(1)以从UR2读取数据。完成后,UR2继续保持活动,因为UR2未经修改。当程序流到达块630时,线程组同步,然后,当执行块640时退出。
在程序600的执行期间,UR2不需要在每个内聚块之后被清空和/或重新分配,因为那些内聚块仅从UR2读取数据。直到程序600在块630处收敛才写入数据。为此,该编程模式可以被称为“收敛写入”模式。与上面结合图5讨论的程序500一样,访问UR2的线程组中的每个线程可以独立于组中的其他线程这样做。因此,UR2可以由执行程序的其他部分的其他线程组重用。该方法可以节省存储器和/或减少处理器周期。特别是,不需要存储在UR2中的冗余数据副本。同样,不需要重复处理操作,因为需要这些操作结果的线程组可以共享存储在UR2中的单个结果值。
图7是根据本发明的各种实施例的由线程组执行的示例性内聚块的图示,所述线程组配置为彼此同步。如图所示,程序700包括块710、内聚块720、序列内聚块722、块730、块740以及内聚块742、内聚块744和内聚块746。还如图所示,程序流从块710通过内聚块720进行到块730。程序流还从块710通过内聚块722(0)和内聚块722(1)进行到块730。程序流然后从块730进行到块740。最后,程序流分开并流过内聚块742、块744和块746。
具有特定活动掩码的一个或更多个线程组执行块710和内聚块720和内聚块722。执行内聚块720和内聚块722的一个或更多个线程组具有不同的活动掩码,类似于上面讨论的程序500和600。而且,与程序600一样,一个或更多个线程组以只读方式使用UR2执行内聚块720和722,因此当那些内聚块完成时,不需要溢出或填充UR2。当内聚块720和内聚块722完成时,线程组执行包括在块730中的附加指令并且然后在执行块740时执行线程束级同步。在一个实施例中,块740指示必须执行后续指令的特定线程集。在程序700中的这一点,可以重新初始化UR2。一旦块740完成,就调度不同的线程组以执行内聚块742、内聚块744和内聚块746。这些线程组具有不同的活动掩码,但是每个线程组都可以访问UR2。程序700通常赋予与程序500和600类似的优点,因为每个线程组中的线程可独立访问存储在与内聚块相关联的统一寄存器中的各个数据值。
总地参考图5-图7,结合这些示例讨论的不同程序示出了如何彼此并行地执行内聚块以便有效地执行多线程应用程序。因为配置为执行内聚块的线程可以共享存储在统一寄存器中的单个数据副本,所以可以有利地节省存储空间。实现统一寄存器的另一个优点是不需要多次执行相同的操作,以向线程组中的不同线程提供相同的输入数据。相反,操作只需执行一次,并且结果存储在线程组中的每个线程都可访问的统一寄存器中。该特定方法可以有利地将地址分辨计算从数十个周期减少到小于10个周期。到目前为止讨论的技术也结合图8A-图8B以逐步方式描述。
图8A-图8B阐述了根据本发明的各种实施例的用于执行机器代码的内聚块的方法步骤的流程图。尽管结合图1-图7的系统描述了方法步骤,但是本领域技术人员将理解,配置成以任何顺序执行方法步骤的任何系统都落入本发明的范围内。
如图8A所示,方法800(A)开始于步骤802,其中图1和图4的设备驱动程序103接收与多线程软件应用程序相关联的应用程序代码,例如图4中所示的多线程应用程序400。在步骤804,设备驱动程序103内的一个或更多个编译器410解析应用程序代码以识别其中的线程不发散或不重新收敛的一个或更多个指令块。当将多线程软件应用程序编译为中间表示时、当将多线程应用程序编译成机器代码时和/或当执行与多线程应用程序相关联的即时编译时,一个或更多个编译器410可以执行解析操作。本领域技术人员将理解如何识别指令的发散区域和重新收敛区域。在步骤806,一个或更多个编译器410将所识别的指令块收集到一个或更多个相应的内聚块中。在步骤808,一个或更多个编译器410分离出发散指令和收敛指令。这些指令可以界定在步骤806识别出的内聚块。在步骤810,一个或更多个编译器输出机器代码,其被解析为内聚块。方法800(A)继续到图8B中的方法800(B)。
如图8B所示,在步骤812,设备驱动程序103启动包括内聚块的机器代码的执行。当由指令调度器358发出指令时,数据路径核心350内的元件通常执行部分或所有机器代码。在步骤814,指令调度器358确定是否执行内聚块。
如果在步骤814,指令调度器358确定不执行内聚块,则该方法进行到步骤816。在步骤816,指令调度器358向VDP 360发出可以产生发散或收敛行为的指令。VDP 360分配资源用于执行指令。该方法然后进行到步骤822,其中指令调度器358进行到后续指令块。
如果在步骤814,指令调度器358确定要执行内聚块,则该方法进行到步骤818,其中UDP 364分配并初始化统一寄存器文件356内的第一统一寄存器。在步骤820,指令调度器358调度线程组以执行包含在内聚块中的指令,其中统一数据存储在第一统一寄存器中。然后该方法进行到步骤822,其中指令调度器358进行到后续指令块。然后根据需要重复该方法直到程序退出。
通常SM 310,特别是数据路径核350可以针对任何数量的不同指令块重复地实现方法800(B)的特定步骤。此外,这些块可以并行或串行执行。
总之,向量数据路径包括统一寄存器文件(URF),其存储在线程组中的所有线程之间共享的单个数据副本。URF还可以存储操作的结果的单个副本,线程组中的每个线程被配置为执行该操作。在填充URF时,编译器解析应用程序以生成一个或更多个“内聚块”以由一个或更多个线程组执行。内聚块(CB)包括不收敛或不发散的指令子集。给定的CB还指定URF来存储要由执行CB的线程组使用的数据。当线程组中的每个线程执行依赖于给定值的操作时,URF存储该值的单个副本。每个线程都可以对该值的单个副本进行独立访问。此外,当线程组中的每个线程执行相同的操作以生成单个结果时,URF存储该结果的单个副本。每个线程都可以对该结果的单个副本进行独立访问。
本文描述的方法的一个优点是只需要代表线程组中的所有线程存储输入数据的一个副本。因此,可以节省存储空间和处理器区域。因此,所公开的方法代表了相对于传统技术的技术进步,传统技术要求为每个不同的线程存储输入数据的单独副本。所公开方法的另一个优点是多个线程不需要执行相同的操作来生成相同的结果,从而节省了处理器周期并提高了处理器效率。因此,本文描述的方法通过改进计算设备的操作而赋予技术优势。此外,由于每个线程都可以独立访问存储在URF中的单个数据副本,因此应用程序编程人员可以编写对各个线程进行粒度控制的程序,而无需考虑更高级别的线程分组。因此,熟悉单线程体系架构的程序员可以舒适地将与这些体系架构相关联的编程范例应用于多线程体系架构。
本申请中描述的任何权利要求中所记载的任何要求保护的元件和/或本申请中描述的任何元件的任何和所有组合,以任何方式落入本实施例和保护的预期范围内。
1、一些实施例包括用于执行内聚指令块的计算机实现的方法,该方法包括:解析应用程序以生成第一内聚块,其中所述第一内聚块包括不收敛且不发散的第一指令集;使得在执行所述第一内聚块时,第一线程组中的第一线程访问第一统一寄存器文件以读取第一值;以及使得在执行所述第一内聚块时,所述第一线程组中的第二线程访问所述第一统一寄存器以读取所述第一值,其中所述第二线程至少部分地与所述第一线程访问所述第一值并行地访问所述第一值。
2、如条款1所述的计算机实现的方法,还包括:解析所述应用程序以生成第二内聚块,其中所述第二内聚块包括不收敛且不发散的第二指令集;以及使得在执行所述第二内聚块时,第二线程组中的一个或更多个线程访问所述第一统一寄存器以读取所述第一值。
3、如条款1和2中任一项所述的计算机实现的方法,其中所述第一线程组与第一活动掩码相关联,所述第二线程组与不同于所述第一活动掩码的第二活动掩码相关联。
4、如条款1、2和3中任一项所述的计算机实现的方法,还包括:解析所述应用程序以生成第一块,其中所述第一块包括收敛的第三指令集;以及使得包括在所述第一线程组中的至少一个线程和包括在所述第二线程组中的至少一个线程响应于正在执行的所述第三指令集而彼此同步。
5、如条款1、2、3和4中任一项所述的计算机实现的方法,还包括:解析所述应用程序以生成第一块,其中所述第一块包括发散的第三指令集;以及使得两个或更多个其他线程组响应于正在执行的第三指令集而执行包括在两个或更多个对应的内聚块中的指令。
6、如条款1、2、3、4和5中任一项所述的计算机实现的方法,还包括:解析所述应用程序以识别第一操作,所述第一操作要由所述第一线程组中的每个线程执行,并且当所述第一操作由给定线程执行时,生成所述第一值;使得所述第一统一寄存器存储所述第一值的单个副本,其中所述第一线程组中的所述第一线程从所述第一统一寄存器中提取所述第一值而不是执行所述第一操作,所述第一线程组中的所述第二线程从所述第一统一寄存器中提取所述第一值而不是执行所述第一操作。
7、如条款1、2、3、4、5和6中任一项所述的计算机实现的方法,其中使得所述第一统一寄存器存储所述第一值的单个副本包括:使得所述第一线程组中的第三线程执行所述第一操作以生成第一值;以及使得所述第三线程将所述第一值存储在所述第一统一寄存器中。
8、如条款1、2、3、4、5、6和7中任一项所述的计算机实现的方法,还包括:解析所述应用程序以生成第一块,其中所述第一块包括收敛或发散的第二指令集;以及使得所述第一线程组经由第一数据路径执行所述第一块,其中所述第一线程组经由第二数据路径执行所述第一内聚块。
9、如条款1、2、3、4、5、6、7和8中任一项所述的计算机实现的方法,还包括:使得调度器调度所述第一线程以执行所述第一内聚块;以及使得所述调度器调度所述第二线程以执行所述第一内聚块,其中所述调度器独立于调度所述第二线程来调度所述第一线程。
10、一些实施例包括存储程序指令的非暂时性计算机可读介质,所述程序指令在由处理器执行时,通过执行以下步骤使得处理器执行内聚指令块:解析应用程序以生成第一内聚块,其中所述第一内聚块包括不收敛且不发散的第一指令集;使得在执行所述第一内聚块时,第一线程组中的第一线程访问第一统一寄存器以读取第一值;以及使得在执行所述第一内聚块时,所述第一线程组中的第二线程访问所述第一统一寄存器以读取所述第一值,其中所述第二线程至少部分地与所述第一线程访问所述第一值并行地访问所述第一值。
11、如条款10所述的非暂时性计算机可读介质,还包括以下步骤:解析所述应用程序以生成第二内聚块,其中所述第二内聚块包括不收敛且不发散的第二指令集;以及使得在执行所述第二内聚块时,第二线程组中的一个或更多个线程访问所述第一统一寄存器以读取所述第一值。
12、如条款10和11中任一项所述的非暂时性计算机可读介质,还包括以下步骤:解析所述应用程序以生成第一块,其中所述第一块包括收敛的第三指令集;以及使得包括在所述第一线程组中的至少一个线程和包括在所述第二线程组中的至少一个线程响应于正在执行的所述第三指令集而彼此同步。
13、如条款10、11和12中任一项所述的非暂时性计算机可读介质,还包括以下步骤:解析所述应用程序以生成第一块,其中所述第一块包括发散的第三指令集;以及使得两个或更多个其他线程组响应于正在执行的所述第三指令集而执行包括在两个或更多个对应的内聚块中的指令。
14、如条款10、11、12和13中任一项所述的非暂时性计算机可读介质,还包括以下步骤:解析所述应用程序以识别第一操作,所述第一操作要由所述第一线程组中的每个线程执行,并且当所述第一操作由给定线程执行时,生成所述第一值;使得所述第一统一寄存器存储所述第一值的单个副本,其中所述第一线程组中的所述第一线程从所述第一统一寄存器中提取所述第一值而不是执行所述第一操作,所述第一线程组中的所述第二线程从所述第一统一寄存器中提取所述第一值而不是执行所述第一操作,并且其中所述第一线程组中的第三线程执行所述第一操作以生成所述第一值并将所述第一值存储在所述第一统一寄存器中。
15、如条款10、11、12、13和14中任一项所述的非暂时性计算机可读介质,其中第一线程组经由包括第一统一寄存器的第一数据路径执行第一内聚块。
16、如条款10、11、12、13、14和15中任一项所述的非暂时性计算机可读介质,还包括使得第三线程组经由包括第一向量寄存器文件的第二数据路径执行第一指令块的步骤,其中第一块包括收敛或发散的第二指令集。
17、如条款10、11、12、13、14、15和16中任一项所述的非暂时性计算机可读介质,其中第一内聚块包括指向第一统一寄存器的第一指针。
18、一些实施例包括用于执行内聚指令块的系统,包括:存储器,其存储设备驱动程序;和处理器,所述处理器在执行所述设备驱动程序时,被配置为执行以下步骤:解析应用程序以生成第一内聚块,其中所述第一内聚块包括不收敛且不发散的第一指令集,使得在执行所述第一内聚块时,第一线程组中的第一线程访问第一统一寄存器以读取第一值,以及使得在执行所述第一内聚块时,所述第一线程组中的第二线程访问所述第一统一寄存器以读取所述第一值,其中所述第二线程至少部分地与所述第一线程访问所述第一值并行地访问所述第一值。
19、如条款18所述的系统,还包括:数据路径核心,包括:向量数据路径,所述向量数据路径执行发散或收敛的指令,统一数据路径,所述统一数据路径执行不发散且不收敛的指令,以及统一寄存器文件,所述统一寄存器文件耦合到所述向量数据路径和所述统一数据路径,并且包含所述第一统一寄存器。
20、如条款18和19中任一项所述的系统,其中所述统一数据路径包括:多个收集器,所述收集器从所述第一统一寄存器读取所述第一值;以及多个数学运算符,所述数学运算符利用所述第一值执行一个或更多个运算。
已经出于说明的目的呈现了各种实施例的描述,但是并不旨在穷举或限于所公开的实施例。在不脱离所描述的实施例的范围和精神的情况下,许多修改和变化对于本领域普通技术人员来说是显而易见的。例如,本文描述的各种实施例可以在涉及常量值(例如射线跟踪)的任何类型的图形操作中实现。然而,各种实施例可以在任何图形系统或图形环境中、在任何云计算环境中、在一个或更多个用于游戏、图形、视频流等目的的服务器机器内、或者在任何车辆导航、信息娱乐或仪表板控制器系统(例如,在汽车中找到的)中更广泛地实现。NVIDIA GeForce 是网络游戏服务的示例,其可以利用各种实施例来增强性能和整体用户体验。
本实施例的各方面可以体现为系统、方法或计算机程序产品。因此,本公开的各方面可以采取完全硬件实施例、完全软件实施例(包括固件、常驻软件、微代码等)或者组合软件和硬件方面的实施例的形式,这些实施例在本文通常可以被称为“模块”或“系统”。此外,本公开的各方面可以采取体现在一个或更多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质具有包含在其上的计算机可读程序代码。
可以利用一个或更多个计算机可读介质的任何组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以是例如但不限于电子、磁、光、电磁、红外或半导体系统、装置或设备,或者前述任何合适的组合。计算机可读存储介质的更具体示例(非详尽列表)将包括以下内容:具有一条或更多条电线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪存)、光纤、便携式光盘只读存储器(CD-ROM)、光学存储设备、磁存储设备或任何前述的合适组合。在本文件的上下文中,计算机可读存储介质可以是任何有形介质,其可以包含或存储由指令执行系统、装置或设备使用或与其结合使用的程序。
根据本公开的实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了上文本公开的各方面。应当理解,流程图图示和/或框图的每个框以及流程图图示和/或框图中的框的组合可以由计算机程序指令实现。这些计算机程序指令可以被提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,使得经由计算机的处理器或其他可编程数据处理装置执行指令,使得流程图和/或框图块或块中指定的功能/动作能够实现。这些处理器可以是但不限于通用处理器、专用处理器、特定应用程序处理器或现场可编程处理器或门阵列。
附图中的流程图和框图示出了根据本公开的各种实施例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。在这方面,流程图或框图中的每个框可以表示代码的模块、片段或部分,其包括用于实现指定的逻辑功能的一个或更多个可执行指令。还应注意,在一些替代实施方式中,框中提到的功能可以不按图中所示的顺序发生。例如,连续示出的两个框实际上可以基本上同时执行,或者这些框有时可以以相反的顺序执行,取决于所涉及的功能。还应注意,框图和/或流程图图示中的每个框以及框图和/或流程图图示中的框的组合可以由执行指定功能或动作的基于专用硬件的系统或专用硬件和计算机指令的组合来实现。
虽然前述内容针对本公开的实施例,但是可以在不脱离本公开的基本范围的情况下设计本公开的其他和进一步的实施例,并且本公开的范围由所附权利要求确定。
Claims (20)
1.一种用于执行内聚指令块的计算机实现的方法,所述方法包括:
解析应用程序以生成第一内聚块,其中所述第一内聚块包括不收敛且不发散的第一指令集,并且所述第一内聚块指定在第一统一寄存器文件中的第一统一寄存器,所述第一统一寄存器存储用于执行所述第一内聚块的第一线程组的数据;
使得在执行所述第一内聚块时,所述第一线程组中的第一线程访问所述第一统一寄存器以读取第一值;以及
使得在执行所述第一内聚块时,所述第一线程组中的第二线程访问所述第一统一寄存器以读取所述第一值,其中所述第二线程至少部分地与所述第一线程访问所述第一值并行地访问所述第一值。
2.根据权利要求1所述的计算机实现的方法,还包括:
解析所述应用程序以生成第二内聚块,其中所述第二内聚块包括不收敛且不发散的第二指令集;以及
使得在执行所述第二内聚块时,第二线程组中的一个或更多个线程访问所述第一统一寄存器以读取所述第一值。
3.根据权利要求2所述的计算机实现的方法,其中,所述第一线程组与第一活动掩码相关联,所述第二线程组与不同于所述第一活动掩码的第二活动掩码相关联。
4.根据权利要求2所述的计算机实现的方法,还包括:
解析所述应用程序以生成第一块,其中所述第一块包括收敛的第三指令集;以及
使得包括在所述第一线程组中的至少一个线程和包括在所述第二线程组中的至少一个线程响应于正在执行的所述第三指令集而彼此同步。
5.根据权利要求2所述的计算机实现的方法,还包括:
解析所述应用程序以生成第一块,其中所述第一块包括发散的第三指令集;以及
使得两个或更多个其他线程组响应于正在执行的第三指令集而执行包括在两个或更多个对应的内聚块中的指令。
6.根据权利要求1所述的计算机实现的方法,还包括:
解析所述应用程序以识别第一操作,所述第一操作要由所述第一线程组中的每个线程执行,并且当所述第一操作由给定线程执行时,生成所述第一值;
使得所述第一统一寄存器存储所述第一值的单个副本,其中所述第一线程组中的所述第一线程从所述第一统一寄存器中提取所述第一值而不是执行所述第一操作,所述第一线程组中的所述第二线程从所述第一统一寄存器中提取所述第一值而不是执行所述第一操作。
7.根据权利要求6所述的计算机实现的方法,其中使得所述第一统一寄存器存储所述第一值的单个副本包括:
使得所述第一线程组中的第三线程执行所述第一操作以生成第一值;以及
使得所述第三线程将所述第一值存储在所述第一统一寄存器中。
8.根据权利要求1所述的计算机实现的方法,还包括:
解析所述应用程序以生成第一块,其中所述第一块包括收敛或发散的第二指令集;以及
使得所述第一线程组经由第一数据路径执行所述第一块,
其中所述第一线程组经由第二数据路径执行所述第一内聚块。
9.根据权利要求1所述的计算机实现的方法,还包括:
使得调度器调度所述第一线程以执行所述第一内聚块;以及
使得所述调度器调度所述第二线程以执行所述第一内聚块,其中所述调度器独立于调度所述第二线程来调度所述第一线程。
10.一种非暂时性计算机可读介质,存储程序指令,所述程序指令在由处理器执行时,通过执行以下步骤使所述处理器执行内聚指令块:
解析应用程序以生成第一内聚块,其中所述第一内聚块包括不收敛且不发散的第一指令集,并且所述第一内聚块指定在第一统一寄存器文件中的第一统一寄存器,所述第一统一寄存器存储用于执行所述第一内聚块的第一线程组的数据;
使得在执行所述第一内聚块时,所述第一线程组中的第一线程访问所述第一统一寄存器以读取第一值;以及
使得在执行所述第一内聚块时,所述第一线程组中的第二线程访问所述第一统一寄存器以读取所述第一值,其中所述第二线程至少部分地与所述第一线程访问所述第一值并行地访问所述第一值。
11.根据权利要求10所述的非暂时性计算机可读介质,还包括以下步骤:
解析所述应用程序以生成第二内聚块,其中所述第二内聚块包括不收敛且不发散的第二指令集;以及
使得在执行所述第二内聚块时,第二线程组中的一个或更多个线程访问所述第一统一寄存器以读取所述第一值。
12.根据权利要求11所述的非暂时性计算机可读介质,还包括以下步骤:
解析所述应用程序以生成第一块,其中所述第一块包括收敛的第三指令集;以及
使得包括在所述第一线程组中的至少一个线程和包括在所述第二线程组中的至少一个线程响应于正在执行的所述第三指令集而彼此同步。
13.根据权利要求11所述的非暂时性计算机可读介质,还包括以下步骤:
解析所述应用程序以生成第一块,其中所述第一块包括发散的第三指令集;以及
使得两个或更多个其他线程组响应于正在执行的所述第三指令集而执行包括在两个或更多个对应的内聚块中的指令。
14.根据权利要求10所述的非暂时性计算机可读介质,还包括以下步骤:
解析所述应用程序以识别第一操作,所述第一操作要由所述第一线程组中的每个线程执行,并且当所述第一操作由给定线程执行时,生成所述第一值;
使得所述第一统一寄存器存储所述第一值的单个副本,其中所述第一线程组中的所述第一线程从所述第一统一寄存器中提取所述第一值而不是执行所述第一操作,所述第一线程组中的所述第二线程从所述第一统一寄存器中提取所述第一值而不是执行所述第一操作,并且其中所述第一线程组中的第三线程执行所述第一操作以生成所述第一值并将所述第一值存储在所述第一统一寄存器中。
15.根据权利要求10所述的非暂时性计算机可读介质,其中,所述第一线程组经由包括所述第一统一寄存器的第一数据路径来执行所述第一内聚块。
16.根据权利要求15所述的非暂时性计算机可读介质,还包括使得第三线程组经由包括第一向量寄存器文件的第二数据路径执行第一指令块的步骤,其中第一块包括收敛或发散的第二指令集。
17.根据权利要求10所述的非暂时性计算机可读介质,其中,所述第一内聚块包括指向所述第一统一寄存器的第一指针。
18.一种用于执行内聚指令块的系统,包括:
存储器,其存储设备驱动程序;和
处理器,所述处理器在执行所述设备驱动程序时,被配置为执行以下步骤:
解析应用程序以生成第一内聚块,其中所述第一内聚块包括不收敛且不发散的第一指令集,并且所述第一内聚块指定在第一统一寄存器文件中的第一统一寄存器,所述第一统一寄存器存储用于执行所述第一内聚块的第一线程组的数据,
使得在执行所述第一内聚块时,所述第一线程组中的第一线程访问所述第一统一寄存器以读取第一值,以及
使得在执行所述第一内聚块时,所述第一线程组中的第二线程访问所述第一统一寄存器以读取所述第一值,其中所述第二线程至少部分地与所述第一线程访问所述第一值并行地访问所述第一值。
19.根据权利要求18所述的系统,还包括:
数据路径核心,包括:
向量数据路径,所述向量数据路径执行发散或收敛的指令,
统一数据路径,所述统一数据路径执行不发散且不收敛的指令,以及
所述第一统一寄存器文件,所述第一统一寄存器文件耦合到所述向量数据路径和所述统一数据路径,并且包含所述第一统一寄存器。
20.根据权利要求19所述的系统,其中所述统一数据路径包括:
多个收集器,所述收集器从所述第一统一寄存器读取所述第一值;以及
多个数学运算符,所述数学运算符利用所述第一值执行一个或更多个运算。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762586031P | 2017-11-14 | 2017-11-14 | |
US62/586,031 | 2017-11-14 | ||
US15/897,092 | 2018-02-14 | ||
US15/897,092 US10866806B2 (en) | 2017-11-14 | 2018-02-14 | Uniform register file for improved resource utilization |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110032395A CN110032395A (zh) | 2019-07-19 |
CN110032395B true CN110032395B (zh) | 2023-05-26 |
Family
ID=66431298
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811352961.3A Active CN110032395B (zh) | 2017-11-14 | 2018-11-14 | 用于提高资源利用率的统一寄存器文件 |
CN201811352963.2A Active CN110008009B (zh) | 2017-11-14 | 2018-11-14 | 在运行时绑定常量以提高资源利用率 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811352963.2A Active CN110008009B (zh) | 2017-11-14 | 2018-11-14 | 在运行时绑定常量以提高资源利用率 |
Country Status (2)
Country | Link |
---|---|
US (2) | US10877757B2 (zh) |
CN (2) | CN110032395B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10748323B2 (en) * | 2018-12-04 | 2020-08-18 | Intel Corporation | GPU based shader constant folding |
WO2021162439A1 (en) * | 2020-02-14 | 2021-08-19 | Samsung Electronics Co., Ltd. | Electronic device performing restoration on basis of comparison of constant value and control method thereof |
US11474798B2 (en) * | 2020-08-24 | 2022-10-18 | Huawei Technologies Co., Ltd. | Method and system for optimizing access to constant memory |
CN114968358A (zh) * | 2020-10-21 | 2022-08-30 | 上海壁仞智能科技有限公司 | 配置向量运算系统中的协作线程束的装置和方法 |
US11487565B2 (en) * | 2020-10-29 | 2022-11-01 | Hewlett Packard Enterprise Development Lp | Instances of just-in-time (JIT) compilation of code using different compilation settings |
CN113284038B (zh) * | 2021-03-05 | 2022-10-18 | 上海壁仞智能科技有限公司 | 用于执行计算的方法、计算设备、计算系统和存储介质 |
US20220300352A1 (en) * | 2021-03-19 | 2022-09-22 | Oracle International Corporation | Determining a resolution state of an anchor constant associated with an application programming interface (api) point |
CN114281414B (zh) * | 2021-12-29 | 2022-12-27 | 海飞科(南京)信息技术有限公司 | Aigpu架构中urf寄存器的数据写入方法 |
US20230221960A1 (en) * | 2022-01-13 | 2023-07-13 | Nvidia Corporation | Location agnostic data access |
CN114968361B (zh) * | 2022-06-02 | 2024-04-30 | 上海壁仞科技股份有限公司 | 存储有程序的机器可读介质、计算机系统和一种操作方法 |
CN115934102B (zh) * | 2022-12-29 | 2023-12-12 | 格兰菲智能科技有限公司 | 通用寄存器动态分配方法、装置、计算机设备和存储介质 |
CN116483536B (zh) * | 2023-04-24 | 2024-05-10 | 上海芷锐电子科技有限公司 | 数据调度方法、计算芯片及电子设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0665125A1 (de) * | 1994-01-26 | 1995-08-02 | Rolf Prof. Dr. Hinz | Staffelkartei mit vorzugsweise liegenden Karteiblättern |
WO2009126777A1 (en) * | 2008-04-10 | 2009-10-15 | Ibiquity Digital Corporation | Broadcast equipment communication protocol |
Family Cites Families (49)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6745386B1 (en) * | 2000-03-09 | 2004-06-01 | Sun Microsystems, Inc. | System and method for preloading classes in a data processing device that does not have a virtual memory manager |
US7464253B2 (en) * | 2006-10-02 | 2008-12-09 | The Regents Of The University Of California | Tracking multiple dependent instructions with instruction queue pointer mapping table linked to a multiple wakeup table by a pointer |
EP2523101B1 (en) * | 2006-11-14 | 2014-06-04 | Soft Machines, Inc. | Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes |
US20080250499A1 (en) * | 2007-03-30 | 2008-10-09 | Motorola, Inc. | Method and Apparatus for Reducing Buffer Overflow Exploits by Computer Viruses |
US9043774B2 (en) * | 2008-02-12 | 2015-05-26 | William G. Bently | Systems and methods for information flow analysis |
US8843682B2 (en) * | 2010-05-18 | 2014-09-23 | Lsi Corporation | Hybrid address mutex mechanism for memory accesses in a network processor |
US8335911B2 (en) * | 2009-05-21 | 2012-12-18 | Oracle America, Inc. | Dynamic allocation of resources in a threaded, heterogeneous processor |
US8732671B2 (en) * | 2010-02-26 | 2014-05-20 | Red Hat, Inc. | Generating stack traces of call stacks that lack frame pointers |
US8631223B2 (en) * | 2010-05-12 | 2014-01-14 | International Business Machines Corporation | Register file supporting transactional processing |
US9529574B2 (en) * | 2010-09-23 | 2016-12-27 | Apple Inc. | Auto multi-threading in macroscalar compilers |
US8954986B2 (en) * | 2010-12-17 | 2015-02-10 | Intel Corporation | Systems and methods for data-parallel processing |
US9766893B2 (en) * | 2011-03-25 | 2017-09-19 | Intel Corporation | Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines |
US8566537B2 (en) * | 2011-03-29 | 2013-10-22 | Intel Corporation | Method and apparatus to facilitate shared pointers in a heterogeneous platform |
US8806168B2 (en) * | 2011-09-12 | 2014-08-12 | Microsoft Corporation | Producer-consumer data transfer using piecewise circular queue |
US9830158B2 (en) * | 2011-11-04 | 2017-11-28 | Nvidia Corporation | Speculative execution and rollback |
US9009686B2 (en) * | 2011-11-07 | 2015-04-14 | Nvidia Corporation | Algorithm for 64-bit address mode optimization |
US10255228B2 (en) * | 2011-12-06 | 2019-04-09 | Nvidia Corporation | System and method for performing shaped memory access operations |
US9798548B2 (en) * | 2011-12-21 | 2017-10-24 | Nvidia Corporation | Methods and apparatus for scheduling instructions using pre-decode data |
US20130166882A1 (en) * | 2011-12-22 | 2013-06-27 | Jack Hilaire Choquette | Methods and apparatus for scheduling instructions without instruction decode |
US10007527B2 (en) * | 2012-03-05 | 2018-06-26 | Nvidia Corporation | Uniform load processing for parallel thread sub-sets |
US9262174B2 (en) * | 2012-04-05 | 2016-02-16 | Nvidia Corporation | Dynamic bank mode addressing for memory access |
US9424099B2 (en) * | 2012-06-01 | 2016-08-23 | Advanced Micro Devices, Inc. | Method and system for synchronization of workitems with divergent control flow |
EP2891101B1 (en) * | 2012-08-31 | 2016-11-09 | Iappsecure Solutions Pvt. Ltd. | A system for analyzing applications in order to find security and quality issues |
US8984542B2 (en) * | 2012-11-30 | 2015-03-17 | Facebook, Inc. | Method and system for binding objects in dynamic programming languages using caching techniques |
US10235208B2 (en) * | 2012-12-11 | 2019-03-19 | Nvidia Corporation | Technique for saving and restoring thread group operating state |
US9229717B2 (en) * | 2012-12-11 | 2016-01-05 | Nvidia Corporation | Register allocation for clustered multi-level register files |
US9639371B2 (en) * | 2013-01-29 | 2017-05-02 | Advanced Micro Devices, Inc. | Solution to divergent branches in a SIMD core using hardware pointers |
GB2502857B (en) * | 2013-03-05 | 2015-01-21 | Imagination Tech Ltd | Migration of data to register file cache |
US11487673B2 (en) * | 2013-03-14 | 2022-11-01 | Nvidia Corporation | Fault buffer for tracking page faults in unified virtual memory system |
US8756593B2 (en) * | 2013-06-05 | 2014-06-17 | Splunk Inc. | Map generator for representing interrelationships between app features forged by dynamic pointers |
US9697003B2 (en) * | 2013-06-07 | 2017-07-04 | Advanced Micro Devices, Inc. | Method and system for yield operation supporting thread-like behavior |
US9459876B2 (en) * | 2013-07-18 | 2016-10-04 | Nvidia Corporation | System, method, and computer program product for managing divergences and synchronization points during thread block execution by using a double sided queue for token storage |
US9251071B2 (en) * | 2013-08-30 | 2016-02-02 | Apple Inc. | Concurrent inline cache optimization in accessing dynamically typed objects |
US9652284B2 (en) * | 2013-10-01 | 2017-05-16 | Qualcomm Incorporated | GPU divergence barrier |
US9207919B2 (en) * | 2014-01-17 | 2015-12-08 | Nvidia Corporation | System, method, and computer program product for bulk synchronous binary program translation and optimization |
US10067768B2 (en) * | 2014-07-18 | 2018-09-04 | Nvidia Corporation | Execution of divergent threads using a convergence barrier |
EP3106982B1 (en) * | 2015-06-18 | 2021-03-10 | ARM Limited | Determination of branch convergence in a sequence of program instructions |
US9767037B2 (en) * | 2015-06-26 | 2017-09-19 | Intel Corporation | Technologies for position-independent persistent memory pointers |
US9703789B2 (en) * | 2015-07-27 | 2017-07-11 | Sas Institute Inc. | Distributed data set storage and retrieval |
US10108417B2 (en) * | 2015-08-14 | 2018-10-23 | Qualcomm Incorporated | Storing narrow produced values for instruction operands directly in a register map in an out-of-order processor |
US10445204B2 (en) * | 2015-09-25 | 2019-10-15 | Intel Corporation | Instruction and logic for interrupt and exception handling |
US9921838B2 (en) * | 2015-10-02 | 2018-03-20 | Mediatek Inc. | System and method for managing static divergence in a SIMD computing architecture |
US9772925B2 (en) * | 2015-10-22 | 2017-09-26 | Microsoft Technology Licensing, Llc | Storage access debugging with disassembly and symbol entries |
US10684891B2 (en) * | 2016-03-11 | 2020-06-16 | Intel Corporation | Memory operand descriptors |
US10649786B2 (en) * | 2016-12-01 | 2020-05-12 | Cisco Technology, Inc. | Reduced stack usage in a multithreaded processor |
US11537397B2 (en) * | 2017-03-27 | 2022-12-27 | Advanced Micro Devices, Inc. | Compiler-assisted inter-SIMD-group register sharing |
US10453427B2 (en) * | 2017-04-01 | 2019-10-22 | Intel Corporation | Register spill/fill using shared local memory space |
US20180356964A1 (en) * | 2017-06-07 | 2018-12-13 | Sitting Man, Llc | Methods, systems, and computer program products for intergrating configuration, monitoring, and operations |
US10430189B2 (en) * | 2017-09-19 | 2019-10-01 | Intel Corporation | GPU register allocation mechanism |
-
2018
- 2018-02-14 US US15/897,090 patent/US10877757B2/en active Active
- 2018-02-14 US US15/897,092 patent/US10866806B2/en active Active
- 2018-11-14 CN CN201811352961.3A patent/CN110032395B/zh active Active
- 2018-11-14 CN CN201811352963.2A patent/CN110008009B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0665125A1 (de) * | 1994-01-26 | 1995-08-02 | Rolf Prof. Dr. Hinz | Staffelkartei mit vorzugsweise liegenden Karteiblättern |
WO2009126777A1 (en) * | 2008-04-10 | 2009-10-15 | Ibiquity Digital Corporation | Broadcast equipment communication protocol |
Non-Patent Citations (3)
Title |
---|
《An Accurate GPU Performance Model for Effective Control Flow Divergence Optimization》;Yun Liang et al.;《IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems》;20151117;正文第3页左栏第2段 * |
《Convergence and scalarization for data-parallel architectures》;Yunsup Lee et al.;《Proceedings of the 2013 IEEE/ACM International Symposium on Code Generation and Optimization (CGO)》;20130408;正文第1页右栏第3段-第4页左栏第3段 * |
《Energy Efficient Affine Register File for GPU Microarchitecture》;Shao-Chung Wang et al.;《2016 45th International Conference on Parallel Processing Workshops (ICPPW)》;20160926;正文第1页左栏第1段-第5页左栏倒数第1段 * |
Also Published As
Publication number | Publication date |
---|---|
CN110008009B (zh) | 2023-06-09 |
US10877757B2 (en) | 2020-12-29 |
CN110008009A (zh) | 2019-07-12 |
US20190146817A1 (en) | 2019-05-16 |
US20190146796A1 (en) | 2019-05-16 |
US10866806B2 (en) | 2020-12-15 |
CN110032395A (zh) | 2019-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110032395B (zh) | 用于提高资源利用率的统一寄存器文件 | |
US11847508B2 (en) | Convergence among concurrently executing threads | |
US9830156B2 (en) | Temporal SIMT execution optimization through elimination of redundant operations | |
US8639882B2 (en) | Methods and apparatus for source operand collector caching | |
US9142005B2 (en) | Efficient placement of texture barrier instructions | |
US7937567B1 (en) | Methods for scalably exploiting parallelism in a parallel processing system | |
CN108830777B (zh) | 用于全面同步执行线程的技术 | |
TWI489392B (zh) | 多個應用程式分享的圖形處理單元 | |
US9229717B2 (en) | Register allocation for clustered multi-level register files | |
US9697006B2 (en) | Technique for performing memory access operations via texture hardware | |
US10489200B2 (en) | Hierarchical staging areas for scheduling threads for execution | |
CN112130969A (zh) | 有效执行经由任务图指定的工作负载 | |
CN112241290A (zh) | 用于在并行处理单元中有效执行数据规约的技术 | |
US20140232729A1 (en) | Power efficient attribute handling for tessellation and geometry shaders | |
GB2491490A (en) | Emitting coherent output from multiple execution threads using the printf command | |
US9720858B2 (en) | Technique for performing memory access operations via texture hardware | |
CN113454592A (zh) | 存储器管理系统 | |
US20190278574A1 (en) | Techniques for transforming serial program code into kernels for execution on a parallel processor | |
US9442759B2 (en) | Concurrent execution of independent streams in multi-channel time slice groups | |
CN111240745A (zh) | 交叉执行的增强型标量向量双管线架构 | |
CN115437799A (zh) | 高效同步多个程序线程的技术 | |
US9147224B2 (en) | Method for handling state transitions in a network of virtual processing nodes | |
US8976185B2 (en) | Method for handling state transitions in a network of virtual processing nodes | |
US20230297426A1 (en) | Reconfiguring register and shared memory usage in thread arrays | |
US10817295B2 (en) | Thread-level sleep in a multithreaded architecture |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |