在CUDA中,我们可以通过检查cudaMemcpy()、cudaMalloc()等函数的返回类型(即cudaError_t和cudaSuccess )来了解错误。JCuda中是否有任何方法可用于检查cuMemcpyHtoD()、cuMemAlloc()、cuLaunchKernel()等函数的错误。
发布于 2014-08-29 00:18:54
首先,JCuda (应该)的方法与相应的CUDA函数完全一样:它们以int的形式返回错误代码。这些错误代码也定义在..。
与相应的CUDA库中的错误代码相同。
All这些类还有一个名为stringFor(int)的静态方法,例如cudaError#stringFor(int)和CUresult#stringFor(int)。这些方法返回错误代码的可读的String表示形式。
因此,您可以进行手动错误检查,例如:
int error = someCudaFunction();
if (error != 0= {
System.out.println("Error code "+error+": "+cudaError.stringFor(error));
}可能会打印类似的东西
Error code 10: cudaErrorInvalidDevice但是..。
...the错误检查可能是一个麻烦。您可能已经注意到,在CUDA示例中,NVIDIA引入了一些简化错误检查的宏。类似地,我为JCuda添加了可选的异常检查:所有库都提供一个名为setExceptionsEnabled(boolean)的静态方法。打电话时
JCudaDriver.setExceptionsEnabled(true);然后,对驱动程序API的所有后续方法调用将自动检查方法返回值,并在出现任何错误时抛出一个CudaException。
(请注意,对于所有库,此方法分别存在。例如,当使用JCublas.setExceptionsEnabled(true)时调用将是JCublas)
样本通常在main方法的开头启用异常检查。我建议也这样做,至少在开发阶段。一旦程序明确不包含任何错误,就可以禁用异常,但几乎没有理由这样做:它们很方便地提供了有关错误发生的明确信息,而否则调用可能无声地失败。
https://stackoverflow.com/questions/25196510
复制相似问题