From 267ba3b73cc7d4c6d3b20042686ad2adbfc8b1bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BE=D1=84=D1=8C=D1=8F=20=D0=9E=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D1=81=D0=BA=D0=B0=D1=8F?= Date: Sun, 17 Dec 2023 14:35:09 +0400 Subject: [PATCH 1/3] laba done --- .../lab_6/lab_6_matrix/lab_6_matrix.sln | 25 + .../lab_6_matrix/lab_6_matrix/.gitignore | 484 ++++++++++++++++++ .../lab_6_matrix/lab_6_matrix/Program.cs | 170 ++++++ .../lab_6_matrix/lab_6_matrix.csproj | 10 + 4 files changed, 689 insertions(+) create mode 100644 tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix.sln create mode 100644 tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix/.gitignore create mode 100644 tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix/Program.cs create mode 100644 tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix/lab_6_matrix.csproj diff --git a/tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix.sln b/tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix.sln new file mode 100644 index 0000000..79f574a --- /dev/null +++ b/tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix.sln @@ -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}") = "lab_6_matrix", "lab_6_matrix\lab_6_matrix.csproj", "{50F84649-668E-464D-94A9-7C36E1FCB2FF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {50F84649-668E-464D-94A9-7C36E1FCB2FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50F84649-668E-464D-94A9-7C36E1FCB2FF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50F84649-668E-464D-94A9-7C36E1FCB2FF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50F84649-668E-464D-94A9-7C36E1FCB2FF}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {45DFA84B-6962-4667-98B3-13BD962CF727} + EndGlobalSection +EndGlobal diff --git a/tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix/.gitignore b/tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix/.gitignore new file mode 100644 index 0000000..104b544 --- /dev/null +++ b/tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix/.gitignore @@ -0,0 +1,484 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from `dotnet new gitignore` + +# dotenv files +.env + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml +.idea + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# Vim temporary swap files +*.swp diff --git a/tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix/Program.cs b/tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix/Program.cs new file mode 100644 index 0000000..07c510d --- /dev/null +++ b/tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix/Program.cs @@ -0,0 +1,170 @@ +using System; +using System.Diagnostics; +using System.Threading; + +class Program +{ + static void Main(string[] args) + { + int matrixSize = 3; // размерность матрицы + + // Создаем матрицу + int[,] matrix = new int[matrixSize, matrixSize]; + + // Заполняем матрицу случайными значениями + Random random = new Random(); + for (int i = 0; i < matrixSize; i++) + { + for (int j = 0; j < matrixSize; j++) + { + matrix[i, j] = random.Next(1, 10); + } + } + + Console.Write("Введите количество потоков: "); + int numThreads = int.Parse(Console.ReadLine()); + + int detSequential = CalculateDeterminantSequential(matrix); + Console.WriteLine($"Детерминант (обычный алгоритм): {detSequential}"); + + int detParallel = CalculateDeterminantParallel(matrix, numThreads); + Console.WriteLine($"Детерминант (параллельный алгоритм, {numThreads} поток): {detParallel}"); + + // Бенчмарки + Console.WriteLine("\nБенчмарки:"); + + // Последовательный алгоритм + Console.WriteLine("Последовательный алгоритм:"); + + // Матрица 5x5 + matrixSize = 5; + matrix = new int[matrixSize, matrixSize]; + FillMatrix(matrix, random); + Stopwatch sw1 = new Stopwatch(); + sw1.Start(); + detSequential = CalculateDeterminantSequential(matrix); + sw1.Stop(); + TimeSpan elapsedTime1 = sw1.Elapsed; + Console.WriteLine($"Матрица {matrixSize}x{matrixSize}: Время выполнения - {elapsedTime1.TotalSeconds:F7} с"); + + // Матрица 10x10 + matrixSize = 10; + matrix = new int[matrixSize, matrixSize]; + FillMatrix(matrix, random); + sw1 = new Stopwatch(); + sw1.Start(); + detSequential = CalculateDeterminantSequential(matrix); + sw1.Stop(); + elapsedTime1 = sw1.Elapsed; + Console.WriteLine($"Матрица {matrixSize}x{matrixSize}: Время выполнения - {elapsedTime1.TotalSeconds:F7} с"); + + // Параллельный алгоритм + Console.WriteLine("\nПараллельный алгоритм:"); + + // Матрица 5x5 + matrixSize = 5; + matrix = new int[matrixSize, matrixSize]; + FillMatrix(matrix, random); + numThreads = 4; + Stopwatch sw2 = new Stopwatch(); + sw2.Start(); + detParallel = CalculateDeterminantParallel(matrix, numThreads); + sw2.Stop(); + TimeSpan elapsedTime2 = sw2.Elapsed; + Console.WriteLine($"Матрица {matrixSize}x{matrixSize}, {numThreads} потоков: Время выполнения - {elapsedTime2.TotalSeconds:F7} с"); + + // Матрица 10x10 + matrixSize = 10; + matrix = new int[matrixSize, matrixSize]; + FillMatrix(matrix, random); + numThreads = 4; + sw2 = new Stopwatch(); + sw2.Start(); + detParallel = CalculateDeterminantParallel(matrix, numThreads); + sw2.Stop(); + elapsedTime2 = sw2.Elapsed; + Console.WriteLine($"Матрица {matrixSize}x{matrixSize}, {numThreads} потоков: Время выполнения - {elapsedTime2.TotalSeconds:F7} с"); + + } + + static void FillMatrix(int[,] matrix, Random random) + { + int n = matrix.GetLength(0); + for (int i = 0; i < n; i++) + { + for (int j = 0; j < n; j++) + { + matrix[i, j] = random.Next(10); // Здесь можно указать диапазон случайных значений, в данном случае от 0 до 9 + } + } + } + + static int CalculateDeterminantSequential(int[,] matrix) + { + int n = matrix.GetLength(0); + if (n == 1) + { + return matrix[0, 0]; + } + else if (n == 2) + { + return matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0]; + } + else + { + int determinant = 0; + for (int j = 0; j < n; j++) + { + int[,] subMatrix = new int[n - 1, n - 1]; + for (int i = 1; i < n; i++) + { + for (int k = 0; k < j; k++) + { + subMatrix[i - 1, k] = matrix[i, k]; + } + for (int k = j + 1; k < n; k++) + { + subMatrix[i - 1, k - 1] = matrix[i, k]; + } + } + determinant += (int)Math.Pow(-1, j) * matrix[0, j] * CalculateDeterminantSequential(subMatrix); + } + return determinant; + } + } + + static int CalculateDeterminantParallel(int[,] matrix, int numThreads) + { + int n = matrix.GetLength(0); + if (n == 1) + { + return matrix[0, 0]; + } + else if (n == 2) + { + return matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0]; + } + else + { + int determinant = 0; + Parallel.For(0, n, new ParallelOptions { MaxDegreeOfParallelism = numThreads }, j => + { + int[,] subMatrix = new int[n - 1, n - 1]; + for (int i = 1; i < n; i++) + { + for (int k = 0; k < j; k++) + { + subMatrix[i - 1, k] = matrix[i, k]; + } + for (int k = j + 1; k < n; k++) + { + subMatrix[i - 1, k - 1] = matrix[i, k]; + } + } + int subDeterminant = CalculateDeterminantParallel(subMatrix, numThreads); + Interlocked.Add(ref determinant, (int)Math.Pow(-1, j) * matrix[0, j] * subDeterminant); + }); + return determinant; + } + } +} \ No newline at end of file diff --git a/tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix/lab_6_matrix.csproj b/tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix/lab_6_matrix.csproj new file mode 100644 index 0000000..2150e37 --- /dev/null +++ b/tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix/lab_6_matrix.csproj @@ -0,0 +1,10 @@ + + + + Exe + net8.0 + enable + enable + + + -- 2.25.1 From 6dc434cbf33da2f928d41c0e4b979f2211db75bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BE=D1=84=D1=8C=D1=8F=20=D0=9E=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D1=81=D0=BA=D0=B0=D1=8F?= Date: Sun, 17 Dec 2023 15:30:42 +0400 Subject: [PATCH 2/3] . --- tasks/ostrovskaya-sf/lab_6/README.md | 66 ++++++ .../lab_6_matrix/lab_6_matrix/Program.cs | 213 ++++++++---------- tasks/ostrovskaya-sf/lab_6/pic/pic1.jpg | Bin 0 -> 83542 bytes 3 files changed, 155 insertions(+), 124 deletions(-) create mode 100644 tasks/ostrovskaya-sf/lab_6/README.md create mode 100644 tasks/ostrovskaya-sf/lab_6/pic/pic1.jpg diff --git a/tasks/ostrovskaya-sf/lab_6/README.md b/tasks/ostrovskaya-sf/lab_6/README.md new file mode 100644 index 0000000..2060260 --- /dev/null +++ b/tasks/ostrovskaya-sf/lab_6/README.md @@ -0,0 +1,66 @@ +# Отчет по лабораторной работе №5 + +Выполнила студентка гр. ИСЭбд-41 Островская С.Ф. + +## Создание приложения + +Было выбрано консольное приложение, язык программирования - c#. + +Обычный алгоритм: + +```cs +static void SequentialDeterminantCalculation(int matrixSize, int lowerLimit, int upperLimit) + { + int[][] randomMatrix = GenerateRandomMatrix(matrixSize, lowerLimit, upperLimit); + + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + int result = Determinant(randomMatrix); + stopwatch.Stop(); + TimeSpan elapsedTime = stopwatch.Elapsed; + Console.WriteLine($"Последовательный детерминант: {result}"); + Console.WriteLine($"Последовательное время: {elapsedTime.TotalSeconds:F7} секунд"); + } +``` +Параллельный алгоритм: + +```cs +static void ParallelDeterminantCalculation(int matrixSize, int lowerLimit, int upperLimit, int numProcesses) + { + int[][] randomMatrix = GenerateRandomMatrix(matrixSize, lowerLimit, upperLimit); + + int[][] matricesToProcess = new int[matrixSize][]; + for (int col = 0; col < matrixSize; col++) + { + matricesToProcess[col] = Submatrix(randomMatrix, 0, col)[0]; + } + + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + int[] determinants = new int[matrixSize]; + Parallel.For(0, matrixSize, new ParallelOptions { MaxDegreeOfParallelism = numProcesses }, col => + { + determinants[col] = Determinant(new int[][] { matricesToProcess[col] }); + }); + + int result = 0; + for (int col = 0; col < matrixSize; col++) + { + result += ((-1) * col) * randomMatrix[0][col] * determinants[col]; + } + stopwatch.Stop(); + TimeSpan elapsedTime = stopwatch.Elapsed; + Console.WriteLine($"Параллельный детерминант: {result}"); + Console.WriteLine($"Параллельное время: {elapsedTime.TotalSeconds:F7} секунд"); + } +``` + +## Бенчмарки + +Для примера была взята матрица размерностью 10х10, поскольку для матриц больших размеров детерминант вычисляется слишком долго. + + +![](pic/pic1.jpg) + + +``Вывод``: Обыный алгоритм работает быстрее, если количество элементов не слишком много. Параллельный же алгоритм работает быстрее только при наличии большого количества операций и данных. \ No newline at end of file diff --git a/tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix/Program.cs b/tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix/Program.cs index 07c510d..165e3dd 100644 --- a/tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix/Program.cs +++ b/tasks/ostrovskaya-sf/lab_6/lab_6_matrix/lab_6_matrix/Program.cs @@ -1,170 +1,135 @@ using System; using System.Diagnostics; -using System.Threading; +using System.Threading.Tasks; class Program { - static void Main(string[] args) + static void SequentialDeterminantCalculation(int matrixSize, int lowerLimit, int upperLimit) { - int matrixSize = 3; // размерность матрицы + int[][] randomMatrix = GenerateRandomMatrix(matrixSize, lowerLimit, upperLimit); - // Создаем матрицу - int[,] matrix = new int[matrixSize, matrixSize]; + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + int result = Determinant(randomMatrix); + stopwatch.Stop(); + TimeSpan elapsedTime = stopwatch.Elapsed; + Console.WriteLine($"Последовательный детерминант: {result}"); + Console.WriteLine($"Последовательное время: {elapsedTime.TotalSeconds:F7} секунд"); + } - // Заполняем матрицу случайными значениями + static void ParallelDeterminantCalculation(int matrixSize, int lowerLimit, int upperLimit, int numProcesses) + { + int[][] randomMatrix = GenerateRandomMatrix(matrixSize, lowerLimit, upperLimit); + + int[][] matricesToProcess = new int[matrixSize][]; + for (int col = 0; col < matrixSize; col++) + { + matricesToProcess[col] = Submatrix(randomMatrix, 0, col)[0]; + } + + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + int[] determinants = new int[matrixSize]; + Parallel.For(0, matrixSize, new ParallelOptions { MaxDegreeOfParallelism = numProcesses }, col => + { + determinants[col] = Determinant(new int[][] { matricesToProcess[col] }); + }); + + int result = 0; + for (int col = 0; col < matrixSize; col++) + { + result += ((-1) * col) * randomMatrix[0][col] * determinants[col]; + } + stopwatch.Stop(); + TimeSpan elapsedTime = stopwatch.Elapsed; + Console.WriteLine($"Параллельный детерминант: {result}"); + Console.WriteLine($"Параллельное время: {elapsedTime.TotalSeconds:F7} секунд"); + } + + static int[][] GenerateRandomMatrix(int matrixSize, int lowerLimit, int upperLimit) + { Random random = new Random(); + int[][] matrix = new int[matrixSize][]; + for (int i = 0; i < matrixSize; i++) { + matrix[i] = new int[matrixSize]; for (int j = 0; j < matrixSize; j++) { - matrix[i, j] = random.Next(1, 10); + matrix[i][j] = random.Next(lowerLimit, upperLimit); } } - - Console.Write("Введите количество потоков: "); - int numThreads = int.Parse(Console.ReadLine()); - - int detSequential = CalculateDeterminantSequential(matrix); - Console.WriteLine($"Детерминант (обычный алгоритм): {detSequential}"); - - int detParallel = CalculateDeterminantParallel(matrix, numThreads); - Console.WriteLine($"Детерминант (параллельный алгоритм, {numThreads} поток): {detParallel}"); - - // Бенчмарки - Console.WriteLine("\nБенчмарки:"); - - // Последовательный алгоритм - Console.WriteLine("Последовательный алгоритм:"); - - // Матрица 5x5 - matrixSize = 5; - matrix = new int[matrixSize, matrixSize]; - FillMatrix(matrix, random); - Stopwatch sw1 = new Stopwatch(); - sw1.Start(); - detSequential = CalculateDeterminantSequential(matrix); - sw1.Stop(); - TimeSpan elapsedTime1 = sw1.Elapsed; - Console.WriteLine($"Матрица {matrixSize}x{matrixSize}: Время выполнения - {elapsedTime1.TotalSeconds:F7} с"); - - // Матрица 10x10 - matrixSize = 10; - matrix = new int[matrixSize, matrixSize]; - FillMatrix(matrix, random); - sw1 = new Stopwatch(); - sw1.Start(); - detSequential = CalculateDeterminantSequential(matrix); - sw1.Stop(); - elapsedTime1 = sw1.Elapsed; - Console.WriteLine($"Матрица {matrixSize}x{matrixSize}: Время выполнения - {elapsedTime1.TotalSeconds:F7} с"); - - // Параллельный алгоритм - Console.WriteLine("\nПараллельный алгоритм:"); - - // Матрица 5x5 - matrixSize = 5; - matrix = new int[matrixSize, matrixSize]; - FillMatrix(matrix, random); - numThreads = 4; - Stopwatch sw2 = new Stopwatch(); - sw2.Start(); - detParallel = CalculateDeterminantParallel(matrix, numThreads); - sw2.Stop(); - TimeSpan elapsedTime2 = sw2.Elapsed; - Console.WriteLine($"Матрица {matrixSize}x{matrixSize}, {numThreads} потоков: Время выполнения - {elapsedTime2.TotalSeconds:F7} с"); - - // Матрица 10x10 - matrixSize = 10; - matrix = new int[matrixSize, matrixSize]; - FillMatrix(matrix, random); - numThreads = 4; - sw2 = new Stopwatch(); - sw2.Start(); - detParallel = CalculateDeterminantParallel(matrix, numThreads); - sw2.Stop(); - elapsedTime2 = sw2.Elapsed; - Console.WriteLine($"Матрица {matrixSize}x{matrixSize}, {numThreads} потоков: Время выполнения - {elapsedTime2.TotalSeconds:F7} с"); + return matrix; } - static void FillMatrix(int[,] matrix, Random random) + static int[][] Submatrix(int[][] matrix, int rowToDelete, int colToDelete) { - int n = matrix.GetLength(0); - for (int i = 0; i < n; i++) + int size = matrix.Length - 1; + int[][] submatrix = new int[size][]; + + int rowIndex = 0; + + for (int i = 0; i < matrix.Length; i++) { - for (int j = 0; j < n; j++) + if (i == rowToDelete) + continue; + + submatrix[rowIndex] = new int[size]; + + int colIndex = 0; + for (int j = 0; j < matrix.Length; j++) { - matrix[i, j] = random.Next(10); // Здесь можно указать диапазон случайных значений, в данном случае от 0 до 9 + if (j == colToDelete) + continue; + + submatrix[rowIndex][colIndex] = matrix[i][j]; + colIndex++; } + + rowIndex++; } + + return submatrix; } - static int CalculateDeterminantSequential(int[,] matrix) + static int Determinant(int[][] matrix) { - int n = matrix.GetLength(0); + int n = matrix.Length; if (n == 1) { - return matrix[0, 0]; + return matrix[0][0]; } else if (n == 2) { - return matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0]; + return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]; } else { int determinant = 0; + for (int j = 0; j < n; j++) { - int[,] subMatrix = new int[n - 1, n - 1]; - for (int i = 1; i < n; i++) - { - for (int k = 0; k < j; k++) - { - subMatrix[i - 1, k] = matrix[i, k]; - } - for (int k = j + 1; k < n; k++) - { - subMatrix[i - 1, k - 1] = matrix[i, k]; - } - } - determinant += (int)Math.Pow(-1, j) * matrix[0, j] * CalculateDeterminantSequential(subMatrix); + int[][] submatrix = Submatrix(matrix, 0, j); + int subDeterminant = Determinant(submatrix); + determinant += ((-1) * j) * matrix[0][j] * subDeterminant; } + return determinant; } } - static int CalculateDeterminantParallel(int[,] matrix, int numThreads) + static void Main(string[] args) { - int n = matrix.GetLength(0); - if (n == 1) + SequentialDeterminantCalculation(10, 0, 10); + Console.WriteLine(); + + int[] numThreads = { 1, 2, 4, 6, 8, 12, 16, 32 }; + + for (int i = 0; i < 8; i++) { - return matrix[0, 0]; - } - else if (n == 2) - { - return matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0]; - } - else - { - int determinant = 0; - Parallel.For(0, n, new ParallelOptions { MaxDegreeOfParallelism = numThreads }, j => - { - int[,] subMatrix = new int[n - 1, n - 1]; - for (int i = 1; i < n; i++) - { - for (int k = 0; k < j; k++) - { - subMatrix[i - 1, k] = matrix[i, k]; - } - for (int k = j + 1; k < n; k++) - { - subMatrix[i - 1, k - 1] = matrix[i, k]; - } - } - int subDeterminant = CalculateDeterminantParallel(subMatrix, numThreads); - Interlocked.Add(ref determinant, (int)Math.Pow(-1, j) * matrix[0, j] * subDeterminant); - }); - return determinant; + Console.WriteLine($"Количество потоков: {numThreads[i]}"); + ParallelDeterminantCalculation(10, 0, 10, numThreads[i]); } } -} \ No newline at end of file +} diff --git a/tasks/ostrovskaya-sf/lab_6/pic/pic1.jpg b/tasks/ostrovskaya-sf/lab_6/pic/pic1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..095490c386bcbc5f36d2d5c5efbee8d652551931 GIT binary patch literal 83542 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%0Ap6U4>dZVrVXf#woG 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 Date: Sun, 17 Dec 2023 15:31:55 +0400 Subject: [PATCH 3/3] fix readme --- tasks/ostrovskaya-sf/lab_6/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasks/ostrovskaya-sf/lab_6/README.md b/tasks/ostrovskaya-sf/lab_6/README.md index 2060260..a233748 100644 --- a/tasks/ostrovskaya-sf/lab_6/README.md +++ b/tasks/ostrovskaya-sf/lab_6/README.md @@ -1,6 +1,6 @@ -# Отчет по лабораторной работе №5 +# Отчет по лабораторной работе №6 -Выполнила студентка гр. ИСЭбд-41 Островская С.Ф. +Выполнила студентка гр. ИСЭбд-41 Островская С. Ф. ## Создание приложения -- 2.25.1