SlideShare a Scribd company logo
Обзор 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

More Related Content

PDF
Обзор новинок в области GPGPU
PDF
Методы оптимизации вычислений на CPU
PDF
Быстрое начало работы с VTune. Обзор новинок DSP.Super-Resolution для ToF-камер
PDF
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
PPTX
Параллельное программирование на современных видеокартах
PDF
Расширения h264 и предобзор h265
PDF
Программирование на медиапроцессорах Philips Nexperia
PDF
Некоторые методы проектирования и оптимизации кода
Обзор новинок в области GPGPU
Методы оптимизации вычислений на CPU
Быстрое начало работы с VTune. Обзор новинок DSP.Super-Resolution для ToF-камер
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
Параллельное программирование на современных видеокартах
Расширения h264 и предобзор h265
Программирование на медиапроцессорах Philips Nexperia
Некоторые методы проектирования и оптимизации кода

Viewers also liked (10)

PPT
Pagerank
PDF
A history of PageRank from the numerical computing perspective
PDF
PageRank and Related Methods
PPT
Lec5 Pagerank
PPTX
Google Pagerank 101 Definition
PPTX
Page rank algorithm
PDF
The Google Pagerank algorithm - How does it work?
PDF
Google PageRank
PPT
Pagerank Algorithm Explained
PPTX
PageRank Algorithm In data mining
Pagerank
A history of PageRank from the numerical computing perspective
PageRank and Related Methods
Lec5 Pagerank
Google Pagerank 101 Definition
Page rank algorithm
The Google Pagerank algorithm - How does it work?
Google PageRank
Pagerank Algorithm Explained
PageRank Algorithm In data mining
Ad

Similar to Обзор OpenCL (20)

PDF
Применение современных графических процессоров в области компьютерного зрения
PDF
Обзор открытых библиотек в области обработки изображений и компьютерного зрения
PDF
Применение современных графических процессоров для обработки видео
PDF
Обзор процессоров Phillips Nexperia
PDF
Обзор некоторых современных SoC
PDF
Архитектура и программирование на fpga
PDF
Декодирование видео на GPU
PPTX
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
PPTX
Доклад на Highload-2012
PPTX
Gpudigitallab experimental studio
PPTX
СУПЕРКОМПЬЮТЕРНЫЕ ТЕХНОЛОГИИ
PPTX
СУПЕРКОПЬЮТЕРНЫЕ ТЕХНОЛОГИИ
PDF
вычислительное устройство, компьютер
PPT
20110919 computer graphics_galinsky_lecture01_intro
PPT
2009 10-31 есть ли жизнь после mpi
PPT
Cuda, OpenCL
PDF
Обзор библиотеки Boost
PPTX
Доклад в Mail.ru 01.11.12
PPTX
Суперкомпьютеры сегодня и завтра архитектура, проблемы, перспективы (Андрей С...
PPTX
Hpc 2.26.03.2013.
Применение современных графических процессоров в области компьютерного зрения
Обзор открытых библиотек в области обработки изображений и компьютерного зрения
Применение современных графических процессоров для обработки видео
Обзор процессоров Phillips Nexperia
Обзор некоторых современных SoC
Архитектура и программирование на fpga
Декодирование видео на GPU
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Доклад на Highload-2012
Gpudigitallab experimental studio
СУПЕРКОМПЬЮТЕРНЫЕ ТЕХНОЛОГИИ
СУПЕРКОПЬЮТЕРНЫЕ ТЕХНОЛОГИИ
вычислительное устройство, компьютер
20110919 computer graphics_galinsky_lecture01_intro
2009 10-31 есть ли жизнь после mpi
Cuda, OpenCL
Обзор библиотеки Boost
Доклад в Mail.ru 01.11.12
Суперкомпьютеры сегодня и завтра архитектура, проблемы, перспективы (Андрей С...
Hpc 2.26.03.2013.
Ad

More from MSU GML VideoGroup (20)

PDF
Обзор алгоритмов генерации ракурсов для многоракурсных видео
PDF
Некоторые методы сегментации видео
PDF
Обзор методов сравнения фильмов
PDF
Обзор методов оценки True-motion
PDF
Методы цветокоррекции стереовидео
PDF
Некоторые методы сопоставления стерео
PDF
Некоторые алгоритмы многомерной обработки изображений
PDF
Некоторые методы обнаружения артефактов 3D-видео
PDF
Способы построения и оценки карт салиентности
PDF
Обзор методов сопоставления шаблона и изображения
PDF
Способы построения saliency map
PDF
Research & Development методы, проблемы и ошибки
PDF
Обзор алгоритмов трекинга объектов
PDF
Некоторые методы генерации многоракурсных изображений на основе карты глубины
PDF
Использование областей перекрытия в задаче сегментации видео
PDF
Обзор докладов конференции IC3D 2012
PDF
Обзор стандарта H.265/HEVC
PDF
Алгоритмы для задачи матирования
PDF
Исправление различий резкости в 3D видео
PDF
Методы повышения визуального качества восстановленного фона (часть 2)
Обзор алгоритмов генерации ракурсов для многоракурсных видео
Некоторые методы сегментации видео
Обзор методов сравнения фильмов
Обзор методов оценки True-motion
Методы цветокоррекции стереовидео
Некоторые методы сопоставления стерео
Некоторые алгоритмы многомерной обработки изображений
Некоторые методы обнаружения артефактов 3D-видео
Способы построения и оценки карт салиентности
Обзор методов сопоставления шаблона и изображения
Способы построения saliency map
Research & Development методы, проблемы и ошибки
Обзор алгоритмов трекинга объектов
Некоторые методы генерации многоракурсных изображений на основе карты глубины
Использование областей перекрытия в задаче сегментации видео
Обзор докладов конференции IC3D 2012
Обзор стандарта H.265/HEVC
Алгоритмы для задачи матирования
Исправление различий резкости в 3D видео
Методы повышения визуального качества восстановленного фона (часть 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