西瓜奶蛋 2024-01-20 11:52 采纳率: 16.7%
浏览 34
已结题

at::Tensor.data怎么提取half类型的变量?

我要用pybind编译C++的混合编程实现cuda并行计算,python端采用了pytorch的变量来声明half类型,在cuda c端用at::Tensor的pytorch拓展接口接收变量并提取变量数据,再向gpu核函数传参,但是编译会报错,报错内容应该是没有half类型的结构?那我应该将half类型替换成什么才能够正确编译呢?

主要是以下程序
result = torch::zeros({row_len, RANK}, torch::device(torch::kCUDA).dtype(torch::kFloat32));
Cuda_Kernel_half<<<grid_COO, block_COO>>>(result.data<**_half_**>());

核函数的接收形参与C端调用的实参类型一致都是half,然后报错。这个核函数中half类型要替换成什么类型才能够正确转型并识别呢?

报错内容:
error LNK2019: "public: struct __half * __cdecl at::TensorBase::data_ptr(void)const " (??$data_ptr@U__half@@@TensorBase@at@@QEBAPEAU__half@@XZ) "public: struct __half * __cdecl at::Tensor::data(void)const " (??$data@U__half@@@Tensor@at@@QEBAPEAU__half@@XZ)

另:float数组为什么通过reinterpret_cast转型为half数组后,在遍历转型后的half数组并__half2float时会与原数组值不相同呢?我试了1位小数都不行

  • 写回答

17条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-01-20 11:53
    关注
    获得0.60元问题酬金

    引自免费微信小程序:皆我百晓生

    根据你的代码和问题描述,我理解你的目标是将PyTorch中的Half类型的变量传递给C++的CUDA核函数。根据你提供的报错信息,问题可能出在对Half类型的处理上。

    1. 如何提取Half类型的数据

    在PyTorch中,Half类型可以通过Tensor的data_ptr()方法来获取。你可以使用C++的指针来接收Half类型的数据。具体代码如下所示:

    const at::Half* data_ptr = tensor.data_ptr<at::Half>();
    

    这将返回一个Half类型的指针,你可以在CUDA核函数中使用。

    2. 在CUDA核函数中处理Half类型

    CUDA核函数无法直接处理Half类型的数据,你需要将Half类型转换为其他类型。以下是一种选择:

    __global__ void Cuda_Kernel_half(__half* data) {
        // 将Half类型转换为float类型
        float value = __half2float(*data);
    
        // 继续处理其他代码逻辑
    }
    

    此处使用__half2float()函数将Half类型的数据转换为float类型。你可以根据需要选择其他数据类型,如double。

    总结

    为了解决你的问题,你需要按照上述步骤在C++的CUDA核函数中处理Half类型的数据。提取Half类型的数据后,将其转换为其他类型以便在核函数中使用。这样,你应该能够成功编译并运行你的代码。

    希望这能解决你的问题!如果你还有其他疑问,请随时提问。

    评论

报告相同问题?

问题事件

  • 系统已结题 1月28日
  • 修改了问题 1月22日
  • 创建了问题 1月20日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见