Евгений Сергеев a20300ed84 done!
2024-01-22 01:56:29 +04:00

49 lines
1.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import numpy as np
import time
from concurrent.futures import ThreadPoolExecutor
def sequential_matrix_multiply(matrix_a, matrix_b):
return np.dot(matrix_a, matrix_b)
def parallel_matrix_multiply(matrix_a, matrix_b, num_threads):
result = np.zeros_like(matrix_a)
rows, cols = matrix_a.shape
def multiply_row(row):
nonlocal matrix_a, matrix_b, result
result[row, :] = np.dot(matrix_a[row, :], matrix_b)
with ThreadPoolExecutor(max_workers=num_threads) as executor:
executor.map(multiply_row, range(rows))
return result
def benchmark(matrix_size, num_threads=1):
matrix_a = np.random.rand(matrix_size, matrix_size)
matrix_b = np.random.rand(matrix_size, matrix_size)
start_time = time.time()
sequential_result = sequential_matrix_multiply(matrix_a, matrix_b)
sequential_time = time.time() - start_time
start_time = time.time()
parallel_result = parallel_matrix_multiply(matrix_a, matrix_b, num_threads)
parallel_time = time.time() - start_time
return sequential_time, parallel_time
# Пример использования для матриц размером 100x100, 300x300, 500x500 элементов
matrix_sizes = [100, 300, 500]
threads_count = 4 # Указать желаемое количество потоков
for size in matrix_sizes:
sequential_time, parallel_time = benchmark(size, threads_count)
print(f"Размер матрицы: {size}x{size}")
print(f"Время с последовательным выполнением: {sequential_time:.6f} секунд")
print(f"Время с параллельной обработкой ({threads_count} потоков): {parallel_time:.6f} секунд")
print("=" * 30)