如何在cuda的内核函数中进行"or"操作?
How to do "or" operation in kernel function in cuda?
我正在尝试使用 cuda 查找数组中是否有任何非零元素。但是我的代码总是给我 true
作为输出,即使我将所有零元素作为输入。看来我以错误的方式使用 ||
运算符。你能帮帮我吗?
a0
是具有 16 个元素的输入 bool 数组。
r0
是包含 4 个元素的输出。 (它总是给出 1*4)
Nc
是 4.
__global__ void boolTarget(int N, int Nc, bool * a0, bool* r0)
{
int idx = threadIdx.x + blockIdx.x * blockDim.x;
while(idx<Nc)
{
bool * base = a0+idx*4;
bool tmp;
for(int i = 0;i<N;i++)
{
tmp = (*(base+i) || tmp);
}
r0[idx] = tmp;
idx += blockDim.x*gridDim.x;
}
}
or
运算符是||
,所以这是对的。
无论如何,你必须将 tmp
初始化为 false:
bool tmp = false;
我正在尝试使用 cuda 查找数组中是否有任何非零元素。但是我的代码总是给我 true
作为输出,即使我将所有零元素作为输入。看来我以错误的方式使用 ||
运算符。你能帮帮我吗?
a0
是具有 16 个元素的输入 bool 数组。
r0
是包含 4 个元素的输出。 (它总是给出 1*4)
Nc
是 4.
__global__ void boolTarget(int N, int Nc, bool * a0, bool* r0)
{
int idx = threadIdx.x + blockIdx.x * blockDim.x;
while(idx<Nc)
{
bool * base = a0+idx*4;
bool tmp;
for(int i = 0;i<N;i++)
{
tmp = (*(base+i) || tmp);
}
r0[idx] = tmp;
idx += blockDim.x*gridDim.x;
}
}
or
运算符是||
,所以这是对的。
无论如何,你必须将 tmp
初始化为 false:
bool tmp = false;