From c406c5bfb53bf5bad8c31e15c5eda26235b937d7 Mon Sep 17 00:00:00 2001 From: BlasphemyGod Date: Mon, 18 Nov 2024 13:32:23 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=8F=D1=82=D0=B0=D1=8F=20=D0=BB=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- polevoy_sergey_lab_5/cargo.toml | 11 ++++ polevoy_sergey_lab_5/image.png | Bin 0 -> 69639 bytes polevoy_sergey_lab_5/readme.md | 12 ++++ polevoy_sergey_lab_5/src/main.rs | 100 +++++++++++++++++++++++++++++++ 4 files changed, 123 insertions(+) create mode 100644 polevoy_sergey_lab_5/cargo.toml create mode 100644 polevoy_sergey_lab_5/image.png create mode 100644 polevoy_sergey_lab_5/readme.md create mode 100644 polevoy_sergey_lab_5/src/main.rs diff --git a/polevoy_sergey_lab_5/cargo.toml b/polevoy_sergey_lab_5/cargo.toml new file mode 100644 index 0000000..42b884c --- /dev/null +++ b/polevoy_sergey_lab_5/cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "matrix" +version = "0.1.0" +edition = "2021" + +[profile.release] +strip = true +opt-level = 3 +panic = "abort" + +[dependencies] diff --git a/polevoy_sergey_lab_5/image.png b/polevoy_sergey_lab_5/image.png new file mode 100644 index 0000000000000000000000000000000000000000..d92b5b3b4a0a4c1367c7a92655eba5a944ebab84 GIT binary patch literal 69639 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 { + inner: Vec<[i32; N]> +} + +impl Matrix { + fn new() -> Matrix { + Matrix { inner: vec![[0; N]; N] } + } + + // Псевдослучайная генерация данных для матрицы + fn random(seed: i32) -> Matrix { + let mut matrix = Matrix::new(); + + for i in 0..N { + for j in 0..N { + matrix.inner[i][j] = i as i32 + j as i32 - seed; + } + } + + matrix + } +} + +// Перемножение матриц с помощью произвольного количества потоков, размер матриц и количество потоков известно на этапе компиляции +fn multiply(f: &Matrix, s: &Matrix) -> Matrix { + let mut result = Matrix::::new(); + let part_size = N / M; + let last_part_size = N - (N / M) * (M - 1); + let (sender, receiver) = mpsc::channel(); + + // Конструкция scope гарантирует, что созданные внутри потоки завершат работу там же и не буду существовать дольше, чем сами данные + thread::scope(move |scope| { + for n_part in 1..M { + let sender = sender.clone(); + scope.spawn(move || { + for row in (if n_part != 0 {n_part - 1} else {n_part}) * part_size..n_part * part_size { + let mut data = Box::new([0; N]); + for col in 0..N { + data[col] = f.inner[row].iter().zip(s.inner.iter().map(|row| row[col])).map(|(v1, v2)| v1 * v2).sum() + } + sender.send((row, data)).unwrap(); + } + }); + } + // В случае одного потока или если осталась часть матрицы, которую не удалось передать в поток + if last_part_size != 0 { + for row in N-last_part_size..N { + let mut data = Box::new([0; N]); + for col in 0..N { + data[col] = f.inner[row].iter().zip(s.inner.iter().map(|row| row[col])).map(|(v1, v2)| v1 * v2).sum() + } + sender.send((row, data)).unwrap(); + } + } + }); + + // Потоки отдают результаты в виде сообщений в mpsc канале, при этом передаётся указатель на данные, а не сами данные + while let Ok((row, data)) = receiver.recv() { + for col in 0..N { + result.inner[row][col] = data[col]; + } + } + + result +} + +// Замер времени выполнения, при этом размеры матриц и количество потоков известны на этапе компиляции +fn benchmark() { + let first = Matrix::::random(1); + let second = Matrix::::random(2); + + let start_time = time::Instant::now(); + multiply::(&first, &second); + println!("{0:>4}x{0:<4} ({1:>2} потоков): {2} сек", N, M, (time::Instant::now() - start_time).as_secs_f64()) +} + +fn main() { + benchmark::<100, 1>(); + benchmark::<300, 1>(); + benchmark::<500, 1>(); + benchmark::<1000, 1>(); + benchmark::<1200, 1>(); + + benchmark::<100, 4>(); + benchmark::<300, 4>(); + benchmark::<500, 4>(); + benchmark::<1000, 4>(); + benchmark::<1200, 4>(); + + benchmark::<100, 8>(); + benchmark::<300, 8>(); + benchmark::<500, 8>(); + benchmark::<1000, 8>(); + benchmark::<1200, 8>(); +} -- 2.25.1