SlideShare ist ein Scribd-Unternehmen logo
1 von 52
Downloaden Sie, um offline zu lesen
Методы ускорения
программ и алгоритмов

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



                Содержание
           Введение
               Тестирование производительности
           Архитектура современных процессоров
               Особенности
               Типичное устройство
               Кэш
           Оптимизация
               Выбор алгоритмов
               Ветвления
               Память
               Циклы
               Медленные операции
               Вещественные вычисления
           SIMD
           Многопоточность


                                                  2
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



              Тезисы оптимизации
           Нельзя оптимизировать программу/функцию не
            запуская ее
           Необходимо тестирование на различных машинах
           Один из возможных путей оптимизации 
            удаление дополнительных возможностей
           Отладочные сборки программы не пригодны для
            тестирования производительности
           Оптимизация далеко не всегда требует написание
            ассемблерного кода
           Тестирование должно быть частью процесса
            разработки

                                                             3
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



                Методы ускорения
           Оптимизация с учетом особенной
            конкретной архитектуры
               Векторные инструкции
           Распараллеливание задачи
               Hyper-Threading
               Многоядерные процессоры
           Применение специализированных
            процессоров
               GPU
               nVidia CUDA, Intel Larabbee


                                              4
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



                Процесс оптимизации

            Создание            Отыскание          Определение         Модификация
              теста          «горячих» точек         причины            программы



                                                   Тестирование
                                                производительности



      «Горячие» точки (hotspots):
        места наибольшей активности программы или функции;
        под активностью может пониматься:
               время, затрачиваемое на исполнение некоторого участка кода,
               количество неверно предсказанных ветвлений,
               количество промахов кэша;
           показывают области требующие оптимизации.


                                                                                     5
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



                Процесс оптимизации

            Создание                Отыскание         Определение       Модификация
              теста              «горячих» точек        причины          программы



                                                      Тестирование
                                                   производительности



      Инструментарий:
        средства измерения времени исполнения программы/функции;
        программный профайлер:
               sampling,
               instrumenting;
           оптимизирующий компилятор.



                                                                                      6
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 
             Тестирование
             производительности

      Свойства теста производительности:
       Повторяемость результатов

       Отражение характерного поведения программы

       Простота использования

       Адекватность результатов

       Совмещение с тестирование функциональности

       Измерение времени исполнения

       Полное покрытие программы

       Точность измерений




                                                     7
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 
             Измерение времени
             исполнения
      Таймер       Точность Максимум        Пример использования
      Функции      ±1 c        73 года      time_t start, elapsed;
      библиотеки                            Start = time(NULL);
      языка С                               // некоторый код
                                            elapsed = time(NULL) – start;

      Windows      ±10 мc      49 дней      DWORD start, elapsed;
      multimedia                            Start = timeGetTime();
      timer                                 // некоторый код
                                            elapsed = timeGetTime() – start;




                                                                               8
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 
             Измерение времени
             исполнения
      Таймер       Точность Максимум        Пример использования
      Такты CPU    ±1 нc       4,29 с       DWORD start, elapsed;
      (32 бита)    (1 ГГц)                  _asm { RDTSC
                                                    MOV start, eax }
                                            // некоторый код
                                            _asm { RDTSC
                                                    SUB eax, start
                                                    MOV elapsed, eax }
      Такты CPU    ±1 нc       580 лет      LARGE_INTEGER start, end;
      (64 бита)    (1 ГГц)                  __int64 elapsed;
                                            QueryPerformanceCounter(&start);
                                            // некоторый код
                                            QueryPerformanceCounter(&end);
                                            elapsed = end.QuadPart –
                                                start.QuadPart;

                                                                               9
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



                Outline
           Введение
               Тестирование производительности
           Архитектура современных процессоров
               Особенности
               Типичное устройство
               Кэш
           Оптимизация
               Выбор алгоритмов
               Ветвления
               Память
               Циклы
               Медленные операции
               Вещественные вычисления
           SIMD
           Многопоточность


                                                  10
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 
              Особенности архитектуры
              современных процессоров

           Конвейерная обработка инструкций
           CISC на уровне машинных инструкций, но
            RISC на уровне микроархитектуры
           Суперскалярная архитектура
           Выполнение команд вне очереди (out-of-
            order execution)
           Большое время доступа к основной памяти
            и наличие быстродействующего кэша
           Наличие набора векторных инструкций
           Многоядерность

                                                      11
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



             Схема процессора
                                                   Выборка инструкций и
                Предсказание ветвлений
                                                    предекодирование



                                                    Очередь иструкций

                                                                                                  Кэш второго уровня

                                                      Декодирование



                                               Буфер инструкций (возможно
                                                 исполнение вне очереди)



                                                      Планировщик



                        ALU
                                           ALU             ALU
                       Branch
                                          FP Add        FP Multiply         Load            Store
                     MMX/SSE/FP
                                         MMX/SSE         MMX/SSE
                        Move



                                                                             Кэш первого уровня



                                                                                                                       12
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 
                 Архитектура многоядерного
                 процессора
            Hyper-Threading                                       Intel Core Duo, Core 2 Duo
            Architectural state   Architectural state             Architectural state   Architectural state
                       Execution engine                            Execution engine     Execution engine
               Local APIC            Local APIC                       Local APIC           Local APIC
                     Кэш второго уровня                                    Кэш второго уровня
                 Интерфейс с шиной данных                              Интерфейс с шиной данных



             Intel Core 2 Quad
             Architectural state      Architectural state   Architectural state    Architectural state
              Execution engine         Execution engine     Execution engine        Execution engine
                  Local APIC               Local APIC          Local APIC               Local APIC
                        Кэш второго уровня                           Кэш второго уровня
                   Интерфейс с шиной данных                      Интерфейс с шиной данных



                                                                                                              13
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



                       Устройство кэша L1
                                                                Размер строки  64 байта
                         Каналы (ways)                          Pentium 4, Xeon
                       0    1    2     3                             объем кэша  816 КБ
                   0
                                                                     48 каналов, 32 ряда
                   1                       1 набор (set)
                   2                                            Core, Pentium M
                   3                                                  объем кэша  32 КБ
    Ряды (rows)




                                                                  
                   4                       1 строка (line)
                   5                                                 8 каналов, 64 ряда




                  30
                  31




                                                                                             14
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 
             Производительность
             инструкций
                                                                         Пропускная
      Инструкция                                           Латентность   способность
      Сложение, вычитание, логические операции (AND,       0,5           0,5
      OR, XOR), сравнение, переход, доступ к памяти
      Работа со стеком, логические сдвиги, SIMD-доступ к   1             1
      памяти, 64-битные целочисленные SIMD-операции
      (MMX, за исключением EMMS); модуль, сравнение,
      сложение и вычитание для вещественных чисел
      128-битные целочисленные SIMD-операции; SIMD-        2             2
      операции над вещественными числами одинарной и
      двойной точности за исключением деления и корня
      Целочисленное умножение                              15            4
      Целочисленное деление; деление и квадратный          23            23
      корень для вещественных чисел одинарной точности
      (32 бита)

                                                                                       15
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 
             Производительность
             инструкций
                                                                        Пропускная
      Инструкция                                          Латентность   способность
      SIMD деление и квадратный корень для                32            32
      вещественных чисел одинарной точности
      Деление и квадратный корень для вещественных        38            38
      чисел двойной точности (64 бита)
      Деление и квадратный корень для вещественных        43            43
      чисел повышенной точности (80 бит)
      SIMD деление и квадратный корень для                62            62
      вещественных чисел двойной точности
      Трансцендентные функции (синус, косинус, тангенс,   130170       130170
      арктангенс)




                                                                                      16
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



                Outline
           Введение
               Тестирование производительности
           Архитектура современных процессоров
               Особенности
               Типичное устройство
               Кэш
           Оптимизация
               Выбор алгоритмов
               Ветвления
               Память
               Циклы
               Медленные операции
               Вещественные вычисления
           SIMD
           Многопоточность


                                                  17
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



             Алгоритмы

      Основные характеристики алгоритмов:
       Вычислительная сложность

       Инструкции, требуемые для
        реализации
       Объем используемой памяти

       Характер доступа к памяти

       Зависимости по данным


                                            18
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 
              Зависимости по данным и
              параллелизм инструкций
                                0       5          10         15         20   25
  Пример 1:
  a = u * v;                                a=u∙v
  b = w * x;                                          b=w∙x
  C = y * z;
                                                                   c=y∙z

                          Пропускная способность              Латентность


                                0       5          10         15         20   25       30   35
  Пример 2:
  a = (w * x) * (y * z);                 t1 = w ∙ x
                                                      t2 = y ∙ z
                                                                              a = t1 ∙ t2


                                                        Зависимость по
                                                           данным


                                                                                            19
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 
               Предсказание условных
               переходов
           Предсказываемый процессором условный переход:
      for (int i = 0; i < 100; ++i) {
          if (i % 2 == 0)
              doEven();
          else
              doOdd();
      }

           Переход случаен  сложно предсказуем:
      for (int i = 0; i < 100; ++i) {
          side = flipCoin();
          if (side == HEADS)
              ++numHeads;
          else
              ++numTails;
      }


                                                            20
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



                Виды переходов
           Условные переходы, исполняемые впервые
               Переходы вперед
               Переходы назад
           Условные переходы, которые уже
            исполнялись
           Вызов функции и возврат из функции
           Косвенные вызовы функций и переходы
            (указатели на функции и таблицы
            переходов)
           Безусловные переходы

                                                     21
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 
                Удаление ветвлений с
                помощью инструкции CMOV

           Код использующий условный переход
               На С
                if (val > 255)
                    val = 255;
               Аналог на ассемблере
                cmp val, 255
                jle skipSet
                mov val, 255
            skipSet:
           Код использующий инструкцию CMOV
                mov     eax,   val
                mov     ebx,   255
                cmp     eax,   ebx
                cmovg   eax,   ebx
                mov     val,   eax
               Быстрее в 2,5 раза в случае случайного перехода
               Эквивалентны при 1 неверно предсказанном переходе из 100

                                                                           22
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 
                  Удаление ветвлений при
                  использовании SIMD

           Использование бинарных масок
          val:                        const:                  mask:
            240   258   130   262 >   255   255   255   255 = FFFF FFFF FFFF FFFF


     result = (val & ~mask) | (const & mask);

           Вычисление минимума и максимума
          val:                        const:                      result:
