数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 995|回复: 7

SPILL操作

[复制链接]
发表于 2025-9-21 14:56:53 | 显示全部楼层 |阅读模式
赛题在附录D和E中表明,如果目标缓冲区后续会被COPY_IN节点使用,说明该目标缓冲区中的原有数据会被覆盖,因此SPILL_OUT节点不需要执行(没有额外的数据搬运量、耗时为0)。
但,该情况下,没有数据SPILL_OUT至DDR的情况下,为什么SPILL_IN操作仍然需要将数据搬回核内缓存空间(造成额外数据搬运量、耗时不为0)?
发表于 2025-9-21 15:07:58 | 显示全部楼层
同学你好,目标缓冲区被COPY_IN节点使用,说明目标缓冲区里的数据原本就是从核外DDR直接搬运进来的,这部分数据在核外DDR上一直存在。因此,当空间不足时,可以将这个目标缓冲区直接释放掉,里面的数据不需要备份(也就是SPILL_OUT只释放缓冲区,不需要数据搬运)。下次需要使用这份数据时,只需要重复从核外将该数据搬运进来即可。其他目标缓冲区存储的是计算过程中的中间数据,当空间不足时,需要先把里面的数据备份到核外DDR上,也就是SPILL_OUT过程会有一次搬运,搬运结束后才释放缓冲区。
发表于 2025-9-21 15:49:17 | 显示全部楼层
A题专家 发表于 2025-9-21 15:07
同学你好,目标缓冲区被COPY_IN节点使用,说明目标缓冲区里的数据原本就是从核外DDR直接搬运进来的,这部分 ...

Cube计算产生的中间数据通过Flxp单元的COPY_OUT指令返回DDR,那Vector计算产生的中间数据返回DDR是COPY_OUT还是SPILL_OUT
 楼主| 发表于 2025-9-21 15:53:44 | 显示全部楼层
A题专家 发表于 2025-9-21 15:07
同学你好,目标缓冲区被COPY_IN节点使用,说明目标缓冲区里的数据原本就是从核外DDR直接搬运进来的,这部分 ...

我想问的是:目标缓冲区被COPY_IN节点使用,意味着数据需要从DDR搬运进该缓冲区。这个“搬运”的过程在COPY_IN节点处被执行,那么是否就不需要在新增的SPILL_IN的节点上进行额外的数据搬运、产生SPILL_IN的时间消耗呢?
如果需要在SPILL_IN的节点处,进行时间和内存支出。此时就已经将DDR的数据搬运至目标缓冲区了,后面的COPY_IN节点还需要执行吗?
发表于 2025-9-21 16:27:30 | 显示全部楼层
LiaoHX 发表于 2025-9-21 15:53
我想问的是:目标缓冲区被COPY_IN节点使用,意味着数据需要从DDR搬运进该缓冲区。这个“搬运”的过程在CO ...

一般来讲,这种缓冲区有关的op调度顺序应该是如下:
ALLOC -> COPY_IN -> OP1 -> OP2 -> ... -> FREE

不建议在ALLOC和COPY_IN指令中间插入SPILL_OUT/SPILL_IN,因为这种情况没有意义。
同样的,不建议在最后一个OP和FREE指令中间插入SPILL_OUT/SPILL_IN,因为这种情况同样没有意义。

作为评估调度结果的算法,不需要考虑如上两种没有意义的情况,统一按题目描述的方式处理。
发表于 2025-9-21 16:30:53 | 显示全部楼层
909 发表于 2025-9-21 15:49
Cube计算产生的中间数据通过Flxp单元的COPY_OUT指令返回DDR,那Vector计算产生的中间数据返回DDR是COPY_O ...

统一按照SPILL_OUT由MTE3处理,SPILL_IN由MTE2单元处理。L0级缓存由于只能搬入或者只能搬出,因此无法进行SPILL操作。SPILL操作只能针对UB或者L1缓冲区进行。
发表于 2025-9-21 17:00:36 | 显示全部楼层
本帖最后由 A题专家2 于 2025-9-21 17:04 编辑
LiaoHX 发表于 2025-9-21 15:53
我想问的是:目标缓冲区被COPY_IN节点使用,意味着数据需要从DDR搬运进该缓冲区。这个“搬运”的过程在CO ...

SPILL 有 out和in两个部分的开销,如果数据本就在DDR中存在,可以不把缓冲区内的数据搬出,即SPILL_OUT开销为0,仅考虑SPILL_IN的开销,这种情况下,这里的SPILL_IN和COPY_IN实质上可以看作是一个操作,完成的是相同的数据移动,没有必要冗余进行。
发表于 2025-9-21 17:13:35 | 显示全部楼层
909 发表于 2025-9-21 15:49
Cube计算产生的中间数据通过Flxp单元的COPY_OUT指令返回DDR,那Vector计算产生的中间数据返回DDR是COPY_O ...

SPILL操作只是个名字,他本质上描述的是说把数据先搬出,一段时间后再搬入这个过程。如果Vector缓存区中间数据从计算逻辑上本不需要搬出,但为了腾出缓冲区用于别的计算,后续还要搬进来,那就叫SPILL_OUT,如果这个Vector缓存区的数据本就要搬出去,那就叫COPY_OUT
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2025-11-3 08:08 , Processed in 0.057594 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表