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

AIGPU架构中URF寄存器的数据写入方法与流程

2022-04-06 14:33:21 来源:中国专利 TAG:

aigpu架构中urf寄存器的数据写入方法
技术领域
1.本发明涉及数据存储领域,具体是一种aigpu架构中urf寄存器的数据写入方法。


背景技术:

2.simt并行计算
3.simt(单指令流多线程)是一种高性能计算机架构,特别适合数据并行计算。simt是由nvidia公司首先引入的,是simd(单指令流多数据流)架构的一种扩展。
4.·
基本执行单元是线程(thread),多个线程可以组合成一个块(block)。一个块中的全部线程执行相同的指令序列。
5.·
simt把在长向量的每个元素上进行操作的指令序列看作是是一个线程,一个块中的线程同步执行同样的指令,因此实现数据并行计算。
6.·
simt中的数据计算通道也可以并发执行几个线程,每个属于不同的warp或者不同的block,每个有自己的寄存器堆。
7.·
simt计算机允许单个线程的分支执行,每个线程执行的指令序列因各个线程的状态不同而不同。
8.simt对应的是数据并行编程模型,享有从任意向量到固定结构机器的灵活映射方式。出于对性能的考虑,需要减少simt计算中的线程分支,进而维持系统的利用率并降低功耗。simt架构可以通过warp切换和流处理来降低存取延迟。
9.aigpu架构简介
10.aigpu芯片的顶层架构如图1所示。aigpu芯片的特点在于,
11.·
它采用了片上虚拟存储,一种与众不同的存储系统。
12.·
它使用了粗颗粒的计算分割与数据管理来解决数据相关性,这不同于超标量硬件机器或者codelet软件数据流。
13.·
aigpu粗颗粒的相关性管理方式允许使用命令来实现,为软件架构师和程序员提供了自主控制和优化程序的手段。
14.芯片由主机(host)及其运行时来控制。主机将需要执行的命令发送到aigpu器件,其中的sp对命令做出分析,然后将一系列的操作交给pe和dma执行。
15.aigpu的重要特点是片上虚拟存储采用分段结构,可以直接支持张量存储,存储数据结构化而且具有明确的张量语义。一个张量一般存储在一个段中。使用数个张量的kernel程序可以拥有数个段。一种实现是每个程序有16个段。
16.一个kernel可以分配到几个pes上执行,每个pe执行部分计算并使用段的一部分。
17.·
每个段都有自己独立的地址空间。
18.·
每个段可以定义一个1d、2d、3d或者4d的张量存储结构。
19.·
存储地址的构成是segment_id:rfoffset:immediate offset一个段含包含数个页。
20.·
每个页是多维的,1d,2d,3d,或者4d;是与段的维数相同的张量。
21.·
每个页在页表中都有一项,可以用来做地址翻译,以及检查该页是否准备完毕;在一个pe使用完该页后,将v-counter的值递减。
22.段存储结构