min(        240   258   130   262 ,   255   255   255   255 ) =   240   255   130   255




                                                                                          23
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



             Удаление ветвлений
      for (int i = 0; i < size; ++i) {
          alpha = getAlpha(src[i]);
          if (alpha == 255)
              dst[i] = src[i];
          else if (alpha != 0)
              dst[i] = blend(src[i], dst[i], alpha);
      }




                                                       24
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



             Таблицы переходов
      switch (val) {                        if (val == 'A') {
          case 'A':                             // …
              // вероятность      95%       }
          break;                            else if (val == 'B') {
          case 'B':                             // …
              // вероятность      4%        }
          break;                            else switch (val) {
          case 'C':                             case 'C':
              // вероятность      0,5%               // …
          break;                                break;
          case 'D':                             case 'D':
              // вероятность      0,5%               // …
          break;                                break;
      }                                     }



                                                                     25
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



              Использование кэша

           Обязательная загрузка (compulsory
            load)
           Загрузка из-за нехватки объема кэша
            (capacity load)
           Загрузка вследствие конфликта
            (conflict load)
           Эффективность кэша (cache efficiency)

                                                    26
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 
              Программная
              предвыборка
      Ассемблерная инструкция Описание
      PREFETCHNTA                   Выборка данных для единичного доступа в
                                    режиме чтения
      PREFETCH0                     Выборка в кэши всех уровней для чтения/записи
      PREFETCH1                     Выборка в кэши L2 и L3, но не L1
      PREFETCH2                     Выборка только в кэш третьего уровня

      Пример с использованием встраиваемых функций:
            for (int i = 0; i < size; ++i) {
                array[i] = fn(array[i]);
                _mm_prefetch(array[i + 16], MM_HINT_T0);
            }


                                                                                    27
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



               Выравнивание данных
           Доступ к данным, попадающим в различные строки кэша
            вызывает дополнительные накладные расходы
           Большинство современных векторных инструкций не
            работают с невыровненными данными

      Тип данных                             Выравнивание
      1 байт, 8 бит, BYTE                    Произвольное выравнивание
      2 байта, 16 бит, WORD                  2 байта
      4 байта, 32 бита, DWORD                4 байта
      8 байт, 64 бита, QWORD                 8 байт
      10 байт, 80 бит, (вещественное число   16 байт
      расширенной точности)
      16 байт, 128 бит                       16 байт

                                                                         28
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 
              Оптимизация
              использования памяти
           Применение алгоритмов требующих меньшее
            количество памяти
           Повышение эффективности использования кэша
           Предварительная загрузка данных в кэш
           Применение инструкций, позволяющих избежать
            накладных расходов RFO
           Устранение конфликтов кэша
           Устранение проблем связанных с нехваткой
            объема кэша
           Увеличение работы проводимых над одними
            данным


                                                          29
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



             Циклы
      Достоинства                           Недостатки
      Требуют меньшее количество            Привносят накладные расходы в виде
      инструкций                            инструкций, реализующих цикл
      Нет необходимости повторно            Добавляется один неверно
      декодировать инструкции               предсказанный переход
      Процессор может автоматически         Циклы вносят дополнительные
      разворачивать циклы                   зависимости по данным
      Компилятор может оптимизировать       Без SIMD-оптимизации вычисления,
      циклы за счет использования SIMD-     которые могли бы выполняться
      инструкций                            параллельно, выполняются
                                            последовательно




                                                                                 30
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



             Разворачивание циклов
      Исходный цикл:                        Вариант 2:
      sum = 0;                              a = b = c = d = 0;
      for (int i = 0; i < 16; ++i)          for (int i = 0; i < 16; i += 4) {
          sum += array[i];                      a += array[i];
                                                b += array[i + 1];

      Вариант 1:                                c += array[i + 2];
                                                d += array[i + 3];
      sum = 0;                              }
      for (int i   = 0; i < 16; i += 4) {   sum = a + b + c + d;
          sum +=   array[i];
          sum +=   array[i + 1];
          sum +=   array[i + 2];
          sum +=   array[i + 3];
      }




                                                                                31
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



                          Разворачивание циклов

                                                         Единственная возможная цель
                          Развернуть цикл и смешать
                                                            разворачивания цикла —
                          инструкции для достижения
                                                         избавление от зависимостей по
       Длина тела цикла




                            большего параллелизма
                                                                    данным




                                                         Развернуть цикл, избавиться от
                          Полностью развернуть цикл         зависимостей по данным,
                                                           возможно, применить SIMD



                                            Количество итераций

                                                                                          32
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



               Инварианты цикла
           Инвариантные арифметические выражения
             for (int x = 0; x < length; ++x)
                 array[x] = x * val / 3;
           Инвариантные вызовы функций
             for (int x = 0; x < length; ++x)
                 array[x] += x * val * foo(y) / 3;
           Инвариантные ветвления
             for (int i = 0; i < size; ++i)
                 if (blend == 255)
                     dest[i] = src1[i];
                 else if (blend == 0)
                     dest[i] = src2[i];
                 else
                     dest[i] = (src1[i] * blend +
                                src2[i] * (255 - blend)) / 255;



                                                                  33
CS MSU Graphics & Media Lab (Video Group)
FIX for
 Only ME
 Maxus 



             Loop fusion
     Исходный код:                              Преобразованный вариант:
     for (int   i   = 0;   i   < length; ++i)   for (int i = 0; i < length; ++i) {
         x[i]   =   a[i]   +   b[i];                x[i] = a[i] + b[i];
     for (int   i   = 0;   i   < length; ++i)       y[i] = b[i] + c[i];
         y[i]   =   b[i]   +   c[i];            }




                                                                                     34
CS MSU Graphics & Media Lab (Video Group)
FIX for
 Only ME
 Maxus 



             Unroll and jam
     for (int i = 0; i < h; ++i) {             for (int i = 0; i < h / n; i += n) {
         t = c[i];                                 for (int j = 0; j < w; ++j) {
         for (int j = 0; j < w; ++j) {                 c[i] += a[i][j] * b[j];
             t += a[i][j] * b[j];                      c[i + 1] += a[i + 1][j] * b[j];
         }                                             // …
         c[i] = t;                                     c[i + n - 1] +=
     }                                                      a[i + n - 1][j] * b[j];
                                                   }
     for (int i = 0; i < h / n; i += n) {      }
         for (int j = 0; j < w; ++j) {
             c[i] += a[i][j] * b[j];
         }
         for (int j = 0; j < w; ++j) {
             c[i + 1] += a[i + 1][j] * b[j];
         }
         // …
         for (int j = 0; j < w; ++j) {
             c[i + n - 1] +=
                 a[i + n - 1][j] * b[j];
         }
     }




                                                                                         35
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 
                 Memory Address
                 Dependencies

            1.
                    Прочитать данные
                      по адресу src                     Типичный цикл:
                                                 for (i = 0; i < n; ++i) {
            2.    Провести вычисления
                                                     *dst = f(*src);
                                                     ++dst;
                                                     ++src;
                   Записать данные по
            3.         адресу dst                }

                 Вычислить новые адреса
                                           Нет
                                                        Проблемы:
            4.         src и dst
                                                          Неизвестный адрес
                                                           для загрузки данных
            5.   Увеличить счѐтчик цикла
                                                          Неизвестный адрес
                                                           для сохранения
            6.       Цикл закончен?                        данных

                                                                                 36
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



              Медленные инструкции
           Инструкции с большой задержкой
           Инструкции с маленькой пропускной
            способностью
           Ожидание готовности операндов
           Отсутствие свободных слотов
            выполнения
           Инструкции, останавливающие
            исполнение вне очереди
                                                37
CS MSU Graphics & Media Lab (Video Group)
FIX for
 Only ME
 Maxus 



              Lookup Tables
          Lookup-таблица должна быть организована так, чтобы
           полностью находиться в кэше
          Таблица должна быть как можно меньшего размера
          Талица должна заменять как можно больше
           вычислений
          Пример: преобразование ARGBAYYY




                                                                38
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



                 Floating point
                                                       Производительность деления в тактах
                  Размер,
      Точность    бит       Диапазон                   FDIV      DIVSS/DIVSD   DIVPS/DIVPD
      Single      32        1,18·10-383,4·1038        23        22            32
      Double      64        2,23·10-3081,79·10308     38        35            62
      Extended    80        3,37·10-49321,18·104932   43                     



           Режимы приведения к целому:
               Округление к ближайшему целому
               Округление «вниз»
               Округление «вверх»
               Отбрасывание дробной части

                                                                                             39
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



                   SIMD
                    Возможна
               оптимизация за счет
  Нет                 SIMD?                 Да                         Точность


                                      Целочисленные                            Применима ли
                                     или вещественные                          целочисленная
                                       вычисления?                              арифметика?
                                                                                                      Нет

                 Целочисленные          Вещественные                                Да
                                                              Почему                              Применима ли
                                                           вещественная                            одинарная
                                                           арифметика?                              точность?
                                                                                                                          Нет

                                                                                                      Да
                                                                                Использовать      Использовать
                                                        Производительность     целочисленную       одинарную
                                                                                 арифметику         точность




            Преобразование данных для                                                                       Завершение
                                              Написание SIMD-кода            Оптимизация памяти
               использования SIMD                                                                           оптимизации




                                                                                                                           40
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 
                             Использование SIMD-
                             инструкций


                                                  Встраиваемые
                              Ассемблер
                                                функции (intrinsics)
        Производительность




                                                                        Автоматическая
                                                                         векторизация

                                                  Специальные
                                                  контейнеры и
                                              алгоритмы для С++ и
                                                      т. д.




                                    Простота программирования/переносимость


                                                                                         41
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



                MMX, SSE, SSE2
           MMX
               64-битные регистры
               Работа с упакованными байтами, словами и двойными словами
           SSE (Streaming SIMD Extensions)
               128-битные регистры
               Работа с упакованными вещественными числами одинарной
                точности
               Управление кэшированием
               Упакованные 64-битные целые
           SSE2
               Работа с упакованными вещественными числами двойной
                точности
               Аналоги инструкций MMX для 128-битных регистров
               «Перемешивание» данных


                                                                            42
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



                SSE3, SSSE3, SSE4.1
           SSE3
               «Горизонтальные» вычисления
               Преобразование к целому (x87)
               Поддержка синхронизации потоков
           SSSE3 (Supplemental Streaming SIMD Extensions 3)
               Вычисление модуля
               Побайтовое «перемешивание»
           SSE4.1
               Скалярное произведение
               SAD



                                                               43
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



                Outline
           Введение
               Тестирование производительности
           Архитектура современных процессоров
               Особенности
               Типичное устройство
               Кэш
           Оптимизация
               Выбор алгоритмов
               Ветвления
               Память
               Циклы
               Медленные операции
               Вещественные вычисления
           SIMD
           Многопоточность


                                                  44
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



             Многопоточность
                                                                    Ts

       Последовательное выполнение          (1  p)Ts                    pTs


                                                        Tp




                                                         Overhead
                                                                     pTs 2
       Параллельное выполнение              (1  p)Ts
                                                                     pTs 2


                                              Tp
              Tp  1  p Ts  s  c
                               pT                                   p
                                                    1 p 
                                N             Ts                    N


                                                                               45
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



                Многопоточность
           Идеи применения многопоточности
               Распараллеливание задач, занимающих
                существенное время
               Сбалансированность потоков
               Синхронизация
               Минимизация объема «общей» памяти
               Определение количества потоков
           Методы распараллеливания задач
               Functional decomposition
               Domain decomposition

                                                      46
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



             Domain decomposition




                                            47
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



                Основные проблемы
           Накладные расходы на управление
            потоками
           Короткие циклы
           False-sharing
           Пропускная способность памяти
           Эффективность использования кэша
           Накладные расходы на синхронизацию
               Spin-waits
           Processor affinity
               Cache ping-pong

                                                 48
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



               OpenMP
           Исходный вариант
      void serialApplyFoo(float a[], size_t n) {
          for (size_t i = 0; i < n; ++i)
              foo(a[i]);
      }
           Использование OpenMP
      void parallelApplyFoo(float a[], size_t n) {
          opm_set_num_threads(NUM_THREADS);
          #pragma omp parallel for shared(a)
          for (size_t i = 0; i < n; ++i)
              foo(a[i]);
      }




                                                     49
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



             Threading Building Blocks
      class ApplyFoo {
          float *const m_a;
      public:
          void operator() (const blocked_range<size_t> &r) const {
              float *a = m_a;
              for (size_t i = r.begin(); i != r.end(); ++i)
                  foo(a[i]);
          }
          ApplyFoo(float a[]) : m_a(a) {}
      };

      void parallelApplyFoo(float a[], size_t n) {
          parallel_for(blocked_range<size_t>(0, n, grainSize),
              ApplyFoo(a));
      }


                                                                     50
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



             Способ разбиения




      void parallelApplyFoo(float a[], size_t n) {
          parallel_for(blocked_range<size_t>(0, n), ApplyFoo(a),
              auto_partitioner());
      }


                                                                   51
CS MSU Graphics & Media Lab (Video Group)
Only for
 Maxus 



               Список литературы
           The Software Optimization Cookbook, Intel
            Press, 2002
           Concepts of High Performance Computing,
            Georg Hager, Gerhard Wellein, 2008
           Intel 64 and IA-32 Architectures Optimization
            Reference Manual, 2007,
            http://developer.intel.com/design/processor/manuals/248966.pdf
           Intel Threading Building Blocks,
            http://threadingbuildingblocks.org/
           OpenMP, http://www.openmp.org/


                                                                             52
CS MSU Graphics & Media Lab (Video Group)

Weitere ähnliche Inhalte

Was ist angesagt?

Распознавание и удаление субтитров
Распознавание и удаление субтитровРаспознавание и удаление субтитров
Распознавание и удаление субтитровMSU GML VideoGroup
 
Обзор открытых библиотек в области обработки изображений и компьютерного зрения
Обзор открытых библиотек в области обработки изображений и компьютерного зренияОбзор открытых библиотек в области обработки изображений и компьютерного зрения
Обзор открытых библиотек в области обработки изображений и компьютерного зренияMSU GML VideoGroup
 
платформа научных симуляторов Gpu digital lab
платформа научных симуляторов Gpu digital labплатформа научных симуляторов Gpu digital lab
платформа научных симуляторов Gpu digital labOleg Gubanov
 
Анализ параметров кодеков
Анализ параметров кодековАнализ параметров кодеков
Анализ параметров кодековMSU GML VideoGroup
 
Программирование на медиапроцессорах Philips Nexperia
Программирование на медиапроцессорах Philips NexperiaПрограммирование на медиапроцессорах Philips Nexperia
Программирование на медиапроцессорах Philips NexperiaMSU GML VideoGroup
 
Распознование телевизионной рекламы
Распознование телевизионной рекламыРаспознование телевизионной рекламы
Распознование телевизионной рекламыMSU GML VideoGroup
 
System Center 2012 licensing
System Center 2012 licensingSystem Center 2012 licensing
System Center 2012 licensingMUK
 
Обзор стандарта H.265/HEVC
Обзор стандарта H.265/HEVCОбзор стандарта H.265/HEVC
Обзор стандарта H.265/HEVCMSU GML VideoGroup
 
Обзор процессоров Phillips Nexperia
Обзор процессоров Phillips NexperiaОбзор процессоров Phillips Nexperia
Обзор процессоров Phillips NexperiaMSU GML VideoGroup
 
Обзор методов сопоставления шаблона и изображения
Обзор методов сопоставления шаблона и изображенияОбзор методов сопоставления шаблона и изображения
Обзор методов сопоставления шаблона и изображенияMSU GML VideoGroup
 
9.1 resource analysis.templ
9.1   resource analysis.templ9.1   resource analysis.templ
9.1 resource analysis.templNatalia Odegova
 
Обзор методов оценки True-motion
Обзор методов оценки True-motionОбзор методов оценки True-motion
Обзор методов оценки True-motionMSU GML VideoGroup
 
Некоторые алгоритмы многомерной обработки изображений
Некоторые алгоритмы многомерной обработки изображенийНекоторые алгоритмы многомерной обработки изображений
Некоторые алгоритмы многомерной обработки изображенийMSU GML VideoGroup
 
Конструкция и компоновка персонального компьютера
Конструкция и компоновка персонального компьютераКонструкция и компоновка персонального компьютера
Конструкция и компоновка персонального компьютераAlexandr Konfidentsialno
 
Техническое обслуживание персонального компьютера
Техническое обслуживание персонального компьютераТехническое обслуживание персонального компьютера
Техническое обслуживание персонального компьютераAlexandr Konfidentsialno
 
Архитектура электронно-вычислительных машин (ЭВМ) и систем
Архитектура электронно-вычислительных машин (ЭВМ) и системАрхитектура электронно-вычислительных машин (ЭВМ) и систем
Архитектура электронно-вычислительных машин (ЭВМ) и системAlexandr Konfidentsialno
 
TMPA Pakulin: Dynamic Verification of Hybrid Systems
TMPA Pakulin: Dynamic Verification of Hybrid SystemsTMPA Pakulin: Dynamic Verification of Hybrid Systems
TMPA Pakulin: Dynamic Verification of Hybrid SystemsIosif Itkin
 
Обзор алгоритмов машинного обучения
Обзор алгоритмов машинного обученияОбзор алгоритмов машинного обучения
Обзор алгоритмов машинного обученияMSU GML VideoGroup
 
Monitoring and Load testing
Monitoring and Load testingMonitoring and Load testing
Monitoring and Load testingFedor Malyshkin
 

Was ist angesagt? (20)

Распознавание и удаление субтитров
Распознавание и удаление субтитровРаспознавание и удаление субтитров
Распознавание и удаление субтитров
 
Обзор открытых библиотек в области обработки изображений и компьютерного зрения
Обзор открытых библиотек в области обработки изображений и компьютерного зренияОбзор открытых библиотек в области обработки изображений и компьютерного зрения
Обзор открытых библиотек в области обработки изображений и компьютерного зрения
 
9270
92709270
9270
 
платформа научных симуляторов Gpu digital lab
платформа научных симуляторов Gpu digital labплатформа научных симуляторов Gpu digital lab
платформа научных симуляторов Gpu digital lab
 
Анализ параметров кодеков
Анализ параметров кодековАнализ параметров кодеков
Анализ параметров кодеков
 
Программирование на медиапроцессорах Philips Nexperia
Программирование на медиапроцессорах Philips NexperiaПрограммирование на медиапроцессорах Philips Nexperia
Программирование на медиапроцессорах Philips Nexperia
 
Распознование телевизионной рекламы
Распознование телевизионной рекламыРаспознование телевизионной рекламы
Распознование телевизионной рекламы
 
System Center 2012 licensing
System Center 2012 licensingSystem Center 2012 licensing
System Center 2012 licensing
 
Обзор стандарта H.265/HEVC
Обзор стандарта H.265/HEVCОбзор стандарта H.265/HEVC
Обзор стандарта H.265/HEVC
 
Обзор процессоров Phillips Nexperia
Обзор процессоров Phillips NexperiaОбзор процессоров Phillips Nexperia
Обзор процессоров Phillips Nexperia
 
Обзор методов сопоставления шаблона и изображения
Обзор методов сопоставления шаблона и изображенияОбзор методов сопоставления шаблона и изображения
Обзор методов сопоставления шаблона и изображения
 
9.1 resource analysis.templ
9.1   resource analysis.templ9.1   resource analysis.templ
9.1 resource analysis.templ
 
Обзор методов оценки True-motion
Обзор методов оценки True-motionОбзор методов оценки True-motion
Обзор методов оценки True-motion
 
Некоторые алгоритмы многомерной обработки изображений
Некоторые алгоритмы многомерной обработки изображенийНекоторые алгоритмы многомерной обработки изображений
Некоторые алгоритмы многомерной обработки изображений
 
Конструкция и компоновка персонального компьютера
Конструкция и компоновка персонального компьютераКонструкция и компоновка персонального компьютера
Конструкция и компоновка персонального компьютера
 
Техническое обслуживание персонального компьютера
Техническое обслуживание персонального компьютераТехническое обслуживание персонального компьютера
Техническое обслуживание персонального компьютера
 
Архитектура электронно-вычислительных машин (ЭВМ) и систем
Архитектура электронно-вычислительных машин (ЭВМ) и системАрхитектура электронно-вычислительных машин (ЭВМ) и систем
Архитектура электронно-вычислительных машин (ЭВМ) и систем
 
TMPA Pakulin: Dynamic Verification of Hybrid Systems
TMPA Pakulin: Dynamic Verification of Hybrid SystemsTMPA Pakulin: Dynamic Verification of Hybrid Systems
TMPA Pakulin: Dynamic Verification of Hybrid Systems
 
Обзор алгоритмов машинного обучения
Обзор алгоритмов машинного обученияОбзор алгоритмов машинного обучения
Обзор алгоритмов машинного обучения
 
Monitoring and Load testing
Monitoring and Load testingMonitoring and Load testing
Monitoring and Load testing
 

Andere mochten auch

Методы деинтерлейсинга
Методы деинтерлейсингаМетоды деинтерлейсинга
Методы деинтерлейсингаMSU GML VideoGroup
 
Устранение размытости видео
Устранение размытости видеоУстранение размытости видео
Устранение размытости видеоMSU GML VideoGroup
 
Обзоры методов шумоподавления
Обзоры методов шумоподавленияОбзоры методов шумоподавления
Обзоры методов шумоподавленияMSU GML VideoGroup
 
Измерение качества видео
Измерение качества видеоИзмерение качества видео
Измерение качества видеоMSU GML VideoGroup
 
Обзор методов восстановления старого видео
Обзор методов восстановления старого видеоОбзор методов восстановления старого видео
Обзор методов восстановления старого видеоMSU GML VideoGroup
 
Обзор алгоритмов генерации ракурсов для многоракурсных видео
Обзор алгоритмов генерации ракурсов для многоракурсных видеоОбзор алгоритмов генерации ракурсов для многоракурсных видео
Обзор алгоритмов генерации ракурсов для многоракурсных видеоMSU GML VideoGroup
 
Новые методы деинтерлейсинга
Новые методы деинтерлейсингаНовые методы деинтерлейсинга
Новые методы деинтерлейсингаMSU GML VideoGroup
 
Фильтрация видео
Фильтрация видеоФильтрация видео
Фильтрация видеоMSU GML VideoGroup
 
Использование областей перекрытия в задаче сегментации видео
Использование областей перекрытия в задаче сегментации видеоИспользование областей перекрытия в задаче сегментации видео
Использование областей перекрытия в задаче сегментации видеоMSU GML VideoGroup
 
Генерация текстур
Генерация текстурГенерация текстур
Генерация текстурMSU GML VideoGroup
 
Метрики оценки качества конвертированного стерео
Метрики оценки качества конвертированного стереоМетрики оценки качества конвертированного стерео
Метрики оценки качества конвертированного стереоMSU GML VideoGroup
 
Некоторые методы сопоставления и трекинга границ во времени
Некоторые методы сопоставления и трекинга границ во времениНекоторые методы сопоставления и трекинга границ во времени
Некоторые методы сопоставления и трекинга границ во времениMSU GML VideoGroup
 
Оценка уровня шума для видео
Оценка уровня шума для видеоОценка уровня шума для видео
Оценка уровня шума для видеоMSU GML VideoGroup
 
Методы повышения визуального качества восстановленного фона
Методы повышения визуального качества восстановленного фонаМетоды повышения визуального качества восстановленного фона
Методы повышения визуального качества восстановленного фонаMSU GML VideoGroup
 

Andere mochten auch (14)

Методы деинтерлейсинга
Методы деинтерлейсингаМетоды деинтерлейсинга
Методы деинтерлейсинга
 
Устранение размытости видео
Устранение размытости видеоУстранение размытости видео
Устранение размытости видео
 
Обзоры методов шумоподавления
Обзоры методов шумоподавленияОбзоры методов шумоподавления
Обзоры методов шумоподавления
 
Измерение качества видео
Измерение качества видеоИзмерение качества видео
Измерение качества видео
 
Обзор методов восстановления старого видео
Обзор методов восстановления старого видеоОбзор методов восстановления старого видео
Обзор методов восстановления старого видео
 
Обзор алгоритмов генерации ракурсов для многоракурсных видео
Обзор алгоритмов генерации ракурсов для многоракурсных видеоОбзор алгоритмов генерации ракурсов для многоракурсных видео
Обзор алгоритмов генерации ракурсов для многоракурсных видео
 
Новые методы деинтерлейсинга
Новые методы деинтерлейсингаНовые методы деинтерлейсинга
Новые методы деинтерлейсинга
 
Фильтрация видео
Фильтрация видеоФильтрация видео
Фильтрация видео
 
Использование областей перекрытия в задаче сегментации видео
Использование областей перекрытия в задаче сегментации видеоИспользование областей перекрытия в задаче сегментации видео
Использование областей перекрытия в задаче сегментации видео
 
Генерация текстур
Генерация текстурГенерация текстур
Генерация текстур
 
Метрики оценки качества конвертированного стерео
Метрики оценки качества конвертированного стереоМетрики оценки качества конвертированного стерео
Метрики оценки качества конвертированного стерео
 
Некоторые методы сопоставления и трекинга границ во времени
Некоторые методы сопоставления и трекинга границ во времениНекоторые методы сопоставления и трекинга границ во времени
Некоторые методы сопоставления и трекинга границ во времени
 
Оценка уровня шума для видео
Оценка уровня шума для видеоОценка уровня шума для видео
Оценка уровня шума для видео
 
Методы повышения визуального качества восстановленного фона
Методы повышения визуального качества восстановленного фонаМетоды повышения визуального качества восстановленного фона
Методы повышения визуального качества восстановленного фона
 

Ähnlich wie Методы оптимизации вычислений на CPU

Применение современных графических процессоров в области компьютерного зрения
Применение современных графических процессоров в области компьютерного зренияПрименение современных графических процессоров в области компьютерного зрения
Применение современных графических процессоров в области компьютерного зренияMSU GML VideoGroup
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
06 vasenin roganov siis_2013
06 vasenin roganov siis_201306 vasenin roganov siis_2013
06 vasenin roganov siis_2013Marina_creautor
 
Параллельное программирование на современных видеокартах
Параллельное программирование на современных видеокартахПараллельное программирование на современных видеокартах
Параллельное программирование на современных видеокартахAlex Tutubalin
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2Technopark
 
Обзор методов обнаружения ошибок в видео
Обзор методов обнаружения ошибок в видеоОбзор методов обнаружения ошибок в видео
Обзор методов обнаружения ошибок в видеоMSU GML VideoGroup
 
Пути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обученияПути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обученияAndrew Babiy
 
Работа с Big Data
Работа с Big Data Работа с Big Data
Работа с Big Data MATLAB
 
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...Alex V. Petrov
 
Soft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняSoft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняLuxoftTraining
 
Развертывание алгоритмов на ПЛИС
Развертывание алгоритмов на ПЛИСРазвертывание алгоритмов на ПЛИС
Развертывание алгоритмов на ПЛИСMATLAB
 
Распределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на JavaРаспределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на Javaaragozin
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoFDmitry Buzdin
 
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )Mobile Developer Day
 
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )Mobile Developer Day
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3Computer Science Club
 

