2011-11-26 87 views
1

在將二維數組從CPU轉換到GPU的內存以在GPU上運行時,我面臨Matlab的內置函數(如minmax(array))中的多個錯誤,指出我的GPU變量不是數組或單元格:使用MATLAB的函數與CUDA GPU變量

???錯誤使用==> minmax at 27數據不是矩陣或單元格數組。

雖然傳遞的變量是一個轉換後的二維數組,但類型從<11x4096 double>更改爲<11x4096 parallel.gpu.GPUArray>

任何人都可以幫助我讓Matlab理解GPU變量是一個數組嗎?

謝謝大家。

+0

如果您切換到夾克,您將能夠運行minmax。外套是更好的反正:http://accelereyes.com/compare – arrayfire

回答

1

GPU上存儲的數組(即GPUArray類型的數組)只支持一小部分MATLAB命令。

請參閱Parallel Computing Toolbox的this documentation page以瞭解支持哪些功能的詳細信息。您會注意到該列表僅包含基本MATLAB的函數,如算術,指數和三角函數,線性代數和傅立葉變換;與Neural Network Toolbox的高級工具箱功能minmax沒有任何關係。

爲GPUArray輸入重載一個函數,以便它在GPU上而不是CPU上執行,這是一項重要的工作,涉及重新實現新的高度並行體系結構的算法。另外,只有某些類型的高度並行算法通常會受益於GPU並行性。因此,我不希望MathWorks在不久的將來能夠在神經網絡工具箱中提供GPUArray支持。

如果你特別需要並行minmax在GPU上,而不是在一般的神經網絡,它不會那麼難做到這一點吧 - 也許只是一對夫婦涉及minmaxarrayfun線。

話雖如此,錯誤消息可以提供更多的問題的解釋。看起來開發人員也知道這一點:如果您輸入edit nntype.data並查看第93行(錯誤消息來自哪裏),則會看到註釋行% TODO - More detailed response。太好了!

+0

非常感謝,我已經在另一種方式執行minmax在GPU上執行,但minmax是許多錯誤的開始嘗試運行自組織映射(SOM)來自MATLAB的GPU。兩者都造成同樣的錯誤,所以我想如果我能得到一個答案,那麼其餘的將是相同的。 –

+0

太棒了 - 很高興它似乎有所幫助。如果你認爲答案是正確的,那麼你可以通過點擊投票按鈕上的刻度標記來將它標記爲已接受嗎?這有助於他人找到答案。 –