gpt4 book ai didi

c++ - ptxas "double is not supported"在结构数组上使用 thrust::sort 时发出警告

转载 作者:行者123 更新时间:2023-11-28 07:07:40 27 4
gpt4 key购买 nike

我正在尝试使用 thrust::sort 在我的 GPU 上对结构数组进行排序。但是,当我使用 nvcc 编译时,我收到此警告:

ptxas/tmp/tmpxft_00005186_00000000-5_antsim.ptx,第 1520 行;警告:不支持 double 。降级为 float

我已将问题与对 thrust::sort 的调用隔离开来:

thrust::sort(thrustAnts, thrustAnts + NUM_ANTS, antSortByX());

thrustAnts 是位于 GPU 上的 Ant 结构数组,而 antSortByX 是定义如下的仿函数:

typedef struct {
float posX;
float posY;
float direction;
float speed;
u_char life;
u_char carrying;
curandState rngState;
} Ant;

struct antSortByX {
__host__ __device__ bool operator()(Ant &antOne, Ant &antTwo) {
return antOne.posX < antTwo.posX;
}
};

在我看来好像这里没有任何 double ,尽管我怀疑我的仿函数中的小于运算符将这些 float 评估为 double 。我可以通过使用 -arch sm_13 进行编译来解决这个问题,但我很好奇为什么这首先是在提示我。

最佳答案

发生降级是因为 CUDA 设备最初支持 double 计算,计算能力为 1.3。对于 CC < 1.3 的设备,NVCC 知道规范并将每个 double 降级为 float ,只是因为硬件无法处理 double 。

可以在维基百科上找到一个很好的功能列表:CUDA

您在这段代码中看不到任何 double 并不意味着它们不存在。此错误最常见的原因是浮点常量上缺少 f 后缀。当一个 double 是表达式的一部分时,编译器执行从所有 float 到 double 的隐式转换。没有 f 的浮点常量是 double 值,转换开始。但是,对于 less 运算符,不应该发生没有常量表达式的转换。

我只能推测,但在我看来,在您的情况下,可以在 thrust::sort 实现中使用 double 值。由于您仅向高阶函数(以函数作为参数的函数)提供用户函数。

关于c++ - ptxas "double is not supported"在结构数组上使用 thrust::sort 时发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21520757/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com