Лабораторная 2.
Параллельный рассчет числа Pi

  1. Найти значение числа Pi, используя сходимость бесконечного ряда Лейбница: Pi=4 - 4/3 + 4/5 - 4/7 + 4/9 -... .

    Исходные данные: количество потоков N и общее количество слагаемых COUNT.

    Принцип работы: Каждый порожденный поток, кроме последнего, обрабатывает (COUNT div N) слагаемых. Последний поток обрабатывает (COUNT div N)+(COUNT mod N) слагаемых. Например, если N=2 и COUNT=5, то первый поток будет обрабатывать 2 первых слагаемых (4 и 4/3), второй поток - 3 последних слагаемых (4/5, -4/7 и 4/9).

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

    Выходные данные: 1)Результат рассчета, 2)время работы и результаты рассчета каждого потока, 3) время работы основной программы (в миллисекундах).

  2. Разработать и внедрить в предыдущую программу управляющий поток (диспетчер), который будет создавать, запускать, дожидаться завершения параллельных потоков, по окончании работы - уничтожать параллельные потоки.
    Каждый рабочий поток по окончании подсчета должен корректировать своим результатом промежуточное значение числа Pi в глобальной переменной.
    Основной поток должен ожидать завершения работы диспетчера и раз в секунду выводить количество миллисекунд, прошедших с момента запуска программы. По окончании работы диспетчера - вывести время работы каждого потока (в миллисекундах) и окончательное значение числа Pi (для решения рекомендуется использовать объект синхронизации Событие с таймаутом).

  3. Разработать программу последовательного расчета значения числа Pi и сравнить время ее работы со временем работы параллельных программ 1 и 2. Эмпирически определить оптимальное количество потоков в программах 1 и 2, обеспечивающих максимальную скорость выполнения программ. Сделать выводы.