CUDA_ERROR_UNKNOWN当使用代替双精度浮点数

2视图(30天)
你好,
我有一个相同的.cu文件,一个我使用变量定义为浮动,另一个在我使用变量定义为两倍。
双精度的作品完美时呼吁由内核,而版本不浮动。我得到一个错误,当我收集()的输出变量:
Errror使用gpuArray /收集
一个意想不到的CUDA执行过程中发生错误。CUDA的错误是:CUDA_ERROR_UNKNOWN
从文档,看来函数宏指令()函数将自动输入数组转换为正确的类型,然而,我也试过单独每一个输入/输出数组转换为浮动使用单(),但我得到一个类似的错误。
这是格式:
__global__无效SoA SegForceNBodyCUDA(双const *,
常量的、双constμ、双constν,
intconst年代,
* f0x、双* f0y、双* f0z,
* f1x、双* f1y、双* f1z);
__global__无效SoA SegForceNBodyCUDA(浮点常量*,
浮动常量的、浮点数constμ、浮点数constν,
intconst年代,
浮动* f0x、浮点数* f0y、浮点数* f0z,
浮动* f1x、浮点数* f1y、浮点数* f1z);
两个.cu文件正确编译没有错误/警告。
请建议。
谢谢你!
弗朗西斯科
5个评论
弗朗西斯科
弗朗西斯科 2013年9月20日
嗨,本,
谢谢你的回复。
事实是,我直接修改原来的双精度代码,只需将变量声明为“浮动”而不是“替身”。我没有做任何变化的算法。我不分配任何内核中的内存文件,所以我不确定为什么它崩溃。
文件很长,大约1000行代码,分为几个功能,所以对我来说很难削减到最小的工作的例子。
我可以寄给你,看看你可以复制错误,同时也寻找自己的错误。
谢谢你!
亲切的问候,
弗朗西斯科

登录置评。

接受的答案

本Tordoff
本Tordoff 2013年9月25日
谢谢你发送的代码。
我做了一些初步调查,它看起来像你有一个非法内存访问的地方。这就是cuda-memcheck报告:
运行CUDA单精度,优化
警告:Cuda API错误检测:cuModuleGetGlobal_v2返回(0 x1f4)
警告:Cuda API错误检测:cuModuleGetGlobal_v2返回(0 x1f4)
(102年推出CUDA内核(SegForceNBodyCUDA < < <(4 1 1),(256年,1,1)> > >)在设备0]
Memcheck检测到非法访问地址(@local) 0 xfff830
程序接收信号CUDA_EXCEPTION_1,弄非法的地址。
[焦点切换到内核CUDA 102网格103块(0,0,0),线程(5 0 0),设备0,sm 12,经2巷5]
0 x0000000010052d98SegForceNBodyCUDA (const *浮动,浮动,浮动,浮动,int,浮动,浮动,浮动,浮动,浮动,浮动*)()
我不能看到任何明显错误的内核,但相当多的代码。最有可能的元凶是读/写过去的输入/输出数组的结束。然而,这一事实非法内存地址包括“@local”可能表明问题在内部数据是如何被传递到内核(即在线程本地内存)。我不认为有任何问题的方式正在由MATLAB调用内核。
好运调试——这些类型的问题可以棘手的孤立。

更多的答案(0)

类别

找到更多的在GPU计算帮助中心文件交换

标签

下载188bet金宝搏

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!