From 5bca7da18d099cd80a194b14c4ac3de970fb6b68 Mon Sep 17 00:00:00 2001 From: Khalitova Angelina Date: Mon, 18 Dec 2023 12:25:15 +0400 Subject: [PATCH] add --- tasks/khalitova-am/lab_6/App/.gitignore | 454 ++++++++++++++++++++++++ tasks/khalitova-am/lab_6/App/App.csproj | 14 + tasks/khalitova-am/lab_6/App/Program.cs | 187 ++++++++++ tasks/khalitova-am/lab_6/README.md | 199 +++++++++++ tasks/khalitova-am/lab_6/shot.PNG | Bin 0 -> 40848 bytes 5 files changed, 854 insertions(+) create mode 100644 tasks/khalitova-am/lab_6/App/.gitignore create mode 100644 tasks/khalitova-am/lab_6/App/App.csproj create mode 100644 tasks/khalitova-am/lab_6/App/Program.cs create mode 100644 tasks/khalitova-am/lab_6/README.md create mode 100644 tasks/khalitova-am/lab_6/shot.PNG diff --git a/tasks/khalitova-am/lab_6/App/.gitignore b/tasks/khalitova-am/lab_6/App/.gitignore new file mode 100644 index 0000000..2afa2e2 --- /dev/null +++ b/tasks/khalitova-am/lab_6/App/.gitignore @@ -0,0 +1,454 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# 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 +*.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 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/ + +# 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 + +## +## 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 + +# JetBrains Rider +.idea/ +*.sln.iml + +## +## Visual Studio Code +## +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json diff --git a/tasks/khalitova-am/lab_6/App/App.csproj b/tasks/khalitova-am/lab_6/App/App.csproj new file mode 100644 index 0000000..1260716 --- /dev/null +++ b/tasks/khalitova-am/lab_6/App/App.csproj @@ -0,0 +1,14 @@ + + + + Exe + net6.0 + enable + enable + + + + + + + diff --git a/tasks/khalitova-am/lab_6/App/Program.cs b/tasks/khalitova-am/lab_6/App/Program.cs new file mode 100644 index 0000000..3630e3e --- /dev/null +++ b/tasks/khalitova-am/lab_6/App/Program.cs @@ -0,0 +1,187 @@ +using System; +using System.Diagnostics; +using System.Threading.Tasks; +using BenchmarkDotNet.Attributes; +using BenchmarkDotNet.Running; + +public class MatrixDeterminant +{ + public static double DeterminantSequential(double[][] matrix) + { + int size = matrix.Length; + + if (size == 1) + { + return matrix[0][0]; + } + + if (size == 2) + { + return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]; + } + + double determinant = 0; + + for (int i = 0; i < size; i++) + { + double sign = (i % 2 == 0) ? 1 : -1; + double cofactor = sign * matrix[0][i] * DeterminantSequential(GetSubMatrix(matrix, 0, i)); + determinant += cofactor; + } + + return determinant; + } + + public static double DeterminantParallel(double[][] matrix, int numThreads) + { + int size = matrix.Length; + + if (size == 1) + { + return matrix[0][0]; + } + + if (size == 2) + { + return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]; + } + + double determinant = 0; + + Parallel.For(0, size, new ParallelOptions { MaxDegreeOfParallelism = numThreads }, i => + { + double sign = (i % 2 == 0) ? 1 : -1; + double cofactor = sign * matrix[0][i] * DeterminantSequential(GetSubMatrix(matrix, 0, i)); + determinant += cofactor; + }); + + return determinant; + } + + + [Benchmark] + public void DeterminantSequential_2x2() + { + double[][] matrix = GenerateRandomMatrix(2, 2); + DeterminantSequential(matrix); + } + + [Benchmark] + public void DeterminantParallel_2x2_4TH() + { + double[][] matrix = GenerateRandomMatrix(2, 2); + DeterminantParallel(matrix, 4); + } + [Benchmark] + public void DeterminantParallel_2x2_8TH() + { + double[][] matrix = GenerateRandomMatrix(2, 2); + DeterminantParallel(matrix, 8); + } + [Benchmark] + public void DeterminantParallel_2x2_16TH() + { + double[][] matrix = GenerateRandomMatrix(2, 2); + DeterminantParallel(matrix, 16); + } + [Benchmark] + public void DeterminantSequential_4x4() + { + double[][] matrix = GenerateRandomMatrix(4, 4); + DeterminantSequential(matrix); + } + + [Benchmark] + public void DeterminantParallel_4x4_4TH() + { + double[][] matrix = GenerateRandomMatrix(4, 4); + DeterminantParallel(matrix, 4); + } + [Benchmark] + public void DeterminantParallel_4x4_8TH() + { + double[][] matrix = GenerateRandomMatrix(4, 4); + DeterminantParallel(matrix, 8); + } + [Benchmark] + public void DeterminantParallel_4x4_16TH() + { + double[][] matrix = GenerateRandomMatrix(4, 4); + DeterminantParallel(matrix, 16); + } + [Benchmark] + public void DeterminantSequential_8x8() + { + double[][] matrix = GenerateRandomMatrix(8, 8); + DeterminantSequential(matrix); + } + + [Benchmark] + public void DeterminantParallel_8x8_4TH() + { + double[][] matrix = GenerateRandomMatrix(8, 8); + DeterminantParallel(matrix, 4); + } + [Benchmark] + public void DeterminantParallel_8x8_8TH() + { + double[][] matrix = GenerateRandomMatrix(8, 8); + DeterminantParallel(matrix, 8); + } + [Benchmark] + public void DeterminantParallel_8x8_16TH() + { + double[][] matrix = GenerateRandomMatrix(8, 8); + DeterminantParallel(matrix, 16); + } + public static double[][] GenerateRandomMatrix(int rows, int cols) + { + double[][] matrix = new double[rows][]; + + Random rand = new Random(); + + for (int i = 0; i < rows; i++) + { + matrix[i] = new double[cols]; + for (int j = 0; j < cols; j++) + { + matrix[i][j] = rand.Next(1, 10); + } + } + + return matrix; + } + + private static double[][] GetSubMatrix(double[][] matrix, int rowToRemove, int colToRemove) + { + int size = matrix.Length; + double[][] subMatrix = new double[size - 1][]; + + for (int i = 0, newRow = 0; i < size; i++) + { + if (i != rowToRemove) + { + subMatrix[newRow] = new double[size - 1]; + for (int j = 0, newCol = 0; j < size; j++) + { + if (j != colToRemove) + { + subMatrix[newRow][newCol] = matrix[i][j]; + newCol++; + } + } + newRow++; + } + } + return subMatrix; + } +} + +class Program +{ + static void Main(string[] args) + { + var summary = BenchmarkRunner.Run(); + Console.ReadLine(); + } +} \ No newline at end of file diff --git a/tasks/khalitova-am/lab_6/README.md b/tasks/khalitova-am/lab_6/README.md new file mode 100644 index 0000000..a9ccb62 --- /dev/null +++ b/tasks/khalitova-am/lab_6/README.md @@ -0,0 +1,199 @@ +# Отчёт по лабораторной работе №6 + +Выполнила: студентка гр. ИСЭбд-41 Халитова А.М. + +## Создание приложения + +В приложении были созданы следующие методы: + +- Заполнение матрицы рандомными значениями: +``` + public static double[][] GenerateRandomMatrix(int rows, int cols) + { + double[][] matrix = new double[rows][]; + + Random rand = new Random(); + + for (int i = 0; i < rows; i++) + { + matrix[i] = new double[cols]; + for (int j = 0; j < cols; j++) + { + matrix[i][j] = rand.Next(1, 10); + } + } + return matrix; + } +``` + +- Метод создания подматрицы для удаления строки и столбца в вычислении определителя: +``` + private static double[][] GetSubMatrix(double[][] matrix, int rowToRemove, int colToRemove) + { + int size = matrix.Length; + double[][] subMatrix = new double[size - 1][]; + + for (int i = 0, newRow = 0; i < size; i++) + { + if (i != rowToRemove) + { + subMatrix[newRow] = new double[size - 1]; + for (int j = 0, newCol = 0; j < size; j++) + { + if (j != colToRemove) + { + subMatrix[newRow][newCol] = matrix[i][j]; + newCol++; + } + } + newRow++; + } + } + return subMatrix; + } +``` + +- Метод вычисления детерминанта обычным алгоритмом: +``` + public static double DeterminantSequential(double[][] matrix) + { + int size = matrix.Length; + + if (size == 1) + { + return matrix[0][0]; + } + + if (size == 2) + { + return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]; + } + + double determinant = 0; + + for (int i = 0; i < size; i++) + { + double sign = (i % 2 == 0) ? 1 : -1; + double cofactor = sign * matrix[0][i] * DeterminantSequential(GetSubMatrix(matrix, 0, i)); + determinant += cofactor; + } + return determinant; + } +``` + +- Метод вычисления детерминанта параллельным алгоритмом: +``` +public static double DeterminantParallel(double[][] matrix, int numThreads) + { + int size = matrix.Length; + + if (size == 1) + { + return matrix[0][0]; + } + + if (size == 2) + { + return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]; + } + + double determinant = 0; + + Parallel.For(0, size, new ParallelOptions { MaxDegreeOfParallelism = numThreads }, i => + { + double sign = (i % 2 == 0) ? 1 : -1; + double cofactor = sign * matrix[0][i] * DeterminantSequential(GetSubMatrix(matrix, 0, i)); + determinant += cofactor; + }); + return determinant; + } +``` + +- Методы генерации матриц различных размеров и с различным числом потоков. Поскольку ресурсы машины не позволяют вычислить детерминанту для больших матриц (процесс занимает большое количество времени и памяти, происходит зависание), вычислять будем для матриц меньших размеров (2, 4, 8): +``` + + [Benchmark] + public void DeterminantSequential_2x2() + { + double[][] matrix = GenerateRandomMatrix(2, 2); + DeterminantSequential(matrix); + } + + [Benchmark] + public void DeterminantParallel_2x2_4TH() + { + double[][] matrix = GenerateRandomMatrix(2, 2); + DeterminantParallel(matrix, 4); + } + [Benchmark] + public void DeterminantParallel_2x2_8TH() + { + double[][] matrix = GenerateRandomMatrix(2, 2); + DeterminantParallel(matrix, 8); + } + [Benchmark] + public void DeterminantParallel_2x2_16TH() + { + double[][] matrix = GenerateRandomMatrix(2, 2); + DeterminantParallel(matrix, 16); + } + [Benchmark] + public void DeterminantSequential_4x4() + { + double[][] matrix = GenerateRandomMatrix(4, 4); + DeterminantSequential(matrix); + } + + [Benchmark] + public void DeterminantParallel_4x4_4TH() + { + double[][] matrix = GenerateRandomMatrix(4, 4); + DeterminantParallel(matrix, 4); + } + [Benchmark] + public void DeterminantParallel_4x4_8TH() + { + double[][] matrix = GenerateRandomMatrix(4, 4); + DeterminantParallel(matrix, 8); + } + [Benchmark] + public void DeterminantParallel_4x4_16TH() + { + double[][] matrix = GenerateRandomMatrix(4, 4); + DeterminantParallel(matrix, 16); + } + [Benchmark] + public void DeterminantSequential_8x8() + { + double[][] matrix = GenerateRandomMatrix(8, 8); + DeterminantSequential(matrix); + } + + [Benchmark] + public void DeterminantParallel_8x8_4TH() + { + double[][] matrix = GenerateRandomMatrix(8, 8); + DeterminantParallel(matrix, 4); + } + [Benchmark] + public void DeterminantParallel_8x8_8TH() + { + double[][] matrix = GenerateRandomMatrix(8, 8); + DeterminantParallel(matrix, 8); + } + [Benchmark] + public void DeterminantParallel_8x8_16TH() + { + double[][] matrix = GenerateRandomMatrix(8, 8); + DeterminantParallel(matrix, 16); + } +``` + +Запуск приложения происходит с помощью строки `var summary = BenchmarkRunner.Run();`. + + +## Результаты работы приложения + +![](shot.PNG) + +Вывод: по результатам работы, для малых матриц парралельный алгоритм не дает прироста в скорости работы. Для матрицы 8 на 8 дает прирост только распараллеливание на малое число потоков. Для вычисления детерминанта больших матриц (больше, чем 8 на 8) не хватает вычислительной мощности моего процессора, но можно предположить что в этом случае увеличение числа потоков приводило бы к увеличению скорости работы. \ No newline at end of file diff --git a/tasks/khalitova-am/lab_6/shot.PNG b/tasks/khalitova-am/lab_6/shot.PNG new file mode 100644 index 0000000000000000000000000000000000000000..46d43c1275cec7a20b1032a409e44581a08f6412 GIT binary patch literal 40848 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