推力包含扫描在调试构建中完成,但在发布构建中失败

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 位上运行。

以上是关于推力包含扫描在调试构建中完成,但在发布构建中失败的主要内容,如果未能解决你的问题,请参考以下文章

TFS 单元测试在开发机器上通过但在构建机器上失败

React 构建在本地运行,但在 Amplify 上失败

您如何构建示例 CUDA 推力设备排序?

使用发布 CRT 在调试中构建应用程序,但在 boost 上存在依赖问题

在发布(dexguard)上构建但在调试中没有出现致命异常

在“发布”构建配置中看不到在桥接头中导入的头,但在“调试”构建配置中可见