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

38513-LW_Integral_ppt

.pdf
Скачиваний:
11
Добавлен:
27.05.2015
Размер:
1.42 Mб
Скачать

Параллельная версия.

Распараллеливание базового алгоритма

Проанализируйте полученный код с помощью Intel Parallel Inspector.

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

Н. Новгород, 2010 г.

Вычисление определенного интеграла

31

 

 

Параллельная версия.

Распараллеливание базового алгоритма

Результаты последовательной и параллельной версии не совпали. Всегда ли это говорит об ошибке?

Результаты последовательной и параллельной версии совпали. Всегда ли это говорит об отсутствии ошибок?

Инструмент показывает наличие ошибок. Всегда ли это правда?

Инструмент показывает отсутствие ошибок. Всегда ли это правда?

Алгоритмически порядок вычислений в посл. и паралл. версии одинаков. Всегда ли это будет так в машинной реализации?

Н. Новгород, 2010 г.

Вычисление определенного интеграла

32

 

 

Параллельная версия.

Распараллеливание базового алгоритма

Сравнение времени численного интегрирования для последовательной и параллельной реализации

Н. Новгород, 2010 г.

Вычисление определенного интеграла

33

 

 

Параллельная версия.

Распараллеливание базового алгоритма

Сетку интегрирования можно разделять не только по столбцам, но и по строкам.

Схематичное изображение метода распараллеливания по строкам представлено на слайде.

Н. Новгород, 2010 г.

Вычисление определенного интеграла

34

 

 

Параллельная версия.

Распараллеливание базового алгоритма

Создайте в рамках решения 02_Integral новый проект с названием 02_Integral_row.

Выполните переход к использованию компилятора Intel C++ и в свойствах проекта включите поддержку использования OpenMP.

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

Н. Новгород, 2010 г.

Вычисление определенного интеграла

35

 

 

Параллельная версия.

Распараллеливание базового алгоритма

Параллельная реализация численного интегрирования определенного интеграла с разделением сетки интегрирования по строкам:

//Сетка интегрирования делится по строкам for(i = 0; i < n1; i++)

{

//разделение точек сетки интегрирования по оси y

#pragma omp parallel for private (x, y) reduction(+: sum) for(j = 0; j < n2; j++)

{

//вычисление координат точки y = a2 + j*h + h / 2;

x = a1 + i*h + h / 2;

//вычисление интеграла

sum += ((exp(sin(x * PI) * cos(y * PI)) + 1) / ((b1 - a1) * (b2 - a2))) * h * h;

}

}

Н. Новгород, 2010 г.

Вычисление определенного интеграла

36

 

 

Параллельная версия.

Распараллеливание базового алгоритма

Пересоберите получившийся код (команда Build→Rebuild Solution) и запустите его на выполнение.

Н. Новгород, 2010 г.

Вычисление определенного интеграла

37

 

 

Параллельная версия.

Распараллеливание базового алгоритма

Сравнение времени численного интегрирования для последовательной и параллельных реализаций

Н. Новгород, 2010 г.

Вычисление определенного интеграла

38

 

 

Параллельная версия.

Распараллеливание базового алгоритма

Еще один популярный способ геометрического разделения данных – разделения данных на блоки.

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

Н. Новгород, 2010 г.

Вычисление определенного интеграла

39

 

 

Параллельная версия.

Распараллеливание базового алгоритма

Создайте в рамках решения 02_Integral новый проект с названием 02_Integral_block.

Выполните переход к использованию компилятора Intel C++ и в свойствах проекта включим поддержку использования OpenMP.

Блочная схема легко реализуется с помощью использования вложенного параллелизма в OpenMP.

Чтобы использовать вложенный параллелизм, необходимо сначала включить его поддержку с помощью вызова библиотечной функции:

//включаем возможность использования вложенного

//параллелизма

omp_set_nested(true);

Н. Новгород, 2010 г.

Вычисление определенного интеграла

40