推力包含扫描在调试构建中完成,但在发布构建中失败
Posted
技术标签:
【中文标题】推力包含扫描在调试构建中完成,但在发布构建中失败【英文标题】:thrust inclusive scan completes in debug build but fails in release build 【发布时间】:2013-08-09 09:52:10 【问题描述】:我在设备向量上使用简单的推力::包含扫描调用。在调试版本中,这将毫无错误地执行。但是,使用发布版本执行时会遇到错误。
另外,这似乎只影响推力::device 向量?
在抛出一个实例后调用终止 'thrust::system::system_error' what(): 未指定的启动失败
我正在使用 eclipse nsight 来执行调试和发布版本。
#include <iostream>
using namespace std;
#include <thrust/scan.h>
#include <thrust/device_vector.h>
int main(void)
cout << "hello\n";
int data[6] = 1, 0, 2, 2, 1, 3;
thrust::inclusive_scan(data, data + 6, data); // in-place scan
for(int i=0;i<6;i++) cout<< data[i] << "\n";
cout << "inclusive scan on a device vector\n";
thrust::device_vector<int> d_C_0(6);
d_C_0[0] = 1;
d_C_0[1] = 0;
d_C_0[2] = 2;
d_C_0[3] = 2;
d_C_0[4] = 1;
d_C_0[5] = 3;
thrust::inclusive_scan(d_C_0.begin(), d_C_0.begin() + 6, d_C_0.begin()); // in-place scan
for(int i=0;i<6;i++) cout<< d_C_0[i] << "\n";
return 0;
【问题讨论】:
【参考方案1】:我的猜测是它在 debug 案例中失败,但在 release 案例中通过了。
对于调试版本,Nsight EE 通常包含 -G
编译器开关。
推力(设备代码)是often incompatible,带有-G
开关。
如果您从编译命令中删除-G
开关,我相信您的代码会正常运行——对我来说确实如此。
如果这不能解决问题,请提供 Nsight EE 针对每种情况(调试和发布)使用的完整编译命令行以及您在哪个 GPU 上运行,以及CUDA 版本(5.0 或 5.5)。
【讨论】:
您的猜测完全正确。谢谢你。 CUDA 5.5 在 GeForce 8800 GTX 和 Linux SUSE 64 位上运行。以上是关于推力包含扫描在调试构建中完成,但在发布构建中失败的主要内容,如果未能解决你的问题,请参考以下文章