Ähnlich wie Методы оптимизации вычислений на CPU (20)

Применение современных графических процессоров в области компьютерного зрения
Применение современных графических процессоров в области компьютерного зренияПрименение современных графических процессоров в области компьютерного зрения
Применение современных графических процессоров в области компьютерного зрения
 
Gpgpu
GpgpuGpgpu
Gpgpu
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
06 vasenin roganov siis_2013
06 vasenin roganov siis_201306 vasenin roganov siis_2013
06 vasenin roganov siis_2013
 
Параллельное программирование на современных видеокартах
Параллельное программирование на современных видеокартахПараллельное программирование на современных видеокартах
Параллельное программирование на современных видеокартах
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2
 
Обзор методов обнаружения ошибок в видео
Обзор методов обнаружения ошибок в видеоОбзор методов обнаружения ошибок в видео
Обзор методов обнаружения ошибок в видео
 
Пути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обученияПути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обучения
 
Работа с Big Data
Работа с Big Data Работа с Big Data
Работа с Big Data
 
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
DEV Labs 2013. Can C++ Code Effeciency Be Comparable to That of Middle-Level ...
 
Simonova sql server-enginetesting
Simonova sql server-enginetestingSimonova sql server-enginetesting
Simonova sql server-enginetesting
 
Soft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняSoft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровня
 
