Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

LEC02

.pdf
Скачиваний:
16
Добавлен:
21.03.2016
Размер:
724.38 Кб
Скачать

Параллельное ускорение в случайных алгоритмах

По материалам проф. Бухановского

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