Merge pull request 'almukhammetov_bulat_lab_5' (#96) from almukhammetov_bulat_lab_5 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/96
This commit is contained in:
commit
2ef1f65ed6
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 17
|
||||||
|
VisualStudioVersion = 17.8.34330.188
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MatrixMultiplication", "MatrixMultiplication\MatrixMultiplication.csproj", "{133AAF5F-5559-4289-AF92-D6F78F952774}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{133AAF5F-5559-4289-AF92-D6F78F952774}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{133AAF5F-5559-4289-AF92-D6F78F952774}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{133AAF5F-5559-4289-AF92-D6F78F952774}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{133AAF5F-5559-4289-AF92-D6F78F952774}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {41DCCA96-3173-4B1F-895C-1ABE37B2B606}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
@ -0,0 +1,14 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="MathNet.Numerics" Version="5.0.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
@ -0,0 +1,243 @@
|
|||||||
|
using System.Diagnostics;
|
||||||
|
using MathNet.Numerics.LinearAlgebra;
|
||||||
|
|
||||||
|
class Program
|
||||||
|
{
|
||||||
|
static void Main()
|
||||||
|
{
|
||||||
|
Console.WriteLine("Введите количество потоков:");
|
||||||
|
string input = Console.ReadLine();
|
||||||
|
|
||||||
|
|
||||||
|
if (!int.TryParse(input, out int threadCount))
|
||||||
|
{
|
||||||
|
Console.WriteLine("Введено некорректное значение, будет использовано значение по умолчанию: 4");
|
||||||
|
threadCount = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Генерация матриц
|
||||||
|
int[,] matrixA100 = GenerateMatrix(100, 100);
|
||||||
|
int[,] matrixB100 = GenerateMatrix(100, 100);
|
||||||
|
|
||||||
|
int[,] matrixA300 = GenerateMatrix(300, 300);
|
||||||
|
int[,] matrixB300 = GenerateMatrix(300, 300);
|
||||||
|
|
||||||
|
int[,] matrixA500 = GenerateMatrix(500, 500);
|
||||||
|
int[,] matrixB500 = GenerateMatrix(500, 500);
|
||||||
|
|
||||||
|
// Счетчики для расчета среднего
|
||||||
|
long totalTimeSeq100 = 0, totalTimePar100 = 0;
|
||||||
|
long totalTimeSeq300 = 0, totalTimePar300 = 0;
|
||||||
|
long totalTimeSeq500 = 0, totalTimePar500 = 0;
|
||||||
|
long totalMemorySeq100 = 0, totalMemoryPar100 = 0;
|
||||||
|
long totalMemorySeq300 = 0, totalMemoryPar300 = 0;
|
||||||
|
long totalMemorySeq500 = 0, totalMemoryPar500 = 0;
|
||||||
|
|
||||||
|
int iterations = 10;
|
||||||
|
|
||||||
|
for (int i = 0; i < iterations; i++)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Прогон #{i + 1}:\n");
|
||||||
|
|
||||||
|
// 100x100
|
||||||
|
var (timeSeq100, memSeq100, timePar100, memPar100) = TestMatrixOperation(matrixA100, matrixB100, threadCount);
|
||||||
|
totalTimeSeq100 += timeSeq100;
|
||||||
|
totalTimePar100 += timePar100;
|
||||||
|
totalMemorySeq100 += memSeq100;
|
||||||
|
totalMemoryPar100 += memPar100;
|
||||||
|
|
||||||
|
// 300x300
|
||||||
|
var (timeSeq300, memSeq300, timePar300, memPar300) = TestMatrixOperation(matrixA300, matrixB300, threadCount);
|
||||||
|
totalTimeSeq300 += timeSeq300;
|
||||||
|
totalTimePar300 += timePar300;
|
||||||
|
totalMemorySeq300 += memSeq300;
|
||||||
|
totalMemoryPar300 += memPar300;
|
||||||
|
|
||||||
|
// 500x500
|
||||||
|
var (timeSeq500, memSeq500, timePar500, memPar500) = TestMatrixOperation(matrixA500, matrixB500, threadCount);
|
||||||
|
totalTimeSeq500 += timeSeq500;
|
||||||
|
totalTimePar500 += timePar500;
|
||||||
|
totalMemorySeq500 += memSeq500;
|
||||||
|
totalMemoryPar500 += memPar500;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Вывод средних значений
|
||||||
|
Console.WriteLine($"\nСреднее время (мс) и расход памяти (байт) для последовательного и параллельного умножения матриц:");
|
||||||
|
|
||||||
|
Console.WriteLine($"100x100: Последовательно: Время: {totalTimeSeq100 / iterations} мс, Память: {totalMemorySeq100 / iterations} байт");
|
||||||
|
Console.WriteLine($"100x100: Параллельно: Время: {totalTimePar100 / iterations} мс, Память: {totalMemoryPar100 / iterations} байт");
|
||||||
|
|
||||||
|
Console.WriteLine($"300x300: Последовательно: Время: {totalTimeSeq300 / iterations} мс, Память: {totalMemorySeq300 / iterations} байт");
|
||||||
|
Console.WriteLine($"300x300: Параллельно: Время: {totalTimePar300 / iterations} мс, Память: {totalMemoryPar300 / iterations} байт");
|
||||||
|
|
||||||
|
Console.WriteLine($"500x500: Последовательно: Время: {totalTimeSeq500 / iterations} мс, Память: {totalMemorySeq500 / iterations} байт");
|
||||||
|
Console.WriteLine($"500x500: Параллельно: Время: {totalTimePar500 / iterations} мс, Память: {totalMemoryPar500 / iterations} байт");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Генерация матрицы
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="rows"></param>
|
||||||
|
/// <param name="cols"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
static int[,] GenerateMatrix(int rows, int cols)
|
||||||
|
{
|
||||||
|
var random = new Random();
|
||||||
|
int[,] matrix = new int[rows, cols];
|
||||||
|
|
||||||
|
for (int i = 0; i < rows; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < cols; j++)
|
||||||
|
{
|
||||||
|
matrix[i, j] = random.Next(100); //Гененрируем значение матриц до 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return matrix;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Последовательная обработка матрицы
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="a"></param>
|
||||||
|
/// <param name="b"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
static int[,] MultiplyMatricesSequential(int[,] a, int[,] b)
|
||||||
|
{
|
||||||
|
int aRows = a.GetLength(0);
|
||||||
|
int aCols = a.GetLength(1);
|
||||||
|
int bCols = b.GetLength(1);
|
||||||
|
var result = new int[aRows, bCols];
|
||||||
|
|
||||||
|
for (int i = 0; i < aRows; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < bCols; j++)
|
||||||
|
{
|
||||||
|
for (int k = 0; k < aCols; k++)
|
||||||
|
{
|
||||||
|
result[i, j] += a[i, k] * b[k, j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Параллельный обработка матрицы
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="a"></param>
|
||||||
|
/// <param name="b"></param>
|
||||||
|
/// <param name="threadCount"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
static int[,] MultiplyMatricesParallel(int[,] a, int[,] b, int threadCount)
|
||||||
|
{
|
||||||
|
int aRows = a.GetLength(0);
|
||||||
|
int bCols = b.GetLength(1);
|
||||||
|
var result = new int[aRows, bCols];
|
||||||
|
|
||||||
|
Parallel.For(0, aRows, new ParallelOptions { MaxDegreeOfParallelism = threadCount }, i =>
|
||||||
|
{
|
||||||
|
for (int j = 0; j < bCols; j++)
|
||||||
|
{
|
||||||
|
int sum = 0;
|
||||||
|
for (int k = 0; k < a.GetLength(1); k++)
|
||||||
|
{
|
||||||
|
sum += a[i, k] * b[k, j];
|
||||||
|
}
|
||||||
|
result[i, j] = sum;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void PrintMatrix(int[,] matrix)
|
||||||
|
{
|
||||||
|
int rows = matrix.GetLength(0);
|
||||||
|
int cols = matrix.GetLength(1);
|
||||||
|
|
||||||
|
for (int i = 0; i < rows; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < cols; j++)
|
||||||
|
{
|
||||||
|
Console.Write(matrix[i, j] + "\t");
|
||||||
|
}
|
||||||
|
Console.WriteLine();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Проверка матриц на совместимость к умножениям
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="a"></param>
|
||||||
|
/// <param name="b"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
static bool CanMultiplyMatrices(int[,] a, int[,] b)
|
||||||
|
{
|
||||||
|
return a.GetLength(1) == b.GetLength(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Для проверки корректного расчета умножения матриц
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="matrix"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
static Matrix<double> ConvertToMathNetMatrix(int[,] matrix)
|
||||||
|
{
|
||||||
|
int rows = matrix.GetLength(0);
|
||||||
|
int cols = matrix.GetLength(1);
|
||||||
|
var result = Matrix<double>.Build.Dense(rows, cols);
|
||||||
|
|
||||||
|
for (int i = 0; i < rows; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < cols; j++)
|
||||||
|
{
|
||||||
|
result[i, j] = matrix[i, j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Подсчет времени и потребляемой памяти, высчитывание точного времени
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="a"></param>
|
||||||
|
/// <param name="b"></param>
|
||||||
|
/// <param name="threadCount"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
static (long, long, long, long) TestMatrixOperation(int[,] a, int[,] b, int threadCount)
|
||||||
|
{
|
||||||
|
if (!CanMultiplyMatrices(a, b))
|
||||||
|
{
|
||||||
|
Console.WriteLine("Матрицы несовместимы для умножения.");
|
||||||
|
return (0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Stopwatch stopwatch = new();
|
||||||
|
|
||||||
|
// Последовательное умножение
|
||||||
|
long memoryBeforeSeq = GC.GetTotalMemory(true);
|
||||||
|
stopwatch.Start();
|
||||||
|
var resultSequential = MultiplyMatricesSequential(a, b);
|
||||||
|
stopwatch.Stop();
|
||||||
|
long memoryAfterSeq = GC.GetTotalMemory(true);
|
||||||
|
long timeSeq = stopwatch.ElapsedMilliseconds;
|
||||||
|
long memoryUsedSeq = memoryAfterSeq - memoryBeforeSeq;
|
||||||
|
Console.WriteLine($"Последовательно: Время: {timeSeq} мс, Память: {memoryUsedSeq} байт");
|
||||||
|
|
||||||
|
// Параллельное умножение
|
||||||
|
long memoryBeforePar = GC.GetTotalMemory(true);
|
||||||
|
stopwatch.Restart();
|
||||||
|
var resultParallel = MultiplyMatricesParallel(a, b, threadCount);
|
||||||
|
stopwatch.Stop();
|
||||||
|
long memoryAfterPar = GC.GetTotalMemory(true);
|
||||||
|
long timePar = stopwatch.ElapsedMilliseconds;
|
||||||
|
long memoryUsedPar = memoryAfterPar - memoryBeforePar;
|
||||||
|
Console.WriteLine($"Параллельно: Время: {timePar} мс, Память: {memoryUsedPar} байт");
|
||||||
|
|
||||||
|
return (timeSeq, memoryUsedSeq, timePar, memoryUsedPar);
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"runtimeTarget": {
|
||||||
|
"name": ".NETCoreApp,Version=v8.0",
|
||||||
|
"signature": ""
|
||||||
|
},
|
||||||
|
"compilationOptions": {},
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v8.0": {
|
||||||
|
"MatrixMultiplication/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"MathNet.Numerics": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"MatrixMultiplication.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"MathNet.Numerics/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/MathNet.Numerics.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"MatrixMultiplication/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
},
|
||||||
|
"MathNet.Numerics/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-pg1W2VwaEQMAiTpGK840hZgzavnqjlCMTVSbtVCXVyT+7AX4mc1o89SPv4TBlAjhgCOo9c1Y+jZ5m3ti2YgGgA==",
|
||||||
|
"path": "mathnet.numerics/5.0.0",
|
||||||
|
"hashPath": "mathnet.numerics.5.0.0.nupkg.sha512"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"runtimeOptions": {
|
||||||
|
"tfm": "net8.0",
|
||||||
|
"framework": {
|
||||||
|
"name": "Microsoft.NETCore.App",
|
||||||
|
"version": "8.0.0"
|
||||||
|
},
|
||||||
|
"configProperties": {
|
||||||
|
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
// <autogenerated />
|
||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]
|
@ -0,0 +1,23 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// Этот код создан программой.
|
||||||
|
// Исполняемая версия:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
|
||||||
|
// повторной генерации кода.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
[assembly: System.Reflection.AssemblyCompanyAttribute("MatrixMultiplication")]
|
||||||
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||||
|
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||||
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a346187851ddda07b6b4d0de75645f9c8d61bee4")]
|
||||||
|
[assembly: System.Reflection.AssemblyProductAttribute("MatrixMultiplication")]
|
||||||
|
[assembly: System.Reflection.AssemblyTitleAttribute("MatrixMultiplication")]
|
||||||
|
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||||
|
|
||||||
|
// Создано классом WriteCodeFragment MSBuild.
|
||||||
|
|
@ -0,0 +1 @@
|
|||||||
|
7a58be475266d06789e6aa68f62ed05f94075de5902763bf6799d85f69fada57
|
@ -0,0 +1,13 @@
|
|||||||
|
is_global = true
|
||||||
|
build_property.TargetFramework = net8.0
|
||||||
|
build_property.TargetPlatformMinVersion =
|
||||||
|
build_property.UsingMicrosoftNETSdkWeb =
|
||||||
|
build_property.ProjectTypeGuids =
|
||||||
|
build_property.InvariantGlobalization =
|
||||||
|
build_property.PlatformNeutralAssembly =
|
||||||
|
build_property.EnforceExtendedAnalyzerRules =
|
||||||
|
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||||
|
build_property.RootNamespace = MatrixMultiplication
|
||||||
|
build_property.ProjectDir = D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_5\MatrixMultiplication\MatrixMultiplication\
|
||||||
|
build_property.EnableComHosting =
|
||||||
|
build_property.EnableGeneratedComInterfaceComImportInterop =
|
@ -0,0 +1,8 @@
|
|||||||
|
// <auto-generated/>
|
||||||
|
global using global::System;
|
||||||
|
global using global::System.Collections.Generic;
|
||||||
|
global using global::System.IO;
|
||||||
|
global using global::System.Linq;
|
||||||
|
global using global::System.Net.Http;
|
||||||
|
global using global::System.Threading;
|
||||||
|
global using global::System.Threading.Tasks;
|
Binary file not shown.
Binary file not shown.
@ -0,0 +1 @@
|
|||||||
|
55f04003915b62743f4a53a757a6903769d4b603d70342bb5ea26dd830ce01cf
|
@ -0,0 +1,34 @@
|
|||||||
|
C:\Users\73bul\source\repos\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\MatrixMultiplication.GeneratedMSBuildEditorConfig.editorconfig
|
||||||
|
C:\Users\73bul\source\repos\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\MatrixMultiplication.AssemblyInfoInputs.cache
|
||||||
|
C:\Users\73bul\source\repos\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\MatrixMultiplication.AssemblyInfo.cs
|
||||||
|
C:\Users\73bul\source\repos\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\MatrixMultiplication.csproj.CoreCompileInputs.cache
|
||||||
|
C:\Users\73bul\source\repos\MatrixMultiplication\MatrixMultiplication\bin\Debug\net8.0\MatrixMultiplication.exe
|
||||||
|
C:\Users\73bul\source\repos\MatrixMultiplication\MatrixMultiplication\bin\Debug\net8.0\MatrixMultiplication.deps.json
|
||||||
|
C:\Users\73bul\source\repos\MatrixMultiplication\MatrixMultiplication\bin\Debug\net8.0\MatrixMultiplication.runtimeconfig.json
|
||||||
|
C:\Users\73bul\source\repos\MatrixMultiplication\MatrixMultiplication\bin\Debug\net8.0\MatrixMultiplication.dll
|
||||||
|
C:\Users\73bul\source\repos\MatrixMultiplication\MatrixMultiplication\bin\Debug\net8.0\MatrixMultiplication.pdb
|
||||||
|
C:\Users\73bul\source\repos\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\MatrixMultiplication.dll
|
||||||
|
C:\Users\73bul\source\repos\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\refint\MatrixMultiplication.dll
|
||||||
|
C:\Users\73bul\source\repos\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\MatrixMultiplication.pdb
|
||||||
|
C:\Users\73bul\source\repos\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\MatrixMultiplication.genruntimeconfig.cache
|
||||||
|
C:\Users\73bul\source\repos\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\ref\MatrixMultiplication.dll
|
||||||
|
C:\Users\73bul\source\repos\MatrixMultiplication\MatrixMultiplication\bin\Debug\net8.0\MathNet.Numerics.dll
|
||||||
|
C:\Users\73bul\source\repos\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\MatrixMultiplication.csproj.AssemblyReference.cache
|
||||||
|
C:\Users\73bul\source\repos\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\MatrixMultiplication.csproj.CopyComplete
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_5\MatrixMultiplication\MatrixMultiplication\bin\Debug\net8.0\MatrixMultiplication.exe
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_5\MatrixMultiplication\MatrixMultiplication\bin\Debug\net8.0\MatrixMultiplication.deps.json
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_5\MatrixMultiplication\MatrixMultiplication\bin\Debug\net8.0\MatrixMultiplication.runtimeconfig.json
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_5\MatrixMultiplication\MatrixMultiplication\bin\Debug\net8.0\MatrixMultiplication.dll
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_5\MatrixMultiplication\MatrixMultiplication\bin\Debug\net8.0\MatrixMultiplication.pdb
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_5\MatrixMultiplication\MatrixMultiplication\bin\Debug\net8.0\MathNet.Numerics.dll
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_5\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\MatrixMultiplication.csproj.AssemblyReference.cache
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_5\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\MatrixMultiplication.GeneratedMSBuildEditorConfig.editorconfig
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_5\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\MatrixMultiplication.AssemblyInfoInputs.cache
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_5\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\MatrixMultiplication.AssemblyInfo.cs
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_5\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\MatrixMultiplication.csproj.CoreCompileInputs.cache
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_5\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\MatrixMultiplication.csproj.CopyComplete
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_5\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\MatrixMultiplication.dll
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_5\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\refint\MatrixMultiplication.dll
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_5\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\MatrixMultiplication.pdb
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_5\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\MatrixMultiplication.genruntimeconfig.cache
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_5\MatrixMultiplication\MatrixMultiplication\obj\Debug\net8.0\ref\MatrixMultiplication.dll
|
Binary file not shown.
@ -0,0 +1 @@
|
|||||||
|
1b7b8549cd99557405705f097a819690f07270f8854d5fd1090cfd8a6a5ed9a9
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,69 @@
|
|||||||
|
{
|
||||||
|
"format": 1,
|
||||||
|
"restore": {
|
||||||
|
"D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_5\\MatrixMultiplication\\MatrixMultiplication\\MatrixMultiplication.csproj": {}
|
||||||
|
},
|
||||||
|
"projects": {
|
||||||
|
"D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_5\\MatrixMultiplication\\MatrixMultiplication\\MatrixMultiplication.csproj": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"restore": {
|
||||||
|
"projectUniqueName": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_5\\MatrixMultiplication\\MatrixMultiplication\\MatrixMultiplication.csproj",
|
||||||
|
"projectName": "MatrixMultiplication",
|
||||||
|
"projectPath": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_5\\MatrixMultiplication\\MatrixMultiplication\\MatrixMultiplication.csproj",
|
||||||
|
"packagesPath": "C:\\Users\\73bul\\.nuget\\packages\\",
|
||||||
|
"outputPath": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_5\\MatrixMultiplication\\MatrixMultiplication\\obj\\",
|
||||||
|
"projectStyle": "PackageReference",
|
||||||
|
"configFilePaths": [
|
||||||
|
"C:\\Users\\73bul\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||||
|
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
||||||
|
],
|
||||||
|
"originalTargetFrameworks": [
|
||||||
|
"net8.0"
|
||||||
|
],
|
||||||
|
"sources": {
|
||||||
|
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
|
||||||
|
"https://api.nuget.org/v3/index.json": {}
|
||||||
|
},
|
||||||
|
"frameworks": {
|
||||||
|
"net8.0": {
|
||||||
|
"targetAlias": "net8.0",
|
||||||
|
"projectReferences": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"warningProperties": {
|
||||||
|
"warnAsError": [
|
||||||
|
"NU1605"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"frameworks": {
|
||||||
|
"net8.0": {
|
||||||
|
"targetAlias": "net8.0",
|
||||||
|
"dependencies": {
|
||||||
|
"MathNet.Numerics": {
|
||||||
|
"target": "Package",
|
||||||
|
"version": "[5.0.0, )"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imports": [
|
||||||
|
"net461",
|
||||||
|
"net462",
|
||||||
|
"net47",
|
||||||
|
"net471",
|
||||||
|
"net472",
|
||||||
|
"net48",
|
||||||
|
"net481"
|
||||||
|
],
|
||||||
|
"assetTargetFallback": true,
|
||||||
|
"warn": true,
|
||||||
|
"frameworkReferences": {
|
||||||
|
"Microsoft.NETCore.App": {
|
||||||
|
"privateAssets": "all"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100/PortableRuntimeIdentifierGraph.json"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
|
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||||
|
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
|
||||||
|
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
|
||||||
|
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
|
||||||
|
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
|
||||||
|
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\73bul\.nuget\packages\</NuGetPackageFolders>
|
||||||
|
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
|
||||||
|
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.8.0</NuGetToolVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||||
|
<SourceRoot Include="C:\Users\73bul\.nuget\packages\" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
|
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
|
@ -0,0 +1,113 @@
|
|||||||
|
{
|
||||||
|
"version": 3,
|
||||||
|
"targets": {
|
||||||
|
"net8.0": {
|
||||||
|
"MathNet.Numerics/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"compile": {
|
||||||
|
"lib/net6.0/MathNet.Numerics.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/MathNet.Numerics.dll": {
|
||||||
|
"related": ".xml"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"MathNet.Numerics/5.0.0": {
|
||||||
|
"sha512": "pg1W2VwaEQMAiTpGK840hZgzavnqjlCMTVSbtVCXVyT+7AX4mc1o89SPv4TBlAjhgCOo9c1Y+jZ5m3ti2YgGgA==",
|
||||||
|
"type": "package",
|
||||||
|
"path": "mathnet.numerics/5.0.0",
|
||||||
|
"files": [
|
||||||
|
".nupkg.metadata",
|
||||||
|
".signature.p7s",
|
||||||
|
"icon.png",
|
||||||
|
"lib/net461/MathNet.Numerics.dll",
|
||||||
|
"lib/net461/MathNet.Numerics.xml",
|
||||||
|
"lib/net48/MathNet.Numerics.dll",
|
||||||
|
"lib/net48/MathNet.Numerics.xml",
|
||||||
|
"lib/net5.0/MathNet.Numerics.dll",
|
||||||
|
"lib/net5.0/MathNet.Numerics.xml",
|
||||||
|
"lib/net6.0/MathNet.Numerics.dll",
|
||||||
|
"lib/net6.0/MathNet.Numerics.xml",
|
||||||
|
"lib/netstandard2.0/MathNet.Numerics.dll",
|
||||||
|
"lib/netstandard2.0/MathNet.Numerics.xml",
|
||||||
|
"mathnet.numerics.5.0.0.nupkg.sha512",
|
||||||
|
"mathnet.numerics.nuspec"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"projectFileDependencyGroups": {
|
||||||
|
"net8.0": [
|
||||||
|
"MathNet.Numerics >= 5.0.0"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"packageFolders": {
|
||||||
|
"C:\\Users\\73bul\\.nuget\\packages\\": {}
|
||||||
|
},
|
||||||
|
"project": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"restore": {
|
||||||
|
"projectUniqueName": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_5\\MatrixMultiplication\\MatrixMultiplication\\MatrixMultiplication.csproj",
|
||||||
|
"projectName": "MatrixMultiplication",
|
||||||
|
"projectPath": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_5\\MatrixMultiplication\\MatrixMultiplication\\MatrixMultiplication.csproj",
|
||||||
|
"packagesPath": "C:\\Users\\73bul\\.nuget\\packages\\",
|
||||||
|
"outputPath": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_5\\MatrixMultiplication\\MatrixMultiplication\\obj\\",
|
||||||
|
"projectStyle": "PackageReference",
|
||||||
|
"configFilePaths": [
|
||||||
|
"C:\\Users\\73bul\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||||
|
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
||||||
|
],
|
||||||
|
"originalTargetFrameworks": [
|
||||||
|
"net8.0"
|
||||||
|
],
|
||||||
|
"sources": {
|
||||||
|
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
|
||||||
|
"https://api.nuget.org/v3/index.json": {}
|
||||||
|
},
|
||||||
|
"frameworks": {
|
||||||
|
"net8.0": {
|
||||||
|
"targetAlias": "net8.0",
|
||||||
|
"projectReferences": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"warningProperties": {
|
||||||
|
"warnAsError": [
|
||||||
|
"NU1605"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"frameworks": {
|
||||||
|
"net8.0": {
|
||||||
|
"targetAlias": "net8.0",
|
||||||
|
"dependencies": {
|
||||||
|
"MathNet.Numerics": {
|
||||||
|
"target": "Package",
|
||||||
|
"version": "[5.0.0, )"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imports": [
|
||||||
|
"net461",
|
||||||
|
"net462",
|
||||||
|
"net47",
|
||||||
|
"net471",
|
||||||
|
"net472",
|
||||||
|
"net48",
|
||||||
|
"net481"
|
||||||
|
],
|
||||||
|
"assetTargetFallback": true,
|
||||||
|
"warn": true,
|
||||||
|
"frameworkReferences": {
|
||||||
|
"Microsoft.NETCore.App": {
|
||||||
|
"privateAssets": "all"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100/PortableRuntimeIdentifierGraph.json"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"version": 2,
|
||||||
|
"dgSpecHash": "MnXWhXr7C0YOLfM/M0Q/yOcncgcvGv+2fkw05RSNm31bZUalPSpmE6eNx46zPbl13+Lqq+ijO0o4Jfyc/Q1eRw==",
|
||||||
|
"success": true,
|
||||||
|
"projectFilePath": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_5\\MatrixMultiplication\\MatrixMultiplication\\MatrixMultiplication.csproj",
|
||||||
|
"expectedPackageFiles": [
|
||||||
|
"C:\\Users\\73bul\\.nuget\\packages\\mathnet.numerics\\5.0.0\\mathnet.numerics.5.0.0.nupkg.sha512"
|
||||||
|
],
|
||||||
|
"logs": []
|
||||||
|
}
|
232
almukhammetov_bulat_lab_5/README.md
Normal file
232
almukhammetov_bulat_lab_5/README.md
Normal file
@ -0,0 +1,232 @@
|
|||||||
|
Альмухамметов ПИбд-42
|
||||||
|
|
||||||
|
Описание программы:
|
||||||
|
|
||||||
|
1. Ввод количества потоков: Программа начинается с запроса у пользователя количества потоков, которые будут использоваться в параллельных вычислениях.
|
||||||
|
Если введено некорректное значение, используется значение по умолчанию (4).
|
||||||
|
|
||||||
|
2. Генерация матриц: Программа генерирует три пары квадратных матриц разных размеров (100x100, 300x300, 500x500). Значения в матрицах генерируются случайным образом.1
|
||||||
|
|
||||||
|
3. Тестирование умножения матриц: Для каждой пары матриц проводится серия из 10 итераций умножения, где каждая итерация включает как последовательное,
|
||||||
|
так и параллельное умножение.
|
||||||
|
|
||||||
|
4. Подсчет времени и использования памяти: Для каждого умножения измеряется время выполнения и потребление памяти. Используется класс Stopwatch для измерения времени и
|
||||||
|
GC.GetTotalMemory для оценки использования памяти.
|
||||||
|
|
||||||
|
5. Вывод результатов: По окончании тестирования программа выводит средние значения времени выполнения и потребления памяти для последовательного и параллельного умножения
|
||||||
|
для каждого размера матриц.
|
||||||
|
|
||||||
|
6. Методы умножения матриц: Реализованы два метода умножения - MultiplyMatricesSequential для последовательного умножения и MultiplyMatricesParallel для параллельного.
|
||||||
|
Параллельное умножение использует Parallel.For с заданным количеством потоков.
|
||||||
|
|
||||||
|
7. Проверка совместимости матриц: Программа проверяет матрицы на совместимость для умножения (число столбцов первой матрицы должно быть равно числу строк второй).
|
||||||
|
|
||||||
|
8. функции: Включают генерацию матриц (GenerateMatrix), печать матрицы (PrintMatrix) и конвертацию матрицы в формат MathNet.Numerics.LinearAlgebra.Matrix для проверки
|
||||||
|
корректности умножения (ConvertToMathNetMatrix).
|
||||||
|
|
||||||
|
9. Тестирование операций над матрицами: TestMatrixOperation интегрирует функциональность вышеупомянутых методов, выполняя умножение и собирая статистические данные.
|
||||||
|
|
||||||
|
Результаты тестирования:
|
||||||
|
|
||||||
|
Введите количество потоков:
|
||||||
|
2
|
||||||
|
Прогон #1:
|
||||||
|
|
||||||
|
Последовательно: Время: 13 мс, Память: 39656 байт
|
||||||
|
Параллельно: Время: 37 мс, Память: 45536 байт
|
||||||
|
Последовательно: Время: 313 мс, Память: 359992 байт
|
||||||
|
Параллельно: Время: 168 мс, Память: 360040 байт
|
||||||
|
Последовательно: Время: 1497 мс, Память: 1000576 байт
|
||||||
|
Параллельно: Время: 839 мс, Память: 1000288 байт
|
||||||
|
Прогон #2:
|
||||||
|
|
||||||
|
Последовательно: Время: 11 мс, Память: 40040 байт
|
||||||
|
Параллельно: Время: 8 мс, Память: 40040 байт
|
||||||
|
Последовательно: Время: 340 мс, Память: 360576 байт
|
||||||
|
Параллельно: Время: 163 мс, Память: 360040 байт
|
||||||
|
Последовательно: Время: 1560 мс, Память: 1000576 байт
|
||||||
|
Параллельно: Время: 799 мс, Память: 1000040 байт
|
||||||
|
Прогон #3:
|
||||||
|
|
||||||
|
Последовательно: Время: 9 мс, Память: 40040 байт
|
||||||
|
Параллельно: Время: 6 мс, Память: 40040 байт
|
||||||
|
Последовательно: Время: 253 мс, Память: 360576 байт
|
||||||
|
Параллельно: Время: 154 мс, Память: 360040 байт
|
||||||
|
Последовательно: Время: 916 мс, Память: 1000576 байт
|
||||||
|
Параллельно: Время: 485 мс, Память: 1000040 байт
|
||||||
|
Прогон #4:
|
||||||
|
|
||||||
|
Последовательно: Время: 6 мс, Память: 40040 байт
|
||||||
|
Параллельно: Время: 4 мс, Память: 40040 байт
|
||||||
|
Последовательно: Время: 184 мс, Память: 360040 байт
|
||||||
|
Параллельно: Время: 118 мс, Память: 360576 байт
|
||||||
|
Последовательно: Время: 900 мс, Память: 1000040 байт
|
||||||
|
Параллельно: Время: 518 мс, Память: 1000576 байт
|
||||||
|
Прогон #5:
|
||||||
|
|
||||||
|
Последовательно: Время: 6 мс, Память: 40040 байт
|
||||||
|
Параллельно: Время: 5 мс, Память: 40040 байт
|
||||||
|
Последовательно: Время: 182 мс, Память: 360040 байт
|
||||||
|
Параллельно: Время: 117 мс, Память: 360040 байт
|
||||||
|
Последовательно: Время: 912 мс, Память: 1000576 байт
|
||||||
|
Параллельно: Время: 534 мс, Память: 1000576 байт
|
||||||
|
Прогон #6:
|
||||||
|
|
||||||
|
Последовательно: Время: 6 мс, Память: 40040 байт
|
||||||
|
Параллельно: Время: 4 мс, Память: 40040 байт
|
||||||
|
Последовательно: Время: 188 мс, Память: 360040 байт
|
||||||
|
Параллельно: Время: 95 мс, Память: 360040 байт
|
||||||
|
Последовательно: Время: 1046 мс, Память: 1000576 байт
|
||||||
|
Параллельно: Время: 539 мс, Память: 1000576 байт
|
||||||
|
Прогон #7:
|
||||||
|
|
||||||
|
Последовательно: Время: 6 мс, Память: 40040 байт
|
||||||
|
Параллельно: Время: 7 мс, Память: 40040 байт
|
||||||
|
Последовательно: Время: 183 мс, Память: 360040 байт
|
||||||
|
Параллельно: Время: 115 мс, Память: 360040 байт
|
||||||
|
Последовательно: Время: 878 мс, Память: 1000576 байт
|
||||||
|
Параллельно: Время: 546 мс, Память: 1000040 байт
|
||||||
|
Прогон #8:
|
||||||
|
|
||||||
|
Последовательно: Время: 6 мс, Память: 40040 байт
|
||||||
|
Параллельно: Время: 6 мс, Память: 40040 байт
|
||||||
|
Последовательно: Время: 193 мс, Память: 360576 байт
|
||||||
|
Параллельно: Время: 105 мс, Память: 360040 байт
|
||||||
|
Последовательно: Время: 1019 мс, Память: 1000576 байт
|
||||||
|
Параллельно: Время: 506 мс, Память: 1000040 байт
|
||||||
|
Прогон #9:
|
||||||
|
|
||||||
|
Последовательно: Время: 6 мс, Память: 40040 байт
|
||||||
|
Параллельно: Время: 4 мс, Память: 40040 байт
|
||||||
|
Последовательно: Время: 180 мс, Память: 360040 байт
|
||||||
|
Параллельно: Время: 137 мс, Память: 360576 байт
|
||||||
|
Последовательно: Время: 968 мс, Память: 1000040 байт
|
||||||
|
Параллельно: Время: 485 мс, Память: 1000576 байт
|
||||||
|
Прогон #10:
|
||||||
|
|
||||||
|
Последовательно: Время: 6 мс, Память: 40040 байт
|
||||||
|
Параллельно: Время: 6 мс, Память: 40040 байт
|
||||||
|
Последовательно: Время: 186 мс, Память: 360040 байт
|
||||||
|
Параллельно: Время: 114 мс, Память: 360040 байт
|
||||||
|
Последовательно: Время: 1020 мс, Память: 1000576 байт
|
||||||
|
Параллельно: Время: 531 мс, Память: 1000576 байт
|
||||||
|
|
||||||
|
Среднее время (мс) и расход памяти (байт) для последовательного и параллельного умножения матриц:
|
||||||
|
100x100: Последовательно: Время: 7 мс, Память: 40001 байт
|
||||||
|
100x100: Параллельно: Время: 8 мс, Память: 40589 байт
|
||||||
|
300x300: Последовательно: Время: 220 мс, Память: 360196 байт
|
||||||
|
300x300: Параллельно: Время: 128 мс, Память: 360147 байт
|
||||||
|
500x500: Последовательно: Время: 1071 мс, Память: 1000468 байт
|
||||||
|
500x500: Параллельно: Время: 578 мс, Память: 1000332 байт
|
||||||
|
|
||||||
|
|
||||||
|
Введите количество потоков:
|
||||||
|
4
|
||||||
|
Прогон #1:
|
||||||
|
|
||||||
|
Последовательно: Время: 14 мс, Память: 39656 байт
|
||||||
|
Параллельно: Время: 45 мс, Память: 46448 байт
|
||||||
|
Последовательно: Время: 400 мс, Память: 359992 байт
|
||||||
|
Параллельно: Время: 355 мс, Память: 361216 байт
|
||||||
|
Последовательно: Время: 1603 мс, Память: 1000576 байт
|
||||||
|
Параллельно: Время: 533 мс, Память: 1000040 байт
|
||||||
|
Прогон #2:
|
||||||
|
|
||||||
|
Последовательно: Время: 10 мс, Память: 40040 байт
|
||||||
|
Параллельно: Время: 4 мс, Память: 40040 байт
|
||||||
|
Последовательно: Время: 333 мс, Память: 360576 байт
|
||||||
|
Параллельно: Время: 167 мс, Память: 360088 байт
|
||||||
|
Последовательно: Время: 1608 мс, Память: 1000576 байт
|
||||||
|
Параллельно: Время: 480 мс, Память: 1000040 байт
|
||||||
|
Прогон #3:
|
||||||
|
|
||||||
|
Последовательно: Время: 11 мс, Память: 40040 байт
|
||||||
|
Параллельно: Время: 4 мс, Память: 40040 байт
|
||||||
|
Последовательно: Время: 321 мс, Память: 360040 байт
|
||||||
|
Параллельно: Время: 114 мс, Память: 360040 байт
|
||||||
|
Последовательно: Время: 1299 мс, Память: 1000576 байт
|
||||||
|
Параллельно: Время: 356 мс, Память: 1000040 байт
|
||||||
|
Прогон #4:
|
||||||
|
|
||||||
|
Последовательно: Время: 6 мс, Память: 40040 байт
|
||||||
|
Параллельно: Время: 3 мс, Память: 40040 байт
|
||||||
|
Последовательно: Время: 268 мс, Память: 360040 байт
|
||||||
|
Параллельно: Время: 73 мс, Память: 360040 байт
|
||||||
|
Последовательно: Время: 877 мс, Память: 1000576 байт
|
||||||
|
Параллельно: Время: 347 мс, Память: 1000576 байт
|
||||||
|
Прогон #5:
|
||||||
|
|
||||||
|
Последовательно: Время: 6 мс, Память: 40040 байт
|
||||||
|
Параллельно: Время: 3 мс, Память: 40040 байт
|
||||||
|
Последовательно: Время: 192 мс, Память: 360040 байт
|
||||||
|
Параллельно: Время: 69 мс, Память: 360040 байт
|
||||||
|
Последовательно: Время: 1063 мс, Память: 1000576 байт
|
||||||
|
Параллельно: Время: 345 мс, Память: 1000040 байт
|
||||||
|
Прогон #6:
|
||||||
|
|
||||||
|
Последовательно: Время: 6 мс, Память: 40040 байт
|
||||||
|
Параллельно: Время: 3 мс, Память: 40040 байт
|
||||||
|
Последовательно: Время: 189 мс, Память: 360576 байт
|
||||||
|
Параллельно: Время: 69 мс, Память: 360040 байт
|
||||||
|
Последовательно: Время: 885 мс, Память: 1000576 байт
|
||||||
|
Параллельно: Время: 308 мс, Память: 1000040 байт
|
||||||
|
Прогон #7:
|
||||||
|
|
||||||
|
Последовательно: Время: 6 мс, Память: 40040 байт
|
||||||
|
Параллельно: Время: 3 мс, Память: 40040 байт
|
||||||
|
Последовательно: Время: 178 мс, Память: 360040 байт
|
||||||
|
Параллельно: Время: 68 мс, Память: 360040 байт
|
||||||
|
Последовательно: Время: 878 мс, Память: 1000576 байт
|
||||||
|
Параллельно: Время: 298 мс, Память: 1000040 байт
|
||||||
|
Прогон #8:
|
||||||
|
|
||||||
|
Последовательно: Время: 6 мс, Память: 40040 байт
|
||||||
|
Параллельно: Время: 1 мс, Память: 40040 байт
|
||||||
|
Последовательно: Время: 185 мс, Память: 360576 байт
|
||||||
|
Параллельно: Время: 83 мс, Память: 360040 байт
|
||||||
|
Последовательно: Время: 884 мс, Память: 1000040 байт
|
||||||
|
Параллельно: Время: 293 мс, Память: 1000576 байт
|
||||||
|
Прогон #9:
|
||||||
|
|
||||||
|
Последовательно: Время: 7 мс, Память: 40040 байт
|
||||||
|
Параллельно: Время: 2 мс, Память: 40040 байт
|
||||||
|
Последовательно: Время: 175 мс, Память: 360040 байт
|
||||||
|
Параллельно: Время: 85 мс, Память: 360040 байт
|
||||||
|
Последовательно: Время: 895 мс, Память: 1000576 байт
|
||||||
|
Параллельно: Время: 327 мс, Память: 1000040 байт
|
||||||
|
Прогон #10:
|
||||||
|
|
||||||
|
Последовательно: Время: 6 мс, Память: 40040 байт
|
||||||
|
Параллельно: Время: 2 мс, Память: 40040 байт
|
||||||
|
Последовательно: Время: 178 мс, Память: 360040 байт
|
||||||
|
Параллельно: Время: 56 мс, Память: 360576 байт
|
||||||
|
Последовательно: Время: 928 мс, Память: 1000040 байт
|
||||||
|
Параллельно: Время: 282 мс, Память: 1000576 байт
|
||||||
|
|
||||||
|
Среднее время (мс) и расход памяти (байт) для последовательного и параллельного умножения матриц:
|
||||||
|
100x100: Последовательно: Время: 7 мс, Память: 40001 байт
|
||||||
|
100x100: Параллельно: Время: 7 мс, Память: 40680 байт
|
||||||
|
300x300: Последовательно: Время: 241 мс, Память: 360196 байт
|
||||||
|
300x300: Параллельно: Время: 113 мс, Память: 360216 байт
|
||||||
|
500x500: Последовательно: Время: 1092 мс, Память: 1000468 байт
|
||||||
|
500x500: Параллельно: Время: 356 мс, Память: 1000200 байт
|
||||||
|
|
||||||
|
На основе предоставленных результатов можно сделать несколько важных наблюдений относительно последовательного и параллельного умножения матриц:
|
||||||
|
|
||||||
|
1. Параллельное умножение матриц показывает лучшую производительность по сравнению с последовательным, особенно для матриц большего размера.
|
||||||
|
Это видно из сравнения времени выполнения: например, для матриц 500x500 время сокращается с 1071 мс до 578 мс при использовании 2 потоков и до 356 мс при использовании 4 потоков.
|
||||||
|
|
||||||
|
2. Для маленьких матриц (100x100), разница в производительности между последовательным и параллельным умножением не так заметна.
|
||||||
|
Это может быть связано с накладными расходами на создание и управление дополнительными потоками, которые не окупаются на малых объёмах данных.
|
||||||
|
|
||||||
|
3. Увеличение числа потоков с 2 до 4 приводит к дальнейшему улучшению времени выполнения в параллельных вычислениях.
|
||||||
|
Это подчеркивает важность выбора оптимального количества потоков для конкретной задачи и конфигурации оборудования.
|
||||||
|
|
||||||
|
4. Расход памяти при последовательном и параллельном умножении схож, что указывает на то, что параллельное выполнение не приводит к значительному увеличению потребления памяти.
|
||||||
|
Это положительный момент, поскольку параллельные вычисления часто ассоциируются с более высоким расходом ресурсов.
|
||||||
|
|
||||||
|
В целом, эти результаты демонстрируют преимущества использования параллельных вычислений для улучшения производительности, особенно на больших объемах данных.
|
||||||
|
Однако важно учитывать накладные расходы и выбирать количество потоков, оптимальное для конкретной задачи и оборудования.
|
||||||
|
|
||||||
|
Видео:
|
||||||
|
https://vk.com/video228053206_456240782
|
Loading…
Reference in New Issue
Block a user