almukhammetov_bulat_lab_5
This commit is contained in:
parent
a346187851
commit
4498245823
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