1 / 17

Разработка параллельных приложений для многоядерных систем

Разработка параллельных приложений для многоядерных систем. С.В. Ковальчук НИИ Наукоемких компьютерных технологий, СПбГУ ИТМО. Используемые средства. Intel C++ Compiler Оптимизирующий компилятор OpenMP, Intel Threading Building Blocks Средства распараллеливания для систем с общей памятью.

errol
Télécharger la présentation

Разработка параллельных приложений для многоядерных систем

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Разработка параллельных приложений для многоядерных систем С.В. Ковальчук НИИ Наукоемких компьютерных технологий, СПбГУ ИТМО

  2. Используемые средства НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО • Intel C++ Compiler • Оптимизирующий компилятор • OpenMP, Intel Threading Building Blocks • Средства распараллеливания для систем с общей памятью

  3. Intel C++ Compiler НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО • Архитектуры процессоров • IA-32, x86-64 (Intel 64 and AMD64), IA-64, Xscale • Операционные системы • Microsoft Windows, Linux, Mac OS • Основные возможности • Высокоуровневая оптимизация • Межпроцедурная оптимизация • Автоматическое распараллеливание кода: • Векторизация • Разделение циклов по нескольким нитям • Профилирующая оптимизация • Интеграция с VisualStudio

  4. OpenMP НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО • Распараллеливание на системах с общей памятью • Стандарт для языков C/С++, Fortran • Использование директив для распараллелива • Поддержка компиляторами Intel, Microsoft, GCC и т.п. • Расширение для разделенной памяти • Cluster OpenMP

  5. Преимущества OpenMP НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО • Поэтапное (инкрементальное) распараллеливание • Можно распараллеливать последовательные программы поэтапно, не меняя их структуру • Единственность разрабатываемого кода • Нет необходимости поддерживать последовательный и параллельный вариант программы, поскольку директивы игнорируются обычными компиляторами (в общем случае) • Эффективность • Учет и использование возможностей систем с общей памятью • Стандартизованность (переносимость), поддержка в наиболее распространенных языках (C/C++, Fortran) и платформах (Windows, Unix)

  6. Принцип организации параллелизма НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Использование потоков (общее адресное пространство) Пульсирующий (“вилочный”, fork-join) параллелизм

  7. Состав библиотеки НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО • Набор директив компилятора • #pragma omp <директива><параметры> • Библиотека функций • omp_...() • Набор переменных окружения

  8. Использование OpenMP #include <omp.h> main () { int nthreads, tid; #pragma omp parallel private(nthreads, tid) { tid = omp_get_thread_num(); printf("Hello World from thread = %d\n", tid); if (tid == 0) { nthreads = omp_get_num_threads(); printf("Number of threads = %d\n", nthreads); } } } НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Использование директивы parallel

  9. Способы распараллеливания НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО • Распараллеливание цикла #pragma omp for • Распараллеливание секциями #pragma omp sections { #pragma omp section { ... } #pragma omp section { ... } } • Выполнение кода одним потоком #pragma omp master #pragma omp single

  10. Расписание (schedule) НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО • Распределение итераций в директиве for регулируется параметром (clause)schedule • static – итерации делятся на блоки по chunk итераций и статически разделяются между потоками; если параметр chunk не определен, итерации делятся между потоками равномерно и непрерывно • dynamic – распределение итерационных блоков осуществляется динамически (по умолчанию chunk=1) • guided – размер итерационного блока уменьшается экспоненциально при каждом распределении; chunk определяет минимальный размер блока (по умолчанию chunk=1) • runtime – правило распределения определяется переменной OMP_SCHEDULE (при использовании runtime параметр chunk задаваться не должен)

  11. Задача double summ = 0; for (int k = 0; k < N; k++) { double ind = k; summ += ((k & 1) ? -1 : 1) * (sin(ind*(ind + 1)) - cos(ind)*sin(ind*ind)) / (cos(ind*(1 - ind)) - 2*sin(ind)*sin(ind*ind)) * (sin(ind*(ind + 1)) - cos(ind)*sin(ind*ind)) / (cos(ind*(1 - ind)) - 2*sin(ind)*sin(ind*ind)); } } НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Нахождение суммы тригонометрического ряда

  12. Реализация распараллеливания double summ = 0; #pragma omp parallel for for (int k = 0; k < N; k++) { double ind = k; summ += ((k & 1) ? -1 : 1) * (sin(ind*(ind + 1)) - cos(ind)*sin(ind*ind)) / (cos(ind*(1 - ind)) - 2*sin(ind)*sin(ind*ind)) * (sin(ind*(ind + 1)) - cos(ind)*sin(ind*ind)) / (cos(ind*(1 - ind)) - 2*sin(ind)*sin(ind*ind)); } } НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Добавление директивы OpenMP

  13. Организация синхронной работы потоков double summ = 0; #pragma omp parallelfor reduction (+:summ) for (int k = 0; k < N; k++) { double ind = k; summ += ((k & 1) ? -1 : 1) * (sin(ind*(ind + 1)) - cos(ind)*sin(ind*ind)) / (cos(ind*(1 - ind)) - 2*sin(ind)*sin(ind*ind)) * (sin(ind*(ind + 1)) - cos(ind)*sin(ind*ind)) / (cos(ind*(1 - ind)) - 2*sin(ind)*sin(ind*ind)); } } НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Параллельный доступ к переменным

  14. Intel Threading Building Blocks НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО Высокоуровневая библиотека для разработки параллельных программ для систем с общей памятью Реализована на языке C++ в форме классов и шаблонов Поддерживаемые ОС: Microsoft Windows, Linux, Mac OS

  15. Возможности Intel TBB НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО • Решение типичных задач параллельного программирования • распараллеливание циклов с известным числом повторений; • распараллеливание циклов с известным числом повторений с редукции; • распараллеливание циклов с условием; • распараллеливание рекурсии. • Кроме того, содержит • потокобезопасные контейнеры; • аллокаторы, операторы выделения динамической памяти; • примитивы синхронизации.

  16. Пример кода с использованием Intel TBB int main() { task_scheduler_init init; string str[N] = { string(”a”), string(”b”) }; for (size_t i = 2; i < N; ++i) str[i] = str[i-1]+str[i-2]; string &to_scan = str[N-1]; size_t *max = new size_t[to_scan.size()]; size_t *pos = new size_t[to_scan.size()]; parallel_for( blocked_range<size_t>(0, to_scan.size(), 100), SubStringFinder( to_scan, max, pos ) ); for (size_t I = 0; I < to_scan.size(); ++i) cout<<” ”<<max[i]<<”(”<< pos[i]<<”)”<< endl; return 0; } НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО

  17. Ссылки НИИ Наукоемких компьютерных технологий, СПбГУ ИТМОНИИ Наукоемких компьютерных технологий, СПбГУИТМО • Intel • http://www.intel.com/ • OpenMP • http://www.openmp.org/ • Intel TBB • http://threadingbuildingblocks.org/

More Related