用cuda生成redheffer矩阵
我有一项任务要求我使用Cuda在GPU上生成Redheffer矩阵用cuda生成redheffer矩阵,cuda,gpu,Cuda,Gpu,我有一项任务要求我使用Cuda在GPU上生成Redheffer矩阵 A Redheffer matrix1 is a matrix where each entry a[i][j] is defined by a[i][j] = 1 if j = 1, 1 if j is divisible by i 0 otherwise. 这是我的密码 #define SIZE = 20000 #define BLOCK_WIDTH 16 /* Launch th
A Redheffer matrix1 is a matrix where each entry a[i][j] is defined by
a[i][j] =
1 if j = 1,
1 if j is divisible by i
0 otherwise.
这是我的密码
#define SIZE = 20000
#define BLOCK_WIDTH 16
/* Launch the CUDA kernel */
int numBlocks = ceil(SIZE / BLOCK_WIDTH);
dim3 dimGrid(BLOCK_WIDTH,BLOCK_WIDTH,1);
dim3 dimBlock(numBlocks,numBlocks,1);
redhefferMatrix<<<dimGrid, dimBlock>>>(d_M, SIZE);
我计算值的逻辑是
int Row= blockIdx.y*blockDim.y + threadIdx.y;
int Col= blockIdx.x*blockDim.x + threadIdx.x;
.
.
if(i < 20000 && j < 20000)
{
{
if(j == 1 || j % i == 0)
d_M[i*SIZE+ j] = 1;
else
d_M[i*SIZE+ j] = 0;
}
}
int Row=blockIdx.y*blockDim.y+threadIdx.y;
int Col=blockIdx.x*blockDim.x+threadIdx.x;
.
.
如果(i<20000和&j<20000)
{
{
如果(j==1 | | j%i==0)
d_M[i*SIZE+j]=1;
其他的
d_M[i*SIZE+j]=0;
}
}
有人能告诉我哪里可能是错的吗。提前感谢。由于您尚未提供完整的代码,因此无法确定可能存在的所有问题。但您对块和轴网尺寸有误解(将其颠倒): 同样,我不能说这是唯一的问题,因为您还没有展示一个我可以实际测试的完整代码(对于这样的问题也是如此) 如果您进行了上述更改,但事情仍然不起作用,我建议您:
cuda memcheck
运行代码cuda memcheck
输出和错误检查在这里请求调试帮助之前,您应该完成以上两件事。因为您没有提供完整的代码,所以无法确定可能存在的所有问题。但您对块和轴网尺寸有误解(将其颠倒): 同样,我不能说这是唯一的问题,因为您还没有展示一个我可以实际测试的完整代码(对于这样的问题也是如此) 如果您进行了上述更改,但事情仍然不起作用,我建议您:
cuda memcheck
运行代码cuda memcheck
输出和错误检查在这里请求调试帮助之前,您应该完成以上两件事。谢谢您的解释。这很有帮助,谢谢你的解释。这有帮助。
int Row= blockIdx.y*blockDim.y + threadIdx.y;
int Col= blockIdx.x*blockDim.x + threadIdx.x;
.
.
if(i < 20000 && j < 20000)
{
{
if(j == 1 || j % i == 0)
d_M[i*SIZE+ j] = 1;
else
d_M[i*SIZE+ j] = 0;
}
}
#define SIZE = 20000
#define BLOCK_WIDTH 16
/* Launch the CUDA kernel */
int numBlocks = ceil(SIZE / BLOCK_WIDTH);
dim3 dimGrid(BLOCK_WIDTH,BLOCK_WIDTH,1);
dim3 dimBlock(numBlocks,numBlocks,1);
redhefferMatrix<<<dimGrid, dimBlock>>>(d_M, SIZE);
dim3 dimBlock(BLOCK_WIDTH,BLOCK_WIDTH,1);
dim3 dimGrid(numBlocks,numBlocks,1);