2013-07-27 42 views
0

我有一個嚴重依賴卷積的代碼。它負責超過80%的時間運行時間。 我要使用GPU,使其更快,但也有一些事情,我不完全理解,(我沒有獲得尚未測試這對我自己)在GPU上存儲數據並在MATLAB中並行化卷積

  1. 如果我在類的構造函數中傳遞信息(從句柄繼承)存儲在GPU內存中(使用gpuArray),它會保留在那裏嗎?我有問題將類作爲參數傳遞給函數嗎? 對數據本身進行的操作都可以在GPU上進行(和我猜循環上的一組作品一樣好無論身在何處陣列存儲)

  2. 我有一個矩陣size(MyMat)=[s, s, b, n],其中我想存儲n個不同的大小爲[s, s, b]的矩陣(同時可以在GPU上完成的操作) 我必須使用parfor嗎? (我知道在大多數情況下開銷會讓它成爲一個糟糕的主意),還是讓GPU更快地完成這個任務還有更快的方法嗎?我需要在這種情況下進行的唯一計算是卷積(但不能在一個單一的CONVN操作來完成)

謝謝!

+0

不完全是你問的,但你有沒有考慮過使用fftfilt?這是在FFT算法的幫助下使用重疊加法的卷積,可以比直接卷積快得多。順便說一句:這可能也可以在GPU上運行。 –

+0

我問了另一個問題,這可能是一個答案。但是那裏的一位評論員測試了FFT卷積,並表示它對於我正在使用的矩陣大小較慢。 – user1999728

回答

0

1)只需像使用其他任何變量一樣使用gpuArray即可。很可能您的代碼不需要修改,否則您會收到一個異常指出您的問題。

2)gpuArray和parfor的組合是在多個gpus上並行化gpu計算的典型方法?你有多個gpus?如果是,請嘗試parfor,如果不是,它可能會變慢,因爲只有一個工作人員可以使用gpu,而其他所有人都必須等待。