一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于控制流图推导地址的方法、装置及可读存储介质与流程

2021-12-17 19:20:00 来源:中国专利 TAG:


1.本公开一般地涉及计算机领域。更具体地,本公开涉及基于控制流图推导地址的方法、装置及可读存储介质。


背景技术:

2.传统通用处理器具有自动管理存储的机制,对于访问数据,只需要简单利用取出(load)或保存(store)指令,便可将数据从寄存器加载到片内寄存器中进行处理,处理完成后的结果再经过寄存器存回到内存中,以达到加快对片外内存进行数据处理的执行速度。
3.但对于人工智能等专用芯片而言,由于顾虑到性能、面积、功耗等因素,并不采用自动存储管理的机制,而是以指令显式地管理片上空间,在访问数据时,往往需要额外域或参数设置访存指令所操作的地址空间,从而增加了编程难度,因此,一种更有效的地址推导方案是迫切需要的。


技术实现要素:

4.为了至少部分地解决背景技术中提到的技术问题,本公开的方案提供了一种基于控制流图推导指针地址的方法、装置及可读存储介质。
5.在一个方面中,本公开揭露一种基于控制流图推导地址的方法,所述控制流图包括多个基本块,所述多个基本块包括至少一条指令,所述指令包含的指针载有地址。所述方法包括:遍历所述多个基本块,获得所述指针的所有可能的地址空间;判断所述所有可能的地址空间是否推演至单一地址空间;如是,设定所述指针访问所述地址空间。
6.在另一个方面,本公开揭露一种计算机可读存储介质,其上存储有在系统中利用通用地址进行访问的计算机程序代码,当所述计算机程序代码由处理器运行时,执行前述的方法。
7.在另一个方面,本公开揭露一种计算装置,包括处理器核,所述处理器核执行前述的方法。
8.本公开的方案技术针对人工智能等专用处理器,简化其硬件复杂度,方便编程,并借助指针推导进一步保证了程序的性能。
附图说明
9.通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,并且相同或对应的标号表示相同或对应的部分其中:
10.图1是示出本公开实施例的流程图;
11.图2是示出本公开实施例的一种范例的控制流图;
12.图3是示出本公开实施例的另一种范例的控制流图;
13.图4是示出本公开另一实施例的流程图;
14.图5是示出本公开实施例的另一种范例的控制流图;
15.图6是示出本公开另一实施例的流程图;
16.图7是示出本公开另一实施例的流程图;
17.图8是示出本公开另一实施例的流程图;
18.图9是示出本公开另一实施例的计算装置的示意图;
19.图10是示出本公开另一实施例的集成电路装置的结构图;以及
20.图11是示出本公开另一实施例的板卡的结构图。
具体实施方式
21.下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
22.应当理解,本公开的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本公开的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
23.还应当理解,在此本公开说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本公开。如在本公开说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本公开说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
24.如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。
25.下面结合附图来详细描述本公开的具体实施方式。
26.为了使计算机能够实现特定操作,程序员必须将需解决的问题的思路、方法和手段通过计算机能够理解的形式输入至计算机,使得计算机能够根据指令依序执行。这种人和计算机之间沟通的渠道称为编程。编程语言分为三大类:机器语言、高级语言及汇编语言。
27.机器语言是机器能直接识别的操作码,每一操作码在计算机内部都有相应的电路来完成它,一般是通过一系列的0和1的指令去直接控制计算机各组件的电位,来完成预期的任务。使用机器语言编写的程序,由于每条指令都对应计算机一个特定的基本动作,所以程序占用内存少、执行效率高,但缺点是编程工作量大、易出错、难以解读、依赖具体的计算机结构,因而程序的通用性、移植性不佳。
28.高级语言与计算机的硬件结构及指令系统无关,是以人类的逻辑及语法为基础,因此具有更强的表达能力,也方便表示数据的运算和程序的控制结构,能直观的描述各种算法,而且容易学习掌握,目前流行的编程语言像是java、c 、python等都是高级语言。由于高级语言是以人类的角度出发编程,对计算机来说相对不直接,所以编译后生成的操作码往往比机器语言的程序代码要长,执行的速度也慢。不仅如此,高级语言“看不见”计算机
的硬件结构,因此不能直接控制访问硬件资源的系统软件。为此,一些高级语言会利用汇编语言来作为高级语言的一个外部过程或函数。
29.汇编语言介于机器语言和高级语言间,相较于机器语言,其更易于程序员理解与编程,相较于高级语言,其具有更直接的机器相关性,达到了高速和高效的特点。在高级语言高度发展的今天,汇编语言通常被用在底层,进行程序优化或硬件操作。
30.利用高级语言和汇编语言编写的代码需要经过编译程序才能转换成机器码,以驱动计算机。
31.人工智能芯片在运行时,需要大量访问内存,将数据在内存间搬动,以进行计算任务。例如,图像或语音信息转换成矩阵后,矩阵的数据会从片外内存复制到片上内存在进行计算。
32.本公开是针对专用集成电路(asic),特别是人工智能芯片,在编写代码阶段,不需要额外域或参数来定义访问地址空间的前提下,在编译时进行内存地址的推导,并且实现通用地址的访问,以达到精简计算资源、缩短计算时间的目的。
33.本公开的一个实施例是一种基于控制流图推导地址的方法,更详细来说是通过不动点算法实现基于控制流图指针推导方法。控制流图(control flow graph,cfg)是用在编译器中的一种抽象数据结构,代表了一个程序可能会执行的所有路径,以流程图的形式反映过程内所有基本块的可能流向。
34.控制流图是由节点和节点间的关系所组成的。节点又称为基本块(basic block,bb),是程序中最大限度顺序执行的语句序列,每个基本块只有一个入口和出口,执行时从其入口进入,从其出口退出。基本块的特点是只要第一条指令被执行了,那么基本块内所有指令都会按照顺序被执行。
35.每个基本块包含至少一条指令,基本块中的指令可能使用指针(pointer)指向特定的暂存器或内存。指针是一种变量,用以保存特定地址空间的地址。通过指针,程序员可以将数据载入到指针指向的特定地址的空间中,或是从指针指向的特定地址中的数据取出。
36.控制流图经常会出现谓词(predicate)、跳转、循环等条件情况。谓词是指一个委托,这个委托包括用于判断是否符合条件的方法函数。跳转指的是通过一个判断指令,使得流程出现分支,当符合条件时执行一种指令,不符合条件时执行另一种指令。循环则是在一定条件限制下,不断地执行同样的指令,直到条件满足才会停止。
37.在系统存在多个内存时,而控制流图出现包括但不限于前述条件指令,除非考虑具体情况与条件进行比较,否则内存访问会出现不确定性。在不能确定指针对应至哪个内存的情况下,一般便将该指针设定为通用地址访问。此实施例的编译器通过对指针指向地址空间的推导,将原本设定为通用地址的指针明确化其访问的地址空间,一旦在编译时确定了,便可减少无谓的执行步骤,以优化程序的性能。
38.图1是示出此实施例的流程图。
39.在步骤101中,编译器遍历多个基本块,获得指针的所有可能的地址空间。此实施例遍历控制流图中的所有基本块,分别获得各个基本块中指令所使用指针指向的地址空间。针对同一个指针,获得它的所有可能的地址空间。
40.在遍历时,数据流的顺序可以采用逆后序的方式。以逆后序为例,其是先以后序方
式遍历,再将结果倒置而得,逆后序可以更早的收敛。此实施例不限制遍历的顺序,但较佳的采用逆后序遍历。
41.在步骤102中,编译器判断这些所有可能的地址空间是否推演至单一地址空间。编译器获得所述指针在基本块中的指针变量,此步骤在于判断这些指针在经历控制流图的流程后,是否能推演至单一的地址空间。
42.可选地,编译器可以按照控制流图,依次获得各个基本块的所有前驱基本块中指令所使用指针的所有可能的地址空间,并确定这些前驱基本块中指令所使用指针的所有可能的地址空间能否推演至单一地址空间。其中,在控制流图中,当一基本块在另一基本块之前被执行时,则可以认为该基本块为另一基本块的前驱基本块。例如,图2中的第三基本块和第四基本块均为第五基本块的前驱基本块。
43.需特别注意的是,有些变量表面上虽然不同,但这些变量可能属于别名,也就是不同变量但均访问同一个地址空间,在此步骤中进行判断之前,编译器可以执行别名分析,找出具有别名的地址变量,以确定指针指向的变量的地址是否唯一。如果编译器不具备别名分析的功能,此实施例可以模拟别名分析的过程,针对每条指令的中间代码表示(intermediate representation,ir)上记录的指针指向的变量信息来进行判断。
44.如推演至单一地址空间,则执行步骤103,编译器设定这指针访问所述地址空间。
45.但如未推演至单一地址空间,则执行步骤104,编译器设定指针为通用地址访问。未推演至单一地址空间表示这指针在控制流图中可能存在多种可能性,在不同条件下会访问不同的地址空间,因此保持为通用地址访问。
46.重复执行上述步骤101至步骤104,直至各个指针访问的地址空间不变,并记录各个指针的最终指向的地址空间。执行完前述步骤,编译器可以根据所述指针最终指向的地址空间设定生成访存指令,以根据所述访存指令实现图像、语音或文本等各种数据的存取操作。
47.图2是示出一种控制流图的范例,用以说明此实施例的流程图。此控制流图200包括五个基本块,分别为第一基本块201、第二基本块202、第三基本块203、第四基本块204及第五基本块205。第一基本块201为此控制流图200的入口,第一基本块201的出口连接至第二基本块202的入口,第二基本块202的出口同时连接至第三基本块203及第四基本块204的入口,这表示第二基本块202的出口存在一个判断式,例如跳转,满足特定条件跳转至第三基本块203,不满足该特定条件则跳转至第四基本块204,而第三基本块203的出口及第四基本块204的出口均连接至第五基本块205的入口,第五基本块205的出口为整个控制流图200的出口,且又连接回第二基本块202的入口。
48.在步骤101中,编译器遍历控制流图200的所有基本块,获得各个基本块中指针的所有可能的地址空间。为说明方便,在此仅就控制流图200中的一个指针p进行示例。在遍历控制流图200中的所有基本块后,针对指针p,获得它的所有可能的地址空间如下:在第一基本块201中,指针p未明确指向,故为通用地址访问;在第二基本块202及第三基本块203中,把a赋值给指针p;在第四基本块204中,把b赋值给指针p;在第五基本块205中,变量c为自指针p所指向的地址取出来的值。总结来说,指针p可能为变量a或b,直接影响变量c的数值。
49.在步骤102中,编译器可以按照控制流图依次判断各个基本块的所有前驱基本块中指针的所有可能的地址空间是否推演至单一地址空间。在一种情况下,如果变量a和变量
b所对应的地址空间相同,例如都在片上内存,则执行步骤103,编译器设定指针p访问具体的地址空间,即片上内存。在第五基本块205的出口处,指针p指向片上内存,这样的设定依循控制流图200的回路回到第二基本块202的入口,此时指针p更新为访问片上内存,接着继续根据控制流图200执行图1的流程进行迭代,直到指针p指向的地址空间不再发生变化为止。
50.当指针p的指向的地址空间不再发生变化时,编译器可以根据所述指针指向的地址空间生成访存指令,以根据所述访存指令实现图像、语音或文本等各种数据的存取操作。
51.在另一种情况下,如果变量a和变量b所对应的地址空间不同,例如变量a存储在片上内存,而变量b存储在片外内存,未对应至同一个地址空间,则执行步骤104,编译器设定指针p为通用地址访问。在第五基本块205的出口处,也就是在所述多个基本块汇合后,指针p更新为通用地址访问,这样的设定依循控制流图200的回路回到第二基本块202的入口,继续迭代,直到指针p访问的地址空间不再发生变化为止。
52.图3是示出控制流图的另一个范例,同样用以说明此实施例的流程图。此控制流图300同样包括五个基本块,且这些基本块的连接关系与控制流图200相同,不同处在于各基本块中与指针p有关的指令。
53.在步骤101中,编译器遍历控制流图300的所有基本块,获得各个基本块中指针的所有可能的地址空间。针对指针p,在遍历控制流图300中的所有基本块后,获得它的所有可能指向如下:在第一基本块301中,变量a赋值给指针p;在第二基本块302中,变量c为自指针p所指向的地址取出来的值,而地址便是变量a的值;在第四基本块304中,指针p的指向多了偏移量b。
54.在步骤102中,编译器可以按照控制流图依次判断各个基本块的所有前驱基本块中指针的所有可能的地址空间是否推演至单一地址空间。在此范例中,指针p均指向存储变量a的地址空间,例如都在片上内存,虽然在第四基本块304中,具体地址产生了偏移量b,但仍然位于同样的地址空间上,故第五基本块的前驱基本块中指针的所有可能的地址推演至单一地址空间,也就是片上内存,则执行步骤103,编译器设定指针p访问片上内存。在第五基本块305的出口处,指针p更新为指向片上内存,这样的设定依循控制流图300的回路回到第二基本块302的入口进行迭代,直到指针p访问的地址空间不再发生变化为止。在这个例子中,指针p不会再发生变化,可以确定访问片上内存。
55.控制流图的条件指令还包括函数调用。函数调用是调用子程序,遇到函数调用时会跳到子程序中去执行,执行完子程序后再回到主程序中执行下个指令。本公开的另一个实施例是一种适用函数调用的地址空间推导方法,其流程图如图4所示。
56.在步骤401中,编译器遍历多个基本块,获得指针的所有可能的地址空间。此实施例遍历控制流图中的所有基本块,针对同一个指针,获得它的所有可能的地址空间。
57.在步骤402中,编译器判断所述指针是否涉及函数调用。如果涉及函数调用,则执行步骤403,编译器判断该函数是否为只读。如不为只读函数,则在编译阶段无法确认函数调用的结果,因此执行步骤404,编译器设定指针为通用地址访问。
58.在步骤403中,如判断函数为只读函数,由于只读函数并不会改变访问的地址空间,或是在步骤402中,判断不涉及函数调用,则执行步骤405,编译器判断这些所有可能的地址空间是否推演至单一地址空间。如未推演至单一地址空间,则执行步骤404,编译器设
定指针为通用地址访问。如推演至单一地址空间,则执行步骤406,编译器设定这指针访问所述地址空间。
59.在另一个实施例中,在执行步骤402时,当编译器判断所述指针涉及函数调用,可以不执行步骤403,直接执行步骤404,编译器设定指针为通用地址访问。
60.编译器可以重复执行上述步骤401至步骤406,直至指针指向的地址空间不变,之后编译器可以根据所述指针指向的地址空间生成访存指令,以根据所述访存指令实现图像、语音或文本等各种数据的存取操作。
61.图5是示出控制流图的另一个范例,用以说明此实施例的流程图。此控制流图500同样包括五个基本块,且这些基本块的连接关系与控制流图300相同,唯一不同处在于第五基本块305变成了函数调用505。
62.在步骤401中,编译器遍历多个基本块,获得指针的所有可能的地址空间。在第一基本块501中,变量a赋值给指针p,假设变量a存储在特定芯片的内存,则指针p应访问该特定芯片的内存。控制流经过第二基本块502、第三基本块503及第四基本块504皆未改变指针p访问的地址空间,因此指针p的所有可能的地址空间就是该特定芯片的内存。
63.在步骤402中,编译器判断所述指针是否涉及函数调用。由于此控制流图500涉及函数调用505,故执行步骤403,编译器判断该函数是否为只读。假设函数调用505不为只读函数,则执行步骤404,编译器设定指针p为通用地址访问。换言之,在函数调用505的出口处,指针p更新为通用地址访问,这样的设定依循控制流图500的回路回到第二基本块502的入口进行迭代,直到指针p访问的地址空间不再发生变化。在这个例子中,指针p在编译时将设定为通用地址访问。
64.前述实施例在编译阶段,通过地址空间推导,将可以推演至访问单一地址空间的指针明确化,减少了程序运行的时间,进而优化程序的性能。
65.当指针被设定为通用地址访问时,本公开还提供一种不需要设置额外域或参数,只需要在定义变量的时候,显式地声明变量所在的地址空间,其存取操作由通用地址访问机制来完成的方法。更详细来说,由于人工智能芯片没有内存管理机制,因此遇到通用地址访问无法直接获得具体内存的信息。本公开的另一个实施例是声明变量所在的地址空间的通用地址访问方法,其采用软件模拟硬件的方式,以简化硬件设计复杂度。
66.此实施例的应用场景是一种人工智能芯片,其包括第一内存及第二内存,第一内存的存储空间是由第一地址至第二地址所定义,第二内存的存储空间是由第三地址至第四地址所定义,其中第一内存可以是片外内存,第二内存可以是片上内存。再者,片外内存与片上内存的地址是接续编排的,例如第一内存共有128个存储空间,分别由第一地址addr0及第二地址addr127间的128个地址来指向,第二内存亦有128个存储空间,接续由第三地址addr128及第四地址addr255间的128个地址来指向,也就是说,虽然第一内存与第二内存不在同一处,但第三地址addr128为第二地址addr127加一。在此实施例中,基本块内的指针已经过如图1或图4的流程被设定为通用地址访问。此实施例的流程图如图6所示。
67.在步骤601中,编译器判断所述通用地址是否落在第一地址与第二地址间。由于第一内存与第二内存的地址是接续编排的,所以只要判断通用地址是否小于第三地址,便可知道通用地址是否落在第一地址与第二地址间。如落在第一地址与第二地址间,则执行步骤602,编译器设定第一变量为真。如未落在第一地址与第二地址间,则执行步骤603,编译
器设定第一变量为假。
68.接着在步骤604中,编译器判断第一变量是否为真。如第一变量为真,表示所述指针的地址是在第一内存中,故执行步骤605,编译器设定所述指针访问第一内存。如第一变量为假,表示所述指针的地址是在第二内存中,故执行步骤606,编译器设定所述指针访问第二内存。
69.执行完前述步骤,编译器可以根据所述设定生成访存指令,以根据所述访存指令实现图像、语音或文本等各种数据的存取操作。
70.此实施例利用指针的变量数值与内存的地址区间做计较,以取得该地址位于哪个内存的信息,进而在编译阶段确定指针应该访问的地址空间。
71.在执行前述流程时,可以利用谓词编写代码来实现,其中一种可操作的代码如下所示:
72.setp.lt s%addr 0xxxxxx
ꢀꢀ
(1)
73.@s ld.offchip
ꢀꢀ
(2)
74.!@s ld.onchip
ꢀꢀ
(3)
75.其中,setp.lt为小于运算的判断指令,s为谓词寄存器(即前述的第一变量),%addr为指针p的数值,也就是地址,0xxxxxx代表数值128,@s是判断式,判断s是否为真,!@s也是判断式,判断s是否为假,ld.offchip为自片外内存加载,ld.onchip为自片上内存加载。
76.第(1)条指令代表:判断指针p的数值是否小于128,如是,设定s为1,也就是为真,如否,设定s为0,也就是为假。第(2)条指令代表:如果s为真,则自片外内存加载数据。第(3)条指令代表:如果s为假,则自片上内存加载数据。不论从片外内存或是片上内存加载数据,其地址就是指针p的数值%addr。
77.虽然此范例是以加载(load)指令做说明,但本发明不限于指令的类型,任何需要访问内存的指令皆适用上述的流程。
78.此实施例不需要增加额外域或参数,仅通过判断谓词暂存器里的数值为真或为假,便可在编译阶段获得指针p所指向的地址位于哪个内存的信息,建立起通用地址的访问机制。
79.当系统内存多于两个时,同样可以用本发明的方法找出对应的地址空间。本发明的另一个实施例是在三个内存中具体化通用地址访问的方法,在此实施例中,一个控制流图中的多个基本块可以访问第一内存、第二内存及第三内存,第一内存的存储空间是由第一地址至第二地址所定义,第二内存的存储空间是由第三地址至第四地址所定义,第三内存的存储空间是由第五地址至第六地址所定义,其中第一内存及第二内存可以是片外不同内存,第三内存是片上内存。同样地,这些内存的地址是接续编排的,例如:第一内存共有128个存储空间,分别由第一地址addr0及第二地址addr127间的128个地址来表示,第二内存亦有128个存储空间,接续由第三地址addr128及第四地址addr255间的128个地址来表示,第三内存亦有128个存储空间,接续由第五地址addr256及第六地址addr383间的128个地址来表示,换言之,第三地址addr128为第二地址addr127加一,第五地址addr256为第四地址addr255加一。此实施例的流程图如图7所示。
80.在步骤701中,编译器判断所述通用地址是否落在第一地址与第二地址间。也就是
判断通用地址是否小于第三地址。如落在第一地址与第二地址间,则执行步骤702,编译器设定第一变量为真。如未落在第一地址与第二地址间,则执行步骤703,编译器设定第一变量为假。
81.接着执行步骤704,编译器判断所述通用地址是否落在第五地址与第六地址间。也就是判断通用地址是否大于第四地址。如落在第五地址与第六地址间,则执行步骤705,编译器设定第二变量为真。如未落在第五地址与第六地址间,则执行步骤706,编译器设定第二变量为假。
82.接着在步骤707中,编译器判断第一变量是否为真。如第一变量为真,表示所述指针的地址是位于第一内存中,故执行步骤708,编译器设定所述指针访问第一内存。如第一变量为假,则执行步骤709,编译器判断第二变量是否为真。如第二变量为真,表示所述指针的地址位于第三内存中,故执行步骤710,编译器设定所述指针访问第三内存。如第二变量为假,则执行步骤711中,编译器判断第一变量及第二变量是否皆为假,如是,表示该地址不在第一内存和第三内存中,则执行步骤712,编译器设定所述指针访问第二内存。
83.就逻辑上来说,由于地址肯定在第一内存、第二内存或第三内存中,故步骤707、步骤709及步骤711的判断步骤至少有一个会判断为是,换言之在步骤711中理应不会有第一变量或第二变量不为假的情况发生,如真的发生,则此流程会回到步骤707,编译器重新判断第一变量及第二变量的真假。
84.执行完前述步骤,编译器可以根据所述设定生成访存指令,以根据所述访存指令实现图像、语音或文本等各种数据的存取操作。
85.从上述流程可知,此实施例将指针的变量数值与地址区间做计较,便可知道该地址位于哪个内存,再根据地址存取数值。
86.图7的流程可以由以下代码来实现:
87.setp.lt s%addr 0xxxxxx
ꢀꢀ
(4)
88.setp.gt t%addr 0xyyyyy
ꢀꢀ
(5)
89.@s ld.chip1
ꢀꢀ
(6)
90.@t ld.chip
ꢀꢀ
(7)
91.!@s&!@t ld.chip2
ꢀꢀ
(8)
92.第(4)条指令代表:判断指针p的数值%addr是否小于128,如是,设定s谓词暂存器(即第一变量)的值为1,如否,则设定为0。第(5)条指令代表:判断指针p的数值%addr是否小于256(0xyyyyy),如是,设定t谓词暂存器(即第二变量)的值为1,如否,则设定为0。第(6)条指令代表:如果s为真(即s=1),则自第一内存加载数据。第(7)条指令代表:如果t为真(即t=1),则自第三内存加载数据。第(8)条指令代表:如果s为假(即s=0)且t为假(即t=0),则自第二内存加载数据。
93.第(8)条指令涉及谓语的运算,但不是所有的编译器都能支持谓语的运算,在编译器无法支持的情况下,可以采用谓词赋值的方式来实现等同效果。本发明的另一个实施例为利用谓词赋值来实现在三个内存中判断通用地址的具体地址空间的方法。图8是示出此实施例的流程图,其中步骤801至810分别对应至图7的步骤701至710,不再赘述。
94.当在步骤807中判断第一变量为真时,在步骤808后执行步骤811,编译器设定第三变量为假。同样地,当在步骤809中判断第二变量为真时,在步骤810后执行步骤811,编译器
设定第三变量为假。当在步骤809中判断第二变量不为真时,则执行步骤812,编译器设定第三变量为真。在步骤811及步骤812后,执行步骤813,编译器判断第三变量是否为真。如果为真,表示第一及第二变量皆为假,执行步骤814,编译器设定指针访问第二内存。如果为假,表示流程经过了步骤808或步骤810,指针已被设定访问第一内存或第二内存了,故在步骤815中结束流程。
95.执行完前述步骤,在编译完成后,根据所述设定,计算图像或语音数据。
96.第(8)条指令改以谓词赋值方式表示时,可以用以下四条指令来完成:
97.u=1
ꢀꢀ
(9)
98.@!s u=0
ꢀꢀ
(10)
99.@!t u=0
ꢀꢀ
(11)
100.@u ld.chip1
ꢀꢀ
(12)
101.第(9)条指令代表:设定第三变量u为真;第(10)条指令代表:如果s不为假,则设定第三变量为假;第(11)条指令代表:如果t不为假,则设定第三变量为假;第(12)条指令代表:如果第三变量为真,则加载第二内存。
102.此实施例中的三个内存仅为示例,本领域技术人员可以在未有创造性劳动的前提下,将本发明应用至超过三个内存的场景,这些场景均在本发明所揭露的范畴中。
103.本发明的另一个实施例是一种人工智能芯片的计算装置。图9示出了此一种计算装置900的内部结构示意图。计算装置900共有十六个处理器核(处理器核0至处理器核15),用于执行矩阵计算任务,每四个处理器核组成一个处理单元组,也就是集群(cluster)。更详细来说,处理器核0至处理器核3组成第一集群902,处理器核4至处理器核7组成第二集群904,处理器核8至处理器核11组成第三集群906,处理器核12至处理器核15组成第四集群908。计算装置130基本上是以集群为单元执行计算任务。
104.计算装置900还包括存储单元核910及共享存储单元912。存储单元核910主要用于控制数据交换,作为计算装置900与片外内存沟通的渠道。共享存储单元912是一种片上内存,用以暂存这些集群902、904、906、908的计算中间值。
105.处理器核0至处理器核15用以执行前述各实施例的方法,具体而言是包括但不限于图1、图4、图6、图7及图8的流程。
106.图10是示出根据本公开实施例的一种集成电路装置1000的结构图。如图10所示,集成电路装置1000包括计算装置900、通用互联接口1004和其他处理装置1006。
107.通用互联接口1004可以用于在计算装置900与其他处理装置1006间传输数据和控制指令。例如,计算装置900可以经由通用互联接口1004从其他处理装置1006中获取所需的输入数据,写入计算装置900片上的共享存储单元912。进一步,计算装置900可以经由通用互联接口1004从其他处理装置1006中获取控制指令,写入计算装置900片上的控制缓存。
108.其他处理装置1006可以是中央处理器、图形处理器、人工智能处理器等通用和/或专用处理器中的一种或多种类型的处理器,其数目不做限制而是依实际需要来确定。其他处理装置1006作为计算装置900与外部数据和控制的接口,执行包括但不限于数据搬运,完成对计算装置900的开启、停止等的基本控制。其他处理装置1006也可以和计算装置900协作共同完成运算任务。
109.集成电路装置1000还包括片外内存1008,其可以分别与计算装置900和其他处理
装置1006连接。片外内存1008用于保存计算装置900和其他处理装置1006的数据,尤其适用于所需要运算的数据在计算装置900或其他处理装置1006的内部存储中无法全部保存的数据。
110.根据应用场景的不同,集成电路装置1000可以作为手机、机器人、无人机、视频采集等设备的片上系统(soc),从而有效地降低控制部分的核心面积,提高处理速度并降低整体的功耗。在此情况时,集成电路装置1000的通用互联接口1004与设备的某些部件相连接。此处的某些部件可以例如是摄像头,显示器,鼠标,键盘,网卡或wifi接口。
111.本公开还揭露一种芯片或集成电路芯片,其包括了集成电路装置1000。本公开还揭露一种芯片封装结构,其包括了上述芯片。
112.本公开另一个实施例是一种板卡,其包括了上述芯片封装结构。参阅图11,板卡1100除了包括多个上述芯片1102以外,还可以包括其他的配套部件,该配套部件包括存储器件1104、接口装置1106和控制器件1108。
113.存储器件1104与芯片封装结构内的芯片1102通过总线1114连接,用于存储数据。存储器件1104可以包括多组存储单元1110。每一组存储单元1110可以是前述的片外内存。
114.接口装置1106与所述芯片封装结构内的芯片1102电连接。所述接口装置1106用于实现芯片1102与外部设备1112(例如服务器或计算机)之间的数据传输。在此实施例中,接口装置1106为标准pcie接口,待处理的数据由服务器通过标准pcie接口传递至芯片1102,实现数据转移。芯片1102的计算结果亦由接口装置1106传送回外部设备1112。
115.控制器件1108与芯片1102电连接,以便对芯片1102的状态进行监控。具体地,芯片1102与控制器件1108可以通过spi接口电连接。控制器件1108可以包括单片机(“mcu”,micro controller unit)。
116.本公开的另一个实施例是一种电子设备或装置,其包括了上述板卡1100。根据不同的应用场景,电子设备或装置可以包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、b超仪和/或心电图仪。
117.虽然此实施例是以人工智能芯片为例说明,但本领域技术人员可以理解的是,这些方法亦能利用通用处理器来实现。
118.本公开另一个实施例为一种计算机可读存储介质,其上存储有利用通用地址进行访问的计算机程序代码,当所述计算机程序代码由处理器运行时,执行前述各实施例所述的方法。
119.通过前述各实施例的演示,本发明在编译阶段具体化通用地址的地址空间,确定访问内存,简化硬件复杂度,方便编程,并保证程序的性能。人工智能芯片基于编译后的操作码,执行矩阵的计算,完成输入数据(如图像或语音数据)的计算任务。由于本发明对于通用地址的预处理,将使得计算的过程更为精简高效。
120.依据以下条款可更好地理解前述内容:
121.条款a1、一种基于控制流图推导地址的方法,所述控制流图包括多个基本块,所述
多个基本块包括指针,所述指针载有地址。所述方法包括:遍历所述多个基本块,获得所述指针的所有可能的地址空间;判断所述所有可能的地址空间是否推演至单一地址空间;如是,设定所述指针访问所述地址空间。
122.条款a2、根据条款a1中所述的方法,所述方法还包括:如否,设定指针为通用地址访问。
123.条款a3、根据条款a2所述的方法,还包括:判断所述指针是否涉及函数调用;以及如涉及函数调用,设定指针为通用地址访问。
124.条款a4、根据条款a2或3所述的方法,所述多个基本块访问第一内存及第二内存,所述第一内存的存储空间是由第一地址至第二地址所定义,所述第二内存的存储空间是由第三地址至第四地址所定义,所述方法还包括:判断所述通用地址是否落在所述第一地址与所述第二地址间;如落在所述第一地址与所述第二地址间,则设定第一变量为真;如未落在所述第一地址与所述第二地址间,则设定所述第一变量为假;判断所述第一变量是否为真;以及如所述第一变量为真,则设定所述指针访问所述第一内存。
125.条款a5、根据条款a4所述的方法,其中所述第三地址为所述第二地址加一。
126.条款a6、根据条款a5所述的方法,其中如所述第一变量为假,则设定所述指针访问所述第二内存。
127.条款a7、根据条款a5所述的方法,其中所述判断所述通用地址的步骤包括:判断所述通用地址是否小于所述第三地址。
128.条款a8、根据条款a4所述的方法,其中所述多个基本块还访问第三内存,所述第三内存的存储空间是由第五地址至第六地址所定义,所述方法还包括:判断所述通用地址是否落在所述第五地址与所述第六地址间;如所述通用地址落在所述第五地址与所述第六地址间,则设定第二变量为真;判断所述第二变量是否为真;以及如所述第二变量为真,则设定所述指针访问所述第三内存。
129.条款a9、根据条款a8所述的方法,其中所述第三地址为所述第二地址加一,所述第五地址为所述第四地址加一。
130.条款a10、根据条款a9所述的方法,其中所述判断所述通用地址是否落在所述第五地址与所述第六地址间的步骤包括:判断所述通用地址是否大于所述第四地址。
131.条款a11、根据条款a8所述的方法,还包括:如所述通用地址未落在所述第五地址与所述第六地址间,则设定所述第二变量为假;其中,如所述第一变量及所述第二变量皆为假,则设定所述指针访问所述第二内存。
132.条款a12、根据条款a8所述的方法,还包括:设定第三变量为真;如判断所述第一变量为真,则设定第三变量为假;如判断所述第二变量为真,则设定第三变量为假;判断所述第三变量是否为真;以及如所述第三变量为真,则设定所述指针访问所述第二内存。
133.条款a13、根据条款a1所述的方法,其中所述判断步骤包括:获得所述指针在所有基本块中的指针变量;判断所述指针变量是否均对应至所述地址空间。
134.条款a14、根据条款a1所述的方法,其中所述设定步骤在所述多个基本块汇合后执行。
135.条款a15、根据条款a1所述的方法,其中当所述控制流图包括迭代算法时,所述判断步骤在所述指针的地址不变后执行。
136.条款a16、根据条款a1所述的方法,其中所述控制流图为跳转控制或循环控制。
137.条款a17、一种计算机可读存储介质,其上存储有在系统中利用通用地址进行访问的计算机程序代码,当所述计算机程序代码由处理器运行时,执行条款a1-16的任意一项所述的方法。
138.条款a18、一种计算装置,包括处理器核,所述处理器核执行条款a1-16的任意一项所述的方法。
139.以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本披露的方法及其核心思想;同时,对于本领域的一般技术人员,依据本披露的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本披露的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献