Развертывание алгоритмов на ПЛИС
Развертывание алгоритмов на ПЛИСРазвертывание алгоритмов на ПЛИС
Развертывание алгоритмов на ПЛИС
 
Распределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на JavaРаспределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на Java
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 
NeuroCS
NeuroCSNeuroCS
NeuroCS
 
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
 
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
гибкий подход к тестированию ‘умных’ электронных систем.( а. вдовин, Auriga )
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
 
Efficiency vvv
Efficiency vvvEfficiency vvv
Efficiency vvv
 

Mehr von MSU GML VideoGroup

Некоторые методы сегментации видео
Некоторые методы сегментации видеоНекоторые методы сегментации видео
Некоторые методы сегментации видеоMSU GML VideoGroup
 
Обзор методов сравнения фильмов
Обзор методов сравнения фильмовОбзор методов сравнения фильмов
Обзор методов сравнения фильмовMSU GML VideoGroup
 
Методы цветокоррекции стереовидео
Методы цветокоррекции стереовидеоМетоды цветокоррекции стереовидео
Методы цветокоррекции стереовидеоMSU GML VideoGroup
 
Некоторые методы сопоставления стерео
Некоторые методы сопоставления стереоНекоторые методы сопоставления стерео
Некоторые методы сопоставления стереоMSU GML VideoGroup
 
