Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define CL_USE_DEPRECATED_OPENCL_2_0_APIS
- #include <CL\cl.hpp>
- #include <iostream>
- #include <fstream>
- #include "OpenCLHelper.h"
- std::string sourceCode =
- R"(
- __kernel void vector_add(__global const float *A, __global const float *B, __global float *C) {
- int i = get_global_id(0);
- C[i] = 0;
- for(int j = 1; j < 500; j++){
- C[i] += pow(log(3*A[i] + 1) + log(7*B[i] + 1), 1) / j;
- }
- }
- )";
- cl::Program CreateProgram(const std::string& file) {
- std::vector<cl::Platform> platforms;
- cl::Platform::get(&platforms);
- _ASSERT(platforms.size() > 0);
- auto platform = platforms.front();
- std::vector<cl::Device> devices;
- platform.getDevices(CL_DEVICE_TYPE_GPU, &devices);
- _ASSERT(devices.size() > 0);
- auto device = devices.front();
- cl::Program::Sources sources(1, std::make_pair(sourceCode.c_str(), sourceCode.length() + 1));
- cl::Context context(devices);
- cl::Program program(context, sources);
- program.build("");
- //здесь локально я смог вытащить program всё, что мне нужно.
- auto context2 = program.getInfo<CL_PROGRAM_CONTEXT>();
- auto devices2 = context2.getInfo<CL_CONTEXT_DEVICES>();
- std::cout << "devices2 found: " << devices2.size() << std::endl;
- // девайсы в наличии!!!
- // devices2.size() == 1! :3
- _ASSERT(devices2.size() > 0);
- auto device2 = devices2.front();
- auto vendor = device2.getInfo<CL_DEVICE_VENDOR>();
- auto version = device2.getInfo<CL_DEVICE_VERSION>();
- // производитель и версия читаются
- std::cout << vendor << std::endl;
- std::cout << version << std::endl;
- // я предаю program в main, чтобы проделать то же самое
- return program;
- }
- int main(int argc, char** argv) {
- // program передан правильно. Я дебажил - адрес тот же
- auto program = CreateProgram("OpenCLFile.cl");
- // так же и с контекстом - указатель на тот же адрес, что и в подпрограмме
- auto context = program.getInfo<CL_PROGRAM_CONTEXT>();
- // но здесь девайсов НОЛЬ
- auto devices = context.getInfo<CL_CONTEXT_DEVICES>();
- // НОООООЛЬ
- std::cout << "devices found: " << devices.size() << std::endl;
- // devices.size() == 0 cykablyat!!!! :(((((
- _ASSERT(devices.size() > 0);
- auto& device = devices.front();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement