编译VexCL程序时出错:raw_ptr不是device_vector的成员

时间:2016-09-08 19:35:22

标签: opencl gpgpu

我正在尝试使用推力示例编译我的第一个VexCL程序,并收到以下错误消息:

raw_ptr不是'vex :: backend :: opencl :: device_vector'的成员

这是代码

vex::Context ctx(vex::Filter::Env && vex::Filter::Count(1));
std::cout << ctx << std::endl;

vex::profiler<> prof(ctx);

typedef int T;
const size_t n = 16 * 1024 * 1024;
vex::vector<T> x(ctx, n);
vex::Random<T> rnd;

// Get raw pointers to the device memory.
T *x_begin = x(0).raw_ptr(); // Here is where the error is occurring.
T *x_end   = x_begin + x.size();

我对语言不太了解。我很感激这方面的任何帮助。

由于

克里斯

1 个答案:

答案 0 :(得分:1)

推文示例不是最好的开始,因为它涉及VexCLThrust(另一个针对CUDA的高级库)的接口。 因此,为了编译示例,您需要在VexCL中使用CUDA后端。也就是说,您需要定义VEXCL_BACKEND_CUDA预处理器宏 并链接libcuda.so(或cuda.lib,如果在Windows上),而不是libOpenCL.so / OpenCL.lib

你得到的错误是因为device_vector类在CUDA后端只暴露raw_ptr()方法。