CN117950726A - 基于gpu指令集的spir-v链式操作指令处理方法 - Google Patents
基于gpu指令集的spir-v链式操作指令处理方法 Download PDFInfo
- Publication number
- CN117950726A CN117950726A CN202410346435.5A CN202410346435A CN117950726A CN 117950726 A CN117950726 A CN 117950726A CN 202410346435 A CN202410346435 A CN 202410346435A CN 117950726 A CN117950726 A CN 117950726A
- Authority
- CN
- China
- Prior art keywords
- instruction
- index
- base
- offset
- gpu
- 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
- 238000003672 processing method Methods 0.000 title abstract description 8
- 238000000034 method Methods 0.000 claims abstract description 20
- 238000012545 processing Methods 0.000 claims abstract description 18
- 239000011159 matrix material Substances 0.000 claims description 8
- 238000004364 calculation method Methods 0.000 claims description 7
- 230000008569 process Effects 0.000 claims description 7
- 230000006870 function Effects 0.000 description 8
- 238000004590 computer program Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 239000002131 composite material Substances 0.000 description 3
- 230000004075 alteration Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000008094 contradictory effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000002250 progressing effect Effects 0.000 description 1
- 238000011160 research Methods 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/3017—Runtime instruction translation, e.g. macros
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种基于GPU指令集的SPIR‑V链式操作指令处理方法,包括:遍历SPIR‑V二进制指令流,对于每一个链式操作指令,提取指令的基地址base和索引值index序列;通过编译器处理或插入GPU指令序列计算每一条指令中的索引元素相对基地址base的地址偏移量destOffset,以及根据每一条指令的操作码插入不同的GPU指令序列来计算索引元素的绝对地址chainDest或者直接对基地址base的destOffset偏移处进行读写操作,遍历余下的所有指令直到指令流中所有指令均翻译完成。通过本发明,将SPIR‑V指令集中的链式操作指令在保持语义的前提下翻译成低抽象层级的GPU指令序列。
Description
技术领域
本发明涉及SPIR-V指令操作解析领域,更具体地,涉及一种基于GPU指令集的SPIR-V链式操作指令处理方法。
背景技术
SPIR-V是一种标准中间语言,支持OpenCL、vulkan、OpenGL等计算或者图形语言向其进行转化,目的是提供一个可移植、高性能的中间表示,方便在不同的GPU架构平台上运行。目前国外主流GPU厂商如NVIDIA、AMD等已陆续完成对该标准的支持,国内尚处于起步状态,尚无国内厂商宣传能对最新SPIR-V标准完全支持,由于能支持SPIR-V标准的GPU驱动均为闭源,无法知悉其具体实现途径,形成了技术壁垒,因此展开对SPIRV指令翻译相关的技术研究是完善GPU软件生态的重要一环。
要实现对SPIR-V标准的支持,需要对其标准规定的指令集完成翻译,生成能在GPU上执行的具有相同功能和语义的指令序列,由于各个GPU厂商的指令集并不相同,其实现方案也会有较大差别,无法实现其通用性。
发明内容
本发明针对现有技术中存在的技术问题,对于SPIR-V指令集中使用频率很高的链式操作指令,提供一种基于GPU指令集的SPIR-V链式操作指令处理方法,包括:
步骤S1,遍历SPIR-V二进制指令流,当匹配到一条链式操作指令时,生成表征第一条链式操作指令中目的操作数符号,符号记为chainDest,在符号中保存所述链式操作指令的基地址base和索引值index序列,并将符号chainDest插入到GPU编译器对象中的符号哈希表中,其中,索引值index序列是一个数值序列,用以表征嵌套数据结构的访问,index[0]、…、index[n]分别表示索引第0层数据结构、…、第n层数据结构的第index[n]个元素;
步骤S2,按照指令顺序继续翻译SPIR-V二进制指令流中余下的指令,对于任一条指令检查其源操作数符号是否为步骤S1中的符号chainDest,若是则提取所述链式操作指令的基地址base和索引值index序列并执行步骤S3;若不是则跳过剩余所有步骤;
步骤S3,基于所述任一条指令的源操作数符号的数据类型,通过编译器处理或插入GPU指令序列来计算所述链式操作指令中的索引元素相对基地址base的地址偏移量destOffset;
步骤S4,判断所述任一条指令的操作码,根据所述操作码插入GPU指令序列来计算索引元素的绝对地址chainDest或者直接对基地址base的destOffset偏移处进行读写操作;
步骤5,继续遍历SPIR-V二进制指令流中剩余的指令,直到所有指令均翻译完成,其中,每条链式操作指令处理过程中插入不同的GPU指令序列即为对应链式操作指令翻译后的GPU指令序列。
本发明提供的一种基于GPU指令集的SPIR-V链式操作指令的处理方法,能够将SPIR-V指令流中使用频率较高的链式操作指令在保持语义的前提下翻译成对应的国产GPU指令序列。
附图说明
图1为本发明提供的一种基于GPU指令集的SPIR-V链式操作指令的处理方法流程图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。另外,本发明提供的各个实施例或单个实施例中的技术特征可以相互任意结合,以形成可行的技术方案,这种结合不受步骤先后次序和/或结构组成模式的约束,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时,应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
在对本发明提供的方法进行介绍之前,对本发明中涉及到的基础知识进行介绍。
SPIR-V是国际标准组织khronos Group于2014年提出的一种标准中间语言,支持OpenCL、vulkan、OpenGL等计算或者图形语言向其进行转化,目的是提供一个可移植、高性能的中间表示,方便在不同的GPU架构平台上运行。
SPIR-V的指令是由一串二进制数据流组成的,每一个word有32位,遵循小端字节序,每一条指令由一个或者多个word来表示。
每条指令的第一个word会记录Opcode(操作码)和wordCount(指令长度),不同的Opcode后面跟着的参数定义是不一样的,根据wordCount也可以很清晰的知道下一条指令的起始位置。
对于链式操作指令,其指令格式为:
其中Opcode和wordCount表示操作码和指令长度,ResultType表示指令的返回类型,Result<id>为目的操作数,表示指令返回值的序号,通常在一条指令被的结果被其他指令引用或者引用其他指令时使用,base表示取值的基地址,indexes表示索引序列,下面用代码来举例说明链式操作指令的具体含义。
如对于以下数据结构
struct child
{
int b;
float c;
};
struct parrent
{
char a;
struct child *cld;
};
对于一个指向结构体parrent对象的指令p来说,如果要访问parrent对象中的intb成员,使用p->cld->b,该源码翻译成SPIR-V指令序列的伪代码如下:
<链式操作指令opCode+wordCount> <type:float> <resultId> <base:p> <1,1>
其中ResultType为b的数据类型即为int整型,重点需要关注indexes,在本例中indexes序列为1,0,其中第一个1表示要索引的数据成员b在第0层(第几个数就是第几层)数据结构(struct parrent)的第1个元素(cld),第二个1表示b在第1层数据结构(structchild)的第0个元素(b);对于多重数据结构的嵌套,依次类推,该复合数据结构的深层次成员访问遵循一个链式的访问模式,一层一层的往下递进,故该系列的操作指令称之为链式操作指令。
在翻译成国产GPU指令时,由于GPU指令集架构中一般不会包含像成员访问这种高抽象层次的指令,因此,本发明将SPIR-V指令进行指令上的拆分,对于一个复杂的数据结构对象来说,每个成员会占据一定的大小,第一个数据存放在该对象的起始地址,然后依次排列,根据该原理可以计算出每个成员相对于对象起始地址的偏移,在实际调用时,可以计算出每个成员的绝对地址,根据后续操作该对象的指令不同,可以对这个绝对地址进行访存、运算、比较等各种基础操作,从而达到了实现翻译链式操作指令的目的。
国产GPU指令架构中,都会有一些通用的基础指令,如基础的算术运算,add(加法)、sub(减法)、mul(乘法)、div(除法)、mod(取余数)等,访存一般使用load(读取地址内的数据)和store(向地址内写入数据),其中load表示从某个地址中取数据,store表示往某个地址里写数据,在本发明中,主要会用到add、mul、load、store指令来完成对SPIR-V中取址指令的翻译。
如图1所示,本发明提供的基于国产GPU指令集的SPIR-V链式操作指令处理方法,包括如下步骤:
步骤S1,遍历SPIR-V二进制指令流,当匹配到一条链式操作指令时,生成表征第一条链式操作指令中目的操作数符号,符号记为chainDest,在符号中保存所述链式操作指令的基地址base和索引值index序列,并将符号chainDest插入到GPU编译器对象中的符号哈希表中,其中,索引值index序列是一个数值序列,用以表征嵌套数据结构的访问,index[0]、…、index[n]分别表示索引第0层数据结构、…、第n层数据结构的第index[n]个元素。
步骤S2,按照指令顺序继续翻译SPIR-V二进制指令流中余下的指令,对于任一条指令检查其源操作数符号是否为步骤S1中的chainDest,若是则提取所述任一条指令的基地址base和索引值index序列并执行步骤S3;若不是则跳过剩余所有步骤。
可理解的是,上述步骤提取到SPIR-V二进制指令流中的一条链式操作指令的目的操作数符号,符号中保存链式操作指令的基地址base和索引值index序列。
对于SPIR-V二进制指令流中其余的每一条指令,首先,判断每一条指令是否引用第一条链接操作指令,如果引用了第一条链式操作指令,则对该条指令进行解析处理,如果没有引用第一条链式操作指令,则不对该条指令进行解析处理。其中,判断后续的一条指令是否引用了第一条链式操作指令,通过判断该条指令源操作数符号是否为第一条链式操作指令的目的操作数符号符号,如果是,则表明该条指令引用了第一条链式操作指令,如不是,则该条指令没有引用第一条链式操作指令。后续只对引用了第一条链式操作指令的指令进行翻译处理。
步骤S3,基于所述任一条指令的源操作数符号的数据类型,通过编译器处理或插入GPU指令序列来计算所述链式操作指令中的索引元素相对基地址base的地址偏移量destOffset。
其中,步骤S3包括以下子步骤:
步骤S301,判断每一条指令的源操作数符号chainDest的数据类型,若数据类型不为标量则执行步骤S303,若数据类型是标量,则表示没有数据结构的嵌套,判断索引值index序列的成员个数,若成员个数不为1则返回错误信息并结束所有步骤,若成员个数为1则继续步骤S302。
步骤S302,使用C库中的sizeof函数直接计算标量所占的字节大小,与寄存器大小对齐后记该大小为scalSize,然后在GPU编译器对象中的指令链表末尾插入一条mul指令,mul指令源操作数分别是saclSize和index[0],目的操作数符号记为destOffset,destOffset即表示scalSize和index[0]的乘积,在物理上表示索引元素相对base的地址偏移,操作结束后执行步骤S4。
步骤S303,判断源操作数符号chainDest的数据类型,若不是结构体则执行步骤S304,若是结构体类型,需要遍历结构体的每一层的每个成员所占的字节大小,其中数据结构层次一直划分到第n层为止,其中n为索引值index序列的成员个数。然后计算每个成员相对于其第一层父结构的字节偏移,计算方式为将该成员的前面所有成员大小相加即为该成员的字节偏移,对于第m层的第index[m]个元素,m≤n,索引元素相对base的地址偏移destOffset计算方法为 ,其中offset[i]表示的是第i层第index[i]个元素相对于其第一层父结构的偏移,即计算出第m层的第index[m]个元素的偏移量。根据SPIR-V 标准,对于结构体类型index索引值必须是常量,故可以在编译器中计算出offset[i]的值,不必添加额外的GPU指令来完成该计算任务,生成一个额外的立即数符号来保存该值即可,立即数符号依旧用destOffset来表示,执行完毕后跳转到步骤S4。
步骤S304, 判断源操作数符号的数据类型,若数据类型不是数组、矩阵或者向量类型则执行步骤S4,若是数组、矩阵或者向量类型,其中矩阵可以看做特殊的二维数组或者二维向量,由于该复合结构的成员类型都是一样的,故获取该复合结构成员的间隔(stride),即相邻两个成员起始地址间隔的字节大小。根据SPIR-V标准,对于数组、矩阵或者向量类型,index[i]可以是常量或者变量,对于index[i]是常量的情况,对于第p层的第index[p]个元素,p≤n,其偏移值的计算法方法为,同结构体一样用立即数符号destOffset来保存该值即可;对于index[i]是向量的情况,需要使用GPU指令完成该计算任务,该计算方法总共包含n+1条乘法操作和n条加法操作,故在编译器对象中的指令链表末尾按顺序插入n+1条乘法指令和n条加法指令,每条指令的操作数分别对应上述每个加法操作数或者乘法的操作数,最后一条指令的目的操作数destOffset表征索引元素相对于基地址base的地址偏移,执行完毕后跳转到步骤S4。
步骤S4,判断所述任一条指令的操作码,根据所述操作码插入不同的GPU指令序列来计算索引元素的绝对地址chainDest或者直接对基地址base的destOffset偏移处进行读写操作。
其中,步骤S4包括以下子步骤:
步骤S401,获取步骤S2中每一条指令的操作码,若该指令操作码不是OpLoad或者OpStore,则执行步骤S402;若该指令操作码是OpLoad或者OpStore,则在编译器对象中的指令链表末尾插入一条Load指令或者Store指令,其中Load指令或者Store指令中的基地址为base,偏移量为destOffset,Load指令和Store指令无需使用绝对地址chainDest,执行完毕后调整到步骤S5。
步骤S402,在编译器对象中的指令链表末尾插入一条加法指令,用来计算base+destOffset以得到索引元素的绝对地址,加法指令的目的操作数为chainDest,完成操作后执行步骤S5。
步骤5,继续遍历SPIR-V二进制指令流中剩余的指令,直到所有指令均翻译完成,其中,每条链式操作指令处理过程中插入的GPU指令序列即为对应链式操作指令翻译后的GPU指令序列。
本发明提供的一种基于GPU指令集的SPIR-V链式操作指令的处理方法,具有以下有益效果:
(1)本发明对SPIR-V指令集中的单条链式操作指令进行功能上的拆分,通过国产GPU指令集中通用的基础指令组合成的指令序列,达到了与链式操作指令相同的功能和语义,实现了SPIR-V指令集到国产GPU指令集的一种通用的指令映射。
(2)在映射过程中针对链式操作的操作数据类型的不同,采用了不同的计算索引元素相对地址和绝对地址的方法,以达到映射后的指令在功能保持不变的情况下指令数量最少,从而提升翻译后的指令序列执行效率。
需要说明的是,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其它实施例的相关描述。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式计算机或者其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包括这些改动和变型在内。
Claims (5)
1.一种基于GPU指令集的SPIR-V链式操作指令的处理方法,其特征在于,包括:
步骤S1,遍历SPIR-V二进制指令流,当匹配到一条链式操作指令时,生成表征第一条链式操作指令中目的操作数符号,符号记为chainDest,在符号中保存所述链式操作指令的基地址base和索引值index序列,并将符号chainDest插入到GPU编译器对象中的符号哈希表中,其中,索引值index序列是一个数值序列,用以表征嵌套数据结构的访问,index[0]、…、index[n]分别表示索引第0层数据结构、…、第n层数据结构的第index[n]个元素;
步骤S2,按照指令顺序继续翻译SPIR-V二进制指令流中余下的指令,对于任一条指令检查其源操作数符号是否为步骤S1中的符号chainDest,若是则提取所述链式操作指令的基地址base和索引值index序列并执行步骤S3;若不是则跳过剩余所有步骤;
步骤S3,基于所述任一条指令的源操作数符号的数据类型,通过编译器处理或插入GPU指令序列来计算所述链式操作指令中的索引元素相对基地址base的地址偏移量destOffset;
步骤S4,获取所述任一条指令的操作码,根据所述操作码插入不同的GPU指令序列来计算索引元素的绝对地址chainDest或者直接对基地址base的destOffset偏移处进行读写操作;
步骤5,继续遍历SPIR-V二进制指令流中剩余的指令,直到所有指令均翻译完成,其中,每条链式操作指令处理过程中插入不同的GPU指令序列即为对应链式操作指令翻译后的GPU指令序列。
2.根据权利要求1所述的基于GPU指令集的SPIR-V链式操作指令的处理方法,其特征在于,所述步骤S3,基于所述任一条指令的源操作数符号的数据类型,通过编译器处理或插入GPU指令序列来计算所述链式操作指令中的索引元素相对基地址base的地址偏移量destOffset,包括:
步骤S301,判断所述任一条指令的源操作数符号chainDest的数据类型,若不为标量则执行步骤S303,若是标量,则表示所述任一条指令中没有数据结构的嵌套,判断index序列的成员个数,若成员个数不为1则返回错误信息并结束所有步骤,若成员个数为1则继续步骤S302;
步骤S302:使用C库中的sizeof函数计算标量所占的字节大小,与寄存器大小对齐后记标量大小为scalSize,在编译器对象中的指令链表末尾插入一条mul指令,mul指令的源操作数分别是scalSize和index[0],mul指令的目的操作数符号记为destOffset,destOffset为scalSize和index[0]的乘积,在物理上表示索引元素相对基地址base的地址偏移,操作结束后执行步骤S4。
3.根据权利要求2所述的基于GPU指令集的SPIR-V链式操作指令的处理方法,所述步骤S303,包括:
判断所述任一条指令中的源操作数符号的数据类型,若不是结构体则执行步骤S304,若是结构体类型,则遍历结构体的每一层的每个成员所占的字节大小,其中数据结构层次一直划分到第n层为止,n为index序列的成员个数;
计算每个成员相对于其第一层父结构的字节偏移,计算方式为将每个成员的前面所有成员大小相加即为每个成员的字节偏移,对于第m层的第index[m]个元素,m≤n,索引元素相对基地址base的地址偏移destOffset计算方法为 ,其中offset[i]表示的是第i层第index[i]个元素相对于其第一层父结构的偏移,根据SPIR-V 标准,对于结构体类型index索引值为常量,在编译器中计算出offset[i]的值,并生成一个额外的立即数符号来保存offset[i]的值,立即数符号用destOffset来表示,执行完毕后跳转到步骤S4。
4.根据权利要求3所述的基于GPU指令集的SPIR-V链式操作指令的处理方法,其特征在于,所述步骤S304,包括:
判断所述任一条操作指令的源操作数符号的数据类型,若不是数组、矩阵或者向量类型则执行步骤S4,若是数组、矩阵或者向量类型,获取数组、矩阵或者向量结构成员的间隔stride,即相邻两个成员起始地址间隔的字节大小;
根据SPIR-V标准,对于数组、矩阵或者向量类型,index[i]为常量或者变量,若index[i]为常量,对于第p层的第index[p]个元素,p≤n,在编译器中直接计算索引元素的实际偏移量,其计算方法为,用立即数符号destOffset来保存索引元素的实际偏移量;
对于index[i]是变量的情况,需要使用GPU指令完成计算任务,计算方法总共包含n+1条乘法操作和n条加法操作,在编译器对象中的指令链表末尾按顺序插入n+1条乘法指令和n条加法指令,每条指令的操作数分别对应每个加法操作或者乘法操作的操作数,最后一条指令的目的操作数destOffset表征索引元素相对于base的地址偏移,执行完毕后跳转到步骤S4。
5.根据权利要求4所述的基于GPU指令集的SPIR-V链式操作指令的处理方法,其特征在于,所述步骤S4,判断所述任一条指令的操作码,根据所述操作码插入不同的GPU指令序列来计算索引元素的绝对地址chainDest或者直接对基地址base的destOffset偏移处进行读写操作,包括:
步骤S401,获取步骤S2中所述任一指令的操作码,若所述操作码不是OpLoad或者OpStore,则执行步骤S402,若所述操作码是OpLoad或者OpStore,则在编译器对象中的指令链表末尾插入一条Load指令或者Store指令,其中Load指令或Store指令中的基地址为base,偏移量为destOffset,Load指令和Store指令无需使用绝对地址chainDest,可直接对基地址为base,偏移为destOffset处的数据进行读取和写入,执行完毕后调整到步骤S5;
步骤S402,在编译器对象中的指令链表末尾插入一条加法指令,用来计算base+destOffset以得到索引元素的绝对地址,加法指令的目的操作数为chainDest,完成操作后执行步骤S5。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410346435.5A CN117950726B (zh) | 2024-03-26 | 2024-03-26 | 基于gpu指令集的spir-v链式操作指令处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410346435.5A CN117950726B (zh) | 2024-03-26 | 2024-03-26 | 基于gpu指令集的spir-v链式操作指令处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117950726A true CN117950726A (zh) | 2024-04-30 |
CN117950726B CN117950726B (zh) | 2024-06-21 |
Family
ID=90801772
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410346435.5A Active CN117950726B (zh) | 2024-03-26 | 2024-03-26 | 基于gpu指令集的spir-v链式操作指令处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117950726B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118550547A (zh) * | 2024-07-26 | 2024-08-27 | 武汉凌久微电子有限公司 | 一种gpu程序编译加速方法 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180113708A1 (en) * | 2016-10-20 | 2018-04-26 | Jesus Corbal | Systems, apparatuses, and methods for chained fused multiply add |
US20180293205A1 (en) * | 2017-04-09 | 2018-10-11 | Intel Corporation | Graphics processing integrated circuit package |
US20200310804A1 (en) * | 2019-03-30 | 2020-10-01 | Intel Corporation | Method and apparatus for vector-matrix comparison |
CN113656071A (zh) * | 2021-10-18 | 2021-11-16 | 深圳市智想科技有限公司 | 一种基于risc架构的cpu指令集系统及cpu系统 |
CN114078076A (zh) * | 2020-08-17 | 2022-02-22 | 英特尔公司 | 用于压缩光线追踪加速结构构建数据的装置和方法 |
CN116339739A (zh) * | 2021-12-24 | 2023-06-27 | 英特尔公司 | 用于在图形处理单元上执行的内核源适配 |
CN116436874A (zh) * | 2022-01-13 | 2023-07-14 | 辉达公司 | 使用备用指示集的网络组播 |
US20230229630A1 (en) * | 2022-01-19 | 2023-07-20 | Nvidia Corporation | Processing variable-length data |
CN116627502A (zh) * | 2023-07-21 | 2023-08-22 | 紫光同芯微电子有限公司 | 跳转指令的优化方法、指令的跳转方法、装置、电子设备 |
CN116661804A (zh) * | 2023-07-31 | 2023-08-29 | 珠海市芯动力科技有限公司 | 代码编译方法、代码编译装置、电子设备和存储介质 |
CN116783578A (zh) * | 2021-05-13 | 2023-09-19 | 辉达公司 | 执行矩阵值指示 |
CN117056280A (zh) * | 2022-05-13 | 2023-11-14 | 斯法夫股份有限公司 | 具有窄数据路径的向量收集 |
-
2024
- 2024-03-26 CN CN202410346435.5A patent/CN117950726B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180113708A1 (en) * | 2016-10-20 | 2018-04-26 | Jesus Corbal | Systems, apparatuses, and methods for chained fused multiply add |
US20180293205A1 (en) * | 2017-04-09 | 2018-10-11 | Intel Corporation | Graphics processing integrated circuit package |
US20200310804A1 (en) * | 2019-03-30 | 2020-10-01 | Intel Corporation | Method and apparatus for vector-matrix comparison |
CN114078076A (zh) * | 2020-08-17 | 2022-02-22 | 英特尔公司 | 用于压缩光线追踪加速结构构建数据的装置和方法 |
CN116783578A (zh) * | 2021-05-13 | 2023-09-19 | 辉达公司 | 执行矩阵值指示 |
CN113656071A (zh) * | 2021-10-18 | 2021-11-16 | 深圳市智想科技有限公司 | 一种基于risc架构的cpu指令集系统及cpu系统 |
CN116339739A (zh) * | 2021-12-24 | 2023-06-27 | 英特尔公司 | 用于在图形处理单元上执行的内核源适配 |
CN116436874A (zh) * | 2022-01-13 | 2023-07-14 | 辉达公司 | 使用备用指示集的网络组播 |
US20230229630A1 (en) * | 2022-01-19 | 2023-07-20 | Nvidia Corporation | Processing variable-length data |
CN117056280A (zh) * | 2022-05-13 | 2023-11-14 | 斯法夫股份有限公司 | 具有窄数据路径的向量收集 |
CN116627502A (zh) * | 2023-07-21 | 2023-08-22 | 紫光同芯微电子有限公司 | 跳转指令的优化方法、指令的跳转方法、装置、电子设备 |
CN116661804A (zh) * | 2023-07-31 | 2023-08-29 | 珠海市芯动力科技有限公司 | 代码编译方法、代码编译装置、电子设备和存储介质 |
Non-Patent Citations (3)
Title |
---|
WILL ANIELEWICZ;SIMON EVES;: "虚幻引擎和光线追踪带来的启示", 中国集成电路, no. 06, 5 June 2017 (2017-06-05), pages 70 - 73 * |
彭获然等: "基于国产GPU的GLSL编译器设计", 《计算机与数字工程》, 20 June 2019 (2019-06-20), pages 23 - 32 * |
马金鑫;李舟军;忽朝俭;张俊贤;郭涛;: "一种重构二进制代码中类型抽象的方法", 计算机研究与发展, no. 11, 15 November 2013 (2013-11-15), pages 2418 - 2428 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118550547A (zh) * | 2024-07-26 | 2024-08-27 | 武汉凌久微电子有限公司 | 一种gpu程序编译加速方法 |
Also Published As
Publication number | Publication date |
---|---|
CN117950726B (zh) | 2024-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN117950726B (zh) | 基于gpu指令集的spir-v链式操作指令处理方法 | |
JP6159825B2 (ja) | ハードウェアポインタを使用したsimdコア内での分岐ブランチに対するソリューション | |
KR101581177B1 (ko) | 단일 명령 다중 데이터(simd)데이터 처리기에서 확장된 어드레싱 모드들의 제공 | |
US8051226B2 (en) | Circular buffer support in a single instruction multiple data (SIMD) data processor | |
CN105453071B (zh) | 用来提供向量族群计数功能的方法、设备、指令和逻辑 | |
EP2715536B1 (en) | Hardware support for hashtables in dynamic languages | |
US7877741B2 (en) | Method and corresponding apparatus for compiling high-level languages into specific processor architectures | |
JP6236093B2 (ja) | 並列パイプラインにおいてブランチを分岐するためのハードウェアおよびソフトウェアソリューション | |
CN103582872A (zh) | 在数据处理装置中的地址产生 | |
US20090049431A1 (en) | Method and compiler of compiling a program | |
US20090249304A1 (en) | Code Instrumentation Method and Code Instrumentation Apparatus | |
CN101223504A (zh) | 高速缓存用于多状态处理器的指令 | |
CN107003850A (zh) | 用于数据推测执行的系统、装置和方法 | |
US7383420B2 (en) | Processor and method of indirect register read and write operations | |
US8095775B1 (en) | Instruction pointers in very long instruction words | |
CN115640047A (zh) | 指令操作方法及装置、电子装置及存储介质 | |
Scott et al. | Structuring the GLL parsing algorithm for performance | |
Sapuan et al. | General-purpose computation on GPUs in the browser using GPU. js | |
US7966474B2 (en) | System, method and computer program product for translating storage elements | |
US9021238B2 (en) | System for accessing a register file using an address retrieved from the register file | |
CN113176877A (zh) | 实体类生成方法、装置及存储介质 | |
CN117008972B (zh) | 一种指令分析方法、装置、计算设备及存储介质 | |
CN115421864B (zh) | 一种通用的PowerPC架构处理器指令集虚拟化仿真方法 | |
Barnaś et al. | Accelerated Thomas Solver for (Quasi-) Block-Tridiagonal Linear Algebraic Equation Systems, Using SSE/AVX Instruction Sets for Vectorizing Dense Block Operations | |
Sun et al. | Exploiting pure superword level parallelism for array indirections |
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 |