一种紧耦合异构多处理器数据交换缓存的实现方法

文档序号:9597791阅读:464来源:国知局
一种紧耦合异构多处理器数据交换缓存的实现方法
【技术领域】
[0001]本发明涉及一种数据交换缓存的实现方法,尤其是涉及一种紧耦合异构多处理器数据交换缓存的实现方法。
【背景技术】
[0002]紧耦合异构多处理器架构中各个异构处理器核心通过片上互联相互连接,并共享内存,通常也共享最后一级缓存。典型的架构如CPU和GPU通过第三级缓存相连,并在共享的内存中进行数据交换。但是传统的由内存存储,缓存加速的数据交换方式并不适合在处理器间进行细粒度、大规模的临时数据传输。由于这些临时数据仅仅作为处理器间计算的中间结果,存入内存将带来不必要的访存带宽开销和空间占用。
[0003]另一方面,当传输的单个数据元素大小超过一次访存请求所支持的大小时,这个元素需要被划分为小块多次访问。然而异构处理器的访存模式差别很大,例如CPU中每个线程独立发送各自的访存请求,而GPU中以单指令多数据的方式执行的一批线程会同时发送多个访存请求,这些请求若访问相邻的地址则会被融合成单个请求以降低访存系统的负担。不同的处理器访问内存时,最适合的数据布局不同,因此传统的共享内存方式进行数据交换无法达到在各个不同的访存模式下都能有最佳的访问效率。并且由于不同处理器的访存模式不同,由各处理器上执行的代码分别管理共享内存空间也比较困难。

【发明内容】

