Нижегородский государственный университет им. Н.И.Лобачевского
Опубликован: 30.05.2014 | Доступ: свободный | Студентов: 302 / 34 | Длительность: 11:26:00

Самостоятельная работа 2: Оптимизация прикладных программ для Intel Xeon Phi с использованием Intel C/C++ Compiler. Векторизация

Аннотация: Цель данной работы – изучение базовых техник векторизации кода на Intel Xeon Phi.

Введение

Презентацию к лабораторной работе Вы можете скачать здесь.

Данная лабораторная работа посвящена базовым вопросам векторизации программ для центральных процессоров и сопроцессоров архитектуры Intel Many Integrated Core (MIC). Под векторизацией понимается использование специализированных типов данных, регистров и инструкций, позволяющих одновременное, векторное, выполнение однотипных операций над разными данными. Такая парадигма называется SIMD – Single Instruction Multiple Data. Векторное исполнение операций является одним из видов параллельной обработки данных, в данном случае параллелизм осуществляется на уровне одного ядра центрального процессора или сопроцессора Intel Xeon Phi (а не на уровне одновременного использования нескольких ядер, как при использовании технологий параллельного программирования OpenMP и TBB).

Современные центральные процессоры Intel позволяют одновременно выполнять 4 (наборы инструкций SSE) или 8 (набор инструкций AVX) операций с одинарной точностью, а для вычислений с двойной точностью – 2 (наборы инструкций SSE) или 4 (набор инструкций AVX) операции. Сопроцессоры Intel Xeon Phi обладают 512-битными векторными регистрами и могут векторно исполнять 16 операций с одинарной точностью и 8 с двойной точностью. Полностью скалярный (не использующий векторные инструкции) способен использовать лишь малую часть вычислительных возможностей Intel Xeon Phi: 12.5% в одинарной точности и 6.25% в двойной точности. Таким образом, эффективное использование векторных инструкций является одним из ключевых аспектов достижения высокой производительности на центральных процессорах и сопроцессорах Intel Xeon Phi. Обеспечение эффективной векторизации часто является одним из наиболее трудоемких процессов при оптимизации прикладных программ.

В данной лабораторной работе рассматриваются базовые вопросы векторизации. Иллюстрируются основные способы использования векторных инструкций на сопроцессоре Intel Xeon Phi. Изложение производится на простых примерах, позволяющих показать базовые техники векторизации. В конце лабораторной работы предлагается несколько более сложных примеров. При этом не ставится цель всестороннего рассмотрения всех или некоторых средств векторизации или анализа сложных случаев. Напротив, упор сделан на обзорном рассмотрении различных средств на простых примерах и представлении многообразия доступных в настоящее время средств векторизации и общей идеологии их использования. Соответствующий теоретически материал содержится в "Векторные расширения Intel Xeon Phi" , некоторые более "тонкие" вопросы векторизации рассматриваются в "Элементы оптимизации прикладных программ для Intel Xeon Phi. Intel C/C++ Compiler " .

Векторизация одинаково важна для всех режимов использования сопроцессора Intel Xeon Phi (offload, симметричный, только сопроцессор), во всех примерах используется режим только сопроцессора (native). Для эффективного использования Xeon Phi важно использование параллелизма как на уровне ядер, так и на уровне векторных инструкций. Данные уровни параллелизма являются в некотором смысле независимыми, поэтому в данной лабораторной работе рассматривается лишь параллелизм, связанный с векторизацией и программы являются однопоточными. Все техники и соображения о векторизации являются полностью релевантными и для многопоточных приложений.

Методические указания

Цели и задачи работы

Цель данной работы – изучение базовых техник векторизации кода на Intel Xeon Phi.

Данная цель предполагает решение следующих основных задач:

  1. 1Изучение средств векторизации кода на Intel Xeon Phi.
  2. Освоение средств диагностики и различных механизмов векторизации на простом примере.
  3. Изучение способов векторизации вызовов математических функций.
  4. Рассмотрение более сложных случаев векторизации, возникающих в прикладной задаче.

Структура работы

Работа построена следующим образом. Рассматривается простой пример, в котором векторизация на первый взгляд возможна, однако не производится компилятором из-за наличия потенциальных зависимостей. На данном примере демонстрируются различные техники векторизации: использование ключевого слова restrict и #pragma ivdep для гарантии отсутствия потенциальных зависимостей, явная векторизация через #pragma simd, использование Array notation и элементарных функций. Рассматриваются вопросы векторизации циклов с вызовами математических функций. В завершение работы рассматриваются более сложные примеры.

Тестовая инфраструктура

Вычислительные эксперименты проводились с использованием следующей инфраструктуры (табл. 7.1).

Таблица 7.1. Тестовая инфраструктура
Процессор Intel Xeon Xeon E5-2690 (2.9 GHz, 8 ядер)
Сопроцессор Intel Xeon Phi 7110X
Память 64 GB
Операционная система Linux CentOS 6.2
Компилятор, профилировщик, отладчик Intel C/C++ Compiler 13

Рекомендации по проведению занятий

Для выполнения лабораторной работы рекомендуется следующая последовательность действий:

  1. Кратко напомнить студентам об основных принципах векторизации кода. Обратить внимание на важность векторизации для полного раскрытия вычислительного потенциала Intel Xeon Phi.
  2. Рассказать об использовании отчета о векторизации. Рассмотреть простой пример, когда векторизация на первый взгляд возможна, но не выполняется компилятором. Объяснить, почему компилятор не может произвести векторизацию из-за потенциальных зависимостей.
  3. Объяснить механизм принятия компилятором решения о возможности и целесообразности векторизации. Рассмотреть способы предоставления компилятору дополнительной информации об отсутствии зависимостей: ключевое слово restrict и #pragma ivdep.
  4. Вкратце рассмотреть другие средства векторизации: #pragma simd, Array notation, элементарные функции. Объяснить их отличия от ранее рассмотренных средств.
  5. Рассмотреть случай векторизации цикла с вызовом математических функций.
  6. Разобрать более сложные примеры.
  7. Сформулировать выводы, дать задания для самостоятельной работы.
Svetlana Svetlana
Svetlana Svetlana

Здравствуйие! Я хочу пройти курс Введение в принципы функционирования и применения современных мультиядерных архитектур (на примере Intel Xeon Phi), в презентации самостоятельной работы №1 указаны логин и пароль для доступ на кластер и выполнения самостоятельных работ, но войти по такой паре логин-пароль не получается. Как предполагается выполнение самосоятельных работ в этом курсе?