Скачать презентацию Параллельное программирование Мотивация Увеличение производительности процессоров 1986 Скачать презентацию Параллельное программирование Мотивация Увеличение производительности процессоров 1986

ff590f417550c79dfd206c53f988dfd3.ppt

  • Количество слайдов: 12

Параллельное программирование Мотивация Параллельное программирование Мотивация

Увеличение производительности процессоров 1986 – 2002: Производительность процессоров увеличивалась на 50% в год 2002 Увеличение производительности процессоров 1986 – 2002: Производительность процессоров увеличивалась на 50% в год 2002 – 2016: Производительность увеличивается на 20% в год С 2005 основные производители пошли по пути увеличения количества процессоров в одной интегральной схеме

Возникающие вопросы Не всё ли равно? Увеличение производительности в 20% в год – тоже Возникающие вопросы Не всё ли равно? Увеличение производительности в 20% в год – тоже неплохо. Нельзя ли было продолжить разработку все более мощных однопроцессорных систем? Зачем понадобилась параллельность? Почему бы не написать программу, которая бы просто конвертировала последовательные программы в параллельные?

Зачем нужно постоянное увеличение производительности Постоянно расширяется круг задач, которые мы способны решать. Задачи, Зачем нужно постоянное увеличение производительности Постоянно расширяется круг задач, которые мы способны решать. Задачи, требующие большей производительности: Моделирование климата Поиск новых лекарств Исследования в энергетике Исследование геномов Нейробиологическое моделирование Анализ данных (каждые два года – 2 x)

Зачем разрабатывать параллельные системы Ранее производительность наращивалась за счет увеличения плотности транзисторов в процессоре Зачем разрабатывать параллельные системы Ранее производительность наращивалась за счет увеличения плотности транзисторов в процессоре При уменьшении размера транзисторов скорость процессора увеличивается, но при этом растет энергопотребление Большинство потребляемой энергии расходуется в виде тепла, процессору требуется охлаждение В первом десятилетии XXI века пределы возможностей воздушного охлаждения процессоров почти достигнуты Вместо усложнения монолитного процессора производители размещают два или более полноценных процессора на одной микросхеме (многоядерные процессоры)

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

Пример: подсчет суммы Последовательная версия программы: sum = 0; for (i = 0; i Пример: подсчет суммы Последовательная версия программы: sum = 0; for (i = 0; i < n; i++) { x = Compute_next_value(. . . ); sum += x; } Задача: распараллелить эту программу по p процессорам.

Попытка распараллеливания my_sum = 0; my_first_i =. . . ; my_last_i =. . . Попытка распараллеливания my_sum = 0; my_first_i =. . . ; my_last_i =. . . ; for (my_i = my_first_i; my_i < my_last_i; my_i++) { my_x = Compute_next_value(. . . ); my_sum += my_x; } if ( I'm the master core) { // Что здесь не так? Как сделать лучше? sum = my_x; for each core other than myself { receive value from core; sum += value; } } else { send my_x to the master; }

Как разрабатывать параллельные программы Data-parallel / task-parallel Коммуникация между ядрами Балансировка загрузки (Load balancing) Как разрабатывать параллельные программы Data-parallel / task-parallel Коммуникация между ядрами Балансировка загрузки (Load balancing) Синхронизация В настоящее время наиболее эффективные параллельные программы разрабатываются с использованием явных параллельных конструкций, с помощью расширений таких языков, как C и C++.

Терминология: concurrent, parallel, distributed computing Concurrent (совместное): несколько заданий могут быть в процессе выполнения Терминология: concurrent, parallel, distributed computing Concurrent (совместное): несколько заданий могут быть в процессе выполнения в любой момент времени Parallel (параллельное): множество одновременно работающих заданий тесно взаимодействуют Distributed (распределенное): программа может взаимодействовать с другими программами

План работы Open. MP (shared memory) MPI (distributed memory) Pthreads CUDA (Graphical PU) Парадигма План работы Open. MP (shared memory) MPI (distributed memory) Pthreads CUDA (Graphical PU) Парадигма Map. Reduce (Fault-tolerant, distributed) Готовый инструментарий и библиотеки (La. PACK, BLAS, FFTW)

Вопросы для самоконтроля Devise formulas for the functions that calculate my first i and Вопросы для самоконтроля Devise formulas for the functions that calculate my first i and my last i in the global sum example. Remember that each core should be assigned roughly the same number of elements of computations in the loop. Hint: First consider the case when n is evenly divisible by p. 1. 2 We’ve implicitly assumed that each call to Compute next value requires roughly the same amount of work as the other calls. How would you change your answer to the preceding question if call i = k requires k + 1 times as much work as the call with i = 0? So if the first call (i = 0) requires 2 milliseconds, the second call (i = 1) requires 4, the third (i = 2) requires 6, and so on.