使用功能:错误访问device_vector构建的值我不明白

时间:2013-12-07 03:51:45

标签: cuda thrust

当我使用函数初始化设备向量时,我有一个奇怪的错误,我不明白。

我想用元素创建一个大小为1000的device_vector: A [i] = i * 0.05;

这是我的代码:(见例:Thrust - Initial device_vector

#include <thrust/device_vector.h>
#include <thrust/functional.h>  
#include <thrust/iterator/counting_iterator.h>
using namespace thrust::placeholders;

int main(void)
{
    thrust::device_vector<float> A(
        thrust::make_transform_iterator(
                thrust::counting_iterator<float>(0),_1*0.05),
        thrust::make_transform_iterator(
                thrust::counting_iterator<float>(0),_1*0.05) + 1000);

    std::cout << "--------------------------" << std::endl;
    std::cout << "A[0] is : " << A[0] << std::endl;
    std::cout << "A[1] is : " << A[1] << std::endl;
    std::cout << "A[100] is : " << A[100] << std::endl;
    std::cout << "A[500] is : " << A[500] << std::endl;

    return 0;
}

代码编译正常(使用推力v1.6),但是当我尝试访问我的设备向量的任何值(例如A [0])时,我收到运行时错误。

我做错了什么?这可能是非常基本的,但它是星期五晚上,不知怎的,我看不到它!

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

使用-G开关编译时,推力程序经常无法正常运行,因此它是recommended not to use that with thrust

这种特定的行为可能随推力版本而变化,并且随着时间的推移可能会随着更新的推力版本而改善。但总的来说,目前如果您遇到推力代码问题,请尝试在没有-G开关的情况下进行编译。

在没有-G开关的情况下编译时,设备代码将经常运行得更快,因此一般-G只应在您希望进行设备代码调试时使用(例如使用Nsight VSE或cuda- gdb),如果您专注于设备代码生成的某些方面,可能还有其他特殊情况需要使用-G进行测试。否则,您不应该使用-G编译代码作为一般做法。