关于datacopy内存复制的一点小心得
收藏回复举报
关于datacopy内存复制的一点小心得
发表于2024-05-05 10:31:36
0 查看
  • 正文前感谢昇腾各位工作人员,没有你们就没有我们的进步
  • 本文立意是解决内存搬迁中API使用的问题
  • 由来是我在解决{1,32}数据广播成{32,32}过程中遇到的问题

  • ​​​​​​​数据搬迁中常用到下列代码,整体搬迁,很方便
  • 但是灵活性欠佳,为什么这么说呢?
DataCopy(inLocal[this->tileLength + this->tileLength1], x2Gm[0], this->tileLength2);

  • 如果遇到下列代码的情形下,datacopy是没办法起到他应有的方便的作用
  • 如果数据出现断层比如34个数据,int32类型,经过32字节,也就是ALIGN为8对齐后,totalLength为32+8=40
  • tilenum为2,6个空数据,对齐数据
  • tileLength本为32,由于BUFFER_NUM为2,所以tileLength变为16
  • 因为GM的重复复制到localTensor中,所以使用datacopy连续赋值,虽然后stride可以设置,但是还是比较不方便
  • 更直接的使用方式如下,当然可能我对datacopy理解还不到位,如果有更好的表述方式,还望不吝赐教
for (i = 0;i<this->tileLengthy;i++)
{
   inLocal.SetValue(this->tileLength+ i,x1Gm.GetValue(((progress )* this->tileLengthy + i)%(this->axis0)));
}

我要发帖子