大括号错误打开cl代码 - 使用C ++

时间:2014-02-12 19:44:24

标签: c++ opencl

我正在关注本教程: http://simpleopencl.blogspot.com.br/2013/06/tutorial-simple-start-with-opencl-and-c.html

我有3个错误:

错误1) - 解决了

cl::Context context({default_device}); //original code

我刚刚脱下牙箍,没关系。

错误2) - 解决了

if(program.build(default_device)!=CL_SUCCESS){

我只需将“default_device”替换为“all_devices”即可。

错误3) - 未解决

sources.push_back({kernel_code.c_str(),kernel_code.length()});

我不知道该怎么办。 Visual Studio指向此错误消息: “智能感知:期待表达”

以下是我正在谈论的代码:

cl::Device default_device = all_devices[0];
std::cout<< "Using device: "<<default_device.getInfo<CL_DEVICE_NAME>()<<"\n";

cl::Context context(default_device);

cl::Program::Sources sources;

// kernel calculates for each element C=A+B
std::string kernel_code=
    "void kernel simple_add(global const int* A, global const int* B, global int* C)"
    "{"
    "C[get_global_id(0)]=A[get_global_id(0)]+B[get_global_id(0)];"
    "}";
sources.push_back({kernel_code.c_str(),kernel_code.length()});

cl::Program program(context,sources);
if(program.build(all_devices)!=CL_SUCCESS){
    std::cout<<" Error building: "<<program.getBuildInfo<CL_PROGRAM_BUILD_LOG>(default_device)<<"\n";
    exit(1);
}

2 个答案:

答案 0 :(得分:5)

sources.push_back({kernel_code.c_str(),kernel_code.length()});

可以写成

sources.push_back(
    {
        kernel_code.c_str(),kernel_code.length()
    }
);

在大括号之间,它期待一个表达式,以;结尾。多数是你的错误告诉你的。

现在我不知道Sources是如何定义的,但在这些括号中

sources.push_back(...);

你必须指定sources所包含的任何类型的变量,因此可以添加(推回)

这是由std::vector<int> s

组成的int的示例
std::vector<int> myvector;
myvector.push_back(42);

Sources可能以类似的方式工作

答案 1 :(得分:4)

你的最后一个问题是缺少“对”

std::string kernelFunctionToBeCompiled ...

sources.push_back(
                     std::make_pair(
                                      kernelFunctionToBeCompiled.data(),
                                      kernelFunctionToBeCompiled.length()
                                    )
                  );

我想它的opencl 1.2绑定。