From 0a2bf30e3dbcc59922187be57a9dc69aa7b36b38 Mon Sep 17 00:00:00 2001 From: NFELIV <57617133+NFELIV@users.noreply.github.com> Date: Thu, 14 May 2020 21:15:38 +0300 Subject: [PATCH 01/12] Add files via upload --- main.cpp | Bin 0 -> 2822 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 main.cpp diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f8f3c5dff19e81f8f785bd2f400b53d7d4b4e5aa GIT binary patch literal 2822 zcmcguT~AX%5S@qna!q_P@zqNWv49HHm>4M4LX-!Hpy-n^q?A%GA1z`beuTfSo-@OA zcl!}}GB@{QcV}nMoH;vt|NLH*MJeR|%(6VgdnRjSud?;*1)hzpmaSw9k&~uKj zw#H=$Ruv)buYkQooP}(N;UB=RiSG-{`5{$|_2KmZ+>n=+j(n2O@)#|yG{BoejAX#ESa06*j)7sr$j<0}!N`3Wc)*(~m5^=&h+)q_1# zK6io3Fim4~9=?pvm`k$o6C5~?55VCjI9$)Rp<%A!XiG%T$bE)IS_8WAxNggn`x@sc zW+{i7s0!x3uKc<#$eZ<4Fjg7nDHr1?ys5SUd|V*omd!~lzJo=H)lOtjGd+kh?KvGl zcVuvqQmJ98)!Cd>IZ{qd(WQDk)+hH&2Ybjhm##C=o$6zOXP;#%im`Hk6jD=t2CD}8 zOtYbHQI%X9<}=m1d3NhbY9}*sCQUziqWB!qvDTP3%cHTzTzXub6Jk5Qu`bm+TMb1T zV`1-;q?b9cT{DUxM~+R)j)i+R#$w(IXx(zbj0RuymscVv&H175448HjtDi|?$p?PY$jSR9~$ovf>UDRw>bgbM|m0=$n zOX+CL3ago4A>XOJpEITrs?@xWR)LDVMkLG-5%;in&*Tv}EtK1io>d&TK1Lm9c?GRd zG1|%smBpPg8qc)TDnv&1d{#Iw#u0x2!#vqG@#NXVdd~=WCI)XQw#l_USl@1Ku6GE{ zIh!fV{2S?O<*P#LZZoMKdX!u>Ume8>^GHN5}(f?>_DpxE!Fe$GT`h zvl}>%cktXoecqQ{d|=9qt%JPW8W?&3IOp5yprv@?Ob?OOf<6`+vx literal 0 HcmV?d00001 From e6f23f85d1b1a4bc0480b3d5add57b0a0a7fb3c2 Mon Sep 17 00:00:00 2001 From: NFELIV <57617133+NFELIV@users.noreply.github.com> Date: Tue, 19 May 2020 00:52:48 +0300 Subject: [PATCH 02/12] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | Bin 2822 -> 1637 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/main.cpp b/main.cpp index f8f3c5dff19e81f8f785bd2f400b53d7d4b4e5aa..d30980002481224632c5505374acccd3dd6b32e1 100644 GIT binary patch literal 1637 zcmb7EO>fgc5Is9m{=+C0!l5Zi%8jOxs;J^X1%<#ViYnLMCY##pvbGBWA+;5P1C@F} z;=-YD;2t3&DoV>=SpNln2{Y@DIH)}kCGuwW?VC4mc3iK+pEnNjo0hw)MTUj4#|I!E-0x=?3oih**eUI+C_eO_pSIwd3m zrs}(OQ&I0N z5}e2l_)Dh6o}$oqDD)^kPG#~PFlif8FE{dxS1BV@t}78{*nSj3tEH{seOy$aLdr;* z{z(=_QebE%^ijm^-L5ag)YpPeH<2r~)+?@J;%w#^qDN#3B}`l7;eT?=l&}ac(!g@R zupKgQPg{*Ao)0ze`xn?NzKFL&wV%k-pBT0-LH;hc9QPeby0+o7_Mf|F_$aQ(2S#G+x6{TQ}fRmZH;TtNRq=6G&LYSVy0&>P7%7jL1=~C-m4M4LX-!Hpy-n^q?A%GA1z`beuTfSo-@OA zcl!}}GB@{QcV}nMoH;vt|NLH*MJeR|%(6VgdnRjSud?;*1)hzpmaSw9k&~uKj zw#H=$Ruv)buYkQooP}(N;UB=RiSG-{`5{$|_2KmZ+>n=+j(n2O@)#|yG{BoejAX#ESa06*j)7sr$j<0}!N`3Wc)*(~m5^=&h+)q_1# zK6io3Fim4~9=?pvm`k$o6C5~?55VCjI9$)Rp<%A!XiG%T$bE)IS_8WAxNggn`x@sc zW+{i7s0!x3uKc<#$eZ<4Fjg7nDHr1?ys5SUd|V*omd!~lzJo=H)lOtjGd+kh?KvGl zcVuvqQmJ98)!Cd>IZ{qd(WQDk)+hH&2Ybjhm##C=o$6zOXP;#%im`Hk6jD=t2CD}8 zOtYbHQI%X9<}=m1d3NhbY9}*sCQUziqWB!qvDTP3%cHTzTzXub6Jk5Qu`bm+TMb1T zV`1-;q?b9cT{DUxM~+R)j)i+R#$w(IXx(zbj0RuymscVv&H175448HjtDi|?$p?PY$jSR9~$ovf>UDRw>bgbM|m0=$n zOX+CL3ago4A>XOJpEITrs?@xWR)LDVMkLG-5%;in&*Tv}EtK1io>d&TK1Lm9c?GRd zG1|%smBpPg8qc)TDnv&1d{#Iw#u0x2!#vqG@#NXVdd~=WCI)XQw#l_USl@1Ku6GE{ zIh!fV{2S?O<*P#LZZoMKdX!u>Ume8>^GHN5}(f?>_DpxE!Fe$GT`h zvl}>%cktXoecqQ{d|=9qt%JPW8W?&3IOp5yprv@?Ob?OOf<6`+vx From 9878b3e813dfd17b023e8678500a1a923ac418bd Mon Sep 17 00:00:00 2001 From: NFELIV <57617133+NFELIV@users.noreply.github.com> Date: Tue, 19 May 2020 03:20:19 +0300 Subject: [PATCH 03/12] Add files via upload --- ShellSort_SimpleMerge[2].cpp | Bin 0 -> 11934 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ShellSort_SimpleMerge[2].cpp diff --git a/ShellSort_SimpleMerge[2].cpp b/ShellSort_SimpleMerge[2].cpp new file mode 100644 index 0000000000000000000000000000000000000000..51d34f025fcd31a5a8e2c151e746e0c35c06d9ee GIT binary patch literal 11934 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 literal 0 HcmV?d00001 From a651faffe1a693a74fae364915ceefc170dcbc66 Mon Sep 17 00:00:00 2001 From: NFELIV <57617133+NFELIV@users.noreply.github.com> Date: Tue, 19 May 2020 03:23:18 +0300 Subject: [PATCH 04/12] ne tyda --- ShellSort_SimpleMerge[2].cpp | Bin 11934 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 ShellSort_SimpleMerge[2].cpp diff --git a/ShellSort_SimpleMerge[2].cpp b/ShellSort_SimpleMerge[2].cpp deleted file mode 100644 index 51d34f025fcd31a5a8e2c151e746e0c35c06d9ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11934 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 From 930c1747138a58af2596d9fe486bd0bddbcdfc9e Mon Sep 17 00:00:00 2001 From: NFELIV <57617133+NFELIV@users.noreply.github.com> Date: Tue, 19 May 2020 15:24:00 +0300 Subject: [PATCH 05/12] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/main.cpp b/main.cpp index d309800..038aa44 100644 --- a/main.cpp +++ b/main.cpp @@ -1,7 +1,6 @@ // №13 Сортировка Хоара с простым слиянием // ЛР#1 Последовательная реализация -#include "stdafx.h" #include #include #include @@ -9,7 +8,7 @@ using namespace std; -void CreateArray(double arr[], int lenght) //Генерация +void CreateArray(int arr[], int lenght) //Генерация { srand((unsigned int)time(NULL)); for (int i = 0; i < lenght; i++) @@ -18,7 +17,7 @@ void CreateArray(double arr[], int lenght) //Генерация } } -void PrintArray(double* arr, int size) //Печать +void PrintArray(int* arr, int size) //Печать { if (size < 20) { @@ -30,7 +29,7 @@ void PrintArray(double* arr, int size) //Печать return; } -void QuickSort(double* arr, int l, int r) //Сортировка +void QuickSort(int* arr, int l, int r) //Сортировка { int i = l, j = r; double m = arr[(r + l) / 2]; @@ -69,11 +68,17 @@ void QuickSort(double* arr, int l, int r) //Сортировка int main(int argc, char * argv[]) { - double size; - double array[100000]; + int size = 10000; double time = 0; - cout << "Enter num's element's in array: "; - cin >> size; + if (argc == 2) + { + size = atoi(argv[1]); + } + else if (argc != 2) + { + cout << "Error! Only the number of elements in the array is needed" << endl; + } + int* array = new int[size]; CreateArray(array, size); cout << "The Generated array: "; PrintArray(array, size); @@ -86,5 +91,6 @@ int main(int argc, char * argv[]) cout << endl; cout << "Sequence version time: " << time << endl; delete[] array; + system("pause"); return 0; } From 4e87b86ecbd57399b7397fc022ad2ec123109468 Mon Sep 17 00:00:00 2001 From: NFELIV <57617133+NFELIV@users.noreply.github.com> Date: Tue, 19 May 2020 15:47:07 +0300 Subject: [PATCH 06/12] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ShellSort_SimpleMerge[2].cpp | Bin 0 -> 12210 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ShellSort_SimpleMerge[2].cpp diff --git a/ShellSort_SimpleMerge[2].cpp b/ShellSort_SimpleMerge[2].cpp new file mode 100644 index 0000000000000000000000000000000000000000..f0d1211cdda4c6649f3c05b46851ea7362141b74 GIT binary patch literal 12210 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 b$xTP8xeGePv3n*XlD$!@UO%goU&8+Z`-&}t literal 0 HcmV?d00001 From 01563a1d3d04463853db0d9d81e92ff8b53c0891 Mon Sep 17 00:00:00 2001 From: NFELIV <57617133+NFELIV@users.noreply.github.com> Date: Tue, 19 May 2020 15:50:54 +0300 Subject: [PATCH 07/12] ne tyda --- ShellSort_SimpleMerge[2].cpp | Bin 12210 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 ShellSort_SimpleMerge[2].cpp diff --git a/ShellSort_SimpleMerge[2].cpp b/ShellSort_SimpleMerge[2].cpp deleted file mode 100644 index f0d1211cdda4c6649f3c05b46851ea7362141b74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12210 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 b$xTP8xeGePv3n*XlD$!@UO%goU&8+Z`-&}t From ce05cbbbf48c8f309ab81ba85fb98a342c51c3e5 Mon Sep 17 00:00:00 2001 From: NFELIV <57617133+NFELIV@users.noreply.github.com> Date: Wed, 20 May 2020 04:24:52 +0300 Subject: [PATCH 08/12] quickmerge[tbb] --- main.cpp | Bin 1736 -> 10388 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/main.cpp b/main.cpp index 038aa44bfdf5f6a646dcf755d72c05eadbe2bc10..8a151973ea0b43ced78cd6d9650b24e1e8e77ae5 100644 GIT binary patch literal 10388 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 MTSlz7D|v7J1GeeetN;K2 literal 1736 zcmb7EO-~b16kSh~{)bD6$yAD^xRaKI5aL22D7tDIGR!>MS7zSen>UbZOn?|&NW#Lz zjSF<)zA-iu5&R2p{(`^6d*6I87+Bb}$@IQ+&pr3tccKlK>&S9}~}U<}D2=-+gd941G}d;JR|`W(?G`a+-S2?nZ_W)t)${du|t`jn6e znCS0@Zj96ueV!a6e4LyBQcd)j81xSeyd|b;rCOQh!u4a1L7Rt>lFSJf%fU!_KHs`G zxE2h9-G3sk;sHZUwGu~M^g%cQi*_BC0TL`wd@tl4EF-^SOHw)`n+pYwl-*tf=+S4Q zKTvgOHuVQodZ8y|L#h)yeO0Ykk#vM-+p&mvUoel->QvW${Cst_UdJ-lb|}FxbLha_ z0&r+&%=kPrQ%49fSyY(!5MwCoa0gm*l>fR~!EdH^U1Eho>|IiuYK{0yW|W?y%6F*p zC^^nF@@=r`80*f@73FS{MW{kls>*W1SV6mOeBnKOs6mZnkuLL-OvO@Q=t||2n7cb0 zp;Xj&Nu-}@l}6|dmo4>_tS7G!JtRA*nis}fK7#=NlTWsU8Ss$?=6j`M#e!W#7~A#- z920DGy92|b>nxgi-G+cpvQBXrMPpV8IPAgVHQ;b|_6kVuUKPoy(qLLR=eII>X>r3) znmR>?rWq@ZV%ZK*N{S@AEi2b(l{L^2$rz$ezi9Pp2uR&9Zkqd;qa~vGZD`&AnWN2I zX()liMYbb-w*l_JkwDY!?{$0i{IVg=T(%BgU;L2xY2$B#>g6IV=0^;Qw5f7heno35QigI0)`UL-HDDm(V2eozw}JUAU_wQ>pymWEaYn!+ z5R7@utI-W-!t+V4F(|vY2w z<<+(2M;n{#D^E8!R+g`Kuw+bfwiS9Pr63P(2BiyiR i@Ni;^b$h9CG?r)-;WpT{T_=uM%_vP@J!ao=Xnz3)=ObDG From 9bc87401217fb7eb3d928b70877890e41ee462c0 Mon Sep 17 00:00:00 2001 From: NFELIV <57617133+NFELIV@users.noreply.github.com> Date: Wed, 20 May 2020 04:28:06 +0300 Subject: [PATCH 09/12] update --- main.cpp | Bin 10388 -> 5493 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/main.cpp b/main.cpp index 8a151973ea0b43ced78cd6d9650b24e1e8e77ae5..fee5e90abd6d6aac1c311db5a9c4babb0e5fc82b 100644 GIT binary patch literal 5493 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 MTSlz7D|v7J1GeeetN;K2 From 3131ab92d3dbd657bd72a375fca671a3d2a208dd Mon Sep 17 00:00:00 2001 From: NFELIV <57617133+NFELIV@users.noreply.github.com> Date: Wed, 20 May 2020 04:30:44 +0300 Subject: [PATCH 10/12] =?UTF-8?q?=D0=B7=D0=B0=D0=B1=D1=8B=D0=BB=20=D0=BF?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D0=B8=D1=82=D1=8C=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BA=D1=80=D1=8B=D0=B2=D0=B0=D1=8E=D1=89=D1=83=D1=8E=D1=81?= =?UTF-8?q?=D1=8F=20=D1=81=D0=BA=D0=BE=D0=B1=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/main.cpp b/main.cpp index fee5e90..4ca4977 100644 --- a/main.cpp +++ b/main.cpp @@ -215,6 +215,7 @@ int main(int argc, char** argv) cout << "Sorted arrays are equal!" << endl; cout << "Parallel version time: " << (finish_parallel_time - start_parallel_time).seconds() << endl; cout << "Sequence version time: " << (finish_sequence_time - start_sequence_time).seconds() << endl; + } delete[] array; delete[] sequence_sorted_array; delete[] parallel_sorted_array; From 2a0a3563023dc5ee69911e1c30cd55cfb347b24f Mon Sep 17 00:00:00 2001 From: NFELIV <57617133+NFELIV@users.noreply.github.com> Date: Tue, 16 Jun 2020 14:33:18 +0300 Subject: [PATCH 11/12] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 504 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 352 insertions(+), 152 deletions(-) diff --git a/main.cpp b/main.cpp index 4ca4977..867e6bc 100644 --- a/main.cpp +++ b/main.cpp @@ -1,224 +1,424 @@ -// №13 Сортировка Хоара с простым слиянием +// №13 Сортировка Хоара с простым слиянием // ЛР#3 Реализация TBB #include "stdafx.h" +#include "tbb/task_scheduler_init.h" +#include "tbb/parallel_for.h" +#include +using namespace tbb; + #include -#include -#include -#include -#include -#include +#include using namespace std; -void CreateArray(double arr[], int lenght) //Генерация +struct part { - srand((unsigned int)time(NULL)); - for (int i = 0; i < lenght; i++) - { - arr[i] = rand() % 10; - } -} + int* array; + unsigned size; +}; -void PrintArray(double* arr, int size) //Печать +void merge(int* c, int* a, int* b, int n, int m) { - if (size < 20) + int i = 0, j = 0, k = 0; + + while (i < n && j < m) { - for (int i = 0; i < size; i++) + if (a[i] <= b[j]) + { + c[k] = a[i]; + i++; + } + else { - cout << arr[i] << " "; + c[k] = b[j]; + j++; } + k++; } - return; + while (i < n) + { + c[k] = a[i]; + k++; + i++; + } + while (j < m) + { + c[k] = b[j]; + k++; + j++; + } +} + +void swap(int* a, int* b) +{ + int t = *a; + *a = *b; + *b = t; } -void QuickSort(double* arr, int l, int r) //Быстрая сортировка для последовательной реализации +int partition(int arr[], int low, int high) { - int i = l, j = r; - double m = arr[(r + l) / 2]; - double temp = 0; - while (i <= j) + int pivot = arr[high]; + int i = (low - 1); + + for (int j = low; j <= high - 1; j++) { - while (arr[i] < m) + if (arr[j] < pivot) { i++; - } - while (arr[j] > m) - { - j--; - } - if (i <= j) - { - if (i < j) - { - temp = arr[i]; - arr[i] = arr[j]; - arr[j] = temp; - } - i++; - j--; + swap(&arr[i], &arr[j]); } } - if (j > l) + swap(&arr[i + 1], &arr[high]); + return (i + 1); +} + +void quickSort(int arr[], int low, int high) +{ + if (low < high) { - QuickSort(arr, l, j); + int pi = partition(arr, low, high); + + quickSort(arr, low, pi - 1); + quickSort(arr, pi + 1, high); } - if (r > i) +} + + +class Merger : public task +{ +private: + unsigned task_id; + part* parts; + part* sorted_parts; +public: + Merger(unsigned _task_id, part* _parts, part* _sorted_parts) + : task_id(_task_id), parts(_parts), sorted_parts(_sorted_parts) {} + + task* execute() { - QuickSort(arr, i, r); + int part_id = ((task_id + 1) * 2) - 1; + merge(sorted_parts[task_id].array, parts[part_id].array, parts[part_id - 1].array, parts[part_id].size, parts[part_id - 1].size); + + return NULL; } -} +}; +class Sorter : public task +{ +private: + unsigned task_id; + unsigned part_size; + part* parts; +public: + Sorter(unsigned _task_id, part* _parts, unsigned _part_size) + : task_id(_task_id), parts(_parts), part_size(_part_size) {} -void Merge(double* array, int sizeOfPart, int it1, int it2) //Слияние для параллельной реализации + task* execute() + { + quickSort(parts[task_id].array, 0, part_size - 1); + return NULL; + } +}; + +class ParallelMerger : public task { - int i = 0, j = 0, k = 0; - int size = sizeOfPart + sizeOfPart; - double* temp; - temp = new double[size]; - while (i < sizeOfPart && j < sizeOfPart) +private: + unsigned num_tasks; + part* parts; + part* sorted_parts; + vector mergers; +public: + ParallelMerger(unsigned _num_tasks, part* _parts, part* _sorted_parts) + : num_tasks(_num_tasks), parts(_parts), sorted_parts(_sorted_parts) + { + mergers.resize(num_tasks); + } + + task* execute() { - if (array[i + it1] <= array[j + it2]) + unsigned task_id = 0; + for (auto& x : mergers) { - temp[k] = array[i + it1]; - i++; + x = new (allocate_child()) Merger(task_id, parts, sorted_parts); + task_id++; } - else + set_ref_count(num_tasks + 1); + for (auto& x : mergers) { - temp[k] = array[j + it2]; - j++; + spawn(*x); } - k++; + wait_for_all(); + return NULL; } - if (i < sizeOfPart) +}; + +class ParallelSorter : public task +{ +private: + unsigned num_tasks; + unsigned part_size; + part* parts; + vector sorters; +public: + ParallelSorter(unsigned _num_tasks, part* _parts, unsigned _part_size) + : num_tasks(_num_tasks), parts(_parts), part_size(_part_size) { - for (int p = i; p < sizeOfPart; p++) - { - temp[k] = array[p + it1]; - k++; - } + sorters.resize(num_tasks); } - else + + task* execute() { - for (int p = j; p < sizeOfPart; p++) + unsigned task_id = 0; + for (auto& x : sorters) { - temp[k] = array[p + it2]; - k++; + x = new (allocate_child()) Sorter(task_id, parts, part_size); + task_id++; } - } - for (i = it1; i < it2 + sizeOfPart; i++) - array[i] = temp[i - it1]; -} + set_ref_count(num_tasks + 1); + for (auto& x : sorters) + { + spawn(*x); + } + + wait_for_all(); + return NULL; + } +}; -void ParallelQuickSort(double* arr, int length, int n_threads) +int* parallel_merge(int numtasks, part* parts) { - tbb::tick_count tInit1_1 = tbb::tick_count::now(); - tbb::task_scheduler_init init(n_threads); - tbb::tick_count tInit2_1 = tbb::tick_count::now(); - int grain_size = 0; - grain_size = length / (n_threads); - cout << "Threads: " << n_threads << endl; - cout << "Length of array: " << length << endl; - cout << "Size of one part: " << grain_size << endl; - tbb::parallel_for(tbb::blocked_range(0, n_threads), [=, &arr](const tbb::blocked_range &r) + if (numtasks == 2) + { + int* result_array = new int[parts[0].size + parts[1].size]; + merge(result_array, parts[0].array, parts[1].array, parts[0].size, parts[1].size); + return result_array; + } + else if (numtasks == 3) + { + int* tmp_array = new int[parts[0].size + parts[1].size]; + merge(tmp_array, parts[0].array, parts[1].array, parts[0].size, parts[1].size); + int* result_array = new int[parts[0].size + parts[1].size + parts[2].size]; + merge(result_array, parts[2].array, tmp_array, parts[2].size, parts[0].size + parts[1].size); + delete[] tmp_array; + return result_array; + } + else if (numtasks < 2) return nullptr; + int current_parts = numtasks / 2 + numtasks % 2; + part* sorted_parts = new part[current_parts]; + int _numtasks = numtasks; + int _current_parts = current_parts; + int part_size = parts[0].size; + for (size_t i = 0; i < numtasks / 2; i++) { - for (int f = r.begin(); f != r.end(); f++) + int part_id = ((i + 1) * 2) - 1; + sorted_parts[i].size = parts[part_id].size + parts[part_id - 1].size; + sorted_parts[i].array = new int[sorted_parts[i].size]; + } + if (numtasks % 2) + { + sorted_parts[current_parts - 1].size = parts[numtasks - 1].size; + sorted_parts[current_parts - 1].array = new int[sorted_parts[current_parts - 1].size]; + for (size_t i = 0; i < sorted_parts[current_parts - 1].size; i++) { - QuickSort(arr, f*grain_size, grain_size); + sorted_parts[current_parts - 1].array[i] = parts[numtasks - 1].array[i]; } - - }); - init.terminate(); - int k = 0; - int i = (n_threads / 2); - int size = 0; - for (i = (n_threads / 2); i > 0; i = i / 2) + _numtasks--; + _current_parts--; + } + ParallelMerger& parallelmerger = *new (task::allocate_root()) ParallelMerger(_current_parts, parts, sorted_parts); + task::spawn_root_and_wait(parallelmerger); + for (size_t i = 0; i < numtasks; i++) { - size = grain_size*static_cast(pow(2.0, k)); - init.initialize(i); - tbb::parallel_for(tbb::blocked_range(0, i), [=, &arr, &size](const tbb::blocked_range &r) - { - for (int f = r.begin(); f != r.end(); f++) - { - int start1 = f*grain_size - *static_cast(pow(2.0, k + 1)); - int start2 = start1 + - grain_size*static_cast(pow(2.0, k)); - Merge(arr, size, start1, start2); - Merge(arr, size, start1, start2); - } - }); - k++; - init.terminate(); + delete[] parts[i].array; } + return parallel_merge(current_parts, sorted_parts); } + + int main(int argc, char** argv) { - int size = 10000; - int threads = 4; - double* sequence_sorted_array = new double[size]; // Массив для последовательной версии - double* parallel_sorted_array = new double[size]; // Массив для параллельной версии - int notCorrect = 0; //Счетчик корректности + int* start_array = nullptr; + int* sorted_start_array = nullptr; + int* array = nullptr; + int* remainder_array = nullptr; + int* result_array = nullptr; + clock_t start; + clock_t end; + clock_t start_single; + clock_t end_single; + int numtasks; + int size; + int remainder = 0; + part* parts; if (argc == 3) { - size = atoi(argv[1]); - threads = atoi(argv[2]); + numtasks = atoi(argv[1]); + size = atoi(argv[2]); } else { - cout << "Error!" << endl << "Two arguments must be entered: [1] - size array, [2] - threads..." << endl; - return 0; + { + cout << "Error! Only the number of elements in the array is needed" << endl; cout << "Error!" << endl << "Two arguments must be entered: [1] - size array, [2] - threads..." << endl; + return 0; + } + } + start_array = new int[size]; + sorted_start_array = new int[size]; + for (size_t i = 0; i < size; i++) + { + start_array[i] = rand() % 1000; + } + for (size_t i = 0; i < size; i++) + { + sorted_start_array[i] = start_array[i]; + } + start_single = clock(); + quickSort(sorted_start_array, 0, size - 1); + end_single = clock(); + remainder = size % numtasks; + size = size - remainder; + array = new int[size]; + if (remainder) + { + remainder_array = new int[remainder]; + } + int i = 0; + for (; i < size; i++) + { + array[i] = start_array[i]; + } + for (int j = 0; j < remainder; j++, i++) + { + remainder_array[j] = start_array[i]; + } + if (remainder > 1) + { + quickSort(remainder_array, 0, remainder - 1); } - double* array = new double[size]; // Исходный массив - CreateArray(array, size); - cout << "The Generated array: "; - PrintArray(array, size); - cout << endl; - for (int i = 0; i < size; i++) + delete[] start_array; + + int part_size = size / numtasks; + parts = new part[numtasks]; + for (size_t i = 0; i < numtasks; i++) { - sequence_sorted_array[i] = array[i]; - parallel_sorted_array[i] = array[i]; + parts[i].size = part_size; + parts[i].array = new int[part_size]; + int shift = i * part_size; + for (int j = 0; j < part_size; j++) + { + parts[i].array[j] = array[j + shift]; + } } - //Параллельная реализация - tbb::tick_count start_parallel_time = tbb::tick_count::now(); - ParallelQuickSort(parallel_sorted_array, size, threads); - tbb::tick_count finish_parallel_time = tbb::tick_count::now(); - // - //Последовательная реализация - tbb::tick_count start_sequence_time = tbb::tick_count::now(); - QuickSort(sequence_sorted_array, 0, size - 1); - tbb::tick_count finish_sequence_time = tbb::tick_count::now(); - // - double* equal = new double[size]; - for (int i = 0; i < size; i++) //проверка на правильность + task_scheduler_init init(numtasks); + start = clock(); + result_array = new int[size + remainder]; + ParallelSorter& parallelsorter = *new (task::allocate_root()) ParallelSorter(numtasks, parts, part_size); + task::spawn_root_and_wait(parallelsorter); + if (numtasks == 2) { - equal[i] = sequence_sorted_array[i] - parallel_sorted_array[i]; - if (equal[i] != 0.0) + if (remainder) { - notCorrect++; + int* tmp_array = new int[part_size * 2]; + merge(tmp_array, parts[0].array, parts[1].array, part_size, part_size); + merge(result_array, remainder_array, tmp_array, remainder, size); + delete[] tmp_array; + size += remainder; + } + else + { + int* result_array = new int[part_size * 2]; + merge(result_array, parts[0].array, parts[1].array, part_size, part_size); } } - if (notCorrect > 0) + else if (numtasks == 3) { - cout << "Sorted arrays are not equal!" << endl; + if (remainder) + { + int* tmp_array = new int[part_size * 2]; + int* tmp_array2 = new int[part_size * 3]; + merge(tmp_array, parts[0].array, parts[1].array, part_size, part_size); + merge(tmp_array2, parts[2].array, tmp_array, part_size, part_size + part_size); + merge(result_array, remainder_array, tmp_array2, remainder, size); + delete[] tmp_array; + delete[] tmp_array2; + size += remainder; + } + else + { + int* tmp_array = new int[part_size * 2]; + merge(tmp_array, parts[0].array, parts[1].array, part_size, part_size); + merge(result_array, parts[2].array, tmp_array, part_size, part_size + part_size); + delete[] tmp_array; + } + } + else if (numtasks < 2) + { + result_array = parts[0].array; } else { - cout << "Parallel sorted array: "; - PrintArray(parallel_sorted_array, size); - cout << endl; - cout << "Sequence sorted array: "; - PrintArray(sequence_sorted_array, size); - cout << endl; - cout << "Sorted arrays are equal!" << endl; - cout << "Parallel version time: " << (finish_parallel_time - start_parallel_time).seconds() << endl; - cout << "Sequence version time: " << (finish_sequence_time - start_sequence_time).seconds() << endl; + int current_parts = numtasks / 2 + numtasks % 2; + part* sorted_parts = new part[current_parts]; + int _numtasks = numtasks; + int _current_parts = current_parts; + for (size_t i = 0; i < numtasks / 2; i++) + { + int part_id = ((i + 1) * 2) - 1; + sorted_parts[i].size = parts[part_id].size + parts[part_id - 1].size; + sorted_parts[i].array = new int[sorted_parts[i].size]; + } + if (numtasks % 2) + { + sorted_parts[current_parts - 1].size = part_size; + sorted_parts[current_parts - 1].array = new int[part_size]; + for (size_t i = 0; i < part_size; i++) + { + sorted_parts[current_parts - 1].array[i] = parts[numtasks - 1].array[i]; + } + _numtasks--; + _current_parts--; + } + + ParallelMerger& parallelmerger = *new (task::allocate_root()) ParallelMerger(_current_parts, parts, sorted_parts); + task::spawn_root_and_wait(parallelmerger); + for (size_t i = 0; i < numtasks; i++) + { + delete[] parts[i].array; + } + delete[] parts; + if (remainder) + { + merge(result_array, remainder_array, parallel_merge(current_parts, sorted_parts), remainder, size); + size += remainder; + } + else result_array = parallel_merge(current_parts, sorted_parts); + } + end = clock(); + bool same = true; + for (size_t i = 0; i < size; i++) + { + if (sorted_start_array[i] != result_array[i]) + { + same = false; + break; + } } + + cout << "Arrays check: "; + if (same) cout << "PASS!" << endl; + else cout << "ERROR!" << endl; + double seconds_single = (double)(end_single - start_single) / CLOCKS_PER_SEC; + cout << "The time of single thread quick sort " << seconds_single << " seconds." << endl; + double seconds = (double)(end - start) / CLOCKS_PER_SEC; + cout << "The time of " << numtasks << "x threads quick sort " << seconds << " seconds." << endl; + cout << std::endl << "Result: " << seconds_single / seconds << "x acceleration" << endl; + delete[] sorted_start_array; delete[] array; - delete[] sequence_sorted_array; - delete[] parallel_sorted_array; - system("pause"); + delete[] remainder_array; + delete[] result_array; return 0; } From 37694a40674d8fbd91535198eb42ff51571b19ac Mon Sep 17 00:00:00 2001 From: NFELIV <57617133+NFELIV@users.noreply.github.com> Date: Tue, 16 Jun 2020 16:01:43 +0300 Subject: [PATCH 12/12] =?UTF-8?q?=D0=BE=D1=82=D1=87=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GlotovNS_Otchet.docx | Bin 0 -> 46364 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 GlotovNS_Otchet.docx diff --git a/GlotovNS_Otchet.docx b/GlotovNS_Otchet.docx new file mode 100644 index 0000000000000000000000000000000000000000..35c3edd3ae5ca0106725575e1bd044683f4eb7e1 GIT binary patch literal 46364 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

mpTOH8ec!zwSGRQ&Lv|JV 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