我的任務是使用CUDA實現圖像重建算法代碼。我爲C提供了相同的代碼。輸入到代碼是一個DAT文件,它包含大小爲360倍的圖像640×480.The碼是這樣的:CUDA中的圖像序列處理
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中的內循環。我如何將線索引給循環內的指針操作。我試過
但是這會在輸出指針中給出錯誤的值。大部分是NAN。除了上面代碼片段中顯示的指針行外,我能夠成功實現其他數學運算。
任何人都可以請幫我這麼做嗎?我在這段代碼中做錯了什麼? 也有可能在這裏並行化所有for循環?
我看不出有人能告訴你你在做什麼錯在這段代碼中。你所顯示的代碼,即'i'和'j'的賦值,以及(不完整的)內核調用都是微不足道的,並不代表你正在做什麼。 –
@RobertCrovella:我想我已經發現我做錯了什麼。 cudaMalloc給float數組賦予了隨機值。這是造成問題的原因。你可以幫助我如何初始化cudaMalloc之後的浮點數組。我檢查了這個答案[鏈接](http://stackoverflow.com/questions/10589925/initialize-device-array-in-cuda)。但是這只是爲了我猜。你能告訴如何初始化float數組爲零。 – Dhivya