CUDA:反对角矩阵并行性

时间:2012-12-08 23:49:57

标签: matrix cuda gpu

如何跨越矩阵的反对角线并同时计算反对角元素?

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

1 个答案:

答案 0 :(得分: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; 
    }
}