我要用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位小数都不行