Опубликован: 19.10.2012 | Доступ: свободный | Студентов: 295 / 62 | Длительность: 05:51:00
Самостоятельная работа 1:

Знакомство с основными возможностями Intel® CilkTM Plus на примере распараллеливания основных векторных операций

< Лекция 4 || Самостоятельная работа 1 || Самостоятельная работа 2 >
Аннотация: На примере операций с векторами даётся сравнение последовательной реализации, технологий распараллеливания с использованием OpenMP и Intel® CilkTM Plus. Рассматриваются возможные проблемы реализации, исследуется масштабируемость параллельных реализаций.

Материалы к лабораторной работе Вы можете скачать здесь.

Задание 1 - Вычисление суммы элементов вектора. Последовательный алгоритм

Время на выполнение задания 10 минут
Цель Измерение производительности последовательного алгоритма вычисления суммы элементов вектора

Подготовка

Скопируйте папку cilk_lab1 с файлами демонстрационной программы вычисления суммы элементов вектора из папки classfiles/Lab01/WTemplates в папку classfiles/Lab01/Explorations.

Компиляция и запуск последовательного алгоритма reduction

  1. Перейдите в каталог classfiles/Lab01/Explorations/cilk_lab1 и откройте файл с решением Microsoft® Visual Studio 2010 cilk_lab1.sln. Скомпилируйте приложение, выбрав кнопку меню Build—>Build Solution.
  2. Обратите внимание, что вызов алгоритмов находится в функции main в файле reduction.cpp, а их реализация содержится в заголовочном файле algo.h. Убедитесь, что в тексте программы в файле reduction.cpp закомментированы шаги 2-5 (активен вызов последовательного алгоритма редукции).
  3. Запустите приложение, выбрав кнопку меню Debug—>Start Without Debugging.

Запишите время его выполнения в последовательном режиме:________________ .

Повторите 3 не менее 5 раз и найдите среднее время выполнения:_________________.

Задание 2 - Многопоточная реализация вычисления суммы элементов вектора с помощью OpenMP

Время на выполнение задания 20 минут
Цель Оценка времени вычисления суммы элементов вектора в реализации программы с использованием OpenMP.

Запуск многопоточной программы reduction

  1. В тексте программы в файле reduction.cpp раскомментируйте шаг 2 (тем самым станет активен вызов алгоритма редукции с использованием OpenMP).
  2. Запустите приложение, выбрав кнопку меню Debug—>Start Without Debugging. Запишите время его выполнения в параллельном режиме с использованием OpenM.

    При помощи изменения строчки omp_set_num_threads (n);

    в файле reduction.cpp можно менять число потоков OpenMP.

    Повторите 2 не менее, чем по 5 раз для каждого значения числа потоков (от 2 до 4) и найдите среднее время выполнения в каждом случае:

    ________________________________________________________________________________________________________________

  3. Сравните полученный результат с результатом задания 1 и объясните причину сходства/различия.

Задание 3 - Многопоточная реализация вычисления суммы элементов вектора с помощью Intel® CilkTM Plus (с редукторами)

Время на выполнение задания 20 минут
Цель Исследовать эффективность распараллеливания вычислениясуммы элементов вектора с помощью Intel® CilkTM Plus(cilk_for, редукторы).

Запуск многопоточной программы reduction

  1. В тексте программы в файле reduction.cpp раскомментируйте шаг 3 (тем самым станет активен вызов алгоритма редукции с использованием cilk_for и редукторов).
  2. Запустите приложение, выбрав кнопку меню Debug—>Start Without Debugging.

    Запишите время его выполнения в параллельном режиме с использованием cilk_for без редукторов:

    _______________________________________________________________________________________________

    При помощи изменения строчки cilkrts_set_param ( "nworkers" , "n" ) ; в файле reduction.cpp можно менять число рабочих потоков Cilk.

    Повторите 1 не менее, чем по 5 раз для каждого значения числа потоков и найдите среднее время выполнения в каждом случае:

    ________________________________________________________________________________________________________________

  3. Сравните полученный результат с результатом задания 2 и объясните причину сходства/различия.

Задание 4 - Многопоточная реализация вычисления суммы элементов вектора с помощью Intel® CilkTM Plus (без редукторов)

Время на выполнение задания 20 минут
Цель Исследовать эффективность распараллеливания вычисления суммы элементов вектора с помощью Intel® CilkTM Plus (cilk_for, редукторы не используются).

Запуск многопоточной программы reduction

  1. В тексте программы в файле reduction.cpp раскомментируйте шаг 4 (тем самым станет активен вызов алгоритма редукции с использованием cilk_for без редукторов).
  2. Запустите приложение, выбрав кнопку меню Debug—>Start Without Debugging.

    Запишите время его выполнения в параллельном режиме с использованием cilk_for без редукторов:

    _______________________________________________________________________________________________

    При помощи изменения строчки cilkrts_set_param ( "nworkers" , "n" ) ; в файле reduction.cpp можно менять число рабочих потоков Cilk.

    Повторите 1 не менее, чем по 5 раз для каждого значения числа потоков и найдите среднее время выполнения в каждом случае:

    ________________________________________________________________________________________________________________

  3. Обратите внимание на результат операции. Сравните полученный результат с результатом задания 1, 2 и 3 и объясните причину сходства/различия.

Задание 5 - Многопоточная реализация вычисления суммы элементов вектора с помощью Intel® CilkTM Plus (cilk_spawn)

Время на выполнение задания 20 минут
Цель Исследовать эффективность распараллеливания вычисления суммы элементов вектора с помощью Intel® CilkTM Plus (cilk_spawn).

Запуск многопоточной программы reduction

  1. В тексте программы в файле reduction.cpp раскомментируйте шаг 5 (тем самым станет активен вызов алгоритма редукции с использованием cilk_for без редукторов).
  2. Запустите приложение, выбрав кнопку меню Debug—>Start Without Debugging.

    Запишите время его выполнения в параллельном режиме с использованием cilk_spawn::

    _______________________________________________________________________________________________

    При помощи изменения строчки cilkrts_set_param ( "nworkers" , "n" ) ; в файле reduction.cpp можно менять число рабочих потоков Cilk.

    Повторите 1 не менее, чем по 5 раз для каждого значения числа потоков и найдите среднее время выполнения в каждом случае:

    ________________________________________________________________________________________________________________

  3. Сравните полученный результат с результатами предыдущих заданий и объясните причину сходства/различия.
< Лекция 4 || Самостоятельная работа 1 || Самостоятельная работа 2 >
Дмитрий Кифель
Дмитрий Кифель
Казахстан, Темиртау
Эдуард Рагимов
Эдуард Рагимов
Грузия, Тюилиси, №83, 1997