2011-05-12 57 views
7

我目前正在開發一個帶有CUDA功能的mex文件,以便在MATLAB中使用。當我做錯了什麼(例如錯誤的指針或類似的東西)時,MATLAB總是崩潰(windows會提示我結束,發送報告進行數學工作或嘗試繼續)。有沒有辦法來防止這種情況發生?這樣開發真的很煩人,但是你可能知道自己:幾乎沒有人可以在沒有「試錯」的情況下編寫完美的代碼...... 迄今爲止感謝!如何停止使用CUDA功能(錯誤)mex文件執行時Matlab崩潰

回答

3

Matlab MEX file page

MEX -g yourmexfile.c

,如果你不這樣做會了。

+0

這不會使matlab崩潰嗎?以及如何附加調試器?對不起,這是對我來說一些新的東西...... – tim 2011-05-13 09:55:08

+0

@Col當然,Matlab的內存管理器非常脆弱,我創建了非常奇怪的錯誤,但其中許多錯誤會被捕獲,然後從命令行運行Matlab,從調試器,彷彿你在調試Matlab本身 – 2011-05-13 13:19:33

+1

'-g'絕對不能阻止由於mex錯誤導致的Matlab崩潰,我很驚訝這是一個被接受的答案,'-g'確實可以幫助找到這個問題,但建議使用一個調試器似乎幾乎不言而喻。 – patrickvacek 2013-11-22 17:11:48

4

據我所知,沒有辦法阻止Matlab崩潰mex錯誤。但是你可能能夠將一個調試器附加到Matlab過程並逐步完成代碼。

我知道這樣的事實,如果你的代碼是在你加載到Matlab的外部DLL的話。我不確定這是否適用於mex文件。

+0

嗯可惜不是這樣,因爲在開發我還沒有完成的東西時這種情況經常發生:( – tim 2011-05-12 19:55:04

1

您可以通過以下過程調試Matlab mexfiles,包括使用Visual Studio和NVIDIA Nsight for Visual Studio的CUDA代碼。

  1. 定義系統環境變量NSIGHT_CUDA_DEBUGGER並將其設置爲。
  2. 啓動Matlab
  3. 推出NVIDIA Nsight。右鍵單擊任務欄上的Nsight Monitor圖標,然後選擇選項。選擇CUDA選項卡。對於選件將此顯示器用於CUDA附件,單擊下拉菜單並選擇True
  4. 在Visual Studio中打開項目,設置斷點並編譯它。
  5. 前往工具 - >附加到流程
  6. 單擊Transport字段旁邊的下拉菜單,然後選擇Nsight GPU調試器
  7. 確保您的主機名稱已列在限定符字段中。 請注意,該欄位默認爲空白;您將不得不在第一次打開此對話框時手動選擇機器名稱。
  8. 當您在限定符字段中輸入計算機的主機名時,可用進程列表將出現在對話框中。 CUDA使用情況下可能附帶的流程將與「類型」列中列出的CUDA一起顯示。如果某個進程灰顯,並且CUDA列在類型列中,則該列已被調試,因此它不可附着。在CUDA類型列中灰顯的進程表示在調試過程中沒有使用CUDA。可能會附加的進程將正常顯示,並且將啓用按鈕。
  9. 確保MatlabCUDA在Type列中並選擇它。
  10. Matlab命令行,調用在CUDA mexfile中定義的函數。然後執行將停止在第一個斷點處並且可以開始調試。
+0

對我來說有點晚了,但謝謝雖然f或你的答案。希望這有助於他在遇到這個問題時:) – tim 2013-11-22 17:54:49

相關問題