Некоторые методы обнаружения артефактов 3D-видео
Некоторые методы обнаружения артефактов 3D-видеоНекоторые методы обнаружения артефактов 3D-видео
Некоторые методы обнаружения артефактов 3D-видео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
 
Обзор докладов конференции 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
 
Некоторые методы восстановления фона
Некоторые методы восстановления фонаНекоторые методы восстановления фона
Некоторые методы восстановления фонаMSU GML VideoGroup
 
Обзор методов сегментации видео
Обзор методов сегментации видеоОбзор методов сегментации видео
Обзор методов сегментации видеоMSU GML VideoGroup
 
Точное выделение границ объектов
Точное выделение границ объектовТочное выделение границ объектов
Точное выделение границ объектовMSU GML VideoGroup
 
Обработка границ объектов при генерации стерео
Обработка границ объектов при генерации стереоОбработка границ объектов при генерации стерео
Обработка границ объектов при генерации стереоMSU GML VideoGroup
 
Исправление стерео видео
Исправление стерео видеоИсправление стерео видео
Исправление стерео видеоMSU GML VideoGroup
 

Mehr von MSU GML VideoGroup (20)

Некоторые методы сегментации видео
Некоторые методы сегментации видеоНекоторые методы сегментации видео
Некоторые методы сегментации видео
 
