2012-05-10 45 views
1

我遇到的問題是編寫的代碼,使Matlab的GPU編程的內置功能將正確劃分數據並行執行。具體來說,我將N'粒子'圖像發送到GPU的內存,以三維陣列的形式組織,第三維表示每個圖像,並嘗試將每個N圖像與代表目標的單個圖像進行比較,在GPU內存中。圖像互相關與Matlab GPGPU,索引到3D數組

我當前實現,真正或多或少,我想怎麼看的實施,是用一行代碼:

particle_ifft = ifft2(particle_fft.*target_fft); 

注意這是採取每個上傳的圖片中的FFT之後。這裏存在索引問題:這個語句需要使用'。*'運算符的相同大小的「particle_fft」和「target_fft」矩陣。爲了與每個粒子圖像進行比較,在內存使用方面存在多個相同目標圖像的副本將是低效的。我使用這種低效率的方法獲得了良好的性能結果,但它顯着影響了我可以上傳到GPU的粒子圖像的數量。

有沒有一種方法可以告訴matlab將粒子圖像3d數組(每個圖像)的每個2D元素與只有單個目標圖像進行比較?

我曾嘗試使用for循環索引到3d數組中,並單獨訪問每個粒子圖像以與單個目標進行比較,但Matlab並未在GPU上並行執行此類操作,即它運行近1000倍比使用內存低效目標陣列的等效代碼慢。

我意識到我可以編寫自己的內核來解決這個索引問題,但我很想找到一種方法來利用matlab的現有功能(特別是不重寫fft2和ifft2函數)。想法?

回答