C函数原型 |
无 |
Python函数 |
ptr = acl.util.numpy_to_ptr(data) |
函数功能 |
将numpy数组转换成为void*数据,可以将转换好的数据传递给C函数直接使用。 |
输入说明 |
data:numpy类型数据。 |
返回值说明 |
ptr:int,可以被C语言访问的数据。 |
约束说明 |
访问的是int类型的数据,需要将void*转换为int*。 |
注意事项 |
- 该函数输入的生命周期需要大于输出的生命周期,否则可能会产生未定义行为。
- 若传入的numpy数组在内存上是非行连续的,在接口调用时会打印如下提示信息:
Warning:The input ndarray is discontiguous. Please use acl.util.numpy_contiguous_to_ptr instead. 请使用acl.util.numpy_contiguous_to_ptr接口获取numpy数组的地址对象,否则在使用acl.rt.memcpy拷贝数据时,由于acl.rt.memcpy拷贝的是连续内存地址,会导致拷贝的数据和目标拷贝数据不一致的问题。
- 可以通过numpy数组的flags属性来查看numpy数组在内存上是否连续:
print(data.flags) 得到结果如下: C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False 其中“C_CONTIGUOUS:True”,则说明numpy数组在内存上行连续。“F_CONTIGUOUS : False”,则说明numpy数组在内存上列不连续。
- 该接口即将废弃,建议使用acl.util.bytes_to_ptr接口。
- 修改示例如下:
np_ptr = acl.util.numpy_to_ptr(np_arr_in) 修改后使用: bytes_in = np_arr_in.tobytes()
bytes_ptr = acl.util.bytes_to_ptr(bytes_in)
- 若要继续使用该接口,需要运行环境为python≥3.8且numpy≥1.22.0。
|