Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ALL_otvety_na_ekzamen_PRO.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
473.05 Кб
Скачать

8. Опишіть найдоцільніший підхід для паралельної реалізації дифузного алгоритму. На чому ґрунтується ефективний розподіл роботи серед потоків

На перший погляд дифузний алгоритм цілком послідовний, але якщо подивитися на розподіл помилок з іншої позиції( Див малюнок нижче.), то можна використати обробку зображення декількома потоками. Для обчислення поточного пікселя необхідно знати значення помилок eA, eB, eC з попереднього рядка і помилку пікселя що лежить ліворуч від обчислюваного. Припустимо eA = eD = 0 на лівому краю сторінки і eC = 0 на правому. Тільки но ці пікселі визначені, може бути обчислено і поточний. Таким чином кожен потік буде обробляти один рядок пікселей. Тільки но в рядку закінчилася обробка кількох перших пікселей, може починатися обробка наступного рядка.

Таким виникає затримка лише при обробці перших двох перед початком виконання наступного потоку.

9.Назвіть різновиди паралельної обробки

власне паралельна обробка та конвейерна обробка

Паралельна обробка – збільшення оброблюючих пристроїв в N раз зменшить час виконання в N раз.

Ковейерна – розділення задачі на незалежні етапи, кожний з яких бере інформацію від попереднього та передає результат наступному. тоді після виконання першого етапи можна вже загружати нову порцію данних.

10. До чого зводиться задача розпаралелювання програми?

  • выполнить анализ имеющихся вычислительных схем и осуществить их разделение (декомпозицию) на части (подзадачи), которые могут быть реализованы в значительной степени независимо друг от друга;

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

  • определить необходимую (или доступную) для решения задачи вычислительную систему и выполнить распределение имеющего набора подзадач между процессорами системы.

При самом общем рассмотрении понятно, что объем вычислений для каждого используемого процессора должен быть примерно одинаков – это позволит обеспечить равномерную вычислительную загрузку (балансировку) процессоров. Кроме того, также понятно, что распределение подзадач между процессорами должно быть выполнено таким образом, чтобы количество информационных связей (коммуникационных взаимодействий) между подзадачами было минимальным.

11. У яких випадках процесор може виконувати команди одночасно?

когда команды независимы по данным и имеются свободные исполнительные блоки для выполнения обоих команд

12. Назвіть найпоширеніші способи розпалалелювання

  • OpenMP: директивы компилятора для простого параллельного программирования

  • MPI: библиотечные подпрограммы для реализации высокоэффективной переносимости

  • Java: параллельность в языке программирования на основе ведущих объектов

13. У яких випадках можливе ефективне розпалалелювання программ?

У випадках, коли є багато частин які можуть виконуватися незалежно(паралельно), тобто коли у програмі або зовсім немає, або мінімальні інформаційні залежності

14. що слід зробити для того, щоб примусити паралельну обчислювальну систему або супер-ЕОМ працювати з максимальною ефективністю на конкретній програмі.

Треба оптимізувати программу для роботи на цій конкретній обчислювальній системі з урахуванням кількости обчислювальних модулей та структури ситеми.

15. Розкрийте послідовність дій при створенні паралельної програми, що реалізує множення двох векторів

Скалярное произведение двух векторов вычисляется по формуле

‹a,b› = a1b1 + a2b2 + … + anbn

определим зависимости

результат скалярного произведения зависит от результов умножения соответствующих координат обоих векторов друг на друга, а результат произведения зависит только от значений i-й координаты обоих векторов. Это значит что вычисление произведений можно производить независимо друг от друга, а после вычисления всех произведений просуммировать результаты в общую переменную.

удобней всего реализовать такую программу на OpenMP

int a[] = {1,2,3,4,5,6};

int b[] = {7,8,9,10,11,12};

int result = 0;

#pragma omp parallel for reduction(+:result)

for( int i = 0; i <6; ++i )

{

result =a[i]*b[i]

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]