CUDA,设备,表达式必须具有整数或枚举类型

时间:2018-07-23 13:11:24

标签: c++ casting cuda

if语句中的targets的两个赋值引发以下错误。

error: expression must have integral or enum type

操作中的所有变量都是或返回如此声明的浮点值。但是,它不喜欢转换为整数。为什么是这样?不同类型的浮点数或整数之间有区别吗?

__global__
void generateTargets(int* targets, int targetAmount, float radius, float angleStep){
   float i = blockIdx.x;
   if(i < targetAmount){ // Ensure it stays in range
       // Access the 1d array representation of the 2d array [MAX_TARGETS][2]
       targets[i + MAX_TARGETS*0] = __float2int_rd(radius*__cosf(i*angleStep)); // X value
       targets[i + MAX_TARGETS*1] = __float2int_rd(radius*__sinf(i*angleStep)); // Y value
   }
}

1 个答案:

答案 0 :(得分:4)

targets[i + MAX_TARGETS*0]targets[i + MAX_TARGETS*1]中,您使用的是i的{​​{1}}。这样整个表达式来计算数组索引为float。您不能执行此操作,因为数组索引必须是整数类型(没有元素4.5)。

如果要保留floati,则需要将其强制转换/转换为“整数类型”,或者将表达式的结果强制转换/转换为整数类型。