OpenCL HelloWorld

时间:2016-11-18 16:52:41

标签: c++ visual-studio-2015 opencl

我刚刚开始在opencl工作,我正在研究opencl中应该是一个相对基本的hello_world程序。不幸的是,程序没有输出正确的短语或任何东西而是挂起而没有输出。

有关为何会出现这种情况的想法吗?

下面是:openglsource.cpp和hello.cl

.Grid.Columns

hello.cl

#define CL_USE_DEPRECATED_OPENCL_2_0_APIS

#include<CL/cl.hpp>
#include<iostream>
#include <fstream>

int main() 
{
    std::vector<cl::Platform> platforms;
    cl::Platform::get(&platforms);

    auto platform = platforms.front();
    std::vector<cl::Device> devices;
    platform.getDevices(CL_DEVICE_TYPE_CPU, &devices);

    auto device = devices.front();

    std::ifstream helloWorldFile("hello.cl");
    std::string src(std::istreambuf_iterator<char>(helloWorldFile), (std::istreambuf_iterator<char>()));

    cl::Program::Sources sources( 1, std::make_pair(src.c_str(), src.length() + 1));

    cl::Context context(device);
    cl::Program program(context, sources);

    auto err = program.build("-cl-std=CL1.2");

    char buf[16];
    cl::Buffer memBuf(context, CL_MEM_WRITE_ONLY | CL_MEM_HOST_READ_ONLY, sizeof(buf));
    cl::Kernel kernel(program, "Hello", &err);
    kernel.setArg(0, memBuf);

    cl::CommandQueue queue(context, device);
    queue.enqueueTask(kernel);
    queue.enqueueReadBuffer(memBuf, GL_TRUE, 0, sizeof(buf), buf);

    std::cout << "hello";
    std::cin.get();

}

1 个答案:

答案 0 :(得分:7)

问题出在

 cl::Kernel kernel(program, "Hello", &err);

应该是

 cl::Kernel kernel(program, "HelloWorld", &err); 

那里的字符串不仅仅是一个任意名称,因为我推断它应该是你想从指定内核调用的函数。有意义的是,内核可以容纳多个函数!

这么简单的修复......我觉得发帖很糟糕!