python中通过ctypes库调用c函数

加载已编译的so文件,定义C函数的参数和返回类型,这里面传入的是torch.tensor数组,需要将数据转成ctypes.c_float格式才能被正确识别,有两种方式可以转换:

第一种:

1:将tensor数组转成list,计算数组长度
    tensor = tensor.reshape(-1).tolist()
    tensor_len = len(tensor)

2:确定要映射的数据类型,创建c数组
    array_type = ctypes.c_float * tensor_len
    c_array = array_type(*tensor)# 将 python列表转换为 C 指针

第二种:(速度快)

1: 将tensor数组转换成numpy数组
    numpy_array = tensor.float().cpu().numpy()

2:利用numpy对ctypes的支持直接转换指针类型,速度很快
    c_array = numpy_array.ctypes.data_as(ctypes.POINTER(ctypes.c_float))

 完整代码

def sh_fp16_to_fp8_v2(tensor, ebias):
    import ctypes
    from ctypes import cdll

    # # 加载库文件
    fp8_v2_func = cdll.LoadLibrary('/home/liuzhiwen/Desktop/fp8_v2.so')

    # 定义C函数的参数和返回类型
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lookaroundd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值