如何在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;