SlideShare ist ein Scribd-Unternehmen logo
1 von 42
Downloaden Sie, um offline zu lesen
Обзор OpenCL

          Илья Цветков
           Video Group
    CS MSU Graphics & Media Lab
Only for
 Maxus 



                Содержание
           Введение
           Модель OpenCL
               Платформа OpenCL
               Модель памяти
               Модель вычислений
           Возможности OpenCL
               Использование локальной памяти
               Использование изображений
               Средства языка
           Расширения OpenCL

CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      2
Only for
 Maxus 



                   Развитие GPGPU
                            BrookGPU — язык
                            программирования        Релиз ATI
    Первые                  GPGPU, основанный       Close to Metal —
    исследования в          на графических          низкоуровневого           Готовится к выходу
    области GPGPU           билиотеках              средства для GPGPU        NVIDIA CUDA 2.2

                     2003                     Октябрь 2006                     2008
            2002                  2004                   Ноябрь 2006                  Апрель 2009


            Создание библиотек           Релиз NVIDIA CUDA 1.0         Появление платформы
            для GPGPU, основанных                                      ATI Steam
            на OpenGL и DirectX




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                                                    3
Only for
 Maxus 



                Open Computing Language

           OpenCL предложен компанией Apple
           Сотрудничество с другими компаниями (AMD, Intel,
            NVIDIA)
           Стандартизацией занимается группа Khronos
           В декабре 2008 года выпущен стандарт OpenCL 1.0
               http://www.khronos.org/
               http://www.khronos.org/registry/cl/
           На данный момент реализации нет



CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      4
Only for
 Maxus 



                Особенности OpenCL
           Использование всех вычислительных ресурсов
            системы
               GPU, CPU и другие процессоры
               Параллелизм на уровне данных и на уровне задач
           Эффективная модель параллельных вычислений
               Абстрагирование от оборудования
               Основан на языке C
           Специфицирует точность вычислений
               Режимы округления IEEE 754
               Определена точность встроенных функций
           Возможность добавления расширений


CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      5
Only for
 Maxus 



                Содержание

           Введение
           Модель OpenCL
               Платформа OpenCL
               Модель памяти
               Модель вычислений
           Возможности OpenCL
           Расширения OpenCL

CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      6
Only for
 Maxus 



                Программный стек
           Platform
               Определение устройств в системе
               Инициализация устройств
               Создание контекста и очередей задач
           Runtime
               Управление ресурсами
               Исполнение вычислительных ядер
           Compiler
               Подмножество языка C с расширениями
               Компиляция вычислительных ядер


CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      7
Only for
 Maxus 



               Платформа OpenCL
                                                            …
                                                        …
   Processing Element                                       …
                                                    …
                                                        …
                                                        …
                                               …
                                                    …                 Host
                                                    …       …
         Compute Unit
                                               …
                                               …        …
      Compute Device                       …        …
                                               …




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                             8
Only for
 Maxus 



               Пример: NVIDIA GT200




           1 compute device
           30 compute units
           240 processing elements


CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      9
Only for
 Maxus 



               Модель вычислений
                                                      Work   Work        Work   Work
                                                      Item   Item        Item   Item


                                                      Work   Work        Work   Work
                                                      Item   Item        Item   Item




                                                                                       Sy
                   Gy




                                                      Work   Work        Work   Work
                                                      Item   Item        Item   Item


                                                      Work   Work        Work   Work
                                                      Item   Item        Item   Item
                                Gx
                                                                    Sx

      for (int x = 0; x < gx; ++x)
          for (int y = 0; y < gy; ++y)
              runKernel(x, y);




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                                            10
Only for
 Maxus 



               Простейший пример
           Код на C:
            int nIndex;
            for (nIndex = 0; nIndex < gx; ++nIndex)
            {
                c[nIndex] = a[nIndex] + b[nIndex];
            }

           Ядро OpenCL:
            __kernel void
            vectorAdd(__global const float * a,
                      __global const float * b,
                      __global float * c)
            {
                int nIndex = get_global_id(0);
                c[nIndex] = a[nIndex] + b[nIndex];
            }



CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      11
Only for
 Maxus 



               Выполнение ядра
      cl_int clEnqueueNDRangeKernel(
          cl_command_queue command_queue,             // Очередь команд
          cl_kernel kernel,                           // Ядро
          cl_uint work_dim,                           // Размерность пространства
          const size_t *global_work_offset,
          const size_t *global_work_size,             // Размер индексного пространства
          const size_t *local_work_size,              // Размер группы
          cl_uint num_events_in_wait_list,
          const cl_event *event_wait_list,            // Ожидаемые события
          cl_event *event)

      Для приведенного примера:
            clEnqueueNDRangeKernel(hQueue, hKernel, 1, NULL,
                                   &gx, NULL, NULL,
                                   NULL, NULL);




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                                          12
Only for
 Maxus 



               Ядро
      __kernel void
      vectorAdd(__global const float * a,
                __global const float * b,
                __global float * c)
      {
          int nIndex = get_global_id(0);
          c[nIndex] = a[nIndex] + b[nIndex];
      }




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      13
Only for
 Maxus 



               Инициализация контекста
      // Создание контекста OpenCL
      cl_context hContext;
      hContext = clCreateContextFromType(0, CL_DEVICE_TYPE_GPU,
                                         0, 0, 0);

      // Получение списка доступных в контексте устройств
      size_t nContextDescriptorSize;
      clGetContextInfo(hContext, CL_CONTEXT_DEVICES,
                       0, 0, &nContextDescriptorSize);
      cl_device_id * aDevices = malloc(nContextDescriptorSize);
      clGetContextInfo(hContext, CL_CONTEXT_DEVICES,
                       nContextDescriptorSize, aDevices, 0);

      // Создание очереди команд для первого из устройств
      cl_command_queue hQueue;
      hQueue = clCreateCommandQueue(hContext, aDevices[0], 0, 0);


CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      14
Only for
 Maxus 



               Инициализация памяти
      // Выделение памяти на устройстве
      cl_mem hDevMemA, hDevMemB, hDevMemC;
      hDevMemA = clCreateBuffer(hContext,
                                CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
                                dataSize * sizeof(cl_float), pA, 0);
      hDevMemB = clCreateBuffer(hContext,
                                CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
                                dataSize * sizeof(cl_float), pB, 0);
      hDevMemC = clCreateBuffer(hContext,
                                CL_MEM_WRITE_ONLY,
                                dataSize * sizeof(cl_float), 0, 0);




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                           15
Only for
 Maxus 



               Выполнение ядра
      // Компиляция OpenCL-программы
      cl_program hProgram;
      hProgram = clCreateProgramWithSource(hContext, 1, sProgramSource, 0, 0);
      clBuildProgram(hProgram, 0, 0, 0, 0, 0);
      // Создание ядра
      cl_kernel hKernel;
      hKernel = clCreateKernel(hProgram, "vectorAdd", 0);
      // Установка параметров ядра
      clSetKernelArg(hKernel, 0, sizeof(cl_mem), (void *)&hDevMemA);
      clSetKernelArg(hKernel, 1, sizeof(cl_mem), (void *)&hDevMemB);
      clSetKernelArg(hKernel, 2, sizeof(cl_mem), (void *)&hDevMemC);
      // Выполнение ядра
      clEnqueueNDRangeKernel(hQueue, hKernel, 1, 0, &dataSize, 0, 0, 0, 0);
      // Чтение результатов в оперативную память
      clEnqueueReadBuffer(hContext, hDevMemC, CL_TRUE, 0,
                          dataSize * sizeof(cl_float), pC, 0, 0, 0);


CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                                 16
Only for
 Maxus 



                    Организация памяти
                                                              Private Memory
      Private        Private         Private        Private
      Memory         Memory          Memory         Memory     Выделяется компилятором
       Work           Work            Work           Work
      Item 1         Item N          Item 1         Item N     Чтение и запись для work-
       Compute Unit 1                 Compute Unit N            item
                                                               Высокая скорость доступа
      Local Memory                             Local Memory   Для платформы CUDA:
                Global/Constant Memory Data Cache              Аналог — регистровый
  Compute Device                                                файл
                                                               Около 32 регистров на
                         Global Memory
                                                                work-item
  Compute Device Memory




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                                            17
Only for
 Maxus 



                    Организация памяти
                                                              Local Memory
      Private        Private         Private        Private
      Memory         Memory          Memory         Memory     Чтение и запись для всех
       Work
      Item 1
                      Work
                     Item N
                                      Work
                                     Item 1
                                                     Work
                                                    Item N
                                                                work-item одной группы
       Compute Unit 1                 Compute Unit N           Высокая скорость доступа
                                                               Необходима синхронизация
      Local Memory                             Local Memory   Для платформы CUDA:
                Global/Constant Memory Data Cache              Аналог — разделяемая
  Compute Device                                                память
                                                               Около 8 КБ на work-group
                         Global Memory
                                                                (на compute unit)
  Compute Device Memory




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                                           18
Only for
 Maxus 



                    Организация памяти
                                                              Global Memory
      Private        Private         Private        Private
      Memory         Memory          Memory         Memory     Чтение и запись
       Work           Work            Work           Work
      Item 1         Item N          Item 1         Item N     Низкая скорость доступа
       Compute Unit 1                 Compute Unit N           Необходима синхронизация
                                                              Для платформы CUDA:
      Local Memory                             Local Memory
                                                               Аналог — глобальная
                Global/Constant Memory Data Cache               память
  Compute Device                                               Типичный объѐм — 1 ГБ

                         Global Memory
  Compute Device Memory




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                                           19
Only for
 Maxus 



               Работа с памятью
                   Global              Constant           Local             Private
     Host          Динамическое        Динамическое       Динамическое
                                                                            —
                   выделение           выделение          выделение
                   Чтение и запись     Чтение и запись    Нет доступа       Нет доступа
     Kernel                            Статическое        Статическое       Статическое
                   —
                                       выделение          выделение         выделение
                   Чтение и запись     Только чтение      Чтение и запись   Чтение и запись




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                                              20
Only for
 Maxus 



                Содержание

           Введение
           Модель OpenCL
           Возможности OpenCL
               Использование локальной памяти
               Использование изображений
               Средства языка
           Расширения OpenCL

CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      21
Only for
 Maxus          Использование
                 локальной памяти
           Проблемы глобальной
            памяти                                                          Загрузить данные в
                                                                            локальную память

                Большая латентность
                Отсутствие кэша
                                                            Синхронизация     Синхронизация
           Решение
            1.    Предварительная
                  загрузка данных в                                          Обработка данных
                                                                            в локальной памяти

                  локальную память
            2.    Обработка                                                    Сохранение
            3.    Сохранение                                                   результата


                  результата


CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                                                 22
Only for
 Maxus 



                Синхронизация
      Точка синхронизации:
      void barrier(cl_mem_fence_flags flags)

      Особенности:
       Точка синхронизации должна быть достигнута либо всеми
        потоками, либо ни одним из потоков в группе
       Флаг является подсказкой компилятору:
               CLK_LOCAL_MEM_FENCE
               CLK_GLOBAL_MEM_FENCE




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      23
Only for
 Maxus 



                Пример: свѐртка
      Свѐртка с ядром 9×9
       Сложности:

               Много обращений к
                глобальной памяти
               Мало вычислений
           Реализация:
               Разбиение на группы
                8×8
               Каждая группа работает
                в локальной памяти



CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      24
Only for
 Maxus 



                Пример: свѐртка
      Свѐртка с ядром 9×9
       Реализация:

               В локальную память
                загружается блок 16×16
               Каждый поток
                загружает по 4
                значения


            #define BRD_SIZE 4
            #define BLK_SIZE 16
            #define GRP_SIZE 8



CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      25
Only for
 Maxus 



                Реализация
      __kernel void convolution(__global float *dst, __global const float *src,
                                __local float *block)
      {
          int gx = get_global_id(0); int gy = get_global_id(1);
          int lx = get_local_id(0); int ly = get_local_id(1);
          int bx = gx - BRD_SIZE;    int by = gy - BRD_SIZE;

            int sid = by * SRC_STRIDE + bx; int bid = ly * BLK_SIZE + lx;
            block[bid] = src[sid];
            block[bid + GRP_SIZE] = src[sid + GRP_SIZE];

            sid += GRP_SIZE * SRC_STRIDE; bid += GRP_SIZE * BLK_SIZE;
            block[bid] = src[sid];
            block[bid + GRP_SIZE] = src[sid + GRP_SIZE];

            barrier(CLK_LOCAL_MEM_FENCE);
            // Вычисления в локальной памяти
            dst[gy * SRC_STRIDE + gx] = result;
      }


CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                                  26
Only for
 Maxus        Функции для работы с
               памятью
     Функция                                 Описание
     event_t async_work_group_copy(          Асинхронное копирование данных между локальной
               __local gentype *dst,         и глобальной памятью. Возвращает объект для
        const __global gentype *src,         синхронизации.
                size_t num_elements,
                      event_t event)
     event_t async_work_group_copy(
              __global gentype *dst,
         const __local gentype *src,
                size_t num_elements,
                      event_t event)
     void wait_group_events(                 Синхронизация по определѐнному событию
                     int num_events,
                event_t *event_list)
     void prefetch(                          Упреждающая загрузка данных в кэш
          const __global gentype *p,
                size_t num_elements)




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                                              27
Only for
 Maxus 



                Текстуры в GPGPU
           Достоинства
               Многомерное кэширование
               Обработка обращений за границы изображения
               Интерполяция на лету
           Недостатки
               Нормализованные данные
               Нормализованные координаты




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      28
Only for
 Maxus 



                Изображения в OpenCL
           Обладают достоинствами текстур
           Нормализация координат и данных опциональна
           Доступные форматы — от 1 до 4 компонент на
            пиксель:
               CL_SIGNED_INT8
               CL_SIGNED_INT16
               CL_SIGNED_INT32
               CL_HALF_FLOAT
               CL_FLOAT
           Функции для работы с изображениями:
               float4 read_imagef(image2d_t image, sampler_t sampler, int2
                coord)
               void write_imagef(image2d_t image, int2 coord, float4 color)

           Возможна работа с 3D-изображениями

CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                               29
Only for
 Maxus         Использование
                изображений
      Свѐртка 9×9
           Проблемы:
               Обработка краѐв
               Перекрытие блоков
           Решение —
            изображения
               Кэширование
               Обработка адресации
                вне изображения




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      30
Only for
 Maxus 



               Пример
      __kernel void convolution(__write_only image2d_t *dst, __read_only image2d_t *src,
                                __local float *block)
      {
          const sampler_t smplr = CLK_NORMALIZED_COORDS_FALSE |
                                  CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_NEAREST;
          int gx = get_global_id(0); int gy = get_global_id(1);
          int lx = get_local_id(0); int ly = get_local_id(1);
          int bx = gx - BRD_SIZE;     int by = gy - BRD_SIZE;
          int bid = ly * BLK_SIZE + lx;
          block[bid] = read_imagef(src, smplr, (int2)(bx, by)).x;
          block[bid + GRP_SIZE] = read_imagef(src, smplr, (int2)(bx + GRP_SIZE, by)).x;
          bid += GRP_SIZE * BLK_SIZE;
          block[bid] = read_imagef(src, smplr, (int2)(bx, by + GRP_SIZE)).x;
          block[bid + GRP_SIZE] = read_imagef(src, smplr, (int2)(bx + GRP_SIZE,
                                                                  by + GRP_SIZE)).x;
          barrier(CLK_LOCAL_MEM_FENCE);
          // Вычисления в локальной памяти
          write_imagef(dst, (int2)(gx, gy), result);
      }


CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                                           31
Only for
 Maxus 



                Типы данных
           Скалярные
               bool
               char, uchar, short, ushort, int, uint, long, ulong
               float
               size_t и другие вспомогательные типы
           Векторные
               Состоят из 2, 4, 8 или 16 элементов
               Именуются charn, ucharn, shortn, ushortn, intn, uintn, longn,
                ulongn, floatn, где n — количество элементов
               Доступ к элементам с помощью .xyzw, .odd, .even, .lo, .hi,
                .s0123456789ABCDEF
               Пример
                 uchar16 a; uchar4 b = a.s6789;
                 float4 c; float4 d = c.zyxw;



CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                                32
Only for
 Maxus 



                Функции
           Математические функции из math.h языка C
           Целочисленные вычисления
               ugentype abs(gentype x)
               ugentype abs_diff(gentype x, gentype y)
               gentype hadd(gentype x, gentype y) — (x + y) ›› 1
               gentype rhadd(gentype x, gentype y) — (x + y + 1) ›› 1
           Вспомогательные функции для работы с float
               gentype   clamp(gentype x, gentype minval, gentype maxval)
               gentype   {min|max}(gentype x, gentype y)
               gentype   mix(gentype x, gentype y, gentype a) — x + (y − x) · a
               gentype   step(gentype edge, gentype x)
           Геометрические функции
           Функции чтения и записи изображений
           Определение индексов work-item


CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                                   33
Only for
 Maxus 



               Определение индексов
     Функция                                   Описание
     uint get_work_dim()                       Размерность индексного пространства
     size_t get_global_size(uint ind) Количество work-item в измерении ind
     size_t get_global_id(uint ind)            Индекс work-item в измерении ind
     size_t get_local_size(uint ind)           Размер work-group в измерении ind
     size_t get_local_id(uint ind)             Локальный индекс work-item внутри work-group в
                                               измерении ind
     size_t get_num_groups(uint ind)           Количество work-group в измерении ind
     size_t get_group_id(uint ind)             Индекс work-group в измерении ind




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                                                34
Only for
 Maxus 



               Содержание

           Введение
           Модель OpenCL
           Возможности OpenCL
           Расширения OpenCL




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      35
Only for
 Maxus 



               Ограничения в OpenCL 1.0

           Не поддерживается рекурсия
           Минимальный объѐм записываемых данных — 32 бита
           Отсутствуют вычисления с двойной точностью
           Не поддерживается запись в 3D-изображения
           Отсутствуют указатели на функции
           Указатели на указатели не могут быть параметрами
           Битовые поля не поддерживаются
           Не поддерживаются динамические структуры данных




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      36
Only for
 Maxus 



               Расширения OpenCL
     Название                               Описание
     cl_khr_fp64                            Вычисления с двойной точностью
     cl_khr_select_fprounding_mode          Выбор режимов округления
     cl_khr_global_int32_base_atomics,      Атомарные функции для работы с 32-битыми целыми в
     cl_khr_global_int32_extended_atomics   глобальной памяти
     cl_khr_local_int32_base_atomics,       Атомарные функции для работы с 32-битыми целыми в
     cl_khr_local_int32_extended_atomics    локальной памяти
     cl_khr_int64_base_atomics,             Атомарные функции для работы с 64-битыми целыми в
     cl_khr_int64_extended_atomics          глобальной и локальной памяти
     cl_khr_3d_image_writes                 Запись в 3D-изображение
     cl_khr_byte_addressable_store          Запись с побайтовой адресацией
     cl_khr_fp16                            Вычисления с половинной точностью




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                                                37
Only for
 Maxus 



                Атомарные функции
           Типы памяти:
               Локальная
               Глобальная
           Типы данных:
               32-разрядные целые
               64-разрядные целые
           Набор функций:
               Базовый
                    int atom_{add|sub|xchg}(int *p, int val)
                    int atom_{inc|dec}(int *p)
                    int atom_cmpxchg(int *p, int cmp, int val)
               Расширенный
                    int atom_{min|max}(int *p, int val)
                    int atom_{and|or|xor}(int *p, int val)




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      38
Only for
 Maxus 



                Выводы
           Позволяет распараллеливать задачи обработки
            изображений и видео
           Поддержка большого количества устройств
               GPU
               CPU
               PS3, XBOX
               Embedded profile
           Один код для всех устройств
           Сходство с CUDA
           Реализации ожидаются в ближайшее время
               NVIDIA
               AMD
               Intel

CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      39
Only for
 Maxus 



               Список литературы
      1.    http://www.khronos.org/registry/cl/
      2.    http://www.nvidia.com/object/cuda_opencl.html
      3.    http://www.nvidia.com/object/cuda_home.html




CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      40
Only for
 Maxus 



               Вопросы




                                             ?
CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      41
Only for
 Maxus 
             Лаборатория компьютерной
             графики и мультимедиа

      Видеогруппа это:
       Выпускники в аспирантурах Англии,

        Франции, Швейцарии (в России в МГУ и
        ИПМ им. Келдыша)
       Выпускниками защищено 5 диссертаций

       Наиболее популярные в мире сравнения
        видеокодеков
       Более 3 миллионов скачанных фильтров
        обработки видео
CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/
                                                                      42

