Advertisement
Guest User

Untitled

a guest
Feb 26th, 2017
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.39 KB | None | 0 0
  1. #define CL_USE_DEPRECATED_OPENCL_2_0_APIS
  2.  
  3. #include <CL\cl.hpp>
  4. #include <iostream>
  5. #include <fstream>
  6. #include "OpenCLHelper.h"
  7.  
  8. std::string sourceCode =
  9. R"(
  10. __kernel void vector_add(__global const float *A, __global const float *B, __global float *C) {
  11.  
  12. int i = get_global_id(0);
  13. C[i] = 0;
  14.  
  15. for(int j = 1; j < 500; j++){
  16. C[i] += pow(log(3*A[i] + 1) + log(7*B[i] + 1), 1) / j;
  17. }
  18. }
  19. )";
  20.  
  21. cl::Program CreateProgram(const std::string& file) {
  22.  
  23.     std::vector<cl::Platform> platforms;
  24.     cl::Platform::get(&platforms);
  25.  
  26.     _ASSERT(platforms.size() > 0);
  27.  
  28.     auto platform = platforms.front();
  29.     std::vector<cl::Device> devices;
  30.     platform.getDevices(CL_DEVICE_TYPE_GPU, &devices);
  31.  
  32.     _ASSERT(devices.size() > 0);
  33.  
  34.     auto device = devices.front();
  35.  
  36.     cl::Program::Sources sources(1, std::make_pair(sourceCode.c_str(), sourceCode.length() + 1));
  37.     cl::Context context(devices);
  38.  
  39.     cl::Program program(context, sources);
  40.     program.build("");
  41.  
  42.     //здесь локально я смог вытащить program всё, что мне нужно.
  43.     auto context2 = program.getInfo<CL_PROGRAM_CONTEXT>();
  44.     auto devices2 = context2.getInfo<CL_CONTEXT_DEVICES>();
  45.     std::cout << "devices2 found: " << devices2.size() << std::endl;
  46.    
  47.     // девайсы в наличии!!!
  48.     // devices2.size() == 1!                :3
  49.     _ASSERT(devices2.size() > 0);
  50.     auto device2 = devices2.front();
  51.     auto vendor = device2.getInfo<CL_DEVICE_VENDOR>();
  52.     auto version = device2.getInfo<CL_DEVICE_VERSION>();
  53.    
  54. // производитель и версия читаются
  55.     std::cout << vendor << std::endl;
  56.     std::cout << version << std::endl;
  57.  
  58.     // я предаю program в main, чтобы проделать то же самое
  59.     return program;
  60. }
  61.  
  62. int main(int argc, char** argv) {
  63.     // program передан правильно. Я дебажил - адрес тот же
  64.     auto program = CreateProgram("OpenCLFile.cl");
  65.    
  66.  
  67.     // так же и с контекстом - указатель на тот же адрес, что и в подпрограмме
  68.     auto context = program.getInfo<CL_PROGRAM_CONTEXT>();
  69.  
  70.     // но здесь девайсов НОЛЬ
  71.     auto devices = context.getInfo<CL_CONTEXT_DEVICES>();
  72.     // НОООООЛЬ
  73.     std::cout << "devices found: " << devices.size() << std::endl;
  74.    
  75.     // devices.size() == 0 cykablyat!!!!        :(((((
  76.     _ASSERT(devices.size() > 0);
  77.    
  78.     auto& device = devices.front();
  79.    
  80.     return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement