almulkammetov_bulat_lab_6 #97
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.
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}") = "MatrixDeterminant", "MatrixDeterminant\MatrixDeterminant.csproj", "{1DB9E237-2513-4A52-92E6-D71828122D83}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{1DB9E237-2513-4A52-92E6-D71828122D83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{1DB9E237-2513-4A52-92E6-D71828122D83}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{1DB9E237-2513-4A52-92E6-D71828122D83}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{1DB9E237-2513-4A52-92E6-D71828122D83}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {00207152-6054-4EBA-9B31-E22685B75110}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
@ -0,0 +1,10 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
</Project>
|
@ -0,0 +1,199 @@
|
|||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
|
class Program
|
||||||
|
{
|
||||||
|
static void Main()
|
||||||
|
{
|
||||||
|
Console.WriteLine("Введите количество потоков:");
|
||||||
|
string input = Console.ReadLine();
|
||||||
|
|
||||||
|
|
||||||
|
if (!int.TryParse(input, out int threadCount))
|
||||||
|
{
|
||||||
|
Console.WriteLine("Введено некорректное значение, будет использовано значение по умолчанию: 4");
|
||||||
|
threadCount = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Генерация матриц
|
||||||
|
int[,] matrix6 = GenerateMatrix(6, 6);
|
||||||
|
int[,] matrix8 = GenerateMatrix(8, 8);
|
||||||
|
int[,] matrix10 = GenerateMatrix(10, 10);
|
||||||
|
|
||||||
|
// Счетчики для расчета среднего
|
||||||
|
long totalTimeSeq6 = 0, totalTimePar6 = 0;
|
||||||
|
long totalTimeSeq8 = 0, totalTimePar8 = 0;
|
||||||
|
long totalTimeSeq10 = 0, totalTimePar10 = 0;
|
||||||
|
long totalMemorySeq6 = 0, totalMemoryPart6 = 0;
|
||||||
|
long totalMemorySeq8 = 0, totalMemoryPar8 = 0;
|
||||||
|
long totalMemorySeq10 = 0, totalMemoryPar10 = 0;
|
||||||
|
|
||||||
|
int iterations = 10;
|
||||||
|
|
||||||
|
for (int i = 0; i < iterations; i++)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Прогон #{i + 1}:\n");
|
||||||
|
|
||||||
|
// 6x6
|
||||||
|
var (timeSeq6, memSeq6, timePar6, memPar6) = TestMatrixOperation(matrix6, threadCount);
|
||||||
|
totalTimeSeq6 += timeSeq6;
|
||||||
|
totalTimePar6 += timePar6;
|
||||||
|
totalMemorySeq6 += memSeq6;
|
||||||
|
totalMemoryPart6 += memPar6;
|
||||||
|
|
||||||
|
// 8x8
|
||||||
|
var (timeSeq8, memSeq8, timePar8, memPar8) = TestMatrixOperation(matrix8, threadCount);
|
||||||
|
totalTimeSeq8 += timeSeq8;
|
||||||
|
totalTimePar8 += timePar8;
|
||||||
|
totalMemorySeq8 += memSeq8;
|
||||||
|
totalMemoryPar8 += memPar8;
|
||||||
|
|
||||||
|
// 10x10
|
||||||
|
var (timeSeq10, memSeq10, timePar10, memPar10) = TestMatrixOperation(matrix10, threadCount);
|
||||||
|
totalTimeSeq10 += timeSeq10;
|
||||||
|
totalTimePar10 += timePar10;
|
||||||
|
totalMemorySeq10 += memSeq10;
|
||||||
|
totalMemoryPar10 += memPar10;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Вывод средних значений
|
||||||
|
Console.WriteLine($"\nСреднее время (мс) и расход памяти (байт) для последовательного и параллельного определения детерминанта:");
|
||||||
|
|
||||||
|
Console.WriteLine($"6x6: Последовательно: Время: {totalTimeSeq6 / iterations} мс, Память: {totalMemorySeq6 / iterations} байт");
|
||||||
|
Console.WriteLine($"6x6: Параллельно: Время: {totalTimePar6 / iterations} мс, Память: {totalMemoryPart6 / iterations} байт");
|
||||||
|
|
||||||
|
Console.WriteLine($"8x8: Последовательно: Время: {totalTimeSeq8 / iterations} мс, Память: {totalMemorySeq8 / iterations} байт");
|
||||||
|
Console.WriteLine($"8x8: Параллельно: Время: {totalTimePar8 / iterations} мс, Память: {totalMemoryPar8 / iterations} байт");
|
||||||
|
|
||||||
|
Console.WriteLine($"10x10: Последовательно: Время: {totalTimeSeq10 / iterations} мс, Память: {totalMemorySeq10 / iterations} байт");
|
||||||
|
Console.WriteLine($"10x10: Параллельно: Время: {totalTimePar10 / iterations} мс, Память: {totalMemoryPar10 / 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>
|
||||||
|
/// <param name="threadCount"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
static (long, long, long, long) TestMatrixOperation(int[,] matrix, int threadCount)
|
||||||
|
{
|
||||||
|
if (!IsSquareMatrix(matrix))
|
||||||
|
{
|
||||||
|
Console.WriteLine("Матрица не квадратная.");
|
||||||
|
return (0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Stopwatch stopwatch = new();
|
||||||
|
|
||||||
|
// Последовательное вычисление детерминанта
|
||||||
|
long memoryBeforeSeq = GC.GetTotalMemory(true);
|
||||||
|
stopwatch.Start();
|
||||||
|
var resultSequential = DeterminantSequential(matrix);
|
||||||
|
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 = DeterminantParallel(matrix, 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool IsSquareMatrix(int[,] matrix)
|
||||||
|
{
|
||||||
|
return matrix.GetLength(0) == matrix.GetLength(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static double DeterminantParallel(int[,] matrix, int threadCount)
|
||||||
|
{
|
||||||
|
int size = matrix.GetLength(0);
|
||||||
|
if (size == 1) return matrix[0, 0];
|
||||||
|
if (size == 2) return matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0];
|
||||||
|
|
||||||
|
double det = 0;
|
||||||
|
var tasks = new Task<double>[size];
|
||||||
|
|
||||||
|
for (int k = 0; k < size; k++)
|
||||||
|
{
|
||||||
|
int kLocal = k;
|
||||||
|
tasks[kLocal] = Task.Factory.StartNew(() =>
|
||||||
|
{
|
||||||
|
return (kLocal % 2 == 0 ? 1 : -1) * matrix[0, kLocal] * DeterminantSequential(CreateSmallerMatrix(matrix, 0, kLocal));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Task.WaitAll(tasks);
|
||||||
|
|
||||||
|
foreach (var task in tasks)
|
||||||
|
{
|
||||||
|
det += task.Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
return det;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static double DeterminantSequential(int[,] matrix)
|
||||||
|
{
|
||||||
|
int size = matrix.GetLength(0);
|
||||||
|
if (size == 1) return matrix[0, 0];
|
||||||
|
if (size == 2) return matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0];
|
||||||
|
|
||||||
|
double det = 0;
|
||||||
|
for (int k = 0; k < size; k++)
|
||||||
|
{
|
||||||
|
det += (k % 2 == 0 ? 1 : -1) * matrix[0, k] * DeterminantSequential(CreateSmallerMatrix(matrix, 0, k));
|
||||||
|
}
|
||||||
|
return det;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int[,] CreateSmallerMatrix(int[,] matrix, int excludingRow, int excludingCol)
|
||||||
|
{
|
||||||
|
int size = matrix.GetLength(0);
|
||||||
|
int[,] smallerMatrix = new int[size - 1, size - 1];
|
||||||
|
int i = 0, j = 0;
|
||||||
|
for (int row = 0; row < size; row++)
|
||||||
|
{
|
||||||
|
if (row == excludingRow) continue;
|
||||||
|
j = 0;
|
||||||
|
for (int col = 0; col < size; col++)
|
||||||
|
{
|
||||||
|
if (col == excludingCol) continue;
|
||||||
|
smallerMatrix[i, j] = matrix[row, col];
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return smallerMatrix;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"runtimeTarget": {
|
||||||
|
"name": ".NETCoreApp,Version=v8.0",
|
||||||
|
"signature": ""
|
||||||
|
},
|
||||||
|
"compilationOptions": {},
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v8.0": {
|
||||||
|
"MatrixDeterminant/1.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"MatrixDeterminant.dll": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"MatrixDeterminant/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"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("MatrixDeterminant")]
|
||||||
|
[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("MatrixDeterminant")]
|
||||||
|
[assembly: System.Reflection.AssemblyTitleAttribute("MatrixDeterminant")]
|
||||||
|
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||||
|
|
||||||
|
// Создано классом WriteCodeFragment MSBuild.
|
||||||
|
|
@ -0,0 +1 @@
|
|||||||
|
b62c0f7623532347296dfda403f8e24f24f5ff22aefaec77949419a46c5345d5
|
@ -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 = MatrixDeterminant
|
||||||
|
build_property.ProjectDir = D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_6\MatrixDeterminant\MatrixDeterminant\
|
||||||
|
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.
@ -0,0 +1 @@
|
|||||||
|
ef307266d2e10f095868927517f210f889e62282297f57f931d2f69a9e50026d
|
@ -0,0 +1,14 @@
|
|||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_6\MatrixDeterminant\MatrixDeterminant\bin\Debug\net8.0\MatrixDeterminant.exe
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_6\MatrixDeterminant\MatrixDeterminant\bin\Debug\net8.0\MatrixDeterminant.deps.json
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_6\MatrixDeterminant\MatrixDeterminant\bin\Debug\net8.0\MatrixDeterminant.runtimeconfig.json
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_6\MatrixDeterminant\MatrixDeterminant\bin\Debug\net8.0\MatrixDeterminant.dll
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_6\MatrixDeterminant\MatrixDeterminant\bin\Debug\net8.0\MatrixDeterminant.pdb
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_6\MatrixDeterminant\MatrixDeterminant\obj\Debug\net8.0\MatrixDeterminant.GeneratedMSBuildEditorConfig.editorconfig
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_6\MatrixDeterminant\MatrixDeterminant\obj\Debug\net8.0\MatrixDeterminant.AssemblyInfoInputs.cache
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_6\MatrixDeterminant\MatrixDeterminant\obj\Debug\net8.0\MatrixDeterminant.AssemblyInfo.cs
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_6\MatrixDeterminant\MatrixDeterminant\obj\Debug\net8.0\MatrixDeterminant.csproj.CoreCompileInputs.cache
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_6\MatrixDeterminant\MatrixDeterminant\obj\Debug\net8.0\MatrixDeterminant.dll
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_6\MatrixDeterminant\MatrixDeterminant\obj\Debug\net8.0\refint\MatrixDeterminant.dll
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_6\MatrixDeterminant\MatrixDeterminant\obj\Debug\net8.0\MatrixDeterminant.pdb
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_6\MatrixDeterminant\MatrixDeterminant\obj\Debug\net8.0\MatrixDeterminant.genruntimeconfig.cache
|
||||||
|
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_6\MatrixDeterminant\MatrixDeterminant\obj\Debug\net8.0\ref\MatrixDeterminant.dll
|
Binary file not shown.
@ -0,0 +1 @@
|
|||||||
|
1b145bab19aa88d8a557ef3b507e35905f65a9a8609aee764b5fcea1fa8d8e00
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,63 @@
|
|||||||
|
{
|
||||||
|
"format": 1,
|
||||||
|
"restore": {
|
||||||
|
"D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_6\\MatrixDeterminant\\MatrixDeterminant\\MatrixDeterminant.csproj": {}
|
||||||
|
},
|
||||||
|
"projects": {
|
||||||
|
"D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_6\\MatrixDeterminant\\MatrixDeterminant\\MatrixDeterminant.csproj": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"restore": {
|
||||||
|
"projectUniqueName": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_6\\MatrixDeterminant\\MatrixDeterminant\\MatrixDeterminant.csproj",
|
||||||
|
"projectName": "MatrixDeterminant",
|
||||||
|
"projectPath": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_6\\MatrixDeterminant\\MatrixDeterminant\\MatrixDeterminant.csproj",
|
||||||
|
"packagesPath": "C:\\Users\\73bul\\.nuget\\packages\\",
|
||||||
|
"outputPath": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_6\\MatrixDeterminant\\MatrixDeterminant\\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",
|
||||||
|
"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,68 @@
|
|||||||
|
{
|
||||||
|
"version": 3,
|
||||||
|
"targets": {
|
||||||
|
"net8.0": {}
|
||||||
|
},
|
||||||
|
"libraries": {},
|
||||||
|
"projectFileDependencyGroups": {
|
||||||
|
"net8.0": []
|
||||||
|
},
|
||||||
|
"packageFolders": {
|
||||||
|
"C:\\Users\\73bul\\.nuget\\packages\\": {}
|
||||||
|
},
|
||||||
|
"project": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"restore": {
|
||||||
|
"projectUniqueName": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_6\\MatrixDeterminant\\MatrixDeterminant\\MatrixDeterminant.csproj",
|
||||||
|
"projectName": "MatrixDeterminant",
|
||||||
|
"projectPath": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_6\\MatrixDeterminant\\MatrixDeterminant\\MatrixDeterminant.csproj",
|
||||||
|
"packagesPath": "C:\\Users\\73bul\\.nuget\\packages\\",
|
||||||
|
"outputPath": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_6\\MatrixDeterminant\\MatrixDeterminant\\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",
|
||||||
|
"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,8 @@
|
|||||||
|
{
|
||||||
|
"version": 2,
|
||||||
|
"dgSpecHash": "MsjFdrVex7ttbRwfezwe/tnb8JGwMSbJj+thkzYqpP+mHl2nw6UaJRTSe1NicG4pO9pjA0Kh2kDV/8LiPVKpkQ==",
|
||||||
|
"success": true,
|
||||||
|
"projectFilePath": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_6\\MatrixDeterminant\\MatrixDeterminant\\MatrixDeterminant.csproj",
|
||||||
|
"expectedPackageFiles": [],
|
||||||
|
"logs": []
|
||||||
|
}
|
137
almukhammetov_bulat_lab_6/README.md
Normal file
137
almukhammetov_bulat_lab_6/README.md
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
Альмухамметов ПИбд-42
|
||||||
|
|
||||||
|
Описание программы:
|
||||||
|
|
||||||
|
Эта программа предназначена для расчета детерминанта квадратных матриц с использованием как последовательных, так и параллельных вычислений. Она позволяет оценить и сравнить производительность и использование памяти обоих методов.
|
||||||
|
|
||||||
|
Основные функции программы:
|
||||||
|
|
||||||
|
Ввод количества потоков: Пользователь может ввести количество потоков, которые будут использоваться для параллельных вычислений. Если введено некорректное значение, по умолчанию используется 4 потока.
|
||||||
|
|
||||||
|
Генерация матриц: Программа генерирует квадратные матрицы заданных размеров (6x6, 8x8 и 10x10) со случайными значениями.
|
||||||
|
|
||||||
|
Тестирование производительности: Программа выполняет расчет детерминанта для каждой сгенерированной матрицы, используя последовательные и параллельные вычисления. Это повторяется 10 раз для получения средних значений времени выполнения и использованной памяти.
|
||||||
|
|
||||||
|
Вывод результатов: После тестирования программа выводит средние значения времени выполнения и использованной памяти для последовательных и параллельных вычислений для каждого размера матрицы.
|
||||||
|
|
||||||
|
Основные методы программы:
|
||||||
|
|
||||||
|
GenerateMatrix(int rows, int cols): Генерирует матрицу заданного размера с случайными значениями.
|
||||||
|
|
||||||
|
TestMatrixOperation(int[,] matrix, int threadCount): Выполняет расчет детерминанта для заданной матрицы обоими методами и измеряет время выполнения и использованную память.
|
||||||
|
|
||||||
|
IsSquareMatrix(int[,] matrix): Проверяет, является ли матрица квадратной.
|
||||||
|
|
||||||
|
DeterminantParallel(int[,] matrix, int threadCount): Вычисляет детерминант матрицы, используя параллельные вычисления.
|
||||||
|
|
||||||
|
DeterminantSequential(int[,] matrix): Вычисляет детерминант матрицы последовательным методом.
|
||||||
|
|
||||||
|
CreateSmallerMatrix(int[,] matrix, int excludingRow, int excludingCol): Создает меньшую матрицу путем исключения заданной строки и столбца из исходной матрицы.
|
||||||
|
|
||||||
|
Проверка работоспособности:
|
||||||
|
![Alt text](image.png)
|
||||||
|
|
||||||
|
![Alt text](image-1.png)
|
||||||
|
|
||||||
|
Результаты:
|
||||||
|
|
||||||
|
Введите количество потоков:
|
||||||
|
2
|
||||||
|
Прогон #1:
|
||||||
|
|
||||||
|
Последовательно: Время: 0 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 6 мс, Память: 640 байт
|
||||||
|
Последовательно: Время: 3 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 5 мс, Память: 832 байт
|
||||||
|
Последовательно: Время: 389 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 121 мс, Память: 4744 байт
|
||||||
|
Прогон #2:
|
||||||
|
|
||||||
|
Последовательно: Время: 0 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 0 мс, Память: 0 байт
|
||||||
|
Последовательно: Время: 3 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 1 мс, Память: 0 байт
|
||||||
|
Последовательно: Время: 324 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 77 мс, Память: 0 байт
|
||||||
|
Прогон #3:
|
||||||
|
|
||||||
|
Последовательно: Время: 0 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 0 мс, Память: 0 байт
|
||||||
|
Последовательно: Время: 3 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 0 мс, Память: 0 байт
|
||||||
|
Последовательно: Время: 336 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 75 мс, Память: 0 байт
|
||||||
|
Прогон #4:
|
||||||
|
|
||||||
|
Последовательно: Время: 0 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 0 мс, Память: 0 байт
|
||||||
|
Последовательно: Время: 3 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 1 мс, Память: 0 байт
|
||||||
|
Последовательно: Время: 317 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 75 мс, Память: 0 байт
|
||||||
|
Прогон #5:
|
||||||
|
|
||||||
|
Последовательно: Время: 0 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 0 мс, Память: 0 байт
|
||||||
|
Последовательно: Время: 3 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 1 мс, Память: 0 байт
|
||||||
|
Последовательно: Время: 324 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 74 мс, Память: 0 байт
|
||||||
|
Прогон #6:
|
||||||
|
|
||||||
|
Последовательно: Время: 0 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 0 мс, Память: 0 байт
|
||||||
|
Последовательно: Время: 3 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 1 мс, Память: 0 байт
|
||||||
|
Последовательно: Время: 322 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 77 мс, Память: 0 байт
|
||||||
|
Прогон #7:
|
||||||
|
|
||||||
|
Последовательно: Время: 0 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 0 мс, Память: 0 байт
|
||||||
|
Последовательно: Время: 3 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 1 мс, Память: 0 байт
|
||||||
|
Последовательно: Время: 341 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 74 мс, Память: 0 байт
|
||||||
|
Прогон #8:
|
||||||
|
|
||||||
|
Последовательно: Время: 0 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 0 мс, Память: 0 байт
|
||||||
|
Последовательно: Время: 3 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 1 мс, Память: 0 байт
|
||||||
|
Последовательно: Время: 319 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 74 мс, Память: 0 байт
|
||||||
|
Прогон #9:
|
||||||
|
|
||||||
|
Последовательно: Время: 0 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 0 мс, Память: 0 байт
|
||||||
|
Последовательно: Время: 3 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 1 мс, Память: 0 байт
|
||||||
|
Последовательно: Время: 337 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 76 мс, Память: 0 байт
|
||||||
|
Прогон #10:
|
||||||
|
|
||||||
|
Последовательно: Время: 0 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 0 мс, Память: 0 байт
|
||||||
|
Последовательно: Время: 3 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 0 мс, Память: 0 байт
|
||||||
|
Последовательно: Время: 348 мс, Память: 0 байт
|
||||||
|
Параллельно: Время: 78 мс, Память: 0 байт
|
||||||
|
|
||||||
|
Среднее время (мс) и расход памяти (байт) для последовательного и параллельного определения детерминанта:
|
||||||
|
6x6: Последовательно: Время: 0 мс, Память: 0 байт
|
||||||
|
6x6: Параллельно: Время: 0 мс, Память: 64 байт
|
||||||
|
8x8: Последовательно: Время: 3 мс, Память: 0 байт
|
||||||
|
8x8: Параллельно: Время: 1 мс, Память: 83 байт
|
||||||
|
10x10: Последовательно: Время: 335 мс, Память: 0 байт
|
||||||
|
10x10: Параллельно: Время: 80 мс, Память: 474 байт
|
||||||
|
|
||||||
|
Выводы:
|
||||||
|
|
||||||
|
1. Для небольших матриц (6x6 и 8x8) разница во времени выполнения между последовательным и параллельным методами незначительна. Однако при увеличении размера матрицы до 10x10 параллельные вычисления значительно ускоряют процесс.
|
||||||
|
2. Параллельные вычисления требуют немного больше памяти. Это связано дополнительными затратами на создание и управление потоками.
|
||||||
|
3. Параллельное выполнение становится более выгодным с увеличением сложности задачи, что видно из значительного уменьшения времени вычислений для 10x10 матрицы.
|
||||||
|
|
||||||
|
Видео:
|
||||||
|
|
||||||
|
https://vk.com/video228053206_456240783?list=ln-gr1nvdhEV3ZZ74iKE0
|
BIN
almukhammetov_bulat_lab_6/image-1.png
Normal file
BIN
almukhammetov_bulat_lab_6/image-1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 439 KiB |
BIN
almukhammetov_bulat_lab_6/image.png
Normal file
BIN
almukhammetov_bulat_lab_6/image.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 441 KiB |
Loading…
Reference in New Issue
Block a user