开发者
资源
[object Object]

对于不同shape的输入进行数据切分时,可能会发生数据无法平均分配到多个核、同时每个核内的数据无法均分的情况。参考的处理方式,将两者结合起来考虑整核的尾块、尾核的尾块的处理方式。

[object Object]

由于本场景中核间、核内的数据均无法均分,在定义的Tiling结构体的基础上增加两个成员变量:

  • formerLastTileLength:数据量多的核最后一个分块大小,即整核的尾块大小。

    计算时,先按中提到的分核策略,切分数据量多的核。

    [object Object]

    再按中的切分策略,计算尾块长度。

    [object Object]
  • tailLastTileLength:数据量少的核最后一个分块大小,即尾核的尾块大小。

    计算时,先按中提到的分核策略,切分数据量少的核。

    [object Object]

    再按中的切分策略,计算尾块长度。

    [object Object]
[object Object]

Kernel侧Init函数和Process函数的实现需将的实现结合起来。

Init函数中由于整核和尾核对应的tileLength和lastTileLength不同。因此需按照中提到的分别处理整核和尾核。后续对主块和尾块的CopyIn、Compute、CopyOut函数的处理方式与方式相同。

Init函数实现代码如下:

[object Object]