Обзор методов сравнения фильмов
Обзор методов сравнения фильмовОбзор методов сравнения фильмов
Обзор методов сравнения фильмов
 
Методы цветокоррекции стереовидео
Методы цветокоррекции стереовидеоМетоды цветокоррекции стереовидео
Методы цветокоррекции стереовидео
 
Некоторые методы сопоставления стерео
Некоторые методы сопоставления стереоНекоторые методы сопоставления стерео
Некоторые методы сопоставления стерео
 
Некоторые методы обнаружения артефактов 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)
 
Цветонезависимое сопоставление стерео
Цветонезависимое сопоставление стереоЦветонезависимое сопоставление стерео
Цветонезависимое сопоставление стерео
 
Некоторые методы восстановления фона
Некоторые методы восстановления фонаНекоторые методы восстановления фона
Некоторые методы восстановления фона
 
Обзор методов сегментации видео
Обзор методов сегментации видеоОбзор методов сегментации видео
Обзор методов сегментации видео
 
Точное выделение границ объектов
Точное выделение границ объектовТочное выделение границ объектов
Точное выделение границ объектов
 
Обработка границ объектов при генерации стерео
Обработка границ объектов при генерации стереоОбработка границ объектов при генерации стерео
Обработка границ объектов при генерации стерео
 
Исправление стерео видео
Исправление стерео видеоИсправление стерео видео
Исправление стерео видео
 