Weitere ähnliche Inhalte

Andere mochten auch

A history of PageRank from the numerical computing perspective
A history of PageRank from the numerical computing perspectiveA history of PageRank from the numerical computing perspective
A history of PageRank from the numerical computing perspectiveDavid Gleich
 
PageRank and Related Methods
PageRank and Related MethodsPageRank and Related Methods
PageRank and Related MethodsJohn Breslin
 
Google Pagerank 101 Definition
Google Pagerank 101 DefinitionGoogle Pagerank 101 Definition
Google Pagerank 101 Definitionbadar masbadar
 
Page rank algorithm
Page rank algorithmPage rank algorithm
Page rank algorithmJunghoon Kim
 
The Google Pagerank algorithm - How does it work?
The Google Pagerank algorithm - How does it work?The Google Pagerank algorithm - How does it work?
The Google Pagerank algorithm - How does it work?Kundan Bhaduri
 
Pagerank Algorithm Explained
Pagerank Algorithm ExplainedPagerank Algorithm Explained
Pagerank Algorithm Explainedjdhaar
 
PageRank Algorithm In data mining
PageRank Algorithm In data miningPageRank Algorithm In data mining
PageRank Algorithm In data miningMai Mustafa
 

Andere mochten auch (10)

Pagerank
PagerankPagerank
Pagerank
 
A history of PageRank from the numerical computing perspective
A history of PageRank from the numerical computing perspectiveA history of PageRank from the numerical computing perspective
A history of PageRank from the numerical computing perspective
 
PageRank and Related Methods
PageRank and Related MethodsPageRank and Related Methods
PageRank and Related Methods
 
Lec5 Pagerank
Lec5 PagerankLec5 Pagerank
Lec5 Pagerank
 
Google Pagerank 101 Definition
Google Pagerank 101 DefinitionGoogle Pagerank 101 Definition
Google Pagerank 101 Definition
 
Page rank algorithm
Page rank algorithmPage rank algorithm
Page rank algorithm
 
The Google Pagerank algorithm - How does it work?
The Google Pagerank algorithm - How does it work?The Google Pagerank algorithm - How does it work?
The Google Pagerank algorithm - How does it work?
 
Google PageRank
Google PageRankGoogle PageRank
Google PageRank
 
Pagerank Algorithm Explained
Pagerank Algorithm ExplainedPagerank Algorithm Explained
Pagerank Algorithm Explained
 
PageRank Algorithm In data mining
PageRank Algorithm In data miningPageRank Algorithm In data mining
PageRank Algorithm In data mining
 

Ähnlich wie Обзор OpenCL

Обзор открытых библиотек в области обработки изображений и компьютерного зрения
Обзор открытых библиотек в области обработки изображений и компьютерного зренияОбзор открытых библиотек в области обработки изображений и компьютерного зрения
Обзор открытых библиотек в области обработки изображений и компьютерного зренияMSU GML VideoGroup
 
Применение современных графических процессоров в области компьютерного зрения
Применение современных графических процессоров в области компьютерного зренияПрименение современных графических процессоров в области компьютерного зрения
Применение современных графических процессоров в области компьютерного зренияMSU GML VideoGroup
 
Hpc 2.26.03.2013.
Hpc 2.26.03.2013.Hpc 2.26.03.2013.
Hpc 2.26.03.2013.Boris Kizko
 
Применение современных графических процессоров для обработки видео
Применение современных графических процессоров для обработки видеоПрименение современных графических процессоров для обработки видео
Применение современных графических процессоров для обработки видеоMSU GML VideoGroup
 
Обзор процессоров Phillips Nexperia
Обзор процессоров Phillips NexperiaОбзор процессоров Phillips Nexperia
Обзор процессоров Phillips NexperiaMSU GML VideoGroup
 
Декодирование видео на GPU
Декодирование видео на GPUДекодирование видео на GPU
Декодирование видео на GPUMSU GML VideoGroup
 
Alexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic GamesAlexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic GamesWhite Nights Conference
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
overview of development tools for computing Gpgpu
overview of development tools for computing Gpgpuoverview of development tools for computing Gpgpu
overview of development tools for computing Gpgpucorehard_by
 
обзор средств разработки для вычислений Gpgpu
обзор средств разработки для вычислений Gpgpuобзор средств разработки для вычислений Gpgpu
обзор средств разработки для вычислений GpgpuCOMAQA.BY
 
Вычисление глубины по одному изображению
Вычисление глубины по одному изображениюВычисление глубины по одному изображению
Вычисление глубины по одному изображениюMSU GML VideoGroup
 
Denis Perevalov -- Computer Vision with OpenCV 2
Denis Perevalov -- Computer Vision with OpenCV 2Denis Perevalov -- Computer Vision with OpenCV 2
Denis Perevalov -- Computer Vision with OpenCV 2Uralcsclub
 
Обзор стандарта H.265/HEVC
Обзор стандарта H.265/HEVCОбзор стандарта H.265/HEVC
Обзор стандарта H.265/HEVCMSU GML VideoGroup
 
Сервисы Azure для научных исследований
Сервисы Azure для научных исследованийСервисы Azure для научных исследований
Сервисы Azure для научных исследованийMicrosoft
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON
 
Cравнение средств разработки RIA приложений используя Flash платформу
Cравнение средств разработки RIA приложений используя Flash платформуCравнение средств разработки RIA приложений используя Flash платформу
Cравнение средств разработки RIA приложений используя Flash платформуilja.panin
 
подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...
подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...
подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...oleg gubanov
 

Ähnlich wie Обзор OpenCL (20)

Обзор открытых библиотек в области обработки изображений и компьютерного зрения
Обзор открытых библиотек в области обработки изображений и компьютерного зренияОбзор открытых библиотек в области обработки изображений и компьютерного зрения
Обзор открытых библиотек в области обработки изображений и компьютерного зрения
 
Применение современных графических процессоров в области компьютерного зрения
Применение современных графических процессоров в области компьютерного зренияПрименение современных графических процессоров в области компьютерного зрения
Применение современных графических процессоров в области компьютерного зрения
 
Hpc 2.26.03.2013.
Hpc 2.26.03.2013.Hpc 2.26.03.2013.
Hpc 2.26.03.2013.
 
Применение современных графических процессоров для обработки видео
Применение современных графических процессоров для обработки видеоПрименение современных графических процессоров для обработки видео
Применение современных графических процессоров для обработки видео
 
Обзор процессоров Phillips Nexperia
Обзор процессоров Phillips NexperiaОбзор процессоров Phillips Nexperia
Обзор процессоров Phillips Nexperia
 
Декодирование видео на GPU
Декодирование видео на GPUДекодирование видео на GPU
Декодирование видео на GPU
 
Alexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic GamesAlexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic Games
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
overview of development tools for computing Gpgpu
overview of development tools for computing Gpgpuoverview of development tools for computing Gpgpu
overview of development tools for computing Gpgpu
 
