我找不到有关Thrust CUDA模板库中fp16支持的任何信息。即使路线图页面也没有任何内容:https://github.com/thrust/thrust/wiki/Roadmap。
但我认为可能已经有人解决了这个问题,因为CUDA中的fp16支持已经存在超过6个月。
截至今天,我在我的代码中严重依赖于Thrust,并且为了简化fp16集成而几乎用模板化了我使用的每一个类,不幸的是,甚至这个简单的示例代码也无法直接使用。
这段代码无法编译,因为似乎没有从float到half或从half到float的隐式转换。然而,看起来在cuda中有一些内置函数允许进行显式转换,具体可以查看intrinsics。
为什么我不能在cuda的某个头文件中重载half和float构造函数,以添加上述内置函数呢?
但我认为可能已经有人解决了这个问题,因为CUDA中的fp16支持已经存在超过6个月。
截至今天,我在我的代码中严重依赖于Thrust,并且为了简化fp16集成而几乎用模板化了我使用的每一个类,不幸的是,甚至这个简单的示例代码也无法直接使用。
//STL
#include <iostream>
#include <cstdlib>
//Cuda
#include <cuda_runtime_api.h>
#include <thrust/device_vector.h>
#include <thrust/reduce.h>
#include <cuda_fp16.h>
#define T half //work when float is used
int main(int argc, char* argv[])
{
thrust::device_vector<T> a(10,1.0f);
float t = thrust::reduce( a.cbegin(),a.cend(),(float)0);
std::cout<<"test = "<<t<<std::endl;
return EXIT_SUCCESS;
}
这段代码无法编译,因为似乎没有从float到half或从half到float的隐式转换。然而,看起来在cuda中有一些内置函数允许进行显式转换,具体可以查看intrinsics。
为什么我不能在cuda的某个头文件中重载half和float构造函数,以添加上述内置函数呢?
float::float( half a )
{
return __half2float( a ) ;
}
half::half( float a )
{
return __float2half( a ) ;
}
我的问题可能很基础,但我不明白为什么我没有找到太多相关的文档。
提前感谢您的帮助。