我的任务是使用 CUDA 实现图像重建算法代码。我获得了相同的 C 代码。代码的输入是一个 DAT 文件,其中包含 360 个大小为 640 x 480 的图像。代码如下所示:
FILE *in,*out;
float *i_data,*o_data;
i_data=(float *)malloc(mem_size);
for(int projection=0;projection<360;projection++)
{
in=fopen("filename.dat","rb");
fread(i_data,mem_size,1,in);
... some math ...
for(int slice_no=-240;slice_no<240:slice_no++)
{
for (i=-320;i<320;i++)
for (j=-320;j<320;j++)
{
// do some operations
(*(o_data*slice_no)+(j+320)+(i+240))+=(*(i_data*value)+(j+240)+(i+320));
// some more math
}
}
}
输出浮点指针被写回 dat 文件。如果我必须并行化这些循环,我将如何在 CUDA 中做到这一点?我尝试使用 640 个线程中的每一个 640 个块在 CUDA 中实现内部两个 for 循环。如何将线程索引赋予循环内的指针操作。我试着给
int i=blockIdx.x;
int j=threadIdx.x;
and
kernel<<<640,640>>>
但这在输出指针中给出了错误的值。大多数是南。除了上面代码片段中显示的带有指针的行之外,我能够成功地实现其他数学。
任何人都可以帮我这样做吗?我在这段代码中做错了什么?也可以在这里并行化所有的for循环吗?