обзор средств разработки для вычислений Gpgpu
обзор средств разработки для вычислений Gpgpuобзор средств разработки для вычислений Gpgpu
обзор средств разработки для вычислений Gpgpu
 
CSoft Машиностроение Каталог 2012
CSoft Машиностроение Каталог 2012CSoft Машиностроение Каталог 2012
CSoft Машиностроение Каталог 2012
 
Cuda, OpenCL
Cuda, OpenCLCuda, OpenCL
Cuda, OpenCL
 
Вычисление глубины по одному изображению
Вычисление глубины по одному изображениюВычисление глубины по одному изображению
Вычисление глубины по одному изображению
 
10183
1018310183
10183
 
Denis Perevalov -- Computer Vision with OpenCV 2
Denis Perevalov -- Computer Vision with OpenCV 2Denis Perevalov -- Computer Vision with OpenCV 2
Denis Perevalov -- Computer Vision with OpenCV 2
 
Обзор стандарта H.265/HEVC
Обзор стандарта H.265/HEVCОбзор стандарта H.265/HEVC
Обзор стандарта H.265/HEVC
 
Сервисы Azure для научных исследований
Сервисы Azure для научных исследованийСервисы Azure для научных исследований
Сервисы Azure для научных исследований
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
 
Cравнение средств разработки RIA приложений используя Flash платформу
Cравнение средств разработки RIA приложений используя Flash платформуCравнение средств разработки RIA приложений используя Flash платформу
Cравнение средств разработки RIA приложений используя Flash платформу
 
подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...
подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...
подготовленная презентация проекта Gpu digital lab от компании аксиома для ко...
 

Mehr von MSU GML VideoGroup

Обзор алгоритмов генерации ракурсов для многоракурсных видео
Обзор алгоритмов генерации ракурсов для многоракурсных видеоОбзор алгоритмов генерации ракурсов для многоракурсных видео
Обзор алгоритмов генерации ракурсов для многоракурсных видеоMSU GML VideoGroup
 
Некоторые методы сегментации видео
Некоторые методы сегментации видеоНекоторые методы сегментации видео
Некоторые методы сегментации видеоMSU GML VideoGroup
 
Обзор методов сравнения фильмов
Обзор методов сравнения фильмовОбзор методов сравнения фильмов
Обзор методов сравнения фильмовMSU GML VideoGroup
 
Обзор методов оценки True-motion
Обзор методов оценки True-motionОбзор методов оценки True-motion
Обзор методов оценки True-motionMSU GML VideoGroup
 
Методы цветокоррекции стереовидео
Методы цветокоррекции стереовидеоМетоды цветокоррекции стереовидео
Методы цветокоррекции стереовидеоMSU GML VideoGroup
 
Некоторые методы сопоставления стерео
Некоторые методы сопоставления стереоНекоторые методы сопоставления стерео
Некоторые методы сопоставления стереоMSU GML VideoGroup
 
Некоторые алгоритмы многомерной обработки изображений
Некоторые алгоритмы многомерной обработки изображенийНекоторые алгоритмы многомерной обработки изображений
Некоторые алгоритмы многомерной обработки изображенийMSU GML VideoGroup
 
Некоторые методы обнаружения артефактов 3D-видео
Некоторые методы обнаружения артефактов 3D-видеоНекоторые методы обнаружения артефактов 3D-видео
Некоторые методы обнаружения артефактов 3D-видеоMSU GML VideoGroup
 
Способы построения и оценки карт салиентности
Способы построения и оценки карт салиентностиСпособы построения и оценки карт салиентности
Способы построения и оценки карт салиентностиMSU GML VideoGroup
 
Обзор методов сопоставления шаблона и изображения
Обзор методов сопоставления шаблона и изображенияОбзор методов сопоставления шаблона и изображения
Обзор методов сопоставления шаблона и изображенияMSU GML VideoGroup
 
Способы построения saliency map
Способы построения saliency mapСпособы построения saliency map
Способы построения saliency mapMSU GML VideoGroup
 
Research & Development методы, проблемы и ошибки
Research & Development методы, проблемы и ошибкиResearch & Development методы, проблемы и ошибки
Research & Development методы, проблемы и ошибкиMSU GML VideoGroup
 
Обзор алгоритмов трекинга объектов
Обзор алгоритмов трекинга объектовОбзор алгоритмов трекинга объектов
Обзор алгоритмов трекинга объектовMSU GML VideoGroup
 
Некоторые методы генерации многоракурсных изображений на основе карты глубины
Некоторые методы генерации многоракурсных изображений на основе карты глубиныНекоторые методы генерации многоракурсных изображений на основе карты глубины
Некоторые методы генерации многоракурсных изображений на основе карты глубиныMSU GML VideoGroup
 
Использование областей перекрытия в задаче сегментации видео
Использование областей перекрытия в задаче сегментации видеоИспользование областей перекрытия в задаче сегментации видео
Использование областей перекрытия в задаче сегментации видеоMSU GML VideoGroup
 
Обзор докладов конференции IC3D 2012
Обзор докладов конференции IC3D 2012Обзор докладов конференции IC3D 2012
Обзор докладов конференции IC3D 2012MSU GML VideoGroup
 
Алгоритмы для задачи матирования
Алгоритмы для задачи матированияАлгоритмы для задачи матирования
Алгоритмы для задачи матированияMSU GML VideoGroup
 
Исправление различий резкости в 3D видео
Исправление различий резкости в 3D видеоИсправление различий резкости в 3D видео
Исправление различий резкости в 3D видеоMSU GML VideoGroup
 
Методы повышения визуального качества восстановленного фона (часть 2)
Методы повышения визуального качества восстановленного фона (часть 2)Методы повышения визуального качества восстановленного фона (часть 2)
Методы повышения визуального качества восстановленного фона (часть 2)MSU GML VideoGroup
 
Некоторые методы сопоставления и трекинга границ во времени
Некоторые методы сопоставления и трекинга границ во времениНекоторые методы сопоставления и трекинга границ во времени
Некоторые методы сопоставления и трекинга границ во времениMSU GML VideoGroup
 

Mehr von MSU GML VideoGroup (20)

Обзор алгоритмов генерации ракурсов для многоракурсных видео
Обзор алгоритмов генерации ракурсов для многоракурсных видеоОбзор алгоритмов генерации ракурсов для многоракурсных видео
Обзор алгоритмов генерации ракурсов для многоракурсных видео
 
Некоторые методы сегментации видео
Некоторые методы сегментации видеоНекоторые методы сегментации видео
Некоторые методы сегментации видео
 
Обзор методов сравнения фильмов
Обзор методов сравнения фильмовОбзор методов сравнения фильмов
Обзор методов сравнения фильмов
 
Обзор методов оценки True-motion
Обзор методов оценки True-motionОбзор методов оценки True-motion
Обзор методов оценки True-motion
 
Методы цветокоррекции стереовидео
Методы цветокоррекции стереовидеоМетоды цветокоррекции стереовидео
Методы цветокоррекции стереовидео
 
Некоторые методы сопоставления стерео
Некоторые методы сопоставления стереоНекоторые методы сопоставления стерео
Некоторые методы сопоставления стерео
 
