在Mac OS X上使用CUDA 5.5时出现内核失败错误
Kernel failed error while using CUDA 5.5 on Mac OS X
我正在编写一个CUDA光线跟踪器,似乎遇到了一个奇怪的问题。我在Mac OS X上使用CUDA 5.5和GCC4.2.1,并使用GLM 0.9.4.4。每当我调用raycastFromCameraKernel函数时,我都会收到以下错误:
Cuda错误:内核失败!:操作系统调用失败或此操作系统不支持操作。
经过一些调试,我想我已经将问题缩小到glm::normalize(temp)
函数。如果我通过编写自己的normalize函数来代替它,那么代码运行良好。有趣的是,当我使用glm::normalize编写一个示例程序以查看它是否工作时,它编译并运行正常!
以下是出现问题的函数的代码:
__host__ __device__ ray raycastFromCameraKernel(glm::vec2 resolution, float time, int x, int y, glm::vec3 eye, glm::vec3 view, glm::vec3 up, glm::vec2 fov)
{
glm::vec3 eyePoint = eye;
glm::vec3 V = up;
glm::vec3 W = view;
glm::vec3 U = glm::cross(V,W); // Perter Sherley page 74 (Creating orthonormal vectors)
float fovY = fov.y;
//d is the near clip plane
float distance = (resolution.y / 2.0f) / tan(fovY);
float left = -resolution.x/2;
float right = resolution.x/2;
float top = resolution.y/2;
float bottom = -resolution.y/2;
float u = left + (right - left)*(x + 0.5)/resolution.x;
float v = bottom + (top - bottom)*(y + 0.5)/resolution.y;
ray r;
r.origin = eyePoint;
glm::vec3 temp = -1*distance*W + u*U + v*V;
r.direction = glm::normalize(temp);
return r;
}
有人能帮忙吗?
所以问题是,对于距离、u和V的特定值,由于温度值非常小(接近零),我出现了被零除的错误,这导致了glm::normalize中的被零除错误。我通过在标准化温度之前检查温度的值来解决这个问题,并且只有在温度高于给定阈值时才进行标准化。这解决了问题。
相关文章:
- 当我尝试加载内核模块时,如何修复C++中的这个 malloc() 错误?
- OpenCL 在 NVIDIA 和 Intel GPU 上启动内核时CL_INVALID_COMMAND_QUEUE
- 当 2 个线程共享同一物理内核时,具有错误共享的易失性增量在发布中的运行速度比在调试中慢
- 当相机接近模型时,SSAO样本内核会导致性能下降?
- 设置内核参数时使用CL_INVALID_ARG_SIZE
- 使用SCH_CRED_FORMAT_CERT_HASH时,AcquireCredentialsHandle在内核模式下失
- 编写内核配置时"Not a directory"
- 内核.cpp在制作 kernel.o 时显示错误和 Makefile 错误
- CUDA 内核在第二次运行时运行得更快 - 为什么?
- 在 C/C++ 中确定编译时的内核数
- 降低CUDA内核运行时:内核中矩阵的动态内存分配
- 调用共享C++函数时 Python 内核崩溃
- 执行 CUDA 内核时黑屏C++输出正确的结果
- Mvapich在内核运行时在CUDA内存上僵局
- 使用 __builtin_expect() 或 Linux 内核时可能和不太可能时"very likely"多少
- 当运行的线程数超过内核数时,CUDA性能会得到提高
- 为什么调用 CUDA 内核函数时这个类成员变量没有改变
- FFT 2D 内核运行时 =0 在 OpenCL 中
- 构建 OpenCL 内核时"Compile Server Error."
- 尝试在64位数据类型上运行简单模板内核时,cudaErrorLaunchFailure