2011-05-06 51 views

回答

6

MATLAB Coder將生成mex文件的C代碼。我還沒有一個副本要評估,因此我無法與任何權威人士談論生成的代碼的質量和性質。但是,如果我不得不猜測,我會說生成的代碼可能需要大量按摩才能使其在GPU上工作。根據你在做什麼,你可能會更喜歡Jacket這樣的產品。

+0

+1了這一點。生成C代碼是一回事;另一件事情就是生成一個有用的CUDA內核。 CUDA內核中有用的約束與通用CPU上可以運行的內容大不相同。 – 2011-05-06 15:57:39

+0

OKay謝謝,但不幸的是,我不能得到一個試用版作爲學生嘗試,如果這將很好地支持我的GPU內核:( – tim 2011-05-06 21:30:46

1

您可以使用this函數調用從C/fortran調用matlab(m或mex)函數。然後,您可以將其與CUDA內核一起連接。

但是,它可能不是最有效的方式。你可以爲自己的m文件編寫你自己的C代碼,或者如果其他任何人做了它,可以在matlab中央查找它。

+0

我已經知道,但據我瞭解,迄今爲止,功能將比跑在CPU上而不是GPU上,因爲matlab運行在CPU上 – tim 2011-05-06 19:06:40

+0

然後我不明白你在問什麼,你更喜歡這個嗎? – 2011-05-06 19:30:19

+0

我想在調用我的mex函數時傳遞一個函數句柄。函數句柄應該在GPU上(即在內核函數中)對數千個不同的參數進行評估,這就是我想要的並行化!當我使用mexCallMATLAB調用matlab函數'feval'來評估C代碼中的函數句柄時,它將評估CPU上的函數句柄而不是GPU上的函數句柄,因此並行化是毫無意義的。 – tim 2011-05-06 21:29:46

1

C函數將調用最終設置的設備變量並調用CUDA內核?

我原本想試試這個項目,因爲我認爲這個方法比先把所有的MATLAB代碼轉換成C都容易,但我最終還是這樣做了。

有一些用戶創建了MATLAB腳本來幫助提供此功能,但由於它們不是來自Mathworks,所以您必須自行承擔使用它們的風險。我嘗試了他們,從未發現任何惡意,但你永遠不知道。由於其具體的複雜性,我無法讓他們與我的項目一起工作,但它應該適用於更簡單的任務。

1)NvMEX:這是直接來自Nvidia。 http://developer.stage.nvidia.com/matlab-cuda http://www.mathworks.com/discovery/matlab-gpu.html

2)CUDA MEX:這是從一個用戶。 http://www.mathworks.com/matlabcentral/fileexchange/25314-cuda-mex

+0

OKay謝謝,我現在來看看這些鏈接。我寧願不必直接將代碼寫入C語言。不是因爲它對我而言太多工作,而是對於用戶而言。我想將mex-file ONCE編譯成用戶友好的函數,以便用戶可以輕鬆地調用他想要的每個matlab函數手柄上的函數!編輯:你發佈的兩個鏈接不直接屬於問題。關於如何編譯mex文件(包括CUDA)的正義狀態(所以這是每個cuda-mex應用程序的基礎,與我的問題沒有直接關係;)) – tim 2011-05-08 13:24:35

1

這是不是一個真正的直接回答你的問題,但如果你的目標很簡單,就是對GPU的MATLAB代碼運行,那麼你可能會發現,如果你有機會獲得Parallel Computing Toolbox,您可以使用GPUArraysarrayfun 。例如,如果你想在很多點來評估功能如下:

function y = myFcn(x) 
y = 1; 
for ii = 1:10 
    y = sin(x * y); 
end 

然後,你可以像這樣把這種對GPU:

gx = gpuArray(rand(1000)); 
gy = arrayfun(@myFcn, gx); 
相關問題