Некоторые алгоритмы многомерной обработки изображений
Некоторые алгоритмы многомерной обработки изображенийНекоторые алгоритмы многомерной обработки изображений
Некоторые алгоритмы многомерной обработки изображений
 
Некоторые методы обнаружения артефактов 3D-видео
Некоторые методы обнаружения артефактов 3D-видеоНекоторые методы обнаружения артефактов 3D-видео
Некоторые методы обнаружения артефактов 3D-видео
 
Способы построения и оценки карт салиентности
Способы построения и оценки карт салиентностиСпособы построения и оценки карт салиентности
Способы построения и оценки карт салиентности
 
Обзор методов сопоставления шаблона и изображения
Обзор методов сопоставления шаблона и изображенияОбзор методов сопоставления шаблона и изображения
Обзор методов сопоставления шаблона и изображения
 
Способы построения saliency map
Способы построения saliency mapСпособы построения saliency map
Способы построения saliency map
 
Research & Development методы, проблемы и ошибки
Research & Development методы, проблемы и ошибкиResearch & Development методы, проблемы и ошибки
Research & Development методы, проблемы и ошибки
 
Обзор алгоритмов трекинга объектов
Обзор алгоритмов трекинга объектовОбзор алгоритмов трекинга объектов
Обзор алгоритмов трекинга объектов
 
Некоторые методы генерации многоракурсных изображений на основе карты глубины
Некоторые методы генерации многоракурсных изображений на основе карты глубиныНекоторые методы генерации многоракурсных изображений на основе карты глубины
Некоторые методы генерации многоракурсных изображений на основе карты глубины
 
Использование областей перекрытия в задаче сегментации видео
Использование областей перекрытия в задаче сегментации видеоИспользование областей перекрытия в задаче сегментации видео
Использование областей перекрытия в задаче сегментации видео
 
Обзор докладов конференции IC3D 2012
Обзор докладов конференции IC3D 2012Обзор докладов конференции IC3D 2012
Обзор докладов конференции IC3D 2012
 
Алгоритмы для задачи матирования
Алгоритмы для задачи матированияАлгоритмы для задачи матирования
Алгоритмы для задачи матирования
 
Исправление различий резкости в 3D видео
Исправление различий резкости в 3D видеоИсправление различий резкости в 3D видео
Исправление различий резкости в 3D видео
 
Методы повышения визуального качества восстановленного фона (часть 2)
Методы повышения визуального качества восстановленного фона (часть 2)Методы повышения визуального качества восстановленного фона (часть 2)
Методы повышения визуального качества восстановленного фона (часть 2)
 
Некоторые методы сопоставления и трекинга границ во времени
Некоторые методы сопоставления и трекинга границ во времениНекоторые методы сопоставления и трекинга границ во времени
Некоторые методы сопоставления и трекинга границ во времени
 