[0004]为了解决【背景技术】中存在的问题,本发明所要解决的技术问题在于提供一种紧耦合异构多处理器数据交换缓存的实现方法。
[0005]本发明所采用的技术方案是:
一种紧耦合异构多处理器数据交换缓存的实现方法,其特征在于包括以下步骤:
1. 1)处理器间数据交换单元为元素,每个元素划分为多个固定长度的原子;
1. 2)采用核间共享的最后一级缓存的部分空间存储交换中的元素;1. 3)各原子以任意数量、任意顺序在处理器和最后一级缓存间传输;1. 4)并由最后一级缓存控制器维护各元素原子间存储顺序和空间。
[0006]其中步骤1. 1)进一步包括:原子的长度固定为各个处理器的自然字长中的最小值,按照各原子在一个元素中的顺序对原子递增编号。
[0007]其中步骤1.2)进一步包括:
3. 1)交换空间的大小根据应用需求任意分配,关闭所分配的这部分空间原缓存控制逻辑;
3. 2)原缓存存储组织中每一缓存行存储属于不同元素的同一编号的原子;
3. 3)连续的缓存行存储这些缓存行中元素的连续编号的原子,组成一批完整元素的所有缓存行称为元素块,一个所述的元素块的大小为一个缓存行的大小乘以每个元素的原子数。
[0008]其中步骤1.3)进一步包括:
4.1)使用所述的缓存交换数据时,各处理器根据执行的线程宽度决定每次访问的元素数量;
4.2)首先发送读或写预约请求检查缓存中是否有足够的空闲空间或足够的元素可满足本次访问所需的元素数量,若不满足则预约请求失败并重试直到成功,若预约请求成功,处理器从请求响应中得到即将访问的元素地址,所述的元素地址包括本次请求访问的第一个元素所在缓存行地址和这个元素在这个缓存行内的偏移量;
4.3)处理器在预约请求成功后以任意的顺序发出此元素中每个原子的访问请求,每个原子的访问请求中给出所述的元素地址、元素数量和此请求访问的原子序号。
[0009]其中步骤1.4)进一步包括:
5.1)最后一级缓存控制器在缓存中存储额外的流队列,其中每个流与一个所述的元素块对应,用于记录元素块的已预约写入元素数、已预约读取元素数、写入的原子总数和读取的原子数总数;
5.2)所述的预约读请求从流队列头部开始处理,所述的预约写请求从流队列尾部开始处理,最后一级缓存控制器使用一个部分读指针指向下一个预约读将检查的流,初始时缓存为空,队头、队尾和所述的部分读指针指向同一个位置;
5.3)最后一级缓存控制器接收到所述的预约写请求时,检查队尾是否有足够的空间可写,并发送预约结果给处理器;
5.4)最后一级缓存控制器接收到所述的预约读请求时,检查部分读指针指向的流是否有足够的元素可读,并发送预约结果给处理器;
5.5)最后一级缓存控制器接收到所述的原子的访问请求时,根据请求中的元素地址和原子序号计算此请求访问的所有原子地址,并访问相应的原子的数据;
5.6)最后一级缓存控制器释放已被读完的元素块及相应的流。
[0010]其中步骤5.3)进一步包括:
6.1)检查流队列队尾的流的已预约写入元素数,当剩余可写元素数不足时尝试从队尾后获取一个新的流,若当前流剩余足够的可写元素或申请新的流成功则预约成功,否则预约失败;
6.2)若预约失败,返回预约失败给发出请求的处理器;
6.3)若预约成功,返回相应的元素地址给发出请求的处理器,其中元素地址中的第一个元素所在缓存行地址为队尾流的缓存行,元素地址中元素在这个缓存行内的偏移量为队尾流的已预约写入元素数;
6.4)若预约成功,根据预约数量递增队尾流的已预约写入元素数,若申请了新的流,则递增队尾到新的流,并更新这个流的已预约写入元素数为去掉前一个流本次预约写入数量后剩余的预约元素数量。
[0011]其中步骤5.4)进一步包括:
7.1)当流位于队头和队尾之间,并且此流的写入的原子总数等于已预约写入元素数乘以每个元素的原子数时此流可读;
7.2) 一个流的剩余可读元素为此流的已预约写入元素数和已预约读取元素数差值;
7.3)若部分读指针指向的流可读且剩余可读元素不小于预约请求的元素数,或部分读指针指向的流和下一个流均可读且这两个流的剩余可读元素总和不小于请求的所需元素数,则预约成功,否则预约失败;
7.4)若预约失败,返回预约失败给发出请求的处理器;
7.5)若预约成功,返回相应的元素地址给发出请求的处理器,其中元素地址的第一个元素所在缓存行地址为部分读指针指向的流的缓存行,元素地址中元素在这个缓存行内的偏移量为部分读指针指向的流的已预约读取元素数;
7.6)若预约成功,根据预约数量递增部分读指针指向的流的已预约读取元素数,若这个流的剩余可读元素不足,则更新部分读指针指向队列中的下一个流,并递增这个流的已预约读取元素数为预约请求的元素数减去上一个流本次预约元素数量。
[0012]其中步骤5.5)进一步包括:
8.1)访问的首个原子地址为,元素地址中的第一个元素所在缓存行地址加上原子序号与每个缓存行大小之积再加上元素地址中的元素在这个缓存行内的偏移;
8.2)访问的后续原子地址在首个原子地址向后递增;
8.3)对于写访问当后续原子数量超过所在流能存储的最大原子数量,或对于读访问当后续原子数量超过所在流的剩余可读元素数时,第一个超过的原子称为后续流首个原子,后续流首个原子的地址为,所述的首个原子的地址加上一个所述的元素块的大小;
8.4)后续流首个原子之后的原子按照后续流首个原子的地址向后递增。
[0013]其中步骤5.5)进一步包括:
9.1)对于所述的原子的写访问请求,从所述的首个原子的地址开始按序写入请求中的所有原子,并递增流的写入的原子总数,直到全部写入或用完首个原子所在流的剩余空间,若此流的剩余空间用完后仍有剩余原子没有写入,则剩余的原子从所述的后续流存储相应原子的缓存行的起始的地址开始顺序写入;
9.2)对于所述的原子的读访问请求,从所述的首个原子地址开始按序读取流中的原子,并递增流的读取的原子总数,直到读完请求的原子数量或者读完全部可读的元素,可读的元素数量为流的已预约写入元素数减去预约请求的原子数,剩余的原子从所述的后续流存储相应原子的缓存行加上元素地址中的缓存行内偏移开始顺序读取;
9.3)原子的写或读访问请求完成后最后一级缓存控制器发送请求完成响应给处理器。
[0014]其中步骤5.6)进一步包括:每次完成原子的读访问后,从队头开始检查每个流是否还有剩余可读原子,剩余可读原子为流的写入的原子总数与读取的原子数总数之差,若已没有剩余可读原子,向后移动队头释放相应的流空间,检查直到第一个不满足以上要求的流或部分读指针指向的流为止。
[0015]本发明具有的有益效果是:避免处理器间临时数据交换引入不必要的访存带宽和内存空间占用,允许不同的处理器以最合适的访存模式访问交换的数据。并且由最后一级缓存控制器管理共享数据的空间使用,去除了各个处理器各自管理的负担。
【附图说明】
[0016]图1是兀素在最后一级缓存中的存储组织不意图。
[0017]图2是处理器和最后一级缓存间传输的流程图。
[0018]图3是预
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1