From 42b2451d228fbb777284af2132961bd6b2d2544f Mon Sep 17 00:00:00 2001 From: Darren VanBuren Date: Tue, 8 Aug 2017 05:56:57 -0700 Subject: [PATCH] Initial Commit --- Makefile | 2 ++ hello | Bin 0 -> 92816 bytes lesson1_kernel.cl | 6 ++++ main.cpp | 75 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 83 insertions(+) create mode 100644 Makefile create mode 100755 hello create mode 100644 lesson1_kernel.cl create mode 100644 main.cpp diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..50b5f12 --- /dev/null +++ b/Makefile @@ -0,0 +1,2 @@ +hello: main.cpp + g++ -o hello -lOpenCL main.cpp diff --git a/hello b/hello new file mode 100755 index 0000000000000000000000000000000000000000..ca17254bb8cac50b5cad685b35620c86dafc0200 GIT binary patch literal 92816 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 Swg30N>)|`vQE8C8?EDXK +#include +#include +#include +#include +#include +#include +#include + +const std::string hw("Hello World!"); + +inline void checkErr(cl_int err, const char* name) { + if(err != CL_SUCCESS) { + std::cerr << "ERROR: " << name << " (" << err << ")" << std::endl; + exit(EXIT_FAILURE); + } +} + +int main(void) { + cl_int err; + + std::vector platformList; + cl::Platform::get(&platformList); + checkErr(platformList.size() != 0 ? CL_SUCCESS : -1, "cl::Platform::get"); + + std::cerr << "Number of platforms: " << platformList.size() << std::endl; + + for(int i = 0; i < platformList.size(); i++) { + std::string platformVendor; + platformList[i].getInfo((cl_platform_info)CL_PLATFORM_VENDOR, &platformVendor); + std::cerr << "Platform #" << i << " Vendor: " << platformVendor << std::endl; + std::string platformName; + platformList[i].getInfo((cl_platform_info)CL_PLATFORM_NAME, &platformName); + std::cerr << "Platform #" << i << " Name: " << platformName << std::endl; + } + + cl_context_properties cprops[3] = { CL_CONTEXT_PLATFORM, (cl_context_properties)(platformList[1])(), 0 }; + cl::Context context(CL_DEVICE_TYPE_GPU, cprops, NULL, NULL, &err); + checkErr(err, "Context::Context()"); + + char* outH = new char [hw.length()+1]; + cl::Buffer outCL(context, CL_MEM_WRITE_ONLY | CL_MEM_USE_HOST_PTR, hw.length()+1, outH, &err); + checkErr(err, "Buffer::Buffer()"); + + std::vector devices; + devices = context.getInfo(); + checkErr(devices.size() > 0 ? CL_SUCCESS : -1, "devices.size() > 0"); + + std::ifstream file("lesson1_kernel.cl"); + checkErr(file.is_open() ? CL_SUCCESS : -1, "lesson1_kernel.cl"); + + std::string programSourceString(std::istreambuf_iterator(file), (std::istreambuf_iterator())); + cl::Program::Sources programSource(1, std::make_pair(programSourceString.c_str(), programSourceString.length() + 1)); + cl::Program program(context, programSource); + err = program.build(devices, ""); + checkErr(err, "Program::Build()"); + + cl::Kernel kernel(program, "hello", &err); + checkErr(err, "Kernel::Kernel()"); + err = kernel.setArg(0, outCL); + checkErr(err, "Kernel::setArg()"); + + cl::CommandQueue queue(context, devices[0], 0, &err); + checkErr(err, "CommandQueue::CommandQueue()"); + cl::Event event; + err = queue.enqueueNDRangeKernel(kernel, cl::NullRange, cl::NDRange(hw.length() + 1), cl::NDRange(1, 1), NULL, &event); + checkErr(err, "CommandQUeue::enqueueNDRangeKernel()"); + + event.wait(); + err = queue.enqueueReadBuffer(outCL, CL_TRUE, 0, hw.length() + 1, outH); + checkErr(err, "CommandQueue::enqueueReadBuffer"); + std::cout << outH; + + return EXIT_SUCCESS; +}