如何跨越矩阵的反对角线并同时计算反对角元素?
如何在CUDA中循环反对角线的元素?
答案 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;
}
}