比方说,我有一个值为 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/