2

行列の反対角を交差させ、同時に反対角要素を計算するにはどうすればよいですか?

CUDAで反対角要素をループするにはどうすればよいですか?

4

1 に答える 1

1

左下隅から右上隅に向かう最大の対角線をループする方法について言及している場合、その方法の 1 つは、反対角線を配列に変換することです。CPU から GPU にデータをコピーする前に、この対角線の下で GPU 内で何らかの計算を実行する必要があるため、次のことができます。

double diagonal [N];

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

次に、行列全体ではなく、サイズ N の配列対角線 (サイズ N^2 の 1 つの行列) を 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 に答える