我可以通过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