DAS_2023_1/degtyarev_mikhail_lab_6

Лабораторная 6

Вариант 9

Задание

Кратко: реализовать нахождение детерминанта квадратной матрицы.

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

Описание Программы

Алгоритмы:

Базовый алгоритм

Он работает, с помощью уже встроенной функции из библиотеки numpy

def determinant_block(matrix_block):
    return np.linalg.det(matrix_block)

Параллельный алгоритм

def determinant_parallel(matrix, num_processes):
    size = matrix.shape[0]
    step = size // num_processes

    pool = Pool(processes=num_processes)
    blocks = []
    for i in range(0, size, step):
        blocks.append(matrix[i:i + step, i:i + step])

    dets = pool.map(determinant_block, blocks)
    return np.product(dets)

Результат

Был проведен замер времени работы алгоритмов для каждого типа матрицы: 100x100, 300x300, 500x500 с разным количеством процессов

Из скриншота выше видно, что для каждого типа матрицы оказалось быстрее выполнение последовательно, причем гораздо.

Ссылка на видео: https://vk.com/video151119348_456239203?list=ln-GQ61rRxQRWzAoVg2SZ