0
我正在将2D square matrix
的矢量化表示形式传递给CUDA
设备。我在网上找到了如何在CUDA
设备上用这种格式的两个矩阵进行矩阵乘法。获取CUDA设备中的原始矩阵索引
但是,我现在需要在设备之前获取我的矩阵的原始索引。
这是我的代码传递给我的cuda_kernel
#define MATRIX_SIZE 20
#define BLOCK_SIZE 2
#define TILE_SIZE 2
void cuda_stuff(int sz, double **A)
{
double* A1d = matrix_to_vector(sz, A);
double* d_A
size_t sizeA = sz * sz * sizeof(double);
cudaMalloc(&d_A, sizeA);
cudaMemcpy(d_A, A1d, sizeA, cudaMemcpyHostToDevice);
dim3 threads(BLOCK_SIZE, BLOCK_SIZE);
dim3 grid(MATRIX_SIZE/threads.x, MATRIX_SIZE/threads.y);
cudakernel<<<grid, threads>>>(sz, d_A);
}
这是我cudakernel
__global__ void cudakernel(int sz, double* A_d);
{
int tx = blockIdx.x * TILE_SIZE + threadIdx.x;
int ty = blockIdx.y * TILE_SIZE + threadIdx.y;
/* Need to get original i, j from my matrix double* A */
}
我怎样才能得到原始指数[i] [j]我的矩阵double* A
的?
嗨罗伯特,感谢。你对所有的假设都是正确的,因为它们与我的矩阵一致。我知道如何从A中获得数值。我实际上希望自己得到这些指数。原因是因为我正在2D矢量化矩阵(A)和“三对角矩阵”的压缩表示之间进行矩阵乘法。我将三矩阵表示为三个阵列,每个阵列对应于对角线左侧,对角线右侧的值。这有意义吗? –
也许我不明白。我在回答中添加了一些额外的评论,但我不知道他们是否解决了您的问题,因为我现在还不清楚问题的实质。 –
我很欣赏这一点。我发布了一个新问题,提供了有关我整个问题的更多详细信息。 –