记录OpenCL学习(C++ API1.1与1.2版本不兼容问题)

在实验代码中,由于给的代码是openCL1.1版本的,其中使用的vector是cl::vector直接导致编译失败

换成std::vector即可

#define __CL_ENABLE_EXCEPTIONS

#include <fstream>
#include <iostream>
#include <iterator>

#ifdef MAC
#include <OpenCL/cl.hpp>
#else
#include <CL/cl.hpp>
#endif

int main(void) {

    std::vector<cl::Platform> platforms;
    std::vector<cl::Device> devices;
    std::vector<cl::Kernel> allKernels;
    std::string kernelName;

    try {
        // Place the GPU devices of the first platform into a context
        cl::Platform::get(&platforms);
        platforms[0].getDevices(CL_DEVICE_TYPE_GPU, &devices);
        cl::Context context(devices);

        // Create and build program
        std::ifstream programFile("D:\\SysProject\\openCLProject\\Ch8\\create_kernels\\kernels.cl");
        std::string programString(std::istreambuf_iterator<char>(programFile),
                                  (std::istreambuf_iterator<char>()));
        cl::Program::Sources source(1, std::make_pair(programString.c_str(),
                                                      programString.length()+1));
        cl::Program program(context, source);
        program.build(devices);

        // Create individual kernels
        cl::Kernel addKernel(program, "add");
        cl::Kernel subKernel(program, "subtract");
        cl::Kernel multKernel(program, "multiply");

        // Create all kernels in program
        program.createKernels(&allKernels);
        for(auto & allKernel : allKernels) {
            kernelName = allKernel.getInfo<CL_KERNEL_FUNCTION_NAME>();
            std::cout << "Kernel: " << kernelName << std::endl;
        }
    }
    catch(cl::Error e) {
        std::cout << e.what() << ": Error code " << e.err() << std::endl;
    }

    return 0;
}

结果如下

Kernel: add
Kernel: subtract
Kernel: multiply
Kernel: divide
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值