存储段结构为kernel程序使用。
23.1.虚拟存储按照段(segment)来组织,每个kernel可以使用几个段。
24.2.每个段可以包含数个页(page),段内的页数可变,根据应用确定。
25.3.为了充分利用片上存储,页的大小是可变的,根据应用来确定。
26.芯片上含有页表,用来管理片上虚拟存储。典型的程序执行包括了下列步骤,
27.1.将片外存储上的数据搬运到片上存储
28.2.组建页表内容和初始状态
29.3.启动并执行程序
30.4.程序执行完毕时将结果数据写到外部存储
31.程序的执行步骤与经典gpu的程序执行类似,但是数据的交换是在器件的外部存储与片上存储之间进行。当然,结果数据有时也会写入到主机侧的存储上。片上虚拟存储的优点包括,
32.1.由程序控制在片上存储与片外存储之间的进行数据搬运,可以优化数据的存取。
33.2.硬件管理页表的使用。
34.3.数据存储分配与程序执行的动态重叠(streaming),可以提高性能。
35.页表的管理和数据使用状态由sp和pe根据程序执行情况来更新。每个段内地址的计算与线性地址无关,其起始线性地址由锚点(ankor)定义,段内地址相对锚点定义,每个pe可以有自己相对的锚点。
36.uniform寄存器堆
37.uniform寄存器堆(urf)是一个pe中所有线程共享的,它的存储延迟与线程内的寄存器堆一样,但是与线程内寄存器不同的是它对所有线程是一致的。在图形渲染应用中,uniform变量存储了所有顶点的共性属性,如灯光、变换矩阵、全局背景光等,在语义上就是对所有线程均可寻址的。urf可以被任何指令用作寄存器操作数,且对于所有线程是一致的。urf的寄存器一般都存储只读变量。
38.从simt rf搬动数据到urf
39.结合图2,一个simt处理器pe中运行多个并行线程(thread-0,thread-1,...,thread-n),每个线程有自己私有寄存器堆,每个堆有数十至数百个寄存器。寄存器堆可以是多端口的,也可以分成多块的。每个寄存器堆含有一个缓冲存储(buffer),当pe与片上存储或高速缓存之间交换数据时要通过缓冲存储。
40.每个线程有自己的私有存储,一个pe中的所有线程共享一个比较大的uniform寄存器堆。这个uniform寄存器堆提供所有线程共享的操作数据。一般地,uniform寄存器堆的数据是只读的,以避免多个线程同时写入一个uniform寄存器的冲突。如果必须要交换数据,那就只能每次选用一个线程来写,或者只写入一些特殊数据,例如谓词值。
41.在当前的simt架构下,不能把simt线程寄存器的数据直接搬到urf寄存器,这是因为多个线程对应一组urf寄存器堆的关系。通常需要将simt线程寄存器内容搬到存储器中,然后再从存储器中搬到urf寄存器中。这种方式很不方便,且效率很低。


技术实现要素:

42.本发明针对背景技术中存在的问题,提出了一种aigpu架构中urf寄存器的数据写入方法。
43.技术方案:
44.一种aigpu架构中urf寄存器的数据写入方法,通过设置指令,将simt线程寄存器的数据直接写入urf寄存器;所述指令规定:
[0045]-simt线程寄存器a,
[0046]-urf寄存器c,
[0047]-线程i
[0048]
选择线程i将其simt线程寄存器a中的数据直接写入urf寄存器c中。
[0049]
作为一种线程i的选择方法:
[0050]
指令给定某个谓词序号,选取所有线程中对应谓词值为真的线程,取其中线程号thread_id最小的线程作为线程i。
[0051]
作为另一种线程i的选择方法:
[0052]
使用一个立即数imm来选择:线程thread_id与imm相等的那个线程作为线程i
[0053]
作为第三种线程i的选择方法:
[0054]
用urf寄存器的内容来做选择:指令给出一个立即数imm,读取寄存器urf[imm]的数据x,然后选择那个thread_id==x的线程作为线程i。
[0055]
优选的,程序调试时,确定线程i后将其simt线程寄存器a中的数据存入urf,urf所存储数据通过配置寄存器接口自动返回主机。
[0056]
优选的,simt线程寄存器a中的数据为线程i的全部谓词值。
[0057]
优选的,simt线程寄存器a中的数据为线程i被指定的某个寄存器的值。
[0058]
本发明的有益效果
[0059]
本发明提出的一条专用的指令可以将数据直接从simt线程寄存器搬到urf寄存器中,而无需经由存储器转运。具有以下效果:
[0060]
1.多种选择线程的方式,给应用编程带来很好的便利性。
[0061]
2.多种线程内容选取方式,对应用有较好的灵活性。
[0062]
3.由于无需将线程信息导出到存储系统,而仅在处理器核心部分实现,避免了数据到存储系统再返回回来所带来的大延迟;同时减小了对存储系统带宽的压力,使整体系统性能得到提升。
附图说明
[0063]
图1为背景技术中aigpu顶层架构示意图
[0064]
图2为背景技术中.simt处理器寄存器堆和对外链接示意图
具体实施方式
[0065]
下面结合实施例对本发明作进一步说明,但本发明的保护范围不限于此:
[0066]
本发明提出了一种aigpu架构中urf寄存器的数据写入方法,通过设置指令,将simt线程寄存器的数据直接写入urf寄存器;所述指令规定:
[0067]-simt线程寄存器a,
[0068]-urf寄存器c,
[0069]-线程i
[0070]
选择线程i将其simt线程寄存器a中的数据直接写入urf寄存器c中。
[0071]
以下给出几个实例,对本技术提案中线程i的确定方法进行说明。
[0072]
实施例1:
[0073]
指令表述:selectpred#6,...
[0074]
指令中给定谓词序号为“6”,假定线程t1,t3,t7,t15,t21的谓词p[6]为真,选择其中线程thread_id最小的t1作为线程i。
[0075]
实施例2:
[0076]
指令表述:select imm#8,...
[0077]
指令中给定立即数imm为“8”,线程t8作为线程i。
[0078]
实施例3:
[0079]
指令表述:select urf#9,...
[0080]
假定urf[9]的数据值是21,则线程t21作为线程i。
[0081]
以下给出几个实例,对本技术提案中写入urf寄存器c中的数据进行说明。
[0082]
实施例4:
[0083]
指令表述:select pred#6,urf#8
[0084]
select pred#6:指令中给定谓词序号为“6”,假定线程t1,t3,t7,t15,t21的谓词p[6]为真,选择其中线程thread_id最小的t1作为线程i。
[0085]
urf#8:线程t1的全部谓词p[0

