2

如何交叉矩阵的对角线并同时计算对角线元素?

如何在 CUDA 中循环对角线的元素?

4

1 回答 1

1

如果您指的是如何循环从左下角到右上角的最大对角线,那么一种方法是将您的对角线变成一个数组。因为,您可能希望在此对角线下方的 GPU 内进行一些计算,在将数据从 CPU 复制到 GPU 之前,您可以执行以下操作:

double diagonal [N];

for(int i = N - 1, j = 0; i >= 0, j < N ; i--, j++)
       diagonal = matrix[i][j];

然后,您只需将大小为 N 的数组对角线(在一个大小为 N^2 的矩阵中)发送到 GPU,而不是整个矩阵。

如果您想将整个矩阵发送到 gpu 并仅对 gpu 内的对角线执行操作,您可以执行以下操作:

__global__ gpuKernell(double **matrix, int N)
{
 int thread_id = blockIdx.x * blockDim.x + threadIdx.x;

    while(thread_id < N)
    {
       matrix[N-1-thread_id][thread_id] = // do something
       thread_id += blockDim.x * gridDim.x; 
    }
} 
于 2012-12-09T03:33:54.387 回答