«Автоматическое отображение Фортран-программ на графический процессор»



бет7/7
Дата19.07.2016
өлшемі1.18 Mb.
#209881
түріДипломная работа
1   2   3   4   5   6   7

5.3 Оценка времени исполнения

С учётом полученных выше характеристик внутреннего параллелизма возможны три схемы вычисления общей производительности [10]:




  • доминирование вычислений (MWP > CWP);

  • доминирование задержек обмена с памятью (MWP <= CWP)

  • недостаточное количество активных варпов.

5.3.1 Доминирование задержек обмена с глобальной памятью

Доминирование задержек обмена с глобальной памятью – случай весьма частый, т.к. задержка доступа для одной транзакции составляет порядка 400 – 500 тактов (в зависимости от модели ускорителя). Вычислительная интенсивность цикла должна быть очень большой, чтобы скрыть период ожидания, возникающий при этом. Однако, при большой вычислительной сложности можно с лёгкостью превысить лимит регистров для каждого варпа, что внесёт лишние обращения в глобальную память. При MWP <= CWP все вычислительные периоды (кроме первых MWP-1 штуки) скрыты обращениями в глобальную память, тем самым время выполнения ядровой функции:


C(Ki) = mem_cycles *  + comp_p * (MWP – 1) (41)

5.3.2 Доминирование вычислений

Если нашлось приложение достаточно вычислительно интенсивное, то напротив, периоды ожидания обмена скрыты за вычислениями. Таким образом, только последний период ожидания обмена внесёт свой вклад во время работы функции-ядра, а основное время работы полностью покрывается вычислительными периодами:


C(Ki) = mem_l + comp_cycles * Vacti (42)

5.3.3 Недостаточное число активных варпов


Если CWP и MWP равны числу активных варпов на мультипроцессоре, то внутренний параллелизм используется не полностью: он ограничен недостаточным внешним параллелизмом. В этом случае затраты исполнение функции-ядра характеризуются формулой:


B (Ki) = mem_cycles + comp_cycles + сomp_p * (MWP – 1)* Vacti (43)

5.3.4 Затраты на синхронизацию

Затраты на синхронизацию в DVM-системе возникают при выполнении редукционных операций. Параметр num_sync для одного активного блока был вычислен в формуле (9). Таким образом, получаем оценку:


Sync(Ki) = min(MWP, Vacti) * shared_mem_delay * warp_size *

* num_sync * warps_in_block (44)
где shared_mem_delay – задержка доступа к разделяемой памяти нитей.

5.4 О построенной оценке эффективности

Описанная модель оценки времени выполнения программы не может учесть часть факторов, влияющих на результат. Прежде всего, алгоритм работы компилятора неизвестен, поэтому сложно оценить реальное число генерируемых транзакций в глобальную память для обработки одного обращения. Также неизвестными остаются оптимизации на уровне кода, которые осуществил компилятор программы – изменение порядка инструкций, возможное построение оптимального дерева вычислений, векторизация. Более того, использование предиктора предполагается в ситуации, когда код в представлении CUDA не был сгенерирован.

Планировщики инструкций не гарантируют определённого порядка исполнения блоков и варпов в блоке. В модели сделано предположение о том, что все варпы и блоки равноправны между собой.

Аналогичное можно сказать и про обработку запросов на осуществление транзакций – алгоритм работы, используемый в контроллере памяти неизвестен; предполагается, что контроллер обслуживает поступающие запросы в порядке очереди, равноправно и независимо.

Также неизвестен алгоритм работы кэш-памяти. Влияние кэша заметно на программах, где доминируют задержки обмена с глобальной памятью (случай MWP <= CWP). В данном исследовании был осуществлён прогноз запуска в двух режимах – без использования кэш памяти и с как можно более эффективным её использованием.

