2014-02-12 38 views
1

我下面這個教程: http://simpleopencl.blogspot.com.br/2013/06/tutorial-simple-start-with-opencl-and-c.html括號錯誤開放C1代碼 - 用C++

,我得到了3個錯誤:

ERROR 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); 
} 

回答

3

你的最後一個問題是缺少的「配對」

std::string kernelFunctionToBeCompiled ... 

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

它的OpenCL 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>,其由的一個例子int小號

std::vector<int> myvector; 
myvector.push_back(42); 

Sources可能採用類似的方式

+0

試圖發展的東西.. –

+0

你是什麼意思? –

+0

看在這個圖像什麼push_back()是要求: http://pasteboard.co/DlUIdna.png –