嘿那裏, 是否有一種方法來編譯(或更好地說:'翻譯')一個matlab m函數到C函數,以便我可以使用它在我的mex文件的CUDA內核中? 非常感謝!編譯一個matlab m文件到一個可用的C函數
回答
MATLAB Coder將生成mex文件的C代碼。我還沒有一個副本要評估,因此我無法與任何權威人士談論生成的代碼的質量和性質。但是,如果我不得不猜測,我會說生成的代碼可能需要大量按摩才能使其在GPU上工作。根據你在做什麼,你可能會更喜歡Jacket這樣的產品。
您可以使用this函數調用從C/fortran調用matlab(m或mex)函數。然後,您可以將其與CUDA內核一起連接。
但是,它可能不是最有效的方式。你可以爲自己的m文件編寫你自己的C代碼,或者如果其他任何人做了它,可以在matlab中央查找它。
我已經知道,但據我瞭解,迄今爲止,功能將比跑在CPU上而不是GPU上,因爲matlab運行在CPU上 – tim 2011-05-06 19:06:40
然後我不明白你在問什麼,你更喜歡這個嗎? – 2011-05-06 19:30:19
我想在調用我的mex函數時傳遞一個函數句柄。函數句柄應該在GPU上(即在內核函數中)對數千個不同的參數進行評估,這就是我想要的並行化!當我使用mexCallMATLAB調用matlab函數'feval'來評估C代碼中的函數句柄時,它將評估CPU上的函數句柄而不是GPU上的函數句柄,因此並行化是毫無意義的。 – tim 2011-05-06 21:29:46
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
OKay謝謝,我現在來看看這些鏈接。我寧願不必直接將代碼寫入C語言。不是因爲它對我而言太多工作,而是對於用戶而言。我想將mex-file ONCE編譯成用戶友好的函數,以便用戶可以輕鬆地調用他想要的每個matlab函數手柄上的函數!編輯:你發佈的兩個鏈接不直接屬於問題。關於如何編譯mex文件(包括CUDA)的正義狀態(所以這是每個cuda-mex應用程序的基礎,與我的問題沒有直接關係;)) – tim 2011-05-08 13:24:35
這是不是一個真正的直接回答你的問題,但如果你的目標很簡單,就是對GPU的MATLAB代碼運行,那麼你可能會發現,如果你有機會獲得Parallel Computing Toolbox,您可以使用GPUArrays與arrayfun 。例如,如果你想在很多點來評估功能如下:
function y = myFcn(x)
y = 1;
for ii = 1:10
y = sin(x * y);
end
然後,你可以像這樣把這種對GPU:
gx = gpuArray(rand(1000));
gy = arrayfun(@myFcn, gx);
- 1. 在matlab中運行一個在dll中編譯的m文件
- 2. 將一個新的函數.m文件添加到MATLAB永久
- 3. 如何從一個.m matlab文件調用多個函數
- 4. 同一個m文件中的多個函數的問題(Matlab)
- 5. Matlab m文件編譯
- 6. 如何編寫一個編輯另一個MATLAB文件(.m)的MATLAB代碼?
- 7. MATLAB:從另一個M文件調用M文件
- 8. 如何在另一個.m文件中引用一個函數?
- 9. MATLAB如何編譯m文件?
- 10. 如何編寫一個生成m文件的matlab腳本
- 11. 試圖在MatLab中編譯一個C mex文件
- 12. 是否可以將一個音頻文件和我的c#文件一起編譯到一個exe文件中?
- 13. Matlab:引用一組m文件中的函數
- 14. 在一個單獨的函數文件中調用一個函數-matlab
- 15. 如何從一個.M傳遞一個字符串到另一個.m文件
- 16. 編譯一個.ss文件
- 17. 如何將多個Rust文件編譯到一個C庫中?
- 18. 編譯npm包到一個.js文件
- 19. 編譯多個源文件時創建一個C文件
- 20. 編譯3個可執行文件在一個makefile文件
- 21. 從一個m文件傳遞句柄到其他m文件
- 22. 如何用gcc參數運行(並編譯)一個C文件?
- 23. 發送文件指針到另一個函數(C編程)
- 24. 將多個C源文件編譯成一個唯一的目標文件
- 25. 使用Matlab導入另一個.m文件
- 26. 編譯一個批處理文件到一個exe
- 27. 編譯多個Typescript文件到一個JavaScript文件
- 28. 編譯多個.jsx文件到一個.js文件
- 29. 編譯多於一個C文件更進一個單一的非可執行對象文件
- 30. 用C庫編譯一個Go程序到一個獨立的可執行文件
+1了這一點。生成C代碼是一回事;另一件事情就是生成一個有用的CUDA內核。 CUDA內核中有用的約束與通用CPU上可以運行的內容大不相同。 – 2011-05-06 15:57:39
OKay謝謝,但不幸的是,我不能得到一個試用版作爲學生嘗試,如果這將很好地支持我的GPU內核:( – tim 2011-05-06 21:30:46