- •Нижегородский государственный университет им. Н.И.Лобачевского
- •Содержание
- •Введение
- •Режимы и модели использования
- •Методы работы с сопроцессором в режиме Offload
- •1. Явная схема работы с памятью
- •Явная схема работы с памятью…
- •Явная схема работы с памятью: Fortran
- •Явная схема работы с памятью…
- •Явная схема работы с памятью: механизм вызова функции на сопроцессоре
- •Явная схема работы с памятью…
- •Явная работа с памятью…
- •Явная схема работы с памятью: статическая память
- •Явная схема работы с памятью: динамическая память…
- •Явная схема работы с памятью: динамическая память
- •Явная работа с памятью: одновременное выполнение на процессоре и сопроцессоре
- •Явная схема работы с памятью: схема двойной буферизации…
- •Явная схема работы с памятью: схема двойной буферизации…
- •Явная схема работы с памятью: схема двойной буферизации…
- •Явная схема работы с памятью: схема двойной буферизации…
- •Явная схема работы с памятью: схема двойной буферизации
- •Явная схема работы с памятью: работа со структурами…
- •Явная схема работы с памятью: работа со структурами
- •Технология Intel® Cilk Plus
- •Основные компоненты Intel® Cilk Plus
- •Ключевые слова: cilk_spawn
- •Ключевые слова: cilk_sync
- •Ключевые слова: cilk_for
- •Преобразователи (reducers)…
- •Преобразователи (reducers)…
- •Преобразователи (reducers)
- •3. Неявная схема работы с памятью
- •Неявная схема работы с памятью…
- •Неявная схема работы с памятью…
- •Неявная схема работы с памятью: _Cilk_shared
- •Неявная схема работы с памятью: _Cilk_offload
- •Неявная схема работы с памятью
- •Сравнение явной и неявной схемы
- •4. Подходы к оптимизации прикладных программ для Intel Xeon Phi
- •Итеративный процесс оптимизации
- •Уровни оптимизации приложений
- •Использование встроенного профилировщика циклов…
- •Использование встроенного профилировщика циклов…
- •Использование встроенного профилировщика циклов
- •Использование отчетов компилятора
- •Балансировка нагрузки…
- •Балансировка нагрузки…
- •Балансировка нагрузки…
- •Балансировка нагрузки
- •Дополнительные рекомендации…
- •Дополнительные рекомендации
- •Литература
- •Литература
- •Литература
- •Литература
- •Литература
- •Авторский коллектив
Нижегородский государственный университет им. Н.И.Лобачевского
Факультет Вычислительной математики и кибернетики
Программирование для Intel Xeon Phi
06 Лекция Элементы оптимизации прикладных программ
для Intel Xeon Phi. Intel Compiler
При поддержке компании Intel
Горшков А.В.
Кафедра математического обеспечения ЭВМ
Содержание
Введение
Расширения языков программирования C/С++
–Явная схема работы с памятью
–Введение в Intel Cilk+
–Неявная схема работы с памятью
–Сравнение явной и неявной схемы
Подходы к оптимизации прикладных программ
Литература
Нижний Новгород, 2015 |
Элементы оптимизации прикладных программ для Intel Xeon Phi. Intel Compiler |
2 |
Введение
Intel Xeon Phi – новый сопроцессор от компании Intel, призванный существенно ускорить процесс вычислений для некоторого класса задач, алгоритмы решения которых допускают существенную степень параллелизма и векторизации
Сопроцессор основан на архитектуре Intel Many Integrated Core (MIC), содержит несколько десятков x86 CPU ядер, поддерживает сотни потоков исполнения
Основное достоинство – для создания программ для Intel Xeon Phi используются знакомые инструменты (C/C++ Compiler, OpenMP, MPI), не требуется существенной модификации кода
НО: для эффективной работы требуется оптимизация
Нижний Новгород, 2015 |
Элементы оптимизации прикладных программ для Intel Xeon Phi. Intel Compiler |
3 |
Режимы и модели использования
сопроцессора Intel Xeon Phi…
Режим Offload
– Сопроцессор Xeon Phi или основной процессор используется в качестве ускорителя вычислений
Режим MPI
– Сопроцессор Xeon Phi и основной процессор исполняют равноправные MPI-процессы
MIC Offload |
Host Offload |
– MPI-процессы |
– MPI-процессы |
выполняются только |
выполняются только |
на основных ЦП |
на сопроцессорах |
– Сопроцессоры |
Xeon Phi |
Xeon Phi |
– Основные ЦП |
используются в |
используются в |
качестве |
качестве |
ускорителей |
ускорителей |
|
Не поддерживается |
Co-processor-only
–MPI-процессы выполняются только на сопроцессорах Xeon Phi
–MPI-пересылки - между сопроцессо- рами Xeon Phi через основные ЦП
–Поддерживается
многопоточность
Symmetric
–MPI-процессы выполняются на основных ЦП и сопро- цессорах Xeon Phi
–MPI-пересылки - между основными ЦП и сопроцессорами Xeon Phi
–Поддерживается
многопоточность
Методы работы с сопроцессором в режиме Offload
Явная схема работы с памятью:
–Использование директив компилятора: #pragma offload
–Явное управление обменами данных с сопроцессором
Неявная схема работы с памятью:
–Использование ключевых слов расширения Intel Cilk Plus
–Использование участков памяти, разделяемых между процессором и сопроцессором
Нижний Новгород, 2015 |
Элементы оптимизации прикладных программ для Intel Xeon Phi. Intel Compiler |
5 |
1. Явная схема работы с памятью
Нижний Новгород, 2015 |
Элементы оптимизации прикладных программ для Intel Xeon Phi. Intel Compiler |
6 |
Явная схема работы с памятью…
Нижний Новгород, 2015 |
Элементы оптимизации прикладных программ для Intel Xeon Phi. Intel Compiler |
7 |
Явная схема работы с памятью: С/C++
Описание |
|
C/C++ синтаксис |
Семантика |
|
|
Директива offload |
#pragma offload <clauses> |
Запуск участка кода |
на |
||
|
|
<statement> |
сопроцессоре или CPU |
|
|
|
|
|
|
|
|
Ключевое |
слово __attribute__((target(mic))) |
Компиляция |
функции |
или |
|
для указания MIC |
|
объявление |
переменной |
||
функции |
или |
|
одновременно для CPU и |
||
переменной |
|
|
сопроцессора |
|
|
Указание MIC блока #pragma
кода |
target(mic)) |
|
… |
offload_attribute(push, Компиляция блока кода одновременно для CPU и сопроцессора
|
#pragma offload_attribute(pop) |
|
|
Отдельная передача #pragma |
offload_transfer |
Обеспечивает синхронную |
|
данных |
target(mic) <clauses> |
или асинхронную передачу |
данных между CPU и сопроцессором
Нижний Новгород, 2015 |
Элементы оптимизации прикладных программ для Intel Xeon Phi. Intel Compiler |
8 |
Явная схема работы с памятью: Fortran
Описание |
C/C++ синтаксис |
Директивы offload |
!dir$ omp offload |
|
<clauses> |
|
<statement> |
|
dir$ offload <clauses> |
|
<statement> |
Семантика
Запуск параллельного (OpenMP) участка кода на сопроцессоре или CPU
Запуск участка кода (вызов функции) на сопроцессоре или CPU
Ключевое слово для |
!dir$ |
attributes |
Компиляция |
функции |
или |
||
указания |
MIC |
offload:<mic> :: |
объявление |
переменной |
|||
функции |
или |
<ret-name> |
OR |
одновременно |
для |
CPU |
и |
переменной |
|
<var1,var2,…> |
сопроцессора |
|
|
|
|
|
|
|
|
|
|
||
Отдельная |
передача |
!dir$ |
offload_transfer |
Обеспечивает |
синхронную |
или |
|
данных |
|
target(mic) <clauses> |
асинхронную |
передачу |
данных |
между CPU и сопроцессором
Нижний Новгород, 2015 |
Элементы оптимизации прикладных программ для Intel Xeon Phi. Intel Compiler |
9 |
Явная схема работы с памятью…
Код будет выполнен на одном из доступных сопроцессоров
Если сопроцессоров нет или они не доступны, код будет выполнен на центральном процессоре
Код будет выполнен на сопроцессоре с номером (n % <ОбщееЧислоXeonPhi>)
Если сопроцессор недоступен – возникнет ошибка времени исполнения
Нижний Новгород, 2015 |
Элементы оптимизации прикладных программ для Intel Xeon Phi. Intel Compiler |
10 |