0

我想用 cuda 创建上三角矩阵

在上三角矩阵中,位于对角线下方的元素 ed 为零。此函数应将给定值分配给其他元素。

但下面的代码将所有值分配为 0 为什么?

__global__ void initUpperTrinagleGPU(int *devMatrix, int numR, int numC, int value) {
    int x = blockDim.x*blockIdx.x + threadIdx.x;
    int y = blockDim.y*blockIdx.y + threadIdx.y;

    int offset = y * numC + x;

    if(numC <= numR) {
        devMatrix[offset] = 0;
    }
    else
        devMatrix[offset] = value;
}
4

1 回答 1

1

这种情况是错误if(numC <= numR)的,如果列数少于或等于行数,则为真。

这可能有效,但它只是在我的脑海中,未经测试:

if(x >= y) {
    devMatrix[offset] = 0;
}
else {
    devMatrix[offset] = value;
}

请注意,您应该将其包装到另一个条件中,例如:

if(y < numR && x < numC) { ...
于 2013-04-14T12:28:23.210 回答