В задачах, где задержки на обращение к памяти играют большую роль – эти два случая представляют собой оценку сверху и снизу времени исполнения функции-ядра. Без использования кэш-памяти в архитектуре Fermi размер транзакции уменьшается до 32-х байт [6], таким образом увеличивая их количество. Эта ситуация моделируется в предикторе. Такой режим предпочтителен, когда в программе осуществляется доступ в разрозненные куски памяти или все нити обращаются к одной и той же ячейке. Обычно в вычислительных задачах работают с секциями массивов, организуя выровненный доступ. Таким образом прогноз без использования кэша характеризует оценку сверху. С другой стороны, предположение о максимальном использовании кэша оценивает работу функции снизу, т.к. есть определённое количество обменов с глобальной памятью и вычислений, которые не могут быть проигнорированы. Использование кэш-памяти при запуске программы в DVM-системе можно только ограничить по размеру, т.е. кэш используется при каждом запуске. Поэтому результаты реальных запусков располагаются между этим двумя прогнозами. Для уточнения вычисляется корректирующий коэффициент. Он может быть вычислен, как медиана отклонения отношений прогнозов, упоминавшихся выше. Такой подход возможен в том случае, когда в наличии нет графического ускорителя. Если графический ускоритель есть, то можно воспользоваться соотношением попаданий/промахов в кэш, измеренных на модельной программе. Таким образом узнаём в среднем долю использования кэша. При построении прогноза пересчитываем соотношение обращений в память и обращений в кэш с учётом коэффициента.





Цикл №

Прогноз без исп. кэша




Максимальное использование

Коэфф.№ 1

Попаданий (измерено)

Промахов (измерено)

Коэфф.№2

1

0,7805




0,54860000

0,702882767

18550

418

0,97796

2

29,494




18,75800000

0,635993761

21253

32101

0,39836

3

19,436




8,57000000

0,440934334

70786

18771

0,790401

Таблица 3. Прогноз и запуск на TeslaC2050 численного решения уравнения теплопроводности, алгоритм Якоби

Итоговый коэффициент № 1 – 0,68822.

Итоговый коэффициент № 2 – 0,72224.

6 Полученные результаты

Для проведения тестов использовался графический ускоритель Tesla C2050, используемый в гибридном вычислительном кластере К-100. Ускоритель имеет архитектуру Fermi (compute_capability 2.0).


Прогноз и запуск для алгоритма Якоби численного решения уравнения теплопроводности.





Прогноз и запуск для программы расчёта кавитации.

Предиктор выделил в программе 26 функций ядер, для каждого было построено три прогноза: с учётом влияния кэша, без учёта влияния кэша и предлагаемая линейная комбинация приведённых выше прогнозов.




Рисунок 3. Время выполнения TeslaC2050, прогноз без учёта кэша

В четырёх циклах, время вычисления которых оказалось наибольшим, основной вклад вносят обращения к памяти, поскольку производится невыровненный доступ к массивам. Очевидно, предиктор сгенерировал больше транзакций к глобальной памяти, чем есть на самом деле. Это произошло из-за разбиения транзакций по 32 байта, а также из-за того, что в прогнозе ничего не попадало в кэш: все обращения к массивам считались обращениями к глобальной памяти. Сильное расхождение прогноза и результатов запуска на цикле loop_174 нельзя объяснить с точки зрения анализа кода исходной программы: циклы loop_161 и loop_191 обладают аналогичной структурой. Для них расхождение меньше.




Рисунок 4. Время выполнения TeslaC2050, прогноз с учётом кэша.

Прогноз с учётом кэша, построенный с использованием коррекктирующего коэффициента. Расхождение между прогнозом и запуском на основных циклах составило 24,27%.



«Контейнер»

Пример вычислительно трудной задачи. Влияние кэша невелико. Расхождение между графиком прогноза и запуска объясняется неизвестным алгоритмом распределения регистров. В условиях запуска (с размерами блоков по умолчанию) максимальное количество регистров на одну нить, которое может позволить себе каждый варп, составляет 63 штуки. При реальном запуске количество регистров различается у разных варпов, в циклах, занимающих самое большое время (имеющих достаточное количество обменов с памятью и хорошую вычислительную интенсивность), это количество достигается. Предиктор прогнозирует данное число порядка 80 – 90. Поскольку регистров не хватает, предиктор обрабатывает эту ситуацию, как лишние обращения к глобальной памяти.




Заключение

