c++ - 在 CUDA 中有这样的可能吗

标签 c++ c cuda counter

比方说,我有一个值为 0 或 1 的矩阵。在 CUDA 中可以这样做:

__global__ void kernel(float *matrix, float *count)
{
    int row = blockIdx.y * blockDim.y + threadIdx.y;
    int column = blockIdx.x * blockDim.x + threadIdx.x;

    if (row >= MATRIXSIZE || column >= MATRIXSIZE)
    {
        return;
    }

    if (matrix[MATRIXSIZE * row + column] == 1)
    {
        count[0]++;
    }
}

所以我最终在矩阵中得到了 ne 个 1。我知道,这是一个非常简单的示例,但如果可能的话,其他变体也是如此......

最佳答案

有针对 CUDA 的高度优化库可以执行这些类型的操作,称为缩减。查看 CUDA Thrust 或 CUB。在 Thrust 中,您可以使用 reduce 来汇总所有值或使用 count 来计算特定值的实例数。

关于c++ - 在 CUDA 中有这样的可能吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22539310/

相关文章:

c - 为什么 *words[] 不等于 **words?

linux - CUDA 脚本执行后 GPU 内存未自行释放

c++ - 确定用于图像处理的 CUDA 线程和 block

ffmpeg 编译因 cuda 失败,找不到 libnpp

c++ - OpenCV c++ HoughLines 转换不起作用

c++ - 如何修复具有不同签名的重载函数

c++ - 将交互式控制台附加到嵌入式 python 脚本

将 _mm_clmulepi64_si128 转换为 vmull_{high}_p64

c - linux内核中的时间戳错误?

c++ - 如何用 Qt 插入空值?