LEC02
.pdf
Параллельное ускорение в случайных алгоритмах
По материалам проф. Бухановского |
11 |
Субъединичное и сверхлинейное ускорение
Возможные причины: 1) накладные расходы (1000 оп. деления); 2) эффекты кэширования.
Универсальная причина: ошибка алгоритма распараллеливания.
По материалам проф. Бухановского |
12 |
Изменение результатов вычислений с плавающей точкой
int i;
float s = 0;
#pragma omp parallel for reduction (+:s) num_threads(8) for (i = 1; i < 1000000; ++i) {
s += 1.0/i;
}
Восемь потоков: s=14.393189
Один поток: |
s=14.357357 |
Различие: |
0.25% |
13
Типовой сценарий работы параллельного программиста
1.Написать однопоточную программу.
2.Остановиться.
3.Попробовать автоматическое распараллеливание.
4.Остановиться.
5.Попробовать параллельные библиотеки и структуры данных.
6.Остановиться.
7.Профилировать приложение, оценить максимально достижимый эффект от распараллеливания.
8.Остановиться.
9.Распараллелить узкие места и часто вызываемые функции.
Цель параллельного программирования – избежать параллельного программирования! 14
Параллельные библиотеки
•AMD Performance Library (Framewave)
•Intel Integrated Performance Primitives (IPP), Intel Math Kernel Library.
•Sun mediaLib
•ATLAS (Automatically Tuned Linear Algebra Software): MATLAB, Mathematica, Octave, …
•…
15
Виды гонок (data race, race condition)
•ЗП-ЗП: output dependence.
•ЗП-ЧТ: flow dependence.
•ЧТ-ЗП: anti-dependence.
•Атомарность операций
•Вводящий в заблуждения перевод: Data race = гонки данных
Правильнее: «гонки при работе с данными»
16
Ложное разделение строк кэш-
памяти (False Sharing)
•Суть проблемы – операции ЧТ и ЗП разными потоками различных переменных, находящихся в одной строке кэш-памяти, приводят к ненужному ожиданию перезагрузки кэш-строки для читающего потока по вине записывающего потока.
•Решение
1)разнесение переменных в памяти,
2)создание локальных копий переменных перед использованием в потоке.
17
