На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование графики"
1) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с чтением, сохранением, обработкой, созданием, отрисовкой графической информации (в том числе - 3D [OpenGL, Direct3D] и анимации [в т.ч. VFW, DirectShow, OpenDML]).
Флэш обсуждают здесь!.

2) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе.

3) Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно.



Ваше мнение о модераторах: user posted imageBarazuk, user posted imageOpenGL, user posted imageMikle
Модераторы: OpenGL, Mikle
  
> Проблема с OpenCL , установил все что надо, но не могу подключить библиотеку в коде.
    Добрый вечер, у меня HP ProBook 4515s (ATI Radeon 4330)прочел в документах что есть поддержка OpenCL1.1, установил SDK, протестил в Geeks GPU Caps Viewer показывает следующую инфу: OpenCL 1.1 AMD-APP-SDK-v2.5 (732.1) - CU: 2 @ 2300MHz , ну все круто, открываю VS 2010 создаю консольное приложение на плюсах (С++) и пихаю туда этот код:
    ExpandedWrap disabled
      /
      // Hello World for OpenCL
      // Copyright 2009 David Black-Schaffer
      //
       
      #include "OpenCL/opencl.h"
      #include <stdlib.h>
      #include <stdio.h>
       
      #define LENGTH 10240
       
       
      // Define our kernel. It just calculates the sin of the input data.
      char *source = {
          "kernel calcSin(global float *data) {\n"
          "  int id = get_global_id(0);\n"
          "  data[id] = sin(data[id]);\n"
          "}\n"
      };
       
      // Note: there is no error handling here. This is bad practice in general.
       
      int main (int argc, const char * argv[]) {
          
          // OpenCL Objects
          cl_device_id device;
          cl_context context;
          cl_command_queue queue;
          cl_program program;
          cl_kernel kernel;
          cl_mem buffer;  
          
          
          
          // Create and initialize the input data
          cl_float *data;
          data = (cl_float*)malloc(sizeof(cl_float)*LENGTH);
          for (int i=0; i<LENGTH; i++)
              data[i] = i;
          
          
          
          // Setup OpenCL
          clGetDeviceIDs(NULL, CL_DEVICE_TYPE_DEFAULT, 1, &device, NULL);
          context = clCreateContext(NULL, 1, &device, NULL, NULL, NULL);
          queue = clCreateCommandQueue(context, device, (cl_command_queue_properties)0, NULL);
          
          
          
          // Setup the input
          buffer = clCreateBuffer(context, CL_MEM_COPY_HOST_PTR, sizeof(cl_float)*10240, data, NULL);
          
          
          
          // Build the kernel
          program = clCreateProgramWithSource(context, 1, (const char**)&source, NULL, NULL);
          clBuildProgram(program, 0, NULL, NULL, NULL, NULL);
          kernel = clCreateKernel(program, "calcSin", NULL);
          
          
          
          // Execute the kernel
          clSetKernelArg(kernel, 0, sizeof(buffer), &buffer);
          size_t global_dimensions[] = {LENGTH,0,0};
          clEnqueueNDRangeKernel(queue, kernel, 1, NULL, global_dimensions, NULL, 0, NULL, NULL);
          
          
          
          // Read back the results
          clEnqueueReadBuffer(queue, buffer, CL_TRUE, 0, sizeof(cl_float)*LENGTH, data, 0, NULL, NULL);
          
          
          
          // Clean up
          clReleaseMemObject(buffer);
          clReleaseKernel(kernel);
          clReleaseProgram(program);
          clReleaseCommandQueue(queue);
          clReleaseContext(context);
          
          
          
          // Print out the results
          for (int i=0; i<LENGTH; i++)
              printf("sin(%d) = %f\n", i, data[i]);
          
          
          
          free(data);
      }

    Но компилятор ругается на подключенную либу, а именно на эту строку: #include "OpenCL/opencl.h" и соответственно на все API openCL тоже (((. Может я что-то делаю не так? Подскажите пожалуйста, хочу разобраться а инфы в интернете мало :(

    p.s. спасибо :)
      Цитата war13 @
      Но компилятор ругается на подключенную либу, а именно на эту строку: #include "OpenCL/opencl.h"

      Это не на подключенную либу, а на ненайденый хидер. В свойствах проекта, настройках компиляции найди Additional include directories, и добавь туда путь к папке, где у тебя лежат хидеры. Я не знаю структуры файлов там в openCL, но допустим, что он у тебя установлен в C:\Program files\OpenCL, следовательно, где-то в этой папке должна быть папка include или что-то подобное, где должна располагаться папка OpenCL, и в которой должны располагаться хидеры. Следовательно, получается, что хидеры лежат в C:\Program files\OpenCL\include\OpenCL. Нужно прописать в Additional Include Directories строку C:\Program files\OpenCL\include\
        Вот когда перестанет ругаться на ненайденный хидер и откомпилится, тогда, возможно будет ругаться на ненайденные при сборке имена - вот это и будет неподключение либы.
        Если такое произойдет, можно просто добавить нужную либу к списку используемых.
          war13, почему ты не используешь C++-обертку над OpenCL API от AMD?
            Короче я не верно задал вопрос), я установил дрова, и сдк,потом протестил в Geeks GPU Caps Viewer и там показано что есть OpenCL, однако я не могу найти на компе папку OpenCl, CL, итд, все что есть это opencl.dll все :(, может кто сталкивался с этим и может что нить посоветовать :)?
              Цитата B.V. @
              почему ты не используешь C++-обертку над OpenCL API от AMD?

              о чем речь?
                Цитата niXman @
                о чем речь?

                Об этом.
                  B.V., спасибо. а то я что-то не мог понять, это стандартная обертка, или созданная AMD.
                    Инструкция по настройке зависимостей OpenCL в Visual Studio 2010 можно посмотреть тут Ссылка :) , материал не идеальная инструкция , но с места сдвинутся поможет! 8-) , у меня первая прога по определению устройств и их типов скомпилировалась! :good:
                    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0478 ]   [ 14 queries used ]   [ Generated: 19.05.24, 03:43 GMT ]