From f7d6c09950ea182ddfe87e68270c129622d365dc Mon Sep 17 00:00:00 2001 From: 11asa11 Date: Sun, 20 Oct 2019 21:41:53 +0300 Subject: [PATCH 1/3] git status! --- 1706-4/Andreev_SA/Source1.cpp | 75 +++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 1706-4/Andreev_SA/Source1.cpp diff --git a/1706-4/Andreev_SA/Source1.cpp b/1706-4/Andreev_SA/Source1.cpp new file mode 100644 index 0000000..5900948 --- /dev/null +++ b/1706-4/Andreev_SA/Source1.cpp @@ -0,0 +1,75 @@ +#include +#include "mpi.h" +using namespace std; +int countOfPrintSymbol(const char *str, int size) +{ + int count = 0; + for (int i = 0; i < size; ++i) { + if ((' ' != str[i]) && ('\0' != str[i]) && ('\n' != str[i]) && ('\t' != str[i]) && ((int)str[i] >= 33) && ((int)str[i] <= 255)) + count++; + } + return count; +} +int main(int argc, char **argv) +{ + setlocale(LC_ALL, "rus"); + int ProcRank, ProcNum; + MPI_Init(NULL, NULL); + MPI_Comm_size(MPI_COMM_WORLD, &ProcNum); + MPI_Comm_rank(MPI_COMM_WORLD, &ProcRank); + MPI_Status status; + char* str = NULL; int count = 0, buffer; + int part; + int len; + double start = 0; + double finish,dTime; + int sizeStr, length; + if (ProcRank == 0) + { + cout << "Size str: "; + cin >> sizeStr; + str = new char[sizeStr]; + str[sizeStr - 1] = '\0'; + length = strlen(str); + for (int i = 0; i < sizeStr - 1; i++) + { + str[i] = (char)(rand() % (35 - 32) + 32); + //str[i] = (char)(rand() % (100 - 32) + 32); + //cout<< "Symbol:" << str[i] << endl; + } + cout << endl; + part = length / ProcNum; + len = length % ProcNum; + start = MPI_Wtime(); + for (int i = 1; i < ProcNum; i++) + { + MPI_Send(str + len + part * i, part, MPI_CHAR, i, 0, MPI_COMM_WORLD); + } + } + MPI_Bcast(&length, 1, MPI_INT, 0, MPI_COMM_WORLD); + MPI_Bcast(&len, 1, MPI_INT, 0, MPI_COMM_WORLD); + MPI_Bcast(&part, 1, MPI_INT, 0, MPI_COMM_WORLD); + if (ProcRank>0) + { + char* recvStr = new char[length]; + MPI_Recv(recvStr, length, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status); + count = countOfPrintSymbol(recvStr, length); + MPI_Send(&count, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); + } + if (ProcRank == 0) + { + //count = countOfPrintSymbol(str, len + part); + for (int i = 1; i < ProcNum; i++) + { + MPI_Recv(&buffer, 1, MPI_INT, i, MPI_ANY_TAG, MPI_COMM_WORLD, &status); + count += buffer; + } + count += countOfPrintSymbol(str, part+len); + finish = MPI_Wtime(); + dTime = finish - start; + } + if(ProcRank!=0) { cout << ProcRank << "process count:" << count << endl; } + else {cout<< "Result:" << count; } + MPI_Finalize(); + return 0; +} From eec8fb50f5352b924c5cfcc349e7f1c255248eed Mon Sep 17 00:00:00 2001 From: Sergey Andreev <52509844+11asa11@users.noreply.github.com> Date: Wed, 13 May 2020 18:35:47 +0300 Subject: [PATCH 2/3] del file --- 1706-4/Andreev_SA/Source1.cpp | 75 ----------------------------------- 1 file changed, 75 deletions(-) delete mode 100644 1706-4/Andreev_SA/Source1.cpp diff --git a/1706-4/Andreev_SA/Source1.cpp b/1706-4/Andreev_SA/Source1.cpp deleted file mode 100644 index 5900948..0000000 --- a/1706-4/Andreev_SA/Source1.cpp +++ /dev/null @@ -1,75 +0,0 @@ -#include -#include "mpi.h" -using namespace std; -int countOfPrintSymbol(const char *str, int size) -{ - int count = 0; - for (int i = 0; i < size; ++i) { - if ((' ' != str[i]) && ('\0' != str[i]) && ('\n' != str[i]) && ('\t' != str[i]) && ((int)str[i] >= 33) && ((int)str[i] <= 255)) - count++; - } - return count; -} -int main(int argc, char **argv) -{ - setlocale(LC_ALL, "rus"); - int ProcRank, ProcNum; - MPI_Init(NULL, NULL); - MPI_Comm_size(MPI_COMM_WORLD, &ProcNum); - MPI_Comm_rank(MPI_COMM_WORLD, &ProcRank); - MPI_Status status; - char* str = NULL; int count = 0, buffer; - int part; - int len; - double start = 0; - double finish,dTime; - int sizeStr, length; - if (ProcRank == 0) - { - cout << "Size str: "; - cin >> sizeStr; - str = new char[sizeStr]; - str[sizeStr - 1] = '\0'; - length = strlen(str); - for (int i = 0; i < sizeStr - 1; i++) - { - str[i] = (char)(rand() % (35 - 32) + 32); - //str[i] = (char)(rand() % (100 - 32) + 32); - //cout<< "Symbol:" << str[i] << endl; - } - cout << endl; - part = length / ProcNum; - len = length % ProcNum; - start = MPI_Wtime(); - for (int i = 1; i < ProcNum; i++) - { - MPI_Send(str + len + part * i, part, MPI_CHAR, i, 0, MPI_COMM_WORLD); - } - } - MPI_Bcast(&length, 1, MPI_INT, 0, MPI_COMM_WORLD); - MPI_Bcast(&len, 1, MPI_INT, 0, MPI_COMM_WORLD); - MPI_Bcast(&part, 1, MPI_INT, 0, MPI_COMM_WORLD); - if (ProcRank>0) - { - char* recvStr = new char[length]; - MPI_Recv(recvStr, length, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status); - count = countOfPrintSymbol(recvStr, length); - MPI_Send(&count, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); - } - if (ProcRank == 0) - { - //count = countOfPrintSymbol(str, len + part); - for (int i = 1; i < ProcNum; i++) - { - MPI_Recv(&buffer, 1, MPI_INT, i, MPI_ANY_TAG, MPI_COMM_WORLD, &status); - count += buffer; - } - count += countOfPrintSymbol(str, part+len); - finish = MPI_Wtime(); - dTime = finish - start; - } - if(ProcRank!=0) { cout << ProcRank << "process count:" << count << endl; } - else {cout<< "Result:" << count; } - MPI_Finalize(); - return 0; -} From 87c3d944c99f3dc7d849b0e093d2f4f8e942665d Mon Sep 17 00:00:00 2001 From: 11asa11 Date: Thu, 21 May 2020 14:43:28 +0300 Subject: [PATCH 3/3] Added C++ Threads lab --- 1706-4/Andreev_SA/StrassenThreads.cpp | 368 ++++++++++++++++++++++ 1706-4/Andreev_SA/Threads.sln | 31 ++ 1706-4/Andreev_SA/Threads.vcxproj | 131 ++++++++ 1706-4/Andreev_SA/Threads.vcxproj.filters | 22 ++ 1706-4/Andreev_SA/Threads.vcxproj.user | 4 + 5 files changed, 556 insertions(+) create mode 100644 1706-4/Andreev_SA/StrassenThreads.cpp create mode 100644 1706-4/Andreev_SA/Threads.sln create mode 100644 1706-4/Andreev_SA/Threads.vcxproj create mode 100644 1706-4/Andreev_SA/Threads.vcxproj.filters create mode 100644 1706-4/Andreev_SA/Threads.vcxproj.user diff --git a/1706-4/Andreev_SA/StrassenThreads.cpp b/1706-4/Andreev_SA/StrassenThreads.cpp new file mode 100644 index 0000000..9bf47c5 --- /dev/null +++ b/1706-4/Andreev_SA/StrassenThreads.cpp @@ -0,0 +1,368 @@ +#include +#include +#include +#include +#include + +using namespace std; + +void PrintMatrix(double* matrix, int N) +{ + for (int i = 0; i < N; i++) + { + for (int j = 0; j < N; j++) + { + std::cout.width(6); + //cout << matrix[i*N + j] << " "; + std::cout << matrix[i * N + j] << " " << std::setw(6); + } + std::cout << std::endl; + } + std::cout << std::endl; +} + +void GenerateRandomMatrix(double* matrix1, double* matrix2, int N) +{ + for (int i = 0; i < N; i++) + { + for (int j = 0; j < N; j++) + { + matrix1[i * N + j] = ((rand() % 101 - 50) / 10.0); + matrix2[i * N + j] = ((rand() % 101 - 50) / 10.0); + /*matrix1[i*N + j] = (double)rand() / (double)RAND_MAX* 5; + matrix2[i*N + j] = (double)rand() / (double)RAND_MAX* 5 ;*/ + } + } +} + +bool matComparison(double* matrix1, double* matrix2, int N) +{ + for (int i = 0; i < N; i++) + { + for (int j = 0; j < N; j++) + { + if (matrix1[i * N + j] != matrix2[i * N + j]) + { + return false; + //std::cout << "Not Equal" << std::endl; + } + } + } + return true; +} + +double* CreateMatrix(int N) +{ + double* matrix = new double[N * N]; + return matrix; +} + +double* defaultMult(double* matrix1, double* matrix2, int N) +{ + double* tmp = CreateMatrix(N); + double sum; + for (int i = 0; i < N; i++) + { + for (int j = 0; j < N; j++) { + sum = 0; + for (int k = 0; k < N; k++) + { + sum += matrix1[i * N + k] * matrix2[k * N + j]; + } + tmp[i * N + j] = sum; + } + } + return tmp; +} + +double* Add(double* matrix1, double* matrix2, int N) +{ + double* tmp = CreateMatrix(N); + for (int i = 0; i < N; i++) + { + for (int j = 0; j < N; j++) + { + tmp[i * N + j] = matrix1[i * N + j] + matrix2[i * N + j]; + } + } + return tmp; +} + +double* Add(double* matrix1, double* matrix2, double* matrix3, double* matrix4, int N) +{ + double* tmp = CreateMatrix(N); + for (int i = 0; i < N; i++) + { + for (int j = 0; j < N; j++) + { + tmp[i * N + j] = matrix1[i * N + j] + matrix2[i * N + j] + matrix3[i * N + j] + matrix4[i * N + j]; + } + } + return tmp; +} + +double* Sub(double* matrix1, double* matrix2, int N) +{ + double* tmp = CreateMatrix(N); + for (int i = 0; i < N; i++) + { + for (int j = 0; j < N; j++) + { + tmp[i * N + j] = matrix1[i * N + j] - matrix2[i * N + j]; + } + } + return tmp; +} + +double* Sub(double* matrix1, double* matrix2, double* matrix3, double* matrix4, int N) +{ + double* tmp = CreateMatrix(N); + for (int i = 0; i < N; i++) + { + for (int j = 0; j < N; j++) + { + tmp[i * N + j] = matrix1[i * N + j] + matrix2[i * N + j] + matrix3[i * N + j] - matrix4[i * N + j]; + } + } + return tmp; +} + +double* Str_alg(double* matrix1, double* matrix2, int N, int threshold); + +double* Strassen_Threads(double* matrix1, double* matrix2, int N, int threshold) +{ + double* Rez; + + if (N <= threshold) + Rez = defaultMult(matrix1, matrix2, N); + else + { + Rez = CreateMatrix(N); + N = N / 2; + + double* A[4]; double* B[4]; double* C[4]; double* P[7]; + + double* TMP1; double* TMP2; double* TMP3; double* TMP4; double* TMP5; + double* TMP6; double* TMP7; double* TMP8; double* TMP9; double* TMP10; + + for (int i = 0; i < 4; i++) + { + A[i] = CreateMatrix(N); + B[i] = CreateMatrix(N); + } + + for (int i = 0; i < N; i++) + { + for (int j = 0; j < N; j++) + { + A[0][i * N + j] = matrix1[2 * i * N + j]; + A[1][i * N + j] = matrix1[2 * i * N + j + N]; + A[2][i * N + j] = matrix1[2 * i * N + j + 2 * N * N]; + A[3][i * N + j] = matrix1[2 * i * N + j + 2 * N * N + N]; + + B[0][i * N + j] = matrix2[2 * i * N + j]; + B[1][i * N + j] = matrix2[2 * i * N + j + N]; + B[2][i * N + j] = matrix2[2 * i * N + j + 2 * N * N]; + B[3][i * N + j] = matrix2[2 * i * N + j + 2 * N * N + N]; + } + } + + thread* TMP_array = new thread[10]; + TMP_array[0] = thread ([&]() {TMP1 = Add(A[0], A[3], N); }); + TMP_array[1] = thread ([&]() {TMP2 = Add(B[0], B[3], N); }); + TMP_array[2] = thread ([&]() {TMP3 = Add(A[2], A[3], N); }); + TMP_array[3] = thread ([&]() {TMP4 = Sub(B[1], B[3], N); }); + TMP_array[4] = thread ([&]() {TMP5 = Sub(B[2], B[0], N); }); + TMP_array[5] = thread ([&]() {TMP6 = Add(A[0], A[1], N); }); + TMP_array[6] = thread ([&]() {TMP7 = Sub(A[2], A[0], N); }); + TMP_array[7] = thread ([&]() {TMP8 = Add(B[0], B[1], N); }); + TMP_array[8] = thread ([&]() {TMP9 = Sub(A[1], A[3], N); }); + TMP_array[9] = thread ([&]() {TMP10 = Add(B[2], B[3], N); }); + + for (size_t i = 0; i < 10; i++) + TMP_array[i].join(); + + thread* P_array = new thread[7]; + P_array[0] = thread ([&]() {P[0] = Str_alg(TMP1, TMP2, N, threshold); }); + P_array[1] = thread ([&]() {P[1] = Str_alg(TMP3, B[0], N, threshold); }); + P_array[2] = thread ([&]() {P[2] = Str_alg(A[0], TMP4, N, threshold); }); + P_array[3] = thread ([&]() {P[3] = Str_alg(A[3], TMP5, N, threshold); }); + P_array[4] = thread ([&]() {P[4] = Str_alg(TMP6, B[3], N, threshold); }); + P_array[5] = thread ([&]() {P[5] = Str_alg(TMP7, TMP8, N, threshold); }); + P_array[6] = thread ([&]() {P[6] = Str_alg(TMP9, TMP10, N, threshold); }); + + for (size_t i = 0; i < 7; i++) + P_array[i].join(); + + thread* C_array = new thread[4]; + C_array[0] = thread([&]() {C[0] = Sub(P[0], P[3], P[6], P[4], N); }); + C_array[1] = thread([&]() {C[1] = Add(P[2], P[4], N); }); + C_array[2] = thread([&]() {C[2] = Add(P[1], P[3], N); }); + C_array[3] = thread([&]() {C[3] = Sub(P[0], P[2], P[5], P[1], N); }); + + for (size_t i = 0; i < 4; i++) + C_array[i].join(); + + for (int i = 0; i < N; i++) + { + for (int j = 0; j < N; j++) { + Rez[i * 2 * N + j] = C[0][i * N + j]; + Rez[i * 2 * N + j + N] = C[1][i * N + j]; + Rez[i * 2 * N + j + 2 * N * N] = C[2][i * N + j]; + Rez[i * 2 * N + j + 2 * N * N + N] = C[3][i * N + j]; + } + } + + for (int i = 0; i < 4; i++) { + delete[] A[i]; + delete[] B[i]; + delete[] C[i]; + } + + for (int i = 0; i < 7; i++) { + delete[] P[i]; + } + + delete[]TMP_array; + delete[]P_array; + delete[]C_array; + + delete[]TMP1; delete[]TMP2; delete[]TMP3; delete[]TMP4; delete[]TMP5; + delete[]TMP6; delete[]TMP7; delete[]TMP8; delete[]TMP9; delete[]TMP10; + } + + return Rez; +} + +int main() +{ + int degree; + int Size; + + std::cout << "Degree of matrix size: "; + std::cin >> degree; + Size = (int)pow(2, degree); + std::cout << "Size of matrix: " << Size << std::endl< duration_Strassen = end_Strassen - start_Strassen; + + auto start_Parallel = std::chrono::high_resolution_clock::now(); + matResParallel = Strassen_Threads(matA, matB, Size, 64); + auto end_Parallel = std::chrono::high_resolution_clock::now(); + std::chrono::duration duration_par = end_Parallel - start_Parallel; + + if (matComparison(matResStrassen, matResParallel, Size) != true) { std::cout << "Mats are not equal" << std::endl << std::endl; } + else { std::cout << "Mats are equal" << std::endl << std::endl; } + + std::cout << "Strassen algorithm: " << duration_Strassen.count() << std::endl; + std::cout << "Strassen parallel: " << duration_par.count() << std::endl; + + delete[]matA; + delete[]matB; + delete[]matResStrassen; + delete[]matResParallel; + return 0; +} + +double* Str_alg(double* matrix1, double* matrix2, int N, int threshold) +{ + double* Rez; + + if (N <= threshold) + Rez = defaultMult(matrix1, matrix2, N); + else + { + Rez = CreateMatrix(N); + N = N / 2; + + double* A[4]; double* B[4]; double* C[4]; double* P[7]; + + double* TMP1; double* TMP2; double* TMP3; double* TMP4; double* TMP5; + double* TMP6; double* TMP7; double* TMP8; double* TMP9; double* TMP10; + + for (int i = 0; i < 4; i++) + { + A[i] = CreateMatrix(N); + B[i] = CreateMatrix(N); + } + + for (int i = 0; i < N; i++) + { + for (int j = 0; j < N; j++) + { + A[0][i * N + j] = matrix1[2 * i * N + j]; + A[1][i * N + j] = matrix1[2 * i * N + j + N]; + A[2][i * N + j] = matrix1[2 * i * N + j + 2 * N * N]; + A[3][i * N + j] = matrix1[2 * i * N + j + 2 * N * N + N]; + + B[0][i * N + j] = matrix2[2 * i * N + j]; + B[1][i * N + j] = matrix2[2 * i * N + j + N]; + B[2][i * N + j] = matrix2[2 * i * N + j + 2 * N * N]; + B[3][i * N + j] = matrix2[2 * i * N + j + 2 * N * N + N]; + } + } + + TMP1 = Add(A[0], A[3], N); + TMP2 = Add(B[0], B[3], N); + TMP3 = Add(A[2], A[3], N); + TMP4 = Sub(B[1], B[3], N); + TMP5 = Sub(B[2], B[0], N); + TMP6 = Add(A[0], A[1], N); + TMP7 = Sub(A[2], A[0], N); + TMP8 = Add(B[0], B[1], N); + TMP9 = Sub(A[1], A[3], N); + TMP10 = Add(B[2], B[3], N); + + P[0] = Str_alg(TMP1, TMP2, N, threshold); // (A11 + A22)*(B11 + B22) + P[1] = Str_alg(TMP3, B[0], N, threshold); // (A21 + A22)*B11 + P[2] = Str_alg(A[0], TMP4, N, threshold); // A11*(B12 - B22) + P[3] = Str_alg(A[3], TMP5, N, threshold); // A22*(B21 - B11) + P[4] = Str_alg(TMP6, B[3], N, threshold); // (A11 + A12)*B22 + P[5] = Str_alg(TMP7, TMP8, N, threshold); // (A21 - A11)*(B11 + B12) + P[6] = Str_alg(TMP9, TMP10, N, threshold); // (A12 - A22)*(B21 + B22) + + C[0] = Sub(P[0], P[3], P[6], P[4], N); // P1 + P4 - P5 + P7 + C[1] = Add(P[2], P[4], N); // P3 + P5 + C[2] = Add(P[1], P[3], N); // P2 + P4 + C[3] = Sub(P[0], P[2], P[5], P[1], N); // P1 - P2 + P3 + P6 + + for (int i = 0; i < N; i++) + { + for (int j = 0; j < N; j++) { + Rez[i * 2 * N + j] = C[0][i * N + j]; + Rez[i * 2 * N + j + N] = C[1][i * N + j]; + Rez[i * 2 * N + j + 2 * N * N] = C[2][i * N + j]; + Rez[i * 2 * N + j + 2 * N * N + N] = C[3][i * N + j]; + } + } + for (int i = 0; i < 4; i++) { + delete[] A[i]; + delete[] B[i]; + delete[] C[i]; + } + + for (int i = 0; i < 7; i++) { + delete[] P[i]; + } + + delete[]TMP1; delete[]TMP2; delete[]TMP3; delete[]TMP4; delete[]TMP5; + delete[]TMP6; delete[]TMP7; delete[]TMP8; delete[]TMP9; delete[]TMP10; + } + + return Rez; +} \ No newline at end of file diff --git a/1706-4/Andreev_SA/Threads.sln b/1706-4/Andreev_SA/Threads.sln new file mode 100644 index 0000000..704d719 --- /dev/null +++ b/1706-4/Andreev_SA/Threads.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29424.173 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Threads", "Threads.vcxproj", "{0F8F02BE-82D9-4BEB-A6DF-21C19E47566B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0F8F02BE-82D9-4BEB-A6DF-21C19E47566B}.Debug|x64.ActiveCfg = Debug|x64 + {0F8F02BE-82D9-4BEB-A6DF-21C19E47566B}.Debug|x64.Build.0 = Debug|x64 + {0F8F02BE-82D9-4BEB-A6DF-21C19E47566B}.Debug|x86.ActiveCfg = Debug|Win32 + {0F8F02BE-82D9-4BEB-A6DF-21C19E47566B}.Debug|x86.Build.0 = Debug|Win32 + {0F8F02BE-82D9-4BEB-A6DF-21C19E47566B}.Release|x64.ActiveCfg = Release|x64 + {0F8F02BE-82D9-4BEB-A6DF-21C19E47566B}.Release|x64.Build.0 = Release|x64 + {0F8F02BE-82D9-4BEB-A6DF-21C19E47566B}.Release|x86.ActiveCfg = Release|Win32 + {0F8F02BE-82D9-4BEB-A6DF-21C19E47566B}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {2B0A3DDF-6F81-4A5B-8F1F-8B0204DEBCDF} + EndGlobalSection +EndGlobal diff --git a/1706-4/Andreev_SA/Threads.vcxproj b/1706-4/Andreev_SA/Threads.vcxproj new file mode 100644 index 0000000..a706ebc --- /dev/null +++ b/1706-4/Andreev_SA/Threads.vcxproj @@ -0,0 +1,131 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {0F8F02BE-82D9-4BEB-A6DF-21C19E47566B} + Threads + 10.0 + + + + Application + true + v142 + MultiByte + + + Application + false + v142 + true + MultiByte + + + Application + true + v142 + MultiByte + + + Application + false + v142 + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + Level3 + Disabled + true + true + + + Console + + + + + Level3 + Disabled + true + true + + + Console + + + + + Level3 + MaxSpeed + true + true + true + true + + + Console + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + + + Console + true + true + + + + + + + + + \ No newline at end of file diff --git a/1706-4/Andreev_SA/Threads.vcxproj.filters b/1706-4/Andreev_SA/Threads.vcxproj.filters new file mode 100644 index 0000000..e8db4c0 --- /dev/null +++ b/1706-4/Andreev_SA/Threads.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Исходные файлы + + + \ No newline at end of file diff --git a/1706-4/Andreev_SA/Threads.vcxproj.user b/1706-4/Andreev_SA/Threads.vcxproj.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/1706-4/Andreev_SA/Threads.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file