Знакомство с основными возможностями Intel® CilkTM Plus на примере распараллеливания основных векторных операций
Материалы к лабораторной работе Вы можете скачать здесь.
Задание 1 - Вычисление суммы элементов вектора. Последовательный алгоритм
Время на выполнение задания | 10 минут |
Цель | Измерение производительности последовательного алгоритма вычисления суммы элементов вектора |
Подготовка
Скопируйте папку cilk_lab1 с файлами демонстрационной программы вычисления суммы элементов вектора из папки classfiles/Lab01/WTemplates в папку classfiles/Lab01/Explorations.
Компиляция и запуск последовательного алгоритма reduction
- Перейдите в каталог classfiles/Lab01/Explorations/cilk_lab1 и откройте файл с решением Microsoft® Visual Studio 2010 cilk_lab1.sln. Скомпилируйте приложение, выбрав кнопку меню Build—>Build Solution.
- Обратите внимание, что вызов алгоритмов находится в функции main в файле reduction.cpp, а их реализация содержится в заголовочном файле algo.h. Убедитесь, что в тексте программы в файле reduction.cpp закомментированы шаги 2-5 (активен вызов последовательного алгоритма редукции).
- Запустите приложение, выбрав кнопку меню Debug—>Start Without Debugging.
Запишите время его выполнения в последовательном режиме:________________ .
Повторите 3 не менее 5 раз и найдите среднее время выполнения:_________________.
Задание 2 - Многопоточная реализация вычисления суммы элементов вектора с помощью OpenMP
Время на выполнение задания | 20 минут |
Цель | Оценка времени вычисления суммы элементов вектора в реализации программы с использованием OpenMP. |
Запуск многопоточной программы reduction
- В тексте программы в файле reduction.cpp раскомментируйте шаг 2 (тем самым станет активен вызов алгоритма редукции с использованием OpenMP).
- Запустите приложение, выбрав кнопку меню Debug—>Start Without Debugging. Запишите время его выполнения в параллельном режиме с использованием OpenM.
При помощи изменения строчки omp_set_num_threads (n);
в файле reduction.cpp можно менять число потоков OpenMP.
Повторите 2 не менее, чем по 5 раз для каждого значения числа потоков (от 2 до 4) и найдите среднее время выполнения в каждом случае:
________________________________________________________________________________________________________________
- Сравните полученный результат с результатом задания 1 и объясните причину сходства/различия.
Задание 3 - Многопоточная реализация вычисления суммы элементов вектора с помощью Intel® CilkTM Plus (с редукторами)
Время на выполнение задания | 20 минут |
Цель | Исследовать эффективность распараллеливания вычислениясуммы элементов вектора с помощью Intel® CilkTM Plus(cilk_for, редукторы). |
Запуск многопоточной программы reduction
- В тексте программы в файле reduction.cpp раскомментируйте шаг 3 (тем самым станет активен вызов алгоритма редукции с использованием cilk_for и редукторов).
- Запустите приложение, выбрав кнопку меню Debug—>Start Without Debugging.
Запишите время его выполнения в параллельном режиме с использованием cilk_for без редукторов:
_______________________________________________________________________________________________
При помощи изменения строчки cilkrts_set_param ( "nworkers" , "n" ) ; в файле reduction.cpp можно менять число рабочих потоков Cilk.
Повторите 1 не менее, чем по 5 раз для каждого значения числа потоков и найдите среднее время выполнения в каждом случае:
________________________________________________________________________________________________________________
- Сравните полученный результат с результатом задания 2 и объясните причину сходства/различия.
Задание 4 - Многопоточная реализация вычисления суммы элементов вектора с помощью Intel® CilkTM Plus (без редукторов)
Время на выполнение задания | 20 минут |
Цель | Исследовать эффективность распараллеливания вычисления суммы элементов вектора с помощью Intel® CilkTM Plus (cilk_for, редукторы не используются). |
Запуск многопоточной программы reduction
- В тексте программы в файле reduction.cpp раскомментируйте шаг 4 (тем самым станет активен вызов алгоритма редукции с использованием cilk_for без редукторов).
- Запустите приложение, выбрав кнопку меню Debug—>Start Without Debugging.
Запишите время его выполнения в параллельном режиме с использованием cilk_for без редукторов:
_______________________________________________________________________________________________
При помощи изменения строчки cilkrts_set_param ( "nworkers" , "n" ) ; в файле reduction.cpp можно менять число рабочих потоков Cilk.
Повторите 1 не менее, чем по 5 раз для каждого значения числа потоков и найдите среднее время выполнения в каждом случае:
________________________________________________________________________________________________________________
- Обратите внимание на результат операции. Сравните полученный результат с результатом задания 1, 2 и 3 и объясните причину сходства/различия.
Задание 5 - Многопоточная реализация вычисления суммы элементов вектора с помощью Intel® CilkTM Plus (cilk_spawn)
Время на выполнение задания | 20 минут |
Цель | Исследовать эффективность распараллеливания вычисления суммы элементов вектора с помощью Intel® CilkTM Plus (cilk_spawn). |
Запуск многопоточной программы reduction
- В тексте программы в файле reduction.cpp раскомментируйте шаг 5 (тем самым станет активен вызов алгоритма редукции с использованием cilk_for без редукторов).
- Запустите приложение, выбрав кнопку меню Debug—>Start Without Debugging.
Запишите время его выполнения в параллельном режиме с использованием cilk_spawn::
_______________________________________________________________________________________________
При помощи изменения строчки cilkrts_set_param ( "nworkers" , "n" ) ; в файле reduction.cpp можно менять число рабочих потоков Cilk.
Повторите 1 не менее, чем по 5 раз для каждого значения числа потоков и найдите среднее время выполнения в каждом случае:
________________________________________________________________________________________________________________
- Сравните полученный результат с результатами предыдущих заданий и объясните причину сходства/различия.