对于不同shape的输入进行数据切分时,可能会发生数据无法平均分配到多个核、同时每个核内的数据无法均分的情况。参考与的处理方式,将两者结合起来考虑整核的尾块、尾核的尾块的处理方式。
由于本场景中核间、核内的数据均无法均分,在定义的Tiling结构体的基础上增加两个成员变量:
formerLastTileLength:数据量多的核最后一个分块大小,即整核的尾块大小。
[object Object][object Object]tailLastTileLength:数据量少的核最后一个分块大小,即尾核的尾块大小。
[object Object][object Object]
Kernel侧Init函数和Process函数的实现需将与的实现结合起来。
Init函数中由于整核和尾核对应的tileLength和lastTileLength不同。因此需按照中提到的分别处理整核和尾核。后续对主块和尾块的CopyIn、Compute、CopyOut函数的处理方式与方式相同。
Init函数实现代码如下:
[object Object]