我正在关注本教程: 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);
}
答案 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绑定。