11-03 内存拷贝与设置【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime本章节描述 Host-Device 间及 Device-Device 间的内存拷贝与内存设置接口。aclError aclrtMemcpy(void *dst, size_t destMax, const void *src, size_t count, aclrtMemcpyKind kind)实现内存复制。aclError aclrtMemcpyAsync(void *dst, size_t destMax, const void *src, size_t count, aclrtMemcpyKind kind, aclrtStream stream)实现内存复制。aclError aclrtMemcpyAsyncWithCondition(void *dst, size_t destMax, const void *src, size_t count, aclrtMemcpyKind kind, aclrtStream stream)实现内存复制。aclError aclrtMemcpyBatch(void **dsts, size_t *destMaxs, void **srcs, size_t *sizes, size_t numBatches, aclrtMemcpyBatchAttr *attrs, size_t *attrsIndexes, size_t numAttrs, size_t *failIndex)实现批量内存复制。aclError aclrtMemcpyBatchAsync(void **dsts, size_t *destMaxs, void **srcs, size_t *sizes, size_t numBatches, aclrtMemcpyBatchAttr *attrs, size_t *attrsIndexes, size_t numAttrs, size_t *failIndex, aclrtStream stream)实现批量内存复制。aclError aclrtMemcpyBatchV2(void **dsts, size_t *destMaxs, void **srcs, size_t *sizes, size_t numBatches, aclrtMemcpyBatchAttr *attrs, size_t *attrsIndexes, size_t numAttrs)实现批量内存复制。aclError aclrtMemcpyBatchAsyncV2(void **dsts, size_t *destMaxs, void **srcs, size_t *sizes, size_t numBatches, aclrtMemcpyBatchAttr *attrs, size_t *attrsIndexes, size_t numAttrs, aclrtStream stream)实现批量内存复制。aclError aclrtMemcpy2d(void *dst, size_t dpitch, const void *src, size_t spitch, size_t width, size_t height, aclrtMemcpyKind kind)实现同步内存复制主要用于矩阵数据的复制。aclError aclrtMemcpy2dAsync(void *dst, size_t dpitch, const void *src, size_t spitch, size_t width, size_t height, aclrtMemcpyKind kind, aclrtStream stream)实现异步内存复制主要用于矩阵数据的复制。异步接口。aclError aclrtGetMemcpyDescSize(aclrtMemcpyKind kind, size_t *descSize)获取当前Device的内存复制描述符占用的内存大小。aclError aclrtSetMemcpyDesc(void *desc, aclrtMemcpyKind kind, void *srcAddr, void *dstAddr, size_t count, void *config)设置内存复制描述符此接口调用完成后会将源地址目的地址、内存复制长度记录到内存复制描述符中。aclError aclrtMemcpyAsyncWithDesc(void *desc, aclrtMemcpyKind kind, aclrtStream stream)使用内存复制描述符二级指针方式进行内存复制。异步接口。aclError aclrtMemcpyAsyncWithOffset(void **dst, size_t destMax, size_t dstDataOffset, const void **src, size_t count, size_t srcDataOffset, aclrtMemcpyKind kind, aclrtStream stream)实现内存复制适用于基地址是二级指针、有地址偏移的场景。异步接口。aclError aclrtMemset(void *devPtr, size_t maxCount, int32_t value, size_t count)初始化内存将内存中的内容设置为指定的值。aclError aclrtMemsetAsync(void *devPtr, size_t maxCount, int32_t value, size_t count, aclrtStream stream)初始化内存将内存中的内容设置为指定的值。异步接口。aclrtMemcpyaclError aclrtMemcpy(void *dst, size_t destMax, const void *src, size_t count, aclrtMemcpyKind kind)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现内存复制。参数说明参数名输入/输出说明dst输入目的内存地址指针。destMax输入目的内存地址的最大内存长度单位Byte。src输入源内存地址指针。count输入内存复制的长度单位Byte。kind输入内存复制的类型预留参数配置枚举值中的值无效系统内部会根据源内存地址指针、目的内存地址指针判断是否可以将源地址的数据复制到目的地址如果不可以则系统会返回报错。类型定义请参见aclrtMemcpyKind。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明本接口会立刻进行内存复制函数内部不会进行隐式的device同步或流同步。如果执行两个Device间的内存复制需先调用aclrtDeviceCanAccessPeer接口查询两个Device间是否支持数据交互、调用aclrtDeviceEnablePeerAccess接口开启两个Device间的数据交互功能再调用本接口进行内存复制。该约束适用以下型号Ascend 950PR/Ascend 950DTAtlas A2 训练系列产品/Atlas A2 推理系列产品aclrtMemcpyAsyncaclError aclrtMemcpyAsync(void *dst, size_t destMax, const void *src, size_t count, aclrtMemcpyKind kind, aclrtStream stream)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现内存复制。本接口中的Host内存支持锁页内存例如通过aclrtMallocHost接口申请的内存、非锁页内存通过malloc接口申请的内存。当Host内存是锁页内存时本接口是异步接口调用接口成功仅表示任务下发成功不表示任务执行成功调用本接口后需调用同步等待接口例如aclrtSynchronizeStream确保内存复制的任务已执行完成当Host内存是非锁页内存时本接口在内存复制任务完成后才返回。参数说明参数名输入/输出说明dst输入目的内存地址指针。destMax输入目的内存地址的最大内存长度单位Byte。src输入源内存地址指针。count输入内存复制的长度单位Byte。kind输入内存复制的类型。类型定义请参见aclrtMemcpyKind。stream输入指定执行内存复制任务的Stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明Ascend EP形态下本接口不支持异步Host内的内存复制功能若传入的kind为ACL_MEMCPY_HOST_TO_HOST时接口返回报错ACL_ERROR_RT_FEATURE_NOT_SUPPORT 。aclrtMemcpyAsyncWithConditionaclError aclrtMemcpyAsyncWithCondition(void *dst, size_t destMax, const void *src, size_t count, aclrtMemcpyKind kind, aclrtStream stream)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现内存复制。本接口中的Host内存支持锁页内存例如通过aclrtMallocHost接口申请的内存、非锁页内存通过malloc接口申请的内存。当Host内存是非锁页内存时本接口在内存复制任务完成后才返回当Host内存是锁页内存时本接口是异步接口调用接口成功仅表示任务下发成功不表示任务执行成功调用本接口后需调用同步等待接口例如aclrtSynchronizeStream确保内存复制的任务已执行完成。参数说明参数名输入/输出说明dst输入目的内存地址指针。destMax输入目的内存地址的最大内存长度单位Byte。src输入源内存地址指针。count输入内存复制的长度单位Byte。kind输入内存复制的类型。类型定义请参见aclrtMemcpyKind。stream输入指定执行内存复制任务的Stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明Ascend EP形态下本接口不支持异步Host内的内存复制功能若传入的kind为ACL_MEMCPY_HOST_TO_HOST时接口返回报错ACL_ERROR_RT_FEATURE_NOT_SUPPORT 。aclrtMemcpyBatchaclError aclrtMemcpyBatch(void **dsts, size_t *destMaxs, void **srcs, size_t *sizes, size_t numBatches, aclrtMemcpyBatchAttr *attrs, size_t *attrsIndexes, size_t numAttrs, size_t *failIndex)须知本接口为试验特性后续版本可能会存在变更不支持应用于商用产品中。产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现批量内存复制。本接口中的Host内存支持锁页内存例如通过aclrtMallocHost接口申请的内存、非锁页内存通过malloc接口申请的内存。参数说明参数名输入/输出说明dsts输入目的内存地址数组。destMaxs输入内存复制最大长度数组用于存放每一段要复制的内存的最大长度单位Byte。srcs输入源内存地址数组。sizes输入内存复制长度数组用于存放每一段要复制的内存大小单位Byte。numBatches输入dsts、srcs和sizes数组的长度。attrs输入内存复制属性数组。类型定义请参见aclrtMemcpyBatchAttr。attrsIndexes输入内存复制属性索引数组用于指定attrs数组中每个条目适用的复制范围。attrs[k]中指定的属性将应用于从attrsIndexes[k]到attrsIndexes[k1] - 1的复制操作同时attrs[numAttrs-1]将应用于从attrsIndexes[numAttrs-1]到numBatches - 1的复制操作。numAttrs输入attrs和attrsIndexes数组的长度。failIndex输出用于发生错误时指示出错的复制项下标仅支持对内存属性和复制方向的校验。若错误不涉及特定复制操作该值将为SIZE_MAX。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明批次内的内存拷贝是无序的不会按照数组中元素的顺序拷贝。将srcs中指定的数据复制到dsts中指定的内存区域每个复制操作的大小由sizes指定dsts、srcs、sizes这三个数组必须具有numBatches指定的相同长度。批处理中的每个复制操作必须与attrs数组中指定的属性集相关联attrs数组中的每个条目可应用于多个复制操作具体通过attrsIndexes数组指定对应属性条目生效的起始复制索引。attrs和attrsIndexes这两个数组必须具有numAttrs指定的相同长度。例如若批处理包含dsts/srcs/sizes列出的10个复制操作其中前6个使用一组属性后4个使用另一组属性则numAttrs为2attrsIndexes为{0,6}attrs包含两组属性。注意attrsIndexes的首个条目必须为0且每个条目必须大于前一个条目最后一个条目应小于numBatches。此外numAttrs必须小于等于numBatches。批量内存复制的方向仅支持“从Host到Device”或者“从Device到Host”中的一种。aclrtMemcpyBatchAsyncaclError aclrtMemcpyBatchAsync(void **dsts, size_t *destMaxs, void **srcs, size_t *sizes, size_t numBatches, aclrtMemcpyBatchAttr *attrs, size_t *attrsIndexes, size_t numAttrs, size_t *failIndex, aclrtStream stream)须知本接口为试验特性后续版本可能会存在变更不支持应用于商用产品中。产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现批量内存复制。本接口中的Host内存支持锁页内存例如通过aclrtMallocHost接口申请的内存、非锁页内存通过malloc接口申请的内存。当Host内存是非锁页内存时本接口在内存复制任务完成后才返回当Host内存是锁页内存时本接口是异步接口调用接口成功仅表示任务下发成功不表示任务执行成功调用本接口后需调用同步等待接口例如aclrtSynchronizeStream确保内存复制的任务已执行完成。参数说明参数名输入/输出说明dsts输入目的内存地址数组。destMaxs输入内存复制最大长度数组用于存放每一段要复制的内存的最大长度单位Byte。srcs输入源内存地址数组。sizes输入内存复制长度数组用于存放每一段要复制的内存大小单位Byte。numBatches输入dsts、srcs和sizes数组的长度。attrs输入内存复制属性数组。类型定义请参见aclrtMemcpyBatchAttr。attrsIndexes输入内存复制属性索引数组用于指定attrs数组中每个条目适用的复制范围。attrs[k]中指定的属性将应用于从attrsIndexes[k]到attrsIndexes[k1] - 1的复制操作同时attrs[numAttrs-1]将应用于从attrsIndexes[numAttrs-1]到numBatches - 1的复制操作。numAttrs输入attrs和attrsIndexes数组的长度。failIndex输出用于发生错误时指示出错的复制项下标仅支持对内存属性和复制方向的校验。若错误不涉及特定复制操作该值将为SIZE_MAX。stream输入指定执行内存复制任务的Stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明批次内的内存拷贝是无序的不会按照数组中元素的顺序拷贝。将srcs中指定的数据复制到dsts中指定的内存区域每个复制操作的大小由sizes指定dsts、srcs、sizes这三个数组必须具有numBatches指定的相同长度。批处理中的每个复制操作必须与attrs数组中指定的属性集相关联attrs数组中的每个条目可应用于多个复制操作具体通过attrsIndexes数组指定对应属性条目生效的起始复制索引。attrs和attrsIndexes这两个数组必须具有numAttrs指定的相同长度。例如若批处理包含dsts/srcs/sizes列出的10个复制操作其中前6个使用一组属性后4个使用另一组属性则numAttrs为2attrsIndexes为{0,6}attrs包含两组属性。注意attrsIndexes的首个条目必须为0且每个条目必须大于前一个条目最后一个条目应小于numBatches。此外numAttrs必须小于等于numBatches。批量内存复制的方向仅支持“从Host到Device”或者“从Device到Host”中的一种。aclrtMemcpyBatchV2aclError aclrtMemcpyBatchV2(void **dsts, size_t *destMaxs, void **srcs, size_t *sizes, size_t numBatches, aclrtMemcpyBatchAttr *attrs, size_t *attrsIndexes, size_t numAttrs)须知本接口为试验特性后续版本可能会存在变更不支持应用于商用产品中。产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现批量内存复制。本接口中的Host内存支持锁页内存例如通过aclrtMallocHost接口申请的内存、非锁页内存通过malloc接口申请的内存。与aclrtMemcpyBatch接口相比本接口不再通过failIndex参数返回失败的复制项下标。参数说明参数名输入/输出说明dsts输入目的内存地址数组。destMaxs输入内存复制最大长度数组用于存放每一段要复制的内存的最大长度单位Byte。srcs输入源内存地址数组。sizes输入内存复制长度数组用于存放每一段要复制的内存大小单位Byte。numBatches输入dsts、srcs和sizes数组的长度。attrs输入内存复制属性数组。类型定义请参见aclrtMemcpyBatchAttr。attrsIndexes输入内存复制属性索引数组用于指定attrs数组中每个条目适用的复制范围。attrs[k]中指定的属性将应用于从attrsIndexes[k]到attrsIndexes[k1] - 1的复制操作同时attrs[numAttrs-1]将应用于从attrsIndexes[numAttrs-1]到numBatches - 1的复制操作。numAttrs输入attrs和attrsIndexes数组的长度。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明批次内的内存拷贝是无序的不会按照数组中元素的顺序拷贝。将srcs中指定的数据复制到dsts中指定的内存区域每个复制操作的大小由sizes指定dsts、srcs、sizes这三个数组必须具有numBatches指定的相同长度。批处理中的每个复制操作必须与attrs数组中指定的属性集相关联attrs数组中的每个条目可应用于多个复制操作具体通过attrsIndexes数组指定对应属性条目生效的起始复制索引。attrs和attrsIndexes这两个数组必须具有numAttrs指定的相同长度。例如若批处理包含dsts/srcs/sizes列出的10个复制操作其中前6个使用一组属性后4个使用另一组属性则numAttrs为2attrsIndexes为{0,6}attrs包含两组属性。注意attrsIndexes的首个条目必须为0且每个条目必须大于前一个条目最后一个条目应小于numBatches。此外numAttrs必须小于等于numBatches。批量内存复制的方向仅支持“从Host到Device”或者“从Device到Host”中的一种。aclrtMemcpyBatchAsyncV2aclError aclrtMemcpyBatchAsyncV2(void **dsts, size_t *destMaxs, void **srcs, size_t *sizes, size_t numBatches, aclrtMemcpyBatchAttr *attrs, size_t *attrsIndexes, size_t numAttrs, aclrtStream stream)须知本接口为试验特性后续版本可能会存在变更不支持应用于商用产品中。产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现批量内存复制。本接口中的Host内存支持锁页内存例如通过aclrtMallocHost接口申请的内存、非锁页内存通过malloc接口申请的内存。当Host内存是非锁页内存时本接口在内存复制任务完成后才返回当Host内存是锁页内存时本接口是异步接口调用接口成功仅表示任务下发成功不表示任务执行成功调用本接口后需调用同步等待接口例如aclrtSynchronizeStream确保内存复制的任务已执行完成。与aclrtMemcpyBatchAsync接口相比本接口不再通过failIndex参数返回失败的复制项下标。参数说明参数名输入/输出说明dsts输入目的内存地址数组。destMaxs输入内存复制最大长度数组用于存放每一段要复制的内存的最大长度单位Byte。srcs输入源内存地址数组。sizes输入内存复制长度数组用于存放每一段要复制的内存大小单位Byte。numBatches输入dsts、srcs和sizes数组的长度。attrs输入内存复制属性数组。类型定义请参见aclrtMemcpyBatchAttr。attrsIndexes输入内存复制属性索引数组用于指定attrs数组中每个条目适用的复制范围。attrs[k]中指定的属性将应用于从attrsIndexes[k]到attrsIndexes[k1] - 1的复制操作同时attrs[numAttrs-1]将应用于从attrsIndexes[numAttrs-1]到numBatches - 1的复制操作。numAttrs输入attrs和attrsIndexes数组的长度。stream输入指定执行内存复制任务的Stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明批次内的内存拷贝是无序的不会按照数组中元素的顺序拷贝。将srcs中指定的数据复制到dsts中指定的内存区域每个复制操作的大小由sizes指定dsts、srcs、sizes这三个数组必须具有numBatches指定的相同长度。批处理中的每个复制操作必须与attrs数组中指定的属性集相关联attrs数组中的每个条目可应用于多个复制操作具体通过attrsIndexes数组指定对应属性条目生效的起始复制索引。attrs和attrsIndexes这两个数组必须具有numAttrs指定的相同长度。例如若批处理包含dsts/srcs/sizes列出的10个复制操作其中前6个使用一组属性后4个使用另一组属性则numAttrs为2attrsIndexes为{0,6}attrs包含两组属性。注意attrsIndexes的首个条目必须为0且每个条目必须大于前一个条目最后一个条目应小于numBatches。此外numAttrs必须小于等于numBatches。批量内存复制的方向仅支持“从Host到Device”或者“从Device到Host”中的一种。aclrtMemcpy2daclError aclrtMemcpy2d(void *dst, size_t dpitch, const void *src, size_t spitch, size_t width, size_t height, aclrtMemcpyKind kind)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现同步内存复制主要用于矩阵数据的复制。参数说明参数名输入/输出说明dst输入目的内存地址指针。dpitch输入目的内存中相邻两列向量的地址距离。src输入源内存地址指针。spitch输入源内存中相邻两列向量的地址距离。width输入待复制的数据宽度。height输入待复制的数据高度。kind输入内存复制的类型。类型定义请参见aclrtMemcpyKind。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明当前仅支持ACL_MEMCPY_HOST_TO_DEVICE类型和ACL_MEMCPY_DEVICE_TO_HOST类型的内存复制。参考资源本接口的内存复制示意图aclrtMemcpy2dAsyncaclError aclrtMemcpy2dAsync(void *dst, size_t dpitch, const void *src, size_t spitch, size_t width, size_t height, aclrtMemcpyKind kind, aclrtStream stream)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现异步内存复制主要用于矩阵数据的复制。异步接口。本接口中的Host内存支持锁页内存例如通过aclrtMallocHost接口申请的内存、非锁页内存通过malloc接口申请的内存。当Host内存是非锁页内存时本接口在内存复制任务完成后才返回当Host内存是锁页内存时本接口是异步接口调用接口成功仅表示任务下发成功不表示任务执行成功调用本接口后需调用同步等待接口例如aclrtSynchronizeStream确保内存复制的任务已执行完成。参数说明参数名输入/输出说明dst输入目的内存地址指针。dpitch输入目的内存中相邻两列向量的地址距离。src输入源内存地址指针。spitch输入源内存中相邻两列向量的地址距离。width输入待复制的数据宽度。width最大设置为5000000且必须小于或等于dpitch和spitch。height输入待复制的数据高度。height最大设置为5102410245242880否则接口返回失败。kind输入内存复制的类型。类型定义请参见aclrtMemcpyKind。stream输入指定执行内存复制任务的Stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明本接口仅支持ACL_MEMCPY_HOST_TO_DEVICE、ACL_MEMCPY_DEVICE_TO_HOST或ACL_MEMCPY_DEVICE_TO_DEVICE内存复制类型且不同型号支持的类型不同。对于不支持的内存复制类型接口返回ACL_ERROR_INVALID_PARAM。ACL_MEMCPY_HOST_TO_DEVICE、ACL_MEMCPY_DEVICE_TO_HOST类型以下型号支持Ascend 950PR/Ascend 950DTAtlas A3 训练系列产品/Atlas A3 推理系列产品Atlas A2 训练系列产品/Atlas A2 推理系列产品ACL_MEMCPY_DEVICE_TO_DEVICE类型以下型号支持Ascend 950PR/Ascend 950DTAtlas A3 训练系列产品/Atlas A3 推理系列产品Atlas A2 训练系列产品/Atlas A2 推理系列产品参考资源本接口的内存复制示意图aclrtGetMemcpyDescSizeaclError aclrtGetMemcpyDescSize(aclrtMemcpyKind kind, size_t *descSize)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明获取当前Device的内存复制描述符占用的内存大小。本接口需与其它关键接口配合使用以便实现内存复制详细描述请参见aclrtMemcpyAsyncWithDesc。参数说明参数名输入/输出说明kind输入内存复制的类型。类型定义请参见aclrtMemcpyKind。当前仅支持ACL_MEMCPY_INNER_DEVICE_TO_DEVICE表示Device内的内存复制。descSize输出内存大小单位Byte。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtSetMemcpyDescaclError aclrtSetMemcpyDesc(void *desc, aclrtMemcpyKind kind, void *srcAddr, void *dstAddr, size_t count, void *config)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明设置内存复制描述符此接口调用完成后会将源地址目的地址、内存复制长度记录到内存复制描述符中。本接口需与其它关键接口配合使用以便实现内存复制详细描述请参见aclrtMemcpyAsyncWithDesc。参数说明参数名输入/输出说明desc输出内存复制描述符地址指针。需先调用aclrtGetMemcpyDescSize接口获取内存描述符所需的内存大小再申请Device内存后例如aclrtMalloc接口将Device内存地址作为入参传入此处。kind输入内存复制的类型。类型定义请参见aclrtMemcpyKind。当前仅支持ACL_MEMCPY_INNER_DEVICE_TO_DEVICE表示Device内的内存复制。srcAddr输入源内存地址指针。由用户申请内存并管理内存。dstAddr输入目的内存地址指针。由用户申请内存并管理内存。count输入内存复制的长度单位Byte。config输入预留参数当前固定传NULL。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtMemcpyAsyncWithDescaclError aclrtMemcpyAsyncWithDesc(void *desc, aclrtMemcpyKind kind, aclrtStream stream)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明使用内存复制描述符二级指针方式进行内存复制。异步接口。本接口需与以下其它关键接口配合使用以便实现内存复制调用aclrtGetMemcpyDescSize接口获取内存描述符所需的内存大小。申请Device内存用于存放内存描述符。申请源内存、目的内存分别用于存放复制前后的数据。调用aclrtSetMemcpyDesc接口将源内存地址、目的内存地址等信息设置到内存描述符中。调用aclrtMemcpyAsyncWithDesc接口实现内存复制。参数说明参数名输入/输出说明desc输入内存复制描述符地址指针Device侧内存地址。此处需先调用aclrtSetMemcpyDesc接口设置内存复制描述符再将内存复制描述符地址指针作为入参传入本接口。kind输入内存复制的类型。类型定义请参见aclrtMemcpyKind。当前仅支持ACL_MEMCPY_INNER_DEVICE_TO_DEVICE表示Device内的内存复制。stream输入指定执行内存复制任务的Stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtMemcpyAsyncWithOffsetaclError aclrtMemcpyAsyncWithOffset(void **dst, size_t destMax, size_t dstDataOffset, const void **src, size_t count, size_t srcDataOffset, aclrtMemcpyKind kind, aclrtStream stream)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现内存复制适用于基地址是二级指针、有地址偏移的场景。异步接口。参数说明参数名输入/输出说明dst输入目的内存地址指针。destMax输入目的内存地址的最大内存长度单位Byte。dstDataOffset输入目的内存地址偏移。src输入源内存地址指针。count输入内存复制的长度单位Byte。srcDataOffset输入源内存地址偏移。kind输入内存复制的类型。类型定义请参见aclrtMemcpyKind。当前kind只支持ACL_MEMCPY_INNER_DEVICE_TO_DEVICEDevice内的内存复制。stream输入指定执行内存复制任务的Stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtMemsetaclError aclrtMemset(void *devPtr, size_t maxCount, int32_t value, size_t count)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明初始化内存将内存中的内容设置为指定的值。要初始化的内存支持在Host侧或Device侧系统根据地址判定是Host还是Device。如果Host内存不是用acl接口例如aclrtMallocHost申请的将会导致未定义的行为。参数说明参数名输入/输出说明devPtr输入内存起始地址的指针。maxCount输入内存的最大长度单位Byte。value输入设置的值。count输入需要设置为指定值的内存长度单位Byte。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明本接口会立刻进行内存初始化函数内部不会进行隐式的device同步或流同步。aclrtMemsetAsyncaclError aclrtMemsetAsync(void *devPtr, size_t maxCount, int32_t value, size_t count, aclrtStream stream)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明初始化内存将内存中的内容设置为指定的值。异步接口。要初始化的内存支持在Host侧或Device侧系统根据地址判定是Host还是Device。如果Host内存不是用acl接口例如aclrtMallocHost申请的将会导致未定义的行为。参数说明参数名输入/输出说明devPtr输入内存起始地址的指针。maxCount输入内存的最大长度单位Byte。value输入设置的值。count输入需要设置为指定值的内存长度单位Byte。stream输入指定执行内存初始化任务的Stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
CANN/runtime内存拷贝设置API
发布时间:2026/7/16 7:55:19
11-03 内存拷贝与设置【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime本章节描述 Host-Device 间及 Device-Device 间的内存拷贝与内存设置接口。aclError aclrtMemcpy(void *dst, size_t destMax, const void *src, size_t count, aclrtMemcpyKind kind)实现内存复制。aclError aclrtMemcpyAsync(void *dst, size_t destMax, const void *src, size_t count, aclrtMemcpyKind kind, aclrtStream stream)实现内存复制。aclError aclrtMemcpyAsyncWithCondition(void *dst, size_t destMax, const void *src, size_t count, aclrtMemcpyKind kind, aclrtStream stream)实现内存复制。aclError aclrtMemcpyBatch(void **dsts, size_t *destMaxs, void **srcs, size_t *sizes, size_t numBatches, aclrtMemcpyBatchAttr *attrs, size_t *attrsIndexes, size_t numAttrs, size_t *failIndex)实现批量内存复制。aclError aclrtMemcpyBatchAsync(void **dsts, size_t *destMaxs, void **srcs, size_t *sizes, size_t numBatches, aclrtMemcpyBatchAttr *attrs, size_t *attrsIndexes, size_t numAttrs, size_t *failIndex, aclrtStream stream)实现批量内存复制。aclError aclrtMemcpyBatchV2(void **dsts, size_t *destMaxs, void **srcs, size_t *sizes, size_t numBatches, aclrtMemcpyBatchAttr *attrs, size_t *attrsIndexes, size_t numAttrs)实现批量内存复制。aclError aclrtMemcpyBatchAsyncV2(void **dsts, size_t *destMaxs, void **srcs, size_t *sizes, size_t numBatches, aclrtMemcpyBatchAttr *attrs, size_t *attrsIndexes, size_t numAttrs, aclrtStream stream)实现批量内存复制。aclError aclrtMemcpy2d(void *dst, size_t dpitch, const void *src, size_t spitch, size_t width, size_t height, aclrtMemcpyKind kind)实现同步内存复制主要用于矩阵数据的复制。aclError aclrtMemcpy2dAsync(void *dst, size_t dpitch, const void *src, size_t spitch, size_t width, size_t height, aclrtMemcpyKind kind, aclrtStream stream)实现异步内存复制主要用于矩阵数据的复制。异步接口。aclError aclrtGetMemcpyDescSize(aclrtMemcpyKind kind, size_t *descSize)获取当前Device的内存复制描述符占用的内存大小。aclError aclrtSetMemcpyDesc(void *desc, aclrtMemcpyKind kind, void *srcAddr, void *dstAddr, size_t count, void *config)设置内存复制描述符此接口调用完成后会将源地址目的地址、内存复制长度记录到内存复制描述符中。aclError aclrtMemcpyAsyncWithDesc(void *desc, aclrtMemcpyKind kind, aclrtStream stream)使用内存复制描述符二级指针方式进行内存复制。异步接口。aclError aclrtMemcpyAsyncWithOffset(void **dst, size_t destMax, size_t dstDataOffset, const void **src, size_t count, size_t srcDataOffset, aclrtMemcpyKind kind, aclrtStream stream)实现内存复制适用于基地址是二级指针、有地址偏移的场景。异步接口。aclError aclrtMemset(void *devPtr, size_t maxCount, int32_t value, size_t count)初始化内存将内存中的内容设置为指定的值。aclError aclrtMemsetAsync(void *devPtr, size_t maxCount, int32_t value, size_t count, aclrtStream stream)初始化内存将内存中的内容设置为指定的值。异步接口。aclrtMemcpyaclError aclrtMemcpy(void *dst, size_t destMax, const void *src, size_t count, aclrtMemcpyKind kind)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现内存复制。参数说明参数名输入/输出说明dst输入目的内存地址指针。destMax输入目的内存地址的最大内存长度单位Byte。src输入源内存地址指针。count输入内存复制的长度单位Byte。kind输入内存复制的类型预留参数配置枚举值中的值无效系统内部会根据源内存地址指针、目的内存地址指针判断是否可以将源地址的数据复制到目的地址如果不可以则系统会返回报错。类型定义请参见aclrtMemcpyKind。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明本接口会立刻进行内存复制函数内部不会进行隐式的device同步或流同步。如果执行两个Device间的内存复制需先调用aclrtDeviceCanAccessPeer接口查询两个Device间是否支持数据交互、调用aclrtDeviceEnablePeerAccess接口开启两个Device间的数据交互功能再调用本接口进行内存复制。该约束适用以下型号Ascend 950PR/Ascend 950DTAtlas A2 训练系列产品/Atlas A2 推理系列产品aclrtMemcpyAsyncaclError aclrtMemcpyAsync(void *dst, size_t destMax, const void *src, size_t count, aclrtMemcpyKind kind, aclrtStream stream)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现内存复制。本接口中的Host内存支持锁页内存例如通过aclrtMallocHost接口申请的内存、非锁页内存通过malloc接口申请的内存。当Host内存是锁页内存时本接口是异步接口调用接口成功仅表示任务下发成功不表示任务执行成功调用本接口后需调用同步等待接口例如aclrtSynchronizeStream确保内存复制的任务已执行完成当Host内存是非锁页内存时本接口在内存复制任务完成后才返回。参数说明参数名输入/输出说明dst输入目的内存地址指针。destMax输入目的内存地址的最大内存长度单位Byte。src输入源内存地址指针。count输入内存复制的长度单位Byte。kind输入内存复制的类型。类型定义请参见aclrtMemcpyKind。stream输入指定执行内存复制任务的Stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明Ascend EP形态下本接口不支持异步Host内的内存复制功能若传入的kind为ACL_MEMCPY_HOST_TO_HOST时接口返回报错ACL_ERROR_RT_FEATURE_NOT_SUPPORT 。aclrtMemcpyAsyncWithConditionaclError aclrtMemcpyAsyncWithCondition(void *dst, size_t destMax, const void *src, size_t count, aclrtMemcpyKind kind, aclrtStream stream)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现内存复制。本接口中的Host内存支持锁页内存例如通过aclrtMallocHost接口申请的内存、非锁页内存通过malloc接口申请的内存。当Host内存是非锁页内存时本接口在内存复制任务完成后才返回当Host内存是锁页内存时本接口是异步接口调用接口成功仅表示任务下发成功不表示任务执行成功调用本接口后需调用同步等待接口例如aclrtSynchronizeStream确保内存复制的任务已执行完成。参数说明参数名输入/输出说明dst输入目的内存地址指针。destMax输入目的内存地址的最大内存长度单位Byte。src输入源内存地址指针。count输入内存复制的长度单位Byte。kind输入内存复制的类型。类型定义请参见aclrtMemcpyKind。stream输入指定执行内存复制任务的Stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明Ascend EP形态下本接口不支持异步Host内的内存复制功能若传入的kind为ACL_MEMCPY_HOST_TO_HOST时接口返回报错ACL_ERROR_RT_FEATURE_NOT_SUPPORT 。aclrtMemcpyBatchaclError aclrtMemcpyBatch(void **dsts, size_t *destMaxs, void **srcs, size_t *sizes, size_t numBatches, aclrtMemcpyBatchAttr *attrs, size_t *attrsIndexes, size_t numAttrs, size_t *failIndex)须知本接口为试验特性后续版本可能会存在变更不支持应用于商用产品中。产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现批量内存复制。本接口中的Host内存支持锁页内存例如通过aclrtMallocHost接口申请的内存、非锁页内存通过malloc接口申请的内存。参数说明参数名输入/输出说明dsts输入目的内存地址数组。destMaxs输入内存复制最大长度数组用于存放每一段要复制的内存的最大长度单位Byte。srcs输入源内存地址数组。sizes输入内存复制长度数组用于存放每一段要复制的内存大小单位Byte。numBatches输入dsts、srcs和sizes数组的长度。attrs输入内存复制属性数组。类型定义请参见aclrtMemcpyBatchAttr。attrsIndexes输入内存复制属性索引数组用于指定attrs数组中每个条目适用的复制范围。attrs[k]中指定的属性将应用于从attrsIndexes[k]到attrsIndexes[k1] - 1的复制操作同时attrs[numAttrs-1]将应用于从attrsIndexes[numAttrs-1]到numBatches - 1的复制操作。numAttrs输入attrs和attrsIndexes数组的长度。failIndex输出用于发生错误时指示出错的复制项下标仅支持对内存属性和复制方向的校验。若错误不涉及特定复制操作该值将为SIZE_MAX。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明批次内的内存拷贝是无序的不会按照数组中元素的顺序拷贝。将srcs中指定的数据复制到dsts中指定的内存区域每个复制操作的大小由sizes指定dsts、srcs、sizes这三个数组必须具有numBatches指定的相同长度。批处理中的每个复制操作必须与attrs数组中指定的属性集相关联attrs数组中的每个条目可应用于多个复制操作具体通过attrsIndexes数组指定对应属性条目生效的起始复制索引。attrs和attrsIndexes这两个数组必须具有numAttrs指定的相同长度。例如若批处理包含dsts/srcs/sizes列出的10个复制操作其中前6个使用一组属性后4个使用另一组属性则numAttrs为2attrsIndexes为{0,6}attrs包含两组属性。注意attrsIndexes的首个条目必须为0且每个条目必须大于前一个条目最后一个条目应小于numBatches。此外numAttrs必须小于等于numBatches。批量内存复制的方向仅支持“从Host到Device”或者“从Device到Host”中的一种。aclrtMemcpyBatchAsyncaclError aclrtMemcpyBatchAsync(void **dsts, size_t *destMaxs, void **srcs, size_t *sizes, size_t numBatches, aclrtMemcpyBatchAttr *attrs, size_t *attrsIndexes, size_t numAttrs, size_t *failIndex, aclrtStream stream)须知本接口为试验特性后续版本可能会存在变更不支持应用于商用产品中。产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现批量内存复制。本接口中的Host内存支持锁页内存例如通过aclrtMallocHost接口申请的内存、非锁页内存通过malloc接口申请的内存。当Host内存是非锁页内存时本接口在内存复制任务完成后才返回当Host内存是锁页内存时本接口是异步接口调用接口成功仅表示任务下发成功不表示任务执行成功调用本接口后需调用同步等待接口例如aclrtSynchronizeStream确保内存复制的任务已执行完成。参数说明参数名输入/输出说明dsts输入目的内存地址数组。destMaxs输入内存复制最大长度数组用于存放每一段要复制的内存的最大长度单位Byte。srcs输入源内存地址数组。sizes输入内存复制长度数组用于存放每一段要复制的内存大小单位Byte。numBatches输入dsts、srcs和sizes数组的长度。attrs输入内存复制属性数组。类型定义请参见aclrtMemcpyBatchAttr。attrsIndexes输入内存复制属性索引数组用于指定attrs数组中每个条目适用的复制范围。attrs[k]中指定的属性将应用于从attrsIndexes[k]到attrsIndexes[k1] - 1的复制操作同时attrs[numAttrs-1]将应用于从attrsIndexes[numAttrs-1]到numBatches - 1的复制操作。numAttrs输入attrs和attrsIndexes数组的长度。failIndex输出用于发生错误时指示出错的复制项下标仅支持对内存属性和复制方向的校验。若错误不涉及特定复制操作该值将为SIZE_MAX。stream输入指定执行内存复制任务的Stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明批次内的内存拷贝是无序的不会按照数组中元素的顺序拷贝。将srcs中指定的数据复制到dsts中指定的内存区域每个复制操作的大小由sizes指定dsts、srcs、sizes这三个数组必须具有numBatches指定的相同长度。批处理中的每个复制操作必须与attrs数组中指定的属性集相关联attrs数组中的每个条目可应用于多个复制操作具体通过attrsIndexes数组指定对应属性条目生效的起始复制索引。attrs和attrsIndexes这两个数组必须具有numAttrs指定的相同长度。例如若批处理包含dsts/srcs/sizes列出的10个复制操作其中前6个使用一组属性后4个使用另一组属性则numAttrs为2attrsIndexes为{0,6}attrs包含两组属性。注意attrsIndexes的首个条目必须为0且每个条目必须大于前一个条目最后一个条目应小于numBatches。此外numAttrs必须小于等于numBatches。批量内存复制的方向仅支持“从Host到Device”或者“从Device到Host”中的一种。aclrtMemcpyBatchV2aclError aclrtMemcpyBatchV2(void **dsts, size_t *destMaxs, void **srcs, size_t *sizes, size_t numBatches, aclrtMemcpyBatchAttr *attrs, size_t *attrsIndexes, size_t numAttrs)须知本接口为试验特性后续版本可能会存在变更不支持应用于商用产品中。产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现批量内存复制。本接口中的Host内存支持锁页内存例如通过aclrtMallocHost接口申请的内存、非锁页内存通过malloc接口申请的内存。与aclrtMemcpyBatch接口相比本接口不再通过failIndex参数返回失败的复制项下标。参数说明参数名输入/输出说明dsts输入目的内存地址数组。destMaxs输入内存复制最大长度数组用于存放每一段要复制的内存的最大长度单位Byte。srcs输入源内存地址数组。sizes输入内存复制长度数组用于存放每一段要复制的内存大小单位Byte。numBatches输入dsts、srcs和sizes数组的长度。attrs输入内存复制属性数组。类型定义请参见aclrtMemcpyBatchAttr。attrsIndexes输入内存复制属性索引数组用于指定attrs数组中每个条目适用的复制范围。attrs[k]中指定的属性将应用于从attrsIndexes[k]到attrsIndexes[k1] - 1的复制操作同时attrs[numAttrs-1]将应用于从attrsIndexes[numAttrs-1]到numBatches - 1的复制操作。numAttrs输入attrs和attrsIndexes数组的长度。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明批次内的内存拷贝是无序的不会按照数组中元素的顺序拷贝。将srcs中指定的数据复制到dsts中指定的内存区域每个复制操作的大小由sizes指定dsts、srcs、sizes这三个数组必须具有numBatches指定的相同长度。批处理中的每个复制操作必须与attrs数组中指定的属性集相关联attrs数组中的每个条目可应用于多个复制操作具体通过attrsIndexes数组指定对应属性条目生效的起始复制索引。attrs和attrsIndexes这两个数组必须具有numAttrs指定的相同长度。例如若批处理包含dsts/srcs/sizes列出的10个复制操作其中前6个使用一组属性后4个使用另一组属性则numAttrs为2attrsIndexes为{0,6}attrs包含两组属性。注意attrsIndexes的首个条目必须为0且每个条目必须大于前一个条目最后一个条目应小于numBatches。此外numAttrs必须小于等于numBatches。批量内存复制的方向仅支持“从Host到Device”或者“从Device到Host”中的一种。aclrtMemcpyBatchAsyncV2aclError aclrtMemcpyBatchAsyncV2(void **dsts, size_t *destMaxs, void **srcs, size_t *sizes, size_t numBatches, aclrtMemcpyBatchAttr *attrs, size_t *attrsIndexes, size_t numAttrs, aclrtStream stream)须知本接口为试验特性后续版本可能会存在变更不支持应用于商用产品中。产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现批量内存复制。本接口中的Host内存支持锁页内存例如通过aclrtMallocHost接口申请的内存、非锁页内存通过malloc接口申请的内存。当Host内存是非锁页内存时本接口在内存复制任务完成后才返回当Host内存是锁页内存时本接口是异步接口调用接口成功仅表示任务下发成功不表示任务执行成功调用本接口后需调用同步等待接口例如aclrtSynchronizeStream确保内存复制的任务已执行完成。与aclrtMemcpyBatchAsync接口相比本接口不再通过failIndex参数返回失败的复制项下标。参数说明参数名输入/输出说明dsts输入目的内存地址数组。destMaxs输入内存复制最大长度数组用于存放每一段要复制的内存的最大长度单位Byte。srcs输入源内存地址数组。sizes输入内存复制长度数组用于存放每一段要复制的内存大小单位Byte。numBatches输入dsts、srcs和sizes数组的长度。attrs输入内存复制属性数组。类型定义请参见aclrtMemcpyBatchAttr。attrsIndexes输入内存复制属性索引数组用于指定attrs数组中每个条目适用的复制范围。attrs[k]中指定的属性将应用于从attrsIndexes[k]到attrsIndexes[k1] - 1的复制操作同时attrs[numAttrs-1]将应用于从attrsIndexes[numAttrs-1]到numBatches - 1的复制操作。numAttrs输入attrs和attrsIndexes数组的长度。stream输入指定执行内存复制任务的Stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明批次内的内存拷贝是无序的不会按照数组中元素的顺序拷贝。将srcs中指定的数据复制到dsts中指定的内存区域每个复制操作的大小由sizes指定dsts、srcs、sizes这三个数组必须具有numBatches指定的相同长度。批处理中的每个复制操作必须与attrs数组中指定的属性集相关联attrs数组中的每个条目可应用于多个复制操作具体通过attrsIndexes数组指定对应属性条目生效的起始复制索引。attrs和attrsIndexes这两个数组必须具有numAttrs指定的相同长度。例如若批处理包含dsts/srcs/sizes列出的10个复制操作其中前6个使用一组属性后4个使用另一组属性则numAttrs为2attrsIndexes为{0,6}attrs包含两组属性。注意attrsIndexes的首个条目必须为0且每个条目必须大于前一个条目最后一个条目应小于numBatches。此外numAttrs必须小于等于numBatches。批量内存复制的方向仅支持“从Host到Device”或者“从Device到Host”中的一种。aclrtMemcpy2daclError aclrtMemcpy2d(void *dst, size_t dpitch, const void *src, size_t spitch, size_t width, size_t height, aclrtMemcpyKind kind)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现同步内存复制主要用于矩阵数据的复制。参数说明参数名输入/输出说明dst输入目的内存地址指针。dpitch输入目的内存中相邻两列向量的地址距离。src输入源内存地址指针。spitch输入源内存中相邻两列向量的地址距离。width输入待复制的数据宽度。height输入待复制的数据高度。kind输入内存复制的类型。类型定义请参见aclrtMemcpyKind。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明当前仅支持ACL_MEMCPY_HOST_TO_DEVICE类型和ACL_MEMCPY_DEVICE_TO_HOST类型的内存复制。参考资源本接口的内存复制示意图aclrtMemcpy2dAsyncaclError aclrtMemcpy2dAsync(void *dst, size_t dpitch, const void *src, size_t spitch, size_t width, size_t height, aclrtMemcpyKind kind, aclrtStream stream)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现异步内存复制主要用于矩阵数据的复制。异步接口。本接口中的Host内存支持锁页内存例如通过aclrtMallocHost接口申请的内存、非锁页内存通过malloc接口申请的内存。当Host内存是非锁页内存时本接口在内存复制任务完成后才返回当Host内存是锁页内存时本接口是异步接口调用接口成功仅表示任务下发成功不表示任务执行成功调用本接口后需调用同步等待接口例如aclrtSynchronizeStream确保内存复制的任务已执行完成。参数说明参数名输入/输出说明dst输入目的内存地址指针。dpitch输入目的内存中相邻两列向量的地址距离。src输入源内存地址指针。spitch输入源内存中相邻两列向量的地址距离。width输入待复制的数据宽度。width最大设置为5000000且必须小于或等于dpitch和spitch。height输入待复制的数据高度。height最大设置为5102410245242880否则接口返回失败。kind输入内存复制的类型。类型定义请参见aclrtMemcpyKind。stream输入指定执行内存复制任务的Stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明本接口仅支持ACL_MEMCPY_HOST_TO_DEVICE、ACL_MEMCPY_DEVICE_TO_HOST或ACL_MEMCPY_DEVICE_TO_DEVICE内存复制类型且不同型号支持的类型不同。对于不支持的内存复制类型接口返回ACL_ERROR_INVALID_PARAM。ACL_MEMCPY_HOST_TO_DEVICE、ACL_MEMCPY_DEVICE_TO_HOST类型以下型号支持Ascend 950PR/Ascend 950DTAtlas A3 训练系列产品/Atlas A3 推理系列产品Atlas A2 训练系列产品/Atlas A2 推理系列产品ACL_MEMCPY_DEVICE_TO_DEVICE类型以下型号支持Ascend 950PR/Ascend 950DTAtlas A3 训练系列产品/Atlas A3 推理系列产品Atlas A2 训练系列产品/Atlas A2 推理系列产品参考资源本接口的内存复制示意图aclrtGetMemcpyDescSizeaclError aclrtGetMemcpyDescSize(aclrtMemcpyKind kind, size_t *descSize)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明获取当前Device的内存复制描述符占用的内存大小。本接口需与其它关键接口配合使用以便实现内存复制详细描述请参见aclrtMemcpyAsyncWithDesc。参数说明参数名输入/输出说明kind输入内存复制的类型。类型定义请参见aclrtMemcpyKind。当前仅支持ACL_MEMCPY_INNER_DEVICE_TO_DEVICE表示Device内的内存复制。descSize输出内存大小单位Byte。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtSetMemcpyDescaclError aclrtSetMemcpyDesc(void *desc, aclrtMemcpyKind kind, void *srcAddr, void *dstAddr, size_t count, void *config)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明设置内存复制描述符此接口调用完成后会将源地址目的地址、内存复制长度记录到内存复制描述符中。本接口需与其它关键接口配合使用以便实现内存复制详细描述请参见aclrtMemcpyAsyncWithDesc。参数说明参数名输入/输出说明desc输出内存复制描述符地址指针。需先调用aclrtGetMemcpyDescSize接口获取内存描述符所需的内存大小再申请Device内存后例如aclrtMalloc接口将Device内存地址作为入参传入此处。kind输入内存复制的类型。类型定义请参见aclrtMemcpyKind。当前仅支持ACL_MEMCPY_INNER_DEVICE_TO_DEVICE表示Device内的内存复制。srcAddr输入源内存地址指针。由用户申请内存并管理内存。dstAddr输入目的内存地址指针。由用户申请内存并管理内存。count输入内存复制的长度单位Byte。config输入预留参数当前固定传NULL。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtMemcpyAsyncWithDescaclError aclrtMemcpyAsyncWithDesc(void *desc, aclrtMemcpyKind kind, aclrtStream stream)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明使用内存复制描述符二级指针方式进行内存复制。异步接口。本接口需与以下其它关键接口配合使用以便实现内存复制调用aclrtGetMemcpyDescSize接口获取内存描述符所需的内存大小。申请Device内存用于存放内存描述符。申请源内存、目的内存分别用于存放复制前后的数据。调用aclrtSetMemcpyDesc接口将源内存地址、目的内存地址等信息设置到内存描述符中。调用aclrtMemcpyAsyncWithDesc接口实现内存复制。参数说明参数名输入/输出说明desc输入内存复制描述符地址指针Device侧内存地址。此处需先调用aclrtSetMemcpyDesc接口设置内存复制描述符再将内存复制描述符地址指针作为入参传入本接口。kind输入内存复制的类型。类型定义请参见aclrtMemcpyKind。当前仅支持ACL_MEMCPY_INNER_DEVICE_TO_DEVICE表示Device内的内存复制。stream输入指定执行内存复制任务的Stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtMemcpyAsyncWithOffsetaclError aclrtMemcpyAsyncWithOffset(void **dst, size_t destMax, size_t dstDataOffset, const void **src, size_t count, size_t srcDataOffset, aclrtMemcpyKind kind, aclrtStream stream)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现内存复制适用于基地址是二级指针、有地址偏移的场景。异步接口。参数说明参数名输入/输出说明dst输入目的内存地址指针。destMax输入目的内存地址的最大内存长度单位Byte。dstDataOffset输入目的内存地址偏移。src输入源内存地址指针。count输入内存复制的长度单位Byte。srcDataOffset输入源内存地址偏移。kind输入内存复制的类型。类型定义请参见aclrtMemcpyKind。当前kind只支持ACL_MEMCPY_INNER_DEVICE_TO_DEVICEDevice内的内存复制。stream输入指定执行内存复制任务的Stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。aclrtMemsetaclError aclrtMemset(void *devPtr, size_t maxCount, int32_t value, size_t count)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明初始化内存将内存中的内容设置为指定的值。要初始化的内存支持在Host侧或Device侧系统根据地址判定是Host还是Device。如果Host内存不是用acl接口例如aclrtMallocHost申请的将会导致未定义的行为。参数说明参数名输入/输出说明devPtr输入内存起始地址的指针。maxCount输入内存的最大长度单位Byte。value输入设置的值。count输入需要设置为指定值的内存长度单位Byte。返回值说明返回0表示成功返回其他值表示失败请参见aclError。约束说明本接口会立刻进行内存初始化函数内部不会进行隐式的device同步或流同步。aclrtMemsetAsyncaclError aclrtMemsetAsync(void *devPtr, size_t maxCount, int32_t value, size_t count, aclrtStream stream)产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明初始化内存将内存中的内容设置为指定的值。异步接口。要初始化的内存支持在Host侧或Device侧系统根据地址判定是Host还是Device。如果Host内存不是用acl接口例如aclrtMallocHost申请的将会导致未定义的行为。参数说明参数名输入/输出说明devPtr输入内存起始地址的指针。maxCount输入内存的最大长度单位Byte。value输入设置的值。count输入需要设置为指定值的内存长度单位Byte。stream输入指定执行内存初始化任务的Stream。类型定义请参见aclrtStream。返回值说明返回0表示成功返回其他值表示失败请参见aclError。【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址: https://gitcode.com/cann/runtime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考