Параллельные вычисления расчета факториала числа N
Распараллеливание алгоритма с помощью фоновых заданий (асинхронные вычисления)
- Описание
- Подробнее
Описание
Цель:
1. ускорить расчет факториала числа
2. научиться распараллеливать вычисления с помощью фоновых заданий
Предисловие
Всем привет!
Решил протестировать расчет факториала деревом через параллельные вычисления. Про задачу читайте здесь Факториал числа N = N!
Забегу вперед и скажу, что тесты проводились на клиент-серверной базе, конфигурация Бухгалтерия предприятия, редакция 2.0 на обычных формах, платформа 1С:Предприятие 8.3 (8.3.15.1830), СУБД PostgreSQL. Сведения о процессоре и памяти — в картинках (к сожалению, не знаю как скопировать текст сведений, поэтому вырезал скрин)
Результат меня обрадовал: классический алгоритм рассчитал факториал для 50 000 за 17 сек, алгоритм деревом — за 9 сек. Параллельное вычисление в 4 потока за 0 сек. Напишу за 1 сек, поскольку по настоящему я не смог сделать замеры — отловить время завершения фоновых заданий. Я ориентировался на время начала и время завершения фоновых заданий (картинка консоли заданий приложена).
После 50 000, я быстро посчитал в 4 потока 150 000! за 4-5 сек.
Алгоритм. Решение. Распараллеливание.
Фоновые задания как раз предназначаются для организации параллельных вычислений.
Задачу расчета факториала очень удобно распараллелить на несколько потоков вычислений. Причем это касается любого алгоритма для расчета факториала: классического, рекурсией или деревом. Главное разделить всю последовательность чисел на "отрезки", для каждого из которых запускать свой расчет отдельно.
В общем, сначала разделим входные данные: в алгоритме дерева используется разделение последовательности чисел пополам — еще раз пополам и т.д. Применим эту идею для своих целей.
Я решил разделить последовательность (2…ЧислоN) на 4 группы (см. Листинг 1) и расчет по каждой группе запускать в отдельном фоновом задании (см. Листинг 2).