Методы оптимизации вычислений на CPU

  • 1. Методы ускорения программ и алгоритмов Илья Цветков Video Group CS MSU Graphics & Media Lab
  • 2. Only for Maxus  Содержание  Введение  Тестирование производительности  Архитектура современных процессоров  Особенности  Типичное устройство  Кэш  Оптимизация  Выбор алгоритмов  Ветвления  Память  Циклы  Медленные операции  Вещественные вычисления  SIMD  Многопоточность 2 CS MSU Graphics & Media Lab (Video Group)
  • 3. Only for Maxus  Тезисы оптимизации  Нельзя оптимизировать программу/функцию не запуская ее  Необходимо тестирование на различных машинах  Один из возможных путей оптимизации  удаление дополнительных возможностей  Отладочные сборки программы не пригодны для тестирования производительности  Оптимизация далеко не всегда требует написание ассемблерного кода  Тестирование должно быть частью процесса разработки 3 CS MSU Graphics & Media Lab (Video Group)
  • 4. Only for Maxus  Методы ускорения  Оптимизация с учетом особенной конкретной архитектуры  Векторные инструкции  Распараллеливание задачи  Hyper-Threading  Многоядерные процессоры  Применение специализированных процессоров  GPU  nVidia CUDA, Intel Larabbee 4 CS MSU Graphics & Media Lab (Video Group)
  • 5. Only for Maxus  Процесс оптимизации Создание Отыскание Определение Модификация теста «горячих» точек причины программы Тестирование производительности «Горячие» точки (hotspots):  места наибольшей активности программы или функции;  под активностью может пониматься:  время, затрачиваемое на исполнение некоторого участка кода,  количество неверно предсказанных ветвлений,  количество промахов кэша;  показывают области требующие оптимизации. 5 CS MSU Graphics & Media Lab (Video Group)
  • 6. Only for Maxus  Процесс оптимизации Создание Отыскание Определение Модификация теста «горячих» точек причины программы Тестирование производительности Инструментарий:  средства измерения времени исполнения программы/функции;  программный профайлер:  sampling,  instrumenting;  оптимизирующий компилятор. 6 CS MSU Graphics & Media Lab (Video Group)
  • 7. Only for Maxus  Тестирование производительности Свойства теста производительности:  Повторяемость результатов  Отражение характерного поведения программы  Простота использования  Адекватность результатов  Совмещение с тестирование функциональности  Измерение времени исполнения  Полное покрытие программы  Точность измерений 7 CS MSU Graphics & Media Lab (Video Group)
  • 8. Only for Maxus  Измерение времени исполнения Таймер Точность Максимум Пример использования Функции ±1 c 73 года time_t start, elapsed; библиотеки Start = time(NULL); языка С // некоторый код elapsed = time(NULL) – start; Windows ±10 мc 49 дней DWORD start, elapsed; multimedia Start = timeGetTime(); timer // некоторый код elapsed = timeGetTime() – start; 8 CS MSU Graphics & Media Lab (Video Group)
  • 9. Only for Maxus  Измерение времени исполнения Таймер Точность Максимум Пример использования Такты CPU ±1 нc 4,29 с DWORD start, elapsed; (32 бита) (1 ГГц) _asm { RDTSC MOV start, eax } // некоторый код _asm { RDTSC SUB eax, start MOV elapsed, eax } Такты CPU ±1 нc 580 лет LARGE_INTEGER start, end; (64 бита) (1 ГГц) __int64 elapsed; QueryPerformanceCounter(&start); // некоторый код QueryPerformanceCounter(&end); elapsed = end.QuadPart – start.QuadPart; 9 CS MSU Graphics & Media Lab (Video Group)
  • 10. Only for Maxus  Outline  Введение  Тестирование производительности  Архитектура современных процессоров  Особенности  Типичное устройство  Кэш  Оптимизация  Выбор алгоритмов  Ветвления  Память  Циклы  Медленные операции  Вещественные вычисления  SIMD  Многопоточность 10 CS MSU Graphics & Media Lab (Video Group)
  • 11. Only for Maxus  Особенности архитектуры современных процессоров  Конвейерная обработка инструкций  CISC на уровне машинных инструкций, но RISC на уровне микроархитектуры  Суперскалярная архитектура  Выполнение команд вне очереди (out-of- order execution)  Большое время доступа к основной памяти и наличие быстродействующего кэша  Наличие набора векторных инструкций  Многоядерность 11 CS MSU Graphics & Media Lab (Video Group)
  • 12. Only for Maxus  Схема процессора Выборка инструкций и Предсказание ветвлений предекодирование Очередь иструкций Кэш второго уровня Декодирование Буфер инструкций (возможно исполнение вне очереди) Планировщик ALU ALU ALU Branch FP Add FP Multiply Load Store MMX/SSE/FP MMX/SSE MMX/SSE Move Кэш первого уровня 12 CS MSU Graphics & Media Lab (Video Group)
  • 13. Only for Maxus  Архитектура многоядерного процессора Hyper-Threading Intel Core Duo, Core 2 Duo Architectural state Architectural state Architectural state Architectural state Execution engine Execution engine Execution engine Local APIC Local APIC Local APIC Local APIC Кэш второго уровня Кэш второго уровня Интерфейс с шиной данных Интерфейс с шиной данных Intel Core 2 Quad Architectural state Architectural state Architectural state Architectural state Execution engine Execution engine Execution engine Execution engine Local APIC Local APIC Local APIC Local APIC Кэш второго уровня Кэш второго уровня Интерфейс с шиной данных Интерфейс с шиной данных 13 CS MSU Graphics & Media Lab (Video Group)
  • 14. Only for Maxus  Устройство кэша L1  Размер строки  64 байта Каналы (ways)  Pentium 4, Xeon 0 1 2 3  объем кэша  816 КБ 0  48 каналов, 32 ряда 1 1 набор (set) 2  Core, Pentium M 3 объем кэша  32 КБ Ряды (rows)  4 1 строка (line) 5  8 каналов, 64 ряда 30 31 14 CS MSU Graphics & Media Lab (Video Group)
  • 15. Only for Maxus  Производительность инструкций Пропускная Инструкция Латентность способность Сложение, вычитание, логические операции (AND, 0,5 0,5 OR, XOR), сравнение, переход, доступ к памяти Работа со стеком, логические сдвиги, SIMD-доступ к 1 1 памяти, 64-битные целочисленные SIMD-операции (MMX, за исключением EMMS); модуль, сравнение, сложение и вычитание для вещественных чисел 128-битные целочисленные SIMD-операции; SIMD- 2 2 операции над вещественными числами одинарной и двойной точности за исключением деления и корня Целочисленное умножение 15 4 Целочисленное деление; деление и квадратный 23 23 корень для вещественных чисел одинарной точности (32 бита) 15 CS MSU Graphics & Media Lab (Video Group)
  • 16. Only for Maxus  Производительность инструкций Пропускная Инструкция Латентность способность SIMD деление и квадратный корень для 32 32 вещественных чисел одинарной точности Деление и квадратный корень для вещественных 38 38 чисел двойной точности (64 бита) Деление и квадратный корень для вещественных 43 43 чисел повышенной точности (80 бит) SIMD деление и квадратный корень для 62 62 вещественных чисел двойной точности Трансцендентные функции (синус, косинус, тангенс, 130170 130170 арктангенс) 16 CS MSU Graphics & Media Lab (Video Group)
  • 17. Only for Maxus  Outline  Введение  Тестирование производительности  Архитектура современных процессоров  Особенности  Типичное устройство  Кэш  Оптимизация  Выбор алгоритмов  Ветвления  Память  Циклы  Медленные операции  Вещественные вычисления  SIMD  Многопоточность 17 CS MSU Graphics & Media Lab (Video Group)
  • 18. Only for Maxus  Алгоритмы Основные характеристики алгоритмов:  Вычислительная сложность  Инструкции, требуемые для реализации  Объем используемой памяти  Характер доступа к памяти  Зависимости по данным 18 CS MSU Graphics & Media Lab (Video Group)
  • 19. Only for Maxus  Зависимости по данным и параллелизм инструкций 0 5 10 15 20 25 Пример 1: a = u * v; a=u∙v b = w * x; b=w∙x C = y * z; c=y∙z Пропускная способность Латентность 0 5 10 15 20 25 30 35 Пример 2: a = (w * x) * (y * z); t1 = w ∙ x t2 = y ∙ z a = t1 ∙ t2 Зависимость по данным 19 CS MSU Graphics & Media Lab (Video Group)
  • 20. Only for Maxus  Предсказание условных переходов  Предсказываемый процессором условный переход: for (int i = 0; i < 100; ++i) { if (i % 2 == 0) doEven(); else doOdd(); }  Переход случаен  сложно предсказуем: for (int i = 0; i < 100; ++i) { side = flipCoin(); if (side == HEADS) ++numHeads; else ++numTails; } 20 CS MSU Graphics & Media Lab (Video Group)
  • 21. Only for Maxus  Виды переходов  Условные переходы, исполняемые впервые  Переходы вперед  Переходы назад  Условные переходы, которые уже исполнялись  Вызов функции и возврат из функции  Косвенные вызовы функций и переходы (указатели на функции и таблицы переходов)  Безусловные переходы 21 CS MSU Graphics & Media Lab (Video Group)
  • 22. Only for Maxus  Удаление ветвлений с помощью инструкции CMOV  Код использующий условный переход  На С if (val > 255) val = 255;  Аналог на ассемблере cmp val, 255 jle skipSet mov val, 255 skipSet:  Код использующий инструкцию CMOV mov eax, val mov ebx, 255 cmp eax, ebx cmovg eax, ebx mov val, eax  Быстрее в 2,5 раза в случае случайного перехода  Эквивалентны при 1 неверно предсказанном переходе из 100 22 CS MSU Graphics & Media Lab (Video Group)
  • 23. Only for Maxus  Удаление ветвлений при использовании SIMD  Использование бинарных масок val: const: mask: 240 258 130 262 > 255 255 255 255 = FFFF FFFF FFFF FFFF result = (val & ~mask) | (const & mask);  Вычисление минимума и максимума val: const: result: min( 240 258 130 262 , 255 255 255 255 ) = 240 255 130 255 23 CS MSU Graphics & Media Lab (Video Group)
  • 24. Only for Maxus  Удаление ветвлений for (int i = 0; i < size; ++i) { alpha = getAlpha(src[i]); if (alpha == 255) dst[i] = src[i]; else if (alpha != 0) dst[i] = blend(src[i], dst[i], alpha); } 24 CS MSU Graphics & Media Lab (Video Group)
  • 25. Only for Maxus  Таблицы переходов switch (val) { if (val == 'A') { case 'A': // … // вероятность 95% } break; else if (val == 'B') { case 'B': // … // вероятность 4% } break; else switch (val) { case 'C': case 'C': // вероятность 0,5% // … break; break; case 'D': case 'D': // вероятность 0,5% // … break; break; } } 25 CS MSU Graphics & Media Lab (Video Group)
  • 26. Only for Maxus  Использование кэша  Обязательная загрузка (compulsory load)  Загрузка из-за нехватки объема кэша (capacity load)  Загрузка вследствие конфликта (conflict load)  Эффективность кэша (cache efficiency) 26 CS MSU Graphics & Media Lab (Video Group)
  • 27. Only for Maxus  Программная предвыборка Ассемблерная инструкция Описание PREFETCHNTA Выборка данных для единичного доступа в режиме чтения PREFETCH0 Выборка в кэши всех уровней для чтения/записи PREFETCH1 Выборка в кэши L2 и L3, но не L1 PREFETCH2 Выборка только в кэш третьего уровня Пример с использованием встраиваемых функций: for (int i = 0; i < size; ++i) { array[i] = fn(array[i]); _mm_prefetch(array[i + 16], MM_HINT_T0); } 27 CS MSU Graphics & Media Lab (Video Group)
  • 28. Only for Maxus  Выравнивание данных  Доступ к данным, попадающим в различные строки кэша вызывает дополнительные накладные расходы  Большинство современных векторных инструкций не работают с невыровненными данными Тип данных Выравнивание 1 байт, 8 бит, BYTE Произвольное выравнивание 2 байта, 16 бит, WORD 2 байта 4 байта, 32 бита, DWORD 4 байта 8 байт, 64 бита, QWORD 8 байт 10 байт, 80 бит, (вещественное число 16 байт расширенной точности) 16 байт, 128 бит 16 байт 28 CS MSU Graphics & Media Lab (Video Group)
  • 29. Only for Maxus  Оптимизация использования памяти  Применение алгоритмов требующих меньшее количество памяти  Повышение эффективности использования кэша  Предварительная загрузка данных в кэш  Применение инструкций, позволяющих избежать накладных расходов RFO  Устранение конфликтов кэша  Устранение проблем связанных с нехваткой объема кэша  Увеличение работы проводимых над одними данным 29 CS MSU Graphics & Media Lab (Video Group)
  • 30. Only for Maxus  Циклы Достоинства Недостатки Требуют меньшее количество Привносят накладные расходы в виде инструкций инструкций, реализующих цикл Нет необходимости повторно Добавляется один неверно декодировать инструкции предсказанный переход Процессор может автоматически Циклы вносят дополнительные разворачивать циклы зависимости по данным Компилятор может оптимизировать Без SIMD-оптимизации вычисления, циклы за счет использования SIMD- которые могли бы выполняться инструкций параллельно, выполняются последовательно 30 CS MSU Graphics & Media Lab (Video Group)
  • 31. Only for Maxus  Разворачивание циклов Исходный цикл: Вариант 2: sum = 0; a = b = c = d = 0; for (int i = 0; i < 16; ++i) for (int i = 0; i < 16; i += 4) { sum += array[i]; a += array[i]; b += array[i + 1]; Вариант 1: c += array[i + 2]; d += array[i + 3]; sum = 0; } for (int i = 0; i < 16; i += 4) { sum = a + b + c + d; sum += array[i]; sum += array[i + 1]; sum += array[i + 2]; sum += array[i + 3]; } 31 CS MSU Graphics & Media Lab (Video Group)
  • 32. Only for Maxus  Разворачивание циклов Единственная возможная цель Развернуть цикл и смешать разворачивания цикла — инструкции для достижения избавление от зависимостей по Длина тела цикла большего параллелизма данным Развернуть цикл, избавиться от Полностью развернуть цикл зависимостей по данным, возможно, применить SIMD Количество итераций 32 CS MSU Graphics & Media Lab (Video Group)
  • 33. Only for Maxus  Инварианты цикла  Инвариантные арифметические выражения for (int x = 0; x < length; ++x) array[x] = x * val / 3;  Инвариантные вызовы функций for (int x = 0; x < length; ++x) array[x] += x * val * foo(y) / 3;  Инвариантные ветвления for (int i = 0; i < size; ++i) if (blend == 255) dest[i] = src1[i]; else if (blend == 0) dest[i] = src2[i]; else dest[i] = (src1[i] * blend + src2[i] * (255 - blend)) / 255; 33 CS MSU Graphics & Media Lab (Video Group)
  • 34. FIX for Only ME Maxus  Loop fusion Исходный код: Преобразованный вариант: for (int i = 0; i < length; ++i) for (int i = 0; i < length; ++i) { x[i] = a[i] + b[i]; x[i] = a[i] + b[i]; for (int i = 0; i < length; ++i) y[i] = b[i] + c[i]; y[i] = b[i] + c[i]; } 34 CS MSU Graphics & Media Lab (Video Group)
  • 35. FIX for Only ME Maxus  Unroll and jam for (int i = 0; i < h; ++i) { for (int i = 0; i < h / n; i += n) { t = c[i]; for (int j = 0; j < w; ++j) { for (int j = 0; j < w; ++j) { c[i] += a[i][j] * b[j]; t += a[i][j] * b[j]; c[i + 1] += a[i + 1][j] * b[j]; } // … c[i] = t; c[i + n - 1] += } a[i + n - 1][j] * b[j]; } for (int i = 0; i < h / n; i += n) { } for (int j = 0; j < w; ++j) { c[i] += a[i][j] * b[j]; } for (int j = 0; j < w; ++j) { c[i + 1] += a[i + 1][j] * b[j]; } // … for (int j = 0; j < w; ++j) { c[i + n - 1] += a[i + n - 1][j] * b[j]; } } 35 CS MSU Graphics & Media Lab (Video Group)
  • 36. Only for Maxus  Memory Address Dependencies 1. Прочитать данные по адресу src  Типичный цикл: for (i = 0; i < n; ++i) { 2. Провести вычисления *dst = f(*src); ++dst; ++src; Записать данные по 3. адресу dst } Вычислить новые адреса Нет  Проблемы: 4. src и dst  Неизвестный адрес для загрузки данных 5. Увеличить счѐтчик цикла  Неизвестный адрес для сохранения 6. Цикл закончен? данных 36 CS MSU Graphics & Media Lab (Video Group)
  • 37. Only for Maxus  Медленные инструкции  Инструкции с большой задержкой  Инструкции с маленькой пропускной способностью  Ожидание готовности операндов  Отсутствие свободных слотов выполнения  Инструкции, останавливающие исполнение вне очереди 37 CS MSU Graphics & Media Lab (Video Group)
  • 38. FIX for Only ME Maxus  Lookup Tables  Lookup-таблица должна быть организована так, чтобы полностью находиться в кэше  Таблица должна быть как можно меньшего размера  Талица должна заменять как можно больше вычислений  Пример: преобразование ARGBAYYY 38 CS MSU Graphics & Media Lab (Video Group)
  • 39. Only for Maxus  Floating point Производительность деления в тактах Размер, Точность бит Диапазон FDIV DIVSS/DIVSD DIVPS/DIVPD Single 32 1,18·10-383,4·1038 23 22 32 Double 64 2,23·10-3081,79·10308 38 35 62 Extended 80 3,37·10-49321,18·104932 43    Режимы приведения к целому:  Округление к ближайшему целому  Округление «вниз»  Округление «вверх»  Отбрасывание дробной части 39 CS MSU Graphics & Media Lab (Video Group)
  • 40. Only for Maxus  SIMD Возможна оптимизация за счет Нет SIMD? Да Точность Целочисленные Применима ли или вещественные целочисленная вычисления? арифметика? Нет Целочисленные Вещественные Да Почему Применима ли вещественная одинарная арифметика? точность? Нет Да Использовать Использовать Производительность целочисленную одинарную арифметику точность Преобразование данных для Завершение Написание SIMD-кода Оптимизация памяти использования SIMD оптимизации 40 CS MSU Graphics & Media Lab (Video Group)
  • 41. Only for Maxus  Использование SIMD- инструкций Встраиваемые Ассемблер функции (intrinsics) Производительность Автоматическая векторизация Специальные контейнеры и алгоритмы для С++ и т. д. Простота программирования/переносимость 41 CS MSU Graphics & Media Lab (Video Group)
  • 42. Only for Maxus  MMX, SSE, SSE2  MMX  64-битные регистры  Работа с упакованными байтами, словами и двойными словами  SSE (Streaming SIMD Extensions)  128-битные регистры  Работа с упакованными вещественными числами одинарной точности  Управление кэшированием  Упакованные 64-битные целые  SSE2  Работа с упакованными вещественными числами двойной точности  Аналоги инструкций MMX для 128-битных регистров  «Перемешивание» данных 42 CS MSU Graphics & Media Lab (Video Group)
  • 43. Only for Maxus  SSE3, SSSE3, SSE4.1  SSE3  «Горизонтальные» вычисления  Преобразование к целому (x87)  Поддержка синхронизации потоков  SSSE3 (Supplemental Streaming SIMD Extensions 3)  Вычисление модуля  Побайтовое «перемешивание»  SSE4.1  Скалярное произведение  SAD 43 CS MSU Graphics & Media Lab (Video Group)
  • 44. Only for Maxus  Outline  Введение  Тестирование производительности  Архитектура современных процессоров  Особенности  Типичное устройство  Кэш  Оптимизация  Выбор алгоритмов  Ветвления  Память  Циклы  Медленные операции  Вещественные вычисления  SIMD  Многопоточность 44 CS MSU Graphics & Media Lab (Video Group)
  • 45. Only for Maxus  Многопоточность Ts Последовательное выполнение (1  p)Ts pTs Tp Overhead pTs 2 Параллельное выполнение (1  p)Ts pTs 2 Tp Tp  1  p Ts  s  c pT p  1 p  N Ts N 45 CS MSU Graphics & Media Lab (Video Group)
  • 46. Only for Maxus  Многопоточность  Идеи применения многопоточности  Распараллеливание задач, занимающих существенное время  Сбалансированность потоков  Синхронизация  Минимизация объема «общей» памяти  Определение количества потоков  Методы распараллеливания задач  Functional decomposition  Domain decomposition 46 CS MSU Graphics & Media Lab (Video Group)
  • 47. Only for Maxus  Domain decomposition 47 CS MSU Graphics & Media Lab (Video Group)
  • 48. Only for Maxus  Основные проблемы  Накладные расходы на управление потоками  Короткие циклы  False-sharing  Пропускная способность памяти  Эффективность использования кэша  Накладные расходы на синхронизацию  Spin-waits  Processor affinity  Cache ping-pong 48 CS MSU Graphics & Media Lab (Video Group)
  • 49. Only for Maxus  OpenMP  Исходный вариант void serialApplyFoo(float a[], size_t n) { for (size_t i = 0; i < n; ++i) foo(a[i]); }  Использование OpenMP void parallelApplyFoo(float a[], size_t n) { opm_set_num_threads(NUM_THREADS); #pragma omp parallel for shared(a) for (size_t i = 0; i < n; ++i) foo(a[i]); } 49 CS MSU Graphics & Media Lab (Video Group)
  • 50. Only for Maxus  Threading Building Blocks class ApplyFoo { float *const m_a; public: void operator() (const blocked_range<size_t> &r) const { float *a = m_a; for (size_t i = r.begin(); i != r.end(); ++i) foo(a[i]); } ApplyFoo(float a[]) : m_a(a) {} }; void parallelApplyFoo(float a[], size_t n) { parallel_for(blocked_range<size_t>(0, n, grainSize), ApplyFoo(a)); } 50 CS MSU Graphics & Media Lab (Video Group)
  • 51. Only for Maxus  Способ разбиения void parallelApplyFoo(float a[], size_t n) { parallel_for(blocked_range<size_t>(0, n), ApplyFoo(a), auto_partitioner()); } 51 CS MSU Graphics & Media Lab (Video Group)
  • 52. Only for Maxus  Список литературы  The Software Optimization Cookbook, Intel Press, 2002  Concepts of High Performance Computing, Georg Hager, Gerhard Wellein, 2008  Intel 64 and IA-32 Architectures Optimization Reference Manual, 2007, http://developer.intel.com/design/processor/manuals/248966.pdf  Intel Threading Building Blocks, http://threadingbuildingblocks.org/  OpenMP, http://www.openmp.org/ 52 CS MSU Graphics & Media Lab (Video Group)