Задание 4 (многопоточная обработка данных)

Указания

  • Необходимо выполнить задание в двух вариантах: при помощи интерфейсов Windows API и POSIX.
  • Необходимо реализовать задание в последовательном и многопоточном варианте, результаты сравнить между собой.

  1. Написать программу, которая получает список файлов и для каждого файла вычисляет количество повторений некоего символа. Каждый файл должен обрабатываться в отдельном потоке. Основной поток должен по окончании обработки выводить результаты.

  2. Дан массив вещественных чисел. Вычислить наибольший элемент этого массива, разделив работу между n потоками. Каждый поток должен вычислить максимум в заданном ему фрагменте массива, после чего результаты работы работы потоков (n чисел) сравниваются между собой.

  3. Дан массив вещественных чисел, содержащий y0, y1, ..., yN — значения некоторой функции в точках x0, x0 + h, x0 + 2 h, ... (задано h, значение x0 не важно). Вычислить приближённые значения производной функции в этих точках по формулам:

    y'0 = (y1 - y0) / h,
    y'N = (yN - yN-1) / h,
    y'i = (yi+1 - yi-1) / (2 h).
    Разделить работу между n потоками. Каждый поток должен вычислить значения в заданном ему фрагменте массива.

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

  5. Задача "эволюция". Дано двумерное поле клеток, каждая из которых либо содержит организм (1), либо пуста (0). Каждая клетка проверяет состояние своих соседей (их 8) и изменяет своё по правилам:

    1. Живая клетка, вокруг которой < 2 живых клеток, умирает от одиночества.
    2. Живая клетка, вокруг которой есть 2 или 3 живых клеток, выживает.
    3. Живая клетка, вокруг которой > 3 живых клеток, умирает от перенаселения.
    4. Пустая клетка, рядом с которой равно 3 живых соседа, оживает.

    Реализовать один шаг моделирования при помощи n потоков, записав результат моделирования в другую матрицу тех же размеров.. Каждый поток должен вычислить значения в заданной ему полосе матрицы.

  6. Заданы две матрицы вещественных чисел размеров N × N. Выполнить операцию умножения двух матриц в n потоках. Каждый поток должен обрабатывать заданный набор строк первой матрицы (и целиком вторую).

  7. Дана матрица, представляющая некоторое бинарное изображение (со значениями 1 — "есть цвет" и 0 — "нет"). Получить по ней другую матрицу тех же размеров, представляющую сглаженное изображение (без "пиков" и "зазубрин"). В новом изображении необходимо затемнить все светлые пиксели, у которых как минимум d соседей не освещены, и осветлить тёмные, у которых как минимум d соседей освещены. Разделить работу между n потоками. Каждый поток должен вычислить значения в заданной ему полосе матрицы.

  8. Даны два массив вещественных чисел одинаковой длины. Вычислить сумму векторов, представленных этими массивами, разделив работу между n потоками. Каждый поток должен вычислить сумму в заданном ему фрагменте массивов.