我正在尝试计算cuda中的矩阵行和。因为cuda用于并行处理所以不需要循环。我已完成矩阵求和操作,代码为
__global__ void MatAdd(int A[][N], int B[][N], int C[][N]){
int i = threadIdx.x;
int j = threadIdx.y;
C[i][j] = A[i][j] + B[i][j];
}
但在相同的情况下无法将其转换为矩阵行和。我试过以下代码
__global__ void rowSums(float* matrix, float* sums, int rows, int cols)
{
int row = blockIdx.y * blockDim.y + threadIdx.y;
int col = blockIdx.x * blockDim.x + threadIdx.x;
if (i < N && j < M)
sums[j] += matrix[i][j];
}
答案 0 :(得分:0)
只要矩阵大小足够小(比blockdim x gridDim)
,您的第一个代码示例看起来是正确的对于第二个,你的矩阵需要是一个浮动**,因为你取消引用它两次。 然后你需要使用row和col变量,或者将它们重命名为i和j。