CN110008009A - 在运行时绑定常量以提高资源利用率 - Google Patents
在运行时绑定常量以提高资源利用率 Download PDFInfo
- Publication number
- CN110008009A CN110008009A CN201811352963.2A CN201811352963A CN110008009A CN 110008009 A CN110008009 A CN 110008009A CN 201811352963 A CN201811352963 A CN 201811352963A CN 110008009 A CN110008009 A CN 110008009A
- Authority
- CN
- China
- Prior art keywords
- thread
- instruction
- constant
- pointer
- memory
- 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.)
- Granted
Links
- 230000015654 memory Effects 0.000 claims abstract description 105
- 238000000034 method Methods 0.000 claims description 49
- 239000000463 material Substances 0.000 claims description 6
- 239000012141 concentrate Substances 0.000 claims description 5
- 238000012545 processing Methods 0.000 description 67
- 238000010586 diagram Methods 0.000 description 19
- 230000006870 function Effects 0.000 description 16
- 239000000872 buffer Substances 0.000 description 15
- 238000005516 engineering process Methods 0.000 description 11
- 238000004891 communication Methods 0.000 description 9
- 238000013316 zoning Methods 0.000 description 8
- 238000004590 computer program Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 238000009877 rendering Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 238000012805 post-processing Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000010025 steaming Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000000712 assembly Effects 0.000 description 2
- 238000000429 assembly Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 241000208340 Araliaceae Species 0.000 description 1
- 241001269238 Data Species 0.000 description 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 1
- 235000003140 Panax quinquefolius Nutrition 0.000 description 1
- 238000012884 algebraic function Methods 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000008571 general function Effects 0.000 description 1
- 235000008434 ginseng Nutrition 0.000 description 1
- 210000003128 head Anatomy 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 210000003733 optic disk Anatomy 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000002310 reflectometry Methods 0.000 description 1
- 230000003362 replicative effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
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
即时(JIT)编译器在运行时将常量绑定到特定的存储器位置。JIT编译器解析源自多线程应用程序的程序代码,并识别引用统一常量的指令。然后,JIT编译器确定指针链,其源自多线程应用程序中指定的根表内,并以统一常量结束。JIT编译器生成用于遍历指针链的附加指令,并将这些指令插入到程序代码中。并行处理器执行此经编译的代码,并且在这样做时,使线程遍历指针链并在运行时将统一常量绑定到统一寄存器。然后,在并行处理器上执行的一组线程中的每个线程可以访问统一常量。
Description
相关申请的交叉引用
本申请要求于2017年11月14日提交的序列号为62/586,031、标题为“用于提高资源利用率的统一数据路径(Uniform Datapath for Improved Resource Utilization)”的美国临时专利申请的优先权权益。该相关申请的主题内容在此通过引用并入本文。
背景技术
技术领域
本发明的实施例总地涉及多线程处理,更具体地,涉及在运行时绑定常量以提高资源利用率。
相关技术的描述
传统的多线程应用程序可以在并行处理器上执行。在这样的实现方式中,多个线程通常彼此并行地执行多线程应用程序的部分以执行各种计算。例如,线程集中的每个线程可以同时执行图形处理管线的像素着色器阶段,以在渲染图形场景时计算像素的颜色值。
在执行期间,线程常常基于一个或更多个常量执行它们各自的计算。常量通常是浮点或整数值,其在应用程序的生命周期内不会发生变化。例如,给定常量可以定义驻留在图形场景中的特定材料的反射率。这些常量的值通常存储在常量库中。在操作中,执行多线程应用程序的部分的线程集访问该常量库以便执行计算。比如上面所提到的。例如,当渲染包括具有给定反射率值的材料的图形场景时,该线程集中的每个线程将从该常量库读取该反射率值。然后,每个线程将基于反射率值生成一个或更多个像素的颜色值。
传统的并行处理器通常具有有限数量的常量库(在一些实现中为十四个),因此仅能存储固定数量的常量值。因此,在传统并行处理器上执行的多线程应用程序通常被约束为仅基于固定数量的常量值执行计算。这种约束具有某些缺点。特别地,某些标准应用程序编程接口(API)要求多线程应用程序可以访问比传统并行处理器中包括的有限数量的常量库可以存储的数量多得多的常量。在不提供对更多常量的访问的情况下,传统的并行处理器只能实现对这些标准API的部分合规。仅部分符合标准API的并行处理器有着可能不被视为开发行业内多线程应用程序的可接受平台的风险。
如前所述,本领域需要的是用于在执行多线程应用程序时存储和访问常量的更有效率的技术。
发明内容
本发明的一个实施例阐述了用于绑定(bind)常量的计算机实现的方法,包括基于包括在多线程应用程序中的第一指令确定第一指针链,其中第一指针链指示与第一常量相关联的第一存储器位置,基于第一指针链生成附加指令集,使得第一线程集中包括的第一线程执行该附加指令集,其中第一线程在执行该附加指令集时将第一常量复制到第二存储器位置,以及使得第一线程集中包括的每个线程执行第二指令,其中第一线程集中包括的每个线程在执行第二指令时使用第一常量执行第一操作。
所公开方法的一个优点是多线程应用程序可以引用许多常量,其不受专用常量库的存储容量限制。因此,实现此方法的并行处理器可完全符合DX12 API的第三层(Tier 3)。
附图说明
因此,可以通过参考实施例获得可以详细地理解本发明的上述特征的方式、上面简要概述的本发明的更具体的描述,其中一些实施例在附图中示出。然而,应当注意,附图仅示出了本发明的典型实施例,因此不应视为限制本发明的范围,因为本发明可允许其他同等有效的实施例。
图1是被配置为实现本发明的一个或更多个方面的计算机系统的框图;
图2是根据本发明的各种实施例的包括在图1的并行处理子系统中的并行处理单元的框图;
图3A是根据本发明的各种实施例的包括在图2的并行处理单元中的通用处理集群的框图;
图3B是根据本发明的各种实施例的图3A的流式多处理器的更详细的图示;
图4示出了根据本发明的各种实施例的如何将统一寄存器分配给线程组用于执行指令块;
图5示出了根据本发明的各种实施例的图4的根表如何经由指针链引用常量;
图6示出了根据本发明的各种实施例的图4的编译器如何生成用于遍历指针链的指令;
图7是根据本发明的各种实施例的用于在运行时绑定常量的方法步骤的流程图。
具体实施方式
在以下描述中,阐述了许多具体细节以提供对本发明的更透彻的理解。然而,对于本领域技术人员显而易见的是,可以在没有一个或更多个这些具体细节中的情况下实践本发明。
如上所述,传统的并行处理器具有有限数量的常量库,因此,只能存储固定数量的常量值。因此,在这样的处理器上执行的传统多线程应用程序不能执行具有多于固定数量的常量值的计算。在不提供对更大数量的常量的访问的情况下,传统的并行处理器只能实现对行业标准API的有限合规,更具体地,不能符合DirectX 12(DX12)API的第三层。与DX12的第三层不合规的并行处理器可能不被视为开发多线程应用程序的可接受平台。
为了解决该问题,本发明的实施例包括被配置为在运行时绑定常量的即时(just-in-time,JIT)编译器。JIT编译器解析源自多线程应用程序的程序代码,并识别引用统一常量的指令。然后,JIT编译器确定指针链,其源自多线程应用程序中指定的根表,并以统一常量结束。JIT编译器生成用于遍历指针链的附加指令,并将这些指令插入到程序代码中。并行处理器执行该经编译的代码,并在此过程中遍历指针链以在运行时将统一常量绑定到统一寄存器。然后,在并行处理器上执行的一组线程中的每个线程可以访问统一常量。
这种方法的一个优点是多线程应用程序可以引用许多常量值,这些常量值仅受可用堆存储器的量的限制,而不受常量库的存储容量的限制。因此,实现该方法的并行处理器可完全符合DX12 API的第三层。因为符合行业标准API对于并行处理器的成功是至关重要的,所以本文公开的方法代表了相对于不能提供这种合规性的传统技术的重大技术改进。
系统总览
图1是被配置为实现本发明的一个或更多个方面的计算机系统100的框图。概括地说,计算机系统100可以是包括存储器、并行处理单元或图形处理单元和中央处理单元的任何系统。然而,如图所示,计算机系统100包括但不限于中央处理单元(CPU)102和系统存储器104,系统存储器104经由存储器桥105和通信路径113耦合到并行处理子系统112。存储器桥105进一步经由通信路径106耦合到I/O(输入/输出)桥107,并且I/O桥107又耦合到开关116。
在操作中,I/O桥107被配置为从输入设备108(诸如键盘或鼠标)接收用户输入信息,并且将输入信息经由通信路径106和存储器桥105转发到CPU 102以进行处理。开关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(加速图形端口)、超传输(HyperTransport)或任何其他总线或点对点通信协议。
在一些实施例中,并行处理子系统112包括将像素递送到显示设备110的图形子系统,显示设备110可以是任何常规的阴极射线管、液晶显示器、发光二极管显示器等。在这样的实施例中,并行处理子系统112包含针对图形和视频处理而优化的电路,包括例如视频输出电路。如下面在图2中更详细描述的,这种电路可以并入包括在并行处理子系统112内的一个或更多个并行处理单元(PPU)中。在其他实施例中,并行处理子系统112包含针对通用和/或计算处理优化的电路。同样,这种电路可以并入包括在并行处理子系统112内的一个或更多个PPU中,其被配置为执行这样的通用和/或计算操作。在其他实施例中,并行处理子系统112内包括的一个或更多个PPU可以被配置为执行图形处理、通用处理和计算处理操作。系统存储器104包括至少一个设备驱动程序103,其被配置为管理并行处理子系统112内的一个或更多个PPU的处理操作。设备驱动程序103可以包括一个或更多个编译器,其被配置为将应用程序级指令编译成机器级指令,如下面结合图4更详细地描述的。
在各种实施例中,并行处理子系统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),其可被配置为实现图形渲染管线,以执行与基于由CPU 102和/或系统存储器104提供的图形数据生成像素数据相关的各种操作。当处理图形数据时,PP存储器204可以用作存储一个或更多个传统帧缓冲器的图形存储器,并且如果需要,还可以存储一个或更多个其他渲染目标。其中,PP存储器204可用于存储和更新像素数据,并将最终像素数据或显示帧递送到显示设备110以供显示。在一些实施例中,PPU 202还可以被配置用于通用处理和计算操作。
在操作中,CPU 102是计算机系统100的主处理器,控制和协调其他系统组件的操作。特别地,CPU 102发布控制PPU 202的操作的命令。在一些实施例中,CPU 102将用于PPU202的命令流写入数据结构(未在图1或图2中明确示出),数据结构可位于系统存储器104、PP存储器204或CPU 102和PPU 202两者都可访问的另一存储位置中。指向数据结构的指针被写入推送缓冲器(pushbuffer)以启动对数据结构中的命令流的处理。PPU 202从推送缓冲器读取命令流,然后相对于CPU 102的操作异步地执行命令。在生成多个推送缓冲器的实施例中,可以由应用程序经由设备驱动程序103为每个推送缓冲器指定执行优先级,以控制不同的推送缓冲器的调度。
还如图所示,PPU 202包括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的部分或全部元件可以和CPU 102一起被包括在单个集成电路或片上系统(SoC)中。
在操作中,前端212将从主机接口206接收的处理任务发送到任务/工作单元207内的工作分配单元(未示出)。工作分配单元接收指向处理任务的指针,处理任务被编码为任务元数据(TMD)并存储在存储器中。指向TMD的指针被包括在命令流中,该命令流被存储为推送缓冲器并由前端单元212从主机接口206接收。可被编码为TMD的处理任务包括与要处理的数据相关联的索引以及定义数据要被如何处理的状态参数和命令。例如,状态参数和命令可以定义要在数据上执行的程序。任务/工作单元207从前端212接收任务并确保在启动由每个TMD指定的处理任务之前将GPC 208配置为有效状态。可以为用于调度处理任务的执行的每个TMD指定优先级。处理任务也可以从处理集群阵列230接收。可选地,TMD可以包括控制TMD是否被添加到处理任务列表的头或尾(或者指向处理任务的指针的列表)的参数,从而提供对执行优先级的另一级控制。
PPU 202基于包括一组C个通用处理集群(GPC)208(其中C≥1)的处理集群阵列230有利地实现高度并行处理体系架构。每个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的输入或任何其他GPC208用于进一步处理。GPC 208经由交叉开关单元210与存储器接口214通信,以从各种DRAM220读取或写入各种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中的GPC 208的框图。在操作中,GPC 208可以被配置为并行执行大量线程以执行图形操作、通用处理操作和/或计算操作。如本文所使用的,“线程”指的是在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发布技术用于支持大量线程的并行执行,而无需提供多个独立指令单元。在其他实施例中,使用单指令、多线程(SIMT)技术来支持大量通常同步线程的并行执行,使用被配置为向GPC 208内的一组处理引擎发布指令的公共指令单元。与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是SM310内同时活动的线程组的数量。
尽管图3A中未示出,但是每个SM 310包含一级(L1)高速缓存或者在SM 310外部的对应L1高速缓存中的使用空间以特别支持由执行单元执行的加载和存储操作等。每个SM310还可以访问在PPU 202中的所有GPC 208之间共享的二级(L2)高速缓存(未示出)。L2高速缓存可以用于在线程之间传输数据。最后,SM 310还可以访问片外“全局”存储器,其可以包括PP存储器204和/或系统存储器104。应当理解,PPU 202外部的任何存储器都可以用作全局存储器。另外,如图3A所示,1.5级(L1.5)高速缓存335可以包括在GPC 208内,并且被配置为由SM 310经由存储器接口214接收和保持从存储器请求的数据。这样的数据可以包括但不限于指令、统一数据和恒定数据。在GPC 208内具有多个SM 310的实施例中,SM 310可以有益地共享在L1.5高速缓存335中高速缓存的公共指令和数据。
每个GPC 208可以具有相关联的存储器管理单元(MMU)320,其被配置为将虚拟地址映射到物理地址。在各种实施例中,MMU 320可以驻留在GPC 208内或存储器接口214内。MMU 320包括一组页表条目(PTE),其用于将虚拟地址映射到图块(tile)或内存页以及可选地高速缓存行索引的物理地址。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)可以包括在GPC208中。此外,如上面结合图2所述,PPU 202可以包括任意数量的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可以调度线程组中包括的每个线程以独立于线程组中的其他线程执行,从而保留线程被认为是独立条目的公共编程范例。
VDP 360包括涉及面向向量的指令的执行的各种单元。这些单元可以包括执行单元、加载/存储单元等。向量寄存器文件362被配置为存储由在VDP 360内执行的线程组处理的数据。经由VDP 360执行的指令本质上可以是发散的。UDP 364包括涉及统一指令的执行的各种单元,包括收集器366和数学单元368。在本公开的上下文中,“统一”指令指的是通常遵循相同或相似控制路径并处理相同或者密切相关的数据的那些指令。UDP 364内的单元可以在执行期间访问URF 366。
在操作中,VDP 360和UDP 364彼此结合操作以执行经由驱动程序103编译的程序指令。这些程序指令可在编译期间被解析为指令的“内聚块(cohesive block)”,其不包括发散的或重新收敛的指令。包括发散的或重新收敛的指令的其他程序指令可以界定这些指令内聚块。VDP 360可以执行发散/收敛指令,而UDP 364可以执行指令内聚块。可以为每个内聚块分配URF 356内的特定UR。被配置为执行内聚块的一组线程可以在执行期间访问所分配的UR。此外,线程组中的每个线程都可以独立访问UR。UR可以用于存储与常量值相关联的各种数据,包括常量值的虚拟地址、指向常量值的指针、定义常量值的一个或更多个位置的数据结构以及常量值本身。
在一个实施例中,当UDP 364执行内聚块时,收集器366最初从相关联的UR收集用于该内聚块的输入数据。数据也可以本地高速缓存到URF 356(例如在L0常量高速缓存354中以及其他地方)。然后,每个收集器366将收集的输入数据提供给数学单元368。然后,数学单元368可以代表相关联的线程对输入数据执行各种处理操作。因此,当线程组中的任何给定线程执行与内聚块相关联的指令时,每个这样的线程可以独立访问从UR收集的输入数据。可以利用该技术遍历描述常量值位置的指针链。如下面更详细描述的,多个不同的UR可以在指针链中存储不同的指针,最终导向存储常量值的位置。线程组中的一个或更多个线程可以遍历此链以访问常量值。下面结合图4-图7更详细地描述该方法。
运行时绑定常量
图4示出了根据本发明的各种实施例如何将统一寄存器分配给用于执行指令块的线程组。如图所示,多线程应用程序400包括应用程序逻辑402和根表404。设备驱动程序103包括一个或更多个编译器410。经编译代码420包括代码块422。URF 356包括统一寄存器(UR)432。
多线程应用程序400可以是任何技术上可行的应用程序类型,包括图形专用多线程应用程序或通用并行处理应用程序等。应用程序逻辑402包括定义多线程应用程序400的总体功能的程序代码。在图形应用程序中,应用程序逻辑402可以描述图形场景。根表404是描述指针链的数据结构,指针链指示各种数据的位置,包括由应用程序逻辑402引用的常量值。
编译器410通常包括编译器的层次结构。层次结构中的给定的编译器将接收到的指令转换为中间指令,以供层次结构中的后续编译器进一步编译。编译器410还可以包括各种硬件专用编译器,其生成与特定底层处理器硬件相对应的不同类型的机器代码。例如,第一编译器410可以编译多线程应用程序400以生成并行线程执行(PTX)代码,然后第二编译器410可以编译PTX代码以生成机器专用代码,包括机器可执行二进制代码。本领域技术人员将理解,可以应用许多编译范例而不脱离本公开的总体范围。一般情况下,编译器410交互操作以生成包括在经编译代码420中的代码块422。
在一个实施例中,给定的代码块422可以仅包括不引起发散或收敛的指令,在上文称为“内聚块”。线程组426可以执行给定的代码块422,并且在这样做时,访问分配用于执行该代码块的一个或更多个UR 432。线程组中的每个线程可以独立于线程组中的其他线程访问存储在一个或更多个UR 432中的给定值。因此,不需要复制该值的多个副本以支持线程组的执行。
编译器410包括即时(JIT)编译器(图6中所示),其在运行时生成和/或修改经编译代码420内引用常量值的特定代码块422。在这样做时,JIT编译器执行操作序列以将多线程应用程序400中引用的给定常量绑定到存储在特定存储器区域的值。为了以这种方式绑定常量,JIT编译器将附加指令引入代码块422中。当这些指令由线程组426中的一个或更多个线程执行时,那些线程可以遍历指针链以检索和/或访问常量值。指针链源于根表404内并终止于常量值。在某些情况下,L0常量高速缓存354高速缓存由给定指针链指定的常量,从而加速访问这些常量。下面结合图5更详细地描述根表404的结构。下面结合图6更详细地描述JIT编译器如何生成用于遍历指针链的指令的示例。
图5示出了根据本发明的各种实施例的、图4的根表如何通过指针链引用常量。如图所示,根表404包括描述符堆基500和采样器堆基502。描述符堆基500指向描述符堆510。描述符堆510包括常量缓冲器视图(CBV)512和采样器资源视图(SRV)514。给定的CBV 512指向包括一组常量的常量缓冲器520。如图所示,CBV 512(1)指向包括常量522的常量缓冲器520(0)。因此,根表404描述了一个指针链,其源于根表404内并通过几个间接级别终止于特定常量。该特定指针链依赖于作为中介的描述符堆510。根表404还可以直接包括CBV和/或常量。如图所示,根表404包括常量524和CBV 512(2)。CBV 512(2)指向包括常量526的常量缓冲器520(1)。与CBV 512(2)相关联的指针链仅包括一个间接级别。不需要间接级别来访问直接存储在根表404中的常量。
根表404的结构通常由多线程应用程序400的开发者定义。在多线程应用程序400的JIT编译期间,JIT编译器识别对特定类型的常量的引用,然后基于根表404的结构生成用于访问这些常量的指令。例如,如果多线程应用程序400引用常量缓冲器520(0)中的第0个常量,则JIT编译器将生成用于加载描述符堆基500,访问CBV 512(1),并最终检索常量522(0)的指令。通常,线程组426内只有一个线程遍历指针链以访问常量值。该一个线程可以将常量值复制到UR 432中,从而绑定常量并向相同线程组中的每个其他线程提供对相关值的独立访问。给定的常量可以驻留在存储器中的任何位置,并在运行时以这种方式绑定。图6阐述了如何遍历指针链以绑定常量的示例。
图6示出了根据本发明的各种实施例的、图4的编译器如何生成用于遍历指针链的指令。如图所示,代码块422包括初始部分422(A)和扩展部分422(B)。JIT编译器600解析代码块422并确定初始部分422(A)包括引用常量522的指令610。指令610可以包括用作JIT编译器600的编译器提示的特殊标志。该标志可以指示该指令610是“统一”指令,可以为其分配URF 356内的空间,并且可以为其生成附加指令。多线程应用程序400中可以包括许多类型的统一指令。每个统一指令可以访问由URF 356和/或UDP 364提供的资源。JIT编译器600解析指令610并确定需要附加指令以在运行时将常量522绑定到URF 356中的位置。然后,JIT编译器600生成将由特定线程组426内的一个或更多个线程执行的指令620、622、624和626。
线程组426中的第一线程执行指令620以将描述符堆基500加载到UR 432(0)中,如操作(1)所示。然后,第一线程执行具有描述符堆基500的指令622,以将CBV 512加载到UR432(1)中,如操作(2)所示。然后,第一线程利用CBV 512执行指令624,以将常量522加载到UR 432中(如操作(3)所示),从而将该常量绑定到特定存储器位置。然后,线程组426中的部分或全部线程可以用存储在UR 432(2)中的常量522执行指令626,如操作(4)所示。指令626可以直接从指令610导出。在一些情况下,除了第一线程之外的线程可以执行上面讨论的任何指令。因为UR 432为线程组内的每个线程提供对存储在其中的数据的独立访问,所以每个线程可以独立地访问常量522而无需针对每个线程复制该常量。此外,每个线程可以基于存储在UR 432中的中间结果访问常量522之外的其他常量值。例如,线程可以通过访问具有一个或更多个不同偏移的CBV来访问由CBV 512指示的一个或更多个附加常量。通常,当遍历该指针链时,可以从那些UR 432重新使用已经存储在UR 432中的指针链的任何部分。
JIT编译器600还可以生成其他指令序列以根据根表404的结构扩展给定指令422。例如,在根表包括CBV 512的情况下,如图5所示,JIT编译器600不需要生成加载描述符堆基500的指令。而是,JIT编译器600生成加载CBV 512的指令,然后加载所引用的常量。一般而言,JIT编译器600生成许多用于访问常量的附加指令,这些指令取决于在访问常量时要遍历的指针的数量。结合目前为止所描述的技术,还可以应用传统方法指定常量。例如,给定代码块422可以包括对包括在传统常量库中的常量的引用。在这些情况下,JIT编译器600不需要生成附加指令。在一个实施例中,根表404可以绑定在传统的常量库中。然后,可以在访问该常量库之后通过遍历根表404中指定的指针链来访问各种常量。
在一些情况下,指令610可以引用已经包括常量522的特定UR 432。代码块422中的先前指令可以用该常量填充该特定UR 432。在这种情况下,JIT编译器600不需要生成附加指令,因为线程组中的每个线程已经可以访问该UR 432。给定指令还可以改变存储在UR432中的常量的值以准备后续指令。例如,第一指令可以引用存储第一常量的第一UR 432,并且后续指令也可以引用第一UR 432。第一指令之后的第二指令可以更新第一UR 432的内容以包括第二常量,从而为后续指令的后续访问准备第一UR 432。该技术允许多个指令引用相同的存储器位置,但是为那些不同的指令提供对不同常量值的访问。
在其他情况下,指令610参考包括常量的虚拟地址的特定UR 432。虚拟地址可以引用存储器的任何部分。JIT编译器600可以生成用于解析虚拟地址并将常量加载到URF 356中的一个或更多个附加指令。给定指令还可以改变存储在UR 432内的虚拟地址的值,以指示与不同的常量相关联的不同存储器位置。与上述技术类似,该方法还允许多个指令引用相同的存储器位置,而通过不同的虚拟地址为那些不同的指令提供对不同常量值的访问。
通常参考图1-图6,到目前为止所讨论的技术允许多线程应用程序400访问多个常量值,该常量值仅受应用程序可用的总存储器的限制。重要的是,多线程应用程序400可以引用许多常量,但是这些常量的值不需要被绑定到特定的存储器位置直到运行时。在运行时,JIT编译器600执行到目前为止所描述的技术,以将来自任何存储器位置的常量绑定到UR 432中,从而为线程组426提供对这些常量的实际值的访问。
图7是根据本发明的各种实施例的用于在运行时绑定常量的方法步骤的流程图。尽管结合图1-6的系统描述了方法步骤,但是本领域技术人员应当理解,配置为以任何顺序执行方法步骤的任何系统都落入本发明的范围内。
如图所示,方法700开始于步骤702,其中图1和4的设备驱动程序103接收与图4中所示的多线程应用程序400相关联的应用程序代码。在步骤704,设备驱动程序103内的JIT编译器600在编译期间解析应用程序代码,以识别对常量值的第一引用。对常量值的引用可以包括编译器提示,其指示JIT编译器600可能需要引入附加指令来访问常量。在步骤706,JIT编译器600确定与第一引用相关联的指针链以定位常量值。指针链通常从根表404的结构导出。在步骤708,JIT编译器600基于指针链生成指令集。例如,JIT编译器600可以生成包括在图6中所示的代码块422的扩展部分中的指令620、622、624和626。
在步骤710,设备驱动程序103基于该指令集调度线程组中的第一线程以遍历指针链。在这样做时,第一指针可以将一个或更多个中间指针加载到各种UR 432中。在步骤712,设备驱动程序103基于该指令集使第一线程将常量值存储在第一统一寄存器内。包括第一线程的线程组中的每个线程可以通过第一统一寄存器访问常量值。在步骤714,设备驱动程序103使该线程组中的每个线程基于该指令集对常量值执行操作。
总之,即时(JIT)编译器在运行时将常量绑定到特定存储器位置。JIT编译器解析源自多线程应用程序的程序代码,并识别引用统一常量的指令。然后,JIT编译器确定一个指针链,其源自多线程应用程序中指定的根表内,并以该统一常量结束。JIT编译器生成用于遍历指针链的附加指令,并将这些指令插入到程序代码中。并行处理器执行该经编译的代码,并且在这样做时,使线程遍历指针链并在运行时将统一常量绑定到统一寄存器。然后,在并行处理器上执行的线程组中的每个线程可以访问统一常量。
所公开的方法的一个优点是多线程应用程序可以引用许多常量值,其不受专用常量库的存储容量限制。因此,实现该方法的并行处理器可完全符合DX12 API的第三层。因为符合行业标准API对于并行处理器的成功至关重要,所以本文描述的方法代表了相对于不能实现这种合规性的传统技术的显着技术改进。
任一项权利要求中所述的任何权利要求元件和/或本申请中描述的任何元件的任意和全部组合以任何方式都落入本实施例和保护的预期范围内。
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.如权利要求1所述的计算机实现的方法,其中确定所述第一指针链包括基于与所述多线程应用程序相关联的根表确定第一指针,并且其中所述第一指针指示包括所述第一存储器位置的存储器区域。
4.如权利要求1所述的计算机实现的方法,还包括:
确定包括在所述多线程应用程序中的第三指令指示存储在与所述多线程应用程序相关联的根表中的第二常量;以及
使得所述第一线程集中包括的每个线程访问所述根表内的所述第二常量。
5.如权利要求1所述的计算机实现的方法,其中在执行所述多线程应用程序的至少一部分的同时生成所述附加指令集,并且其中在执行所述多线程应用程序的至少一部分的同时所述第一线程执行所述附加指令集。
6.如权利要求1所述的计算机实现的方法,还包括基于所述第一指针链生成所述第二指令,其中在执行所述多线程应用程序的至少一部分的同时生成所述第二指令,并且其中在执行所述多线程应用程序的至少一部分的同时所述第一线程集中的每个线程执行所述第二指令。
7.如权利要求1所述的计算机实现的方法,还包括:
使得调度器调度所述第一线程以执行所述第二指令;以及
使得所述调度器调度包括在所述第一线程集中的第二线程以执行所述第二指令,其中所述第一线程独立于所述第二线程被调度。
8.如权利要求1所述的计算机实现的方法,其中,所述第一指针链包括与所述第一存储器位置相对应的第一虚拟地址,并且所述方法还包括:
基于所述第一虚拟地址生成第三指令;以及
使得所述第一线程执行所述第三指令,其中执行所述第三指令使得所述第一线程修改所述第一虚拟地址以对应于与第二常量相关联的第二存储器位置。
9.如权利要求1所述的计算机实现的方法,其中,所述第一常量包括与由所述多线程应用程序定义的图形场景中包括的材料相关联的材料属性的值。
10.一种非暂时性计算机可读介质,存储程序指令,所述程序指令在由处理器执行时使得所述处理器通过执行以下步骤绑定常量:
基于包括在多线程应用程序中的第一指令确定第一指针链,其中所述第一指针链指示与第一常量相关联的第一存储器位置;
基于所述第一指针链生成附加指令集;
使得包括在第一线程集中的第一线程执行所述附加指令集,其中所述第一线程在执行所述附加指令集时将所述第一常量复制到第二存储器位置;以及
使得包括在所述第一线程集中的每个线程执行第二指令,其中包括在所述第一线程集中的每个线程在执行所述第二指令时使用所述第一常量执行第一操作。
11.如权利要求10所述的非暂时性计算机可读介质,其中确定所述第一指针链的步骤包括:
基于与所述多线程应用程序相关联的根表确定第一指针,其中所述第一指针指示描述符堆基址;以及
基于所述第一指针确定第二指针,其中所述第二指针指示包括所述第一存储器位置的存储器区域。
12.如权利要求10所述的非暂时性计算机可读介质,其中确定所述第一指针链的步骤包括:基于与所述多线程应用程序相关联的根表确定第一指针,并且其中所述第一指针指示包括所述第一存储器位置的存储器区域。
13.如权利要求10所述的非暂时性计算机可读介质,还包括以下步骤:
确定包括在所述多线程应用程序中的第三指令指示存储在与所述多线程应用程序相关联的根表中的第二常量;以及
使得所述第一线程集中包括的每个线程访问所述根表内的所述第二常量。
14.如权利要求10所述的非暂时性计算机可读介质,还包括以下步骤:
使得调度器调度所述第一线程以执行所述第二指令;以及
使得所述调度器调度包括在所述第一线程集中的第二线程以执行所述第二指令,其中所述第一线程独立于所述第二线程被调度。
15.如权利要求10所述的非暂时性计算机可读介质,其中,所述第一指针链包括与所述第一存储器位置相对应的第一虚拟地址,并且还包括以下步骤:
基于所述第一虚拟地址生成第三指令;以及
使得所述第一线程执行所述第三指令,其中执行所述第三指令使得所述第一线程修改所述第一虚拟地址以对应于与第二常量相关联的第二存储器位置。
16.如权利要求10所述的非暂时性计算机可读介质,其中,所述第一线程在执行所述第一操作时访问所述第一常量,其至少部分地与所述第二线程在执行所述第一操作时访问所述第一常量并行。
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,090 US10877757B2 (en) | 2017-11-14 | 2018-02-14 | Binding constants at runtime for improved resource utilization |
US15/897,090 | 2018-02-14 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110008009A true CN110008009A (zh) | 2019-07-12 |
CN110008009B CN110008009B (zh) | 2023-06-09 |
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 Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811352961.3A Active CN110032395B (zh) | 2017-11-14 | 2018-11-14 | 用于提高资源利用率的统一寄存器文件 |
Country Status (2)
Country | Link |
---|---|
US (2) | US10877757B2 (zh) |
CN (2) | CN110032395B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113284038A (zh) * | 2021-03-05 | 2021-08-20 | 上海壁仞智能科技有限公司 | 用于执行计算的方法、计算设备、计算系统和存储介质 |
CN114281414A (zh) * | 2021-12-29 | 2022-04-05 | 海飞科(南京)信息技术有限公司 | Aigpu架构中urf寄存器的数据写入方法 |
Families Citing this family (10)
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 |
US11789793B2 (en) | 2021-03-19 | 2023-10-17 | Oracle International Corporation | Instantiating a parametric class within a specialized context |
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 (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1427968A (zh) * | 2000-03-09 | 2003-07-02 | 太阳微系统有限公司 | 用于在无虚拟存储管理器的数据处理设备中预加载类的系统和方法 |
US20080250499A1 (en) * | 2007-03-30 | 2008-10-09 | Motorola, Inc. | Method and Apparatus for Reducing Buffer Overflow Exploits by Computer Viruses |
US20130067160A1 (en) * | 2011-09-12 | 2013-03-14 | Microsoft Corporation | Producer-consumer data transfer using piecewise circular queue |
CN103226463A (zh) * | 2011-12-21 | 2013-07-31 | 辉达公司 | 用于使用预解码数据调度指令的方法和装置 |
CN103262036A (zh) * | 2010-12-17 | 2013-08-21 | 英特尔公司 | 非阻塞无等待数据并行调度器 |
CN103279379A (zh) * | 2011-12-22 | 2013-09-04 | 辉达公司 | 用于在没有指令解码的情况下调度指令的方法和装置 |
US20130232322A1 (en) * | 2012-03-05 | 2013-09-05 | Michael Fetterman | Uniform load processing for parallel thread sub-sets |
CN103339621A (zh) * | 2011-11-07 | 2013-10-02 | 辉达公司 | 用于gpu计算编译器中的过程间存储器地址空间优化的技术 |
US20140165072A1 (en) * | 2012-12-11 | 2014-06-12 | Nvidia Corporation | Technique for saving and restoring thread group operating state |
CN103870309A (zh) * | 2012-12-11 | 2014-06-18 | 辉达公司 | 用于集群多级寄存器堆的寄存器分配 |
US20140281357A1 (en) * | 2013-03-14 | 2014-09-18 | Nvidia Corporation | Common pointers in unified virtual memory system |
US20150067267A1 (en) * | 2013-08-30 | 2015-03-05 | Apple Inc. | Concurrent inline cache optimization in accessing dynamically typed objects |
US20160019066A1 (en) * | 2014-07-18 | 2016-01-21 | Nvidia Corporation | Execution of divergent threads using a convergence barrier |
Family Cites Families (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE9401221U1 (de) * | 1994-01-26 | 1994-05-19 | Hinz Rolf Prof Dr | Staffelkartei mit vorzugsweise liegenden Karteiblättern |
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 |
EP2122461A4 (en) * | 2006-11-14 | 2010-03-24 | Soft Machines Inc | DEVICE AND METHOD FOR PROCESSING COMMUNICATIONS IN A MULTITHREAD ARCHITECTURE WITH CONTEXT CHANGES |
EP2698710A3 (en) * | 2008-02-12 | 2014-05-28 | Scrutiny, INC. | Systems and methods for information flow analysis |
US20090259925A1 (en) * | 2008-04-10 | 2009-10-15 | Ibiquity Digital Corporation | Broadcast Equipment Communication Protocol |
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 |
KR101638225B1 (ko) * | 2011-03-25 | 2016-07-08 | 소프트 머신즈, 인크. | 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 명령어 시퀀스 코드 블록의 실행 |
US8566537B2 (en) * | 2011-03-29 | 2013-10-22 | Intel Corporation | Method and apparatus to facilitate shared pointers in a heterogeneous platform |
US9830158B2 (en) * | 2011-11-04 | 2017-11-28 | Nvidia Corporation | Speculative execution and rollback |
US10255228B2 (en) * | 2011-12-06 | 2019-04-09 | Nvidia Corporation | System and method for performing shaped memory access operations |
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 |
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 |
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 |
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 |
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 |
US9619148B2 (en) * | 2015-07-27 | 2017-04-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 (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1427968A (zh) * | 2000-03-09 | 2003-07-02 | 太阳微系统有限公司 | 用于在无虚拟存储管理器的数据处理设备中预加载类的系统和方法 |
US20080250499A1 (en) * | 2007-03-30 | 2008-10-09 | Motorola, Inc. | Method and Apparatus for Reducing Buffer Overflow Exploits by Computer Viruses |
CN103262036A (zh) * | 2010-12-17 | 2013-08-21 | 英特尔公司 | 非阻塞无等待数据并行调度器 |
US20130067160A1 (en) * | 2011-09-12 | 2013-03-14 | Microsoft Corporation | Producer-consumer data transfer using piecewise circular queue |
CN103339621A (zh) * | 2011-11-07 | 2013-10-02 | 辉达公司 | 用于gpu计算编译器中的过程间存储器地址空间优化的技术 |
CN103226463A (zh) * | 2011-12-21 | 2013-07-31 | 辉达公司 | 用于使用预解码数据调度指令的方法和装置 |
CN103279379A (zh) * | 2011-12-22 | 2013-09-04 | 辉达公司 | 用于在没有指令解码的情况下调度指令的方法和装置 |
US20130232322A1 (en) * | 2012-03-05 | 2013-09-05 | Michael Fetterman | Uniform load processing for parallel thread sub-sets |
US20140165072A1 (en) * | 2012-12-11 | 2014-06-12 | Nvidia Corporation | Technique for saving and restoring thread group operating state |
CN103870309A (zh) * | 2012-12-11 | 2014-06-18 | 辉达公司 | 用于集群多级寄存器堆的寄存器分配 |
US20140281357A1 (en) * | 2013-03-14 | 2014-09-18 | Nvidia Corporation | Common pointers in unified virtual memory system |
US20150067267A1 (en) * | 2013-08-30 | 2015-03-05 | Apple Inc. | Concurrent inline cache optimization in accessing dynamically typed objects |
US20150067658A1 (en) * | 2013-08-30 | 2015-03-05 | Apple Inc. | Size dependent type in accessing dynamically typed array objects |
US20160019066A1 (en) * | 2014-07-18 | 2016-01-21 | Nvidia Corporation | Execution of divergent threads using a convergence barrier |
Non-Patent Citations (1)
Title |
---|
李晓伟等: "基于Harmony的提前编译技术", 《计算机工程》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113284038A (zh) * | 2021-03-05 | 2021-08-20 | 上海壁仞智能科技有限公司 | 用于执行计算的方法、计算设备、计算系统和存储介质 |
CN114281414A (zh) * | 2021-12-29 | 2022-04-05 | 海飞科(南京)信息技术有限公司 | Aigpu架构中urf寄存器的数据写入方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110032395A (zh) | 2019-07-19 |
CN110032395B (zh) | 2023-05-26 |
CN110008009B (zh) | 2023-06-09 |
US10866806B2 (en) | 2020-12-15 |
US10877757B2 (en) | 2020-12-29 |
US20190146817A1 (en) | 2019-05-16 |
US20190146796A1 (en) | 2019-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110008009A (zh) | 在运行时绑定常量以提高资源利用率 | |
KR101832656B1 (ko) | 컴파일러 최적화를 위한 메모리 참조 메타데이터 | |
US10983699B2 (en) | Queue manager for streaming multiprocessor systems | |
CN105159761B (zh) | 用于在多处理器上进行数据并行计算的应用编程接口 | |
US7761697B1 (en) | Processing an indirect branch instruction in a SIMD architecture | |
US9354892B2 (en) | Creating SIMD efficient code by transferring register state through common memory | |
EP3126971A1 (en) | Program execution on heterogeneous platform | |
US8752018B2 (en) | Emitting coherent output from multiple threads for printf | |
US9207919B2 (en) | System, method, and computer program product for bulk synchronous binary program translation and optimization | |
CN106104488A (zh) | 用于支持任务间通信的基于硬件的原子操作 | |
CN104025185A (zh) | 用于使用gpu控制器来预加载缓存的机制 | |
CN103810743A (zh) | 在上游着色器中设置下游渲染状态 | |
CN105531668B (zh) | 用于执行进程的迁移的方法、迁移器及计算机可读介质 | |
GB2517047A (en) | Data processing systems | |
US11934867B2 (en) | Techniques for divergent thread group execution scheduling | |
US9235512B2 (en) | System, method, and computer program product for graphics processing unit (GPU) demand paging | |
CN114387379A (zh) | 带表面相似度测试的光-重采样 | |
US20160321773A1 (en) | System and method for creating aliased mappings to minimize impact of cache invalidation | |
Hughes et al. | Kd-jump: a path-preserving stackless traversal for faster isosurface raytracing on gpus | |
US10606595B2 (en) | Data processing systems | |
CN115552473A (zh) | 使用屏幕空间可见性的光线追踪光重采样 | |
CN105278916B (zh) | 用于生成被抑制的地址踪迹的设备和方法 | |
US9569191B2 (en) | Dynamic programming platform for implementing bulk data operators in a multithreaded environment | |
Kuo et al. | The design of LLVM-based shader compiler for embedded architecture | |
US11663773B2 (en) | Using importance resampling to reduce the memory incoherence of light sampling |
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 |