7]写入urf[8]。
[0086]
该实施例中,指令可以指定选取线程i的全部谓词值并将其写入urf[c]寄存器。
[0087]
实施例5:
[0088]
指令表述:select all reg#6,thread#9,urf#8
[0089]
select all reg#6:选择全部线程并将其中r[6]的值全部送到存储系统。
[0090]
thread#9:选择线程t9作为线程i(选择方式可以是实施例1-3中的任一种)。
[0091]
urf#8:将线程t9传输的寄存器r[6]值写入urf[8]中。
[0092]
该实施例中,将全部线程的rf[a]值(如同读指令那样)都读出并送给存储子系统,当这些数据到达后,按照指令中规定的选择方法选择其中一个数据,并返回给处理器流水线,写入到urf[c]寄存器中。
[0093]
实施例6:
[0094]
指令表述:select pred#6,reg#6,urf#8
[0095]
select pred#6:全部线程的p[6]谓词被送到存储系统。
[0096]
reg#6:假定线程t1,t3,t7,t15,t21的谓词p[6]为真,线程t1被选择作为线程i。
[0097]
urf#8:选取t1送出的r[6]数据并写入urf[8]。
[0098]
该实施例将全部线程中的谓词寄存器值读出来并送给存储子系统,就像读指令那样。当这些值到达后,按照前面提出的谓词选择方法选出一个线程,然后将选出的数据回写到urf[c]寄存器中。
[0099]
实施例7:
[0100]
指令表述:select imm#9reg#6,host
[0101]
选择线程t9,读取寄存器r[6]的内容,返回给主机
[0102]
该实施例考虑的是程序调试,主机给定线程号、寄存器或者谓词并读取值,然后回写到主机端。
[0103]
程序调试的过程:主机通过特定的配置寄存器接口来配置所要查询的线程索引及其某个寄存器索引,硬件电路完成所需内容的送出并暂存于特殊保留的urf127,而后进一步地该数据会通过配置寄存器接口自动返回给主机。
[0104]
传统方案中采用送到存储系统再返回的方式,至少需要近100个时钟周期(store到l2的数据通路延迟,加上再从l2 load返回的数据通路延迟,考虑到系统数据通路仲裁等开销);在某些场景,比如读写冲突等情况,延迟还会增大。本发明所公开方案避免了这些延迟,提高了系统性能。
[0105]
本文中所描述的具体实施例仅仅是对本发明精神做举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。
再多了解一些

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

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

相关文献