CN103870242A - 优化线程栈存储器的管理的系统、方法和计算机程序产品 - Google Patents
优化线程栈存储器的管理的系统、方法和计算机程序产品 Download PDFInfo
- Publication number
- CN103870242A CN103870242A CN201310675015.3A CN201310675015A CN103870242A CN 103870242 A CN103870242 A CN 103870242A CN 201310675015 A CN201310675015 A CN 201310675015A CN 103870242 A CN103870242 A CN 103870242A
- Authority
- CN
- China
- Prior art keywords
- stack
- objects
- joining
- program
- source code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了用于优化线程栈存储器分配的系统、方法和计算机程序产品。方法包括以下步骤:接收用于程序的源代码,将源代码转译成中间表示,分析中间表示以标识可使用线程栈存储器中的第一所分配存储器空间的至少两个对象,以及通过以对至少两个对象中的第二对象的引用替换对至少两个对象中的第一对象的引用来修改中间表示。
Description
技术领域
本发明涉及编译器,并且更具体地,涉及存储器分配中的优化。
背景技术
可用于程序的执行的本地存储器是系统架构中的重要资源。该资源的适当管理对于程序的高效执行是至关重要的。理想地,在程序的执行期间,仅分配包括用于当前指令和未来指令的数据的存储器,而包含使用在先前被执行的指令中的数据的任何存储器被解除分配并被返回到自由存储器池。可由程序设计员来管理某一存储器,诸如通过在采用C++所写的程序中使用malloc和free指令以明确地分配和释放存储器块。
然而,就线程栈存储器(即充当后进先出(LIFO)队列的分配给程序线程的存储器的一部分)而言,程序设计员典型地不管理线程栈存储器。相反,线程栈存储器随程序执行而动态地得以分配。当前编译器通常不解决对于线程栈存储器的高效管理的优化。因此,存在对于解决该问题和/或与现有技术相关联的其他问题的需要。
发明内容
公开了用于优化线程栈存储器分配的系统、方法和计算机程序产品。方法包括以下步骤:接收用于程序的源代码,将源代码转译成中间表示,分析中间表示以标识可使用线程栈存储器中的第一所分配存储器空间的至少两个对象,以及通过以对至少两个对象中的第二对象的引用替换对至少两个对象中的第一对象的引用来修改中间表示。
附图说明
图1示出根据一个实施例的、用于优化线程栈存储器的分配的方法的流程图;
图2示出根据一个实施例的、用于优化线程栈存储器的分配的系统;
图3A示出根据一个实施例的、用于示范性程序的源代码;
图3B示出根据一个实施例的、与图3A的示范性程序相对应的中间表示;
图3C示出根据一个实施例的、是图3B的中间表示的经修改版本的中间表示;
图4示出根据一个实施例的、用于分析中间表示以确定哪些对象可以被分配到线程栈存储器中的相同的存储器空间的方法的流程图;
图5示出根据一个实施例的并行处理单元;
图6示出根据一个实施例的、图5的流多处理器;以及
图7示出在其中可实现各先前实施例的各架构和/或功能性的示例性系统。
具体实施方式
一些常规编译器通过实施数据流分析和将程序指令以使得某些寄存器可以被重新用来在程序执行中的不同时刻存储不同的值的方式进行排序,而在一定程度上优化寄存器的分配。编译器典型地将源代码(例如采用诸如C++的高级语言所写的程序)转译成中间表示(IR),该IR是表示程序的意义(包括执行次序)的数据结构。IR可以是用于抽象机器的中间语言。IR在生成要由处理器执行的机器代码之前使编译器能够实施数据流分析和重新排列程序的次序。
上文关于寄存器分配所描述的优化不能以相同方式应用到线程栈中的较大存储器结构。在线程栈中所分配的对象的大小可以变化。相反,寄存器具有定义明确的大小,诸如32位。当包括在程序中的指令将值存储在寄存器中时,值必需覆写先前分配到该寄存器的所有数据。线程栈存储器中的对象的表现不同。当值被存储在对象的元素诸如数组的一个条目中时,值覆写先前被存储在该条目中的数据。然而,对象的其它条目可能仍然是有效的并且分配给先前被存储在对象中的数据。尝试跟踪线程栈中的每个条目的数据流分析将变得非常复杂并且本将能够达到的优化可能无效。
下文所描述的算法实施一个不同类型的数据流分析,其跟踪分配到线程栈存储器的对象(即配栈对象(stack allocated object))在程序的不同部分是否是“活的”。下面的定义贯穿本公开而使用。在本描述的上下文中,如果存储在对象中的数据潜在地由当前指令或未来指令所需要,那么对象在程序中的某个点(即指令)处是活的。对象的def是将数据存储在对象中的指令。对象的def的示例包括存储指令、在指令的左边(LHS)具有指向对象的变量的指令等。指令不需要覆写分配给对象的整个存储器,而仅需要将数据写入对象的一部分中。针对对象的存储器的分配不是对象的def(因为对象中的数据未被初始化)。对象的use是使用具有对配栈对象的访问权的变量的指令。对象的use的示例包括加载指令、涉及指向对象的指针的二进制操作等。
图1示出根据一个实施例的、用于优化线程栈存储器的分配的方法100的流程图。在步骤102,编译器接收所要编译的程序。程序可以采用高级编程语言来写,所述高级编程语言诸如C++、C#(C sharp)、Java、Cg(用于图形的C)或某一其他高级编程语言。在步骤104,编译器将程序转译成IR。IR可以是中间语言,诸如LLVM(低级虚拟机编译器基础结构)汇编语言、C、三地址码(TAC)或某一其他类型的中间语言。在步骤106,编译器分析IR以标识可使用线程栈存储器中的相同的所分配存储器空间的至少两个对象。一般地,如果对象的寿命不冲突,那么两个对象可以使用相同的所分配存储器空间。换句话说,只要两个对象不被初始化或使用在程序中的相同点处,那么两个对象可以使用相同的所分配存储器空间。
在步骤108,编译器通过以对至少两个对象中的第二对象的引用替换对至少两个对象中的第一对象的引用来修改IR。在一个实施例中,当两个配栈对象可被分配到相同存储器空间时,编译器将以指向较大对象的新指令来替换指向较小对象的指令(即依据分配给对象的存储器大小)。应注意的是,虽然本文关于优化线程栈存储器的分配而阐述了各可选特征,但是这类特征仅出于示例性目的而阐述并且不应被视为以任何方式加以限制。
图2示出根据一个实施例的、用于优化线程栈存储器的分配的系统200。如图2所示,系统200包括编译器210、程序201、中间表示(IR)202和经编译的机器代码203。程序201、IR202和机器代码203是存储在计算机系统的存储器中的数据文件。编译器210是存储在存储器中的、可执行的二进制数并配置为由计算机系统的处理器执行。编译器210从存储器读取程序201并且转移程序201中的数据以生成IR202。在一个实施例中,编译器210实现为用于图形处理单元的驱动程序的一部分,并且程序201是由应用所生成并被传送给驱动程序以在图形处理单元上执行的着色器程序。
在一个实施例中,程序201是文本文件(例如ASCII文本),该文本文件包括多个以人类可读的格式的指令。程序201可以采用诸如C++的高级编程语言来写。IR202包括被抽象成采用中间语言的多个指令的、来自程序201的多个指令的表示。例如,中间语言可以是TAC并且IR202的每个指令表示目标处理器的一个基本操作(例如二进制操作、逻辑操作、加载/存储操作等)。程序201中的指令可能不能在单个时钟周期中执行。例如,如“D=A+B+C”的二进制操作可能不能由处理器在单个时钟周期中执行。因此,采用中间语言,上文所阐述的指令可被分解成采用中间语言的两个指令(例如第一指令“T1=A+B”和第二指令“D=T1+C”)。
一旦编译器210已生成IR202,编译器就对IR202实施数据流分析。例如,编译器210可以重新排列IR202中的指令的次序。通过改变指令的次序,编译器可能能够以更高效的方式来分配线程栈中的存储器,重新使用相同存储器位置用于程序201中的不同变量。编译器可以分析所重新排列的指令以找到可被指派给相同存储器对象的变量,以及修改IR202中的指令使得程序201中的不同变量可以重新使用线程栈中的相同存储器对象。一旦编译器210已修改IR202并且已对代码做出某些优化,编译器210就编译IR202以生成机器代码203用于由处理器执行。
图3A示出根据一个实施例的、用于示范性程序201的源代码。如图3A所示,程序201是采用C++写的。程序201将常数N定义为2000并且包括采取三个参数(即整数n、m和k)的函数g的定义。在函数g的每一次调用期间,声明三个整数数组(即变量A、B和C)以及整数值(即变量result)。变量result被初始化为0,而数组A、B和C不立即被初始化。数组A首先被使用在程序201的第11行上,其可以被称为A的def。数组A还被使用在程序201的第14行上,其可以被称为A的use。数组A在程序201的第14行之后不被使用或定义。类似地,数组B首先被使用在程序201的第18行上,数组C首先被使用在程序201的第21行上,并且数组B和C被使用在程序201的第24行上。
函数g的主体包括If…Else语句。当参数n小于参数m时,If…Else语句的第一块(即程序201的第10-15行)被执行。当参数n大于或等于参数m时,第二块(即程序201的第17-25行)被执行。然后,变量result的值被函数返回。更详细地检查If…Else语句,本领域的技术人员将注意到数组A在第一块中在第一个for循环(即程序201的第10-12行)内被初始化并且然后在第二个for循环(即程序201的第13-15行)内多个A的值被添加到变量result。数组B在第三个for循环(即程序201的第17-19行)中被初始化,数组C在第四个for循环(即程序201的第20-22行)中被初始化,并且然后在第五个for循环(即程序201的第23-25行)内B的每个第k个值乘以C的每个第k个值并被添加到变量result。
应理解的是,每次函数g被线程调用时,函数将执行If…Else语句的第一块或第二块,而不是第一块和第二块。换句话说,在执行期间,基于条件语句(“n<m”),或者数组A将被定义并使用在一个或多个指令中,或者数组B和C将被定义并使用在一个或多个指令中。有利地,编译器可以优化用于程序201的IR202使得数组A以及或者数组B或者数组C可被分配给线程栈存储器中的相同对象。相反,因为数组B和数组C可能在程序的相同点处是活的(例如在第五个for循环中来自数组B和数组C这二者的值可以用作相同指令中的操作数),所以数组必须指向线程栈存储器中的不同对象。更一般地,如果两个对象在程序的相同点处不是活的,那么两个对象可被分配到具有至少像两个对象中的较大者的大小那样大的相同存储器空间。换句话说,线程栈存储器的一部分被分配一次并由两个对象来使用。由于标量值典型地由编译器分配给寄存器,所以分配到线程栈存储器的对象典型地是数组或大于单个寄存器的宽度的聚合的值。
图3B示出根据一个实施例的、与图3A的示范性程序201相对应的IR202。如图3B所示,编译器210已将程序201转译成IR202。在第1到4行,IR202包括用于变量A、B、C和result的分配指令。用于变量A、B和C的对象是2000元素的整数数组,而用于变量result的对象是单个整数。在IR202的第5行中,result的值被初始化为0。IR202的第6行与程序201中的主If…Else语句的条件语句相对应。因此,IR202的第7到23行与程序201中的If…Else语句的第一块相对应,第24到51行与程序201中的If…Else语句的第二块相对应。IR202的第7到14行与程序201中的第一个for循环相对应,第15到23行与程序201中的第二个for循环相对应,第24到31行与程序201中的第三个for循环相对应,第32到39行与程序201中的第四个for循环相对应,以及第40到51行与程序201中的第五个for循环相对应。
图3C示出根据一个实施例的、是图3B的IR202的经修改版本的IR202-1。如图3C所示,图3B的IR202中的指令中的一些已经被修改以优化线程栈存储器的分配。线程栈存储器的部分被分配给第一数组A、第二数组B以及整数result,所述整数result被初始化为0。不同于IR202,线程栈存储器的部分最初未被分配给第三数组C。IR202-1中的If…Else语句的第一块(即第6到22行)保持与图3B的IR202中的If…Else语句的第一块(即第7到23行)相同。然而,编译器210已修改IR202-1中的If…Else语句的第二块(即第23到50行)以优化线程栈存储器的分配。应理解的是,仅两个数组A和B被分配在IR202-1中。包括引用IR202中的数组B的操作数的指令已被以引用IR202-1中的数组A的操作数所替换。类似地,包括引用IR202中的数组C的操作数的指令已被以引用IR202-1中的数组B的操作数所替换。因此,被分配在IR202-1中的两个数组A和B分别与图3B的IR202的数组B和C相对应。因此,与用于IR202中的三个2000元素的数组的24千字节相比,用于IR202-1的所分配线程栈存储器的量是用于IR202-1中的两个2000元素的数组的最大值16千字节(假定变量result被分配给寄存器而不是线程栈存储器)。
图4示出根据一个实施例的、用于分析IR202以确定哪些对象可被分配到线程栈存储器中的相同存储器空间的方法400的流程图。在步骤402,编译器210标识IR202中的所有配栈对象。编译器210可以逐句通过IR202中的指令的每一个并且确定指令是否使线程栈中的存储器被分配给对象。如果是,那么对象被标识为配栈对象。例如,IR202可以包括分配指令(例如“a=alloc(int,2000)”),其将线程栈存储器的一部分分配给对象并且将指向对象的指针指派给变量a。
在步骤404,针对每个配栈对象,编译器210分析IR202以标识具有对配栈对象的访问权的所有变量。换句话说,作为指令的结果,如果在指令的右边(RHS)的一个或多个变量指向对象,那么表示指令的左边(LHS)的变量“指向”对象。例如,如果句柄a被拷贝到b,那么b被认为指向被分配给a的对象并且因此应被跟踪以确定用于a的存储器空间何时正被使用。对其而言结果可指向配栈对象的具体指令是不同的,这取决于由IR202所利用的中间语言。指向配栈对象的指令的类型包括但不限于拷贝指令、二进制操作、转换(例如类型转换)、PHI节点(即用来选择取决于当前块的前驱的值的特殊指令)、存储指令以及函数调用。在一个实施例中,如果变量指向被分配给对象的存储器空间中的任何位置,那么变量被认为指向整个对象(即不仅是对象的特定元素)。表1示出用于标识具有对配栈对象的访问权的所有变量的示范性伪代码:
表1
在步骤406,编译器210生成用于每个配栈对象的活性网(livenessweb)。用于配栈对象的活性网是用于配栈对象的def(即,将值指派给对象的指令)和use(即,使用由对象所存储的值作为操作数的指令)的合集,其表示何时配栈对象在程序流中是“活的”。应理解的是,针对对象的存储器的分配不是用于该对象的def。如果对象包含的数据潜在地由当前指令或未来指令所需要,那么对象在程序中的某一点处是“活的”。在一个实施例中,针对每个配栈对象,编译器210迭代通过IR202中的指令并且确定指令是否是对象的def或use(或这二者)。如果指令是def或use,那么指令被添加到用于对象的活性网。表2示出用于生成用于配栈对象的活性网的示范性伪代码:
表2
在步骤408,编译器210跟踪在每个基本块的起点和结束处每个配栈对象是否被初始化或未被初始化。在一个实施例中,编译器210迭代通过IR202中的每个基本块并且记录对于每个配栈对象何时遭遇def。基本块是程序内的代码的一部分,其具有一个进入点和一个退出点(即,无论何时基本块中的第一指令被执行,基本块中的其余指令都恰好被按次序执行一次)。例如,在图3B的IR202中,第一基本块从第1行(即,“A:=alloc(in,2000)”)扩展到第6行(即,“if n>=m goto L5”),第二基本块从第7行(即,“i:=0”)扩展到第8行(即,“if i>=2000goto L2”),第三基本块从第9行(即,“t0:=i*3”)扩展到第14行(即,“goto L1”)等等。编译器210可以使用记录用于对象的def和use中的每一个的、用于每个对象的活性网,以确定每个基本块是否包括用于对象的def。如果在通向当前块的任何路径上对象已被初始化,那么认为对象在当前块中被初始化。表3示出用于跟踪在每个基本块处每个配栈对象是否被初始化或未被初始化的示范性伪代码:
表3
在步骤410,编译器210确定哪些配栈对象在IR202中的相同点处是活的。在于步骤406中获得活性网并且于步骤408中跟踪在每个基本块的起点或结束处哪些对象被初始化和未被初始化之后,编译器210维持在每个基本块的起点和结束处是活的的配栈对象的集合。应该理解的是,步骤408仅确定对象408何时已被初始化(即,由对象的def所表示),但是在步骤410编译器基于对象的use来确定对象何时不再被需要。考虑到用于对象的def和use,编译器210通过按相反次序迭代通过函数中的块和指令来更新活的配栈对象的集合。如果在IR202中的任何点处两个配栈对象同时是活的,那么该对对象可被标记为冲突。每个配栈对象可以与同该配栈对象冲突的其他配栈对象的列表相关联。表4示出用于确定哪些配栈对象同时是活的的示范性伪代码:
表4
在步骤412,编译器210确定哪些对象可被分配到相同存储器空间。如果两个对象不冲突,那么两个对象可被分配到相同存储器空间。在步骤412,编译器210确定实际需要多少分配、每个分配的大小以及哪些对象将使用每个所分配空间。在一个实施例中,仅相同类型和对齐(alignment)的对象被分配到相同存储器空间。例如,如果存在具有以4对齐的两个所分配整数数组,一个数组具有2000整数的大小,另一个数组具有3000整数的大小,并且两个所分配数组不冲突,那么这两个对象都可以使用单个的3000整数的所分配空间。然而,如果数组是不同类型的,诸如整数数组和双精度数组,或是不同对齐的,那么对象不被分配到相同存储器空间。在另一个实施例中,不同类型和对齐的对象可被分配到相同存储器空间。
在一个实施例中,保持较大分配以及相同类型的较小分配使用分配给较大对象的存储器空间。对于IR202中的每个类型的对象而言,编译器210按照大小以递减次序将该类型的配栈对象排序。维持将保持在代码中的对象的集合。每个对象维持指针,该指针指向将替换对象的配栈对象(如果对象被替换)以及将使用对象的所分配存储器空间的配栈对象的集合(如果对象保留在IR202中)。较大对象将被分配到线程栈存储器并且其余的对象被检查以查看它们是否与使用该存储器空间的第一对象或其它对象冲突。如果对象不冲突,那么对象被指派为使用相同存储器空间,或被放在工作列表中。工作列表中的最大的对象随后被分配到线程栈存储器并且工作列表中的其余的对象被检查以查看它们是否与使用该存储器空间的第一对象或其它对象冲突。如果对象不冲突,那么对象被指派为使用相同存储器空间,或被放在新工作列表中,其又像先前的工作列表等那样被检查并且以此类推直到所有对象被分配到线程栈存储器空间或被指派为使用与配栈对象相同的存储器空间。表5和6示出用于确定哪些对象可以被分配到相同存储器空间的示范性伪代码:
表5
表6
应该理解的是,可以实现上文所阐述的框架用于各种不同编译器。在一个实施例中,框架可以实现在响应于由执行在中央处理单元(CPU)上的应用所生成的程序201而生成机器代码的并行处理单元(PPU)的编译器中。下面的描述示出可以用来实现上文所阐述的框架的至少一部分的一个这类架构。
图5示出根据一个实施例的并行处理单元(PPU)500。虽然本文提供并行处理器作为PPU500的示例,但应特别注意的是,这类处理器仅出于示例性目的而阐述,并且可出于相同目的采用任何处理器以对其进行补充和/或替换。在一个实施例中,PPU500配置为在两个或更多个流多处理器(SM)550中并发地执行多个线程。线程(即执行的线程)是在特定SM550内执行的指令集的实例化。下文结合图6更详细描述的每个SM550可包括但不限于一个或多个处理核心、一个或多个加载/存储单元(LSU)、一级(L1)高速缓存、共享存储器等。
在一个实施例中,PPU500包括输入/输出(I/O)单元505,其配置为通过系统总线502传送和接收来自中央处理单元(CPU)(未示出)的通信(即命令、数据等)。I/O单元505可实现用于高速外围部件互连(PCIe)总线上的通信的PCIe接口。在可替代实施例中,I/O单元505可实现其他类型的公知总线接口。
PPU500还包括主机接口单元510,其将命令解码并将命令传送到PPU500的网格管理单元515或如命令可指定的其他单元(例如存储器接口580)。主机接口单元510配置为路由PPU500的各逻辑单元之间的通信。
在一个实施例中,由CPU将被编码为命令流的程序写入缓冲区。缓冲区是例如存储器504或系统存储器的存储器中的区域,其可由CPU和PPU500二者访问(即读/写)。CPU将命令流写入缓冲区并随后将指向命令流开始的指针传送到PPU500。主机接口单元510为网格管理单元(GMU)515提供指向一个或多个流的指针。GMU515选择一个或多个流并配置为将所选择的流组织成挂起网格池。挂起网格池可包括尚未被选择用于执行的新网格和已被部分地执行并且已被暂停的网格。
耦连在GMU515和SM550之间的工作分布单元520管理活动网格池,选择并分派活动网格用于由SM550执行。当挂起的网格有资格执行、即不具有未解决的数据依赖时,挂起的网格由GMU515转移到活动网格池。当活动网格的执行被依赖阻塞时,活动网格被转移到挂起池。当网格的执行完成时,网格被工作分布单元520从活动网格池移除。除了接收来自主机接口单元510和工作分布单元520的网格以外,GMU510还接收在网格的执行期间由SM550所动态生成的网格。这些动态生成的网格加入挂起网格池中的其他挂起的网格。
在一个实施例中,CPU执行实现应用编程接口(API)的驱动程序内核,该应用编程接口使能在CPU上执行的一个或多个应用以调度用于在PPU500上执行的操作。应用可包括使驱动程序内核生成一个或多个网格用于执行的指令(即API调用)。在一个实施例中,PPU500实现SIMD(单指令、多数据)结构,其中由线程块中的不同线程对不同数据集并发地执行网格中的每个线程块(即线程束(warp))。驱动程序内核定义包含k个相关线程的线程块,使得相同线程块中的线程可通过共享存储器交换数据。在一个实施例中,线程块包括32个相关线程,并且网格是执行相同流的一个或多个线程块的阵列,并且不同的线程块可通过全局存储器交换数据。在一个实施例中,驱动程序内核在生成用于在PPU500上执行的线程时实现编译器,该编译器实施对于线程栈存储器分配的优化。
在一个实施例中,PPU500包括X个SM550(X)。例如,PPU500可包括15个不同的SM550。每个SM550是多线程的并配置为并发地执行来自特定线程块的多个线程(例如32个线程)。SM550中的每一个经由交叉开关560(或其他类型的互连网络)连接到二级(L2)高速缓存565。L2高速缓存565连接到一个或多个存储器接口580。存储器接口580实现16、32、64、128位数据总线等等,用于高速数据转移。在一个实施例中,PPU500包括U个存储器接口580(U),其中每个存储器接口580(U)连接到相对应的存储器设备504(U)。例如,PPU500可连接到多达6个存储器设备504,诸如图形双数据速率、版本5、同步动态随机存取存储器(GDDR5SDRAM)。
在一个实施例中,PPU500实现多级存储器层次。存储器504位于耦连到PPU500的SDRAM的片外。来自存储器504的数据可被获取并存储在L2高速缓存565中,该L2高速缓存565位于片上并在各SM550之间共享。在一个实施例中,SM550中的每一个还实现L1高速缓存。L1高速缓存是专用于特定SM550的私有存储器。L1高速缓存中的每一个耦连到共享的L2高速缓存565。来自L2高速缓存565的数据可被获取并存储在L1高速缓存中的每一个中用于SM550的功能单元中的处理。
在一个实施例中,PPU500包括图形处理单元(GPU),诸如GPU340。PPU500配置为接收指定用于处理图形数据的着色器程序的命令。图形数据可被定义为诸如点、线、三角形、四边形、三角形条带等基元的集合。典型地,基元包括指定用于(例如在模型空间坐标系中的)基元的若干顶点以及与基元的每个顶点相关联的属性的数据。PPU500可配置为处理图形基元以生成帧缓冲区(即用于显示器的像素中的每一个的像素数据)。驱动程序内核实现图形处理管线,诸如由OpenGL API定义的图形处理管线。
应用将用于场景的模型数据(即顶点和属性的合集)写到存储器。模型数据定义在显示器上可见的对象中的每一个。应用随后对驱动程序内核做出请求模型数据被渲染和显示的API调用。驱动程序内核读取模型数据并将命令写到缓冲区以实施一个或多个操作来处理模型数据。命令可将包括顶点着色器、外壳着色器、几何着色器、像素着色器等中的一个或多个的不同着色器程序编码。例如,GMU515可配置一个或多个SM550为执行处理由模型数据所定义的若干顶点的顶点着色器程序。在一个实施例中,GMU515可配置不同SM550为并发地执行不同着色器程序。例如,SM550的第一子集可配置为执行顶点着色器程序,而SM550的第二子集可配置为执行像素着色器程序。SM550的第一子集处理顶点数据以产生经处理的顶点数据并将经处理的顶点数据写到L2高速缓存565和/或存储器504。在经处理的顶点数据被光栅化(即从三维数据变换成屏幕空间中的二维数据)以产生碎片数据(fragment data)之后,SM550的第二子集执行像素着色器以产生经处理的碎片数据,其随后与其他经处理的碎片数据混合并被写到存储器504中的帧缓冲区。顶点着色器程序和像素着色器程序可并发地执行,以管线的方式处理来自相同场景的不同数据直到用于场景的所有模型数据已被渲染到帧缓冲区为止。随后,帧缓冲区的内容被传送到显示控制器用于在显示设备上显示。
PPU500可包括在台式计算机、膝上型计算机、平板计算机、智能电话(例如无线、手持设备)、个人数字助理(PDA)、数字相机、手持电子设备等等中。在一个实施例中,PPU500具体化在单个半导体衬底上。在另一实施例中,PPU500连相同个或多个其他逻辑单元被包括在片上系统(SoC)中,所述一个或多个其他逻辑单元诸如精简指令集计算机(RISC)CPU、存储器管理单元(MMU)、数模转换器(DAC)等。
在一个实施例中,PPU500可被包括在包括诸如GDDR5SDRAM的一个或多个存储器设备504的图形卡上。图形卡可配置为与包括例如北桥芯片集和南桥芯片集的、台式计算机的主板上的PCIe槽相接。在又一实施例中,PPU500可以是被包括在主板的芯片集(即北桥)中的集成图形处理单元(iGPU)。
应该理解的是,主线程可配置为执行在PPU500的第一SM550(0)上。此外,两个或更多个子线程可配置为执行在两个或更多个附加的SM(例如150(1)、550(2)等)上。主线程和子线程可以访问通过硬件视频编码器330存储在存储器中的运动矢量数据。
图6示出根据一个实施例的、图5的流多处理器550。如图6所示,SM550包括指令高速缓存605、一个或多个调度器单元610、寄存器堆620、一个或多个处理核心650、一个或多个双精度单元(DPU)651、一个或多个特殊功能单元(SFU)652、一个或多个加载/存储单元(LSU)653、互连网络680、共享存储器/L1高速缓存670以及一个或多个纹理单元690。
如上文所述,工作分布单元520分派活动网格用于在PPU500的一个或多个SM550上执行。调度器单元610从工作分布单元520接收网格并管理用于每个活动网格的一个或多个线程块的指令调度。调度器单元610调度线程用于在并行线程的组中执行,其中每个组称为线程束。在一个实施例中,每个线程束包括32个线程。调度器单元610可管理多个不同线程块,在每个时钟周期期间将线程块分配到线程束用于执行并随后调度来自各功能单元(即核心650、DPU651、SFU652以及LSU653)上的多个不同线程束的指令。
在一个实施例中,每个调度器单元610包括一个或多个指令分派单元615。每个分派单元615配置为将指令传送到功能单元中的一个或多个。在图6示出的实施例中,调度器单元610包括两个分派单元615,其使能来自相同线程束的两个不同指令在每个时钟周期期间被分派。在可替代实施例中,每个调度器单元610可包括单个分派单元615或附加的分派单元615。
每个SM550包括寄存器堆620,其提供用于SM550的功能单元的寄存器的集合。在一个实施例中,寄存器堆620在功能单元中的每一个之间被划分,使得每个功能单元被分配寄存器堆620的专用部分。在另一实施例中,寄存器堆620在正由SM550执行的不同线程束之间被划分。寄存器堆620为连接到功能单元的数据路径的操作数提供暂时存储。
每个SM550包括L个处理核心650。在一个实施例中,SM550包括大数目的(例如192个等)不同的处理核心650。每个核心650是完全管线(fully-pipelined)的单精度处理单元,其包括浮点运算逻辑单元和整数运算逻辑单元。在一个实施例中,浮点运算逻辑单元实现用于浮点运算的IEEE754-2008标准。每个SM550还包括实现双精度浮点运算的M个DPU651、实施特殊功能(例如拷贝矩形、像素混合操作等)的N个SFU652以及在共享存储器/L1高速缓存670和寄存器堆620之间实现加载和存储操作的P个LSU653。在一个实施例中,SM550包括64个DPU651、32个SFU652以及32个LSU653。
每个SM550包括互连网络680,其将功能单元中的每一个连接到寄存器堆620和共享存储器/L1高速缓存670。在一个实施例中,互连网络680是交叉开关,其可配置为将任何功能单元连接到寄存器堆620中的任何寄存器或共享存储器/L1高速缓存670中的任何存储器位置。
在一个实施例中,SM550实现在GPU内。在这类实施例中,SM550包括J个纹理单元690。纹理单元690配置为从存储器504加载纹理图(即纹理元素的2D阵列)并对纹理图采样以产生经采样的纹理值用于在着色器程序中使用。纹理单元690使用mip-map(即变化细节层级的纹理图)实现诸如抗锯齿操作的纹理操作。在一个实施例中,SM550包括16个纹理单元690。
上文所述的PPU500可配置为实施比常规CPU快得多的高度并行计算。并行计算在图形处理、数据压缩、计量生物学、流处理算法等方面具有优势。
图7示出在其中可实现各先前实施例的各架构和/或功能性的示例性系统700。如所示,提供了系统700,其包括至少一个连接到通信总线702的中央处理器701。通信总线702可使用任何合适的协议来实现,诸如外围部件互连(PCI)、PCI-Express、AGP(加速图形端口)、超传输、或任何其他总线或点对点通信协议。系统700还包括主存储器704。控制逻辑(软件)和数据存储在可采取随机存取存储器(RAM)形式的主存储器704中。
系统700还包括输入设备712、图形处理器706以及显示器708,所述显示器708即常规CRT(阴极射线管)、LCD(液晶显示器)、LED(发光二极管)、等离子显示器等等。可从输入设备712例如键盘、鼠标、触摸板、扩音器等接收用户输入。在一个实施例中,图形处理器706可包括多个着色器模块、光栅化模块等。前述模块中的每一个实际上可布置于单个半导体平台上以形成图形处理单元(GPU)。
在本描述中,单个半导体平台可以指单独一个的基于半导体的集成电路或芯片。应注意的是,术语单个半导体平台还可以指具有增强的连通性的多芯片模块,其仿真片上操作,并通过利用常规中央处理单元(CPU)和总线实现方案做出实质的改进。当然,各模块还可根据用户的期望分开地或以半导体平台的各种组合来布置。
系统700还可包括二级存储710。二级存储710包括例如硬盘驱动器和/或表示软盘驱动器、磁带驱动器、压缩光盘驱动器、数字通用光盘(DVD)驱动器、记录设备、通用串行总线(USB)闪存的可移动存储驱动器。可移动存储驱动器以公知的方式从可移动存储单元读取和/或写入到可移动存储单元。
计算机程序或计算机控制逻辑算法可存储在主存储器704和/或二级存储710中。这类计算机程序当被执行时使得系统700能够实施各种功能。存储器704、存储710和/或任何其他存储是计算机可读介质的可能的示例。程序201、IR202、IR202-1、机器代码203和编译器210可存储在主存储器704和/或二级存储710中。编译器210随后由处理器701执行以生成经优化的机器代码203。
在一个实施例中,可在以下内容的上下文中实现各先前示图的架构和/或功能性:中央处理器701、图形处理器706、能够具有中央处理器701和图形处理器706二者的能力的至少一部分的集成电路(未示出)、芯片集(即设计为作为用于实施相关功能的单元来工作和出售的集成电路组等)和/或用于此的任何其他集成电路。
还有就是,可在以下内容的上下文中实现各先前示图的架构和/或功能性:通用计算机系统、电路板系统、专用于娱乐目的的游戏机系统、特定于应用的系统和/或任何其他所期望的系统。例如,系统700可采取台式计算机、膝上型计算机、服务器、工作站、游戏机、嵌入式系统和/或任何其他类型的逻辑的形式。还有就是,系统700可采取各种其他设备的形式,包括但不限于个人数字助理(PDA)设备、移动电话设备、电视机等。
进一步地,虽然未示出,但系统700可耦连到网络(例如电信网络、局域网(LAN)、无线网、诸如互联网的广域网(WAN)、对等网络、电缆网络等等)用于通信目的。
虽然上文已描述了各实施例,但应理解的是它们通过仅示例而非限制的方式加以呈现。因此,优选实施例的宽度和范围不应被上文所述的示例性实施例中的任何一个所限制,而应仅根据下面的权利要求和其等同物来加以限定。
Claims (20)
1.一种方法,包括:
接收用于程序的源代码;
将所述源代码转译成中间表示(IR);
分析所述IR以标识能使用线程栈存储器中的第一所分配存储器空间的至少两个对象;以及
通过以对所述至少两个对象中的第二对象的引用替换对所述至少两个对象中的第一对象的引用来修改所述IR。
2.根据权利要求1所述的方法,其中所述IR包括LLVM(低级虚拟机编译器基础结构)汇编语言。
3.根据权利要求1所述的方法,其中所述源代码包括由C++、Java、C#以及Cg中的至少一个高级编程语言所指定的多个指令。
4.根据权利要求1所述的方法,其中分析所述IR包括:
标识所述IR中的多个配栈对象;
针对所述多个配栈对象中的每个配栈对象,标识具有对所述配栈对象的访问权的所有变量;
确定哪些配栈对象在所述IR中的相同点处是活的;以及
确定哪些配栈对象能被分配到所述第一所分配存储器空间。
5.根据权利要求4所述的方法,其中分析所述IR进一步包括生成用于所述多个配栈对象中的每个配栈对象的活性网。
6.根据权利要求5所述的方法,其中所述活性网包括用于所述配栈对象的def和use的合集。
7.根据权利要求1所述的方法,其中将所述源代码转译成所述IR由实现在用于图形处理单元的驱动程序中的编译器实施。
8.根据权利要求7所述的方法,其中所述源代码包括着色器程序。
9.根据权利要求1所述的方法,进一步包括:
分析所述IR以标识能使用所述线程栈存储器中的第二所分配存储器空间的至少两个附加的对象;以及
通过以对所述至少两个附加的对象中的第二对象的引用替换对所述至少两个附加的对象中的第一对象的引用来修改所述IR。
10.根据权利要求9所述的方法,其中分析所述IR以标识至少两个附加的对象包括:
标识与使用所述第一所分配存储器空间的另一个对象冲突的第一附加的对象;以及
标识与使用所述第一所分配存储器空间的另一个对象冲突的至少一个附加的对象。
11.一种存储指令的非易失性计算机可读存储介质,所述指令当由处理器执行时使所述处理器实施步骤,包括:
接收用于程序的源代码;
将所述源代码转译成中间表示(IR);
分析所述IR以标识能使用线程栈存储器中的第一所分配存储器空间的至少两个对象;以及
通过以对所述至少两个对象中的第二对象的引用替换对所述至少两个对象中的第一对象的引用来修改所述IR。
12.根据权利要求11所述的非易失性计算机可读存储介质,其中所述IR包括LLVM(低级虚拟机编译器基础结构)汇编语言。
13.根据权利要求11所述的非易失性计算机可读存储介质,其中分析所述IR包括:
标识所述IR中的多个配栈对象;
针对所述多个配栈对象中的每个配栈对象,标识具有对所述配栈对象的访问权的所有变量;
确定哪些配栈对象在所述IR中的相同点处是活的;以及
确定哪些配栈对象能被分配到所述第一所分配存储器空间。
14.根据权利要求11所述的非易失性计算机可读存储介质,其中分析所述IR进一步包括生成用于所述多个配栈对象中的每个配栈对象的活性网。
15.根据权利要求11所述的非易失性计算机可读存储介质,其中将所述源代码转译成所述IR由实现在用于图形处理单元的驱动程序中的编译器实施。
16.一种系统,包括:
存储器,其配置为存储用于程序的源代码;以及
处理单元,其配置为:
接收所述源代码,
将所述源代码转译成中间表示(IR),
分析所述IR以标识能使用线程栈存储器中的第一所分配存储器空间的至少两个对象,以及
通过利用以对所述至少两个对象中的第二对象的引用替换对所述至少两个对象中的第一对象的引用来修改所述IR。
17.根据权利要求16所述的系统,其中分析所述IR包括:
标识所述IR中的多个配栈对象;
针对所述多个配栈对象中的每个配栈对象,标识具有对所述配栈对象的访问权的所有变量;
确定哪些配栈对象在所述IR中的相同点处是活的;以及
确定哪些配栈对象能被分配到所述第一所分配存储器空间。
18.根据权利要求16所述的系统,其中所述源代码包括着色器程序。
19.根据权利要求16所述的系统,进一步包括耦连到所述处理单元和所述存储器的图形处理单元。
20.根据权利要求19所述的系统,进一步包括存储在所述存储器中的驱动程序,其中所述驱动程序实现编译器,所述编译器当由所述处理单元执行时将所述处理单元配置为接收所述源代码、将所述源代码转译成所述IR、分析所述IR以及修改所述IR。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/712,897 US9411715B2 (en) | 2012-12-12 | 2012-12-12 | System, method, and computer program product for optimizing the management of thread stack memory |
US13/712,897 | 2012-12-12 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103870242A true CN103870242A (zh) | 2014-06-18 |
Family
ID=50778374
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310675015.3A Pending CN103870242A (zh) | 2012-12-12 | 2013-12-11 | 优化线程栈存储器的管理的系统、方法和计算机程序产品 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9411715B2 (zh) |
CN (1) | CN103870242A (zh) |
DE (1) | DE102013224160A1 (zh) |
TW (1) | TWI502510B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106406748A (zh) * | 2015-07-30 | 2017-02-15 | 伊姆西公司 | 存储器中心数据库架构 |
CN107223264A (zh) * | 2016-12-26 | 2017-09-29 | 深圳前海达闼云端智能科技有限公司 | 一种渲染方法及装置 |
CN111316249A (zh) * | 2017-09-04 | 2020-06-19 | 弗索拉公司 | 改进的数据处理方法 |
CN113454592A (zh) * | 2019-02-19 | 2021-09-28 | 辉达公司 | 存储器管理系统 |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9477461B1 (en) * | 2014-03-12 | 2016-10-25 | Cloud Linux Zug GmbH | Systems and methods for generating and applying operating system live updates |
US9454327B2 (en) * | 2014-08-29 | 2016-09-27 | International Business Machines Corporation | Analytics based control of thin provisioning environment |
US9864518B2 (en) | 2014-11-10 | 2018-01-09 | International Business Machines Corporation | Assigning home memory addresses to function call parameters |
US10545739B2 (en) | 2016-04-05 | 2020-01-28 | International Business Machines Corporation | LLVM-based system C compiler for architecture synthesis |
US10831507B2 (en) | 2018-11-21 | 2020-11-10 | SambaNova Systems, Inc. | Configuration load of a reconfigurable data processor |
US11188497B2 (en) | 2018-11-21 | 2021-11-30 | SambaNova Systems, Inc. | Configuration unload of a reconfigurable data processor |
US10698853B1 (en) * | 2019-01-03 | 2020-06-30 | SambaNova Systems, Inc. | Virtualization of a reconfigurable data processor |
US11386038B2 (en) | 2019-05-09 | 2022-07-12 | SambaNova Systems, Inc. | Control flow barrier and reconfigurable data processor |
US11074055B2 (en) * | 2019-06-14 | 2021-07-27 | International Business Machines Corporation | Identification of components used in software binaries through approximate concrete execution |
CN110727520B (zh) * | 2019-10-23 | 2022-05-03 | 四川长虹电器股份有限公司 | 一种优化Android帧动画的实现方法 |
GB202010839D0 (en) * | 2020-07-14 | 2020-08-26 | Graphcore Ltd | Variable allocation |
US11550554B2 (en) * | 2021-01-07 | 2023-01-10 | Microsoft Technology Licensing, Llc | Merged machine-level intermediate representation optimizations |
US20220291962A1 (en) * | 2021-03-10 | 2022-09-15 | Texas Instruments Incorporated | Stack memory allocation control based on monitored activities |
US12086574B1 (en) * | 2021-10-28 | 2024-09-10 | Amazon Technologies, Inc. | Techniques to convert bytecode generated for a first execution environment to machine code for a second execution environment |
US11487694B1 (en) | 2021-12-17 | 2022-11-01 | SambaNova Systems, Inc. | Hot-plug events in a pool of reconfigurable data flow resources |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5774730A (en) * | 1995-07-31 | 1998-06-30 | International Business Machines Corporation | Method and apparatus for improving colorability of constrained nodes in an interference graph within a computer system |
US6226789B1 (en) * | 1996-01-29 | 2001-05-01 | Compaq Computer Corporation | Method and apparatus for data flow analysis |
US20040237074A1 (en) * | 2003-05-23 | 2004-11-25 | Microsoft Corporation | Optimizing compiler transforms for a high level shader language |
CN1609805A (zh) * | 2003-10-17 | 2005-04-27 | 松下电器产业株式会社 | 编译装置 |
US20060225061A1 (en) * | 2005-03-31 | 2006-10-05 | Nvidia Corporation | Method and apparatus for register allocation in presence of hardware constraints |
Family Cites Families (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5491821A (en) * | 1993-02-24 | 1996-02-13 | International Business Machines Corporation | Method and system for incremental processing of computer objects |
US5487158A (en) * | 1993-04-06 | 1996-01-23 | International Business Machines Corporation | Method and procedure call mechanism for calling 16-bit functions from 32-bit functions |
US6091897A (en) * | 1996-01-29 | 2000-07-18 | Digital Equipment Corporation | Fast translation and execution of a computer program on a non-native architecture by use of background translator |
TW470915B (en) * | 1996-03-12 | 2002-01-01 | Matsushita Electric Ind Co Ltd | Optimization apparatus which removes transfer instructions by a global analysis of equivalence relations |
US5978588A (en) * | 1997-06-30 | 1999-11-02 | Sun Microsystems, Inc. | Method and apparatus for profile-based code placement using a minimum cut set of the control flow graph |
CA2211515C (en) * | 1997-07-25 | 2001-12-11 | Kevin Alexander Stoodley | System and method of local data alignment for stack memory |
US6735761B1 (en) * | 1998-05-15 | 2004-05-11 | International Business Machines Corporation | Compile method frame detection method and device code discarding method and computer |
US6434743B1 (en) * | 1999-04-23 | 2002-08-13 | Sun Microsystems, Inc. | Method and apparatus for allocating stack slots |
US6675378B1 (en) * | 2000-01-06 | 2004-01-06 | International Business Machines Corporation | Object oriented apparatus and method for allocating array objects on an invocation stack |
US6505344B1 (en) * | 2000-01-12 | 2003-01-07 | International Business Machines Corporation | Object oriented apparatus and method for allocating objects on an invocation stack |
US20020170047A1 (en) * | 2001-02-23 | 2002-11-14 | Brian Swetland | System and method for transforming object code |
US7028286B2 (en) * | 2001-04-13 | 2006-04-11 | Pts Corporation | Methods and apparatus for automated generation of abbreviated instruction set and configurable processor architecture |
US7278137B1 (en) * | 2001-12-26 | 2007-10-02 | Arc International | Methods and apparatus for compiling instructions for a data processor |
US7647585B2 (en) * | 2003-04-28 | 2010-01-12 | Intel Corporation | Methods and apparatus to detect patterns in programs |
US20050120265A1 (en) | 2003-12-02 | 2005-06-02 | Pline Steven L. | Data storage system with error correction code and replaceable defective memory |
US7409678B2 (en) * | 2004-01-28 | 2008-08-05 | International Business Machines Corporation | Compiler, compilation and storage |
US7302515B1 (en) * | 2004-03-12 | 2007-11-27 | Sun Microsystems, Inc. | Exploiting popular objects to reduce mutator overhead |
US7581213B2 (en) * | 2004-06-25 | 2009-08-25 | Intel Corporation | Allocating automatic variables to different memory banks |
US8037465B2 (en) * | 2005-09-30 | 2011-10-11 | Intel Corporation | Thread-data affinity optimization using compiler |
US8266609B2 (en) * | 2005-12-07 | 2012-09-11 | Microsoft Corporation | Efficient placement of software transactional memory operations around procedure calls |
US8117605B2 (en) * | 2005-12-19 | 2012-02-14 | Oracle America, Inc. | Method and apparatus for improving transactional memory interactions by tracking object visibility |
TWI312112B (en) | 2005-12-30 | 2009-07-11 | Ind Tech Res Inst | Data managing method, method and apparatus to snapshot data for multiple volumes to a single snapshot volume in a data processing system |
US8516462B2 (en) * | 2006-10-09 | 2013-08-20 | International Business Machines Corporation | Method and apparatus for managing a stack |
CN102165428B (zh) * | 2008-08-13 | 2015-05-20 | 高通股份有限公司 | 软件应用性能增强 |
US8898625B2 (en) * | 2008-12-15 | 2014-11-25 | Victor Leonel Hernandez Porras | Optimized storage of function variables |
JP4852621B2 (ja) * | 2009-03-03 | 2012-01-11 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラム中のオブジェクトの割り付け場所を追跡する方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム |
US8237726B2 (en) * | 2009-06-26 | 2012-08-07 | Intel Corporation | Register allocation for message sends in graphics processing pipelines |
US8429635B2 (en) * | 2009-10-28 | 2013-04-23 | International Buisness Machines Corporation | Controlling compiler optimizations |
US9195486B2 (en) * | 2010-07-30 | 2015-11-24 | Apple Inc. | Observation and analysis based code optimization |
US9424015B2 (en) * | 2011-02-08 | 2016-08-23 | Oracle International Corporation | System and method for optimizing software transactional memory operations using static caching of memory objects |
US8566537B2 (en) | 2011-03-29 | 2013-10-22 | Intel Corporation | Method and apparatus to facilitate shared pointers in a heterogeneous platform |
US8539463B2 (en) * | 2011-07-28 | 2013-09-17 | Qualcomm Innovation Center, Inc. | Apparatus and method for improving the performance of compilers and interpreters of high level programming languages |
US20130141443A1 (en) * | 2011-12-01 | 2013-06-06 | Michael L. Schmit | Software libraries for heterogeneous parallel processing platforms |
US9361079B2 (en) * | 2012-01-30 | 2016-06-07 | Nvidia Corporation | Method for compiling a parallel thread execution program for general execution |
US8943290B2 (en) * | 2012-03-27 | 2015-01-27 | Oracle International Corporation | Automatic management of heterogeneous memory resources |
-
2012
- 2012-12-12 US US13/712,897 patent/US9411715B2/en active Active
-
2013
- 2013-11-08 TW TW102140654A patent/TWI502510B/zh not_active IP Right Cessation
- 2013-11-26 DE DE102013224160.7A patent/DE102013224160A1/de not_active Withdrawn
- 2013-12-11 CN CN201310675015.3A patent/CN103870242A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5774730A (en) * | 1995-07-31 | 1998-06-30 | International Business Machines Corporation | Method and apparatus for improving colorability of constrained nodes in an interference graph within a computer system |
US6226789B1 (en) * | 1996-01-29 | 2001-05-01 | Compaq Computer Corporation | Method and apparatus for data flow analysis |
US20040237074A1 (en) * | 2003-05-23 | 2004-11-25 | Microsoft Corporation | Optimizing compiler transforms for a high level shader language |
CN1609805A (zh) * | 2003-10-17 | 2005-04-27 | 松下电器产业株式会社 | 编译装置 |
US20060225061A1 (en) * | 2005-03-31 | 2006-10-05 | Nvidia Corporation | Method and apparatus for register allocation in presence of hardware constraints |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106406748A (zh) * | 2015-07-30 | 2017-02-15 | 伊姆西公司 | 存储器中心数据库架构 |
CN106406748B (zh) * | 2015-07-30 | 2020-12-22 | 伊姆西公司 | 存储器中心数据库架构 |
CN107223264A (zh) * | 2016-12-26 | 2017-09-29 | 深圳前海达闼云端智能科技有限公司 | 一种渲染方法及装置 |
CN111316249A (zh) * | 2017-09-04 | 2020-06-19 | 弗索拉公司 | 改进的数据处理方法 |
CN111316249B (zh) * | 2017-09-04 | 2023-09-29 | 弗索拉公司 | 改进的数据处理方法 |
CN113454592A (zh) * | 2019-02-19 | 2021-09-28 | 辉达公司 | 存储器管理系统 |
Also Published As
Publication number | Publication date |
---|---|
US9411715B2 (en) | 2016-08-09 |
TW201439914A (zh) | 2014-10-16 |
TWI502510B (zh) | 2015-10-01 |
US20140164727A1 (en) | 2014-06-12 |
DE102013224160A1 (de) | 2014-06-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103870242A (zh) | 优化线程栈存储器的管理的系统、方法和计算机程序产品 | |
US11847508B2 (en) | Convergence among concurrently executing threads | |
CN101231585B (zh) | 定义用于目标平台结构的并行处理操作方法 | |
CN104050632B (zh) | 用于多样本像素数据处理的方法和系统 | |
US9535815B2 (en) | System, method, and computer program product for collecting execution statistics for graphics processing unit workloads | |
CN110008009B (zh) | 在运行时绑定常量以提高资源利用率 | |
Nugteren et al. | Introducing'Bones' a parallelizing source-to-source compiler based on algorithmic skeletons | |
CN103460188A (zh) | 用于基于活跃分析的再具体化以减少寄存器不足并提高并行度的技术 | |
US20130198494A1 (en) | Method for compiling a parallel thread execution program for general execution | |
CN101556544A (zh) | 为了用于由通用处理器执行而对应用程序重定目标 | |
CN103838669A (zh) | 用于本地调试图形程序的系统、方法和计算机程序产品 | |
US9880851B2 (en) | System, method, and computer program product for implementing large integer operations on a graphics processing unit | |
CN103810228A (zh) | 用于经采样的后缀数组的并行重建的系统、方法和产品 | |
EP3726382A1 (en) | Deep learning thread communication | |
US9471307B2 (en) | System and processor that include an implementation of decoupled pipelines | |
CN103870309A (zh) | 用于集群多级寄存器堆的寄存器分配 | |
CN103914804A (zh) | 用于分块式延期着色的系统、方法和计算机程序产品 | |
Boyd | Data-Parallel Computing: Data parallelism is a key concept in leveraging the power of today’s manycore GPUs. | |
Miyoshi et al. | FLAT: A GPU programming framework to provide embedded MPI | |
Papakipos | The PeakStream platform: High-Productivity software development for multi-core processors | |
CN104050633A (zh) | 使用样本子集的多样本表面处理 | |
US20230144553A1 (en) | Software-directed register file sharing | |
Ribeiro et al. | A framework for efficient execution of data parallel irregular applications on heterogeneous systems | |
Langner et al. | Parallelization of Myers fast bit-vector algorithm using GPGPU | |
Potter | Programming Models for Heterogeneous Systems with Application to Computer Graphics |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20140618 |