Обзор OpenCL

  • 1. Обзор OpenCL Илья Цветков Video Group CS MSU Graphics & Media Lab
  • 2. Only for Maxus  Содержание  Введение  Модель OpenCL  Платформа OpenCL  Модель памяти  Модель вычислений  Возможности OpenCL  Использование локальной памяти  Использование изображений  Средства языка  Расширения OpenCL CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 2
  • 3. Only for Maxus  Развитие GPGPU BrookGPU — язык программирования Релиз ATI Первые GPGPU, основанный Close to Metal — исследования в на графических низкоуровневого Готовится к выходу области GPGPU билиотеках средства для GPGPU NVIDIA CUDA 2.2 2003 Октябрь 2006 2008 2002 2004 Ноябрь 2006 Апрель 2009 Создание библиотек Релиз NVIDIA CUDA 1.0 Появление платформы для GPGPU, основанных ATI Steam на OpenGL и DirectX CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 3
  • 4. Only for Maxus  Open Computing Language  OpenCL предложен компанией Apple  Сотрудничество с другими компаниями (AMD, Intel, NVIDIA)  Стандартизацией занимается группа Khronos  В декабре 2008 года выпущен стандарт OpenCL 1.0  http://www.khronos.org/  http://www.khronos.org/registry/cl/  На данный момент реализации нет CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 4
  • 5. Only for Maxus  Особенности OpenCL  Использование всех вычислительных ресурсов системы  GPU, CPU и другие процессоры  Параллелизм на уровне данных и на уровне задач  Эффективная модель параллельных вычислений  Абстрагирование от оборудования  Основан на языке C  Специфицирует точность вычислений  Режимы округления IEEE 754  Определена точность встроенных функций  Возможность добавления расширений CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 5
  • 6. Only for Maxus  Содержание  Введение  Модель OpenCL  Платформа OpenCL  Модель памяти  Модель вычислений  Возможности OpenCL  Расширения OpenCL CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 6
  • 7. Only for Maxus  Программный стек  Platform  Определение устройств в системе  Инициализация устройств  Создание контекста и очередей задач  Runtime  Управление ресурсами  Исполнение вычислительных ядер  Compiler  Подмножество языка C с расширениями  Компиляция вычислительных ядер CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 7
  • 8. Only for Maxus  Платформа OpenCL … … Processing Element … … … … … … Host … … Compute Unit … … … Compute Device … … … CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 8
  • 9. Only for Maxus  Пример: NVIDIA GT200  1 compute device  30 compute units  240 processing elements CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 9
  • 10. Only for Maxus  Модель вычислений Work Work Work Work Item Item Item Item Work Work Work Work Item Item Item Item Sy Gy Work Work Work Work Item Item Item Item Work Work Work Work Item Item Item Item Gx Sx for (int x = 0; x < gx; ++x) for (int y = 0; y < gy; ++y) runKernel(x, y); CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 10
  • 11. Only for Maxus  Простейший пример  Код на C: int nIndex; for (nIndex = 0; nIndex < gx; ++nIndex) { c[nIndex] = a[nIndex] + b[nIndex]; }  Ядро OpenCL: __kernel void vectorAdd(__global const float * a, __global const float * b, __global float * c) { int nIndex = get_global_id(0); c[nIndex] = a[nIndex] + b[nIndex]; } CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 11
  • 12. Only for Maxus  Выполнение ядра cl_int clEnqueueNDRangeKernel( cl_command_queue command_queue, // Очередь команд cl_kernel kernel, // Ядро cl_uint work_dim, // Размерность пространства const size_t *global_work_offset, const size_t *global_work_size, // Размер индексного пространства const size_t *local_work_size, // Размер группы cl_uint num_events_in_wait_list, const cl_event *event_wait_list, // Ожидаемые события cl_event *event) Для приведенного примера: clEnqueueNDRangeKernel(hQueue, hKernel, 1, NULL, &gx, NULL, NULL, NULL, NULL); CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 12
  • 13. Only for Maxus  Ядро __kernel void vectorAdd(__global const float * a, __global const float * b, __global float * c) { int nIndex = get_global_id(0); c[nIndex] = a[nIndex] + b[nIndex]; } CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 13
  • 14. Only for Maxus  Инициализация контекста // Создание контекста OpenCL cl_context hContext; hContext = clCreateContextFromType(0, CL_DEVICE_TYPE_GPU, 0, 0, 0); // Получение списка доступных в контексте устройств size_t nContextDescriptorSize; clGetContextInfo(hContext, CL_CONTEXT_DEVICES, 0, 0, &nContextDescriptorSize); cl_device_id * aDevices = malloc(nContextDescriptorSize); clGetContextInfo(hContext, CL_CONTEXT_DEVICES, nContextDescriptorSize, aDevices, 0); // Создание очереди команд для первого из устройств cl_command_queue hQueue; hQueue = clCreateCommandQueue(hContext, aDevices[0], 0, 0); CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 14
  • 15. Only for Maxus  Инициализация памяти // Выделение памяти на устройстве cl_mem hDevMemA, hDevMemB, hDevMemC; hDevMemA = clCreateBuffer(hContext, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, dataSize * sizeof(cl_float), pA, 0); hDevMemB = clCreateBuffer(hContext, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, dataSize * sizeof(cl_float), pB, 0); hDevMemC = clCreateBuffer(hContext, CL_MEM_WRITE_ONLY, dataSize * sizeof(cl_float), 0, 0); CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 15
  • 16. Only for Maxus  Выполнение ядра // Компиляция OpenCL-программы cl_program hProgram; hProgram = clCreateProgramWithSource(hContext, 1, sProgramSource, 0, 0); clBuildProgram(hProgram, 0, 0, 0, 0, 0); // Создание ядра cl_kernel hKernel; hKernel = clCreateKernel(hProgram, "vectorAdd", 0); // Установка параметров ядра clSetKernelArg(hKernel, 0, sizeof(cl_mem), (void *)&hDevMemA); clSetKernelArg(hKernel, 1, sizeof(cl_mem), (void *)&hDevMemB); clSetKernelArg(hKernel, 2, sizeof(cl_mem), (void *)&hDevMemC); // Выполнение ядра clEnqueueNDRangeKernel(hQueue, hKernel, 1, 0, &dataSize, 0, 0, 0, 0); // Чтение результатов в оперативную память clEnqueueReadBuffer(hContext, hDevMemC, CL_TRUE, 0, dataSize * sizeof(cl_float), pC, 0, 0, 0); CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 16
  • 17. Only for Maxus  Организация памяти Private Memory Private Private Private Private Memory Memory Memory Memory  Выделяется компилятором Work Work Work Work Item 1 Item N Item 1 Item N  Чтение и запись для work- Compute Unit 1 Compute Unit N item  Высокая скорость доступа Local Memory Local Memory Для платформы CUDA: Global/Constant Memory Data Cache  Аналог — регистровый Compute Device файл  Около 32 регистров на Global Memory work-item Compute Device Memory CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 17
  • 18. Only for Maxus  Организация памяти Local Memory Private Private Private Private Memory Memory Memory Memory  Чтение и запись для всех Work Item 1 Work Item N Work Item 1 Work Item N work-item одной группы Compute Unit 1 Compute Unit N  Высокая скорость доступа  Необходима синхронизация Local Memory Local Memory Для платформы CUDA: Global/Constant Memory Data Cache  Аналог — разделяемая Compute Device память  Около 8 КБ на work-group Global Memory (на compute unit) Compute Device Memory CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 18
  • 19. Only for Maxus  Организация памяти Global Memory Private Private Private Private Memory Memory Memory Memory  Чтение и запись Work Work Work Work Item 1 Item N Item 1 Item N  Низкая скорость доступа Compute Unit 1 Compute Unit N  Необходима синхронизация Для платформы CUDA: Local Memory Local Memory  Аналог — глобальная Global/Constant Memory Data Cache память Compute Device  Типичный объѐм — 1 ГБ Global Memory Compute Device Memory CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 19
  • 20. Only for Maxus  Работа с памятью Global Constant Local Private Host Динамическое Динамическое Динамическое — выделение выделение выделение Чтение и запись Чтение и запись Нет доступа Нет доступа Kernel Статическое Статическое Статическое — выделение выделение выделение Чтение и запись Только чтение Чтение и запись Чтение и запись CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 20
  • 21. Only for Maxus  Содержание  Введение  Модель OpenCL  Возможности OpenCL  Использование локальной памяти  Использование изображений  Средства языка  Расширения OpenCL CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 21
  • 22. Only for Maxus  Использование локальной памяти  Проблемы глобальной памяти Загрузить данные в локальную память  Большая латентность  Отсутствие кэша Синхронизация Синхронизация  Решение 1. Предварительная загрузка данных в Обработка данных в локальной памяти локальную память 2. Обработка Сохранение 3. Сохранение результата результата CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 22
  • 23. Only for Maxus  Синхронизация Точка синхронизации: void barrier(cl_mem_fence_flags flags) Особенности:  Точка синхронизации должна быть достигнута либо всеми потоками, либо ни одним из потоков в группе  Флаг является подсказкой компилятору:  CLK_LOCAL_MEM_FENCE  CLK_GLOBAL_MEM_FENCE CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 23
  • 24. Only for Maxus  Пример: свѐртка Свѐртка с ядром 9×9  Сложности:  Много обращений к глобальной памяти  Мало вычислений  Реализация:  Разбиение на группы 8×8  Каждая группа работает в локальной памяти CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 24
  • 25. Only for Maxus  Пример: свѐртка Свѐртка с ядром 9×9  Реализация:  В локальную память загружается блок 16×16  Каждый поток загружает по 4 значения #define BRD_SIZE 4 #define BLK_SIZE 16 #define GRP_SIZE 8 CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 25
  • 26. Only for Maxus  Реализация __kernel void convolution(__global float *dst, __global const float *src, __local float *block) { int gx = get_global_id(0); int gy = get_global_id(1); int lx = get_local_id(0); int ly = get_local_id(1); int bx = gx - BRD_SIZE; int by = gy - BRD_SIZE; int sid = by * SRC_STRIDE + bx; int bid = ly * BLK_SIZE + lx; block[bid] = src[sid]; block[bid + GRP_SIZE] = src[sid + GRP_SIZE]; sid += GRP_SIZE * SRC_STRIDE; bid += GRP_SIZE * BLK_SIZE; block[bid] = src[sid]; block[bid + GRP_SIZE] = src[sid + GRP_SIZE]; barrier(CLK_LOCAL_MEM_FENCE); // Вычисления в локальной памяти dst[gy * SRC_STRIDE + gx] = result; } CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 26
  • 27. Only for Maxus  Функции для работы с памятью Функция Описание event_t async_work_group_copy( Асинхронное копирование данных между локальной __local gentype *dst, и глобальной памятью. Возвращает объект для const __global gentype *src, синхронизации. size_t num_elements, event_t event) event_t async_work_group_copy( __global gentype *dst, const __local gentype *src, size_t num_elements, event_t event) void wait_group_events( Синхронизация по определѐнному событию int num_events, event_t *event_list) void prefetch( Упреждающая загрузка данных в кэш const __global gentype *p, size_t num_elements) CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 27
  • 28. Only for Maxus  Текстуры в GPGPU  Достоинства  Многомерное кэширование  Обработка обращений за границы изображения  Интерполяция на лету  Недостатки  Нормализованные данные  Нормализованные координаты CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 28
  • 29. Only for Maxus  Изображения в OpenCL  Обладают достоинствами текстур  Нормализация координат и данных опциональна  Доступные форматы — от 1 до 4 компонент на пиксель:  CL_SIGNED_INT8  CL_SIGNED_INT16  CL_SIGNED_INT32  CL_HALF_FLOAT  CL_FLOAT  Функции для работы с изображениями:  float4 read_imagef(image2d_t image, sampler_t sampler, int2 coord)  void write_imagef(image2d_t image, int2 coord, float4 color)  Возможна работа с 3D-изображениями CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 29
  • 30. Only for Maxus  Использование изображений Свѐртка 9×9  Проблемы:  Обработка краѐв  Перекрытие блоков  Решение — изображения  Кэширование  Обработка адресации вне изображения CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 30
  • 31. Only for Maxus  Пример __kernel void convolution(__write_only image2d_t *dst, __read_only image2d_t *src, __local float *block) { const sampler_t smplr = CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_NEAREST; int gx = get_global_id(0); int gy = get_global_id(1); int lx = get_local_id(0); int ly = get_local_id(1); int bx = gx - BRD_SIZE; int by = gy - BRD_SIZE; int bid = ly * BLK_SIZE + lx; block[bid] = read_imagef(src, smplr, (int2)(bx, by)).x; block[bid + GRP_SIZE] = read_imagef(src, smplr, (int2)(bx + GRP_SIZE, by)).x; bid += GRP_SIZE * BLK_SIZE; block[bid] = read_imagef(src, smplr, (int2)(bx, by + GRP_SIZE)).x; block[bid + GRP_SIZE] = read_imagef(src, smplr, (int2)(bx + GRP_SIZE, by + GRP_SIZE)).x; barrier(CLK_LOCAL_MEM_FENCE); // Вычисления в локальной памяти write_imagef(dst, (int2)(gx, gy), result); } CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 31
  • 32. Only for Maxus  Типы данных  Скалярные  bool  char, uchar, short, ushort, int, uint, long, ulong  float  size_t и другие вспомогательные типы  Векторные  Состоят из 2, 4, 8 или 16 элементов  Именуются charn, ucharn, shortn, ushortn, intn, uintn, longn, ulongn, floatn, где n — количество элементов  Доступ к элементам с помощью .xyzw, .odd, .even, .lo, .hi, .s0123456789ABCDEF  Пример uchar16 a; uchar4 b = a.s6789; float4 c; float4 d = c.zyxw; CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 32
  • 33. Only for Maxus  Функции  Математические функции из math.h языка C  Целочисленные вычисления  ugentype abs(gentype x)  ugentype abs_diff(gentype x, gentype y)  gentype hadd(gentype x, gentype y) — (x + y) ›› 1  gentype rhadd(gentype x, gentype y) — (x + y + 1) ›› 1  Вспомогательные функции для работы с float  gentype clamp(gentype x, gentype minval, gentype maxval)  gentype {min|max}(gentype x, gentype y)  gentype mix(gentype x, gentype y, gentype a) — x + (y − x) · a  gentype step(gentype edge, gentype x)  Геометрические функции  Функции чтения и записи изображений  Определение индексов work-item CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 33
  • 34. Only for Maxus  Определение индексов Функция Описание uint get_work_dim() Размерность индексного пространства size_t get_global_size(uint ind) Количество work-item в измерении ind size_t get_global_id(uint ind) Индекс work-item в измерении ind size_t get_local_size(uint ind) Размер work-group в измерении ind size_t get_local_id(uint ind) Локальный индекс work-item внутри work-group в измерении ind size_t get_num_groups(uint ind) Количество work-group в измерении ind size_t get_group_id(uint ind) Индекс work-group в измерении ind CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 34
  • 35. Only for Maxus  Содержание  Введение  Модель OpenCL  Возможности OpenCL  Расширения OpenCL CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 35
  • 36. Only for Maxus  Ограничения в OpenCL 1.0  Не поддерживается рекурсия  Минимальный объѐм записываемых данных — 32 бита  Отсутствуют вычисления с двойной точностью  Не поддерживается запись в 3D-изображения  Отсутствуют указатели на функции  Указатели на указатели не могут быть параметрами  Битовые поля не поддерживаются  Не поддерживаются динамические структуры данных CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 36
  • 37. Only for Maxus  Расширения OpenCL Название Описание cl_khr_fp64 Вычисления с двойной точностью cl_khr_select_fprounding_mode Выбор режимов округления cl_khr_global_int32_base_atomics, Атомарные функции для работы с 32-битыми целыми в cl_khr_global_int32_extended_atomics глобальной памяти cl_khr_local_int32_base_atomics, Атомарные функции для работы с 32-битыми целыми в cl_khr_local_int32_extended_atomics локальной памяти cl_khr_int64_base_atomics, Атомарные функции для работы с 64-битыми целыми в cl_khr_int64_extended_atomics глобальной и локальной памяти cl_khr_3d_image_writes Запись в 3D-изображение cl_khr_byte_addressable_store Запись с побайтовой адресацией cl_khr_fp16 Вычисления с половинной точностью CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 37
  • 38. Only for Maxus  Атомарные функции  Типы памяти:  Локальная  Глобальная  Типы данных:  32-разрядные целые  64-разрядные целые  Набор функций:  Базовый  int atom_{add|sub|xchg}(int *p, int val)  int atom_{inc|dec}(int *p)  int atom_cmpxchg(int *p, int cmp, int val)  Расширенный  int atom_{min|max}(int *p, int val)  int atom_{and|or|xor}(int *p, int val) CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 38
  • 39. Only for Maxus  Выводы  Позволяет распараллеливать задачи обработки изображений и видео  Поддержка большого количества устройств  GPU  CPU  PS3, XBOX  Embedded profile  Один код для всех устройств  Сходство с CUDA  Реализации ожидаются в ближайшее время  NVIDIA  AMD  Intel CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 39
  • 40. Only for Maxus  Список литературы 1. http://www.khronos.org/registry/cl/ 2. http://www.nvidia.com/object/cuda_opencl.html 3. http://www.nvidia.com/object/cuda_home.html CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 40
  • 41. Only for Maxus  Вопросы ? CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 41
  • 42. Only for Maxus  Лаборатория компьютерной графики и мультимедиа Видеогруппа это:  Выпускники в аспирантурах Англии, Франции, Швейцарии (в России в МГУ и ИПМ им. Келдыша)  Выпускниками защищено 5 диссертаций  Наиболее популярные в мире сравнения видеокодеков  Более 3 миллионов скачанных фильтров обработки видео CS MSU Graphics & Media Lab (Video Group) www.compression.ru/video/ 42