最近一周手里的程序出现了内存越界,每次一运行就会报错,有时是:malloc_consolidate() : invalid chunk size,有时是:invalid pointer ,有时是段错误。我负责在深度学习训练框架上支持 GPU 之外的另一种硬件加速卡,训练框架的存储分成三级:第一级叫chunk,chunk切分成 block,block再切分成 register,这些存储空间可能在host上,也可能在device上,程序运行的过程中输入数据会从 host 拷贝到 device 上,计算完成后再从 device 考回 host,其中 host 上存储的数据是 64 byte,device 上的空间是 512 byte, copyH2D 的时候没问题,而 copyD2H 的时候就会出现内存越界。解决方法就是分配 device 空间的时候从 512 byte 中切分出 64byte 用于接收copyD2H 的数据。这里还要说明一下这种新的硬件加速卡的特点:它的malloc函数是返回一个结构体的,里面包含多少字节的数据是确定的,所以copyH2D 的时候会出现 device 上的 512 字节拷贝到 host 上64字节空间的情况。特此记录踩坑及填坑过程。
2021-08-07
最新推荐文章于 2023-03-20 15:23:52 发布