aclrtHostRegister
产品支持情况
产品 |
是否支持 |
|---|---|
Atlas 350 加速卡 |
√ |
√ |
|
√ |
|
☓ |
|
☓ |
|
☓ |
功能说明
注册Host内存地址。取消注册需调用aclrtHostUnregister接口。
本接口为封装接口,仅适用于C++程序,接口内部调用C接口aclrtHostRegister或aclrtHostRegisterV2。
函数原型
1 2 3 4 5 6 7 | # 将Host内存映射注册为Device可访问的内存地址,并获取映射后的Device内存地址 template <typename T> aclError aclrtHostRegister(T *ptr, uint64_t size, aclrtHostRegisterType type, T **devPtr) # 指定内存注册类型,注册Host内存地址 template <typename T> aclError aclrtHostRegister(T *ptr, uint64_t size, uint32_t flag) |
参数说明
参数名 |
输入/输出 |
说明 |
|---|---|---|
ptr |
输入 |
Host内存地址。 Host内存地址需4K页对齐。 当os内核版本为5.10或更低时,使用非锁页内存会导致异常,因此必须调用aclrtMallocHost接口来申请Host锁页内存。 当os内核版本为5.10以上时,支持使用非锁页的Host内存,因此既支持调用aclrtMallocHost接口申请Host锁页内存,也支持使用malloc接口申请Host非锁页内存。 |
size |
输入 |
内存大小,单位Byte。 |
type |
输入 |
内存注册类型。类型定义请参见aclrtHostRegisterType。 |
devPtr |
输出 |
Host内存映射成的Device可访问的内存地址。 该地址仅支持在Device上访问,例如作为核函数的参数,供Device的AI Core访问。若涉及Host侧的内存处理,需使用原始Host内存地址。 |
flag |
输入 |
内存注册类型。 取值为如下宏,支持配置单个宏,也支持配置多个宏位或(例如ACL_HOST_REG_MAPPED | ACL_HOST_REG_PINNED):
宏定义如下: #define ACL_HOST_REG_MAPPED 0x2UL #define ACL_HOST_REG_IOMEMORY 0x4UL #define ACL_HOST_REG_READONLY 0x8UL #define ACL_HOST_REG_PINNED 0X10000000UL |
返回值说明
返回0表示成功,返回其他值表示失败,请参见aclError。
父主题: C++扩展接口