From a8c4eb9d6c4f6699ea13c3b2a1fb5e28d8171261 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Thu, 9 Sep 2021 22:18:28 +0300 Subject: [PATCH 01/24] add FileFunctions.cs and MatrixFunctions.cs --- .../.dockerignore | 25 ++++++ .../ParallelMatrixMultiplication/Dockerfile | 18 ++++ .../FileFunctions.cs | 89 +++++++++++++++++++ .../ParallelMatrixMultiplication/Matrix1.txt | 0 .../ParallelMatrixMultiplication/Matrix2.txt | 0 .../MatrixFunctions.cs | 25 ++++++ 6 files changed, 157 insertions(+) create mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication/.dockerignore create mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication/Dockerfile create mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs create mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix1.txt create mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix2.txt create mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/.dockerignore b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/.dockerignore new file mode 100644 index 0000000..cd967fc --- /dev/null +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/.dockerignore @@ -0,0 +1,25 @@ +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/.idea +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Dockerfile b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Dockerfile new file mode 100644 index 0000000..e40f207 --- /dev/null +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Dockerfile @@ -0,0 +1,18 @@ +FROM mcr.microsoft.com/dotnet/runtime:5.0 AS base +WORKDIR /app + +FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build +WORKDIR /src +COPY ["ParallelMatrixMultiplication/ParallelMatrixMultiplication.csproj", "ParallelMatrixMultiplication/"] +RUN dotnet restore "ParallelMatrixMultiplication/ParallelMatrixMultiplication.csproj" +COPY . . +WORKDIR "/src/ParallelMatrixMultiplication" +RUN dotnet build "ParallelMatrixMultiplication.csproj" -c Release -o /app/build + +FROM build AS publish +RUN dotnet publish "ParallelMatrixMultiplication.csproj" -c Release -o /app/publish + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "ParallelMatrixMultiplication.dll"] diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs new file mode 100644 index 0000000..8162213 --- /dev/null +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs @@ -0,0 +1,89 @@ +using System; +using System.IO; + +namespace ParallelMatrixMultiplication +{ + /// + /// File's function + /// + public static class FileFunctions + { + private static (int, int) CountSizeMatrix(string filePath) + { + using var file = new StreamReader(filePath); + string line = file.ReadLine(); + int size = 0; + if (line == null) + { + throw new Exception(); + } + string[] lineDrop = line.Split(" ", StringSplitOptions.RemoveEmptyEntries); + while (line != null) + { + size++; + line = file.ReadLine(); + } + return (size, lineDrop.Length); + } + + /// + /// Create Marrix from file + /// + public static int[,] CreateMatrix(string filePath) + { + if (filePath == "") + { + throw new Exception(); + } + + (int lenght, int width) size = CountSizeMatrix((filePath)); + var matrix = new int[size.lenght, size.width]; + using var file = new StreamReader(filePath); + string line = file.ReadLine(); + while (line != null) + { + var index = 0; + string[] lineDrop = line.Split(" ", StringSplitOptions.RemoveEmptyEntries); + for (int i = 0; i < size.lenght; ++i) + { + matrix[index, i] = Int32.Parse(lineDrop[i]); + } + line = file.ReadLine(); + } + + return matrix; + } + + /// + /// Create file and return matrix + /// + public static void CreateFileWithMatrix(string filePath, int[,] matrix) + { + if (filePath == "") + { + throw new Exception(); + } + var fileOut = new FileInfo(filePath); + if (fileOut.Exists) + { + fileOut.Delete(); + } + using var newFile = new FileStream(filePath, FileMode.Create); + var file = new StreamWriter(newFile); + for (int i = 0; i < matrix.GetLength(0); i++) + { + var line = ""; + for (int j = 0; j < matrix.Length; j++) + { + line = $"{matrix[i, j]} "; + } + file.WriteLine(line); + } + file.Close(); + if (fileOut.Exists) + { + fileOut.MoveTo(filePath); + } + } + } +} \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix1.txt b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix1.txt new file mode 100644 index 0000000..e69de29 diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix2.txt b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix2.txt new file mode 100644 index 0000000..e69de29 diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs new file mode 100644 index 0000000..8aa1c75 --- /dev/null +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs @@ -0,0 +1,25 @@ +namespace ParallelMatrixMultiplication +{ + /// + /// Class with matrix multiplication + /// + public class MatrixFunctions + { + public static int[,] MatrixMuptiplication(int[,] matrix1, int[,] matrix2) + { + var matrix = new int[matrix1.Rank, matrix1.GetLength(0)]; + for (int i = 0; i < matrix1.GetLength(0); i++) + { + for (int j = 0; j < matrix1.GetLength(i); j++) + { + for (int k = 0; k < matrix1.GetLength((0)); ++k) + { + matrix[i, j] += matrix1[i, k] * matrix2[k, j]; + } + } + } + + return matrix; + } + } +} \ No newline at end of file From 9b217a42408f76959f78d2a685975465ebf4b7f5 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Thu, 9 Sep 2021 22:20:28 +0300 Subject: [PATCH 02/24] delete and add files --- .../.dockerignore | 25 ------------------ .../ParallelMatrixMultiplication/Dockerfile | 18 ------------- .../ParallelMatrixMultiplication/Program.cs | 26 +++++++++++++++++++ 3 files changed, 26 insertions(+), 43 deletions(-) delete mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication/.dockerignore delete mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication/Dockerfile create mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/.dockerignore b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/.dockerignore deleted file mode 100644 index cd967fc..0000000 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/.dockerignore +++ /dev/null @@ -1,25 +0,0 @@ -**/.dockerignore -**/.env -**/.git -**/.gitignore -**/.project -**/.settings -**/.toolstarget -**/.vs -**/.vscode -**/.idea -**/*.*proj.user -**/*.dbmdl -**/*.jfm -**/azds.yaml -**/bin -**/charts -**/docker-compose* -**/Dockerfile* -**/node_modules -**/npm-debug.log -**/obj -**/secrets.dev.yaml -**/values.dev.yaml -LICENSE -README.md \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Dockerfile b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Dockerfile deleted file mode 100644 index e40f207..0000000 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Dockerfile +++ /dev/null @@ -1,18 +0,0 @@ -FROM mcr.microsoft.com/dotnet/runtime:5.0 AS base -WORKDIR /app - -FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build -WORKDIR /src -COPY ["ParallelMatrixMultiplication/ParallelMatrixMultiplication.csproj", "ParallelMatrixMultiplication/"] -RUN dotnet restore "ParallelMatrixMultiplication/ParallelMatrixMultiplication.csproj" -COPY . . -WORKDIR "/src/ParallelMatrixMultiplication" -RUN dotnet build "ParallelMatrixMultiplication.csproj" -c Release -o /app/build - -FROM build AS publish -RUN dotnet publish "ParallelMatrixMultiplication.csproj" -c Release -o /app/publish - -FROM base AS final -WORKDIR /app -COPY --from=publish /app/publish . -ENTRYPOINT ["dotnet", "ParallelMatrixMultiplication.dll"] diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs new file mode 100644 index 0000000..0653797 --- /dev/null +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs @@ -0,0 +1,26 @@ +using System; +using System.Threading; + +namespace ParallelMatrixMultiplication +{ + class Program + { + static void Main(string[] args) + { + var threads = new Thread[2]; + var chunkSize = args.Length / threads.Length; + var results = new int[threads.Length]; + int[,] matrixFirst; + int[,] matrixSecond; + threads[0] = new Thread(() => + { + matrixFirst = FileFunctions.CreateMatrix((args[0])); + }); + threads[1] = new Thread(() => + { + matrixSecond = FileFunctions.CreateMatrix((args[1])); + }); + var matrix = MatrixFunctions.MatrixMuptiplication(matrixFirst, matrixSecond); + } + } +} \ No newline at end of file From ba0474ac34f4fc8ea898ff1370b9df207320c477 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Thu, 9 Sep 2021 22:40:34 +0300 Subject: [PATCH 03/24] .csproj and .sln --- .../ParallelMatrixMultiplication.sln | 16 ++++++++++++++++ .../ParallelMatrixMultiplication.csproj | 9 +++++++++ 2 files changed, 25 insertions(+) create mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication.sln create mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication/ParallelMatrixMultiplication.csproj diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.sln b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.sln new file mode 100644 index 0000000..c17aea5 --- /dev/null +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.sln @@ -0,0 +1,16 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ParallelMatrixMultiplication", "ParallelMatrixMultiplication\ParallelMatrixMultiplication.csproj", "{7835B9F5-62D6-4600-B715-C8BEBCEF58E6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7835B9F5-62D6-4600-B715-C8BEBCEF58E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7835B9F5-62D6-4600-B715-C8BEBCEF58E6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7835B9F5-62D6-4600-B715-C8BEBCEF58E6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7835B9F5-62D6-4600-B715-C8BEBCEF58E6}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/ParallelMatrixMultiplication.csproj b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/ParallelMatrixMultiplication.csproj new file mode 100644 index 0000000..a184b89 --- /dev/null +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/ParallelMatrixMultiplication.csproj @@ -0,0 +1,9 @@ + + + + Exe + net5.0 + Windows + + + From 8ca16035a896bb0d114a2880f378a621b40c527c Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Thu, 9 Sep 2021 22:49:40 +0300 Subject: [PATCH 04/24] wip --- .../ParallelMatrixMultiplication/Program.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs index 0653797..04c4ec9 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs @@ -10,17 +10,19 @@ static void Main(string[] args) var threads = new Thread[2]; var chunkSize = args.Length / threads.Length; var results = new int[threads.Length]; - int[,] matrixFirst; - int[,] matrixSecond; - threads[0] = new Thread(() => + /*int[,] matrixFirst; + int[,] matrixSecond;*/ + var matrixFirst = FileFunctions.CreateMatrix((args[0])); + var matrixSecond = FileFunctions.CreateMatrix((args[1])); + /*threads[0] = new Thread(() => { matrixFirst = FileFunctions.CreateMatrix((args[0])); }); threads[1] = new Thread(() => { matrixSecond = FileFunctions.CreateMatrix((args[1])); - }); + });*/ var matrix = MatrixFunctions.MatrixMuptiplication(matrixFirst, matrixSecond); } } -} \ No newline at end of file +} From 56e60b30def22d460a31c604f37f091d30a3a125 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Thu, 9 Sep 2021 23:03:50 +0300 Subject: [PATCH 05/24] wip --- .../ParallelMatrixMultiplication/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs index 04c4ec9..bfec553 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs @@ -21,7 +21,7 @@ static void Main(string[] args) threads[1] = new Thread(() => { matrixSecond = FileFunctions.CreateMatrix((args[1])); - });*/ + }); */ var matrix = MatrixFunctions.MatrixMuptiplication(matrixFirst, matrixSecond); } } From 723eb272b456f2e8c1ba4c692e32a56626de3178 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Thu, 9 Sep 2021 23:10:36 +0300 Subject: [PATCH 06/24] wip --- .../ParallelMatrixMultiplication.sln | 19 ++++++++++++++----- .../ParallelMatrixMultiplication/Matrix1.txt | 12 ++++++++++++ .../ParallelMatrixMultiplication/Matrix2.txt | 12 ++++++++++++ .../MatrixFunctions.cs | 2 +- .../ParallelMatrixMultiplication.csproj | 9 ++++----- 5 files changed, 43 insertions(+), 11 deletions(-) diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.sln b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.sln index c17aea5..c389fa6 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.sln +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.sln @@ -1,6 +1,9 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ParallelMatrixMultiplication", "ParallelMatrixMultiplication\ParallelMatrixMultiplication.csproj", "{7835B9F5-62D6-4600-B715-C8BEBCEF58E6}" +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31624.102 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ParallelMatrixMultiplication", "ParallelMatrixMultiplication\ParallelMatrixMultiplication.csproj", "{A8AF63A3-1364-4FA2-8832-D27A339FAD1B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -8,9 +11,15 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {7835B9F5-62D6-4600-B715-C8BEBCEF58E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7835B9F5-62D6-4600-B715-C8BEBCEF58E6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7835B9F5-62D6-4600-B715-C8BEBCEF58E6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7835B9F5-62D6-4600-B715-C8BEBCEF58E6}.Release|Any CPU.Build.0 = Release|Any CPU + {A8AF63A3-1364-4FA2-8832-D27A339FAD1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A8AF63A3-1364-4FA2-8832-D27A339FAD1B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A8AF63A3-1364-4FA2-8832-D27A339FAD1B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A8AF63A3-1364-4FA2-8832-D27A339FAD1B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {3EC4E190-8ABB-4682-A8B2-190BAE5FEFB0} EndGlobalSection EndGlobal diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix1.txt b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix1.txt index e69de29..2509927 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix1.txt +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix1.txt @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ParallelMatrixMultiplication +{ + class Matrix1 + { + } +} diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix2.txt b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix2.txt index e69de29..6bd9f8a 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix2.txt +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix2.txt @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ParallelMatrixMultiplication +{ + class Matrix2 + { + } +} diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs index 8aa1c75..565489c 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs @@ -14,7 +14,7 @@ public class MatrixFunctions { for (int k = 0; k < matrix1.GetLength((0)); ++k) { - matrix[i, j] += matrix1[i, k] * matrix2[k, j]; + matrix[i, j] += matrix1[i, k] * matrix2[k, j]; } } } diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/ParallelMatrixMultiplication.csproj b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/ParallelMatrixMultiplication.csproj index a184b89..2082704 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/ParallelMatrixMultiplication.csproj +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/ParallelMatrixMultiplication.csproj @@ -1,9 +1,8 @@ - - Exe - net5.0 - Windows - + + Exe + net5.0 + From a46fb5ca664d0726cd9ea8ee527484d68947c060 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Thu, 9 Sep 2021 23:51:16 +0300 Subject: [PATCH 07/24] add two .txt --- .../ParallelMatrixMultiplication/FileFunctions.cs | 10 +++++----- .../ParallelMatrixMultiplication/Matrix1.txt | 15 +++------------ .../ParallelMatrixMultiplication/Matrix2.txt | 15 +++------------ .../MatrixFunctions.cs | 4 ++-- .../ParallelMatrixMultiplication/Program.cs | 1 + 5 files changed, 14 insertions(+), 31 deletions(-) diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs index 8162213..fa0cc6f 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs @@ -40,17 +40,17 @@ private static (int, int) CountSizeMatrix(string filePath) var matrix = new int[size.lenght, size.width]; using var file = new StreamReader(filePath); string line = file.ReadLine(); + var index = 0; while (line != null) { - var index = 0; string[] lineDrop = line.Split(" ", StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < size.lenght; ++i) { matrix[index, i] = Int32.Parse(lineDrop[i]); } + index++; line = file.ReadLine(); } - return matrix; } @@ -72,10 +72,10 @@ public static void CreateFileWithMatrix(string filePath, int[,] matrix) var file = new StreamWriter(newFile); for (int i = 0; i < matrix.GetLength(0); i++) { - var line = ""; - for (int j = 0; j < matrix.Length; j++) + string line = ""; + for (int j = 0; j < matrix.GetLength(1); j++) { - line = $"{matrix[i, j]} "; + line += $"{matrix[i, j]} "; } file.WriteLine(line); } diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix1.txt b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix1.txt index 2509927..3436bd2 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix1.txt +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix1.txt @@ -1,12 +1,3 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace ParallelMatrixMultiplication -{ - class Matrix1 - { - } -} +2 1 2 +4 1 5 +1 5 3 \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix2.txt b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix2.txt index 6bd9f8a..725c3f5 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix2.txt +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix2.txt @@ -1,12 +1,3 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace ParallelMatrixMultiplication -{ - class Matrix2 - { - } -} +9 3 1 +4 6 9 +1 5 7 \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs index 565489c..c5064d6 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs @@ -7,10 +7,10 @@ public class MatrixFunctions { public static int[,] MatrixMuptiplication(int[,] matrix1, int[,] matrix2) { - var matrix = new int[matrix1.Rank, matrix1.GetLength(0)]; + var matrix = new int[matrix1.GetLength(1), matrix1.GetLength(0)]; for (int i = 0; i < matrix1.GetLength(0); i++) { - for (int j = 0; j < matrix1.GetLength(i); j++) + for (int j = 0; j < matrix2.GetLength(1); j++) { for (int k = 0; k < matrix1.GetLength((0)); ++k) { diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs index bfec553..ba21408 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs @@ -23,6 +23,7 @@ static void Main(string[] args) matrixSecond = FileFunctions.CreateMatrix((args[1])); }); */ var matrix = MatrixFunctions.MatrixMuptiplication(matrixFirst, matrixSecond); + FileFunctions.CreateFileWithMatrix(args[2], matrix); } } } From 3a35213a7eab719576698d4a58c59193bcae9502 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Thu, 9 Sep 2021 23:54:15 +0300 Subject: [PATCH 08/24] appveyor.yml --- appveyor.yml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 appveyor.yml diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..9809100 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,3 @@ +build_script: +- For /R %%I in (*.sln) do dotnet test %%I +test: of \ No newline at end of file From 350dc36331c98ee3739d89a15fb50080da0c2aa5 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Sat, 11 Sep 2021 00:05:31 +0300 Subject: [PATCH 09/24] add threads and MatrixFunctionsTest.cs --- .../MatrixFunctionTest.cs | 18 ++++++++++ .../ParallelMatrixMultiplication.Test.csproj | 20 +++++++++++ .../ParallelMatrixMultiplication.sln | 6 ++++ .../EmptyFileException.cs | 18 ++++++++++ .../FileFunctions.cs | 21 +++++++----- .../FilePathException.cs | 18 ++++++++++ .../MatrixFunctions.cs | 33 +++++++++++++++---- .../MultiplicationException.cs | 18 ++++++++++ .../ParallelMatrixMultiplication/Program.cs | 14 ++------ 9 files changed, 139 insertions(+), 27 deletions(-) create mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs create mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/ParallelMatrixMultiplication.Test.csproj create mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication/EmptyFileException.cs create mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication/FilePathException.cs create mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication/MultiplicationException.cs diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs new file mode 100644 index 0000000..62c2989 --- /dev/null +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs @@ -0,0 +1,18 @@ +using NUnit.Framework; + +namespace ParallelMatrixMultiplication.Test +{ + public class Tests + { + [SetUp] + public void Setup() + { + } + + [Test] + public void Test1() + { + Assert.Pass(); + } + } +} \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/ParallelMatrixMultiplication.Test.csproj b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/ParallelMatrixMultiplication.Test.csproj new file mode 100644 index 0000000..0954619 --- /dev/null +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/ParallelMatrixMultiplication.Test.csproj @@ -0,0 +1,20 @@ + + + + net5.0 + + false + + + + + + + + + + + + + + diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.sln b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.sln index c389fa6..f7de292 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.sln +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.sln @@ -5,6 +5,8 @@ VisualStudioVersion = 16.0.31624.102 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ParallelMatrixMultiplication", "ParallelMatrixMultiplication\ParallelMatrixMultiplication.csproj", "{A8AF63A3-1364-4FA2-8832-D27A339FAD1B}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ParallelMatrixMultiplication.Test", "ParallelMatrixMultiplication.Test\ParallelMatrixMultiplication.Test.csproj", "{A569F36C-B06B-4DE2-AC6A-0A26D8C140A1}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,6 +17,10 @@ Global {A8AF63A3-1364-4FA2-8832-D27A339FAD1B}.Debug|Any CPU.Build.0 = Debug|Any CPU {A8AF63A3-1364-4FA2-8832-D27A339FAD1B}.Release|Any CPU.ActiveCfg = Release|Any CPU {A8AF63A3-1364-4FA2-8832-D27A339FAD1B}.Release|Any CPU.Build.0 = Release|Any CPU + {A569F36C-B06B-4DE2-AC6A-0A26D8C140A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A569F36C-B06B-4DE2-AC6A-0A26D8C140A1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A569F36C-B06B-4DE2-AC6A-0A26D8C140A1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A569F36C-B06B-4DE2-AC6A-0A26D8C140A1}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/EmptyFileException.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/EmptyFileException.cs new file mode 100644 index 0000000..fa9ccfd --- /dev/null +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/EmptyFileException.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ParallelMatrixMultiplication +{ + public class EmptyFileException : Exception + { + public EmptyFileException() + { + } + + public EmptyFileException(string message) + : base(message) + { + } + } +} \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs index fa0cc6f..0717255 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs @@ -8,14 +8,23 @@ namespace ParallelMatrixMultiplication /// public static class FileFunctions { + private static void CheckFilePath(string filePath) + { + if (string.IsNullOrEmpty(filePath)) + { + throw new FilePathException("Error file path!"); + } + } + private static (int, int) CountSizeMatrix(string filePath) { + CheckFilePath((filePath)); using var file = new StreamReader(filePath); string line = file.ReadLine(); int size = 0; - if (line == null) + if (string.IsNullOrEmpty(line)) { - throw new Exception(); + throw new EmptyFileException("File is empty!"); } string[] lineDrop = line.Split(" ", StringSplitOptions.RemoveEmptyEntries); while (line != null) @@ -27,15 +36,11 @@ private static (int, int) CountSizeMatrix(string filePath) } /// - /// Create Marrix from file + /// Create Matrix from file /// public static int[,] CreateMatrix(string filePath) { - if (filePath == "") - { - throw new Exception(); - } - + CheckFilePath((filePath)); (int lenght, int width) size = CountSizeMatrix((filePath)); var matrix = new int[size.lenght, size.width]; using var file = new StreamReader(filePath); diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FilePathException.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FilePathException.cs new file mode 100644 index 0000000..4224c02 --- /dev/null +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FilePathException.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ParallelMatrixMultiplication +{ + public class FilePathException : Exception + { + public FilePathException() + { + } + + public FilePathException(string message) + : base(message) + { + } + } +} \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs index c5064d6..943126f 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs @@ -1,25 +1,44 @@ -namespace ParallelMatrixMultiplication +using System; +using System.Threading; + +namespace ParallelMatrixMultiplication { /// /// Class with matrix multiplication /// - public class MatrixFunctions + public static class MatrixFunctions { - public static int[,] MatrixMuptiplication(int[,] matrix1, int[,] matrix2) + public static int[,] MatrixMultiplication(int[,] matrix1, int[,] matrix2) { + if (matrix1.GetLength(1) != matrix2.GetLength(0)) + { + throw new MultiplicationException("Number of columns in the first matrix are not equal to the rows in the second matrix!"); + } var matrix = new int[matrix1.GetLength(1), matrix1.GetLength(0)]; + var threads = new Thread[matrix1.GetLength(0)]; + var results = new int[threads.Length, threads.Length]; for (int i = 0; i < matrix1.GetLength(0); i++) { - for (int j = 0; j < matrix2.GetLength(1); j++) + var line = i; + threads[i] = new Thread(() => { - for (int k = 0; k < matrix1.GetLength((0)); ++k) + for (int j = 0; j < matrix2.GetLength(1); j++) { - matrix[i, j] += matrix1[i, k] * matrix2[k, j]; + for (int k = 0; k < matrix1.GetLength((0)); ++k) + { + matrix[line, j] += matrix1[line, k] * matrix2[k, j]; + } } - } + }); } + foreach (var thread in threads) + thread.Start(); + foreach (var thread in threads) + thread.Join(); return matrix; } + } + } \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MultiplicationException.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MultiplicationException.cs new file mode 100644 index 0000000..c44c52c --- /dev/null +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MultiplicationException.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ParallelMatrixMultiplication +{ + public class MultiplicationException : Exception + { + public MultiplicationException() + { + } + + public MultiplicationException(string message) + : base(message) + { + } + } +} \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs index ba21408..8cd8d3f 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs @@ -10,19 +10,9 @@ static void Main(string[] args) var threads = new Thread[2]; var chunkSize = args.Length / threads.Length; var results = new int[threads.Length]; - /*int[,] matrixFirst; - int[,] matrixSecond;*/ var matrixFirst = FileFunctions.CreateMatrix((args[0])); - var matrixSecond = FileFunctions.CreateMatrix((args[1])); - /*threads[0] = new Thread(() => - { - matrixFirst = FileFunctions.CreateMatrix((args[0])); - }); - threads[1] = new Thread(() => - { - matrixSecond = FileFunctions.CreateMatrix((args[1])); - }); */ - var matrix = MatrixFunctions.MatrixMuptiplication(matrixFirst, matrixSecond); + var matrixSecond = FileFunctions.CreateMatrix(((args[1]))); + var matrix = MatrixFunctions.MatrixMultiplication(matrixFirst, matrixSecond); FileFunctions.CreateFileWithMatrix(args[2], matrix); } } From 8d2f7c9a437efedaf04932daf4e330f14770ac44 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Sun, 12 Sep 2021 02:13:20 +0300 Subject: [PATCH 10/24] add StopWatch --- .../FileFunctionsTest.cs | 15 +++++++++++ .../MatrixFunctionTest.cs | 4 +-- .../MatrixTest.txt | 3 +++ .../ParallelMatrixMultiplication/Matrix1.txt | 10 +++++--- .../ParallelMatrixMultiplication/Matrix2.txt | 10 +++++--- .../MatrixFunctions.cs | 25 ++++++++++++++++--- .../ParallelMatrixMultiplication/Program.cs | 14 ++++++++++- 7 files changed, 69 insertions(+), 12 deletions(-) create mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs create mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixTest.txt diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs new file mode 100644 index 0000000..f627ea9 --- /dev/null +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs @@ -0,0 +1,15 @@ +using NUnit.Framework; + +namespace ParallelMatrixMultiplication.Test +{ + public class FileFunctionTest + { + [Test] + public void Test1() + { + int[,] result = {{ 2, 1, 2}, {4, 1, 5}, {1, 5, 3}} ; + var resultFromFile = FileFunctions.CreateMatrix("../../../MatrixTest.txt"); + Assert.AreEqual(result, resultFromFile); + } + } +} \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs index 62c2989..a5aa6e1 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs @@ -2,7 +2,7 @@ namespace ParallelMatrixMultiplication.Test { - public class Tests + public class MatrixFunctionTest { [SetUp] public void Setup() @@ -12,7 +12,7 @@ public void Setup() [Test] public void Test1() { - Assert.Pass(); + } } } \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixTest.txt b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixTest.txt new file mode 100644 index 0000000..3436bd2 --- /dev/null +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixTest.txt @@ -0,0 +1,3 @@ +2 1 2 +4 1 5 +1 5 3 \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix1.txt b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix1.txt index 3436bd2..9bffe23 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix1.txt +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix1.txt @@ -1,3 +1,7 @@ -2 1 2 -4 1 5 -1 5 3 \ No newline at end of file +2 1 2 3 4 2 3 +4 1 5 3 5 1 2 +1 5 3 4 1 4 1 +9 7 3 4 1 4 5 +1 9 6 3 1 5 2 +8 6 1 3 8 4 1 +8 6 2 4 2 6 2 \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix2.txt b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix2.txt index 725c3f5..0eed09b 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix2.txt +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix2.txt @@ -1,3 +1,7 @@ -9 3 1 -4 6 9 -1 5 7 \ No newline at end of file +9 3 1 8 2 5 2 +4 6 9 2 5 1 3 +1 5 7 4 1 4 2 +8 5 3 3 9 5 5 +9 9 5 1 3 5 1 +2 5 2 1 5 2 4 +8 5 2 4 1 4 6 \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs index 943126f..4e98eea 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs @@ -8,7 +8,7 @@ namespace ParallelMatrixMultiplication /// public static class MatrixFunctions { - public static int[,] MatrixMultiplication(int[,] matrix1, int[,] matrix2) + public static int[,] MatrixMultiplicationParallel(int[,] matrix1, int[,] matrix2) { if (matrix1.GetLength(1) != matrix2.GetLength(0)) { @@ -38,7 +38,26 @@ public static class MatrixFunctions return matrix; } - + + public static int[,] MatrixMultiplication(int[,] matrix1, int[,] matrix2) + { + if (matrix1.GetLength(1) != matrix2.GetLength(0)) + { + throw new MultiplicationException("Number of columns in the first matrix are not equal to the rows in the second matrix!"); + } + var matrix = new int[matrix1.GetLength(1), matrix1.GetLength(0)]; + for (int i = 0; i < matrix1.GetLength(0); i++) + { + for (int j = 0; j < matrix2.GetLength(1); j++) + { + for (int k = 0; k < matrix1.GetLength((0)); ++k) + { + matrix[i, j] += matrix1[i, k] * matrix2[k, j]; + } + } + } + + return matrix; + } } - } \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs index 8cd8d3f..bcfed14 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.Threading; namespace ParallelMatrixMultiplication @@ -12,7 +13,18 @@ static void Main(string[] args) var results = new int[threads.Length]; var matrixFirst = FileFunctions.CreateMatrix((args[0])); var matrixSecond = FileFunctions.CreateMatrix(((args[1]))); - var matrix = MatrixFunctions.MatrixMultiplication(matrixFirst, matrixSecond); + Stopwatch stopWatch2 = new Stopwatch(); + stopWatch2.Start(); + var matrixAnother = MatrixFunctions.MatrixMultiplication(matrixFirst, matrixSecond); + stopWatch2.Stop(); + TimeSpan time = stopWatch2.Elapsed; + Stopwatch stopWatch1 = new Stopwatch(); + stopWatch1.Start(); + var matrix = MatrixFunctions.MatrixMultiplicationParallel(matrixFirst, matrixSecond); + stopWatch1.Stop(); + TimeSpan timeParallel = stopWatch1.Elapsed; + Console.WriteLine(time); + Console.WriteLine(timeParallel); FileFunctions.CreateFileWithMatrix(args[2], matrix); } } From 033f98afd9b98f18a08136bfd0ca2f99f7b8df70 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Sun, 12 Sep 2021 20:36:11 +0300 Subject: [PATCH 11/24] code tests --- .../EmptyFileTest.txt | 0 .../FileFunctionsTest.cs | 14 +++++++++++++- .../MatrixFunctionTest.cs | 17 ++++++++++++----- .../EmptyFileException.cs | 3 +++ .../FilePathException.cs | 3 +++ .../ParallelMatrixMultiplication/Matrix1.txt | 10 +++------- .../ParallelMatrixMultiplication/Matrix2.txt | 10 +++------- .../MatrixFunctions.cs | 3 ++- .../MultiplicationException.cs | 3 +++ .../ParallelMatrixMultiplication/Program.cs | 13 ++++++------- 10 files changed, 48 insertions(+), 28 deletions(-) create mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/EmptyFileTest.txt diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/EmptyFileTest.txt b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/EmptyFileTest.txt new file mode 100644 index 0000000..e69de29 diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs index f627ea9..6bab6ed 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs @@ -5,11 +5,23 @@ namespace ParallelMatrixMultiplication.Test public class FileFunctionTest { [Test] - public void Test1() + public void TestNormalFilePath() { int[,] result = {{ 2, 1, 2}, {4, 1, 5}, {1, 5, 3}} ; var resultFromFile = FileFunctions.CreateMatrix("../../../MatrixTest.txt"); Assert.AreEqual(result, resultFromFile); } + + [Test] + public void TestAbnormalFilePath() + { + Assert.Throws(() => FileFunctions.CreateMatrix(null)); + } + + [Test] + public void TestEmptyFile() + { + Assert.Throws(() => FileFunctions.CreateMatrix(null)); + } } } \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs index a5aa6e1..d18cfc1 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs @@ -4,15 +4,22 @@ namespace ParallelMatrixMultiplication.Test { public class MatrixFunctionTest { - [SetUp] - public void Setup() + [Test] + public void TestNormalData() { + int[,] matrix1 = {{ 2, 1, 2}, {4, 1, 5}, {1, 5, 3}} ; + int[,] matrix2 = {{ 9, 3, 1}, {4, 6, 9}, {1, 5, 7}} ; + int[,] result = {{24, 22, 25}, {45, 43, 48}, {32, 48, 67}} ; + var matrix = MatrixFunctions.MatrixMultiplicationParallel(matrix1, matrix2); + Assert.AreEqual(result, matrix); } - + [Test] - public void Test1() + public void TestAbnormalData() { - + int[,] matrix1 = {{ 2, 1, 2}, {4, 1, 5}, {1, 5, 3}, {1, 5, 5}} ; + int[,] matrix2 = {{ 9, 3, 1}, {4, 6, 9}, {1, 5, 7}} ; + Assert.Throws(() => MatrixFunctions.MatrixMultiplicationParallel(matrix1, matrix2)); } } } \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/EmptyFileException.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/EmptyFileException.cs index fa9ccfd..426ca29 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/EmptyFileException.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/EmptyFileException.cs @@ -4,6 +4,9 @@ namespace ParallelMatrixMultiplication { +/// +/// then file is empty +/// public class EmptyFileException : Exception { public EmptyFileException() diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FilePathException.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FilePathException.cs index 4224c02..6192adc 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FilePathException.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FilePathException.cs @@ -6,6 +6,9 @@ namespace ParallelMatrixMultiplication { public class FilePathException : Exception { + /// + /// then filePath is abnormal + /// public FilePathException() { } diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix1.txt b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix1.txt index 9bffe23..5b041e1 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix1.txt +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix1.txt @@ -1,7 +1,3 @@ -2 1 2 3 4 2 3 -4 1 5 3 5 1 2 -1 5 3 4 1 4 1 -9 7 3 4 1 4 5 -1 9 6 3 1 5 2 -8 6 1 3 8 4 1 -8 6 2 4 2 6 2 \ No newline at end of file +2 1 2 +4 1 5 +1 5 3 \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix2.txt b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix2.txt index 0eed09b..66c58cb 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix2.txt +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Matrix2.txt @@ -1,7 +1,3 @@ -9 3 1 8 2 5 2 -4 6 9 2 5 1 3 -1 5 7 4 1 4 2 -8 5 3 3 9 5 5 -9 9 5 1 3 5 1 -2 5 2 1 5 2 4 -8 5 2 4 1 4 6 \ No newline at end of file +9 3 1 +4 6 9 +1 5 7 \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs index 4e98eea..c59fc0c 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs @@ -24,13 +24,14 @@ public static class MatrixFunctions { for (int j = 0; j < matrix2.GetLength(1); j++) { - for (int k = 0; k < matrix1.GetLength((0)); ++k) + for (int k = 0; k < matrix1.GetLength((0)); k++) { matrix[line, j] += matrix1[line, k] * matrix2[k, j]; } } }); } + foreach (var thread in threads) thread.Start(); foreach (var thread in threads) diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MultiplicationException.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MultiplicationException.cs index c44c52c..ac07e82 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MultiplicationException.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MultiplicationException.cs @@ -4,6 +4,9 @@ namespace ParallelMatrixMultiplication { + /// + /// then we couldn't multiplication matrices + /// public class MultiplicationException : Exception { public MultiplicationException() diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs index bcfed14..2f38780 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs @@ -8,23 +8,22 @@ class Program { static void Main(string[] args) { - var threads = new Thread[2]; - var chunkSize = args.Length / threads.Length; - var results = new int[threads.Length]; var matrixFirst = FileFunctions.CreateMatrix((args[0])); var matrixSecond = FileFunctions.CreateMatrix(((args[1]))); + var matrixTest = new int[1000, 1000]; Stopwatch stopWatch2 = new Stopwatch(); stopWatch2.Start(); - var matrixAnother = MatrixFunctions.MatrixMultiplication(matrixFirst, matrixSecond); + var matrixAnother = MatrixFunctions.MatrixMultiplication(matrixTest, matrixTest); stopWatch2.Stop(); TimeSpan time = stopWatch2.Elapsed; Stopwatch stopWatch1 = new Stopwatch(); stopWatch1.Start(); - var matrix = MatrixFunctions.MatrixMultiplicationParallel(matrixFirst, matrixSecond); + var matrixTest1 = MatrixFunctions.MatrixMultiplicationParallel(matrixTest, matrixTest); stopWatch1.Stop(); TimeSpan timeParallel = stopWatch1.Elapsed; - Console.WriteLine(time); - Console.WriteLine(timeParallel); + Console.WriteLine($"Время обычной работы: {time}"); + Console.WriteLine($"Время паралельной работы: {timeParallel}"); + var matrix = MatrixFunctions.MatrixMultiplicationParallel(matrixFirst, matrixSecond); FileFunctions.CreateFileWithMatrix(args[2], matrix); } } From dedd9bf30bd6d751f13b4aa0d9b81e488a479888 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Mon, 13 Sep 2021 17:31:50 +0300 Subject: [PATCH 12/24] fix tests --- .../FileFunctionsTest.cs | 2 +- .../MatrixFunctionTest.cs | 22 ++++++++++++++----- .../MatrixFunctions.cs | 4 ++-- .../ParallelMatrixMultiplication/Program.cs | 4 ++-- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs index 6bab6ed..09694cc 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs @@ -21,7 +21,7 @@ public void TestAbnormalFilePath() [Test] public void TestEmptyFile() { - Assert.Throws(() => FileFunctions.CreateMatrix(null)); + Assert.Throws(() => FileFunctions.CreateMatrix("../../../EmptyFileTest.txt")); } } } \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs index d18cfc1..bdd1e13 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs @@ -5,20 +5,30 @@ namespace ParallelMatrixMultiplication.Test public class MatrixFunctionTest { [Test] - public void TestNormalData() + public void TestNormalDataParallel() { - int[,] matrix1 = {{ 2, 1, 2}, {4, 1, 5}, {1, 5, 3}} ; - int[,] matrix2 = {{ 9, 3, 1}, {4, 6, 9}, {1, 5, 7}} ; - int[,] result = {{24, 22, 25}, {45, 43, 48}, {32, 48, 67}} ; + var matrix1 = new int[1000,1000]; + var matrix2 = new int[1000,1000]; + var result = new int[1000,1000]; var matrix = MatrixFunctions.MatrixMultiplicationParallel(matrix1, matrix2); Assert.AreEqual(result, matrix); } + [Test] + public void TestNormalDataNotParallel() + { + var matrix1 = new int[1000,1000]; + var matrix2 = new int[1000,1000]; + var result = new int[1000,1000]; + var matrix = MatrixFunctions.MatrixMultiplication(matrix1, matrix2); + Assert.AreEqual(result, matrix); + } + [Test] public void TestAbnormalData() { - int[,] matrix1 = {{ 2, 1, 2}, {4, 1, 5}, {1, 5, 3}, {1, 5, 5}} ; - int[,] matrix2 = {{ 9, 3, 1}, {4, 6, 9}, {1, 5, 7}} ; + var matrix1 = new int[3,4]; + var matrix2 = new int[3,3]; Assert.Throws(() => MatrixFunctions.MatrixMultiplicationParallel(matrix1, matrix2)); } } diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs index c59fc0c..bfad0c8 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs @@ -14,7 +14,7 @@ public static class MatrixFunctions { throw new MultiplicationException("Number of columns in the first matrix are not equal to the rows in the second matrix!"); } - var matrix = new int[matrix1.GetLength(1), matrix1.GetLength(0)]; + var matrix = new int[matrix1.GetLength(0), matrix1.GetLength(1)]; var threads = new Thread[matrix1.GetLength(0)]; var results = new int[threads.Length, threads.Length]; for (int i = 0; i < matrix1.GetLength(0); i++) @@ -51,7 +51,7 @@ public static class MatrixFunctions { for (int j = 0; j < matrix2.GetLength(1); j++) { - for (int k = 0; k < matrix1.GetLength((0)); ++k) + for (int k = 0; k < matrix1.GetLength((0)); k++) { matrix[i, j] += matrix1[i, k] * matrix2[k, j]; } diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs index 2f38780..e1e5313 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs @@ -21,8 +21,8 @@ static void Main(string[] args) var matrixTest1 = MatrixFunctions.MatrixMultiplicationParallel(matrixTest, matrixTest); stopWatch1.Stop(); TimeSpan timeParallel = stopWatch1.Elapsed; - Console.WriteLine($"Время обычной работы: {time}"); - Console.WriteLine($"Время паралельной работы: {timeParallel}"); + Console.WriteLine($"Время обычного умножения матриц 1000*1000: {time}"); + Console.WriteLine($"Время параллельного умножения матриц 1000*1000: {timeParallel}"); var matrix = MatrixFunctions.MatrixMultiplicationParallel(matrixFirst, matrixSecond); FileFunctions.CreateFileWithMatrix(args[2], matrix); } From 04d64ad80478fa5e0d02df090b264159dbce05d5 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Mon, 13 Sep 2021 18:14:02 +0300 Subject: [PATCH 13/24] .gitignore --- .gitignore | 428 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 382 insertions(+), 46 deletions(-) diff --git a/.gitignore b/.gitignore index c6127b3..72de34f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,52 +1,388 @@ -# Prerequisites -*.d +## 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 -# Object files -*.o -*.ko -*.obj -*.elf +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates -# Linker output -*.ilk -*.map -*.exp +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs -# Precompiled Headers -*.gch -*.pch +# 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/ -# Libraries -*.lib -*.a -*.la -*.lo - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe -*.out -*.app -*.i*86 -*.x86_64 -*.hex - -# Debug files -*.dSYM/ -*.su -*.idb +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# 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 + +# Nuget personal access tokens and Credentials +nuget.config + +# 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 + +# 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 -# Kernel Module Compile Results -*.mod* -*.cmd -.tmp_versions/ -modules.order -Module.symvers -Mkfile.old -dkms.conf +# JetBrains Rider +.idea/ +*.sln.iml \ No newline at end of file From 37d8504aecb0313ccea3b32e9b0082ffb3dd21f0 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Fri, 17 Sep 2021 13:26:04 +0300 Subject: [PATCH 14/24] fix --- .../MatrixFunctionTest.cs | 25 +++++++++++++++++ .../ParallelMatrixMultiplication/Program.cs | 28 +++++++++++-------- 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs index bdd1e13..08422c3 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using NUnit.Framework; namespace ParallelMatrixMultiplication.Test @@ -31,5 +32,29 @@ public void TestAbnormalData() var matrix2 = new int[3,3]; Assert.Throws(() => MatrixFunctions.MatrixMultiplicationParallel(matrix1, matrix2)); } + + [Test] + public void TestAreParallelFaster() + { + var matrixTest = new int[1000,1000]; + Stopwatch stopWatch1 = new Stopwatch(); + stopWatch1.Start(); + for (int i = 0; i < 10; i++) + { + var testTime =MatrixFunctions.MatrixMultiplicationParallel(matrixTest, matrixTest); + } + stopWatch1.Stop(); + var timeParallel = stopWatch1.ElapsedMilliseconds; + Stopwatch stopWatch2 = new Stopwatch(); + stopWatch2.Start(); + for (int i = 0; i < 10; i++) + { + var matrixAnother = MatrixFunctions.MatrixMultiplication(matrixTest, matrixTest); + } + stopWatch2.Stop(); + var time = stopWatch2.ElapsedMilliseconds; + Assert.IsTrue(timeParallel < time); + } + } } \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs index e1e5313..b0f68b8 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs @@ -8,21 +8,27 @@ class Program { static void Main(string[] args) { - var matrixFirst = FileFunctions.CreateMatrix((args[0])); - var matrixSecond = FileFunctions.CreateMatrix(((args[1]))); var matrixTest = new int[1000, 1000]; - Stopwatch stopWatch2 = new Stopwatch(); - stopWatch2.Start(); - var matrixAnother = MatrixFunctions.MatrixMultiplication(matrixTest, matrixTest); - stopWatch2.Stop(); - TimeSpan time = stopWatch2.Elapsed; Stopwatch stopWatch1 = new Stopwatch(); stopWatch1.Start(); - var matrixTest1 = MatrixFunctions.MatrixMultiplicationParallel(matrixTest, matrixTest); + for (int i = 0; i < 10; i++) + { + var testTime =MatrixFunctions.MatrixMultiplicationParallel(matrixTest, matrixTest); + } stopWatch1.Stop(); - TimeSpan timeParallel = stopWatch1.Elapsed; - Console.WriteLine($"Время обычного умножения матриц 1000*1000: {time}"); - Console.WriteLine($"Время параллельного умножения матриц 1000*1000: {timeParallel}"); + var timeParallel = stopWatch1.ElapsedMilliseconds; + Stopwatch stopWatch2 = new Stopwatch(); + stopWatch2.Start(); + for (int i = 0; i < 10; i++) + { + var matrixAnother = MatrixFunctions.MatrixMultiplication(matrixTest, matrixTest); + } + stopWatch2.Stop(); + var time = stopWatch2.ElapsedMilliseconds; + Console.WriteLine($"Среднее время обычного умножения матриц 1000*1000: {time / 10} ms"); + Console.WriteLine($"Среднее время параллельного умножения матриц 1000*1000: {timeParallel / 10} ms"); + var matrixFirst = FileFunctions.CreateMatrix((args[0])); + var matrixSecond = FileFunctions.CreateMatrix(((args[1]))); var matrix = MatrixFunctions.MatrixMultiplicationParallel(matrixFirst, matrixSecond); FileFunctions.CreateFileWithMatrix(args[2], matrix); } From 05215923915b817f2f261501f4e8b92f08fb5997 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Fri, 17 Sep 2021 13:40:31 +0300 Subject: [PATCH 15/24] rename test --- .../ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs index 08422c3..3fcbbd1 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs @@ -34,7 +34,7 @@ public void TestAbnormalData() } [Test] - public void TestAreParallelFaster() + public void TestIsParallelFaster() { var matrixTest = new int[1000,1000]; Stopwatch stopWatch1 = new Stopwatch(); From 70ac9225f4c447aa6b17f4ab18804c2d70247d2c Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Fri, 17 Sep 2021 14:10:55 +0300 Subject: [PATCH 16/24] fix --- .../ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs index 3fcbbd1..603eb19 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs @@ -39,7 +39,7 @@ public void TestIsParallelFaster() var matrixTest = new int[1000,1000]; Stopwatch stopWatch1 = new Stopwatch(); stopWatch1.Start(); - for (int i = 0; i < 10; i++) + for (int i = 0; i < 5; i++) { var testTime =MatrixFunctions.MatrixMultiplicationParallel(matrixTest, matrixTest); } @@ -47,7 +47,7 @@ public void TestIsParallelFaster() var timeParallel = stopWatch1.ElapsedMilliseconds; Stopwatch stopWatch2 = new Stopwatch(); stopWatch2.Start(); - for (int i = 0; i < 10; i++) + for (int i = 0; i < 5; i++) { var matrixAnother = MatrixFunctions.MatrixMultiplication(matrixTest, matrixTest); } From 715d2c1bf74f8db6123725ed6336a529ffc9b54b Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Fri, 17 Sep 2021 14:30:05 +0300 Subject: [PATCH 17/24] fix styleguide --- .../MatrixFunctionTest.cs | 16 ++++++++-------- .../ParallelMatrixMultiplication/Program.cs | 15 +++++++-------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs index 603eb19..6338c03 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs @@ -37,22 +37,22 @@ public void TestAbnormalData() public void TestIsParallelFaster() { var matrixTest = new int[1000,1000]; - Stopwatch stopWatch1 = new Stopwatch(); - stopWatch1.Start(); + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); for (int i = 0; i < 5; i++) { var testTime =MatrixFunctions.MatrixMultiplicationParallel(matrixTest, matrixTest); } - stopWatch1.Stop(); - var timeParallel = stopWatch1.ElapsedMilliseconds; - Stopwatch stopWatch2 = new Stopwatch(); - stopWatch2.Start(); + stopWatch.Stop(); + var timeParallel = stopWatch.ElapsedMilliseconds / 5; + Stopwatch stopWatchNormal = new Stopwatch(); + stopWatchNormal.Restart(); for (int i = 0; i < 5; i++) { var matrixAnother = MatrixFunctions.MatrixMultiplication(matrixTest, matrixTest); } - stopWatch2.Stop(); - var time = stopWatch2.ElapsedMilliseconds; + stopWatchNormal.Stop(); + var time = stopWatchNormal.ElapsedMilliseconds / 5; Assert.IsTrue(timeParallel < time); } diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs index b0f68b8..95cdc6a 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs @@ -9,22 +9,21 @@ class Program static void Main(string[] args) { var matrixTest = new int[1000, 1000]; - Stopwatch stopWatch1 = new Stopwatch(); - stopWatch1.Start(); + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); for (int i = 0; i < 10; i++) { var testTime =MatrixFunctions.MatrixMultiplicationParallel(matrixTest, matrixTest); } - stopWatch1.Stop(); - var timeParallel = stopWatch1.ElapsedMilliseconds; - Stopwatch stopWatch2 = new Stopwatch(); - stopWatch2.Start(); + stopWatch.Stop(); + var timeParallel = stopWatch.ElapsedMilliseconds; + stopWatch.Restart(); for (int i = 0; i < 10; i++) { var matrixAnother = MatrixFunctions.MatrixMultiplication(matrixTest, matrixTest); } - stopWatch2.Stop(); - var time = stopWatch2.ElapsedMilliseconds; + stopWatch.Stop(); + var time = stopWatch.ElapsedMilliseconds; Console.WriteLine($"Среднее время обычного умножения матриц 1000*1000: {time / 10} ms"); Console.WriteLine($"Среднее время параллельного умножения матриц 1000*1000: {timeParallel / 10} ms"); var matrixFirst = FileFunctions.CreateMatrix((args[0])); From 54346a5b2af4f80683de9934a45f32ed7cb3f586 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Fri, 17 Sep 2021 14:35:48 +0300 Subject: [PATCH 18/24] fix --- .../MatrixFunctionTest.cs | 24 ------------------- 1 file changed, 24 deletions(-) diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs index 6338c03..f959bc8 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs @@ -32,29 +32,5 @@ public void TestAbnormalData() var matrix2 = new int[3,3]; Assert.Throws(() => MatrixFunctions.MatrixMultiplicationParallel(matrix1, matrix2)); } - - [Test] - public void TestIsParallelFaster() - { - var matrixTest = new int[1000,1000]; - Stopwatch stopWatch = new Stopwatch(); - stopWatch.Start(); - for (int i = 0; i < 5; i++) - { - var testTime =MatrixFunctions.MatrixMultiplicationParallel(matrixTest, matrixTest); - } - stopWatch.Stop(); - var timeParallel = stopWatch.ElapsedMilliseconds / 5; - Stopwatch stopWatchNormal = new Stopwatch(); - stopWatchNormal.Restart(); - for (int i = 0; i < 5; i++) - { - var matrixAnother = MatrixFunctions.MatrixMultiplication(matrixTest, matrixTest); - } - stopWatchNormal.Stop(); - var time = stopWatchNormal.ElapsedMilliseconds / 5; - Assert.IsTrue(timeParallel < time); - } - } } \ No newline at end of file From d944a260011b979b70fab6376506e67e377d23c9 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Thu, 23 Sep 2021 23:49:13 +0300 Subject: [PATCH 19/24] fix problems --- .../FileFunctionsTest.cs | 2 +- .../MatrixFunctionTest.cs | 38 ++++++---- .../{MatrixTest.txt => MatrixTest1.txt} | 0 .../EmptyFileException.cs | 6 +- .../FileFunctions.cs | 13 ++-- .../MatrixFunctions.cs | 29 +++++--- .../MultiplicationException.cs | 2 +- .../ParallelMatrixMultiplication/Program.cs | 54 +++++++++----- .../Statistics.cs | 73 +++++++++++++++++++ 9 files changed, 159 insertions(+), 58 deletions(-) rename ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/{MatrixTest.txt => MatrixTest1.txt} (100%) create mode 100644 ParallelMatrixMultiplication/ParallelMatrixMultiplication/Statistics.cs diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs index 09694cc..8a86e2b 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs @@ -8,7 +8,7 @@ public class FileFunctionTest public void TestNormalFilePath() { int[,] result = {{ 2, 1, 2}, {4, 1, 5}, {1, 5, 3}} ; - var resultFromFile = FileFunctions.CreateMatrix("../../../MatrixTest.txt"); + var resultFromFile = FileFunctions.CreateMatrix("../../../MatrixTest1.txt"); Assert.AreEqual(result, resultFromFile); } diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs index f959bc8..347dce7 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs @@ -1,3 +1,5 @@ +using System; +using System.Collections.Generic; using System.Diagnostics; using NUnit.Framework; @@ -5,32 +7,38 @@ namespace ParallelMatrixMultiplication.Test { public class MatrixFunctionTest { - [Test] - public void TestNormalDataParallel() + [TestCaseSource(nameof(FunctionsForTest))] + public void TestNormalSquareData(Func multiplication) { - var matrix1 = new int[1000,1000]; - var matrix2 = new int[1000,1000]; - var result = new int[1000,1000]; - var matrix = MatrixFunctions.MatrixMultiplicationParallel(matrix1, matrix2); + int[,] result = {{ 15, 27, 8}, {24, 57, 13}, {41, 26, 24}} ; + int[,] matrix1 = {{ 2, 1, 2}, {4, 1, 5}, {1, 5, 3}}; + int[,] matrix2 = {{ 3, 9, 1}, {7, 1, 4}, {1, 4, 1}}; + var matrix = multiplication(matrix1, matrix2); Assert.AreEqual(result, matrix); } - [Test] - public void TestNormalDataNotParallel() + [TestCaseSource(nameof(FunctionsForTest))] + public void TestNormalNotSquareData(Func multiplication) { - var matrix1 = new int[1000,1000]; - var matrix2 = new int[1000,1000]; - var result = new int[1000,1000]; - var matrix = MatrixFunctions.MatrixMultiplication(matrix1, matrix2); + int[,] result = {{ 36, 71, 29}, {30, 22, 23}, {49, 87, 28}} ; + int[,] matrix1 = {{ 6, 1, 3, 4}, {1, 3, 2, 2}, {7, 3, 5, 1}}; + int[,] matrix2 = {{ 3, 9, 1}, {7, 1, 4}, {1, 4, 1}, {2, 1, 4}}; + var matrix = multiplication(matrix1, matrix2); Assert.AreEqual(result, matrix); } - [Test] - public void TestAbnormalData() + [TestCaseSource(nameof(FunctionsForTest))] + public void TestAbnormalData(Func multiplication) { var matrix1 = new int[3,4]; var matrix2 = new int[3,3]; - Assert.Throws(() => MatrixFunctions.MatrixMultiplicationParallel(matrix1, matrix2)); + Assert.Throws(() => multiplication(matrix1, matrix2)); + } + + private static IEnumerable> FunctionsForTest() + { + yield return MatrixFunctions.MatrixMultiplicationParallel; + yield return MatrixFunctions.MatrixMultiplication; } } } \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixTest.txt b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixTest1.txt similarity index 100% rename from ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixTest.txt rename to ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixTest1.txt diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/EmptyFileException.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/EmptyFileException.cs index 426ca29..752432e 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/EmptyFileException.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/EmptyFileException.cs @@ -4,9 +4,9 @@ namespace ParallelMatrixMultiplication { -/// -/// then file is empty -/// + /// + /// then file is empty + /// public class EmptyFileException : Exception { public EmptyFileException() diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs index 0717255..e2be8f5 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs @@ -41,15 +41,15 @@ private static (int, int) CountSizeMatrix(string filePath) public static int[,] CreateMatrix(string filePath) { CheckFilePath((filePath)); - (int lenght, int width) size = CountSizeMatrix((filePath)); - var matrix = new int[size.lenght, size.width]; + (int length, int width) size = CountSizeMatrix((filePath)); + var matrix = new int[size.length, size.width]; using var file = new StreamReader(filePath); string line = file.ReadLine(); var index = 0; while (line != null) { string[] lineDrop = line.Split(" ", StringSplitOptions.RemoveEmptyEntries); - for (int i = 0; i < size.lenght; ++i) + for (int i = 0; i < size.length; ++i) { matrix[index, i] = Int32.Parse(lineDrop[i]); } @@ -64,17 +64,14 @@ private static (int, int) CountSizeMatrix(string filePath) /// public static void CreateFileWithMatrix(string filePath, int[,] matrix) { - if (filePath == "") - { - throw new Exception(); - } + CheckFilePath((filePath)); var fileOut = new FileInfo(filePath); if (fileOut.Exists) { fileOut.Delete(); } using var newFile = new FileStream(filePath, FileMode.Create); - var file = new StreamWriter(newFile); + using var file = new StreamWriter(newFile); for (int i = 0; i < matrix.GetLength(0); i++) { string line = ""; diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs index bfad0c8..121de19 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs @@ -14,29 +14,34 @@ public static class MatrixFunctions { throw new MultiplicationException("Number of columns in the first matrix are not equal to the rows in the second matrix!"); } - var matrix = new int[matrix1.GetLength(0), matrix1.GetLength(1)]; - var threads = new Thread[matrix1.GetLength(0)]; - var results = new int[threads.Length, threads.Length]; - for (int i = 0; i < matrix1.GetLength(0); i++) + var matrix = new int[matrix1.GetLength(0), matrix2.GetLength(1)]; + var threads = new Thread[Environment.ProcessorCount]; + var chunkSize = matrix.GetLength(0) / threads.Length + 1; + for (int i = 0; i < threads.Length; ++i) { - var line = i; + var localI = i; threads[i] = new Thread(() => { - for (int j = 0; j < matrix2.GetLength(1); j++) + for (var l = localI * chunkSize; l < (localI + 1) * chunkSize && l < matrix1.GetLength(0); ++l) { - for (int k = 0; k < matrix1.GetLength((0)); k++) + for (int j = 0; j < matrix2.GetLength(1) ; j++) { - matrix[line, j] += matrix1[line, k] * matrix2[k, j]; + for (int k = 0; k < matrix1.GetLength((1)); k++) + { + matrix[l, j] += matrix1[l, k] * matrix2[k, j]; + } } } }); } - foreach (var thread in threads) + { thread.Start(); + } foreach (var thread in threads) + { thread.Join(); - + } return matrix; } @@ -46,12 +51,12 @@ public static class MatrixFunctions { throw new MultiplicationException("Number of columns in the first matrix are not equal to the rows in the second matrix!"); } - var matrix = new int[matrix1.GetLength(1), matrix1.GetLength(0)]; + var matrix = new int[matrix1.GetLength(0), matrix2.GetLength(1)]; for (int i = 0; i < matrix1.GetLength(0); i++) { for (int j = 0; j < matrix2.GetLength(1); j++) { - for (int k = 0; k < matrix1.GetLength((0)); k++) + for (int k = 0; k < matrix1.GetLength((1)); k++) { matrix[i, j] += matrix1[i, k] * matrix2[k, j]; } diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MultiplicationException.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MultiplicationException.cs index ac07e82..6ab9fb9 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MultiplicationException.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MultiplicationException.cs @@ -5,7 +5,7 @@ namespace ParallelMatrixMultiplication { /// - /// then we couldn't multiplication matrices + /// then matrices cannott be multiplied /// public class MultiplicationException : Exception { diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs index 95cdc6a..5556ca9 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs @@ -8,24 +8,42 @@ class Program { static void Main(string[] args) { - var matrixTest = new int[1000, 1000]; - Stopwatch stopWatch = new Stopwatch(); - stopWatch.Start(); - for (int i = 0; i < 10; i++) - { - var testTime =MatrixFunctions.MatrixMultiplicationParallel(matrixTest, matrixTest); - } - stopWatch.Stop(); - var timeParallel = stopWatch.ElapsedMilliseconds; - stopWatch.Restart(); - for (int i = 0; i < 10; i++) - { - var matrixAnother = MatrixFunctions.MatrixMultiplication(matrixTest, matrixTest); - } - stopWatch.Stop(); - var time = stopWatch.ElapsedMilliseconds; - Console.WriteLine($"Среднее время обычного умножения матриц 1000*1000: {time / 10} ms"); - Console.WriteLine($"Среднее время параллельного умножения матриц 1000*1000: {timeParallel / 10} ms"); + Statistics.CollectStaticsFromMatrix(128, 128, 100); + /* + Результаты на матрицах размеров 128*128. + Количество повторов: 100. + Паралельное умножение: + Матожидание = 13,75 + Среднеквадратичное отклонение = 3,897114317029974 + Обычное умножение: + Матожидание = 37,86 + Среднеквадратичное отклонение = 9,046568410176315 + */ + + Statistics.CollectStaticsFromMatrix(256, 256, 100); + /* + Результаты на матрицах размеров 256*256. + Количество повторов: 100. + Паралельное умножение: + Матожидание = 72,4 + Среднеквадратичное отклонение = 10,583950113261116 + Обычное умножение: + Матожидание = 169,91 + Среднеквадратичное отклонение = 20,951417613135394 + */ + + Statistics.CollectStaticsFromMatrix(512, 512, 100); + /* + Результаты на матрицах размеров 512*512. + Количество повторов: 100. + Паралельное умножение: + Матожидание = 602,98 + Среднеквадратичное отклонение = 39,318947086614614 + Обычное умножение: + Матожидание = 2049,14 + Среднеквадратичное отклонение = 361,013213608588 + */ + var matrixFirst = FileFunctions.CreateMatrix((args[0])); var matrixSecond = FileFunctions.CreateMatrix(((args[1]))); var matrix = MatrixFunctions.MatrixMultiplicationParallel(matrixFirst, matrixSecond); diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Statistics.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Statistics.cs new file mode 100644 index 0000000..b83bd97 --- /dev/null +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Statistics.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; + +namespace ParallelMatrixMultiplication +{ + public class Statistics + { + public static void CollectStaticsFromMatrix(int row, int column, int count) + { + (var timeParallel, var timeNotParallel) = GetTimeMatrixMultiplication(count, row, column); + var result = GetStatistics(timeParallel, timeNotParallel); + Console.WriteLine($"Результаты на матрицах размеров {row}*{column}."); + Console.WriteLine($"Количество повторов: {count}."); + Console.WriteLine("Паралельное умножение:"); + Console.WriteLine($"Матожидание = {result[0].average}\nСреднеквадратичное отклонение = {result[0].standardDeviation}"); + Console.WriteLine("Обычное умножение:"); + Console.WriteLine($"Матожидание = {result[1].average}\nСреднеквадратичное отклонение = {result[1].standardDeviation}"); + } + + private static (double average, double standardDeviation)[] GetStatistics(List timeParallel, List timeNotParallel) + { + var averageParallel = timeParallel.Average(); + var averageNotParallel = timeNotParallel.Average(); + var dispersionParallel = timeParallel.Select(x => Math.Pow(x - averageParallel, 2)).Average(); + var dispersionNotParallel = timeNotParallel.Select(x => Math.Pow(x - averageNotParallel, 2)).Average(); + var standardDeviationParallel = Math.Sqrt(dispersionParallel); + var standardDeviationNotParallel = Math.Sqrt(dispersionNotParallel); + var results = new (double, double)[2]; + results[0] = (averageParallel, standardDeviationParallel); + results[1] = (averageNotParallel, standardDeviationNotParallel); + return results; + } + + private static (List, List) GetTimeMatrixMultiplication(int count, int countRows, int countColumns) + { + var timeParallel = new List(); + var timeNotParallel = new List(); + var timer = new Stopwatch(); + for (int i = 0; i < count; i++) + { + var matrix1 = GenerateMatrix(countRows, countColumns); + var matrix2 = GenerateMatrix(countRows, countColumns); + timer.Restart(); + MatrixFunctions.MatrixMultiplicationParallel(matrix1, matrix2); + timer.Stop(); + timeParallel.Add(timer.ElapsedMilliseconds); + timer.Restart(); + MatrixFunctions.MatrixMultiplication(matrix1, matrix2); + timer.Stop(); + timeNotParallel.Add(timer.ElapsedMilliseconds); + } + + return (timeParallel, timeNotParallel); + } + + private static int[,] GenerateMatrix(int countRow, int countColumns) + { + var matrix = new int[countRow, countColumns]; + var random = new Random(); + for (int i = 0; i < countRow; i++) + { + for (int j = 0; j < countColumns; j++) + { + matrix[i, j] = random.Next(0, 100); + } + } + + return matrix; + } + } +} \ No newline at end of file From 5204153bd7a9201c2f521750c564c124ee857ebe Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Fri, 1 Oct 2021 00:39:16 +0300 Subject: [PATCH 20/24] fix code --- .../FileFunctionsTest.cs | 7 ++- .../MatrixFunctionTest.cs | 43 ++++++++++++++++--- .../FileFunctions.cs | 6 +-- .../MatrixFunctions.cs | 6 +++ .../ParallelMatrixMultiplication/Program.cs | 30 ++++++------- .../Statistics.cs | 8 +++- 6 files changed, 74 insertions(+), 26 deletions(-) diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs index 8a86e2b..7da4a94 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs @@ -7,7 +7,12 @@ public class FileFunctionTest [Test] public void TestNormalFilePath() { - int[,] result = {{ 2, 1, 2}, {4, 1, 5}, {1, 5, 3}} ; + int[,] result = + { + {2, 1, 2}, + {4, 1, 5}, + {1, 5, 3} + } ; var resultFromFile = FileFunctions.CreateMatrix("../../../MatrixTest1.txt"); Assert.AreEqual(result, resultFromFile); } diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs index 347dce7..ef7f50e 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs @@ -10,9 +10,24 @@ public class MatrixFunctionTest [TestCaseSource(nameof(FunctionsForTest))] public void TestNormalSquareData(Func multiplication) { - int[,] result = {{ 15, 27, 8}, {24, 57, 13}, {41, 26, 24}} ; - int[,] matrix1 = {{ 2, 1, 2}, {4, 1, 5}, {1, 5, 3}}; - int[,] matrix2 = {{ 3, 9, 1}, {7, 1, 4}, {1, 4, 1}}; + int[,] result = + { + {15, 27, 8}, + {24, 57, 13}, + {41, 26, 24} + }; + int[,] matrix1 = + { + {2, 1, 2}, + {4, 1, 5}, + {1, 5, 3} + }; + int[,] matrix2 = + { + {3, 9, 1}, + {7, 1, 4}, + {1, 4, 1} + }; var matrix = multiplication(matrix1, matrix2); Assert.AreEqual(result, matrix); } @@ -20,9 +35,25 @@ public void TestNormalSquareData(Func multiplication) [TestCaseSource(nameof(FunctionsForTest))] public void TestNormalNotSquareData(Func multiplication) { - int[,] result = {{ 36, 71, 29}, {30, 22, 23}, {49, 87, 28}} ; - int[,] matrix1 = {{ 6, 1, 3, 4}, {1, 3, 2, 2}, {7, 3, 5, 1}}; - int[,] matrix2 = {{ 3, 9, 1}, {7, 1, 4}, {1, 4, 1}, {2, 1, 4}}; + int[,] result = + { + {36, 71, 29}, + {30, 22, 23}, + {49, 87, 28} + } ; + int[,] matrix1 = + { + {6, 1, 3, 4}, + {1, 3, 2, 2}, + {7, 3, 5, 1} + }; + int[,] matrix2 = + { + {3, 9, 1}, + {7, 1, 4}, + {1, 4, 1}, + {2, 1, 4} + }; var matrix = multiplication(matrix1, matrix2); Assert.AreEqual(result, matrix); } diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs index e2be8f5..16f23d7 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs @@ -4,7 +4,7 @@ namespace ParallelMatrixMultiplication { /// - /// File's function + /// Functions for working with files /// public static class FileFunctions { @@ -16,7 +16,7 @@ private static void CheckFilePath(string filePath) } } - private static (int, int) CountSizeMatrix(string filePath) + private static (int, int) CountMatrixSize(string filePath) { CheckFilePath((filePath)); using var file = new StreamReader(filePath); @@ -41,7 +41,7 @@ private static (int, int) CountSizeMatrix(string filePath) public static int[,] CreateMatrix(string filePath) { CheckFilePath((filePath)); - (int length, int width) size = CountSizeMatrix((filePath)); + (int length, int width) size = CountMatrixSize((filePath)); var matrix = new int[size.length, size.width]; using var file = new StreamReader(filePath); string line = file.ReadLine(); diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs index 121de19..9ec314b 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs @@ -8,6 +8,9 @@ namespace ParallelMatrixMultiplication /// public static class MatrixFunctions { + /// + /// Parallel matrix multiplication + /// public static int[,] MatrixMultiplicationParallel(int[,] matrix1, int[,] matrix2) { if (matrix1.GetLength(1) != matrix2.GetLength(0)) @@ -45,6 +48,9 @@ public static class MatrixFunctions return matrix; } + /// + /// Not parallel matrix multiplication + /// public static int[,] MatrixMultiplication(int[,] matrix1, int[,] matrix2) { if (matrix1.GetLength(1) != matrix2.GetLength(0)) diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs index 5556ca9..f5bef7e 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs @@ -8,40 +8,40 @@ class Program { static void Main(string[] args) { - Statistics.CollectStaticsFromMatrix(128, 128, 100); + Statistics.CollectStatisticsFromMatrix(128, 128, 100); /* Результаты на матрицах размеров 128*128. Количество повторов: 100. Паралельное умножение: - Матожидание = 13,75 - Среднеквадратичное отклонение = 3,897114317029974 + Матожидание = 13,75 ms + Среднеквадратичное отклонение = 3,89 ms Обычное умножение: - Матожидание = 37,86 - Среднеквадратичное отклонение = 9,046568410176315 + Матожидание = 37,86 ms + Среднеквадратичное отклонение = 9,04 ms */ - Statistics.CollectStaticsFromMatrix(256, 256, 100); + Statistics.CollectStatisticsFromMatrix(256, 256, 100); /* Результаты на матрицах размеров 256*256. Количество повторов: 100. Паралельное умножение: - Матожидание = 72,4 - Среднеквадратичное отклонение = 10,583950113261116 + Матожидание = 72,4 ms + Среднеквадратичное отклонение = 10,58 ms Обычное умножение: - Матожидание = 169,91 - Среднеквадратичное отклонение = 20,951417613135394 + Матожидание = 169,91 ms + Среднеквадратичное отклонение = 20,95 ms */ - Statistics.CollectStaticsFromMatrix(512, 512, 100); + Statistics.CollectStatisticsFromMatrix(512, 512, 100); /* Результаты на матрицах размеров 512*512. Количество повторов: 100. Паралельное умножение: - Матожидание = 602,98 - Среднеквадратичное отклонение = 39,318947086614614 + Матожидание = 602,98 ms + Среднеквадратичное отклонение = 39,31 ms Обычное умножение: - Матожидание = 2049,14 - Среднеквадратичное отклонение = 361,013213608588 + Матожидание = 2049,14 ms + Среднеквадратичное отклонение = 361,01 ms */ var matrixFirst = FileFunctions.CreateMatrix((args[0])); diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Statistics.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Statistics.cs index b83bd97..a2454de 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Statistics.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Statistics.cs @@ -5,9 +5,15 @@ namespace ParallelMatrixMultiplication { + /// + /// class for collecting statistics + /// public class Statistics { - public static void CollectStaticsFromMatrix(int row, int column, int count) + /// + /// Collect statistics from matrix + /// + public static void CollectStatisticsFromMatrix(int row, int column, int count) { (var timeParallel, var timeNotParallel) = GetTimeMatrixMultiplication(count, row, column); var result = GetStatistics(timeParallel, timeNotParallel); From adbe04d1abfbd224e7dcd4bf36a3cd3e84841e7c Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Sun, 3 Oct 2021 21:23:41 +0300 Subject: [PATCH 21/24] fix code --- .../ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs index ef7f50e..70f4f79 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs @@ -40,7 +40,7 @@ public void TestNormalNotSquareData(Func multiplication) {36, 71, 29}, {30, 22, 23}, {49, 87, 28} - } ; + }; int[,] matrix1 = { {6, 1, 3, 4}, From 5b1f8b581923d3fde49a15cd155f5036f3f222e4 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Sun, 10 Oct 2021 17:24:22 +0300 Subject: [PATCH 22/24] fix code --- .../FileFunctionsTest.cs | 12 ++++---- .../MatrixFunctionTest.cs | 10 +++---- .../{FileFunctions.cs => FunctionsForFile.cs} | 19 ++++++++---- .../MatrixFunctions.cs | 30 ++++++++++++------- .../ParallelMatrixMultiplication/Program.cs | 14 ++++----- .../Statistics.cs | 19 +++++++----- ...Exception.cs => WrongFilePathException.cs} | 6 ++-- 7 files changed, 65 insertions(+), 45 deletions(-) rename ParallelMatrixMultiplication/ParallelMatrixMultiplication/{FileFunctions.cs => FunctionsForFile.cs} (90%) rename ParallelMatrixMultiplication/ParallelMatrixMultiplication/{FilePathException.cs => WrongFilePathException.cs} (65%) diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs index 7da4a94..650fd12 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/FileFunctionsTest.cs @@ -12,21 +12,21 @@ public void TestNormalFilePath() {2, 1, 2}, {4, 1, 5}, {1, 5, 3} - } ; - var resultFromFile = FileFunctions.CreateMatrix("../../../MatrixTest1.txt"); + }; + var resultFromFile = FunctionsForFile.CreateMatrix("../../../MatrixTest1.txt"); Assert.AreEqual(result, resultFromFile); } - + [Test] public void TestAbnormalFilePath() { - Assert.Throws(() => FileFunctions.CreateMatrix(null)); + Assert.Throws(() => FunctionsForFile.CreateMatrix(null)); } - + [Test] public void TestEmptyFile() { - Assert.Throws(() => FileFunctions.CreateMatrix("../../../EmptyFileTest.txt")); + Assert.Throws(() => FunctionsForFile.CreateMatrix("../../../EmptyFileTest.txt")); } } } \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs index 70f4f79..fc3139e 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication.Test/MatrixFunctionTest.cs @@ -31,7 +31,7 @@ public void TestNormalSquareData(Func multiplication) var matrix = multiplication(matrix1, matrix2); Assert.AreEqual(result, matrix); } - + [TestCaseSource(nameof(FunctionsForTest))] public void TestNormalNotSquareData(Func multiplication) { @@ -57,15 +57,15 @@ public void TestNormalNotSquareData(Func multiplication) var matrix = multiplication(matrix1, matrix2); Assert.AreEqual(result, matrix); } - + [TestCaseSource(nameof(FunctionsForTest))] public void TestAbnormalData(Func multiplication) { - var matrix1 = new int[3,4]; - var matrix2 = new int[3,3]; + var matrix1 = new int[3, 4]; + var matrix2 = new int[3, 3]; Assert.Throws(() => multiplication(matrix1, matrix2)); } - + private static IEnumerable> FunctionsForTest() { yield return MatrixFunctions.MatrixMultiplicationParallel; diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FunctionsForFile.cs similarity index 90% rename from ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs rename to ParallelMatrixMultiplication/ParallelMatrixMultiplication/FunctionsForFile.cs index 16f23d7..b7920db 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FileFunctions.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FunctionsForFile.cs @@ -6,19 +6,19 @@ namespace ParallelMatrixMultiplication /// /// Functions for working with files /// - public static class FileFunctions + public static class FunctionsForFile { private static void CheckFilePath(string filePath) { if (string.IsNullOrEmpty(filePath)) { - throw new FilePathException("Error file path!"); + throw new WrongFilePathException("Error file path!"); } } - + private static (int, int) CountMatrixSize(string filePath) { - CheckFilePath((filePath)); + CheckFilePath(filePath); using var file = new StreamReader(filePath); string line = file.ReadLine(); int size = 0; @@ -26,12 +26,14 @@ private static (int, int) CountMatrixSize(string filePath) { throw new EmptyFileException("File is empty!"); } + string[] lineDrop = line.Split(" ", StringSplitOptions.RemoveEmptyEntries); while (line != null) { size++; line = file.ReadLine(); } + return (size, lineDrop.Length); } @@ -40,8 +42,8 @@ private static (int, int) CountMatrixSize(string filePath) /// public static int[,] CreateMatrix(string filePath) { - CheckFilePath((filePath)); - (int length, int width) size = CountMatrixSize((filePath)); + CheckFilePath(filePath); + (int length, int width) size = CountMatrixSize(filePath); var matrix = new int[size.length, size.width]; using var file = new StreamReader(filePath); string line = file.ReadLine(); @@ -53,9 +55,11 @@ private static (int, int) CountMatrixSize(string filePath) { matrix[index, i] = Int32.Parse(lineDrop[i]); } + index++; line = file.ReadLine(); } + return matrix; } @@ -70,6 +74,7 @@ public static void CreateFileWithMatrix(string filePath, int[,] matrix) { fileOut.Delete(); } + using var newFile = new FileStream(filePath, FileMode.Create); using var file = new StreamWriter(newFile); for (int i = 0; i < matrix.GetLength(0); i++) @@ -79,8 +84,10 @@ public static void CreateFileWithMatrix(string filePath, int[,] matrix) { line += $"{matrix[i, j]} "; } + file.WriteLine(line); } + file.Close(); if (fileOut.Exists) { diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs index 9ec314b..4691052 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs @@ -15,10 +15,15 @@ public static class MatrixFunctions { if (matrix1.GetLength(1) != matrix2.GetLength(0)) { - throw new MultiplicationException("Number of columns in the first matrix are not equal to the rows in the second matrix!"); + throw new MultiplicationException( + "Number of columns in the first matrix are not equal to the rows in the second matrix!"); } + var matrix = new int[matrix1.GetLength(0), matrix2.GetLength(1)]; - var threads = new Thread[Environment.ProcessorCount]; + var size = matrix1.GetLength(0) < Environment.ProcessorCount + ? matrix1.GetLength(0) + : Environment.ProcessorCount; + var threads = new Thread[size]; var chunkSize = matrix.GetLength(0) / threads.Length + 1; for (int i = 0; i < threads.Length; ++i) { @@ -27,7 +32,7 @@ public static class MatrixFunctions { for (var l = localI * chunkSize; l < (localI + 1) * chunkSize && l < matrix1.GetLength(0); ++l) { - for (int j = 0; j < matrix2.GetLength(1) ; j++) + for (int j = 0; j < matrix2.GetLength(1); j++) { for (int k = 0; k < matrix1.GetLength((1)); k++) { @@ -37,17 +42,20 @@ public static class MatrixFunctions } }); } + foreach (var thread in threads) { thread.Start(); } + foreach (var thread in threads) { thread.Join(); } + return matrix; } - + /// /// Not parallel matrix multiplication /// @@ -55,20 +63,22 @@ public static class MatrixFunctions { if (matrix1.GetLength(1) != matrix2.GetLength(0)) { - throw new MultiplicationException("Number of columns in the first matrix are not equal to the rows in the second matrix!"); + throw new MultiplicationException( + "Number of columns in the first matrix are not equal to the rows in the second matrix!"); } + var matrix = new int[matrix1.GetLength(0), matrix2.GetLength(1)]; for (int i = 0; i < matrix1.GetLength(0); i++) { for (int j = 0; j < matrix2.GetLength(1); j++) { - for (int k = 0; k < matrix1.GetLength((1)); k++) - { - matrix[i, j] += matrix1[i, k] * matrix2[k, j]; - } + for (int k = 0; k < matrix1.GetLength((1)); k++) + { + matrix[i, j] += matrix1[i, k] * matrix2[k, j]; + } } } - + return matrix; } } diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs index f5bef7e..d1478c1 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Program.cs @@ -19,7 +19,7 @@ Результаты на матрицах размеров 128*128. Матожидание = 37,86 ms Среднеквадратичное отклонение = 9,04 ms */ - + Statistics.CollectStatisticsFromMatrix(256, 256, 100); /* Результаты на матрицах размеров 256*256. @@ -31,7 +31,7 @@ Результаты на матрицах размеров 256*256. Матожидание = 169,91 ms Среднеквадратичное отклонение = 20,95 ms */ - + Statistics.CollectStatisticsFromMatrix(512, 512, 100); /* Результаты на матрицах размеров 512*512. @@ -43,11 +43,11 @@ Результаты на матрицах размеров 512*512. Матожидание = 2049,14 ms Среднеквадратичное отклонение = 361,01 ms */ - - var matrixFirst = FileFunctions.CreateMatrix((args[0])); - var matrixSecond = FileFunctions.CreateMatrix(((args[1]))); + + var matrixFirst = FunctionsForFile.CreateMatrix(args[0]); + var matrixSecond = FunctionsForFile.CreateMatrix(args[1]); var matrix = MatrixFunctions.MatrixMultiplicationParallel(matrixFirst, matrixSecond); - FileFunctions.CreateFileWithMatrix(args[2], matrix); + FunctionsForFile.CreateFileWithMatrix(args[2], matrix); } } -} +} \ No newline at end of file diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Statistics.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Statistics.cs index a2454de..9cd5b91 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Statistics.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/Statistics.cs @@ -20,12 +20,15 @@ public static void CollectStatisticsFromMatrix(int row, int column, int count) Console.WriteLine($"Результаты на матрицах размеров {row}*{column}."); Console.WriteLine($"Количество повторов: {count}."); Console.WriteLine("Паралельное умножение:"); - Console.WriteLine($"Матожидание = {result[0].average}\nСреднеквадратичное отклонение = {result[0].standardDeviation}"); + Console.WriteLine( + $"Матожидание = {result[0].average}\nСреднеквадратичное отклонение = {result[0].standardDeviation}"); Console.WriteLine("Обычное умножение:"); - Console.WriteLine($"Матожидание = {result[1].average}\nСреднеквадратичное отклонение = {result[1].standardDeviation}"); + Console.WriteLine( + $"Матожидание = {result[1].average}\nСреднеквадратичное отклонение = {result[1].standardDeviation}"); } - - private static (double average, double standardDeviation)[] GetStatistics(List timeParallel, List timeNotParallel) + + private static (double average, double standardDeviation)[] GetStatistics(List timeParallel, + List timeNotParallel) { var averageParallel = timeParallel.Average(); var averageNotParallel = timeNotParallel.Average(); @@ -35,10 +38,10 @@ private static (double average, double standardDeviation)[] GetStatistics(List, List) GetTimeMatrixMultiplication(int count, int countRows, int countColumns) { var timeParallel = new List(); @@ -60,7 +63,7 @@ private static (List, List) GetTimeMatrixMultiplication(int count, i return (timeParallel, timeNotParallel); } - + private static int[,] GenerateMatrix(int countRow, int countColumns) { var matrix = new int[countRow, countColumns]; diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FilePathException.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/WrongFilePathException.cs similarity index 65% rename from ParallelMatrixMultiplication/ParallelMatrixMultiplication/FilePathException.cs rename to ParallelMatrixMultiplication/ParallelMatrixMultiplication/WrongFilePathException.cs index 6192adc..6a55306 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FilePathException.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/WrongFilePathException.cs @@ -4,16 +4,16 @@ namespace ParallelMatrixMultiplication { - public class FilePathException : Exception + public class WrongFilePathException : Exception { /// /// then filePath is abnormal /// - public FilePathException() + public WrongFilePathException() { } - public FilePathException(string message) + public WrongFilePathException(string message) : base(message) { } From 6bbf2d35604381266e47b1dcefa3cc0b3fe988c2 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Sun, 10 Oct 2021 17:27:04 +0300 Subject: [PATCH 23/24] fix --- .../ParallelMatrixMultiplication/MatrixFunctions.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs index 4691052..23dd1a9 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs @@ -15,8 +15,7 @@ public static class MatrixFunctions { if (matrix1.GetLength(1) != matrix2.GetLength(0)) { - throw new MultiplicationException( - "Number of columns in the first matrix are not equal to the rows in the second matrix!"); + throw new MultiplicationException("Number of columns in the first matrix are not equal to the rows in the second matrix!"); } var matrix = new int[matrix1.GetLength(0), matrix2.GetLength(1)]; @@ -63,8 +62,7 @@ public static class MatrixFunctions { if (matrix1.GetLength(1) != matrix2.GetLength(0)) { - throw new MultiplicationException( - "Number of columns in the first matrix are not equal to the rows in the second matrix!"); + throw new MultiplicationException("Number of columns in the first matrix are not equal to the rows in the second matrix!"); } var matrix = new int[matrix1.GetLength(0), matrix2.GetLength(1)]; From f09df3d2262f2176664f0e5b0f88551566bcb849 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Fri, 22 Oct 2021 22:00:22 +0300 Subject: [PATCH 24/24] fix code --- .../ParallelMatrixMultiplication/FunctionsForFile.cs | 4 ++-- .../ParallelMatrixMultiplication/MatrixFunctions.cs | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FunctionsForFile.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FunctionsForFile.cs index b7920db..999c19a 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FunctionsForFile.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/FunctionsForFile.cs @@ -12,7 +12,7 @@ private static void CheckFilePath(string filePath) { if (string.IsNullOrEmpty(filePath)) { - throw new WrongFilePathException("Error file path!"); + throw new WrongFilePathException("File path is incorrect!"); } } @@ -68,7 +68,7 @@ private static (int, int) CountMatrixSize(string filePath) /// public static void CreateFileWithMatrix(string filePath, int[,] matrix) { - CheckFilePath((filePath)); + CheckFilePath(filePath); var fileOut = new FileInfo(filePath); if (fileOut.Exists) { diff --git a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs index 23dd1a9..4691052 100644 --- a/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs +++ b/ParallelMatrixMultiplication/ParallelMatrixMultiplication/MatrixFunctions.cs @@ -15,7 +15,8 @@ public static class MatrixFunctions { if (matrix1.GetLength(1) != matrix2.GetLength(0)) { - throw new MultiplicationException("Number of columns in the first matrix are not equal to the rows in the second matrix!"); + throw new MultiplicationException( + "Number of columns in the first matrix are not equal to the rows in the second matrix!"); } var matrix = new int[matrix1.GetLength(0), matrix2.GetLength(1)]; @@ -62,7 +63,8 @@ public static class MatrixFunctions { if (matrix1.GetLength(1) != matrix2.GetLength(0)) { - throw new MultiplicationException("Number of columns in the first matrix are not equal to the rows in the second matrix!"); + throw new MultiplicationException( + "Number of columns in the first matrix are not equal to the rows in the second matrix!"); } var matrix = new int[matrix1.GetLength(0), matrix2.GetLength(1)];