我可以通過cudaGetLastError()
獲取最後一次CUDA API調用的返回狀態。如何得到它的名字?我沒有看到cudaGetLastAPICallName()
,但是有一些(未記錄)等價物嗎?我可以獲取最後一次調用的CUDA API函數的名稱嗎?
0
A
回答
3
據我所知,不,你不能。重要的是要記住,
cudaGetLastError()
返回較早運行時API調用的狀態,但不一定是最後一個是很重要的。異步調用在返回cudaSuccess
之後可以在操作期間報告錯誤,在這種情況下,它的錯誤將由返回狀態的下一個API函數返回。解析他的結果可能會對流中的併發操作變得特別複雜。- 至少有一個操作(內核啓動自己),它沒有明確的運行時API調用,它可以與任何程序員可見源相關,即使它們在窗簾後面調用一系列文檔化的私有API調用。
這是我不清楚怎麼這兩種情況下可能的方式,將給予有意義的附加信息處理乾淨,尤其是當設備運行時錯誤的一些類可以強行終止活動的背景下,這失去了很多國家的無論如何......
0
不可以。你應該把所有的CUDA調用包裝在一個宏中,這個宏給你的文件名和行號。這樣,你可以很容易地找到罪魁禍首。
下面是一個例子:
template< typename T >
inline void __checkCudaErrors(T result, char const *const func, const char *const file, int const line)
{
cudaError_t err = cudaGetLastError();
if (cudaSuccess != err)
{
fprintf(stderr, "%s:%i : checkCudaErrors() CUDA error (#%d): %s.\n",
file, line, (int)err, cudaGetErrorString(err));
exit(-1);
}
}
#define CCE(val) __checkCudaErrors((val), #val, __FILE__, __LINE__)
// ...
CCE(cudaMalloc(...));
CCE(cuda...);
myKernel...;
CCE(nextCudaCall);
相關問題
- 1. 我可以從CUDA內核函數調用__device__函數嗎?
- 2. 我可以用jQuery contentWindow調用名稱空間函數嗎?
- 3. 我可以使用函數作爲函數的名稱嗎?
- 4. 我可以在f#中通過名稱調用函數嗎?
- 5. JavaScript - 獲取調用函數的名稱
- 6. 我可以獲取名稱空間的元數據嗎?
- 7. ,我可以用一些單詞列出函數名稱嗎?
- 8. 我可以通過表名獲取模型類的名稱嗎?
- 9. 我可以調用一個匿名函數以後
- 10. 我可以調用另一個函數寫入的函數嗎?
- 11. SqlException:我可以獲取數據庫名稱嗎?
- 12. 獲取類名稱函數的名稱
- 13. 我可以獲取iOS UIPasteboard的全部名稱嗎?
- 14. 我可以從PHP獲取文件的簡短DOS名稱嗎?
- 15. 我可以跟蹤Mercurial的最後一次拉動嗎?
- 16. 我們可以使用「this」指針獲取對象名稱嗎
- 17. 如何獲取調用當前函數的函數名稱?
- 18. 獲取最後一次調用的系統調用
- 19. 可通過命令調用的函數獲取調用次數
- 20. 內置函數可以調用時獲取對象的值嗎?
- 21. 我可以存儲函數名稱在最終的hashmap中執行嗎?
- 22. 我可以在第一次讀取文件後獲取StreamReader.EndOfStream以返回false嗎?
- 23. window.location加載新的URL後,可以調用一個函數嗎?
- 24. CUDA內核可以調用cublas函數嗎?
- 25. 我可以調用兩次SparkContext構造函數嗎?
- 26. 只能使用不同名稱的函數可以使用Web api路由嗎?
- 27. C++模板:我可以調用名稱基於輸入類型名稱的函數嗎?
- 28. 我可以使用同名的php函數和javascript函數嗎?
- 29. 我可以傳遞函數名稱作爲參數嗎?
- 30. 我可以從任何Perl模塊動態獲取函數或函數名稱的列表嗎?
好吧,第二種情況下既可以由一個空字符串,或對應於一個內核調用,或者內核連名字一些固定的字符串處理。可以處理第一種情況,以便導致錯誤的API調用將成爲報告的API調用,或者至少可以在同一調用中同時獲得錯誤代碼和API函數名稱。 – einpoklum