В данной дипломной работе реализован модуль предиктор, который по коду последовательной программы и результатам работы эксперта DVMH строит возможное отображение программы на графический ускоритель, оценивает время выполнения данного отображения и его эффективность.


В процессе выполнения работы:

  1. Изучен подход по отображению параллельных программ на графические ускорители, который применяется в системе DVM

  2. Изучены спецификации выполнения программ на графических ускорителях архитектуры Fermi

  3. Реализован программный модуль, который учитывает возможности графического ускорителя данной архитектуры.

  4. В модуле учтены документированные особенности выполнения программ на графическом ускорителе, для прочих были сделаны эмпирические предположения.

Программный модуль написан на языке Си++. Текст программы составляет 3282 строки.


Литература





  1. Коновалов Н.А., Крюков В.А., Погребцов А.А., Поддерюгина Н.В., Сазанов Ю.Л. Параллельное программирование в системе DVM. Языки Fortran-DVM и C-DVM // Труды Международной конференции "Параллельные вычисления и задачи управления" (PACO’2001) Москва, 2-4 октября 2001 г., 140-154 с.

  2. «DVMH-система», ИПМ им. Келдыша РАН, Москва, Россия

[HTML] (http://www.keldysh.ru/dvm/dvmhtm1107/rus/dvmh.html)

  1. High Performance Fortran Forum. High Performance Fortran Language Specification, version 2.0, January 1997.

[HTML] (http://hpff.rice.edu/versions/hpf2/index.htm)

  1. OpenMP Application Program Interface. Version 3.1. July 2011.

[PDF] (http://www.openmp.org/mp-documents/OpenMP3.1.pdf)

  1. Бахтин В.А., Катаев Н.А., Клинов М.С., Крюков В.А., Поддерюгина Н.В., Притула М.Н. Автоматическое распараллеливание Фортран-программ на кластер с графическими ускорителями // Труды международной научной конференции “Параллельные вычислительные технологии (ПаВТ’2012)” (Новосибирск, 26 – 30 марта 2012 г.) – Челябинск: Издательский центр ЮУрГУ, 2012, c. 373-379

  2. Боресков А.В., Харламов А.А., Марковский Н.Д., Микушин Н.Д., Мортиков Е.В., Мыльцев А.А., Сахарных Н.А., Фролов В.А. Параллельные вычисления на GPU. Архитектура и программная модель CUDA. М: Издательство Московского университета, 2012. 324 с.

  3. Крюков В.А. Разработка параллельных программ для вычислительных кластеров и сетей. // Информационные технологии и вычислительные системы. № 1-2, 2003 г., стр. 42-61.

  4. Куприк И.В. Система автоматизации распараллеливания. Предсказание времени выполнения программ на графическом процессоре (дипломная работа). Москва, Россия, 2012

  5. Ken Kennedy, Charles Koelbel, Hans Zima, The Rise and Fall of High Performance Fortran: An Historical Object Lesson, Proceedings of the third ACM SIGPLAN conference on History of programming languages 2007, San Diego, California, June 09 - 10, 2007

  6. Sunpyo Hong, Hyesoon Kim, An Analytical Model for a GPU Architecture with Memory-level and Thread-level Parallelism Awareness. Extended Technical report, Georgia Institute of Technology, USA, 2009

  7. Kishore Kothapalli, Rishabh Mukherjee, Suhail Rehman, Suryakant Patidar, P. J. Narayanan, Kannan Srinathan, A Performance Prediction Model for the CUDA GPGPU Platform, International Institute of Information Technology, Hyderabad, India, 2010

  8. NVIDIA CUDA C Programming Guide, NVIDIA Corporation, 2012

  9. Бахтин В.А., Бородич И.Г., Катаев Н.А., Клинов М.С., Ковалева Н.В., Крюков В.А., Поддерюгина Н.В. Диалог с программистом в системе автоматизации распараллеливания САПФОР // Вестник Нижегородского университета им. Н.И. Лобачевского, серия “Информационные технологии”. – Н. Новгород: Изд-во ННГУ, 2012, №5 (2). – C. 242-245.



Достарыңызбен бөлісу:
1   2   3   4   5   6   7




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет