From 62d7568c806dcce64e29ffef08d44e463b9ef1d0 Mon Sep 17 00:00:00 2001 From: edoardocoli Date: Sun, 25 Feb 2024 03:38:56 +0000 Subject: [PATCH] various fix --- SortingAlg/Distributed_Sorting.2283.out | 14 ++ SortingAlg/Distributed_Sorting.2284.out | 4 + SortingAlg/Makefile | 2 +- .../merge/t8/Distributed_Sorting.2263.out | 43 ++++ .../merge/t8/Distributed_Sorting.2264.out | 44 ++++ .../merge/t8/Distributed_Sorting.2265.out | 46 ++++ .../merge/t8/Distributed_Sorting.2266.out | 50 ++++ .../nomerge/t1/Distributed_Sorting.2245.out | 7 + .../nomerge/t11/Distributed_Sorting.2246.out | 7 + .../nomerge/t11/Distributed_Sorting.2247.out | 7 + .../nomerge/t111/Distributed_Sorting.2240.out | 7 + .../nomerge/t111/Distributed_Sorting.2241.out | 7 + .../nomerge/t111/Distributed_Sorting.2242.out | 7 + .../t1112/Distributed_Sorting.2237.out | 7 + .../t1112/Distributed_Sorting.2238.out | 7 + .../t1112/Distributed_Sorting.2239.out | 7 + .../nomerge/t112/Distributed_Sorting.2243.out | 7 + .../nomerge/t112/Distributed_Sorting.2244.out | 7 + .../nomerge/t12/Distributed_Sorting.2248.out | 40 ++++ .../nomerge/t12/Distributed_Sorting.2249.out | 41 ++++ .../nomerge/t12/Distributed_Sorting.2250.out | 42 ++++ .../nomerge/t12/Distributed_Sorting.2251.out | 43 ++++ .../nomerge/t12/Distributed_Sorting.2252.out | 45 ++++ .../nomerge/t12/Distributed_Sorting.2259.out | 51 ++++ .../nomerge/t124/Distributed_Sorting.2234.out | 7 + .../nomerge/t124/Distributed_Sorting.2235.out | 11 + .../nomerge/t124/Distributed_Sorting.2236.out | 19 ++ .../t1240/Distributed_Sorting.2228.out | 7 + .../t1240/Distributed_Sorting.2229.out | 11 + .../t1240/Distributed_Sorting.2230.out | 19 ++ .../t1241/Distributed_Sorting.2225.out | 10 + .../t1241/Distributed_Sorting.2226.out | 17 ++ .../t1241/Distributed_Sorting.2227.out | 31 +++ .../nomerge/t2/Distributed_Sorting.2224.out | 10 + .../nomerge/t24/Distributed_Sorting.2213.out | 10 + .../nomerge/t24/Distributed_Sorting.2214.out | 17 ++ .../nomerge/t248/Distributed_Sorting.2210.out | 10 + .../nomerge/t248/Distributed_Sorting.2211.out | 17 ++ .../nomerge/t248/Distributed_Sorting.2212.out | 31 +++ .../t24816/Distributed_Sorting.2206.out | 10 + .../t24816/Distributed_Sorting.2207.out | 17 ++ .../t24816/Distributed_Sorting.2208.out | 31 +++ .../t24816/Distributed_Sorting.2209.out | 59 +++++ .../t2481632/Distributed_Sorting.2254.out | 10 + .../t2481632/Distributed_Sorting.2255.out | 17 ++ .../t2481632/Distributed_Sorting.2256.out | 31 +++ .../t2481632/Distributed_Sorting.2257.out | 59 +++++ .../t2481632/Distributed_Sorting.2258.out | 115 +++++++++ .../nomerge/t30/Distributed_Sorting.2215.out | 94 ++++++++ .../nomerge/t30/Distributed_Sorting.2216.out | 95 ++++++++ .../nomerge/t30/Distributed_Sorting.2217.out | 96 ++++++++ .../nomerge/t30/Distributed_Sorting.2218.out | 98 ++++++++ .../nomerge/t30/Distributed_Sorting.2219.out | 99 ++++++++ .../nomerge/t30/Distributed_Sorting.2262.out | 108 +++++++++ .../nomerge/t8/Distributed_Sorting.2186.out | 28 +++ .../nomerge/t8/Distributed_Sorting.2187.out | 29 +++ .../nomerge/t8/Distributed_Sorting.2188.out | 31 +++ SortingAlg/doTest.sh | 139 ++++++++--- SortingAlg/launcher.sh | 22 ++ SortingAlg/main.cpp | 226 ++++++++++++------ .../test124/Distributed_Sorting.2042.out | 14 ++ .../test124/Distributed_Sorting.2043.out | 20 ++ .../test124/Distributed_Sorting.2044.out | 23 ++ .../test124/Distributed_Sorting.2045.out | 18 ++ .../test124/Distributed_Sorting.2046.out | 18 ++ .../test124/Distributed_Sorting.2047.out | 24 ++ .../test124/Distributed_Sorting.2048.out | 26 ++ .../test124/Distributed_Sorting.2049.out | 3 + .../test124/Distributed_Sorting.2050.out | 25 ++ .../test124/Distributed_Sorting.2052.out | 7 + .../test124/Distributed_Sorting.2053.out | 13 + .../test124/Distributed_Sorting.2054.out | 16 ++ .../test124/Distributed_Sorting.2055.out | 11 + .../test124/Distributed_Sorting.2056.out | 11 + .../test124/Distributed_Sorting.2057.out | 17 ++ .../test124/Distributed_Sorting.2058.out | 10 + .../test124/Distributed_Sorting.2061.out | 19 ++ .../test124/Distributed_Sorting.2062.out | 3 + .../test124/Distributed_Sorting.2063.out | 22 ++ .../test1240/Distributed_Sorting.2066.out | 7 + .../test1240/Distributed_Sorting.2067.out | 11 + .../test1240/Distributed_Sorting.2068.out | 19 ++ .../test1240/Distributed_Sorting.2069.out | 13 + .../test1240/Distributed_Sorting.2070.out | 11 + .../test1240/Distributed_Sorting.2071.out | 3 + .../test1240/Distributed_Sorting.2072.out | 16 ++ .../test1240/Distributed_Sorting.2073.out | 17 ++ .../test1240/Distributed_Sorting.2074.out | 22 ++ .../test24/Distributed_Sorting.2083.out | 19 ++ .../test24/Distributed_Sorting.2084.out | 3 + .../test24/Distributed_Sorting.2085.out | 22 ++ .../test24/Distributed_Sorting.2086.out | 55 +++++ .../test24/Distributed_Sorting.2087.out | 32 +++ .../test24/Distributed_Sorting.2088.out | 22 ++ .../test24/Distributed_Sorting.2089.out | 3 + .../test24/Distributed_Sorting.2090.out | 36 +++ SortingAlg/sort_big_file | Bin 0 -> 247608 bytes crushStef.zip | Bin 0 -> 265861 bytes 98 files changed, 2689 insertions(+), 105 deletions(-) create mode 100644 SortingAlg/Distributed_Sorting.2283.out create mode 100644 SortingAlg/Distributed_Sorting.2284.out create mode 100644 SortingAlg/dataset/merge/t8/Distributed_Sorting.2263.out create mode 100644 SortingAlg/dataset/merge/t8/Distributed_Sorting.2264.out create mode 100644 SortingAlg/dataset/merge/t8/Distributed_Sorting.2265.out create mode 100644 SortingAlg/dataset/merge/t8/Distributed_Sorting.2266.out create mode 100644 SortingAlg/dataset/nomerge/t1/Distributed_Sorting.2245.out create mode 100644 SortingAlg/dataset/nomerge/t11/Distributed_Sorting.2246.out create mode 100644 SortingAlg/dataset/nomerge/t11/Distributed_Sorting.2247.out create mode 100644 SortingAlg/dataset/nomerge/t111/Distributed_Sorting.2240.out create mode 100644 SortingAlg/dataset/nomerge/t111/Distributed_Sorting.2241.out create mode 100644 SortingAlg/dataset/nomerge/t111/Distributed_Sorting.2242.out create mode 100644 SortingAlg/dataset/nomerge/t1112/Distributed_Sorting.2237.out create mode 100644 SortingAlg/dataset/nomerge/t1112/Distributed_Sorting.2238.out create mode 100644 SortingAlg/dataset/nomerge/t1112/Distributed_Sorting.2239.out create mode 100644 SortingAlg/dataset/nomerge/t112/Distributed_Sorting.2243.out create mode 100644 SortingAlg/dataset/nomerge/t112/Distributed_Sorting.2244.out create mode 100644 SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2248.out create mode 100644 SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2249.out create mode 100644 SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2250.out create mode 100644 SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2251.out create mode 100644 SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2252.out create mode 100644 SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2259.out create mode 100644 SortingAlg/dataset/nomerge/t124/Distributed_Sorting.2234.out create mode 100644 SortingAlg/dataset/nomerge/t124/Distributed_Sorting.2235.out create mode 100644 SortingAlg/dataset/nomerge/t124/Distributed_Sorting.2236.out create mode 100644 SortingAlg/dataset/nomerge/t1240/Distributed_Sorting.2228.out create mode 100644 SortingAlg/dataset/nomerge/t1240/Distributed_Sorting.2229.out create mode 100644 SortingAlg/dataset/nomerge/t1240/Distributed_Sorting.2230.out create mode 100644 SortingAlg/dataset/nomerge/t1241/Distributed_Sorting.2225.out create mode 100644 SortingAlg/dataset/nomerge/t1241/Distributed_Sorting.2226.out create mode 100644 SortingAlg/dataset/nomerge/t1241/Distributed_Sorting.2227.out create mode 100644 SortingAlg/dataset/nomerge/t2/Distributed_Sorting.2224.out create mode 100644 SortingAlg/dataset/nomerge/t24/Distributed_Sorting.2213.out create mode 100644 SortingAlg/dataset/nomerge/t24/Distributed_Sorting.2214.out create mode 100644 SortingAlg/dataset/nomerge/t248/Distributed_Sorting.2210.out create mode 100644 SortingAlg/dataset/nomerge/t248/Distributed_Sorting.2211.out create mode 100644 SortingAlg/dataset/nomerge/t248/Distributed_Sorting.2212.out create mode 100644 SortingAlg/dataset/nomerge/t24816/Distributed_Sorting.2206.out create mode 100644 SortingAlg/dataset/nomerge/t24816/Distributed_Sorting.2207.out create mode 100644 SortingAlg/dataset/nomerge/t24816/Distributed_Sorting.2208.out create mode 100644 SortingAlg/dataset/nomerge/t24816/Distributed_Sorting.2209.out create mode 100644 SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2254.out create mode 100644 SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2255.out create mode 100644 SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2256.out create mode 100644 SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2257.out create mode 100644 SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2258.out create mode 100644 SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2215.out create mode 100644 SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2216.out create mode 100644 SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2217.out create mode 100644 SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2218.out create mode 100644 SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2219.out create mode 100644 SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2262.out create mode 100644 SortingAlg/dataset/nomerge/t8/Distributed_Sorting.2186.out create mode 100644 SortingAlg/dataset/nomerge/t8/Distributed_Sorting.2187.out create mode 100644 SortingAlg/dataset/nomerge/t8/Distributed_Sorting.2188.out create mode 100755 SortingAlg/launcher.sh create mode 100644 SortingAlg/outputs/test124/Distributed_Sorting.2042.out create mode 100644 SortingAlg/outputs/test124/Distributed_Sorting.2043.out create mode 100644 SortingAlg/outputs/test124/Distributed_Sorting.2044.out create mode 100644 SortingAlg/outputs/test124/Distributed_Sorting.2045.out create mode 100644 SortingAlg/outputs/test124/Distributed_Sorting.2046.out create mode 100644 SortingAlg/outputs/test124/Distributed_Sorting.2047.out create mode 100644 SortingAlg/outputs/test124/Distributed_Sorting.2048.out create mode 100644 SortingAlg/outputs/test124/Distributed_Sorting.2049.out create mode 100644 SortingAlg/outputs/test124/Distributed_Sorting.2050.out create mode 100644 SortingAlg/outputs/test124/Distributed_Sorting.2052.out create mode 100644 SortingAlg/outputs/test124/Distributed_Sorting.2053.out create mode 100644 SortingAlg/outputs/test124/Distributed_Sorting.2054.out create mode 100644 SortingAlg/outputs/test124/Distributed_Sorting.2055.out create mode 100644 SortingAlg/outputs/test124/Distributed_Sorting.2056.out create mode 100644 SortingAlg/outputs/test124/Distributed_Sorting.2057.out create mode 100644 SortingAlg/outputs/test124/Distributed_Sorting.2058.out create mode 100644 SortingAlg/outputs/test124/Distributed_Sorting.2061.out create mode 100644 SortingAlg/outputs/test124/Distributed_Sorting.2062.out create mode 100644 SortingAlg/outputs/test124/Distributed_Sorting.2063.out create mode 100644 SortingAlg/outputs/test1240/Distributed_Sorting.2066.out create mode 100644 SortingAlg/outputs/test1240/Distributed_Sorting.2067.out create mode 100644 SortingAlg/outputs/test1240/Distributed_Sorting.2068.out create mode 100644 SortingAlg/outputs/test1240/Distributed_Sorting.2069.out create mode 100644 SortingAlg/outputs/test1240/Distributed_Sorting.2070.out create mode 100644 SortingAlg/outputs/test1240/Distributed_Sorting.2071.out create mode 100644 SortingAlg/outputs/test1240/Distributed_Sorting.2072.out create mode 100644 SortingAlg/outputs/test1240/Distributed_Sorting.2073.out create mode 100644 SortingAlg/outputs/test1240/Distributed_Sorting.2074.out create mode 100644 SortingAlg/outputs/test24/Distributed_Sorting.2083.out create mode 100644 SortingAlg/outputs/test24/Distributed_Sorting.2084.out create mode 100644 SortingAlg/outputs/test24/Distributed_Sorting.2085.out create mode 100644 SortingAlg/outputs/test24/Distributed_Sorting.2086.out create mode 100644 SortingAlg/outputs/test24/Distributed_Sorting.2087.out create mode 100644 SortingAlg/outputs/test24/Distributed_Sorting.2088.out create mode 100644 SortingAlg/outputs/test24/Distributed_Sorting.2089.out create mode 100644 SortingAlg/outputs/test24/Distributed_Sorting.2090.out create mode 100755 SortingAlg/sort_big_file create mode 100644 crushStef.zip diff --git a/SortingAlg/Distributed_Sorting.2283.out b/SortingAlg/Distributed_Sorting.2283.out new file mode 100644 index 0000000..bd8bac6 --- /dev/null +++ b/SortingAlg/Distributed_Sorting.2283.out @@ -0,0 +1,14 @@ +Using 1 nodes for sorting 1Gb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 123.565s => Time to read file from offset 0 to 134217728 in Process 1/1 + 391.018s => Time to sort elements in Process 1/1 memory + 252.293s => Time to write '/mnt/raid/tmp/SortedRun7528_aYKFzf' and fill it up with 134217728 sorted elements by Process 1/1 +767.55s => Time function sortedRuns() in Process 1/1 + +Starting the merge process for 1 files + +(256=size heap) +939.779s => Time function kMerge() in Process 1/1 + +Sorted file '/mnt/raid/tmp/__134217728.bin.sort' +28.4624min => FULL EXECUTION TIME diff --git a/SortingAlg/Distributed_Sorting.2284.out b/SortingAlg/Distributed_Sorting.2284.out new file mode 100644 index 0000000..70172a9 --- /dev/null +++ b/SortingAlg/Distributed_Sorting.2284.out @@ -0,0 +1,4 @@ +Using 1 nodes for sorting 1Gb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 16.983s => Time to read file from offset 0 to 134217728 in Process 1/1 + 391.885s => Time to sort elements in Process 1/1 memory diff --git a/SortingAlg/Makefile b/SortingAlg/Makefile index 657e17c..3f4d8e1 100644 --- a/SortingAlg/Makefile +++ b/SortingAlg/Makefile @@ -2,7 +2,7 @@ CC = mpicxx CXX = mpicxx # Extra flags to give to the processor compiler -CFLAGS = -g -Wall -Werror -Wextra +CFLAGS = -g -Wall -Werror -Wextra -O3 # SRC = main.cpp diff --git a/SortingAlg/dataset/merge/t8/Distributed_Sorting.2263.out b/SortingAlg/dataset/merge/t8/Distributed_Sorting.2263.out new file mode 100644 index 0000000..cba12fb --- /dev/null +++ b/SortingAlg/dataset/merge/t8/Distributed_Sorting.2263.out @@ -0,0 +1,43 @@ +Using 1 nodes for sorting 8Gb file '/mnt/raid/testlists/8Gib.bin' of 1073741824 elements + + 125.021s => Time to read file from offset 0 to 134217728 in Process 1/1 + 392.506s => Time to sort elements in Process 1/1 memory + 256.966s => Time to write '/mnt/raid/tmp/SortedRun7308_YnirkI' and fill it up with 134217728 sorted elements by Process 1/1 + 123.317s => Time to read file from offset 134217728 to 268435456 in Process 1/1 + 394.761s => Time to sort elements in Process 1/1 memory + 258.077s => Time to write '/mnt/raid/tmp/SortedRun7308_psxpII' and fill it up with 134217728 sorted elements by Process 1/1 + 121.514s => Time to read file from offset 268435456 to 402653184 in Process 1/1 + 393.509s => Time to sort elements in Process 1/1 memory + 260.84s => Time to write '/mnt/raid/tmp/SortedRun7308_kxStfH' and fill it up with 134217728 sorted elements by Process 1/1 + 121.853s => Time to read file from offset 402653184 to 536870912 in Process 1/1 + 392.008s => Time to sort elements in Process 1/1 memory + 258.777s => Time to write '/mnt/raid/tmp/SortedRun7308_Gy9v9F' and fill it up with 134217728 sorted elements by Process 1/1 + 120.691s => Time to read file from offset 536870912 to 671088640 in Process 1/1 + 394.488s => Time to sort elements in Process 1/1 memory + 259.778s => Time to write '/mnt/raid/tmp/SortedRun7308_40gKJG' and fill it up with 134217728 sorted elements by Process 1/1 + 121.149s => Time to read file from offset 671088640 to 805306368 in Process 1/1 + 393.816s => Time to sort elements in Process 1/1 memory + 257.576s => Time to write '/mnt/raid/tmp/SortedRun7308_VcCNIG' and fill it up with 134217728 sorted elements by Process 1/1 + 121.099s => Time to read file from offset 805306368 to 939524096 in Process 1/1 + 390.267s => Time to sort elements in Process 1/1 memory + 254.947s => Time to write '/mnt/raid/tmp/SortedRun7308_bBfu4E' and fill it up with 134217728 sorted elements by Process 1/1 + 120.534s => Time to read file from offset 939524096 to 1073741824 in Process 1/1 + 388.829s => Time to sort elements in Process 1/1 memory + 255.417s => Time to write '/mnt/raid/tmp/SortedRun7308_fWP6kF' and fill it up with 134217728 sorted elements by Process 1/1 +6179.92s => Time function sortedRuns() in Process 1/1 +Merging '/mnt/raid/tmp//SortedRun7308_40gKJG' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun7308_kxStfH' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun7308_VcCNIG' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun7308_psxpII' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun7308_bBfu4E' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun7308_fWP6kF' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun7308_YnirkI' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun7308_Gy9v9F' of size 1Gb + +Starting the merge process for 8 files + +(0=size heap) +0.666657s => Time function kMerge() in Process 1/1 + +Sorted file '/mnt/raid/tmp/8Gib.bin.sort' +103.017min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/merge/t8/Distributed_Sorting.2264.out b/SortingAlg/dataset/merge/t8/Distributed_Sorting.2264.out new file mode 100644 index 0000000..a89a8fb --- /dev/null +++ b/SortingAlg/dataset/merge/t8/Distributed_Sorting.2264.out @@ -0,0 +1,44 @@ +Using 2 nodes for sorting 8Gb file '/mnt/raid/testlists/8Gib.bin' of 1073741824 elements + + 195.392s => Time to read file from offset 0 to 134217728 in Process 1/2 + 196.217s => Time to read file from offset 134217728 to 268435456 in Process 2/2 + 392.55s => Time to sort elements in Process 1/2 memory + 394.784s => Time to sort elements in Process 2/2 memory + 488.789s => Time to write '/mnt/raid/tmp/SortedRun8002_D1JbW0' and fill it up with 134217728 sorted elements by Process 1/2 + 490.001s => Time to write '/mnt/raid/tmp/SortedRun8002_Pkchr3' and fill it up with 134217728 sorted elements by Process 2/2 + 185.928s => Time to read file from offset 268435456 to 402653184 in Process 1/2 + 186.457s => Time to read file from offset 402653184 to 536870912 in Process 2/2 + 392.815s => Time to sort elements in Process 1/2 memory + 391.905s => Time to sort elements in Process 2/2 memory + 469.102s => Time to write '/mnt/raid/tmp/SortedRun8002_KbiLk4' and fill it up with 134217728 sorted elements by Process 1/2 + 470.407s => Time to write '/mnt/raid/tmp/SortedRun8002_M0MIN2' and fill it up with 134217728 sorted elements by Process 2/2 + 192.369s => Time to read file from offset 536870912 to 671088640 in Process 1/2 + 192.967s => Time to read file from offset 671088640 to 805306368 in Process 2/2 + 394.502s => Time to sort elements in Process 1/2 memory + 393.884s => Time to sort elements in Process 2/2 memory + 474.569s => Time to write '/mnt/raid/tmp/SortedRun8002_f5m4v4' and fill it up with 134217728 sorted elements by Process 1/2 + 476.309s => Time to write '/mnt/raid/tmp/SortedRun8002_J2G0I3' and fill it up with 134217728 sorted elements by Process 2/2 + 192.734s => Time to read file from offset 805306368 to 939524096 in Process 1/2 + 191.823s => Time to read file from offset 939524096 to 1073741824 in Process 2/2 + 390.273s => Time to sort elements in Process 1/2 memory + 388.867s => Time to sort elements in Process 2/2 memory + 469.608s => Time to write '/mnt/raid/tmp/SortedRun8002_on4MA3' and fill it up with 134217728 sorted elements by Process 1/2 +4240.11s => Time function sortedRuns() in Process 1/2 + 470.038s => Time to write '/mnt/raid/tmp/SortedRun8002_dZLgu1' and fill it up with 134217728 sorted elements by Process 2/2 +4244.96s => Time function sortedRuns() in Process 2/2 +Merging '/mnt/raid/tmp//SortedRun8002_KbiLk4' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun8002_dZLgu1' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun8002_D1JbW0' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun8002_Pkchr3' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun8002_J2G0I3' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun8002_M0MIN2' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun8002_on4MA3' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun8002_f5m4v4' of size 1Gb + +Starting the merge process for 8 files + +(0=size heap) +0.94913s => Time function kMerge() in Process 1/2 + +Sorted file '/mnt/raid/tmp/8Gib.bin.sort' +70.7709min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/merge/t8/Distributed_Sorting.2265.out b/SortingAlg/dataset/merge/t8/Distributed_Sorting.2265.out new file mode 100644 index 0000000..be66e96 --- /dev/null +++ b/SortingAlg/dataset/merge/t8/Distributed_Sorting.2265.out @@ -0,0 +1,46 @@ +Using 4 nodes for sorting 8Gb file '/mnt/raid/testlists/8Gib.bin' of 1073741824 elements + + 367.849s => Time to read file from offset 0 to 134217728 in Process 1/4 + 368.923s => Time to read file from offset 268435456 to 402653184 in Process 3/4 + 369.24s => Time to read file from offset 402653184 to 536870912 in Process 4/4 + 369.337s => Time to read file from offset 134217728 to 268435456 in Process 2/4 + 392.493s => Time to sort elements in Process 1/4 memory + 391.661s => Time to sort elements in Process 4/4 memory + 392.247s => Time to sort elements in Process 3/4 memory + 395.21s => Time to sort elements in Process 2/4 memory + 695.034s => Time to write '/mnt/raid/tmp/SortedRun5219_H5dyzD' and fill it up with 134217728 sorted elements by Process 1/4 + 695.032s => Time to write '/mnt/raid/tmp/SortedRun5219_RFIN7Z' and fill it up with 134217728 sorted elements by Process 4/4 + 694.796s => Time to write '/mnt/raid/tmp/SortedRun5219_I4e2bV' and fill it up with 134217728 sorted elements by Process 3/4 + 694.706s => Time to write '/mnt/raid/tmp/SortedRun5219_DfOfxq' and fill it up with 134217728 sorted elements by Process 2/4 + 364.528s => Time to read file from offset 939524096 to 1073741824 in Process 4/4 + 367.066s => Time to read file from offset 536870912 to 671088640 in Process 1/4 + 367.547s => Time to read file from offset 805306368 to 939524096 in Process 3/4 + 365.216s => Time to read file from offset 671088640 to 805306368 in Process 2/4 + 388.894s => Time to sort elements in Process 4/4 memory + 390.317s => Time to sort elements in Process 3/4 memory + 394.148s => Time to sort elements in Process 2/4 memory + 395.88s => Time to sort elements in Process 1/4 memory + 678.019s => Time to write '/mnt/raid/tmp/SortedRun5219_MWL2TW' and fill it up with 134217728 sorted elements by Process 4/4 +2888.14s => Time function sortedRuns() in Process 4/4 + 684.452s => Time to write '/mnt/raid/tmp/SortedRun5219_JkFiOX' and fill it up with 134217728 sorted elements by Process 3/4 +2899.61s => Time function sortedRuns() in Process 3/4 + 684.156s => Time to write '/mnt/raid/tmp/SortedRun5219_N7RSqH' and fill it up with 134217728 sorted elements by Process 1/4 +2904.13s => Time function sortedRuns() in Process 1/4 + 684.75s => Time to write '/mnt/raid/tmp/SortedRun5219_CN2wPp' and fill it up with 134217728 sorted elements by Process 2/4 +2904.59s => Time function sortedRuns() in Process 2/4 +Merging '/mnt/raid/tmp//SortedRun5219_CN2wPp' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun5219_RFIN7Z' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun5219_N7RSqH' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun5219_MWL2TW' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun5219_JkFiOX' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun5219_DfOfxq' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun5219_H5dyzD' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun5219_I4e2bV' of size 1Gb + +Starting the merge process for 8 files + +(0=size heap) +0.929754s => Time function kMerge() in Process 1/4 + +Sorted file '/mnt/raid/tmp/8Gib.bin.sort' +48.4315min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/merge/t8/Distributed_Sorting.2266.out b/SortingAlg/dataset/merge/t8/Distributed_Sorting.2266.out new file mode 100644 index 0000000..37fb260 --- /dev/null +++ b/SortingAlg/dataset/merge/t8/Distributed_Sorting.2266.out @@ -0,0 +1,50 @@ +Using 8 nodes for sorting 8Gb file '/mnt/raid/testlists/8Gib.bin' of 1073741824 elements + + 730.987s => Time to read file from offset 939524096 to 1073741824 in Process 8/8 + 736.705s => Time to read file from offset 0 to 134217728 in Process 1/8 + 737.016s => Time to read file from offset 805306368 to 939524096 in Process 7/8 + 737.135s => Time to read file from offset 536870912 to 671088640 in Process 5/8 + 737.244s => Time to read file from offset 268435456 to 402653184 in Process 3/8 + 737.359s => Time to read file from offset 671088640 to 805306368 in Process 6/8 + 737.513s => Time to read file from offset 134217728 to 268435456 in Process 2/8 + 737.547s => Time to read file from offset 402653184 to 536870912 in Process 4/8 + 388.856s => Time to sort elements in Process 8/8 memory + 390.943s => Time to sort elements in Process 7/8 memory + 391.707s => Time to sort elements in Process 4/8 memory + 392.597s => Time to sort elements in Process 3/8 memory + 393.159s => Time to sort elements in Process 1/8 memory + 394.043s => Time to sort elements in Process 6/8 memory + 394.571s => Time to sort elements in Process 5/8 memory + 394.702s => Time to sort elements in Process 2/8 memory + 1354.47s => Time to write '/mnt/raid/tmp/SortedRun8544_Q4gafC' and fill it up with 134217728 sorted elements by Process 8/8 +2474.51s => Time function sortedRuns() in Process 8/8 + 1387.96s => Time to write '/mnt/raid/tmp/SortedRun8544_AdJ0Se' and fill it up with 134217728 sorted elements by Process 7/8 +2516.3s => Time function sortedRuns() in Process 7/8 + 1394.05s => Time to write '/mnt/raid/tmp/SortedRun8544_2VsfMy' and fill it up with 134217728 sorted elements by Process 4/8 +2524.23s => Time function sortedRuns() in Process 4/8 + 1394.79s => Time to write '/mnt/raid/tmp/SortedRun8544_HLgios' and fill it up with 134217728 sorted elements by Process 3/8 +2525.87s => Time function sortedRuns() in Process 3/8 + 1395.51s => Time to write '/mnt/raid/tmp/SortedRun8544_YHdQnd' and fill it up with 134217728 sorted elements by Process 1/8 +2526.6s => Time function sortedRuns() in Process 1/8 + 1394.3s => Time to write '/mnt/raid/tmp/SortedRun8544_tHjyaH' and fill it up with 134217728 sorted elements by Process 5/8 +2526.61s => Time function sortedRuns() in Process 5/8 + 1394.27s => Time to write '/mnt/raid/tmp/SortedRun8544_pnSflZ' and fill it up with 134217728 sorted elements by Process 2/8 + 1394.85s => Time to write '/mnt/raid/tmp/SortedRun8544_3yAfWS' and fill it up with 134217728 sorted elements by Process 6/8 +2527.63s => Time function sortedRuns() in Process 2/8 +2527.63s => Time function sortedRuns() in Process 6/8 +Merging '/mnt/raid/tmp//SortedRun8544_YHdQnd' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun8544_3yAfWS' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun8544_tHjyaH' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun8544_HLgios' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun8544_2VsfMy' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun8544_pnSflZ' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun8544_Q4gafC' of size 1Gb +Merging '/mnt/raid/tmp//SortedRun8544_AdJ0Se' of size 1Gb + +Starting the merge process for 8 files + +(0=size heap) +0.736936s => Time function kMerge() in Process 1/8 + +Sorted file '/mnt/raid/tmp/8Gib.bin.sort' +42.146min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t1/Distributed_Sorting.2245.out b/SortingAlg/dataset/nomerge/t1/Distributed_Sorting.2245.out new file mode 100644 index 0000000..50d708e --- /dev/null +++ b/SortingAlg/dataset/nomerge/t1/Distributed_Sorting.2245.out @@ -0,0 +1,7 @@ +Using 1 nodes for sorting 1Gb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 16.97s => Time to read file from offset 0 to 134217728 in Process 1/1 + 391.697s => Time to sort elements in Process 1/1 memory + 252.499s => Time to write '/mnt/raid/tmp/SortedRun498_dSkQrv' and fill it up with 134217728 sorted elements by Process 1/1 +661.414s => Time function sortedRuns() in Process 1/1 +11.0286min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t11/Distributed_Sorting.2246.out b/SortingAlg/dataset/nomerge/t11/Distributed_Sorting.2246.out new file mode 100644 index 0000000..e4f206b --- /dev/null +++ b/SortingAlg/dataset/nomerge/t11/Distributed_Sorting.2246.out @@ -0,0 +1,7 @@ +Using 1 nodes for sorting 1Gb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 16.8524s => Time to read file from offset 0 to 134217728 in Process 1/1 + 392.105s => Time to sort elements in Process 1/1 memory + 490.024s => Time to write '/mnt/raid/tmp/SortedRun5949_FWZM2R' and fill it up with 134217728 sorted elements by Process 1/1 +899.417s => Time function sortedRuns() in Process 1/1 +14.9953min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t11/Distributed_Sorting.2247.out b/SortingAlg/dataset/nomerge/t11/Distributed_Sorting.2247.out new file mode 100644 index 0000000..4e610ce --- /dev/null +++ b/SortingAlg/dataset/nomerge/t11/Distributed_Sorting.2247.out @@ -0,0 +1,7 @@ +Using 1 nodes for sorting 1Gb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 16.9233s => Time to read file from offset 0 to 134217728 in Process 1/1 + 391.263s => Time to sort elements in Process 1/1 memory + 490.022s => Time to write '/mnt/raid/tmp/SortedRun5135_AGnOei' and fill it up with 134217728 sorted elements by Process 1/1 +898.625s => Time function sortedRuns() in Process 1/1 +14.9824min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t111/Distributed_Sorting.2240.out b/SortingAlg/dataset/nomerge/t111/Distributed_Sorting.2240.out new file mode 100644 index 0000000..9f6ac18 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t111/Distributed_Sorting.2240.out @@ -0,0 +1,7 @@ +Using 1 nodes for sorting 1Gb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 210.403s => Time to read file from offset 0 to 134217728 in Process 1/1 + 391.426s => Time to sort elements in Process 1/1 memory + 513.168s => Time to write '/mnt/raid/tmp/SortedRun4924_Lmw4Ly' and fill it up with 134217728 sorted elements by Process 1/1 +1116.17s => Time function sortedRuns() in Process 1/1 +18.6079min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t111/Distributed_Sorting.2241.out b/SortingAlg/dataset/nomerge/t111/Distributed_Sorting.2241.out new file mode 100644 index 0000000..902f22a --- /dev/null +++ b/SortingAlg/dataset/nomerge/t111/Distributed_Sorting.2241.out @@ -0,0 +1,7 @@ +Using 1 nodes for sorting 1Gb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 210.25s => Time to read file from offset 0 to 134217728 in Process 1/1 + 391.213s => Time to sort elements in Process 1/1 memory + 513.452s => Time to write '/mnt/raid/tmp/SortedRun4924_GucgU5' and fill it up with 134217728 sorted elements by Process 1/1 +1116.3s => Time function sortedRuns() in Process 1/1 +18.6112min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t111/Distributed_Sorting.2242.out b/SortingAlg/dataset/nomerge/t111/Distributed_Sorting.2242.out new file mode 100644 index 0000000..699a891 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t111/Distributed_Sorting.2242.out @@ -0,0 +1,7 @@ +Using 1 nodes for sorting 1Gb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 17.0412s => Time to read file from offset 0 to 134217728 in Process 1/1 + 391.707s => Time to sort elements in Process 1/1 memory + 345.003s => Time to write '/mnt/raid/tmp/SortedRun4924_5OHB2V' and fill it up with 134217728 sorted elements by Process 1/1 +754.012s => Time function sortedRuns() in Process 1/1 +12.572min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t1112/Distributed_Sorting.2237.out b/SortingAlg/dataset/nomerge/t1112/Distributed_Sorting.2237.out new file mode 100644 index 0000000..05dc1e3 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t1112/Distributed_Sorting.2237.out @@ -0,0 +1,7 @@ +Using 1 nodes for sorting 1Gb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 297.12s => Time to read file from offset 0 to 134217728 in Process 1/1 + 391.466s => Time to sort elements in Process 1/1 memory + 580.207s => Time to write '/mnt/raid/tmp/SortedRun3616_FNfIRH' and fill it up with 134217728 sorted elements by Process 1/1 +1269.32s => Time function sortedRuns() in Process 1/1 +21.161min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t1112/Distributed_Sorting.2238.out b/SortingAlg/dataset/nomerge/t1112/Distributed_Sorting.2238.out new file mode 100644 index 0000000..2c420f1 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t1112/Distributed_Sorting.2238.out @@ -0,0 +1,7 @@ +Using 1 nodes for sorting 1Gb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 296.327s => Time to read file from offset 0 to 134217728 in Process 1/1 + 391.019s => Time to sort elements in Process 1/1 memory + 581.33s => Time to write '/mnt/raid/tmp/SortedRun4447_KJxzUx' and fill it up with 134217728 sorted elements by Process 1/1 +1269.03s => Time function sortedRuns() in Process 1/1 +21.1563min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t1112/Distributed_Sorting.2239.out b/SortingAlg/dataset/nomerge/t1112/Distributed_Sorting.2239.out new file mode 100644 index 0000000..cbea3e8 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t1112/Distributed_Sorting.2239.out @@ -0,0 +1,7 @@ +Using 1 nodes for sorting 1Gb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 295.853s => Time to read file from offset 0 to 134217728 in Process 1/1 + 390.947s => Time to sort elements in Process 1/1 memory + 581.572s => Time to write '/mnt/raid/tmp/SortedRun4447_EjoPsJ' and fill it up with 134217728 sorted elements by Process 1/1 +1268.8s => Time function sortedRuns() in Process 1/1 +21.1525min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t112/Distributed_Sorting.2243.out b/SortingAlg/dataset/nomerge/t112/Distributed_Sorting.2243.out new file mode 100644 index 0000000..ec724f7 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t112/Distributed_Sorting.2243.out @@ -0,0 +1,7 @@ +Using 1 nodes for sorting 1Gb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 17.0038s => Time to read file from offset 0 to 134217728 in Process 1/1 + 391.258s => Time to sort elements in Process 1/1 memory + 477.688s => Time to write '/mnt/raid/tmp/SortedRun2441_kkfBmP' and fill it up with 134217728 sorted elements by Process 1/1 +886.366s => Time function sortedRuns() in Process 1/1 +14.7784min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t112/Distributed_Sorting.2244.out b/SortingAlg/dataset/nomerge/t112/Distributed_Sorting.2244.out new file mode 100644 index 0000000..6b7aaf5 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t112/Distributed_Sorting.2244.out @@ -0,0 +1,7 @@ +Using 1 nodes for sorting 1Gb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 16.9465s => Time to read file from offset 0 to 134217728 in Process 1/1 + 391.37s => Time to sort elements in Process 1/1 memory + 477.184s => Time to write '/mnt/raid/tmp/SortedRun2441_EwdFJz' and fill it up with 134217728 sorted elements by Process 1/1 +885.707s => Time function sortedRuns() in Process 1/1 +14.7672min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2248.out b/SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2248.out new file mode 100644 index 0000000..fd9d4a1 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2248.out @@ -0,0 +1,40 @@ +Using 1 nodes for sorting 12Gb file '/mnt/raid/testlists/12Gib.bin' of 1610612736 elements + + 123.674s => Time to read file from offset 0 to 134217728 in Process 1/1 + 387.545s => Time to sort elements in Process 1/1 memory + 254.075s => Time to write '/mnt/raid/tmp/SortedRun8546_51dZWV' and fill it up with 134217728 sorted elements by Process 1/1 + 122.535s => Time to read file from offset 134217728 to 268435456 in Process 1/1 + 390.734s => Time to sort elements in Process 1/1 memory + 245.565s => Time to write '/mnt/raid/tmp/SortedRun8546_FdnipW' and fill it up with 134217728 sorted elements by Process 1/1 + 121.776s => Time to read file from offset 268435456 to 402653184 in Process 1/1 + 399.993s => Time to sort elements in Process 1/1 memory + 254.164s => Time to write '/mnt/raid/tmp/SortedRun8546_eZpWBV' and fill it up with 134217728 sorted elements by Process 1/1 + 121.3s => Time to read file from offset 402653184 to 536870912 in Process 1/1 + 391.085s => Time to sort elements in Process 1/1 memory + 253.299s => Time to write '/mnt/raid/tmp/SortedRun8546_IJCDSV' and fill it up with 134217728 sorted elements by Process 1/1 + 120.149s => Time to read file from offset 536870912 to 671088640 in Process 1/1 + 392.704s => Time to sort elements in Process 1/1 memory + 275.377s => Time to write '/mnt/raid/tmp/SortedRun8546_v22oCT' and fill it up with 134217728 sorted elements by Process 1/1 + 120.863s => Time to read file from offset 671088640 to 805306368 in Process 1/1 + 399.04s => Time to sort elements in Process 1/1 memory + 268.346s => Time to write '/mnt/raid/tmp/SortedRun8546_rASgST' and fill it up with 134217728 sorted elements by Process 1/1 + 121.019s => Time to read file from offset 805306368 to 939524096 in Process 1/1 + 392.154s => Time to sort elements in Process 1/1 memory + 267.695s => Time to write '/mnt/raid/tmp/SortedRun8546_jMc5iV' and fill it up with 134217728 sorted elements by Process 1/1 + 121.244s => Time to read file from offset 939524096 to 1073741824 in Process 1/1 + 391.492s => Time to sort elements in Process 1/1 memory + 266.826s => Time to write '/mnt/raid/tmp/SortedRun8546_0Q12NV' and fill it up with 134217728 sorted elements by Process 1/1 + 118.996s => Time to read file from offset 1073741824 to 1207959552 in Process 1/1 + 396.714s => Time to sort elements in Process 1/1 memory + 268.82s => Time to write '/mnt/raid/tmp/SortedRun8546_MN2G7V' and fill it up with 134217728 sorted elements by Process 1/1 + 120.918s => Time to read file from offset 1207959552 to 1342177280 in Process 1/1 + 389.821s => Time to sort elements in Process 1/1 memory + 268.481s => Time to write '/mnt/raid/tmp/SortedRun8546_HF6k3T' and fill it up with 134217728 sorted elements by Process 1/1 + 119.787s => Time to read file from offset 1342177280 to 1476395008 in Process 1/1 + 389.202s => Time to sort elements in Process 1/1 memory + 268.937s => Time to write '/mnt/raid/tmp/SortedRun8546_xD6CKU' and fill it up with 134217728 sorted elements by Process 1/1 + 119.112s => Time to read file from offset 1476395008 to 1610612736 in Process 1/1 + 390.925s => Time to sort elements in Process 1/1 memory + 261.827s => Time to write '/mnt/raid/tmp/SortedRun8546_JNGtaX' and fill it up with 134217728 sorted elements by Process 1/1 +9319.42s => Time function sortedRuns() in Process 1/1 +155.329min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2249.out b/SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2249.out new file mode 100644 index 0000000..9c8733a --- /dev/null +++ b/SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2249.out @@ -0,0 +1,41 @@ +Using 2 nodes for sorting 12Gb file '/mnt/raid/testlists/12Gib.bin' of 1610612736 elements + + 189.041s => Time to read file from offset 0 to 134217728 in Process 1/2 + 189.216s => Time to read file from offset 134217728 to 268435456 in Process 2/2 + 387.962s => Time to sort elements in Process 1/2 memory + 390.852s => Time to sort elements in Process 2/2 memory + 485.618s => Time to write '/mnt/raid/tmp/SortedRun2808_I8xbvL' and fill it up with 134217728 sorted elements by Process 1/2 + 486.975s => Time to write '/mnt/raid/tmp/SortedRun2808_kMP4Fh' and fill it up with 134217728 sorted elements by Process 2/2 + 185.107s => Time to read file from offset 268435456 to 402653184 in Process 1/2 + 185.749s => Time to read file from offset 402653184 to 536870912 in Process 2/2 + 391.205s => Time to sort elements in Process 2/2 memory + 399.943s => Time to sort elements in Process 1/2 memory + 493.099s => Time to write '/mnt/raid/tmp/SortedRun2808_B6BNkh' and fill it up with 134217728 sorted elements by Process 2/2 + 495.089s => Time to write '/mnt/raid/tmp/SortedRun2808_HCG9rH' and fill it up with 134217728 sorted elements by Process 1/2 + 190.547s => Time to read file from offset 671088640 to 805306368 in Process 2/2 + 189.884s => Time to read file from offset 536870912 to 671088640 in Process 1/2 + 392.4s => Time to sort elements in Process 1/2 memory + 399.012s => Time to sort elements in Process 2/2 memory + 481.678s => Time to write '/mnt/raid/tmp/SortedRun2808_NwCl6J' and fill it up with 134217728 sorted elements by Process 1/2 + 482.831s => Time to write '/mnt/raid/tmp/SortedRun2808_z6xTqg' and fill it up with 134217728 sorted elements by Process 2/2 + 185.183s => Time to read file from offset 805306368 to 939524096 in Process 1/2 + 185.121s => Time to read file from offset 939524096 to 1073741824 in Process 2/2 + 392.202s => Time to sort elements in Process 1/2 memory + 390.98s => Time to sort elements in Process 2/2 memory + 474.186s => Time to write '/mnt/raid/tmp/SortedRun2808_DDe1qJ' and fill it up with 134217728 sorted elements by Process 1/2 + 474.752s => Time to write '/mnt/raid/tmp/SortedRun2808_dUy6zg' and fill it up with 134217728 sorted elements by Process 2/2 + 193.497s => Time to read file from offset 1073741824 to 1207959552 in Process 1/2 + 194.081s => Time to read file from offset 1207959552 to 1342177280 in Process 2/2 + 391.32s => Time to sort elements in Process 2/2 memory + 397.022s => Time to sort elements in Process 1/2 memory + 470.211s => Time to write '/mnt/raid/tmp/SortedRun2808_uMPv5f' and fill it up with 134217728 sorted elements by Process 2/2 + 471.669s => Time to write '/mnt/raid/tmp/SortedRun2808_sWy5zK' and fill it up with 134217728 sorted elements by Process 1/2 + 186.745s => Time to read file from offset 1476395008 to 1610612736 in Process 2/2 + 187.117s => Time to read file from offset 1342177280 to 1476395008 in Process 1/2 + 390.347s => Time to sort elements in Process 2/2 memory + 389.515s => Time to sort elements in Process 1/2 memory + 462.818s => Time to write '/mnt/raid/tmp/SortedRun2808_nMe1tf' and fill it up with 134217728 sorted elements by Process 2/2 +6357.95s => Time function sortedRuns() in Process 2/2 + 462.647s => Time to write '/mnt/raid/tmp/SortedRun2808_auW8OK' and fill it up with 134217728 sorted elements by Process 1/2 +6361.41s => Time function sortedRuns() in Process 1/2 +106.03min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2250.out b/SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2250.out new file mode 100644 index 0000000..10d0a82 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2250.out @@ -0,0 +1,42 @@ +Using 3 nodes for sorting 12Gb file '/mnt/raid/testlists/12Gib.bin' of 1610612736 elements + + 276.562s => Time to read file from offset 0 to 134217728 in Process 1/3 + 276.731s => Time to read file from offset 134217728 to 268435456 in Process 2/3 + 277.29s => Time to read file from offset 268435456 to 402653184 in Process 3/3 + 387.734s => Time to sort elements in Process 1/3 memory + 390.67s => Time to sort elements in Process 2/3 memory + 399.436s => Time to sort elements in Process 3/3 memory + 560.528s => Time to write '/mnt/raid/tmp/SortedRun789_ssoQGw' and fill it up with 134217728 sorted elements by Process 1/3 + 565.596s => Time to write '/mnt/raid/tmp/SortedRun789_q1ZzO9' and fill it up with 134217728 sorted elements by Process 2/3 + 563.457s => Time to write '/mnt/raid/tmp/SortedRun789_XUby6q' and fill it up with 134217728 sorted elements by Process 3/3 + 263.654s => Time to read file from offset 402653184 to 536870912 in Process 1/3 + 268.342s => Time to read file from offset 536870912 to 671088640 in Process 2/3 + 266.278s => Time to read file from offset 671088640 to 805306368 in Process 3/3 + 391.115s => Time to sort elements in Process 1/3 memory + 392.549s => Time to sort elements in Process 2/3 memory + 398.704s => Time to sort elements in Process 3/3 memory + 530.781s => Time to write '/mnt/raid/tmp/SortedRun789_TLk8Gu' and fill it up with 134217728 sorted elements by Process 1/3 + 545.689s => Time to write '/mnt/raid/tmp/SortedRun789_CbcB77' and fill it up with 134217728 sorted elements by Process 2/3 + 545.747s => Time to write '/mnt/raid/tmp/SortedRun789_VJXump' and fill it up with 134217728 sorted elements by Process 3/3 + 236.613s => Time to read file from offset 805306368 to 939524096 in Process 1/3 + 251.593s => Time to read file from offset 939524096 to 1073741824 in Process 2/3 + 249.513s => Time to read file from offset 1073741824 to 1207959552 in Process 3/3 + 392.581s => Time to sort elements in Process 1/3 memory + 391.123s => Time to sort elements in Process 2/3 memory + 396.57s => Time to sort elements in Process 3/3 memory + 504.584s => Time to write '/mnt/raid/tmp/SortedRun789_X75hBy' and fill it up with 134217728 sorted elements by Process 1/3 + 566.785s => Time to write '/mnt/raid/tmp/SortedRun789_svkLY7' and fill it up with 134217728 sorted elements by Process 2/3 + 566.003s => Time to write '/mnt/raid/tmp/SortedRun789_D6Zdtp' and fill it up with 134217728 sorted elements by Process 3/3 + 150.327s => Time to read file from offset 1207959552 to 1342177280 in Process 1/3 + 203.031s => Time to read file from offset 1342177280 to 1476395008 in Process 2/3 + 197.496s => Time to read file from offset 1476395008 to 1610612736 in Process 3/3 + 390.07s => Time to sort elements in Process 1/3 memory + 389.876s => Time to sort elements in Process 2/3 memory + 389.978s => Time to sort elements in Process 3/3 memory + 391.802s => Time to write '/mnt/raid/tmp/SortedRun789_wU8gev' and fill it up with 134217728 sorted elements by Process 1/3 +4477.47s => Time function sortedRuns() in Process 1/3 + 508.662s => Time to write '/mnt/raid/tmp/SortedRun789_qme417' and fill it up with 134217728 sorted elements by Process 2/3 +4752.33s => Time function sortedRuns() in Process 2/3 + 505.083s => Time to write '/mnt/raid/tmp/SortedRun789_8Cd5Wo' and fill it up with 134217728 sorted elements by Process 3/3 +4757.5s => Time function sortedRuns() in Process 3/3 +79.2975min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2251.out b/SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2251.out new file mode 100644 index 0000000..41ab8ce --- /dev/null +++ b/SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2251.out @@ -0,0 +1,43 @@ +Using 4 nodes for sorting 12Gb file '/mnt/raid/testlists/12Gib.bin' of 1610612736 elements + + 368.174s => Time to read file from offset 0 to 134217728 in Process 1/4 + 369.228s => Time to read file from offset 268435456 to 402653184 in Process 3/4 + 369.408s => Time to read file from offset 134217728 to 268435456 in Process 2/4 + 369.522s => Time to read file from offset 402653184 to 536870912 in Process 4/4 + 387.475s => Time to sort elements in Process 1/4 memory + 390.784s => Time to sort elements in Process 2/4 memory + 391.396s => Time to sort elements in Process 4/4 memory + 399.416s => Time to sort elements in Process 3/4 memory + 680.823s => Time to write '/mnt/raid/tmp/SortedRun713_rC1Rfd' and fill it up with 134217728 sorted elements by Process 1/4 + 683.648s => Time to write '/mnt/raid/tmp/SortedRun713_F81aEM' and fill it up with 134217728 sorted elements by Process 4/4 + 684.556s => Time to write '/mnt/raid/tmp/SortedRun713_cw6OO6' and fill it up with 134217728 sorted elements by Process 2/4 + 687.126s => Time to write '/mnt/raid/tmp/SortedRun713_3uxBNG' and fill it up with 134217728 sorted elements by Process 3/4 + 348.695s => Time to read file from offset 536870912 to 671088640 in Process 1/4 + 358.138s => Time to read file from offset 939524096 to 1073741824 in Process 4/4 + 361.681s => Time to read file from offset 671088640 to 805306368 in Process 2/4 + 353.727s => Time to read file from offset 805306368 to 939524096 in Process 3/4 + 392.979s => Time to sort elements in Process 1/4 memory + 391.009s => Time to sort elements in Process 4/4 memory + 392.063s => Time to sort elements in Process 3/4 memory + 398.878s => Time to sort elements in Process 2/4 memory + 653.59s => Time to write '/mnt/raid/tmp/SortedRun713_7ojaHf' and fill it up with 134217728 sorted elements by Process 1/4 + 680.228s => Time to write '/mnt/raid/tmp/SortedRun713_itVmaP' and fill it up with 134217728 sorted elements by Process 4/4 + 681.572s => Time to write '/mnt/raid/tmp/SortedRun713_8Bn8YD' and fill it up with 134217728 sorted elements by Process 3/4 + 685.013s => Time to write '/mnt/raid/tmp/SortedRun713_bANpi5' and fill it up with 134217728 sorted elements by Process 2/4 + 278.869s => Time to read file from offset 1073741824 to 1207959552 in Process 1/4 + 325.513s => Time to read file from offset 1476395008 to 1610612736 in Process 4/4 + 326.956s => Time to read file from offset 1342177280 to 1476395008 in Process 3/4 + 322.683s => Time to read file from offset 1207959552 to 1342177280 in Process 2/4 + 397.234s => Time to sort elements in Process 1/4 memory + 390.073s => Time to sort elements in Process 4/4 memory + 389.149s => Time to sort elements in Process 3/4 memory + 390.271s => Time to sort elements in Process 2/4 memory + 529.909s => Time to write '/mnt/raid/tmp/SortedRun713_qz0aVd' and fill it up with 134217728 sorted elements by Process 1/4 +4039.19s => Time function sortedRuns() in Process 1/4 + 623.435s => Time to write '/mnt/raid/tmp/SortedRun713_5X3N8O' and fill it up with 134217728 sorted elements by Process 4/4 +4214.2s => Time function sortedRuns() in Process 4/4 + 623.554s => Time to write '/mnt/raid/tmp/SortedRun713_5PDVCG' and fill it up with 134217728 sorted elements by Process 3/4 +4224.14s => Time function sortedRuns() in Process 3/4 + 620.88s => Time to write '/mnt/raid/tmp/SortedRun713_X1Rnc5' and fill it up with 134217728 sorted elements by Process 2/4 +4225.82s => Time function sortedRuns() in Process 2/4 +70.4371min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2252.out b/SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2252.out new file mode 100644 index 0000000..6213633 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2252.out @@ -0,0 +1,45 @@ +Using 6 nodes for sorting 12Gb file '/mnt/raid/testlists/12Gib.bin' of 1610612736 elements + + 552.705s => Time to read file from offset 268435456 to 402653184 in Process 3/6 + 553.326s => Time to read file from offset 134217728 to 268435456 in Process 2/6 + 553.285s => Time to read file from offset 402653184 to 536870912 in Process 4/6 + 553.647s => Time to read file from offset 0 to 134217728 in Process 1/6 + 553.788s => Time to read file from offset 536870912 to 671088640 in Process 5/6 + 553.881s => Time to read file from offset 671088640 to 805306368 in Process 6/6 + 387.472s => Time to sort elements in Process 1/6 memory + 390.789s => Time to sort elements in Process 2/6 memory + 391.554s => Time to sort elements in Process 4/6 memory + 392.478s => Time to sort elements in Process 5/6 memory + 399.335s => Time to sort elements in Process 3/6 memory + 398.687s => Time to sort elements in Process 6/6 memory + 1048.43s => Time to write '/mnt/raid/tmp/SortedRun5757_5IUbdw' and fill it up with 134217728 sorted elements by Process 1/6 + 1059.8s => Time to write '/mnt/raid/tmp/SortedRun5757_12nIIe' and fill it up with 134217728 sorted elements by Process 2/6 + 1059.81s => Time to write '/mnt/raid/tmp/SortedRun5757_1uUfMC' and fill it up with 134217728 sorted elements by Process 4/6 + 1060.44s => Time to write '/mnt/raid/tmp/SortedRun5757_bIkBqj' and fill it up with 134217728 sorted elements by Process 5/6 + 1058.13s => Time to write '/mnt/raid/tmp/SortedRun5757_BfTsUj' and fill it up with 134217728 sorted elements by Process 6/6 + 1058.45s => Time to write '/mnt/raid/tmp/SortedRun5757_Da6kl2' and fill it up with 134217728 sorted elements by Process 3/6 + 496.387s => Time to read file from offset 805306368 to 939524096 in Process 1/6 + 535.568s => Time to read file from offset 939524096 to 1073741824 in Process 2/6 + 539.408s => Time to read file from offset 1207959552 to 1342177280 in Process 4/6 + 534.084s => Time to read file from offset 1476395008 to 1610612736 in Process 6/6 + 538.406s => Time to read file from offset 1342177280 to 1476395008 in Process 5/6 + 535.426s => Time to read file from offset 1073741824 to 1207959552 in Process 3/6 + 392.633s => Time to sort elements in Process 1/6 memory + 391.047s => Time to sort elements in Process 2/6 memory + 390.381s => Time to sort elements in Process 4/6 memory + 389.175s => Time to sort elements in Process 5/6 memory + 390.454s => Time to sort elements in Process 6/6 memory + 396.518s => Time to sort elements in Process 3/6 memory + 893.407s => Time to write '/mnt/raid/tmp/SortedRun5757_LGcqsv' and fill it up with 134217728 sorted elements by Process 1/6 +3772.81s => Time function sortedRuns() in Process 1/6 + 1011.14s => Time to write '/mnt/raid/tmp/SortedRun5757_QzBAqe' and fill it up with 134217728 sorted elements by Process 2/6 +3942.35s => Time function sortedRuns() in Process 2/6 + 1015.52s => Time to write '/mnt/raid/tmp/SortedRun5757_qVXqwF' and fill it up with 134217728 sorted elements by Process 4/6 +3951.21s => Time function sortedRuns() in Process 4/6 + 1015.31s => Time to write '/mnt/raid/tmp/SortedRun5757_gZPVQl' and fill it up with 134217728 sorted elements by Process 6/6 +3952.31s => Time function sortedRuns() in Process 6/6 + 1016.62s => Time to write '/mnt/raid/tmp/SortedRun5757_OSrLfk' and fill it up with 134217728 sorted elements by Process 5/6 +3952.31s => Time function sortedRuns() in Process 5/6 + 1010.22s => Time to write '/mnt/raid/tmp/SortedRun5757_SNDA23' and fill it up with 134217728 sorted elements by Process 3/6 +3954.72s => Time function sortedRuns() in Process 3/6 +65.9181min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2259.out b/SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2259.out new file mode 100644 index 0000000..aacfbb9 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t12/Distributed_Sorting.2259.out @@ -0,0 +1,51 @@ +Using 12 nodes for sorting 12Gb file '/mnt/raid/testlists/12Gib.bin' of 1610612736 elements + + 1096.4s => Time to read file from offset 1476395008 to 1610612736 in Process 12/12 + 1105.39s => Time to read file from offset 134217728 to 268435456 in Process 2/12 + 1105.94s => Time to read file from offset 805306368 to 939524096 in Process 7/12 + 1106.29s => Time to read file from offset 1342177280 to 1476395008 in Process 11/12 + 1106.16s => Time to read file from offset 1207959552 to 1342177280 in Process 10/12 + 1106.38s => Time to read file from offset 268435456 to 402653184 in Process 3/12 + 1105.67s => Time to read file from offset 402653184 to 536870912 in Process 4/12 + 1106.66s => Time to read file from offset 1073741824 to 1207959552 in Process 9/12 + 1106.47s => Time to read file from offset 671088640 to 805306368 in Process 6/12 + 1106.73s => Time to read file from offset 939524096 to 1073741824 in Process 8/12 + 1106.76s => Time to read file from offset 536870912 to 671088640 in Process 5/12 + 1106.78s => Time to read file from offset 0 to 134217728 in Process 1/12 + 390.048s => Time to sort elements in Process 12/12 memory + 387.382s => Time to sort elements in Process 1/12 memory + 389.281s => Time to sort elements in Process 11/12 memory + 389.619s => Time to sort elements in Process 10/12 memory + 390.828s => Time to sort elements in Process 2/12 memory + 391.476s => Time to sort elements in Process 4/12 memory + 391.034s => Time to sort elements in Process 8/12 memory + 392.217s => Time to sort elements in Process 7/12 memory + 392.377s => Time to sort elements in Process 5/12 memory + 396.641s => Time to sort elements in Process 9/12 memory + 398.874s => Time to sort elements in Process 6/12 memory + 399.559s => Time to sort elements in Process 3/12 memory + 1312.05s => Time to write '/mnt/raid/tmp/SortedRun9239_LG053U' and fill it up with 134217728 sorted elements by Process 12/12 +2798.71s => Time function sortedRuns() in Process 12/12 + 1329.36s => Time to write '/mnt/raid/tmp/SortedRun9239_KdGx5b' and fill it up with 134217728 sorted elements by Process 10/12 +2825.84s => Time function sortedRuns() in Process 10/12 + 1336.62s => Time to write '/mnt/raid/tmp/SortedRun9239_LHPyfD' and fill it up with 134217728 sorted elements by Process 1/12 +2831.39s => Time function sortedRuns() in Process 1/12 + 1336.25s => Time to write '/mnt/raid/tmp/SortedRun9239_haZR4V' and fill it up with 134217728 sorted elements by Process 11/12 +2832.17s => Time function sortedRuns() in Process 11/12 + 1337.31s => Time to write '/mnt/raid/tmp/SortedRun9239_afcLdg' and fill it up with 134217728 sorted elements by Process 2/12 +2834.48s => Time function sortedRuns() in Process 2/12 + 1345.92s => Time to write '/mnt/raid/tmp/SortedRun9239_dur7IM' and fill it up with 134217728 sorted elements by Process 8/12 + 1337.9s => Time to write '/mnt/raid/tmp/SortedRun9239_xXkROm' and fill it up with 134217728 sorted elements by Process 3/12 +2844.7s => Time function sortedRuns() in Process 8/12 + 1340.6s => Time to write '/mnt/raid/tmp/SortedRun9239_9LhyK2' and fill it up with 134217728 sorted elements by Process 9/12 +2844.7s => Time function sortedRuns() in Process 9/12 +2844.7s => Time function sortedRuns() in Process 3/12 + 1346.04s => Time to write '/mnt/raid/tmp/SortedRun9239_ijVDWM' and fill it up with 134217728 sorted elements by Process 5/12 +2846.08s => Time function sortedRuns() in Process 5/12 + 1348.97s => Time to write '/mnt/raid/tmp/SortedRun9239_1w3XcU' and fill it up with 134217728 sorted elements by Process 4/12 +2846.6s => Time function sortedRuns() in Process 4/12 + 1350.58s => Time to write '/mnt/raid/tmp/SortedRun9239_R4DYXe' and fill it up with 134217728 sorted elements by Process 7/12 +2849.7s => Time function sortedRuns() in Process 7/12 + 1343.88s => Time to write '/mnt/raid/tmp/SortedRun9239_v0poQt' and fill it up with 134217728 sorted elements by Process 6/12 +2850.65s => Time function sortedRuns() in Process 6/12 +47.5174min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t124/Distributed_Sorting.2234.out b/SortingAlg/dataset/nomerge/t124/Distributed_Sorting.2234.out new file mode 100644 index 0000000..6e617ff --- /dev/null +++ b/SortingAlg/dataset/nomerge/t124/Distributed_Sorting.2234.out @@ -0,0 +1,7 @@ +Using 1 nodes for sorting 1Gb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 16.8236s => Time to read file from offset 0 to 134217728 in Process 1/1 + 391.124s => Time to sort elements in Process 1/1 memory + 263.409s => Time to write '/mnt/raid/tmp/SortedRun7629_V4d4Y5' and fill it up with 134217728 sorted elements by Process 1/1 +671.97s => Time function sortedRuns() in Process 1/1 +11.2053min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t124/Distributed_Sorting.2235.out b/SortingAlg/dataset/nomerge/t124/Distributed_Sorting.2235.out new file mode 100644 index 0000000..9cfb2b9 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t124/Distributed_Sorting.2235.out @@ -0,0 +1,11 @@ +Using 2 nodes for sorting 2Gb file '/mnt/raid/testlists/__268435456.bin' of 268435456 elements + + 17.0892s => Time to read file from offset 134217728 to 268435456 in Process 2/2 + 124.944s => Time to read file from offset 0 to 134217728 in Process 1/2 + 390.482s => Time to sort elements in Process 2/2 memory + 391.079s => Time to sort elements in Process 1/2 memory + 385.665s => Time to write '/mnt/raid/tmp/SortedRun2744_oRYJ6M' and fill it up with 134217728 sorted elements by Process 2/2 +793.519s => Time function sortedRuns() in Process 2/2 + 388.312s => Time to write '/mnt/raid/tmp/SortedRun2744_SD3bk5' and fill it up with 134217728 sorted elements by Process 1/2 +904.725s => Time function sortedRuns() in Process 1/2 +15.0846min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t124/Distributed_Sorting.2236.out b/SortingAlg/dataset/nomerge/t124/Distributed_Sorting.2236.out new file mode 100644 index 0000000..86cc16b --- /dev/null +++ b/SortingAlg/dataset/nomerge/t124/Distributed_Sorting.2236.out @@ -0,0 +1,19 @@ +Using 4 nodes for sorting 4Gb file '/mnt/raid/testlists/__536870912.bin' of 536870912 elements + + 365.18s => Time to read file from offset 402653184 to 536870912 in Process 4/4 + 367.803s => Time to read file from offset 0 to 134217728 in Process 1/4 + 368.285s => Time to read file from offset 268435456 to 402653184 in Process 3/4 + 368.495s => Time to read file from offset 134217728 to 268435456 in Process 2/4 + 389.481s => Time to sort elements in Process 4/4 memory + 390.976s => Time to sort elements in Process 1/4 memory + 391.891s => Time to sort elements in Process 2/4 memory + 392.188s => Time to sort elements in Process 3/4 memory + 700.816s => Time to write '/mnt/raid/tmp/SortedRun2610_g6ddwH' and fill it up with 134217728 sorted elements by Process 4/4 +1455.76s => Time function sortedRuns() in Process 4/4 + 706.715s => Time to write '/mnt/raid/tmp/SortedRun2610_2YdvNT' and fill it up with 134217728 sorted elements by Process 1/4 +1465.87s => Time function sortedRuns() in Process 1/4 + 705.732s => Time to write '/mnt/raid/tmp/SortedRun2610_2bXREX' and fill it up with 134217728 sorted elements by Process 2/4 +1467.16s => Time function sortedRuns() in Process 2/4 + 705.997s => Time to write '/mnt/raid/tmp/SortedRun2610_v8l3N7' and fill it up with 134217728 sorted elements by Process 3/4 +1467.41s => Time function sortedRuns() in Process 3/4 +24.4634min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t1240/Distributed_Sorting.2228.out b/SortingAlg/dataset/nomerge/t1240/Distributed_Sorting.2228.out new file mode 100644 index 0000000..2f5c8b7 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t1240/Distributed_Sorting.2228.out @@ -0,0 +1,7 @@ +Using 1 nodes for sorting 1Gb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 122.857s => Time to read file from offset 0 to 134217728 in Process 1/1 + 391.034s => Time to sort elements in Process 1/1 memory + 247.264s => Time to write '/mnt/raid/tmp/SortedRun8089_vqrsiv' and fill it up with 134217728 sorted elements by Process 1/1 +761.515s => Time function sortedRuns() in Process 1/1 +12.698min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t1240/Distributed_Sorting.2229.out b/SortingAlg/dataset/nomerge/t1240/Distributed_Sorting.2229.out new file mode 100644 index 0000000..ba08f66 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t1240/Distributed_Sorting.2229.out @@ -0,0 +1,11 @@ +Using 2 nodes for sorting 1Gb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 8.53772s => Time to read file from offset 0 to 67108865 in Process 1/2 + 54.5468s => Time to read file from offset 67108865 to 134217730 in Process 2/2 + 189.236s => Time to sort elements in Process 1/2 memory + 188.542s => Time to sort elements in Process 2/2 memory + 187.504s => Time to write '/mnt/raid/tmp/SortedRun6330_hr46c1' and fill it up with 67108865 sorted elements by Process 1/2 +385.533s => Time function sortedRuns() in Process 1/2 + 185.129s => Time to write '/mnt/raid/tmp/SortedRun6330_HpsqPC' and fill it up with 67108863 sorted elements by Process 2/2 +428.508s => Time function sortedRuns() in Process 2/2 +7.14537min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t1240/Distributed_Sorting.2230.out b/SortingAlg/dataset/nomerge/t1240/Distributed_Sorting.2230.out new file mode 100644 index 0000000..9008125 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t1240/Distributed_Sorting.2230.out @@ -0,0 +1,19 @@ +Using 4 nodes for sorting 1Gb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 4.2664s => Time to read file from offset 0 to 33554433 in Process 1/4 + 67.8355s => Time to read file from offset 33554433 to 67108866 in Process 2/4 + 68.6302s => Time to read file from offset 100663299 to 134217732 in Process 4/4 + 70.026s => Time to read file from offset 67108866 to 100663299 in Process 3/4 + 90.808s => Time to sort elements in Process 1/4 memory + 61.9721s => Time to write '/mnt/raid/tmp/SortedRun6294_lypBvJ' and fill it up with 33554433 sorted elements by Process 1/4 +157.239s => Time function sortedRuns() in Process 1/4 + 91.095s => Time to sort elements in Process 2/4 memory + 91.5471s => Time to sort elements in Process 4/4 memory + 90.8067s => Time to sort elements in Process 3/4 memory + 131.994s => Time to write '/mnt/raid/tmp/SortedRun6294_ytriwS' and fill it up with 33554433 sorted elements by Process 2/4 +291.155s => Time function sortedRuns() in Process 2/4 + 133.006s => Time to write '/mnt/raid/tmp/SortedRun6294_TmcIkW' and fill it up with 33554429 sorted elements by Process 4/4 +293.8s => Time function sortedRuns() in Process 4/4 + 133.044s => Time to write '/mnt/raid/tmp/SortedRun6294_a8kcXQ' and fill it up with 33554433 sorted elements by Process 3/4 +294.343s => Time function sortedRuns() in Process 3/4 +4.90845min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t1241/Distributed_Sorting.2225.out b/SortingAlg/dataset/nomerge/t1241/Distributed_Sorting.2225.out new file mode 100644 index 0000000..ba5651f --- /dev/null +++ b/SortingAlg/dataset/nomerge/t1241/Distributed_Sorting.2225.out @@ -0,0 +1,10 @@ +Using 1 nodes for sorting 2Gb file '/mnt/raid/testlists/__268435456.bin' of 268435456 elements + + 122.914s => Time to read file from offset 0 to 134217728 in Process 1/1 + 391.13s => Time to sort elements in Process 1/1 memory + 246.362s => Time to write '/mnt/raid/tmp/SortedRun3509_NfyReu' and fill it up with 134217728 sorted elements by Process 1/1 + 120.355s => Time to read file from offset 134217728 to 268435456 in Process 1/1 + 391.734s => Time to sort elements in Process 1/1 memory + 247.352s => Time to write '/mnt/raid/tmp/SortedRun3509_DcBUkt' and fill it up with 134217728 sorted elements by Process 1/1 +1520.44s => Time function sortedRuns() in Process 1/1 +25.3458min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t1241/Distributed_Sorting.2226.out b/SortingAlg/dataset/nomerge/t1241/Distributed_Sorting.2226.out new file mode 100644 index 0000000..5a78f8d --- /dev/null +++ b/SortingAlg/dataset/nomerge/t1241/Distributed_Sorting.2226.out @@ -0,0 +1,17 @@ +Using 2 nodes for sorting 4Gb file '/mnt/raid/testlists/__536870912.bin' of 536870912 elements + + 194.148s => Time to read file from offset 0 to 134217728 in Process 1/2 + 194.238s => Time to read file from offset 134217728 to 268435456 in Process 2/2 + 391.184s => Time to sort elements in Process 1/2 memory + 392.92s => Time to sort elements in Process 2/2 memory + 429.872s => Time to write '/mnt/raid/tmp/SortedRun8265_PA3QEn' and fill it up with 134217728 sorted elements by Process 1/2 + 430.007s => Time to write '/mnt/raid/tmp/SortedRun8265_rhhEML' and fill it up with 134217728 sorted elements by Process 2/2 + 186.515s => Time to read file from offset 268435456 to 402653184 in Process 1/2 + 185.666s => Time to read file from offset 402653184 to 536870912 in Process 2/2 + 389.704s => Time to sort elements in Process 2/2 memory + 392.22s => Time to sort elements in Process 1/2 memory + 434.689s => Time to write '/mnt/raid/tmp/SortedRun8265_qRHJyH' and fill it up with 134217728 sorted elements by Process 2/2 +2027.91s => Time function sortedRuns() in Process 2/2 + 434.726s => Time to write '/mnt/raid/tmp/SortedRun8265_I4EnXm' and fill it up with 134217728 sorted elements by Process 1/2 +2029.53s => Time function sortedRuns() in Process 1/2 +33.8316min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t1241/Distributed_Sorting.2227.out b/SortingAlg/dataset/nomerge/t1241/Distributed_Sorting.2227.out new file mode 100644 index 0000000..20bf8db --- /dev/null +++ b/SortingAlg/dataset/nomerge/t1241/Distributed_Sorting.2227.out @@ -0,0 +1,31 @@ +Using 4 nodes for sorting 8Gb file '/mnt/raid/testlists/_1073741824.bin' of 1073741824 elements + + 368.335s => Time to read file from offset 0 to 134217728 in Process 1/4 + 368.579s => Time to read file from offset 402653184 to 536870912 in Process 4/4 + 369.106s => Time to read file from offset 134217728 to 268435456 in Process 2/4 + 369.41s => Time to read file from offset 268435456 to 402653184 in Process 3/4 + 393.295s => Time to sort elements in Process 4/4 memory + 393.464s => Time to sort elements in Process 3/4 memory + 393.783s => Time to sort elements in Process 2/4 memory + 396.253s => Time to sort elements in Process 1/4 memory + 645.617s => Time to write '/mnt/raid/tmp/SortedRun494_YYnb3w' and fill it up with 134217728 sorted elements by Process 4/4 + 648.248s => Time to write '/mnt/raid/tmp/SortedRun494_MqbxDl' and fill it up with 134217728 sorted elements by Process 2/4 + 649.044s => Time to write '/mnt/raid/tmp/SortedRun494_58s2kO' and fill it up with 134217728 sorted elements by Process 1/4 + 650.849s => Time to write '/mnt/raid/tmp/SortedRun494_oLJqg8' and fill it up with 134217728 sorted elements by Process 3/4 + 355.341s => Time to read file from offset 939524096 to 1073741824 in Process 4/4 + 363.604s => Time to read file from offset 671088640 to 805306368 in Process 2/4 + 362.991s => Time to read file from offset 536870912 to 671088640 in Process 1/4 + 363.383s => Time to read file from offset 805306368 to 939524096 in Process 3/4 + 388.106s => Time to sort elements in Process 4/4 memory + 391.962s => Time to sort elements in Process 2/4 memory + 390.51s => Time to sort elements in Process 1/4 memory + 394.669s => Time to sort elements in Process 3/4 memory + 625.026s => Time to write '/mnt/raid/tmp/SortedRun494_LVrHRw' and fill it up with 134217728 sorted elements by Process 4/4 +2776.44s => Time function sortedRuns() in Process 4/4 + 640.233s => Time to write '/mnt/raid/tmp/SortedRun494_a3fuOL' and fill it up with 134217728 sorted elements by Process 1/4 +2808.29s => Time function sortedRuns() in Process 1/4 + 644.215s => Time to write '/mnt/raid/tmp/SortedRun494_5TdN7k' and fill it up with 134217728 sorted elements by Process 2/4 +2811.73s => Time function sortedRuns() in Process 2/4 + 640.241s => Time to write '/mnt/raid/tmp/SortedRun494_LalFDc' and fill it up with 134217728 sorted elements by Process 3/4 +2812.91s => Time function sortedRuns() in Process 3/4 +46.8882min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t2/Distributed_Sorting.2224.out b/SortingAlg/dataset/nomerge/t2/Distributed_Sorting.2224.out new file mode 100644 index 0000000..c5f1af5 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t2/Distributed_Sorting.2224.out @@ -0,0 +1,10 @@ +Using 1 nodes for sorting 2Gb file '/mnt/raid/testlists/2Gib.bin' of 268435456 elements + + 125.637s => Time to read file from offset 0 to 134217728 in Process 1/1 + 392.311s => Time to sort elements in Process 1/1 memory + 245.176s => Time to write '/mnt/raid/tmp/SortedRun1936_pYeRu2' and fill it up with 134217728 sorted elements by Process 1/1 + 119.701s => Time to read file from offset 134217728 to 268435456 in Process 1/1 + 394.551s => Time to sort elements in Process 1/1 memory + 246.207s => Time to write '/mnt/raid/tmp/SortedRun1936_8bZzU4' and fill it up with 134217728 sorted elements by Process 1/1 +1523.98s => Time function sortedRuns() in Process 1/1 +25.4056min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t24/Distributed_Sorting.2213.out b/SortingAlg/dataset/nomerge/t24/Distributed_Sorting.2213.out new file mode 100644 index 0000000..fa94875 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t24/Distributed_Sorting.2213.out @@ -0,0 +1,10 @@ +Using 1 nodes for sorting 2Gb file '/mnt/raid/testlists/2Gib.bin' of 268435456 elements + + 242.185s => Time to read file from offset 0 to 134217728 in Process 1/1 + 392.392s => Time to sort elements in Process 1/1 memory + 523.963s => Time to write '/mnt/raid/tmp/SortedRun602_UCgJlL' and fill it up with 134217728 sorted elements by Process 1/1 + 262.03s => Time to read file from offset 134217728 to 268435456 in Process 1/1 + 394.567s => Time to sort elements in Process 1/1 memory + 523.001s => Time to write '/mnt/raid/tmp/SortedRun602_39mNIL' and fill it up with 134217728 sorted elements by Process 1/1 +2338.6s => Time function sortedRuns() in Process 1/1 +38.9823min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t24/Distributed_Sorting.2214.out b/SortingAlg/dataset/nomerge/t24/Distributed_Sorting.2214.out new file mode 100644 index 0000000..cf497db --- /dev/null +++ b/SortingAlg/dataset/nomerge/t24/Distributed_Sorting.2214.out @@ -0,0 +1,17 @@ +Using 2 nodes for sorting 4Gb file '/mnt/raid/testlists/4Gib.bin' of 536870912 elements + + 243.685s => Time to read file from offset 0 to 134217728 in Process 1/2 + 244.265s => Time to read file from offset 134217728 to 268435456 in Process 2/2 + 392.148s => Time to sort elements in Process 1/2 memory + 400.671s => Time to sort elements in Process 2/2 memory + 524.183s => Time to write '/mnt/raid/tmp/SortedRun602_yFglNX' and fill it up with 134217728 sorted elements by Process 1/2 + 526.708s => Time to write '/mnt/raid/tmp/SortedRun602_NxaI9u' and fill it up with 134217728 sorted elements by Process 2/2 + 268.771s => Time to read file from offset 268435456 to 402653184 in Process 1/2 + 263.682s => Time to read file from offset 402653184 to 536870912 in Process 2/2 + 396.131s => Time to sort elements in Process 1/2 memory + 390.763s => Time to sort elements in Process 2/2 memory + 529.385s => Time to write '/mnt/raid/tmp/SortedRun602_aybQRZ' and fill it up with 134217728 sorted elements by Process 1/2 +2354.97s => Time function sortedRuns() in Process 1/2 + 528.785s => Time to write '/mnt/raid/tmp/SortedRun602_PMAO8w' and fill it up with 134217728 sorted elements by Process 2/2 +2355.93s => Time function sortedRuns() in Process 2/2 +39.271min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t248/Distributed_Sorting.2210.out b/SortingAlg/dataset/nomerge/t248/Distributed_Sorting.2210.out new file mode 100644 index 0000000..48be3ce --- /dev/null +++ b/SortingAlg/dataset/nomerge/t248/Distributed_Sorting.2210.out @@ -0,0 +1,10 @@ +Using 1 nodes for sorting 2Gb file '/mnt/raid/testlists/2Gib.bin' of 268435456 elements + + 559.994s => Time to read file from offset 0 to 134217728 in Process 1/1 + 392.877s => Time to sort elements in Process 1/1 memory + 1138.04s => Time to write '/mnt/raid/tmp/SortedRun9940_tyIPUS' and fill it up with 134217728 sorted elements by Process 1/1 + 582.054s => Time to read file from offset 134217728 to 268435456 in Process 1/1 + 394.544s => Time to sort elements in Process 1/1 memory + 1037.06s => Time to write '/mnt/raid/tmp/SortedRun9940_vczhGS' and fill it up with 134217728 sorted elements by Process 1/1 +4105.3s => Time function sortedRuns() in Process 1/1 +68.4274min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t248/Distributed_Sorting.2211.out b/SortingAlg/dataset/nomerge/t248/Distributed_Sorting.2211.out new file mode 100644 index 0000000..bf53e27 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t248/Distributed_Sorting.2211.out @@ -0,0 +1,17 @@ +Using 2 nodes for sorting 4Gb file '/mnt/raid/testlists/4Gib.bin' of 536870912 elements + + 565.566s => Time to read file from offset 0 to 134217728 in Process 1/2 + 565.814s => Time to read file from offset 134217728 to 268435456 in Process 2/2 + 392.266s => Time to sort elements in Process 1/2 memory + 400.382s => Time to sort elements in Process 2/2 memory + 1145.02s => Time to write '/mnt/raid/tmp/SortedRun9940_r8To4o' and fill it up with 134217728 sorted elements by Process 1/2 + 1143.65s => Time to write '/mnt/raid/tmp/SortedRun9940_52NQqG' and fill it up with 134217728 sorted elements by Process 2/2 + 607.951s => Time to read file from offset 402653184 to 536870912 in Process 2/2 + 615.028s => Time to read file from offset 268435456 to 402653184 in Process 1/2 + 391.235s => Time to sort elements in Process 2/2 memory + 396.299s => Time to sort elements in Process 1/2 memory + 1071.84s => Time to write '/mnt/raid/tmp/SortedRun9940_X1Tc1F' and fill it up with 134217728 sorted elements by Process 2/2 +4182.26s => Time function sortedRuns() in Process 2/2 + 1068.9s => Time to write '/mnt/raid/tmp/SortedRun9940_n93OFl' and fill it up with 134217728 sorted elements by Process 1/2 +4184.68s => Time function sortedRuns() in Process 1/2 +69.7501min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t248/Distributed_Sorting.2212.out b/SortingAlg/dataset/nomerge/t248/Distributed_Sorting.2212.out new file mode 100644 index 0000000..53ff997 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t248/Distributed_Sorting.2212.out @@ -0,0 +1,31 @@ +Using 4 nodes for sorting 8Gb file '/mnt/raid/testlists/8Gib.bin' of 1073741824 elements + + 555.293s => Time to read file from offset 0 to 134217728 in Process 1/4 + 565.331s => Time to read file from offset 402653184 to 536870912 in Process 4/4 + 565.712s => Time to read file from offset 134217728 to 268435456 in Process 2/4 + 565.805s => Time to read file from offset 268435456 to 402653184 in Process 3/4 + 392.77s => Time to sort elements in Process 1/4 memory + 392.626s => Time to sort elements in Process 4/4 memory + 392.877s => Time to sort elements in Process 3/4 memory + 395.239s => Time to sort elements in Process 2/4 memory + 1121.47s => Time to write '/mnt/raid/tmp/SortedRun9940_7XnIRl' and fill it up with 134217728 sorted elements by Process 1/4 + 1147.59s => Time to write '/mnt/raid/tmp/SortedRun9940_TbNBrM' and fill it up with 134217728 sorted elements by Process 4/4 + 1147.36s => Time to write '/mnt/raid/tmp/SortedRun9940_apWHi8' and fill it up with 134217728 sorted elements by Process 3/4 + 1147.64s => Time to write '/mnt/raid/tmp/SortedRun9940_5wHTMp' and fill it up with 134217728 sorted elements by Process 2/4 + 531.442s => Time to read file from offset 536870912 to 671088640 in Process 1/4 + 609.99s => Time to read file from offset 939524096 to 1073741824 in Process 4/4 + 613.282s => Time to read file from offset 805306368 to 939524096 in Process 3/4 + 611.366s => Time to read file from offset 671088640 to 805306368 in Process 2/4 + 394.92s => Time to sort elements in Process 1/4 memory + 389.525s => Time to sort elements in Process 4/4 memory + 391.066s => Time to sort elements in Process 3/4 memory + 394.234s => Time to sort elements in Process 2/4 memory + 812.217s => Time to write '/mnt/raid/tmp/SortedRun9940_h91vUo' and fill it up with 134217728 sorted elements by Process 1/4 +3808.6s => Time function sortedRuns() in Process 1/4 + 1071.38s => Time to write '/mnt/raid/tmp/SortedRun9940_WJ7u4L' and fill it up with 134217728 sorted elements by Process 4/4 +4177.77s => Time function sortedRuns() in Process 4/4 + 1072.02s => Time to write '/mnt/raid/tmp/SortedRun9940_fGgF19' and fill it up with 134217728 sorted elements by Process 3/4 +4183.81s => Time function sortedRuns() in Process 3/4 + 1069.81s => Time to write '/mnt/raid/tmp/SortedRun9940_sG51Dp' and fill it up with 134217728 sorted elements by Process 2/4 +4184.93s => Time function sortedRuns() in Process 2/4 +69.7546min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t24816/Distributed_Sorting.2206.out b/SortingAlg/dataset/nomerge/t24816/Distributed_Sorting.2206.out new file mode 100644 index 0000000..e20c52d --- /dev/null +++ b/SortingAlg/dataset/nomerge/t24816/Distributed_Sorting.2206.out @@ -0,0 +1,10 @@ +Using 1 nodes for sorting 2Gb file '/mnt/raid/testlists/2Gib.bin' of 268435456 elements + + 1183.99s => Time to read file from offset 0 to 134217728 in Process 1/1 + 392.453s => Time to sort elements in Process 1/1 memory + 1492.18s => Time to write '/mnt/raid/tmp/SortedRun7349_hSw6EY' and fill it up with 134217728 sorted elements by Process 1/1 + 702.87s => Time to read file from offset 134217728 to 268435456 in Process 1/1 + 395.007s => Time to sort elements in Process 1/1 memory + 336.033s => Time to write '/mnt/raid/tmp/SortedRun7349_QUm4GY' and fill it up with 134217728 sorted elements by Process 1/1 +4503.84s => Time function sortedRuns() in Process 1/1 +75.0693min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t24816/Distributed_Sorting.2207.out b/SortingAlg/dataset/nomerge/t24816/Distributed_Sorting.2207.out new file mode 100644 index 0000000..05c048b --- /dev/null +++ b/SortingAlg/dataset/nomerge/t24816/Distributed_Sorting.2207.out @@ -0,0 +1,17 @@ +Using 2 nodes for sorting 4Gb file '/mnt/raid/testlists/4Gib.bin' of 536870912 elements + + 1192.58s => Time to read file from offset 134217728 to 268435456 in Process 2/2 + 1192.92s => Time to read file from offset 0 to 134217728 in Process 1/2 + 391.909s => Time to sort elements in Process 1/2 memory + 400.3s => Time to sort elements in Process 2/2 memory + 1547.16s => Time to write '/mnt/raid/tmp/SortedRun7349_Jqc1GF' and fill it up with 134217728 sorted elements by Process 1/2 + 1550.01s => Time to write '/mnt/raid/tmp/SortedRun7349_4KPEDd' and fill it up with 134217728 sorted elements by Process 2/2 + 1082.2s => Time to read file from offset 268435456 to 402653184 in Process 1/2 + 1099.34s => Time to read file from offset 402653184 to 536870912 in Process 2/2 + 396.144s => Time to sort elements in Process 1/2 memory + 390.672s => Time to sort elements in Process 2/2 memory + 1211.29s => Time to write '/mnt/raid/tmp/SortedRun7349_AmBX2E' and fill it up with 134217728 sorted elements by Process 1/2 +5822.3s => Time function sortedRuns() in Process 1/2 + 1262.42s => Time to write '/mnt/raid/tmp/SortedRun7349_1UXycd' and fill it up with 134217728 sorted elements by Process 2/2 +5896.55s => Time function sortedRuns() in Process 2/2 +98.2814min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t24816/Distributed_Sorting.2208.out b/SortingAlg/dataset/nomerge/t24816/Distributed_Sorting.2208.out new file mode 100644 index 0000000..2771c43 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t24816/Distributed_Sorting.2208.out @@ -0,0 +1,31 @@ +Using 4 nodes for sorting 8Gb file '/mnt/raid/testlists/8Gib.bin' of 1073741824 elements + + 1166.06s => Time to read file from offset 0 to 134217728 in Process 1/4 + 1192.93s => Time to read file from offset 134217728 to 268435456 in Process 2/4 + 1193.01s => Time to read file from offset 402653184 to 536870912 in Process 4/4 + 1193.15s => Time to read file from offset 268435456 to 402653184 in Process 3/4 + 393.093s => Time to sort elements in Process 1/4 memory + 392.189s => Time to sort elements in Process 4/4 memory + 392.89s => Time to sort elements in Process 3/4 memory + 395.996s => Time to sort elements in Process 2/4 memory + 1397.22s => Time to write '/mnt/raid/tmp/SortedRun7349_DmKoE2' and fill it up with 134217728 sorted elements by Process 1/4 + 162.473s => Time to read file from offset 536870912 to 671088640 in Process 1/4 + 1545.67s => Time to write '/mnt/raid/tmp/SortedRun7349_Hcta6I' and fill it up with 134217728 sorted elements by Process 4/4 + 1564.25s => Time to write '/mnt/raid/tmp/SortedRun7349_1NMnPa' and fill it up with 134217728 sorted elements by Process 3/4 + 1563.64s => Time to write '/mnt/raid/tmp/SortedRun7349_0DBcZl' and fill it up with 134217728 sorted elements by Process 2/4 + 395.089s => Time to sort elements in Process 1/4 memory + 419.905s => Time to write '/mnt/raid/tmp/SortedRun7349_O2TRq2' and fill it up with 134217728 sorted elements by Process 1/4 +3934.73s => Time function sortedRuns() in Process 1/4 + 1055.55s => Time to read file from offset 939524096 to 1073741824 in Process 4/4 + 1126.11s => Time to read file from offset 671088640 to 805306368 in Process 2/4 + 1129.91s => Time to read file from offset 805306368 to 939524096 in Process 3/4 + 389.48s => Time to sort elements in Process 4/4 memory + 390.975s => Time to sort elements in Process 3/4 memory + 394.291s => Time to sort elements in Process 2/4 memory + 1066s => Time to write '/mnt/raid/tmp/SortedRun7349_b242rL' and fill it up with 134217728 sorted elements by Process 4/4 +5642.72s => Time function sortedRuns() in Process 4/4 + 1308.93s => Time to write '/mnt/raid/tmp/SortedRun7349_pzPNnb' and fill it up with 134217728 sorted elements by Process 3/4 +5981.61s => Time function sortedRuns() in Process 3/4 + 1319.18s => Time to write '/mnt/raid/tmp/SortedRun7349_e5VjNi' and fill it up with 134217728 sorted elements by Process 2/4 +5993.49s => Time function sortedRuns() in Process 2/4 +99.8984min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t24816/Distributed_Sorting.2209.out b/SortingAlg/dataset/nomerge/t24816/Distributed_Sorting.2209.out new file mode 100644 index 0000000..a33f7dc --- /dev/null +++ b/SortingAlg/dataset/nomerge/t24816/Distributed_Sorting.2209.out @@ -0,0 +1,59 @@ +Using 8 nodes for sorting 16Gb file '/mnt/raid/testlists/16Gib.bin' of 2147483648 elements + + 1215.95s => Time to read file from offset 536870912 to 671088640 in Process 5/8 + 1282.38s => Time to read file from offset 0 to 134217728 in Process 1/8 + 1282.56s => Time to read file from offset 671088640 to 805306368 in Process 6/8 + 1282.68s => Time to read file from offset 402653184 to 536870912 in Process 4/8 + 1282.83s => Time to read file from offset 805306368 to 939524096 in Process 7/8 + 1282.96s => Time to read file from offset 268435456 to 402653184 in Process 3/8 + 1283.03s => Time to read file from offset 939524096 to 1073741824 in Process 8/8 + 1283.07s => Time to read file from offset 134217728 to 268435456 in Process 2/8 + 389.766s => Time to sort elements in Process 5/8 memory + 391.223s => Time to sort elements in Process 1/8 memory + 391.984s => Time to sort elements in Process 4/8 memory + 392.831s => Time to sort elements in Process 8/8 memory + 393.16s => Time to sort elements in Process 3/8 memory + 394.531s => Time to sort elements in Process 6/8 memory + 394.068s => Time to sort elements in Process 2/8 memory + 397.976s => Time to sort elements in Process 7/8 memory + 1572.42s => Time to write '/mnt/raid/tmp/SortedRun7922_ub6nqY' and fill it up with 134217728 sorted elements by Process 5/8 + 1581.69s => Time to write '/mnt/raid/tmp/SortedRun7922_52yPL5' and fill it up with 134217728 sorted elements by Process 4/8 + 1584.41s => Time to write '/mnt/raid/tmp/SortedRun7922_sXy3EI' and fill it up with 134217728 sorted elements by Process 1/8 + 1583.67s => Time to write '/mnt/raid/tmp/SortedRun7922_EMf6J5' and fill it up with 134217728 sorted elements by Process 2/8 + 1586.49s => Time to write '/mnt/raid/tmp/SortedRun7922_2cnZJo' and fill it up with 134217728 sorted elements by Process 3/8 + 1586.24s => Time to write '/mnt/raid/tmp/SortedRun7922_0aoJZt' and fill it up with 134217728 sorted elements by Process 7/8 + 1590.84s => Time to write '/mnt/raid/tmp/SortedRun7922_TR4TvA' and fill it up with 134217728 sorted elements by Process 6/8 + 1594.75s => Time to write '/mnt/raid/tmp/SortedRun7922_WO4Qp8' and fill it up with 134217728 sorted elements by Process 8/8 + 1135.01s => Time to read file from offset 1610612736 to 1744830464 in Process 5/8 + 1132.62s => Time to read file from offset 1476395008 to 1610612736 in Process 4/8 + 1132.25s => Time to read file from offset 1073741824 to 1207959552 in Process 1/8 + 1120.52s => Time to read file from offset 2013265920 to 2147483648 in Process 8/8 + 1129.43s => Time to read file from offset 1207959552 to 1342177280 in Process 2/8 + 1123.15s => Time to read file from offset 1744830464 to 1879048192 in Process 6/8 + 1130.17s => Time to read file from offset 1342177280 to 1476395008 in Process 3/8 + 1125.55s => Time to read file from offset 1879048192 to 2013265920 in Process 7/8 + 389.877s => Time to sort elements in Process 5/8 memory + 391.081s => Time to sort elements in Process 1/8 memory + 390.298s => Time to sort elements in Process 8/8 memory + 389.977s => Time to sort elements in Process 7/8 memory + 391.506s => Time to sort elements in Process 6/8 memory + 391.472s => Time to sort elements in Process 3/8 memory + 395.581s => Time to sort elements in Process 2/8 memory + 398.818s => Time to sort elements in Process 4/8 memory + 1333.8s => Time to write '/mnt/raid/tmp/SortedRun7922_odcbrY' and fill it up with 134217728 sorted elements by Process 5/8 +6038.51s => Time function sortedRuns() in Process 5/8 + 1338.81s => Time to write '/mnt/raid/tmp/SortedRun7922_N6tDX5' and fill it up with 134217728 sorted elements by Process 8/8 +6122.36s => Time function sortedRuns() in Process 8/8 + 1333.53s => Time to write '/mnt/raid/tmp/SortedRun7922_V5ZiN1' and fill it up with 134217728 sorted elements by Process 4/8 + 1336.9s => Time to write '/mnt/raid/tmp/SortedRun7922_cwJqXq' and fill it up with 134217728 sorted elements by Process 3/8 +6123.32s => Time function sortedRuns() in Process 3/8 +6123.32s => Time function sortedRuns() in Process 4/8 + 1337.72s => Time to write '/mnt/raid/tmp/SortedRun7922_lSzHzy' and fill it up with 134217728 sorted elements by Process 6/8 +6123.98s => Time function sortedRuns() in Process 6/8 + 1340.22s => Time to write '/mnt/raid/tmp/SortedRun7922_09Xtsw' and fill it up with 134217728 sorted elements by Process 7/8 +6125.08s => Time function sortedRuns() in Process 7/8 + 1343.81s => Time to write '/mnt/raid/tmp/SortedRun7922_SS6WkJ' and fill it up with 134217728 sorted elements by Process 1/8 +6126.32s => Time function sortedRuns() in Process 1/8 + 1339.89s => Time to write '/mnt/raid/tmp/SortedRun7922_ntYem3' and fill it up with 134217728 sorted elements by Process 2/8 +6129.23s => Time function sortedRuns() in Process 2/8 +102.161min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2254.out b/SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2254.out new file mode 100644 index 0000000..08eb229 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2254.out @@ -0,0 +1,10 @@ +Using 1 nodes for sorting 2Gb file '/mnt/raid/testlists/2Gib.bin' of 268435456 elements + + 125.317s => Time to read file from offset 0 to 134217728 in Process 1/1 + 392.228s => Time to sort elements in Process 1/1 memory + 251.45s => Time to write '/mnt/raid/tmp/SortedRun8355_oXaBi4' and fill it up with 134217728 sorted elements by Process 1/1 + 120.791s => Time to read file from offset 134217728 to 268435456 in Process 1/1 + 394.578s => Time to sort elements in Process 1/1 memory + 248.354s => Time to write '/mnt/raid/tmp/SortedRun8355_ZmsFF4' and fill it up with 134217728 sorted elements by Process 1/1 +1533.41s => Time function sortedRuns() in Process 1/1 +25.5623min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2255.out b/SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2255.out new file mode 100644 index 0000000..f213a1d --- /dev/null +++ b/SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2255.out @@ -0,0 +1,17 @@ +Using 2 nodes for sorting 4Gb file '/mnt/raid/testlists/4Gib.bin' of 536870912 elements + + 190.863s => Time to read file from offset 0 to 134217728 in Process 1/2 + 191.11s => Time to read file from offset 134217728 to 268435456 in Process 2/2 + 392.702s => Time to sort elements in Process 1/2 memory + 400.832s => Time to sort elements in Process 2/2 memory + 443.563s => Time to write '/mnt/raid/tmp/SortedRun4694_8bw49j' and fill it up with 134217728 sorted elements by Process 1/2 + 447.513s => Time to write '/mnt/raid/tmp/SortedRun4694_KZtwZm' and fill it up with 134217728 sorted elements by Process 2/2 + 190.69s => Time to read file from offset 268435456 to 402653184 in Process 1/2 + 189.527s => Time to read file from offset 402653184 to 536870912 in Process 2/2 + 396.696s => Time to sort elements in Process 1/2 memory + 390.867s => Time to sort elements in Process 2/2 memory + 463.522s => Time to write '/mnt/raid/tmp/SortedRun4694_KI3vnm' and fill it up with 134217728 sorted elements by Process 1/2 +2078.57s => Time function sortedRuns() in Process 1/2 + 462.955s => Time to write '/mnt/raid/tmp/SortedRun4694_YkwYgo' and fill it up with 134217728 sorted elements by Process 2/2 +2083.91s => Time function sortedRuns() in Process 2/2 +34.7377min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2256.out b/SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2256.out new file mode 100644 index 0000000..58528d7 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2256.out @@ -0,0 +1,31 @@ +Using 4 nodes for sorting 8Gb file '/mnt/raid/testlists/8Gib.bin' of 1073741824 elements + + 368.279s => Time to read file from offset 0 to 134217728 in Process 1/4 + 368.782s => Time to read file from offset 134217728 to 268435456 in Process 2/4 + 369.006s => Time to read file from offset 268435456 to 402653184 in Process 3/4 + 369.381s => Time to read file from offset 402653184 to 536870912 in Process 4/4 + 393.098s => Time to sort elements in Process 1/4 memory + 392.1s => Time to sort elements in Process 4/4 memory + 392.722s => Time to sort elements in Process 3/4 memory + 396.208s => Time to sort elements in Process 2/4 memory + 679.156s => Time to write '/mnt/raid/tmp/SortedRun4985_fzKbul' and fill it up with 134217728 sorted elements by Process 1/4 + 683.789s => Time to write '/mnt/raid/tmp/SortedRun4985_bLq4r6' and fill it up with 134217728 sorted elements by Process 3/4 + 686.145s => Time to write '/mnt/raid/tmp/SortedRun4985_NbchKl' and fill it up with 134217728 sorted elements by Process 4/4 + 683.739s => Time to write '/mnt/raid/tmp/SortedRun4985_X5PivU' and fill it up with 134217728 sorted elements by Process 2/4 + 356.855s => Time to read file from offset 536870912 to 671088640 in Process 1/4 + 361.352s => Time to read file from offset 939524096 to 1073741824 in Process 4/4 + 363.843s => Time to read file from offset 805306368 to 939524096 in Process 3/4 + 362.131s => Time to read file from offset 671088640 to 805306368 in Process 2/4 + 395.004s => Time to sort elements in Process 1/4 memory + 389.017s => Time to sort elements in Process 4/4 memory + 390.94s => Time to sort elements in Process 3/4 memory + 394.279s => Time to sort elements in Process 2/4 memory + 650.601s => Time to write '/mnt/raid/tmp/SortedRun4985_dSFwJn' and fill it up with 134217728 sorted elements by Process 1/4 +2843.57s => Time function sortedRuns() in Process 1/4 + 656.553s => Time to write '/mnt/raid/tmp/SortedRun4985_s9v7Hn' and fill it up with 134217728 sorted elements by Process 4/4 +2855.01s => Time function sortedRuns() in Process 4/4 + 653.88s => Time to write '/mnt/raid/tmp/SortedRun4985_egSkS6' and fill it up with 134217728 sorted elements by Process 3/4 +2855.01s => Time function sortedRuns() in Process 3/4 + 651.718s => Time to write '/mnt/raid/tmp/SortedRun4985_YehyaY' and fill it up with 134217728 sorted elements by Process 2/4 +2857.83s => Time function sortedRuns() in Process 2/4 +47.6372min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2257.out b/SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2257.out new file mode 100644 index 0000000..0c2084d --- /dev/null +++ b/SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2257.out @@ -0,0 +1,59 @@ +Using 8 nodes for sorting 16Gb file '/mnt/raid/testlists/16Gib.bin' of 2147483648 elements + + 736.53s => Time to read file from offset 0 to 134217728 in Process 1/8 + 737.53s => Time to read file from offset 671088640 to 805306368 in Process 6/8 + 738.182s => Time to read file from offset 939524096 to 1073741824 in Process 8/8 + 738.338s => Time to read file from offset 805306368 to 939524096 in Process 7/8 + 738.433s => Time to read file from offset 402653184 to 536870912 in Process 4/8 + 738.535s => Time to read file from offset 536870912 to 671088640 in Process 5/8 + 738.62s => Time to read file from offset 134217728 to 268435456 in Process 2/8 + 738.676s => Time to read file from offset 268435456 to 402653184 in Process 3/8 + 390.954s => Time to sort elements in Process 1/8 memory + 389.812s => Time to sort elements in Process 5/8 memory + 392.108s => Time to sort elements in Process 4/8 memory + 392.97s => Time to sort elements in Process 8/8 memory + 393.068s => Time to sort elements in Process 3/8 memory + 394.591s => Time to sort elements in Process 6/8 memory + 394.071s => Time to sort elements in Process 2/8 memory + 398.298s => Time to sort elements in Process 7/8 memory + 1366s => Time to write '/mnt/raid/tmp/SortedRun5284_sNGQuD' and fill it up with 134217728 sorted elements by Process 1/8 + 1366.38s => Time to write '/mnt/raid/tmp/SortedRun5284_M45jZ2' and fill it up with 134217728 sorted elements by Process 5/8 + 1375.88s => Time to write '/mnt/raid/tmp/SortedRun5284_BqGpXM' and fill it up with 134217728 sorted elements by Process 4/8 + 1376.4s => Time to write '/mnt/raid/tmp/SortedRun5284_Gd9z95' and fill it up with 134217728 sorted elements by Process 8/8 + 1375.39s => Time to write '/mnt/raid/tmp/SortedRun5284_3CXsK2' and fill it up with 134217728 sorted elements by Process 6/8 + 1376.99s => Time to write '/mnt/raid/tmp/SortedRun5284_VOrcNI' and fill it up with 134217728 sorted elements by Process 3/8 + 1377.58s => Time to write '/mnt/raid/tmp/SortedRun5284_MAXU8n' and fill it up with 134217728 sorted elements by Process 2/8 + 1375.56s => Time to write '/mnt/raid/tmp/SortedRun5284_9Lv2b2' and fill it up with 134217728 sorted elements by Process 7/8 + 692.385s => Time to read file from offset 1610612736 to 1744830464 in Process 5/8 + 701.801s => Time to read file from offset 1073741824 to 1207959552 in Process 1/8 + 719.306s => Time to read file from offset 2013265920 to 2147483648 in Process 8/8 + 723.142s => Time to read file from offset 1476395008 to 1610612736 in Process 4/8 + 722.76s => Time to read file from offset 1744830464 to 1879048192 in Process 6/8 + 721.924s => Time to read file from offset 1342177280 to 1476395008 in Process 3/8 + 721.651s => Time to read file from offset 1207959552 to 1342177280 in Process 2/8 + 720.685s => Time to read file from offset 1879048192 to 2013265920 in Process 7/8 + 389.623s => Time to sort elements in Process 5/8 memory + 391.155s => Time to sort elements in Process 1/8 memory + 390.383s => Time to sort elements in Process 8/8 memory + 390.831s => Time to sort elements in Process 6/8 memory + 390.458s => Time to sort elements in Process 7/8 memory + 391.786s => Time to sort elements in Process 3/8 memory + 396.046s => Time to sort elements in Process 2/8 memory + 399.491s => Time to sort elements in Process 4/8 memory + 1262.78s => Time to write '/mnt/raid/tmp/SortedRun5284_zvGKx2' and fill it up with 134217728 sorted elements by Process 5/8 +4839.99s => Time function sortedRuns() in Process 5/8 + 1296.66s => Time to write '/mnt/raid/tmp/SortedRun5284_X4HcEC' and fill it up with 134217728 sorted elements by Process 1/8 +4883.68s => Time function sortedRuns() in Process 1/8 + 1339.79s => Time to write '/mnt/raid/tmp/SortedRun5284_7u43d7' and fill it up with 134217728 sorted elements by Process 8/8 +4959.91s => Time function sortedRuns() in Process 8/8 + 1340.81s => Time to write '/mnt/raid/tmp/SortedRun5284_SzrTG1' and fill it up with 134217728 sorted elements by Process 7/8 +4966.15s => Time function sortedRuns() in Process 7/8 + 1342.19s => Time to write '/mnt/raid/tmp/SortedRun5284_v4MaK2' and fill it up with 134217728 sorted elements by Process 6/8 +4966.76s => Time function sortedRuns() in Process 6/8 + 1340.81s => Time to write '/mnt/raid/tmp/SortedRun5284_Je0W4I' and fill it up with 134217728 sorted elements by Process 3/8 +4967.31s => Time function sortedRuns() in Process 3/8 + 1337.92s => Time to write '/mnt/raid/tmp/SortedRun5284_a9N2lp' and fill it up with 134217728 sorted elements by Process 2/8 +4968.65s => Time function sortedRuns() in Process 2/8 + 1337.96s => Time to write '/mnt/raid/tmp/SortedRun5284_JvlKPM' and fill it up with 134217728 sorted elements by Process 4/8 +4969.6s => Time function sortedRuns() in Process 4/8 +82.8329min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2258.out b/SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2258.out new file mode 100644 index 0000000..2f11f4b --- /dev/null +++ b/SortingAlg/dataset/nomerge/t2481632/Distributed_Sorting.2258.out @@ -0,0 +1,115 @@ +Using 16 nodes for sorting 32Gb file '/mnt/raid/testlists/32Gib.bin' of 4294967296 elements + + 1475.27s => Time to read file from offset 0 to 134217728 in Process 1/16 + 1475.8s => Time to read file from offset 1476395008 to 1610612736 in Process 12/16 + 1476s => Time to read file from offset 1610612736 to 1744830464 in Process 13/16 + 1476.14s => Time to read file from offset 536870912 to 671088640 in Process 5/16 + 1476.25s => Time to read file from offset 1342177280 to 1476395008 in Process 11/16 + 1476.37s => Time to read file from offset 268435456 to 402653184 in Process 3/16 + 1476.47s => Time to read file from offset 1073741824 to 1207959552 in Process 9/16 + 1476.6s => Time to read file from offset 805306368 to 939524096 in Process 7/16 + 1476.69s => Time to read file from offset 1879048192 to 2013265920 in Process 15/16 + 1476.83s => Time to read file from offset 2013265920 to 2147483648 in Process 16/16 + 1476.89s => Time to read file from offset 1744830464 to 1879048192 in Process 14/16 + 1476.96s => Time to read file from offset 939524096 to 1073741824 in Process 8/16 + 1477.05s => Time to read file from offset 402653184 to 536870912 in Process 4/16 + 1477.09s => Time to read file from offset 1207959552 to 1342177280 in Process 10/16 + 1477.12s => Time to read file from offset 671088640 to 805306368 in Process 6/16 + 1477.14s => Time to read file from offset 134217728 to 268435456 in Process 2/16 + 388.89s => Time to sort elements in Process 12/16 memory + 390.643s => Time to sort elements in Process 1/16 memory + 390.173s => Time to sort elements in Process 5/16 memory + 389.856s => Time to sort elements in Process 9/16 memory + 390.178s => Time to sort elements in Process 14/16 memory + 390.206s => Time to sort elements in Process 8/16 memory + 391.135s => Time to sort elements in Process 3/16 memory + 390.464s => Time to sort elements in Process 6/16 memory + 392.116s => Time to sort elements in Process 13/16 memory + 391.114s => Time to sort elements in Process 2/16 memory + 391.617s => Time to sort elements in Process 16/16 memory + 392.709s => Time to sort elements in Process 7/16 memory + 392.899s => Time to sort elements in Process 15/16 memory + 392.962s => Time to sort elements in Process 10/16 memory + 394.318s => Time to sort elements in Process 11/16 memory + 397.949s => Time to sort elements in Process 4/16 memory + 1621.79s => Time to write '/mnt/raid/tmp/SortedRun8493_cQmwh4' and fill it up with 134217728 sorted elements by Process 6/16 + 1627.85s => Time to write '/mnt/raid/tmp/SortedRun8493_lDhgDy' and fill it up with 134217728 sorted elements by Process 12/16 + 1633.84s => Time to write '/mnt/raid/tmp/SortedRun8493_Rcsb9V' and fill it up with 134217728 sorted elements by Process 1/16 + 1635.28s => Time to write '/mnt/raid/tmp/SortedRun8493_TImFyi' and fill it up with 134217728 sorted elements by Process 16/16 + 1644.5s => Time to write '/mnt/raid/tmp/SortedRun8493_nrW49r' and fill it up with 134217728 sorted elements by Process 8/16 + 1647.26s => Time to write '/mnt/raid/tmp/SortedRun8493_ClPirB' and fill it up with 134217728 sorted elements by Process 5/16 + 1647.93s => Time to write '/mnt/raid/tmp/SortedRun8493_gEQ2hB' and fill it up with 134217728 sorted elements by Process 15/16 + 1652.57s => Time to write '/mnt/raid/tmp/SortedRun8493_LOPuME' and fill it up with 134217728 sorted elements by Process 14/16 + 1653.66s => Time to write '/mnt/raid/tmp/SortedRun8493_jfWCKT' and fill it up with 134217728 sorted elements by Process 7/16 + 1655.28s => Time to write '/mnt/raid/tmp/SortedRun8493_n2ITtY' and fill it up with 134217728 sorted elements by Process 3/16 + 1654.32s => Time to write '/mnt/raid/tmp/SortedRun8493_s8iAjD' and fill it up with 134217728 sorted elements by Process 2/16 + 1657s => Time to write '/mnt/raid/tmp/SortedRun8493_vxddUN' and fill it up with 134217728 sorted elements by Process 9/16 + 1651.46s => Time to write '/mnt/raid/tmp/SortedRun8493_p3fdsx' and fill it up with 134217728 sorted elements by Process 10/16 + 1651.89s => Time to write '/mnt/raid/tmp/SortedRun8493_yDCM3Q' and fill it up with 134217728 sorted elements by Process 11/16 + 1649.28s => Time to write '/mnt/raid/tmp/SortedRun8493_D6xz3t' and fill it up with 134217728 sorted elements by Process 4/16 + 1656.71s => Time to write '/mnt/raid/tmp/SortedRun8493_2dlEDV' and fill it up with 134217728 sorted elements by Process 13/16 + 1341.44s => Time to read file from offset 2818572288 to 2952790016 in Process 6/16 + 1368.07s => Time to read file from offset 3623878656 to 3758096384 in Process 12/16 + 1424.17s => Time to read file from offset 2147483648 to 2281701376 in Process 1/16 + 1424.32s => Time to read file from offset 4160749568 to 4294967296 in Process 16/16 + 1444.53s => Time to read file from offset 3087007744 to 3221225472 in Process 8/16 + 1445.54s => Time to read file from offset 2684354560 to 2818572288 in Process 5/16 + 1446.92s => Time to read file from offset 4026531840 to 4160749568 in Process 15/16 + 1447.72s => Time to read file from offset 3892314112 to 4026531840 in Process 14/16 + 1446.4s => Time to read file from offset 2281701376 to 2415919104 in Process 2/16 + 1446.49s => Time to read file from offset 2952790016 to 3087007744 in Process 7/16 + 1446.61s => Time to read file from offset 3355443200 to 3489660928 in Process 10/16 + 1446.7s => Time to read file from offset 2415919104 to 2550136832 in Process 3/16 + 1446.76s => Time to read file from offset 3221225472 to 3355443200 in Process 9/16 + 1445.61s => Time to read file from offset 3489660928 to 3623878656 in Process 11/16 + 1445.1s => Time to read file from offset 2550136832 to 2684354560 in Process 4/16 + 1444.63s => Time to read file from offset 3758096384 to 3892314112 in Process 13/16 + 388.994s => Time to sort elements in Process 6/16 memory + 396.116s => Time to sort elements in Process 12/16 memory + 390.087s => Time to sort elements in Process 1/16 memory + 388.786s => Time to sort elements in Process 16/16 memory + 394.016s => Time to sort elements in Process 8/16 memory + 392.524s => Time to sort elements in Process 5/16 memory + 392.508s => Time to sort elements in Process 15/16 memory + 388.288s => Time to sort elements in Process 2/16 memory + 391.287s => Time to sort elements in Process 14/16 memory + 389.195s => Time to sort elements in Process 4/16 memory + 390.163s => Time to sort elements in Process 7/16 memory + 391.182s => Time to sort elements in Process 11/16 memory + 391.411s => Time to sort elements in Process 13/16 memory + 392.097s => Time to sort elements in Process 3/16 memory + 392.451s => Time to sort elements in Process 10/16 memory + 394.392s => Time to sort elements in Process 9/16 memory + 1220.36s => Time to write '/mnt/raid/tmp/SortedRun8493_dwGUNZ' and fill it up with 134217728 sorted elements by Process 6/16 +6441.92s => Time function sortedRuns() in Process 6/16 + 1401.29s => Time to write '/mnt/raid/tmp/SortedRun8493_lmKyfz' and fill it up with 134217728 sorted elements by Process 12/16 +6658.75s => Time function sortedRuns() in Process 12/16 + 1526.16s => Time to write '/mnt/raid/tmp/SortedRun8493_QjPcyU' and fill it up with 134217728 sorted elements by Process 1/16 +6841.22s => Time function sortedRuns() in Process 1/16 + 1539.29s => Time to write '/mnt/raid/tmp/SortedRun8493_2dRawl' and fill it up with 134217728 sorted elements by Process 16/16 +6858.44s => Time function sortedRuns() in Process 16/16 + 1569.71s => Time to write '/mnt/raid/tmp/SortedRun8493_V4Ad3D' and fill it up with 134217728 sorted elements by Process 5/16 +6922.78s => Time function sortedRuns() in Process 5/16 + 1563.03s => Time to write '/mnt/raid/tmp/SortedRun8493_qy09VS' and fill it up with 134217728 sorted elements by Process 7/16 +6925.19s => Time function sortedRuns() in Process 7/16 + 1573.65s => Time to write '/mnt/raid/tmp/SortedRun8493_ls4OCr' and fill it up with 134217728 sorted elements by Process 8/16 +6925.54s => Time function sortedRuns() in Process 8/16 + 1568.48s => Time to write '/mnt/raid/tmp/SortedRun8493_K01NKB' and fill it up with 134217728 sorted elements by Process 2/16 +6928.18s => Time function sortedRuns() in Process 2/16 + 1563.79s => Time to write '/mnt/raid/tmp/SortedRun8493_XwefLN' and fill it up with 134217728 sorted elements by Process 9/16 +6930.51s => Time function sortedRuns() in Process 9/16 + 1570.74s => Time to write '/mnt/raid/tmp/SortedRun8493_GIEAFu' and fill it up with 134217728 sorted elements by Process 4/16 +6931.69s => Time function sortedRuns() in Process 4/16 + 1567.33s => Time to write '/mnt/raid/tmp/SortedRun8493_ePnZnP' and fill it up with 134217728 sorted elements by Process 11/16 +6932.64s => Time function sortedRuns() in Process 11/16 + 1568.1s => Time to write '/mnt/raid/tmp/SortedRun8493_fIVJEV' and fill it up with 134217728 sorted elements by Process 3/16 +6934.33s => Time function sortedRuns() in Process 3/16 + 1569.01s => Time to write '/mnt/raid/tmp/SortedRun8493_XaPa6T' and fill it up with 134217728 sorted elements by Process 13/16 +6935.04s => Time function sortedRuns() in Process 13/16 + 1578.06s => Time to write '/mnt/raid/tmp/SortedRun8493_NKHAiC' and fill it up with 134217728 sorted elements by Process 15/16 +6936.62s => Time function sortedRuns() in Process 15/16 + 1576.28s => Time to write '/mnt/raid/tmp/SortedRun8493_X2VFjF' and fill it up with 134217728 sorted elements by Process 14/16 +6936.97s => Time function sortedRuns() in Process 14/16 + 1571.12s => Time to write '/mnt/raid/tmp/SortedRun8493_jF3O3w' and fill it up with 134217728 sorted elements by Process 10/16 +6937.22s => Time function sortedRuns() in Process 10/16 +115.626min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2215.out b/SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2215.out new file mode 100644 index 0000000..b5d02fa --- /dev/null +++ b/SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2215.out @@ -0,0 +1,94 @@ +Using 1 nodes for sorting 30Gb file '/mnt/raid/testlists/30Gib.bin' of 4026531840 elements + + 122.741s => Time to read file from offset 0 to 134217728 in Process 1/1 + 392.844s => Time to sort elements in Process 1/1 memory + 248.013s => Time to write '/mnt/raid/tmp/SortedRun8999_k9Ez9Y' and fill it up with 134217728 sorted elements by Process 1/1 + 118.845s => Time to read file from offset 134217728 to 268435456 in Process 1/1 + 388.295s => Time to sort elements in Process 1/1 memory + 248.83s => Time to write '/mnt/raid/tmp/SortedRun8999_hHSlGY' and fill it up with 134217728 sorted elements by Process 1/1 + 119.225s => Time to read file from offset 268435456 to 402653184 in Process 1/1 + 393.808s => Time to sort elements in Process 1/1 memory + 250.642s => Time to write '/mnt/raid/tmp/SortedRun8999_z9c4L0' and fill it up with 134217728 sorted elements by Process 1/1 + 119.979s => Time to read file from offset 402653184 to 536870912 in Process 1/1 + 396.044s => Time to sort elements in Process 1/1 memory + 248.918s => Time to write '/mnt/raid/tmp/SortedRun8999_sQBvwY' and fill it up with 134217728 sorted elements by Process 1/1 + 118.902s => Time to read file from offset 536870912 to 671088640 in Process 1/1 + 390.441s => Time to sort elements in Process 1/1 memory + 248.89s => Time to write '/mnt/raid/tmp/SortedRun8999_qkWq7Y' and fill it up with 134217728 sorted elements by Process 1/1 + 120.081s => Time to read file from offset 671088640 to 805306368 in Process 1/1 + 390.313s => Time to sort elements in Process 1/1 memory + 247.098s => Time to write '/mnt/raid/tmp/SortedRun8999_u34kOY' and fill it up with 134217728 sorted elements by Process 1/1 + 118.659s => Time to read file from offset 805306368 to 939524096 in Process 1/1 + 391.012s => Time to sort elements in Process 1/1 memory + 247.535s => Time to write '/mnt/raid/tmp/SortedRun8999_licii0' and fill it up with 134217728 sorted elements by Process 1/1 + 119.771s => Time to read file from offset 939524096 to 1073741824 in Process 1/1 + 391.301s => Time to sort elements in Process 1/1 memory + 248.501s => Time to write '/mnt/raid/tmp/SortedRun8999_cfyxkY' and fill it up with 134217728 sorted elements by Process 1/1 + 118.5s => Time to read file from offset 1073741824 to 1207959552 in Process 1/1 + 396.07s => Time to sort elements in Process 1/1 memory + 248.298s => Time to write '/mnt/raid/tmp/SortedRun8999_D1y3ZZ' and fill it up with 134217728 sorted elements by Process 1/1 + 119.796s => Time to read file from offset 1207959552 to 1342177280 in Process 1/1 + 394.665s => Time to sort elements in Process 1/1 memory + 249.337s => Time to write '/mnt/raid/tmp/SortedRun8999_O5H5FZ' and fill it up with 134217728 sorted elements by Process 1/1 + 119.128s => Time to read file from offset 1342177280 to 1476395008 in Process 1/1 + 393.74s => Time to sort elements in Process 1/1 memory + 250.393s => Time to write '/mnt/raid/tmp/SortedRun8999_PpW4CX' and fill it up with 134217728 sorted elements by Process 1/1 + 119.987s => Time to read file from offset 1476395008 to 1610612736 in Process 1/1 + 398.006s => Time to sort elements in Process 1/1 memory + 253.048s => Time to write '/mnt/raid/tmp/SortedRun8999_FLq7tY' and fill it up with 134217728 sorted elements by Process 1/1 + 119.217s => Time to read file from offset 1610612736 to 1744830464 in Process 1/1 + 392.572s => Time to sort elements in Process 1/1 memory + 251.675s => Time to write '/mnt/raid/tmp/SortedRun8999_UENDRX' and fill it up with 134217728 sorted elements by Process 1/1 + 119.027s => Time to read file from offset 1744830464 to 1879048192 in Process 1/1 + 392.399s => Time to sort elements in Process 1/1 memory + 252.234s => Time to write '/mnt/raid/tmp/SortedRun8999_VNVkb0' and fill it up with 134217728 sorted elements by Process 1/1 + 118.271s => Time to read file from offset 1879048192 to 2013265920 in Process 1/1 + 392.599s => Time to sort elements in Process 1/1 memory + 250.575s => Time to write '/mnt/raid/tmp/SortedRun8999_n1JFq0' and fill it up with 134217728 sorted elements by Process 1/1 + 118.658s => Time to read file from offset 2013265920 to 2147483648 in Process 1/1 + 399.002s => Time to sort elements in Process 1/1 memory + 254.463s => Time to write '/mnt/raid/tmp/SortedRun8999_gC9g11' and fill it up with 134217728 sorted elements by Process 1/1 + 120.573s => Time to read file from offset 2147483648 to 2281701376 in Process 1/1 + 391.918s => Time to sort elements in Process 1/1 memory + 251.145s => Time to write '/mnt/raid/tmp/SortedRun8999_I9dCIZ' and fill it up with 134217728 sorted elements by Process 1/1 + 118.791s => Time to read file from offset 2281701376 to 2415919104 in Process 1/1 + 391.555s => Time to sort elements in Process 1/1 memory + 250.268s => Time to write '/mnt/raid/tmp/SortedRun8999_l0ntQ1' and fill it up with 134217728 sorted elements by Process 1/1 + 120.317s => Time to read file from offset 2415919104 to 2550136832 in Process 1/1 + 393.256s => Time to sort elements in Process 1/1 memory + 248.042s => Time to write '/mnt/raid/tmp/SortedRun8999_fjCPuY' and fill it up with 134217728 sorted elements by Process 1/1 + 119.128s => Time to read file from offset 2550136832 to 2684354560 in Process 1/1 + 389.999s => Time to sort elements in Process 1/1 memory + 247.22s => Time to write '/mnt/raid/tmp/SortedRun8999_XV9mWZ' and fill it up with 134217728 sorted elements by Process 1/1 + 120.787s => Time to read file from offset 2684354560 to 2818572288 in Process 1/1 + 393.178s => Time to sort elements in Process 1/1 memory + 249.256s => Time to write '/mnt/raid/tmp/SortedRun8999_FoFxU0' and fill it up with 134217728 sorted elements by Process 1/1 + 118.21s => Time to read file from offset 2818572288 to 2952790016 in Process 1/1 + 391.733s => Time to sort elements in Process 1/1 memory + 248.187s => Time to write '/mnt/raid/tmp/SortedRun8999_9QSACZ' and fill it up with 134217728 sorted elements by Process 1/1 + 119.006s => Time to read file from offset 2952790016 to 3087007744 in Process 1/1 + 394.08s => Time to sort elements in Process 1/1 memory + 251.06s => Time to write '/mnt/raid/tmp/SortedRun8999_oreSOX' and fill it up with 134217728 sorted elements by Process 1/1 + 117.736s => Time to read file from offset 3087007744 to 3221225472 in Process 1/1 + 390.452s => Time to sort elements in Process 1/1 memory + 249.788s => Time to write '/mnt/raid/tmp/SortedRun8999_3MwnLY' and fill it up with 134217728 sorted elements by Process 1/1 + 120.947s => Time to read file from offset 3221225472 to 3355443200 in Process 1/1 + 393.368s => Time to sort elements in Process 1/1 memory + 247.324s => Time to write '/mnt/raid/tmp/SortedRun8999_IFWlBX' and fill it up with 134217728 sorted elements by Process 1/1 + 119.317s => Time to read file from offset 3355443200 to 3489660928 in Process 1/1 + 391.469s => Time to sort elements in Process 1/1 memory + 247.093s => Time to write '/mnt/raid/tmp/SortedRun8999_YFint1' and fill it up with 134217728 sorted elements by Process 1/1 + 119.68s => Time to read file from offset 3489660928 to 3623878656 in Process 1/1 + 388.824s => Time to sort elements in Process 1/1 memory + 250.065s => Time to write '/mnt/raid/tmp/SortedRun8999_yWqSX1' and fill it up with 134217728 sorted elements by Process 1/1 + 118.392s => Time to read file from offset 3623878656 to 3758096384 in Process 1/1 + 393.599s => Time to sort elements in Process 1/1 memory + 249.228s => Time to write '/mnt/raid/tmp/SortedRun8999_hYQUBY' and fill it up with 134217728 sorted elements by Process 1/1 + 118.49s => Time to read file from offset 3758096384 to 3892314112 in Process 1/1 + 396.211s => Time to sort elements in Process 1/1 memory + 251.769s => Time to write '/mnt/raid/tmp/SortedRun8999_a9Gi60' and fill it up with 134217728 sorted elements by Process 1/1 + 117.817s => Time to read file from offset 3892314112 to 4026531840 in Process 1/1 + 393.227s => Time to sort elements in Process 1/1 memory + 247.61s => Time to write '/mnt/raid/tmp/SortedRun8999_wpCmlY' and fill it up with 134217728 sorted elements by Process 1/1 +22860.1s => Time function sortedRuns() in Process 1/1 +381.007min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2216.out b/SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2216.out new file mode 100644 index 0000000..810b654 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2216.out @@ -0,0 +1,95 @@ +Using 2 nodes for sorting 30Gb file '/mnt/raid/testlists/30Gib.bin' of 4026531840 elements + + 194.868s => Time to read file from offset 0 to 134217728 in Process 1/2 + 196.588s => Time to read file from offset 134217728 to 268435456 in Process 2/2 + 388.321s => Time to sort elements in Process 2/2 memory + 392.726s => Time to sort elements in Process 1/2 memory + 443.913s => Time to write '/mnt/raid/tmp/SortedRun6448_8eifR3' and fill it up with 134217728 sorted elements by Process 2/2 + 445.494s => Time to write '/mnt/raid/tmp/SortedRun6448_B1MSUs' and fill it up with 134217728 sorted elements by Process 1/2 + 183.735s => Time to read file from offset 402653184 to 536870912 in Process 2/2 + 182.415s => Time to read file from offset 268435456 to 402653184 in Process 1/2 + 396.133s => Time to sort elements in Process 2/2 memory + 393.414s => Time to sort elements in Process 1/2 memory + 433.625s => Time to write '/mnt/raid/tmp/SortedRun6448_iOQLxZ' and fill it up with 134217728 sorted elements by Process 2/2 + 433.609s => Time to write '/mnt/raid/tmp/SortedRun6448_yp46Es' and fill it up with 134217728 sorted elements by Process 1/2 + 192.157s => Time to read file from offset 536870912 to 671088640 in Process 1/2 + 193.066s => Time to read file from offset 671088640 to 805306368 in Process 2/2 + 390.427s => Time to sort elements in Process 1/2 memory + 391.08s => Time to sort elements in Process 2/2 memory + 432.487s => Time to write '/mnt/raid/tmp/SortedRun6448_rUrG3s' and fill it up with 134217728 sorted elements by Process 1/2 + 432.869s => Time to write '/mnt/raid/tmp/SortedRun6448_tWhrv1' and fill it up with 134217728 sorted elements by Process 2/2 + 186.859s => Time to read file from offset 805306368 to 939524096 in Process 1/2 + 187.637s => Time to read file from offset 939524096 to 1073741824 in Process 2/2 + 390.988s => Time to sort elements in Process 1/2 memory + 391.2s => Time to sort elements in Process 2/2 memory + 433.436s => Time to write '/mnt/raid/tmp/SortedRun6448_qzbNWs' and fill it up with 134217728 sorted elements by Process 1/2 + 434.375s => Time to write '/mnt/raid/tmp/SortedRun6448_zAOcY0' and fill it up with 134217728 sorted elements by Process 2/2 + 191.279s => Time to read file from offset 1073741824 to 1207959552 in Process 1/2 + 191.477s => Time to read file from offset 1207959552 to 1342177280 in Process 2/2 + 396.175s => Time to sort elements in Process 1/2 memory + 393.64s => Time to sort elements in Process 2/2 memory + 442.269s => Time to write '/mnt/raid/tmp/SortedRun6448_B0QoUr' and fill it up with 134217728 sorted elements by Process 1/2 + 442.634s => Time to write '/mnt/raid/tmp/SortedRun6448_OI8TO1' and fill it up with 134217728 sorted elements by Process 2/2 + 195.227s => Time to read file from offset 1342177280 to 1476395008 in Process 1/2 + 195.814s => Time to read file from offset 1476395008 to 1610612736 in Process 2/2 + 393.233s => Time to sort elements in Process 1/2 memory + 398.125s => Time to sort elements in Process 2/2 memory + 429.561s => Time to write '/mnt/raid/tmp/SortedRun6448_ZV75Rs' and fill it up with 134217728 sorted elements by Process 1/2 + 431.44s => Time to write '/mnt/raid/tmp/SortedRun6448_DeRo9Z' and fill it up with 134217728 sorted elements by Process 2/2 + 185.716s => Time to read file from offset 1610612736 to 1744830464 in Process 1/2 + 186.821s => Time to read file from offset 1744830464 to 1879048192 in Process 2/2 + 392.937s => Time to sort elements in Process 1/2 memory + 392.315s => Time to sort elements in Process 2/2 memory + 420.209s => Time to write '/mnt/raid/tmp/SortedRun6448_rI45Sr' and fill it up with 134217728 sorted elements by Process 1/2 + 423.938s => Time to write '/mnt/raid/tmp/SortedRun6448_0Wm6G2' and fill it up with 134217728 sorted elements by Process 2/2 + 183.764s => Time to read file from offset 1879048192 to 2013265920 in Process 1/2 + 184.269s => Time to read file from offset 2013265920 to 2147483648 in Process 2/2 + 392.731s => Time to sort elements in Process 1/2 memory + 399.448s => Time to sort elements in Process 2/2 memory + 418.616s => Time to write '/mnt/raid/tmp/SortedRun6448_GaLNYv' and fill it up with 134217728 sorted elements by Process 1/2 + 423.741s => Time to write '/mnt/raid/tmp/SortedRun6448_wOWfi1' and fill it up with 134217728 sorted elements by Process 2/2 + 179.787s => Time to read file from offset 2147483648 to 2281701376 in Process 1/2 + 179.992s => Time to read file from offset 2281701376 to 2415919104 in Process 2/2 + 391.616s => Time to sort elements in Process 1/2 memory + 391.828s => Time to sort elements in Process 2/2 memory + 416.335s => Time to write '/mnt/raid/tmp/SortedRun6448_kFvD4s' and fill it up with 134217728 sorted elements by Process 1/2 + 423.662s => Time to write '/mnt/raid/tmp/SortedRun6448_ctSmt3' and fill it up with 134217728 sorted elements by Process 2/2 + 175.573s => Time to read file from offset 2415919104 to 2550136832 in Process 1/2 + 175.806s => Time to read file from offset 2550136832 to 2684354560 in Process 2/2 + 393.612s => Time to sort elements in Process 1/2 memory + 389.915s => Time to sort elements in Process 2/2 memory + 409.03s => Time to write '/mnt/raid/tmp/SortedRun6448_1Zpxxu' and fill it up with 134217728 sorted elements by Process 1/2 + 419.048s => Time to write '/mnt/raid/tmp/SortedRun6448_ZgblH2' and fill it up with 134217728 sorted elements by Process 2/2 + 173.88s => Time to read file from offset 2684354560 to 2818572288 in Process 1/2 + 171.739s => Time to read file from offset 2818572288 to 2952790016 in Process 2/2 + 392.648s => Time to sort elements in Process 1/2 memory + 391.621s => Time to sort elements in Process 2/2 memory + 403.776s => Time to write '/mnt/raid/tmp/SortedRun6448_SDfE7s' and fill it up with 134217728 sorted elements by Process 1/2 + 414.514s => Time to write '/mnt/raid/tmp/SortedRun6448_9wfzr2' and fill it up with 134217728 sorted elements by Process 2/2 + 168.108s => Time to read file from offset 2952790016 to 3087007744 in Process 1/2 + 167.51s => Time to read file from offset 3087007744 to 3221225472 in Process 2/2 + 392.326s => Time to sort elements in Process 1/2 memory + 390.764s => Time to sort elements in Process 2/2 memory + 394.978s => Time to write '/mnt/raid/tmp/SortedRun6448_DfZp0u' and fill it up with 134217728 sorted elements by Process 1/2 + 410.014s => Time to write '/mnt/raid/tmp/SortedRun6448_4sV0IZ' and fill it up with 134217728 sorted elements by Process 2/2 + 164.175s => Time to read file from offset 3221225472 to 3355443200 in Process 1/2 + 161.279s => Time to read file from offset 3355443200 to 3489660928 in Process 2/2 + 393.02s => Time to sort elements in Process 1/2 memory + 392.137s => Time to sort elements in Process 2/2 memory + 390.342s => Time to write '/mnt/raid/tmp/SortedRun6448_0LOkLu' and fill it up with 134217728 sorted elements by Process 1/2 + 410.66s => Time to write '/mnt/raid/tmp/SortedRun6448_u6GVg3' and fill it up with 134217728 sorted elements by Process 2/2 + 153.663s => Time to read file from offset 3489660928 to 3623878656 in Process 1/2 + 152.224s => Time to read file from offset 3623878656 to 3758096384 in Process 2/2 + 388.636s => Time to sort elements in Process 1/2 memory + 393.527s => Time to sort elements in Process 2/2 memory + 363.645s => Time to write '/mnt/raid/tmp/SortedRun6448_ZRcUaw' and fill it up with 134217728 sorted elements by Process 1/2 + 386.785s => Time to write '/mnt/raid/tmp/SortedRun6448_hsUjw0' and fill it up with 134217728 sorted elements by Process 2/2 + 141.625s => Time to read file from offset 3758096384 to 3892314112 in Process 1/2 + 134.632s => Time to read file from offset 3892314112 to 4026531840 in Process 2/2 + 395.466s => Time to sort elements in Process 1/2 memory + 392.836s => Time to sort elements in Process 2/2 memory + 361.798s => Time to write '/mnt/raid/tmp/SortedRun6448_Zckj6u' and fill it up with 134217728 sorted elements by Process 1/2 +14758.3s => Time function sortedRuns() in Process 1/2 + 361.256s => Time to write '/mnt/raid/tmp/SortedRun6448_HuCLy2' and fill it up with 134217728 sorted elements by Process 2/2 +14852.7s => Time function sortedRuns() in Process 2/2 +247.551min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2217.out b/SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2217.out new file mode 100644 index 0000000..be7f420 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2217.out @@ -0,0 +1,96 @@ +Using 3 nodes for sorting 30Gb file '/mnt/raid/testlists/30Gib.bin' of 4026531840 elements + + 276.438s => Time to read file from offset 0 to 134217728 in Process 1/3 + 276.7s => Time to read file from offset 134217728 to 268435456 in Process 2/3 + 277.144s => Time to read file from offset 268435456 to 402653184 in Process 3/3 + 388.084s => Time to sort elements in Process 2/3 memory + 392.771s => Time to sort elements in Process 1/3 memory + 393.386s => Time to sort elements in Process 3/3 memory + 529.904s => Time to write '/mnt/raid/tmp/SortedRun6699_HK6300' and fill it up with 134217728 sorted elements by Process 2/3 + 536.135s => Time to write '/mnt/raid/tmp/SortedRun6699_kWQ9jC' and fill it up with 134217728 sorted elements by Process 1/3 + 535.765s => Time to write '/mnt/raid/tmp/SortedRun6699_xL3ZC8' and fill it up with 134217728 sorted elements by Process 3/3 + 263.506s => Time to read file from offset 536870912 to 671088640 in Process 2/3 + 269.749s => Time to read file from offset 402653184 to 536870912 in Process 1/3 + 269.368s => Time to read file from offset 671088640 to 805306368 in Process 3/3 + 390.323s => Time to sort elements in Process 2/3 memory + 390.158s => Time to sort elements in Process 3/3 memory + 395.668s => Time to sort elements in Process 1/3 memory + 512.251s => Time to write '/mnt/raid/tmp/SortedRun6699_PJBTa2' and fill it up with 134217728 sorted elements by Process 2/3 + 534.732s => Time to write '/mnt/raid/tmp/SortedRun6699_gb58N6' and fill it up with 134217728 sorted elements by Process 3/3 + 534.864s => Time to write '/mnt/raid/tmp/SortedRun6699_IVO5aE' and fill it up with 134217728 sorted elements by Process 1/3 + 227.708s => Time to read file from offset 939524096 to 1073741824 in Process 2/3 + 245.438s => Time to read file from offset 1073741824 to 1207959552 in Process 3/3 + 244.602s => Time to read file from offset 805306368 to 939524096 in Process 1/3 + 391.816s => Time to sort elements in Process 2/3 memory + 390.921s => Time to sort elements in Process 1/3 memory + 396.133s => Time to sort elements in Process 3/3 memory + 473.559s => Time to write '/mnt/raid/tmp/SortedRun6699_hESzh3' and fill it up with 134217728 sorted elements by Process 2/3 + 127.755s => Time to read file from offset 1342177280 to 1476395008 in Process 2/3 + 550.342s => Time to write '/mnt/raid/tmp/SortedRun6699_ecU32C' and fill it up with 134217728 sorted elements by Process 1/3 + 550.146s => Time to write '/mnt/raid/tmp/SortedRun6699_zfmAi8' and fill it up with 134217728 sorted elements by Process 3/3 + 184.987s => Time to read file from offset 1207959552 to 1342177280 in Process 1/3 + 184.375s => Time to read file from offset 1476395008 to 1610612736 in Process 3/3 + 393.214s => Time to sort elements in Process 2/3 memory + 394.267s => Time to sort elements in Process 1/3 memory + 398.387s => Time to sort elements in Process 3/3 memory + 309.188s => Time to write '/mnt/raid/tmp/SortedRun6699_HRACe5' and fill it up with 134217728 sorted elements by Process 2/3 + 127.812s => Time to read file from offset 1744830464 to 1879048192 in Process 2/3 + 485.097s => Time to write '/mnt/raid/tmp/SortedRun6699_a5t4dE' and fill it up with 134217728 sorted elements by Process 1/3 + 484.118s => Time to write '/mnt/raid/tmp/SortedRun6699_V8Pre7' and fill it up with 134217728 sorted elements by Process 3/3 + 392.284s => Time to sort elements in Process 2/3 memory + 188.639s => Time to read file from offset 1610612736 to 1744830464 in Process 1/3 + 188.315s => Time to read file from offset 1879048192 to 2013265920 in Process 3/3 + 263.75s => Time to write '/mnt/raid/tmp/SortedRun6699_Trd4N4' and fill it up with 134217728 sorted elements by Process 2/3 + 121.578s => Time to read file from offset 2147483648 to 2281701376 in Process 2/3 + 392.968s => Time to sort elements in Process 1/3 memory + 392.514s => Time to sort elements in Process 3/3 memory + 391.601s => Time to sort elements in Process 2/3 memory + 455.193s => Time to write '/mnt/raid/tmp/SortedRun6699_VcoihC' and fill it up with 134217728 sorted elements by Process 1/3 + 459.239s => Time to write '/mnt/raid/tmp/SortedRun6699_88kp26' and fill it up with 134217728 sorted elements by Process 3/3 + 187.74s => Time to read file from offset 2013265920 to 2147483648 in Process 1/3 + 187.602s => Time to read file from offset 2281701376 to 2415919104 in Process 3/3 + 383.033s => Time to write '/mnt/raid/tmp/SortedRun6699_qnyLY2' and fill it up with 134217728 sorted elements by Process 2/3 + 124.292s => Time to read file from offset 2550136832 to 2684354560 in Process 2/3 + 391.253s => Time to sort elements in Process 3/3 memory + 399.352s => Time to sort elements in Process 1/3 memory + 389.987s => Time to sort elements in Process 2/3 memory + 490.781s => Time to write '/mnt/raid/tmp/SortedRun6699_fXvvy8' and fill it up with 134217728 sorted elements by Process 3/3 + 492.038s => Time to write '/mnt/raid/tmp/SortedRun6699_XKdqFD' and fill it up with 134217728 sorted elements by Process 1/3 + 185.735s => Time to read file from offset 2684354560 to 2818572288 in Process 3/3 + 478.995s => Time to write '/mnt/raid/tmp/SortedRun6699_lbXJW0' and fill it up with 134217728 sorted elements by Process 2/3 + 186.213s => Time to read file from offset 2415919104 to 2550136832 in Process 1/3 + 126.597s => Time to read file from offset 2952790016 to 3087007744 in Process 2/3 + 392.838s => Time to sort elements in Process 3/3 memory + 393.021s => Time to sort elements in Process 1/3 memory + 393.409s => Time to sort elements in Process 2/3 memory + 506.584s => Time to write '/mnt/raid/tmp/SortedRun6699_RrYvx7' and fill it up with 134217728 sorted elements by Process 3/3 + 511.238s => Time to write '/mnt/raid/tmp/SortedRun6699_sAG6TE' and fill it up with 134217728 sorted elements by Process 1/3 + 497.748s => Time to write '/mnt/raid/tmp/SortedRun6699_ZPYWg2' and fill it up with 134217728 sorted elements by Process 2/3 + 211.572s => Time to read file from offset 3087007744 to 3221225472 in Process 3/3 + 217.166s => Time to read file from offset 2818572288 to 2952790016 in Process 1/3 + 177.882s => Time to read file from offset 3355443200 to 3489660928 in Process 2/3 + 390.073s => Time to sort elements in Process 3/3 memory + 393.216s => Time to sort elements in Process 1/3 memory + 391.933s => Time to sort elements in Process 2/3 memory + 495.128s => Time to write '/mnt/raid/tmp/SortedRun6699_1m64L4' and fill it up with 134217728 sorted elements by Process 3/3 + 518.723s => Time to write '/mnt/raid/tmp/SortedRun6699_a9zPbB' and fill it up with 134217728 sorted elements by Process 1/3 + 518.122s => Time to write '/mnt/raid/tmp/SortedRun6699_la4Yb2' and fill it up with 134217728 sorted elements by Process 2/3 + 194.125s => Time to read file from offset 3489660928 to 3623878656 in Process 3/3 + 217.389s => Time to read file from offset 3221225472 to 3355443200 in Process 1/3 + 191.522s => Time to read file from offset 3758096384 to 3892314112 in Process 2/3 + 388.761s => Time to sort elements in Process 3/3 memory + 393.232s => Time to sort elements in Process 1/3 memory + 395.1s => Time to sort elements in Process 2/3 memory + 446.603s => Time to write '/mnt/raid/tmp/SortedRun6699_UKC9V6' and fill it up with 134217728 sorted elements by Process 3/3 + 126.497s => Time to read file from offset 3892314112 to 4026531840 in Process 3/3 + 529.055s => Time to write '/mnt/raid/tmp/SortedRun6699_HioLDD' and fill it up with 134217728 sorted elements by Process 1/3 + 516.616s => Time to write '/mnt/raid/tmp/SortedRun6699_qfJ6d4' and fill it up with 134217728 sorted elements by Process 2/3 +10170.1s => Time function sortedRuns() in Process 2/3 + 122.888s => Time to read file from offset 3623878656 to 3758096384 in Process 1/3 + 393.014s => Time to sort elements in Process 3/3 memory + 393.438s => Time to sort elements in Process 1/3 memory + 325.7s => Time to write '/mnt/raid/tmp/SortedRun6699_xEUkP5' and fill it up with 134217728 sorted elements by Process 3/3 +10828.6s => Time function sortedRuns() in Process 3/3 + 322.345s => Time to write '/mnt/raid/tmp/SortedRun6699_dTwT2D' and fill it up with 134217728 sorted elements by Process 1/3 +10973.2s => Time function sortedRuns() in Process 1/3 +182.893min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2218.out b/SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2218.out new file mode 100644 index 0000000..313dec5 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2218.out @@ -0,0 +1,98 @@ +Using 5 nodes for sorting 30Gb file '/mnt/raid/testlists/30Gib.bin' of 4026531840 elements + + 459.468s => Time to read file from offset 268435456 to 402653184 in Process 3/5 + 460.824s => Time to read file from offset 536870912 to 671088640 in Process 5/5 + 461.034s => Time to read file from offset 134217728 to 268435456 in Process 2/5 + 461.098s => Time to read file from offset 0 to 134217728 in Process 1/5 + 461.606s => Time to read file from offset 402653184 to 536870912 in Process 4/5 + 388.561s => Time to sort elements in Process 2/5 memory + 390.544s => Time to sort elements in Process 5/5 memory + 393.62s => Time to sort elements in Process 3/5 memory + 392.769s => Time to sort elements in Process 1/5 memory + 395.679s => Time to sort elements in Process 4/5 memory + 814.592s => Time to write '/mnt/raid/tmp/SortedRun6621_PgjJ0k' and fill it up with 134217728 sorted elements by Process 2/5 + 825.913s => Time to write '/mnt/raid/tmp/SortedRun6621_Hln9lI' and fill it up with 134217728 sorted elements by Process 5/5 + 824.977s => Time to write '/mnt/raid/tmp/SortedRun6621_1J7XNu' and fill it up with 134217728 sorted elements by Process 3/5 + 823.311s => Time to write '/mnt/raid/tmp/SortedRun6621_mNZVtk' and fill it up with 134217728 sorted elements by Process 4/5 + 827.352s => Time to write '/mnt/raid/tmp/SortedRun6621_kptoi0' and fill it up with 134217728 sorted elements by Process 1/5 + 423.022s => Time to read file from offset 805306368 to 939524096 in Process 2/5 + 448.381s => Time to read file from offset 1207959552 to 1342177280 in Process 5/5 + 450.398s => Time to read file from offset 939524096 to 1073741824 in Process 3/5 + 448.41s => Time to read file from offset 1073741824 to 1207959552 in Process 4/5 + 448.365s => Time to read file from offset 671088640 to 805306368 in Process 1/5 + 391.286s => Time to sort elements in Process 2/5 memory + 393.545s => Time to sort elements in Process 5/5 memory + 391.409s => Time to sort elements in Process 3/5 memory + 391.126s => Time to sort elements in Process 1/5 memory + 395.928s => Time to sort elements in Process 4/5 memory + 713.428s => Time to write '/mnt/raid/tmp/SortedRun6621_IDsMdp' and fill it up with 134217728 sorted elements by Process 2/5 + 129.327s => Time to read file from offset 1476395008 to 1610612736 in Process 2/5 + 811.33s => Time to write '/mnt/raid/tmp/SortedRun6621_1VyTqK' and fill it up with 134217728 sorted elements by Process 5/5 + 815.189s => Time to write '/mnt/raid/tmp/SortedRun6621_5qmWIY' and fill it up with 134217728 sorted elements by Process 1/5 + 817.815s => Time to write '/mnt/raid/tmp/SortedRun6621_uCah6u' and fill it up with 134217728 sorted elements by Process 3/5 + 813.053s => Time to write '/mnt/raid/tmp/SortedRun6621_4pnwXj' and fill it up with 134217728 sorted elements by Process 4/5 + 359.423s => Time to read file from offset 1879048192 to 2013265920 in Process 5/5 + 363.707s => Time to read file from offset 1342177280 to 1476395008 in Process 1/5 + 363.979s => Time to read file from offset 1610612736 to 1744830464 in Process 3/5 + 363.621s => Time to read file from offset 1744830464 to 1879048192 in Process 4/5 + 398.162s => Time to sort elements in Process 2/5 memory + 250.194s => Time to write '/mnt/raid/tmp/SortedRun6621_oaLQ2m' and fill it up with 134217728 sorted elements by Process 2/5 + 393.012s => Time to sort elements in Process 5/5 memory + 121.659s => Time to read file from offset 2147483648 to 2281701376 in Process 2/5 + 393.233s => Time to sort elements in Process 1/5 memory + 392.472s => Time to sort elements in Process 3/5 memory + 392.268s => Time to sort elements in Process 4/5 memory + 391.544s => Time to sort elements in Process 2/5 memory + 696.49s => Time to write '/mnt/raid/tmp/SortedRun6621_iFHNoI' and fill it up with 134217728 sorted elements by Process 5/5 + 715.1s => Time to write '/mnt/raid/tmp/SortedRun6621_QWpMl3' and fill it up with 134217728 sorted elements by Process 1/5 + 718.186s => Time to write '/mnt/raid/tmp/SortedRun6621_1Gmwuu' and fill it up with 134217728 sorted elements by Process 3/5 + 717.817s => Time to write '/mnt/raid/tmp/SortedRun6621_NL7erk' and fill it up with 134217728 sorted elements by Process 4/5 + 564.753s => Time to write '/mnt/raid/tmp/SortedRun6621_m1SjAo' and fill it up with 134217728 sorted elements by Process 2/5 + 319.516s => Time to read file from offset 2550136832 to 2684354560 in Process 5/5 + 375.775s => Time to read file from offset 2013265920 to 2147483648 in Process 1/5 + 380.229s => Time to read file from offset 2281701376 to 2415919104 in Process 3/5 + 380.792s => Time to read file from offset 2415919104 to 2550136832 in Process 4/5 + 222.766s => Time to read file from offset 2818572288 to 2952790016 in Process 2/5 + 389.902s => Time to sort elements in Process 5/5 memory + 399.606s => Time to sort elements in Process 1/5 memory + 391.189s => Time to sort elements in Process 3/5 memory + 393.246s => Time to sort elements in Process 4/5 memory + 391.675s => Time to sort elements in Process 2/5 memory + 567.875s => Time to write '/mnt/raid/tmp/SortedRun6621_jOqRQL' and fill it up with 134217728 sorted elements by Process 5/5 + 127.814s => Time to read file from offset 3221225472 to 3355443200 in Process 5/5 + 757.613s => Time to write '/mnt/raid/tmp/SortedRun6621_FU35D2' and fill it up with 134217728 sorted elements by Process 1/5 + 757.974s => Time to write '/mnt/raid/tmp/SortedRun6621_qpc83t' and fill it up with 134217728 sorted elements by Process 3/5 + 758.082s => Time to write '/mnt/raid/tmp/SortedRun6621_V0yXng' and fill it up with 134217728 sorted elements by Process 4/5 + 726.274s => Time to write '/mnt/raid/tmp/SortedRun6621_NFA9on' and fill it up with 134217728 sorted elements by Process 2/5 + 393.016s => Time to sort elements in Process 5/5 memory + 346.785s => Time to read file from offset 2684354560 to 2818572288 in Process 1/5 + 353.916s => Time to read file from offset 2952790016 to 3087007744 in Process 3/5 + 355.161s => Time to read file from offset 3087007744 to 3221225472 in Process 4/5 + 327.993s => Time to read file from offset 3489660928 to 3623878656 in Process 2/5 + 292.397s => Time to write '/mnt/raid/tmp/SortedRun6621_KwIZVH' and fill it up with 134217728 sorted elements by Process 5/5 + 120.502s => Time to read file from offset 3892314112 to 4026531840 in Process 5/5 + 392.996s => Time to sort elements in Process 1/5 memory + 392.55s => Time to sort elements in Process 3/5 memory + 390.165s => Time to sort elements in Process 4/5 memory + 389.147s => Time to sort elements in Process 2/5 memory + 392.822s => Time to sort elements in Process 5/5 memory + 699.947s => Time to write '/mnt/raid/tmp/SortedRun6621_zhnNQ0' and fill it up with 134217728 sorted elements by Process 1/5 + 725.2s => Time to write '/mnt/raid/tmp/SortedRun6621_TNKdOj' and fill it up with 134217728 sorted elements by Process 4/5 + 727.379s => Time to write '/mnt/raid/tmp/SortedRun6621_8QIyIr' and fill it up with 134217728 sorted elements by Process 3/5 + 719.629s => Time to write '/mnt/raid/tmp/SortedRun6621_07tVrm' and fill it up with 134217728 sorted elements by Process 2/5 +7827.53s => Time function sortedRuns() in Process 2/5 + 612.016s => Time to write '/mnt/raid/tmp/SortedRun6621_QOuXgM' and fill it up with 134217728 sorted elements by Process 5/5 +7997.41s => Time function sortedRuns() in Process 5/5 + 234.414s => Time to read file from offset 3355443200 to 3489660928 in Process 1/5 + 253.251s => Time to read file from offset 3758096384 to 3892314112 in Process 4/5 + 253.591s => Time to read file from offset 3623878656 to 3758096384 in Process 3/5 + 391.751s => Time to sort elements in Process 1/5 memory + 393.366s => Time to sort elements in Process 3/5 memory + 395.063s => Time to sort elements in Process 4/5 memory + 466.415s => Time to write '/mnt/raid/tmp/SortedRun6621_2NBty1' and fill it up with 134217728 sorted elements by Process 1/5 +8875.61s => Time function sortedRuns() in Process 1/5 + 505.945s => Time to write '/mnt/raid/tmp/SortedRun6621_EIcjNs' and fill it up with 134217728 sorted elements by Process 3/5 +8970.74s => Time function sortedRuns() in Process 3/5 + 505.876s => Time to write '/mnt/raid/tmp/SortedRun6621_wq4ySh' and fill it up with 134217728 sorted elements by Process 4/5 +8972.16s => Time function sortedRuns() in Process 4/5 +149.542min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2219.out b/SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2219.out new file mode 100644 index 0000000..826351b --- /dev/null +++ b/SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2219.out @@ -0,0 +1,99 @@ +Using 6 nodes for sorting 30Gb file '/mnt/raid/testlists/30Gib.bin' of 4026531840 elements + + 551.851s => Time to read file from offset 134217728 to 268435456 in Process 2/6 + 552.984s => Time to read file from offset 536870912 to 671088640 in Process 5/6 + 553.478s => Time to read file from offset 0 to 134217728 in Process 1/6 + 553.77s => Time to read file from offset 268435456 to 402653184 in Process 3/6 + 553.873s => Time to read file from offset 671088640 to 805306368 in Process 6/6 + 553.902s => Time to read file from offset 402653184 to 536870912 in Process 4/6 + 388.425s => Time to sort elements in Process 2/6 memory + 390.11s => Time to sort elements in Process 5/6 memory + 391.381s => Time to sort elements in Process 6/6 memory + 392.725s => Time to sort elements in Process 1/6 memory + 393.839s => Time to sort elements in Process 3/6 memory + 395.783s => Time to sort elements in Process 4/6 memory + 990.317s => Time to write '/mnt/raid/tmp/SortedRun7836_jZFU3R' and fill it up with 134217728 sorted elements by Process 2/6 + 994.394s => Time to write '/mnt/raid/tmp/SortedRun7836_spLf44' and fill it up with 134217728 sorted elements by Process 5/6 + 999.997s => Time to write '/mnt/raid/tmp/SortedRun7836_4XQQ4w' and fill it up with 134217728 sorted elements by Process 6/6 + 1002.07s => Time to write '/mnt/raid/tmp/SortedRun7836_gWYsx8' and fill it up with 134217728 sorted elements by Process 1/6 + 1001.55s => Time to write '/mnt/raid/tmp/SortedRun7836_60hSRS' and fill it up with 134217728 sorted elements by Process 3/6 + 1001.67s => Time to write '/mnt/raid/tmp/SortedRun7836_oJxwpF' and fill it up with 134217728 sorted elements by Process 4/6 + 510.778s => Time to read file from offset 939524096 to 1073741824 in Process 2/6 + 529.05s => Time to read file from offset 1342177280 to 1476395008 in Process 5/6 + 537.577s => Time to read file from offset 1476395008 to 1610612736 in Process 6/6 + 537.833s => Time to read file from offset 805306368 to 939524096 in Process 1/6 + 537.178s => Time to read file from offset 1073741824 to 1207959552 in Process 3/6 + 535.087s => Time to read file from offset 1207959552 to 1342177280 in Process 4/6 + 391.748s => Time to sort elements in Process 2/6 memory + 393.117s => Time to sort elements in Process 5/6 memory + 391.136s => Time to sort elements in Process 1/6 memory + 393.672s => Time to sort elements in Process 4/6 memory + 397.939s => Time to sort elements in Process 6/6 memory + 395.988s => Time to sort elements in Process 3/6 memory + 897.696s => Time to write '/mnt/raid/tmp/SortedRun7836_IaijQS' and fill it up with 134217728 sorted elements by Process 2/6 + 964.103s => Time to write '/mnt/raid/tmp/SortedRun7836_twVhY5' and fill it up with 134217728 sorted elements by Process 5/6 + 977.696s => Time to write '/mnt/raid/tmp/SortedRun7836_uHvvy7' and fill it up with 134217728 sorted elements by Process 1/6 + 982.055s => Time to write '/mnt/raid/tmp/SortedRun7836_urY2jy' and fill it up with 134217728 sorted elements by Process 6/6 + 982.526s => Time to write '/mnt/raid/tmp/SortedRun7836_JKhPGQ' and fill it up with 134217728 sorted elements by Process 3/6 + 984.596s => Time to write '/mnt/raid/tmp/SortedRun7836_GxkbfF' and fill it up with 134217728 sorted elements by Process 4/6 + 171.166s => Time to read file from offset 1744830464 to 1879048192 in Process 2/6 + 413.993s => Time to read file from offset 2147483648 to 2281701376 in Process 5/6 + 392.591s => Time to sort elements in Process 2/6 memory + 455.701s => Time to read file from offset 1610612736 to 1744830464 in Process 1/6 + 448.748s => Time to read file from offset 2281701376 to 2415919104 in Process 6/6 + 447.251s => Time to read file from offset 2013265920 to 2147483648 in Process 4/6 + 447.847s => Time to read file from offset 1879048192 to 2013265920 in Process 3/6 + 252.645s => Time to write '/mnt/raid/tmp/SortedRun7836_XGKsoT' and fill it up with 134217728 sorted elements by Process 2/6 + 391.543s => Time to sort elements in Process 5/6 memory + 124.145s => Time to read file from offset 2550136832 to 2684354560 in Process 2/6 + 392.439s => Time to sort elements in Process 1/6 memory + 391.526s => Time to sort elements in Process 6/6 memory + 392.527s => Time to sort elements in Process 3/6 memory + 399.241s => Time to sort elements in Process 4/6 memory + 389.948s => Time to sort elements in Process 2/6 memory + 741.137s => Time to write '/mnt/raid/tmp/SortedRun7836_4WRBO2' and fill it up with 134217728 sorted elements by Process 5/6 + 128.334s => Time to read file from offset 2952790016 to 3087007744 in Process 5/6 + 881.142s => Time to write '/mnt/raid/tmp/SortedRun7836_tRTCD6' and fill it up with 134217728 sorted elements by Process 1/6 + 883.216s => Time to write '/mnt/raid/tmp/SortedRun7836_l3q1Yx' and fill it up with 134217728 sorted elements by Process 6/6 + 882.447s => Time to write '/mnt/raid/tmp/SortedRun7836_DDleIR' and fill it up with 134217728 sorted elements by Process 3/6 + 884.337s => Time to write '/mnt/raid/tmp/SortedRun7836_7gXp0F' and fill it up with 134217728 sorted elements by Process 4/6 + 705.128s => Time to write '/mnt/raid/tmp/SortedRun7836_ezv4wT' and fill it up with 134217728 sorted elements by Process 2/6 + 392.326s => Time to sort elements in Process 5/6 memory + 404.029s => Time to read file from offset 2415919104 to 2550136832 in Process 1/6 + 408.895s => Time to read file from offset 3087007744 to 3221225472 in Process 6/6 + 414.323s => Time to read file from offset 2684354560 to 2818572288 in Process 3/6 + 409.923s => Time to read file from offset 2818572288 to 2952790016 in Process 4/6 + 297.709s => Time to read file from offset 3355443200 to 3489660928 in Process 2/6 + 316.537s => Time to write '/mnt/raid/tmp/SortedRun7836_SxBRI2' and fill it up with 134217728 sorted elements by Process 5/6 + 121.788s => Time to read file from offset 3758096384 to 3892314112 in Process 5/6 + 393.327s => Time to sort elements in Process 1/6 memory + 390.808s => Time to sort elements in Process 6/6 memory + 392.506s => Time to sort elements in Process 3/6 memory + 391.829s => Time to sort elements in Process 4/6 memory + 391.188s => Time to sort elements in Process 2/6 memory + 395.035s => Time to sort elements in Process 5/6 memory + 874.613s => Time to write '/mnt/raid/tmp/SortedRun7836_004rB7' and fill it up with 134217728 sorted elements by Process 1/6 + 890.11s => Time to write '/mnt/raid/tmp/SortedRun7836_uCsU3x' and fill it up with 134217728 sorted elements by Process 6/6 + 901.124s => Time to write '/mnt/raid/tmp/SortedRun7836_O9wfLR' and fill it up with 134217728 sorted elements by Process 3/6 + 901.487s => Time to write '/mnt/raid/tmp/SortedRun7836_ofIKyD' and fill it up with 134217728 sorted elements by Process 4/6 + 897.546s => Time to write '/mnt/raid/tmp/SortedRun7836_0hOhkQ' and fill it up with 134217728 sorted elements by Process 2/6 +7355.06s => Time function sortedRuns() in Process 2/6 + 756.466s => Time to write '/mnt/raid/tmp/SortedRun7836_9136z4' and fill it up with 134217728 sorted elements by Process 5/6 +7483.18s => Time function sortedRuns() in Process 5/6 + 309.987s => Time to read file from offset 3221225472 to 3355443200 in Process 1/6 + 332.703s => Time to read file from offset 3892314112 to 4026531840 in Process 6/6 + 336.161s => Time to read file from offset 3489660928 to 3623878656 in Process 3/6 + 332.663s => Time to read file from offset 3623878656 to 3758096384 in Process 4/6 + 393.62s => Time to sort elements in Process 1/6 memory + 393.278s => Time to sort elements in Process 6/6 memory + 388.589s => Time to sort elements in Process 3/6 memory + 393.44s => Time to sort elements in Process 4/6 memory + 569.029s => Time to write '/mnt/raid/tmp/SortedRun7836_l4BND8' and fill it up with 134217728 sorted elements by Process 1/6 +8530.86s => Time function sortedRuns() in Process 1/6 + 620.16s => Time to write '/mnt/raid/tmp/SortedRun7836_A2xD4w' and fill it up with 134217728 sorted elements by Process 6/6 +8624.82s => Time function sortedRuns() in Process 6/6 + 619.033s => Time to write '/mnt/raid/tmp/SortedRun7836_eaad6R' and fill it up with 134217728 sorted elements by Process 3/6 +8642.45s => Time function sortedRuns() in Process 3/6 + 615.26s => Time to write '/mnt/raid/tmp/SortedRun7836_SWespC' and fill it up with 134217728 sorted elements by Process 4/6 +8643.88s => Time function sortedRuns() in Process 4/6 +144.071min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2262.out b/SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2262.out new file mode 100644 index 0000000..6fc00bb --- /dev/null +++ b/SortingAlg/dataset/nomerge/t30/Distributed_Sorting.2262.out @@ -0,0 +1,108 @@ +Using 15 nodes for sorting 30Gb file '/mnt/raid/testlists/30Gib.bin' of 4026531840 elements + + 1383.27s => Time to read file from offset 0 to 134217728 in Process 1/15 + 1383.44s => Time to read file from offset 536870912 to 671088640 in Process 5/15 + 1383.62s => Time to read file from offset 134217728 to 268435456 in Process 2/15 + 1383.75s => Time to read file from offset 1610612736 to 1744830464 in Process 13/15 + 1383.88s => Time to read file from offset 1073741824 to 1207959552 in Process 9/15 + 1384s => Time to read file from offset 1207959552 to 1342177280 in Process 10/15 + 1384.11s => Time to read file from offset 1744830464 to 1879048192 in Process 14/15 + 1384.19s => Time to read file from offset 671088640 to 805306368 in Process 6/15 + 1384.39s => Time to read file from offset 402653184 to 536870912 in Process 4/15 + 1384.57s => Time to read file from offset 268435456 to 402653184 in Process 3/15 + 1384.69s => Time to read file from offset 1879048192 to 2013265920 in Process 15/15 + 1384.74s => Time to read file from offset 1476395008 to 1610612736 in Process 12/15 + 1384.79s => Time to read file from offset 1342177280 to 1476395008 in Process 11/15 + 1384.82s => Time to read file from offset 805306368 to 939524096 in Process 7/15 + 1384.83s => Time to read file from offset 939524096 to 1073741824 in Process 8/15 + 388.148s => Time to sort elements in Process 2/15 memory + 390.274s => Time to sort elements in Process 5/15 memory + 390.302s => Time to sort elements in Process 6/15 memory + 390.702s => Time to sort elements in Process 8/15 memory + 390.825s => Time to sort elements in Process 7/15 memory + 392.355s => Time to sort elements in Process 13/15 memory + 392.084s => Time to sort elements in Process 14/15 memory + 392.596s => Time to sort elements in Process 15/15 memory + 394.26s => Time to sort elements in Process 1/15 memory + 393.585s => Time to sort elements in Process 10/15 memory + 392.912s => Time to sort elements in Process 11/15 memory + 393.299s => Time to sort elements in Process 3/15 memory + 395.701s => Time to sort elements in Process 9/15 memory + 395.577s => Time to sort elements in Process 4/15 memory + 397.856s => Time to sort elements in Process 12/15 memory + 1563.9s => Time to write '/mnt/raid/tmp/SortedRun9788_ZBHRkK' and fill it up with 134217728 sorted elements by Process 2/15 + 1570.89s => Time to write '/mnt/raid/tmp/SortedRun9788_s25kUG' and fill it up with 134217728 sorted elements by Process 5/15 + 1573.5s => Time to write '/mnt/raid/tmp/SortedRun9788_xkLWat' and fill it up with 134217728 sorted elements by Process 6/15 + 1584.79s => Time to write '/mnt/raid/tmp/SortedRun9788_VEndUu' and fill it up with 134217728 sorted elements by Process 13/15 + 1590.31s => Time to write '/mnt/raid/tmp/SortedRun9788_m4gOQD' and fill it up with 134217728 sorted elements by Process 8/15 + 1591.37s => Time to write '/mnt/raid/tmp/SortedRun9788_cFlUF2' and fill it up with 134217728 sorted elements by Process 7/15 + 1587.53s => Time to write '/mnt/raid/tmp/SortedRun9788_28hJEx' and fill it up with 134217728 sorted elements by Process 3/15 + 1588.37s => Time to write '/mnt/raid/tmp/SortedRun9788_EN9GXK' and fill it up with 134217728 sorted elements by Process 4/15 + 1590.54s => Time to write '/mnt/raid/tmp/SortedRun9788_KULNHg' and fill it up with 134217728 sorted elements by Process 11/15 + 1592.59s => Time to write '/mnt/raid/tmp/SortedRun9788_1r2fnQ' and fill it up with 134217728 sorted elements by Process 10/15 + 1595.17s => Time to write '/mnt/raid/tmp/SortedRun9788_TVlvtR' and fill it up with 134217728 sorted elements by Process 14/15 + 1592.1s => Time to write '/mnt/raid/tmp/SortedRun9788_RYf8BF' and fill it up with 134217728 sorted elements by Process 15/15 + 1592.1s => Time to write '/mnt/raid/tmp/SortedRun9788_01qp5u' and fill it up with 134217728 sorted elements by Process 1/15 + 1595.19s => Time to write '/mnt/raid/tmp/SortedRun9788_lUuJmm' and fill it up with 134217728 sorted elements by Process 9/15 + 1590.61s => Time to write '/mnt/raid/tmp/SortedRun9788_HNw2VI' and fill it up with 134217728 sorted elements by Process 12/15 + 1211.18s => Time to read file from offset 2147483648 to 2281701376 in Process 2/15 + 1290.86s => Time to read file from offset 2550136832 to 2684354560 in Process 5/15 + 1316.58s => Time to read file from offset 2684354560 to 2818572288 in Process 6/15 + 1353.51s => Time to read file from offset 3623878656 to 3758096384 in Process 13/15 + 1345.99s => Time to read file from offset 3892314112 to 4026531840 in Process 15/15 + 1354.94s => Time to read file from offset 2952790016 to 3087007744 in Process 8/15 + 1355.12s => Time to read file from offset 2818572288 to 2952790016 in Process 7/15 + 1355.74s => Time to read file from offset 2281701376 to 2415919104 in Process 3/15 + 1355.17s => Time to read file from offset 2415919104 to 2550136832 in Process 4/15 + 1354.81s => Time to read file from offset 3355443200 to 3489660928 in Process 11/15 + 1353.5s => Time to read file from offset 3758096384 to 3892314112 in Process 14/15 + 1353.66s => Time to read file from offset 3221225472 to 3355443200 in Process 10/15 + 1353.72s => Time to read file from offset 2013265920 to 2147483648 in Process 1/15 + 1350.51s => Time to read file from offset 3087007744 to 3221225472 in Process 9/15 + 1349.83s => Time to read file from offset 3489660928 to 3623878656 in Process 12/15 + 391.701s => Time to sort elements in Process 2/15 memory + 389.919s => Time to sort elements in Process 5/15 memory + 393.164s => Time to sort elements in Process 6/15 memory + 393.209s => Time to sort elements in Process 13/15 memory + 394.599s => Time to sort elements in Process 15/15 memory + 392.064s => Time to sort elements in Process 8/15 memory + 391.59s => Time to sort elements in Process 7/15 memory + 388.735s => Time to sort elements in Process 12/15 memory + 391.616s => Time to sort elements in Process 3/15 memory + 390.824s => Time to sort elements in Process 11/15 memory + 389.942s => Time to sort elements in Process 9/15 memory + 393.035s => Time to sort elements in Process 4/15 memory + 392.987s => Time to sort elements in Process 10/15 memory + 394.855s => Time to sort elements in Process 14/15 memory + 399.04s => Time to sort elements in Process 1/15 memory + 983.742s => Time to write '/mnt/raid/tmp/SortedRun9788_t5MKtL' and fill it up with 134217728 sorted elements by Process 2/15 +5923.44s => Time function sortedRuns() in Process 2/15 + 1397.38s => Time to write '/mnt/raid/tmp/SortedRun9788_QjEVYJ' and fill it up with 134217728 sorted elements by Process 5/15 +6423.6s => Time function sortedRuns() in Process 5/15 + 1441.67s => Time to write '/mnt/raid/tmp/SortedRun9788_V8N40q' and fill it up with 134217728 sorted elements by Process 6/15 +6500.44s => Time function sortedRuns() in Process 6/15 + 1519.04s => Time to write '/mnt/raid/tmp/SortedRun9788_ndWn1u' and fill it up with 134217728 sorted elements by Process 13/15 +6628.21s => Time function sortedRuns() in Process 13/15 + 1513.28s => Time to write '/mnt/raid/tmp/SortedRun9788_ibKuwf' and fill it up with 134217728 sorted elements by Process 11/15 +6630.74s => Time function sortedRuns() in Process 11/15 + 1514.42s => Time to write '/mnt/raid/tmp/SortedRun9788_hSVVLx' and fill it up with 134217728 sorted elements by Process 3/15 +6631.43s => Time function sortedRuns() in Process 3/15 + 1521.81s => Time to write '/mnt/raid/tmp/SortedRun9788_8OGuUE' and fill it up with 134217728 sorted elements by Process 15/15 +6635.94s => Time function sortedRuns() in Process 15/15 + 1518.56s => Time to write '/mnt/raid/tmp/SortedRun9788_1snyjp' and fill it up with 134217728 sorted elements by Process 9/15 +6636.06s => Time function sortedRuns() in Process 9/15 + 1521.38s => Time to write '/mnt/raid/tmp/SortedRun9788_XqOYOF' and fill it up with 134217728 sorted elements by Process 12/15 +6638.39s => Time function sortedRuns() in Process 12/15 + 1520.99s => Time to write '/mnt/raid/tmp/SortedRun9788_NCcchM' and fill it up with 134217728 sorted elements by Process 4/15 +6639.83s => Time function sortedRuns() in Process 4/15 + 1520.31s => Time to write '/mnt/raid/tmp/SortedRun9788_620gCN' and fill it up with 134217728 sorted elements by Process 10/15 +6640.67s => Time function sortedRuns() in Process 10/15 + 1526.57s => Time to write '/mnt/raid/tmp/SortedRun9788_k7D94C' and fill it up with 134217728 sorted elements by Process 8/15 +6641.33s => Time function sortedRuns() in Process 8/15 + 1526.77s => Time to write '/mnt/raid/tmp/SortedRun9788_hVRtg2' and fill it up with 134217728 sorted elements by Process 7/15 +6642.48s => Time function sortedRuns() in Process 7/15 + 1516.87s => Time to write '/mnt/raid/tmp/SortedRun9788_t77FVv' and fill it up with 134217728 sorted elements by Process 1/15 +6643.45s => Time function sortedRuns() in Process 1/15 + 1521.8s => Time to write '/mnt/raid/tmp/SortedRun9788_nM0BpS' and fill it up with 134217728 sorted elements by Process 14/15 +6643.45s => Time function sortedRuns() in Process 14/15 +110.732min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t8/Distributed_Sorting.2186.out b/SortingAlg/dataset/nomerge/t8/Distributed_Sorting.2186.out new file mode 100644 index 0000000..ff41e1f --- /dev/null +++ b/SortingAlg/dataset/nomerge/t8/Distributed_Sorting.2186.out @@ -0,0 +1,28 @@ +Using 1 nodes for sorting 8Gb file '/mnt/raid/testlists/8Gib.bin' of 1073741824 elements + + 86.2626s => Time to read file from offset 0 to 134217728 in Process 1/1 + 393.127s => Time to sort elements in Process 1/1 memory + 245.721s => Time to write '/mnt/raid/tmp/SortedRun4909_uqSqXQ' and fill it up with 134217728 sorted elements by Process 1/1 + 120.752s => Time to read file from offset 134217728 to 268435456 in Process 1/1 + 395.189s => Time to sort elements in Process 1/1 memory + 244.911s => Time to write '/mnt/raid/tmp/SortedRun4909_i5m2gO' and fill it up with 134217728 sorted elements by Process 1/1 + 119.811s => Time to read file from offset 268435456 to 402653184 in Process 1/1 + 392.806s => Time to sort elements in Process 1/1 memory + 245.366s => Time to write '/mnt/raid/tmp/SortedRun4909_iYvEIP' and fill it up with 134217728 sorted elements by Process 1/1 + 121.642s => Time to read file from offset 402653184 to 536870912 in Process 1/1 + 392.011s => Time to sort elements in Process 1/1 memory + 245.932s => Time to write '/mnt/raid/tmp/SortedRun4909_tezEgQ' and fill it up with 134217728 sorted elements by Process 1/1 + 118.665s => Time to read file from offset 536870912 to 671088640 in Process 1/1 + 395.978s => Time to sort elements in Process 1/1 memory + 245.753s => Time to write '/mnt/raid/tmp/SortedRun4909_uKwzNP' and fill it up with 134217728 sorted elements by Process 1/1 + 119.215s => Time to read file from offset 671088640 to 805306368 in Process 1/1 + 394.521s => Time to sort elements in Process 1/1 memory + 246.158s => Time to write '/mnt/raid/tmp/SortedRun4909_Y2EdvQ' and fill it up with 134217728 sorted elements by Process 1/1 + 118.91s => Time to read file from offset 805306368 to 939524096 in Process 1/1 + 390.685s => Time to sort elements in Process 1/1 memory + 244.148s => Time to write '/mnt/raid/tmp/SortedRun4909_WBJyOP' and fill it up with 134217728 sorted elements by Process 1/1 + 117.437s => Time to read file from offset 939524096 to 1073741824 in Process 1/1 + 389.46s => Time to sort elements in Process 1/1 memory + 247.356s => Time to write '/mnt/raid/tmp/SortedRun4909_2eLmaR' and fill it up with 134217728 sorted elements by Process 1/1 +6038.01s => Time function sortedRuns() in Process 1/1 +100.639min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t8/Distributed_Sorting.2187.out b/SortingAlg/dataset/nomerge/t8/Distributed_Sorting.2187.out new file mode 100644 index 0000000..266040f --- /dev/null +++ b/SortingAlg/dataset/nomerge/t8/Distributed_Sorting.2187.out @@ -0,0 +1,29 @@ +Using 2 nodes for sorting 8Gb file '/mnt/raid/testlists/8Gib.bin' of 1073741824 elements + + 130.662s => Time to read file from offset 0 to 134217728 in Process 1/2 + 168.385s => Time to read file from offset 134217728 to 268435456 in Process 2/2 + 392.743s => Time to sort elements in Process 1/2 memory + 395.694s => Time to sort elements in Process 2/2 memory + 389.098s => Time to write '/mnt/raid/tmp/SortedRun6517_0UQ49g' and fill it up with 134217728 sorted elements by Process 1/2 + 408.951s => Time to write '/mnt/raid/tmp/SortedRun6517_KUCRZz' and fill it up with 134217728 sorted elements by Process 2/2 + 161.7s => Time to read file from offset 268435456 to 402653184 in Process 1/2 + 159.179s => Time to read file from offset 402653184 to 536870912 in Process 2/2 + 392.701s => Time to sort elements in Process 1/2 memory + 392.706s => Time to sort elements in Process 2/2 memory + 389.636s => Time to write '/mnt/raid/tmp/SortedRun6517_Ju6GBj' and fill it up with 134217728 sorted elements by Process 1/2 + 416.977s => Time to write '/mnt/raid/tmp/SortedRun6517_HFgYTx' and fill it up with 134217728 sorted elements by Process 2/2 + 148.46s => Time to read file from offset 536870912 to 671088640 in Process 1/2 + 146.659s => Time to read file from offset 671088640 to 805306368 in Process 2/2 + 395.319s => Time to sort elements in Process 1/2 memory + 394.388s => Time to sort elements in Process 2/2 memory + 371.907s => Time to write '/mnt/raid/tmp/SortedRun6517_GKHCxj' and fill it up with 134217728 sorted elements by Process 1/2 + 408.896s => Time to write '/mnt/raid/tmp/SortedRun6517_cYiGOy' and fill it up with 134217728 sorted elements by Process 2/2 + 127.534s => Time to read file from offset 805306368 to 939524096 in Process 1/2 + 124.835s => Time to read file from offset 939524096 to 1073741824 in Process 2/2 + 390.838s => Time to sort elements in Process 1/2 memory + 389.287s => Time to sort elements in Process 2/2 memory + 345.059s => Time to write '/mnt/raid/tmp/SortedRun6517_dr3cpk' and fill it up with 134217728 sorted elements by Process 1/2 +3636.61s => Time function sortedRuns() in Process 1/2 + 344.68s => Time to write '/mnt/raid/tmp/SortedRun6517_WUfWgA' and fill it up with 134217728 sorted elements by Process 2/2 +3752.01s => Time function sortedRuns() in Process 2/2 +62.539min => FULL EXECUTION TIME diff --git a/SortingAlg/dataset/nomerge/t8/Distributed_Sorting.2188.out b/SortingAlg/dataset/nomerge/t8/Distributed_Sorting.2188.out new file mode 100644 index 0000000..edc2a87 --- /dev/null +++ b/SortingAlg/dataset/nomerge/t8/Distributed_Sorting.2188.out @@ -0,0 +1,31 @@ +Using 4 nodes for sorting 8Gb file '/mnt/raid/testlists/8Gib.bin' of 1073741824 elements + + 245.347s => Time to read file from offset 0 to 134217728 in Process 1/4 + 335.545s => Time to read file from offset 268435456 to 402653184 in Process 3/4 + 336.545s => Time to read file from offset 134217728 to 268435456 in Process 2/4 + 336.606s => Time to read file from offset 402653184 to 536870912 in Process 4/4 + 392.912s => Time to sort elements in Process 1/4 memory + 392.703s => Time to sort elements in Process 3/4 memory + 391.882s => Time to sort elements in Process 4/4 memory + 395.408s => Time to sort elements in Process 2/4 memory + 502.157s => Time to write '/mnt/raid/tmp/SortedRun9023_OCsHZf' and fill it up with 134217728 sorted elements by Process 1/4 + 129.666s => Time to read file from offset 536870912 to 671088640 in Process 1/4 + 629.636s => Time to write '/mnt/raid/tmp/SortedRun9023_x9Mm1M' and fill it up with 134217728 sorted elements by Process 3/4 + 632.014s => Time to write '/mnt/raid/tmp/SortedRun9023_CdHrm8' and fill it up with 134217728 sorted elements by Process 4/4 + 633.102s => Time to write '/mnt/raid/tmp/SortedRun9023_EOpif6' and fill it up with 134217728 sorted elements by Process 2/4 + 202.646s => Time to read file from offset 939524096 to 1073741824 in Process 4/4 + 250.131s => Time to read file from offset 805306368 to 939524096 in Process 3/4 + 248.331s => Time to read file from offset 671088640 to 805306368 in Process 2/4 + 394.885s => Time to sort elements in Process 1/4 memory + 244.598s => Time to write '/mnt/raid/tmp/SortedRun9023_Xk9IKe' and fill it up with 134217728 sorted elements by Process 1/4 +1910.26s => Time function sortedRuns() in Process 1/4 + 389.019s => Time to sort elements in Process 4/4 memory + 390.598s => Time to sort elements in Process 3/4 memory + 394.491s => Time to sort elements in Process 2/4 memory + 475.241s => Time to write '/mnt/raid/tmp/SortedRun9023_QbjNO9' and fill it up with 134217728 sorted elements by Process 4/4 +2428.01s => Time function sortedRuns() in Process 4/4 + 511.508s => Time to write '/mnt/raid/tmp/SortedRun9023_yIdmEL' and fill it up with 134217728 sorted elements by Process 3/4 +2510.86s => Time function sortedRuns() in Process 3/4 + 508.101s => Time to write '/mnt/raid/tmp/SortedRun9023_NWrPN4' and fill it up with 134217728 sorted elements by Process 2/4 +2516.95s => Time function sortedRuns() in Process 2/4 +41.9551min => FULL EXECUTION TIME diff --git a/SortingAlg/doTest.sh b/SortingAlg/doTest.sh index 72ca0ad..ab0a927 100755 --- a/SortingAlg/doTest.sh +++ b/SortingAlg/doTest.sh @@ -3,62 +3,141 @@ test=$1 case $test in +8) +# Singolo nodo che lavora sul raid, stessa taglia con numero di nodi diversi + make run NODES="2" ARGS=/mnt/raid/testlists/8Gib.bin; + make run NODES="2-3" ARGS=/mnt/raid/testlists/8Gib.bin; + make run NODES="2-5" ARGS=/mnt/raid/testlists/8Gib.bin; + make run NODES="2-7,9-10" ARGS=/mnt/raid/testlists/8Gib.bin; + ;; +12) +# Singolo nodo che lavora sul raid, stessa taglia con numero di nodi diversi + make run NODES="2" ARGS=/mnt/raid/testlists/12Gib.bin; + make run NODES="2-3" ARGS=/mnt/raid/testlists/12Gib.bin; + make run NODES="2-4" ARGS=/mnt/raid/testlists/12Gib.bin; + make run NODES="2-5" ARGS=/mnt/raid/testlists/12Gib.bin; + make run NODES="2-7" ARGS=/mnt/raid/testlists/12Gib.bin; + make run NODES="2-7,9-14" ARGS=/mnt/raid/testlists/12Gib.bin; + ;; +30) +# Singolo nodo che lavora sul raid, stessa taglia con numero di nodi diversi +# make run NODES="2" ARGS=/mnt/raid/testlists/30Gib.bin; +# make run NODES="2-3" ARGS=/mnt/raid/testlists/30Gib.bin; +# make run NODES="2-4" ARGS=/mnt/raid/testlists/30Gib.bin; +# make run NODES="2-6" ARGS=/mnt/raid/testlists/30Gib.bin; +# make run NODES="2-7" ARGS=/mnt/raid/testlists/30Gib.bin; + make run NODES="2-7,9-17" ARGS=/mnt/raid/testlists/30Gib.bin; + ;; +2481632) +# Singolo nodo che lavora sul raid + make run NODES="2" ARGS=/mnt/raid/testlists/2Gib.bin; + make run NODES="2-3" ARGS=/mnt/raid/testlists/4Gib.bin; + make run NODES="2-5" ARGS=/mnt/raid/testlists/8Gib.bin; + make run NODES="2-7,9-10" ARGS=/mnt/raid/testlists/16Gib.bin; + make run NODES="2-7,9-18" ARGS=/mnt/raid/testlists/32Gib.bin; + ;; +2) +# Multipli nodi che lavorano sul raid, contemporaneamente(1) su file diversi e non + make run NODES="4" ARGS=/mnt/raid/testlists/2Gib.bin; + ;; +24) +# Multipli nodi che lavorano sul raid, contemporaneamente(3) su file diversi e non + make run NODES="4" ARGS=/mnt/raid/testlists/2Gib.bin; + sleep 0.1; + make run NODES="5-6" ARGS=/mnt/raid/testlists/4Gib.bin; + ;; +248) +# Multipli nodi che lavorano sul raid, contemporaneamente(7) su file diversi e non + make run NODES="4" ARGS=/mnt/raid/testlists/2Gib.bin; + sleep 0.1; + make run NODES="5-6" ARGS=/mnt/raid/testlists/4Gib.bin; + sleep 0.1; + make run NODES="1-3,7" ARGS=/mnt/raid/testlists/8Gib.bin; + ;; +24816) +# Multipli nodi che lavorano sul raid, contemporaneamente(15) su file diversi e non + make run NODES="4" ARGS=/mnt/raid/testlists/2Gib.bin; + sleep 0.1; + make run NODES="5-6" ARGS=/mnt/raid/testlists/4Gib.bin; + sleep 0.1; + make run NODES="1-3,7" ARGS=/mnt/raid/testlists/8Gib.bin; + sleep 0.1; + make run NODES="9-16" ARGS=/mnt/raid/testlists/16Gib.bin; + ;; +######################################################################################### 0) +# Test di funzionalita su file relativamente piccolo make run NODES="20" ARGS=main.o; ;; 1) -# testing of: single node speed +# testing of single node speed make run NODES="1" ARGS=/mnt/raid/testlists/__134217728.bin; ;; -2) -# testing of: single nodes speed of 2 nodes to see disk availability bottleneck +11) +# testing of 2 single nodes speed to see disk parallel availability bottleneck make run NODES="1" ARGS=/mnt/raid/testlists/__134217728.bin; sleep 0.1; make run NODES="2" ARGS=/mnt/raid/testlists/__134217728.bin; ;; -22) -# testing of: single nodes speed of 2 nodes to see disk availability depends on first started +112) +# testing of 2 single nodes speed to see disk parallel availability depends on first started make run NODES="2" ARGS=/mnt/raid/testlists/__134217728.bin; sleep 0.1; make run NODES="1" ARGS=/mnt/raid/testlists/__134217728.bin; ;; -3) -# testing of: single nodes speed of 3 nodes to see disk availability bottleneck +111) +# testing of 3 single nodes speed to see disk parallel availability bottleneck make run NODES="1" ARGS=/mnt/raid/testlists/__134217728.bin; sleep 0.1; make run NODES="2" ARGS=/mnt/raid/testlists/__134217728.bin; sleep 0.1; make run NODES="3" ARGS=/mnt/raid/testlists/__134217728.bin; ;; +1112) +# testing of 3 single nodes speed to see disk parallel availability depends on first started + make run NODES="2" ARGS=/mnt/raid/testlists/__134217728.bin; + sleep 0.1; + make run NODES="1" ARGS=/mnt/raid/testlists/__134217728.bin; + sleep 0.1; + make run NODES="3" ARGS=/mnt/raid/testlists/__134217728.bin; + ;; 124) -# testing of: speed od 1-2-4 nodes doubling file size each time +# testing of speed od 1-2-4 nodes doubling file size each time from 1G make run NODES="1" ARGS=/mnt/raid/testlists/__134217728.bin; - make run NODES="1" ARGS=/mnt/raid/testlists/_268435456.bin; - make run NODES="1" ARGS=/mnt/raid/testlists/_402653184.bin; - - make run NODES="1-2" ARGS=/mnt/raid/testlists/_268435456.bin; - make run NODES="1-2" ARGS=/mnt/raid/testlists/_402653184.bin; - make run NODES="1-2" ARGS=/mnt/raid/testlists/8gb.bin; - - make run NODES="1-4" ARGS=/mnt/raid/testlists/_402653184.bin; - make run NODES="1-4" ARGS=/mnt/raid/testlists/8gb.bin; - make run NODES="1-4" ARGS=/mnt/raid/testlists/16gb.bin; + make run NODES="1-2" ARGS=/mnt/raid/testlists/__268435456.bin; + make run NODES="1-4" ARGS=/mnt/raid/testlists/__536870912.bin; ;; 1240) -# testing of: speed od 1-2-4 nodes doubling file size each time +# testing of speed od 1-2-4 nodes with fized size file make run NODES="1" ARGS=/mnt/raid/testlists/__134217728.bin; - make run NODES="1-2" ARGS=/mnt/raid/testlists/_268435456.bin; - make run NODES="1-4" ARGS=/mnt/raid/testlists/_402653184.bin; - - make run NODES="1" ARGS=/mnt/raid/testlists/_268435456.bin; - make run NODES="1-2" ARGS=/mnt/raid/testlists/_402653184.bin; - make run NODES="1-4" ARGS=/mnt/raid/testlists/8gb.bin; - - make run NODES="1" ARGS=/mnt/raid/testlists/_402653184.bin; - make run NODES="1-2" ARGS=/mnt/raid/testlists/8gb.bin; - make run NODES="1-4" ARGS=/mnt/raid/testlists/16gb.bin; + make run NODES="1-2" ARGS=/mnt/raid/testlists/__134217728.bin; + make run NODES="1-4" ARGS=/mnt/raid/testlists/__134217728.bin; + ;; +1241) +# testing of speed od 1-2-4 nodes doubling file size each time from 2G + make run NODES="1" ARGS=/mnt/raid/testlists/__268435456.bin; + make run NODES="1-2" ARGS=/mnt/raid/testlists/__536870912.bin; + make run NODES="1-4" ARGS=/mnt/raid/testlists/_1073741824.bin; ;; *) - echo Specifica un tipo di test doTest.sh N; + echo 'Specifica un tipo di test "doTest.sh N"'; + echo '8 --> Singolo nodo che lavora sul raid, stessa taglia con numero di nodi diversi'; + echo '12 --> Singolo nodo che lavora sul raid, stessa taglia con numero di nodi diversi'; + echo '30 --> Singolo nodo che lavora sul raid, stessa taglia con numero di nodi diversi'; + echo '2481632 --> Singolo nodo che lavora sul raid'; + echo '2 --> Multipli nodi che lavorano sul raid, contemporaneamente(1) su file diversi e non'; + echo '24 --> Multipli nodi che lavorano sul raid, contemporaneamente(3) su file diversi e non'; + echo '248 --> Multipli nodi che lavorano sul raid, contemporaneamente(7) su file diversi e non'; + echo '24816 --> Multipli nodi che lavorano sul raid, contemporaneamente(15) su file diversi e non'; + echo '--------------------------------' + echo '0 --> Test di funzionalita su file relativamente piccolo'; + echo '1 --> testing of single node speed'; + echo '11 --> testing of 2 single nodes speed to see disk parallel availability bottleneck'; + echo '112 --> testing of 2 single nodes speed to see disk parallel availability depends on first started'; + echo '111 --> testing of 3 single nodes speed to see disk parallel availability bottleneck'; + echo '1112 --> testing of 3 single nodes speed to see disk parallel availability depends on first started'; + echo '124 --> testing of speed od 1-2-4 nodes doubling file size each time from 1G'; + echo '1240 --> testing of speed od 1-2-4 nodes with fized size file'; + echo '1241 --> testing of speed od 1-2-4 nodes doubling file size each time from 2G'; ;; esac diff --git a/SortingAlg/launcher.sh b/SortingAlg/launcher.sh new file mode 100755 index 0000000..4155222 --- /dev/null +++ b/SortingAlg/launcher.sh @@ -0,0 +1,22 @@ +#!/bin/bash +## sbatch is the command line interpreter for Slurm + +## specify the name of the job in the queueing system +#SBATCH --job-name=Distributed_Sorting +## specify the partition for the resource allocation. if not specified, slurm is allowed to take the default(the one with a star *) +#SBATCH --partition=production +## format for time is days-hours:minutes:seconds, is used as time limit for the execution duration +#SBATCH --time=12:00:00 +## specify the real memory required per node. suffix can be K-M-G-T but if not present is MegaBytes by default +#SBATCH --mem=3G +## format for hosts as a range(steffe[1-4,10-15,20]), to specify hosts needed to satisfy resource requirements +#SBATCH --nodelist=steffe[1-4] +## to specify the number of processors per task, default is one +#SBATCH --cpus-per-task=1 +## to specify the number of tasks to be invoked on each node +#SBATCH --ntasks-per-node=1 +## to specify the file of utput and error +#SBATCH --output ./%x.%j.out +#SBATCH --error ./e%x.%j.err + +mpirun sort_big_file /mnt/raid/testlists/__134217728.bin diff --git a/SortingAlg/main.cpp b/SortingAlg/main.cpp index aad931f..3f215c7 100644 --- a/SortingAlg/main.cpp +++ b/SortingAlg/main.cpp @@ -25,28 +25,32 @@ od -t d8 -A n binaryfile.bin #For in use format od -t d8 -A n --endian=little binaryfile.bin #For little-endian format od -t d8 -A n --endian=big binaryfile.bin #For big-endian format */ -#define BUFFERSIZE 64 +#define BUFFERSIZEREAD 32768 +#define BUFFERSIZEWRITE 131072 #define RAMNUM 134217728 #define ALLOW_BUFFER 1 -void sortedRuns(unsigned long long fileSize, unsigned long long sliceSize, unsigned long long maxLoop, FILE* file, int id, int mpiRank, int mpiSize) +void sortedRuns(MPI_Offset fileSize, MPI_Offset sliceSize, int maxLoop, MPI_File file, int id, int mpiRank, int mpiSize) { - unsigned long long startOffset, endOffset, currentOffset; //The interval is [startOffset, endOffset) double startTot, start, end; + MPI_Offset startOffset, endOffset, currentOffset; //The interval is [startOffset, endOffset) + MPI_Status status; + int rmpi; + int elementsRead; int64_t num; std::vector bigVect; - int64_t buffer[static_cast(BUFFERSIZE)]; + int64_t bufferRead[static_cast(BUFFERSIZEREAD)]; + int64_t bufferWrit[static_cast(BUFFERSIZEWRITE)]; bigVect.reserve(sliceSize); startTot = MPI_Wtime(); //Microsecond precision. Can't use time(), because each process will have a different "zero" time start = MPI_Wtime(); - for(unsigned long long l = 0; l < maxLoop; l++) //Populate the vector with the values in the file + for(MPI_Offset l = 0; l < maxLoop; l++) //Populate the vector with the values in the file { startOffset = sliceSize * (mpiRank + (mpiSize * l)); if (startOffset >= fileSize) break; endOffset = startOffset + sliceSize; - fseek(file, startOffset * sizeof(int64_t), SEEK_SET); currentOffset = startOffset; bigVect.clear(); @@ -54,24 +58,53 @@ void sortedRuns(unsigned long long fileSize, unsigned long long sliceSize, unsig { while (currentOffset < endOffset) { - unsigned long long elementsToRead = std::min(endOffset - currentOffset, static_cast(static_cast(BUFFERSIZE))); //It's important to check because if the difference between endOffset and startOffset is smaller than BUFFERSIZE we don't have to read further - unsigned long long elementsRead = fread(buffer, sizeof(int64_t), elementsToRead, file);//TODO - - for (unsigned long long i = 0; i < elementsRead; ++i) + MPI_Offset elementsToRead = std::min(endOffset - currentOffset, static_cast(static_cast(BUFFERSIZEREAD))); //It's important to check because if the difference between endOffset and startOffset is smaller than BUFFERSIZE we don't have to read further + rmpi = MPI_File_read_at(file, currentOffset * sizeof(int64_t), bufferRead, elementsToRead, MPI_INT64_T, &status); + if (rmpi != MPI_SUCCESS) + { + std::cout << "Error reading file at offset ...Terminating" << std::endl; + MPI_Abort(MPI_COMM_WORLD, 1); + } + rmpi = MPI_Get_count(&status, MPI_INT64_T, &elementsRead); + if (rmpi != MPI_SUCCESS) + { + std::cout << "Error getting count ...Terminating"<< std::endl; + MPI_Abort(MPI_COMM_WORLD, 1); + } + for (int i = 0; i < elementsRead; ++i) { - bigVect.push_back(buffer[i]); + bigVect.push_back(bufferRead[i]); } currentOffset += elementsRead; //Increment currentOffset based on the number of elements read - if (elementsRead < static_cast(BUFFERSIZE)) // Check if we have reached the end of the file + if (elementsRead < static_cast(BUFFERSIZEREAD)) // Check if we have reached the end of the file break; } } else { - while (currentOffset < endOffset && fread(&num, sizeof(int64_t), 1, file) == 1)//TODO + while (currentOffset < endOffset) { - bigVect.push_back(num); - currentOffset++; + rmpi = MPI_File_read_at(file, currentOffset * sizeof(int64_t), &num, 1, MPI_INT64_T, &status); + if (rmpi != MPI_SUCCESS) + { + std::cout << "Error reading file at offset ...Terminating" << std::endl; + MPI_Abort(MPI_COMM_WORLD, 1); + } + rmpi = MPI_Get_count(&status, MPI_INT64_T, &elementsRead); + if (rmpi != MPI_SUCCESS) + { + std::cout << "Error getting count ...Terminating"<< std::endl; + MPI_Abort(MPI_COMM_WORLD, 1); + } + if (elementsRead == 1) + { + bigVect.push_back(num); + currentOffset++; + } + else + { + break; + } } } end = MPI_Wtime(); @@ -84,57 +117,87 @@ void sortedRuns(unsigned long long fileSize, unsigned long long sliceSize, unsig std::cout << " " << end-start << "s" << " => Time to sort elements in Process " << mpiRank+1 << "/" << mpiSize << " memory" << std::endl; std::string templateName = "/mnt/raid/tmp/SortedRun" + std::to_string(id) + "_XXXXXX"; //If absolute path does not exist the temporary file will not be created (mandatory 6 times X) - int tmpFile = mkstemp(&templateName[0]); //Create a temporary file based on template - if (tmpFile == -1) + int fd = mkstemp(&templateName[0]); //Create a temporary file based on template + if (fd == -1) + { + std::cout << "Error creating temporary file ...Terminating" << std::endl; + MPI_Abort(MPI_COMM_WORLD, 1); + } + if (close(fd) == -1) + { + std::cout << "Error closing the file descriptor ...Terminating" << std::endl; + MPI_Abort(MPI_COMM_WORLD, 1); + } + + MPI_File tmpFile; + rmpi = MPI_File_open(MPI_COMM_SELF, &templateName[0], MPI_MODE_CREATE | MPI_MODE_WRONLY, MPI_INFO_NULL, &tmpFile); + if (rmpi != MPI_SUCCESS) { - std::cout << "Error creating temporary file" << std::endl; + std::cout << "Error opening file ...Terminating"<< std::endl; MPI_Abort(MPI_COMM_WORLD, 1); } start = MPI_Wtime(); - for (unsigned long long i = 0; i < bigVect.size(); ++i) //Write the ordered number in a temp file + + if (ALLOW_BUFFER) //Branch to test performance with and without buffer { - if (ALLOW_BUFFER) //Branch to test performance with and without buffer + MPI_Offset offset = 0; + for (MPI_Offset i = 0; i < bigVect.size(); ++i) { - buffer[i % static_cast(BUFFERSIZE)] = bigVect[i]; - if ((i + 1) % static_cast(BUFFERSIZE) == 0 || i == bigVect.size() - 1) + bufferWrit[i % BUFFERSIZEWRITE] = bigVect[i]; + if ((i + 1) % BUFFERSIZEWRITE == 0 || i == bigVect.size() - 1) { - ssize_t tw = write(tmpFile, buffer, sizeof(int64_t) * ((i % static_cast(BUFFERSIZE)) + 1));//TODO - if (tw == -1) + int count = (i % BUFFERSIZEWRITE) + 1; + rmpi = MPI_File_write_at(tmpFile, offset, bufferWrit, count, MPI_INT64_T, &status); + if (rmpi != MPI_SUCCESS) { - std::cout << "Error writing to file" << std::endl; + std::cout << "Error writing to file at offset ...Terminating" << std::endl; MPI_Abort(MPI_COMM_WORLD, 1); } + offset += count * sizeof(int64_t); } } - else + } + else + { + for (MPI_Offset i = 0; i < bigVect.size(); ++i) //Write the ordered number in a temp file { int64_t elem = bigVect[i]; - ssize_t tw = write(tmpFile, &elem, sizeof(int64_t));//TODO - if (tw == -1) - { - std::cout << "Error writing to file" << std::endl; - MPI_Abort(MPI_COMM_WORLD, 1); - } + rmpi = MPI_File_write_at(tmpFile, i * sizeof(int64_t), &elem, 1, MPI_INT64_T, &status); + if (rmpi != MPI_SUCCESS) + { + std::cout << "Error writing to file at offset ...Terminating"<< std::endl; + MPI_Abort(MPI_COMM_WORLD, 1); + } } } + end = MPI_Wtime(); - off_t sz = lseek(tmpFile, 0, SEEK_END); + MPI_Offset sz; + rmpi = MPI_File_get_size(tmpFile, &sz); + if (rmpi != MPI_SUCCESS) + { + std::cout << "Error getting file size ...Terminating"<< std::endl; + MPI_Abort(MPI_COMM_WORLD, 1); + } if (sz == 0) { - if (close(tmpFile) == -1) + rmpi = MPI_File_close(&tmpFile); + if (rmpi != MPI_SUCCESS) { - std::cout << "Error closing the file" << std::endl; + std::cout << "Error closing file ...Terminating"<< std::endl; MPI_Abort(MPI_COMM_WORLD, 1); } - if (unlink(&templateName[0]) == -1) + rmpi = MPI_File_delete(&templateName[0], MPI_INFO_NULL); + if (rmpi != MPI_SUCCESS) { - std::cout << "Error unlinking file" << std::endl; + std::cout << "Error deleting file ...Terminating"<< std::endl; MPI_Abort(MPI_COMM_WORLD, 1); } } - if (close(tmpFile) == -1) + rmpi = MPI_File_close(&tmpFile); + if (rmpi != MPI_SUCCESS) { - std::cout << "Error closing the file" << std::endl; + std::cout << "Error closing file ...Terminating"<< std::endl; MPI_Abort(MPI_COMM_WORLD, 1); } std::cout << " " << end-start << "s" << " => Time to write '" << templateName << "' and fill it up with " << sz/8 << " sorted elements by Process " << mpiRank+1 << "/" << mpiSize << std::endl; @@ -144,6 +207,7 @@ void sortedRuns(unsigned long long fileSize, unsigned long long sliceSize, unsig std::cout << end-startTot << "s" << " => Time function sortedRuns() in Process " << mpiRank+1 << "/" << mpiSize << std::endl; } +// This function is used in a single node(SEQUENTIAL EXECUTION) so we can avoid using MPI functions. void kMerge(const std::string &argFile, int id, int mpiRank, int mpiSize) { std::string fileDir = "/mnt/raid/tmp/"; @@ -152,7 +216,8 @@ void kMerge(const std::string &argFile, int id, int mpiRank, int mpiSize) std::vector fns; //To store the file name of each file to delete after merge size_t lastSlash = argFile.find_last_of('/'); std::string nameOnly = (lastSlash != std::string::npos) ? argFile.substr(lastSlash + 1) : argFile; - std::string finalFile = "/mnt/raid/tmp/" + nameOnly + (ALLOW_BUFFER == 1 ? ".buf" : "") + ".sort"; + std::string finalFile = "/mnt/raid/tmp/" + nameOnly + (ALLOW_BUFFER != 1 ? ".nobuf" : "") + ".sort"; + off_t fileSize; double start, end; int fileCount = 0; @@ -171,12 +236,16 @@ void kMerge(const std::string &argFile, int id, int mpiRank, int mpiSize) int fd = open(tmpFile.c_str(), O_RDONLY); //Open the file and save the file descriptor if (fd != -1) { + // fileSize = lseek(fd, 0, SEEK_END); + // fileSize = fileSize / 8; //Size in bytes of the file, correspond to the number of numbers to parse. Each number is 8 bytes + // std::cout << "Merging '" << tmpFile.c_str() << "' of size " << (fileSize/134217728 >= 1 ? fileSize/134217728.0 : fileSize/131072.0) << (fileSize/134217728 >= 1 ? "Gb" : "Mb") << std::endl; + fds.push_back(fd); fns.push_back(tmpFile); fileCount++; } else - std::cout << "Error opening file '" << tmpFile << "' by Process " << mpiRank+1 << "/" << mpiSize << std::endl; + std::cout << "Error opening file '" << tmpFile << "'" << std::endl; } } } @@ -184,23 +253,22 @@ void kMerge(const std::string &argFile, int id, int mpiRank, int mpiSize) } else { - std::cout << "Error opening directory '" << fileDir << "' by Process " << mpiRank+1 << "/" << mpiSize << std::endl; + std::cout << "Error opening directory '" << fileDir << "' ...Terminating" << std::endl; MPI_Abort(MPI_COMM_WORLD, 1); } int fdFinal = open(finalFile.c_str(), O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR); //Open the file for writing only, creating it if it doesn't exist and (add '| O_EXCL' near O_CREAT if want the next feature) not overwrite if it exists if (fdFinal == -1) { - std::cout << "Error opening or creating final file '" << finalFile << "' by Process " << mpiRank+1 << "/" << mpiSize << std::endl; - for (const std::string &fn : fns) //Remove all temporary files + std::cout << "Error opening or creating final file '" << finalFile << "'...Terminating" << std::endl; + for (const std::string &fn : fns) //Remove all temporary files before abort { if (unlink(&fn[0]) == -1) { - std::cout << "Error unlinking file '" << fn << "' by Process " << mpiRank+1 << "/" << mpiSize << std::endl; + std::cout << "Error unlinking file '" << fn << "' ...Terminating" << std::endl; MPI_Abort(MPI_COMM_WORLD, 1); } } - MPI_Abort(MPI_COMM_WORLD, 1); } @@ -224,7 +292,7 @@ void kMerge(const std::string &argFile, int id, int mpiRank, int mpiSize) b = 1; break; default: - std::cout << i << "Error reading size=" << sizeof(int64_t) << " from file descriptor by Process " << mpiRank+1 << "/" << mpiSize << std::endl; + std::cout << i << "Error reading size=" << sizeof(int64_t) << " from file descriptor ...Terminating" << std::endl; MPI_Abort(MPI_COMM_WORLD, 1); break; } @@ -232,17 +300,17 @@ void kMerge(const std::string &argFile, int id, int mpiRank, int mpiSize) if (b == 1) break; } - std::cout << minHeap.size() << "=size heap" << std::endl; + std::cout << "(" << minHeap.size() << "=size heap)" << std::endl; int tmpfd; int64_t tmpValue2; - int64_t buffer[static_cast(BUFFERSIZE)]; + int64_t bufferWrit[static_cast(BUFFERSIZEWRITE)]; unsigned long long i = 0; while (!minHeap.empty()) //Write sorted elements to the temporary file { tmpValue = minHeap.top().first; tmpfd = minHeap.top().second; - if (read(tmpfd, &tmpValue2, sizeof(int64_t)) == sizeof(int64_t)) //Read another integer from the same file descriptor//TODO + if (read(tmpfd, &tmpValue2, sizeof(int64_t)) == sizeof(int64_t)) //Read another integer from the same file descriptor { minHeap.pop(); minHeap.push({tmpValue2, tmpfd}); @@ -252,19 +320,19 @@ void kMerge(const std::string &argFile, int id, int mpiRank, int mpiSize) minHeap.pop(); if (fcntl(tmpfd, F_GETFD) == 1 && close(tmpfd) == -1) { - std::cout << "Error closing the file descriptor by Process " << mpiRank+1 << "/" << mpiSize << std::endl; + std::cout << "Error closing the file descriptor ...Terminating" << std::endl; MPI_Abort(MPI_COMM_WORLD, 1); } } if (ALLOW_BUFFER) //Branch to test performance with and without buffer { - buffer[i % static_cast(BUFFERSIZE)] = tmpValue; - if ((i + 1) % static_cast(BUFFERSIZE) == 0 || minHeap.empty()) + bufferWrit[i % static_cast(BUFFERSIZEWRITE)] = tmpValue; + if ((i + 1) % static_cast(BUFFERSIZEWRITE) == 0 || minHeap.empty()) { - ssize_t tw = write(fdFinal, buffer, sizeof(int64_t) * ((i % static_cast(BUFFERSIZE)) + 1));//TODO + ssize_t tw = write(fdFinal, bufferWrit, sizeof(int64_t) * ((i % static_cast(BUFFERSIZEWRITE)) + 1)); if (tw == -1) { - std::cout << "Error writing to file" << std::endl; + std::cout << "Error writing to file ...Terminating" << std::endl; MPI_Abort(MPI_COMM_WORLD, 1); } } @@ -272,10 +340,10 @@ void kMerge(const std::string &argFile, int id, int mpiRank, int mpiSize) } else { - ssize_t tw = write(fdFinal, &tmpValue, sizeof(int64_t));//TODO + ssize_t tw = write(fdFinal, &tmpValue, sizeof(int64_t)); if (tw == -1) { - std::cout << "Error writing to file" << std::endl; + std::cout << "Error writing to file ...Terminating" << std::endl; MPI_Abort(MPI_COMM_WORLD, 1); } } @@ -285,7 +353,7 @@ void kMerge(const std::string &argFile, int id, int mpiRank, int mpiSize) { if (unlink(&fn[0]) == -1) { - std::cout << "Error unlinking file '" << fn << "' by Process " << mpiRank+1 << "/" << mpiSize << std::endl; + std::cout << "Error unlinking file '" << fn << "' ...Terminating" << std::endl; MPI_Abort(MPI_COMM_WORLD, 1); } } @@ -322,48 +390,58 @@ int main(int argc, char* argv[]) return 0; } - FILE *file; - unsigned long long fileSize, slices, sliceSize, maxLoop; - file = fopen(argv[1], "rb"); //Open the file in mode rb (read binary) - if(!file) + MPI_File file; + MPI_Offset fileSize, sliceSize; + int slices, maxLoop; + int rmpi; + rmpi = MPI_File_open(MPI_COMM_WORLD, argv[1], MPI_MODE_RDONLY, MPI_INFO_NULL, &file); //Mode set to MPI_MODE_RDONLY (read only), it’s equivalent to opening a file in binary read mode ("rb") in standard C/C++ + if (rmpi != MPI_SUCCESS) + { + std::cout << "Error opening file: " << argv[1] << " ...Terminating" << std::endl; + MPI_Abort(MPI_COMM_WORLD, 1); + } + rmpi = MPI_File_get_size(file, &fileSize); + if (rmpi != MPI_SUCCESS) { - std::cout << "Error opening file: " << argv[1] << std::endl; + std::cout << "Error getting file size ...Terminating"<< std::endl; MPI_Abort(MPI_COMM_WORLD, 1); } - fseek(file,0,SEEK_END); - fileSize = ftell(file) / 8; //Size in bytes of the file, correspond to the number of numbers to parse. Each number is 8 bytes + fileSize = fileSize / 8; // Size in bytes of the file, correspond to the number of numbers to parse. Each number is 8 bytes if (mpiRank == 0) - std::cout << "Using " << mpiSize << " nodes for sorting " << (fileSize/134217728 > 1 ? fileSize/134217728 : fileSize/131072) << (fileSize/134217728 > 1 ? "Gb" : "Mb") << " file '" << argv[1] << "' of " << fileSize << " elements" << std::endl << std::endl; + std::cout << "Using " << mpiSize << " nodes for sorting " << (fileSize/134217728 >= 1 ? fileSize/134217728.0 : fileSize/131072.0) << (fileSize/134217728 >= 1 ? "Gb" : "Mb") << " file '" << argv[1] << "' of " << fileSize << " elements" << std::endl << std::endl; //Load balancer - if (fileSize < ((unsigned long long) static_cast(RAMNUM) * mpiSize)) //Can add more granularity considering efficiency, now is used by default all nodes + if (fileSize < ((MPI_Offset) static_cast(RAMNUM) * mpiSize)) //Can add more granularity considering efficiency, now is used by default all nodes slices = mpiSize; else slices = mpiSize; sliceSize = (fileSize / slices); //Each process divides a number of 8-byte integers based on the size of the starting file maxLoop = 1; - if (sliceSize > static_cast(RAMNUM)) + if (sliceSize >= static_cast(RAMNUM)) { - maxLoop = (fileSize / (static_cast(RAMNUM) * mpiSize)) + 1; - sliceSize = (fileSize / maxLoop); - sortedRuns(fileSize, sliceSize + 1, maxLoop, file, id, mpiRank, mpiSize); + maxLoop = (fileSize / (static_cast(RAMNUM) * mpiSize)) + 1; + sliceSize = static_cast(RAMNUM); + sortedRuns(fileSize, sliceSize, maxLoop, file, id, mpiRank, mpiSize); } else { sortedRuns(fileSize, sliceSize + 1, maxLoop, file, id, mpiRank, mpiSize); } - fclose(file); + rmpi = MPI_File_close(&file); + if (rmpi != MPI_SUCCESS) + { + std::cout << "Error closing file: " << argv[1] << " ...Terminating" << std::endl; + MPI_Abort(MPI_COMM_WORLD, 1); + } MPI_Barrier(MPI_COMM_WORLD); //Blocks the caller until all processes in the communicator have called it if(mpiRank==0) { kMerge(argv[1], id, mpiRank, mpiSize); - endGlobal = MPI_Wtime(); std::cout << (endGlobal-startGlobal)/60.0 << "min" << " => FULL EXECUTION TIME" << std::endl; } MPI_Finalize(); //Clean up the MPI environment return 0; } - diff --git a/SortingAlg/outputs/test124/Distributed_Sorting.2042.out b/SortingAlg/outputs/test124/Distributed_Sorting.2042.out new file mode 100644 index 0000000..19e7faf --- /dev/null +++ b/SortingAlg/outputs/test124/Distributed_Sorting.2042.out @@ -0,0 +1,14 @@ +Using 1 nodes for sorting 1024Mb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 91.5065s => Time to read file from offset 0 to 134217729 in Process 1/1 + 391.235s => Time to sort elements in Process 1/1 memory + 102.877s => Time to write '/mnt/raid/tmp/SortedRun6561_1xvb0k' and fill it up with 134217728 sorted elements by Process 1/1 +600.985s => Time function sortedRuns() in Process 1/1 + +Starting the merge process for 1 files + +134217728=size heap +2318.59s => Time function kMerge() in Process 1/1 + +Sorted file '/mnt/raid/tmp/__134217728.bin.buf.sort' +48.6738min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test124/Distributed_Sorting.2043.out b/SortingAlg/outputs/test124/Distributed_Sorting.2043.out new file mode 100644 index 0000000..8264206 --- /dev/null +++ b/SortingAlg/outputs/test124/Distributed_Sorting.2043.out @@ -0,0 +1,20 @@ +Using 1 nodes for sorting 2Gb file '/mnt/raid/testlists/_268435456.bin' of 268435456 elements + + 61.1314s => Time to read file from offset 0 to 89478486 in Process 1/1 + 255.745s => Time to sort elements in Process 1/1 memory + 81.8405s => Time to write '/mnt/raid/tmp/SortedRun9920_Sr2oeJ' and fill it up with 89478486 sorted elements by Process 1/1 + 59.8274s => Time to read file from offset 89478486 to 178956972 in Process 1/1 + 256.203s => Time to sort elements in Process 1/1 memory + 75.1858s => Time to write '/mnt/raid/tmp/SortedRun9920_Ue0MlK' and fill it up with 89478486 sorted elements by Process 1/1 + 59.8017s => Time to read file from offset 178956972 to 268435458 in Process 1/1 + 254.425s => Time to sort elements in Process 1/1 memory + 48.3859s => Time to write '/mnt/raid/tmp/SortedRun9920_HPBhbK' and fill it up with 89478484 sorted elements by Process 1/1 +1205.63s => Time function sortedRuns() in Process 1/1 + +Starting the merge process for 3 files + +134217726=size heap +4467.07s => Time function kMerge() in Process 1/1 + +Sorted file '/mnt/raid/tmp/_268435456.bin.buf.sort' +94.5592min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test124/Distributed_Sorting.2044.out b/SortingAlg/outputs/test124/Distributed_Sorting.2044.out new file mode 100644 index 0000000..27ac2c8 --- /dev/null +++ b/SortingAlg/outputs/test124/Distributed_Sorting.2044.out @@ -0,0 +1,23 @@ +Using 1 nodes for sorting 3Gb file '/mnt/raid/testlists/_402653184.bin' of 402653184 elements + + 68.7449s => Time to read file from offset 0 to 100663297 in Process 1/1 + 289.723s => Time to sort elements in Process 1/1 memory + 80.9753s => Time to write '/mnt/raid/tmp/SortedRun8371_XGnkmi' and fill it up with 100663297 sorted elements by Process 1/1 + 67.5989s => Time to read file from offset 100663297 to 201326594 in Process 1/1 + 289.663s => Time to sort elements in Process 1/1 memory + 78.159s => Time to write '/mnt/raid/tmp/SortedRun8371_rq6mCl' and fill it up with 100663297 sorted elements by Process 1/1 + 67.821s => Time to read file from offset 201326594 to 301989891 in Process 1/1 + 291.926s => Time to sort elements in Process 1/1 memory + 85.4853s => Time to write '/mnt/raid/tmp/SortedRun8371_kHzZRj' and fill it up with 100663297 sorted elements by Process 1/1 + 67.458s => Time to read file from offset 301989891 to 402653188 in Process 1/1 + 290.031s => Time to sort elements in Process 1/1 memory + 84.9627s => Time to write '/mnt/raid/tmp/SortedRun8371_QD1kri' and fill it up with 100663293 sorted elements by Process 1/1 +1815.09s => Time function sortedRuns() in Process 1/1 + +Starting the merge process for 4 files + +134217728=size heap +6710.39s => Time function kMerge() in Process 1/1 + +Sorted file '/mnt/raid/tmp/_402653184.bin.buf.sort' +142.106min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test124/Distributed_Sorting.2045.out b/SortingAlg/outputs/test124/Distributed_Sorting.2045.out new file mode 100644 index 0000000..f7e3b70 --- /dev/null +++ b/SortingAlg/outputs/test124/Distributed_Sorting.2045.out @@ -0,0 +1,18 @@ +Using 2 nodes for sorting 2Gb file '/mnt/raid/testlists/_268435456.bin' of 268435456 elements + + 177.712s => Time to read file from offset 0 to 134217729 in Process 1/2 + 183.716s => Time to read file from offset 134217729 to 268435458 in Process 2/2 + 393.169s => Time to sort elements in Process 1/2 memory + 392.896s => Time to sort elements in Process 2/2 memory + 181.609s => Time to write '/mnt/raid/tmp/SortedRun7438_2BSTFL' and fill it up with 134217729 sorted elements by Process 1/2 +789.801s => Time function sortedRuns() in Process 1/2 + 186.833s => Time to write '/mnt/raid/tmp/SortedRun7438_okRA5f' and fill it up with 134217727 sorted elements by Process 2/2 +790.228s => Time function sortedRuns() in Process 2/2 + +Starting the merge process for 2 files + +134217728=size heap +4454.65s => Time function kMerge() in Process 1/2 + +Sorted file '/mnt/raid/tmp/_268435456.bin.buf.sort' +87.4275min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test124/Distributed_Sorting.2046.out b/SortingAlg/outputs/test124/Distributed_Sorting.2046.out new file mode 100644 index 0000000..4f6824b --- /dev/null +++ b/SortingAlg/outputs/test124/Distributed_Sorting.2046.out @@ -0,0 +1,18 @@ +Using 2 nodes for sorting 3Gb file '/mnt/raid/testlists/_402653184.bin' of 402653184 elements + + 271.25s => Time to read file from offset 0 to 201326593 in Process 1/2 + 275.178s => Time to read file from offset 201326593 to 402653186 in Process 2/2 + 598.904s => Time to sort elements in Process 1/2 memory + 606.092s => Time to sort elements in Process 2/2 memory + 251.537s => Time to write '/mnt/raid/tmp/SortedRun1772_NQXTsC' and fill it up with 201326593 sorted elements by Process 1/2 +1154.1s => Time function sortedRuns() in Process 1/2 + 272.332s => Time to write '/mnt/raid/tmp/SortedRun1772_BP7PVS' and fill it up with 201326591 sorted elements by Process 2/2 +1173.22s => Time function sortedRuns() in Process 2/2 + +Starting the merge process for 2 files + +134217728=size heap +6623.81s => Time function kMerge() in Process 1/2 + +Sorted file '/mnt/raid/tmp/_402653184.bin.buf.sort' +129.965min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test124/Distributed_Sorting.2047.out b/SortingAlg/outputs/test124/Distributed_Sorting.2047.out new file mode 100644 index 0000000..2f5061c --- /dev/null +++ b/SortingAlg/outputs/test124/Distributed_Sorting.2047.out @@ -0,0 +1,24 @@ +Using 2 nodes for sorting 7Gb file '/mnt/raid/testlists/8gb.bin' of 1073646107 elements + + 365.28s => Time to read file from offset 268411527 to 536823054 in Process 2/2 + 365.657s => Time to read file from offset 0 to 268411527 in Process 1/2 + 809.747s => Time to sort elements in Process 2/2 memory + 815.111s => Time to sort elements in Process 1/2 memory + 380.382s => Time to write '/mnt/raid/tmp/SortedRun4674_rV9nlE' and fill it up with 268411527 sorted elements by Process 2/2 + 397.274s => Time to write '/mnt/raid/tmp/SortedRun4674_4W4ExK' and fill it up with 268411527 sorted elements by Process 1/2 + 364.361s => Time to read file from offset 536823054 to 805234581 in Process 1/2 + 368s => Time to read file from offset 805234581 to 1073646108 in Process 2/2 + 808.249s => Time to sort elements in Process 2/2 memory + 813.931s => Time to sort elements in Process 1/2 memory + 390.873s => Time to write '/mnt/raid/tmp/SortedRun4674_P1cUOM' and fill it up with 268411527 sorted elements by Process 1/2 +3177.67s => Time function sortedRuns() in Process 1/2 + 404.285s => Time to write '/mnt/raid/tmp/SortedRun4674_JreH0D' and fill it up with 268411526 sorted elements by Process 2/2 +3179.82s => Time function sortedRuns() in Process 2/2 + +Starting the merge process for 4 files + +134217728=size heap +18148.1s => Time function kMerge() in Process 1/2 + +Sorted file '/mnt/raid/tmp/8gb.bin.buf.sort' +355.486min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test124/Distributed_Sorting.2048.out b/SortingAlg/outputs/test124/Distributed_Sorting.2048.out new file mode 100644 index 0000000..81c4284 --- /dev/null +++ b/SortingAlg/outputs/test124/Distributed_Sorting.2048.out @@ -0,0 +1,26 @@ +Using 4 nodes for sorting 3Gb file '/mnt/raid/testlists/_402653184.bin' of 402653184 elements + + 274.007s => Time to read file from offset 0 to 100663297 in Process 1/4 + 274.37s => Time to read file from offset 201326594 to 301989891 in Process 3/4 + 274.028s => Time to read file from offset 301989891 to 402653188 in Process 4/4 + 274.057s => Time to read file from offset 100663297 to 201326594 in Process 2/4 + 289.506s => Time to sort elements in Process 1/4 memory + 289.649s => Time to sort elements in Process 4/4 memory + 289.857s => Time to sort elements in Process 2/4 memory + 291.906s => Time to sort elements in Process 3/4 memory + 165.339s => Time to write '/mnt/raid/tmp/SortedRun3700_Ig6t8C' and fill it up with 100663297 sorted elements by Process 1/4 +859.4s => Time function sortedRuns() in Process 1/4 + 231.662s => Time to write '/mnt/raid/tmp/SortedRun3700_mgDMbe' and fill it up with 100663297 sorted elements by Process 2/4 +876.872s => Time function sortedRuns() in Process 2/4 + 293.523s => Time to write '/mnt/raid/tmp/SortedRun3700_iFEGK8' and fill it up with 100663293 sorted elements by Process 4/4 +879.145s => Time function sortedRuns() in Process 4/4 + 221.822s => Time to write '/mnt/raid/tmp/SortedRun3700_We4rTq' and fill it up with 100663297 sorted elements by Process 3/4 +879.204s => Time function sortedRuns() in Process 3/4 + +Starting the merge process for 4 files + +134217728=size heap +6745.42s => Time function kMerge() in Process 1/4 + +Sorted file '/mnt/raid/tmp/_402653184.bin.buf.sort' +127.091min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test124/Distributed_Sorting.2049.out b/SortingAlg/outputs/test124/Distributed_Sorting.2049.out new file mode 100644 index 0000000..79e4f0d --- /dev/null +++ b/SortingAlg/outputs/test124/Distributed_Sorting.2049.out @@ -0,0 +1,3 @@ +Using 4 nodes for sorting 7Gb file '/mnt/raid/testlists/8gb.bin' of 1073646107 elements + +3 total processes killed (some possibly by mpirun during cleanup) diff --git a/SortingAlg/outputs/test124/Distributed_Sorting.2050.out b/SortingAlg/outputs/test124/Distributed_Sorting.2050.out new file mode 100644 index 0000000..a2d11da --- /dev/null +++ b/SortingAlg/outputs/test124/Distributed_Sorting.2050.out @@ -0,0 +1,25 @@ +Using 4 nodes for sorting 16Gb file '/mnt/raid/testlists/16gb.bin' of 2147483648 elements + + 1168.55s => Time to read file from offset 858993460 to 1288490190 in Process 3/4 + 1168.81s => Time to read file from offset 0 to 429496730 in Process 1/4 + 1169.02s => Time to read file from offset 429496730 to 858993460 in Process 2/4 + 1169s => Time to read file from offset 1288490190 to 1717986920 in Process 4/4 + 1326.06s => Time to sort elements in Process 3/4 memory + 1326.71s => Time to sort elements in Process 4/4 memory + 1338.95s => Time to sort elements in Process 2/4 memory + 1341.8s => Time to sort elements in Process 1/4 memory + 1235.04s => Time to write '/mnt/raid/tmp/SortedRun4312_6H7O2T' and fill it up with 429496730 sorted elements by Process 4/4 +3734.21s => Time function sortedRuns() in Process 4/4 + 1235.5s => Time to write '/mnt/raid/tmp/SortedRun4312_ppqQoZ' and fill it up with 429496730 sorted elements by Process 3/4 +3742.68s => Time function sortedRuns() in Process 3/4 + 1242.11s => Time to write '/mnt/raid/tmp/SortedRun4312_7kXYJW' and fill it up with 429496730 sorted elements by Process 2/4 +3758.54s => Time function sortedRuns() in Process 2/4 + 1250.63s => Time to write '/mnt/raid/tmp/SortedRun4312_M1qgkB' and fill it up with 429496730 sorted elements by Process 1/4 + 292.28s => Time to read file from offset 1717986920 to 2147483650 in Process 1/4 + 1321.26s => Time to sort elements in Process 1/4 memory + 440.772s => Time to write '/mnt/raid/tmp/SortedRun4312_oSmKbC' and fill it up with 429496728 sorted elements by Process 1/4 +5831s => Time function sortedRuns() in Process 1/4 + +Starting the merge process for 5 files + +134217725=size heap diff --git a/SortingAlg/outputs/test124/Distributed_Sorting.2052.out b/SortingAlg/outputs/test124/Distributed_Sorting.2052.out new file mode 100644 index 0000000..cb3f065 --- /dev/null +++ b/SortingAlg/outputs/test124/Distributed_Sorting.2052.out @@ -0,0 +1,7 @@ +Using 1 nodes for sorting 1024Mb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 91.5285s => Time to read file from offset 0 to 134217729 in Process 1/1 + 391.034s => Time to sort elements in Process 1/1 memory + 111.408s => Time to write '/mnt/raid/tmp/SortedRun9139_wozJQE' and fill it up with 134217728 sorted elements by Process 1/1 +613.51s => Time function sortedRuns() in Process 1/1 +10.2296min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test124/Distributed_Sorting.2053.out b/SortingAlg/outputs/test124/Distributed_Sorting.2053.out new file mode 100644 index 0000000..10c565d --- /dev/null +++ b/SortingAlg/outputs/test124/Distributed_Sorting.2053.out @@ -0,0 +1,13 @@ +Using 1 nodes for sorting 2Gb file '/mnt/raid/testlists/_268435456.bin' of 268435456 elements + + 61.1827s => Time to read file from offset 0 to 89478486 in Process 1/1 + 255.745s => Time to sort elements in Process 1/1 memory + 76.8678s => Time to write '/mnt/raid/tmp/SortedRun8958_ZODcsE' and fill it up with 89478486 sorted elements by Process 1/1 + 59.7861s => Time to read file from offset 89478486 to 178956972 in Process 1/1 + 255.996s => Time to sort elements in Process 1/1 memory + 56.4555s => Time to write '/mnt/raid/tmp/SortedRun8958_6cSisE' and fill it up with 89478486 sorted elements by Process 1/1 + 59.7685s => Time to read file from offset 178956972 to 268435458 in Process 1/1 + 254.239s => Time to sort elements in Process 1/1 memory + 69.4827s => Time to write '/mnt/raid/tmp/SortedRun8958_aaI3GC' and fill it up with 89478484 sorted elements by Process 1/1 +1215.01s => Time function sortedRuns() in Process 1/1 +20.2529min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test124/Distributed_Sorting.2054.out b/SortingAlg/outputs/test124/Distributed_Sorting.2054.out new file mode 100644 index 0000000..c98561f --- /dev/null +++ b/SortingAlg/outputs/test124/Distributed_Sorting.2054.out @@ -0,0 +1,16 @@ +Using 1 nodes for sorting 3Gb file '/mnt/raid/testlists/_402653184.bin' of 402653184 elements + + 68.7297s => Time to read file from offset 0 to 100663297 in Process 1/1 + 289.196s => Time to sort elements in Process 1/1 memory + 53.7378s => Time to write '/mnt/raid/tmp/SortedRun9432_xoBLZS' and fill it up with 100663297 sorted elements by Process 1/1 + 67.5995s => Time to read file from offset 100663297 to 201326594 in Process 1/1 + 289.971s => Time to sort elements in Process 1/1 memory + 77.9357s => Time to write '/mnt/raid/tmp/SortedRun9432_HMBW6R' and fill it up with 100663297 sorted elements by Process 1/1 + 67.8079s => Time to read file from offset 201326594 to 301989891 in Process 1/1 + 292.193s => Time to sort elements in Process 1/1 memory + 82.0317s => Time to write '/mnt/raid/tmp/SortedRun9432_Fu2sXS' and fill it up with 100663297 sorted elements by Process 1/1 + 67.541s => Time to read file from offset 301989891 to 402653188 in Process 1/1 + 289.857s => Time to sort elements in Process 1/1 memory + 81.0556s => Time to write '/mnt/raid/tmp/SortedRun9432_sdUBtS' and fill it up with 100663293 sorted elements by Process 1/1 +1822.09s => Time function sortedRuns() in Process 1/1 +30.3717min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test124/Distributed_Sorting.2055.out b/SortingAlg/outputs/test124/Distributed_Sorting.2055.out new file mode 100644 index 0000000..706cc76 --- /dev/null +++ b/SortingAlg/outputs/test124/Distributed_Sorting.2055.out @@ -0,0 +1,11 @@ +Using 2 nodes for sorting 2Gb file '/mnt/raid/testlists/_268435456.bin' of 268435456 elements + + 178.625s => Time to read file from offset 0 to 134217729 in Process 1/2 + 183.704s => Time to read file from offset 134217729 to 268435458 in Process 2/2 + 392.545s => Time to sort elements in Process 1/2 memory + 391.468s => Time to sort elements in Process 2/2 memory + 180.597s => Time to write '/mnt/raid/tmp/SortedRun7458_Mnptup' and fill it up with 134217729 sorted elements by Process 1/2 +777.522s => Time function sortedRuns() in Process 1/2 + 190.893s => Time to write '/mnt/raid/tmp/SortedRun7458_coPj5R' and fill it up with 134217727 sorted elements by Process 2/2 +777.592s => Time function sortedRuns() in Process 2/2 +12.9642min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test124/Distributed_Sorting.2056.out b/SortingAlg/outputs/test124/Distributed_Sorting.2056.out new file mode 100644 index 0000000..44a331f --- /dev/null +++ b/SortingAlg/outputs/test124/Distributed_Sorting.2056.out @@ -0,0 +1,11 @@ +Using 2 nodes for sorting 3Gb file '/mnt/raid/testlists/_402653184.bin' of 402653184 elements + + 273.943s => Time to read file from offset 201326593 to 402653186 in Process 2/2 + 274.277s => Time to read file from offset 0 to 201326593 in Process 1/2 + 598.93s => Time to sort elements in Process 1/2 memory + 606.228s => Time to sort elements in Process 2/2 memory + 290.643s => Time to write '/mnt/raid/tmp/SortedRun6682_9jRoEN' and fill it up with 201326593 sorted elements by Process 1/2 +1180.83s => Time function sortedRuns() in Process 1/2 + 286.835s => Time to write '/mnt/raid/tmp/SortedRun6682_3wiB9R' and fill it up with 201326591 sorted elements by Process 2/2 +1180.88s => Time function sortedRuns() in Process 2/2 +19.6879min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test124/Distributed_Sorting.2057.out b/SortingAlg/outputs/test124/Distributed_Sorting.2057.out new file mode 100644 index 0000000..b29cbbe --- /dev/null +++ b/SortingAlg/outputs/test124/Distributed_Sorting.2057.out @@ -0,0 +1,17 @@ +Using 2 nodes for sorting 7Gb file '/mnt/raid/testlists/8gb.bin' of 1073646107 elements + + 365.443s => Time to read file from offset 0 to 268411527 in Process 1/2 + 365.616s => Time to read file from offset 268411527 to 536823054 in Process 2/2 + 808.698s => Time to sort elements in Process 2/2 memory + 813.895s => Time to sort elements in Process 1/2 memory + 375.012s => Time to write '/mnt/raid/tmp/SortedRun7079_rHRHTE' and fill it up with 268411527 sorted elements by Process 1/2 + 402.706s => Time to write '/mnt/raid/tmp/SortedRun7079_h58R8G' and fill it up with 268411527 sorted elements by Process 2/2 + 364.998s => Time to read file from offset 536823054 to 805234581 in Process 1/2 + 365.464s => Time to read file from offset 805234581 to 1073646108 in Process 2/2 + 806.085s => Time to sort elements in Process 2/2 memory + 813.977s => Time to sort elements in Process 1/2 memory + 349.546s => Time to write '/mnt/raid/tmp/SortedRun7079_XEfr0E' and fill it up with 268411527 sorted elements by Process 1/2 +3143.72s => Time function sortedRuns() in Process 1/2 + 379.651s => Time to write '/mnt/raid/tmp/SortedRun7079_iaabPK' and fill it up with 268411526 sorted elements by Process 2/2 +3150.64s => Time function sortedRuns() in Process 2/2 +52.5226min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test124/Distributed_Sorting.2058.out b/SortingAlg/outputs/test124/Distributed_Sorting.2058.out new file mode 100644 index 0000000..00e12b4 --- /dev/null +++ b/SortingAlg/outputs/test124/Distributed_Sorting.2058.out @@ -0,0 +1,10 @@ +Using 4 nodes for sorting 3Gb file '/mnt/raid/testlists/_402653184.bin' of 402653184 elements + + 273.674s => Time to read file from offset 100663297 to 201326594 in Process 2/4 + 274.394s => Time to read file from offset 0 to 100663297 in Process 1/4 + 274.246s => Time to read file from offset 201326594 to 301989891 in Process 3/4 + 274.076s => Time to read file from offset 301989891 to 402653188 in Process 4/4 + 289.888s => Time to sort elements in Process 2/4 memory + 289.533s => Time to sort elements in Process 4/4 memory + 289.23s => Time to sort elements in Process 1/4 memory + 292.776s => Time to sort elements in Process 3/4 memory diff --git a/SortingAlg/outputs/test124/Distributed_Sorting.2061.out b/SortingAlg/outputs/test124/Distributed_Sorting.2061.out new file mode 100644 index 0000000..8e48087 --- /dev/null +++ b/SortingAlg/outputs/test124/Distributed_Sorting.2061.out @@ -0,0 +1,19 @@ +Using 4 nodes for sorting 3Gb file '/mnt/raid/testlists/_402653184.bin' of 402653184 elements + + 273.853s => Time to read file from offset 100663297 to 201326594 in Process 2/4 + 274.027s => Time to read file from offset 0 to 100663297 in Process 1/4 + 273.935s => Time to read file from offset 201326594 to 301989891 in Process 3/4 + 274.118s => Time to read file from offset 301989891 to 402653188 in Process 4/4 + 289.307s => Time to sort elements in Process 1/4 memory + 289.631s => Time to sort elements in Process 2/4 memory + 289.857s => Time to sort elements in Process 4/4 memory + 291.302s => Time to sort elements in Process 3/4 memory + 250.55s => Time to write '/mnt/raid/tmp/SortedRun7753_cTh8dP' and fill it up with 100663297 sorted elements by Process 2/4 +849.147s => Time function sortedRuns() in Process 2/4 + 232.954s => Time to write '/mnt/raid/tmp/SortedRun7753_c4tcpP' and fill it up with 100663297 sorted elements by Process 1/4 +865.098s => Time function sortedRuns() in Process 1/4 + 205.692s => Time to write '/mnt/raid/tmp/SortedRun7753_lcFEsT' and fill it up with 100663297 sorted elements by Process 3/4 + 264.594s => Time to write '/mnt/raid/tmp/SortedRun7753_XlLiAO' and fill it up with 100663293 sorted elements by Process 4/4 +865.131s => Time function sortedRuns() in Process 4/4 +865.144s => Time function sortedRuns() in Process 3/4 +14.4225min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test124/Distributed_Sorting.2062.out b/SortingAlg/outputs/test124/Distributed_Sorting.2062.out new file mode 100644 index 0000000..1f992a0 --- /dev/null +++ b/SortingAlg/outputs/test124/Distributed_Sorting.2062.out @@ -0,0 +1,3 @@ +Using 4 nodes for sorting 7.99929Gb file '/mnt/raid/testlists/8gb.bin' of 1073646107 elements + +3 total processes killed (some possibly by mpirun during cleanup) diff --git a/SortingAlg/outputs/test124/Distributed_Sorting.2063.out b/SortingAlg/outputs/test124/Distributed_Sorting.2063.out new file mode 100644 index 0000000..920ad21 --- /dev/null +++ b/SortingAlg/outputs/test124/Distributed_Sorting.2063.out @@ -0,0 +1,22 @@ +Using 4 nodes for sorting 16Gb file '/mnt/raid/testlists/16gb.bin' of 2147483648 elements + + 1168.5s => Time to read file from offset 1288490190 to 1717986920 in Process 4/4 + 1168.65s => Time to read file from offset 0 to 429496730 in Process 1/4 + 1168.95s => Time to read file from offset 429496730 to 858993460 in Process 2/4 + 1169.8s => Time to read file from offset 858993460 to 1288490190 in Process 3/4 + 1323.18s => Time to sort elements in Process 3/4 memory + 1325.59s => Time to sort elements in Process 4/4 memory + 1340.01s => Time to sort elements in Process 2/4 memory + 1341.71s => Time to sort elements in Process 1/4 memory + 1234.69s => Time to write '/mnt/raid/tmp/SortedRun85_mwGzUO' and fill it up with 429496730 sorted elements by Process 4/4 +3743.3s => Time function sortedRuns() in Process 4/4 + 1281.84s => Time to write '/mnt/raid/tmp/SortedRun85_j3sdno' and fill it up with 429496730 sorted elements by Process 2/4 +3807.28s => Time function sortedRuns() in Process 2/4 + 1313.3s => Time to write '/mnt/raid/tmp/SortedRun85_WMfzIx' and fill it up with 429496730 sorted elements by Process 3/4 +3814.82s => Time function sortedRuns() in Process 3/4 + 1315.25s => Time to write '/mnt/raid/tmp/SortedRun85_H4jDOb' and fill it up with 429496730 sorted elements by Process 1/4 + 292.235s => Time to read file from offset 1717986920 to 2147483650 in Process 1/4 + 1322.22s => Time to sort elements in Process 1/4 memory + 449.399s => Time to write '/mnt/raid/tmp/SortedRun85_gtoI18' and fill it up with 429496728 sorted elements by Process 1/4 +5904.76s => Time function sortedRuns() in Process 1/4 +98.429min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test1240/Distributed_Sorting.2066.out b/SortingAlg/outputs/test1240/Distributed_Sorting.2066.out new file mode 100644 index 0000000..fe9fb75 --- /dev/null +++ b/SortingAlg/outputs/test1240/Distributed_Sorting.2066.out @@ -0,0 +1,7 @@ +Using 1 nodes for sorting 1Mb file '/mnt/raid/testlists/__134217728.bin' of 134217728 elements + + 91.4418s => Time to read file from offset 0 to 134217729 in Process 1/1 + 390.981s => Time to sort elements in Process 1/1 memory + 95.2034s => Time to write '/mnt/raid/tmp/SortedRun9167_hvgp6g' and fill it up with 134217728 sorted elements by Process 1/1 +612.764s => Time function sortedRuns() in Process 1/1 +10.2167min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test1240/Distributed_Sorting.2067.out b/SortingAlg/outputs/test1240/Distributed_Sorting.2067.out new file mode 100644 index 0000000..acf38eb --- /dev/null +++ b/SortingAlg/outputs/test1240/Distributed_Sorting.2067.out @@ -0,0 +1,11 @@ +Using 2 nodes for sorting 2Gb file '/mnt/raid/testlists/_268435456.bin' of 268435456 elements + + 181.323s => Time to read file from offset 0 to 134217729 in Process 1/2 + 183.747s => Time to read file from offset 134217729 to 268435458 in Process 2/2 + 392.705s => Time to sort elements in Process 1/2 memory + 391.166s => Time to sort elements in Process 2/2 memory + 160.816s => Time to write '/mnt/raid/tmp/SortedRun3091_tbamrv' and fill it up with 134217729 sorted elements by Process 1/2 +771.904s => Time function sortedRuns() in Process 1/2 + 165.097s => Time to write '/mnt/raid/tmp/SortedRun3091_MRQ9IU' and fill it up with 134217727 sorted elements by Process 2/2 +771.938s => Time function sortedRuns() in Process 2/2 +12.8701min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test1240/Distributed_Sorting.2068.out b/SortingAlg/outputs/test1240/Distributed_Sorting.2068.out new file mode 100644 index 0000000..e7bc225 --- /dev/null +++ b/SortingAlg/outputs/test1240/Distributed_Sorting.2068.out @@ -0,0 +1,19 @@ +Using 4 nodes for sorting 3Gb file '/mnt/raid/testlists/_402653184.bin' of 402653184 elements + + 273.326s => Time to read file from offset 0 to 100663297 in Process 1/4 + 274.304s => Time to read file from offset 100663297 to 201326594 in Process 2/4 + 274.076s => Time to read file from offset 201326594 to 301989891 in Process 3/4 + 274.764s => Time to read file from offset 301989891 to 402653188 in Process 4/4 + 289.51s => Time to sort elements in Process 1/4 memory + 289.824s => Time to sort elements in Process 2/4 memory + 289.884s => Time to sort elements in Process 4/4 memory + 291.89s => Time to sort elements in Process 3/4 memory + 149.293s => Time to write '/mnt/raid/tmp/SortedRun745_vDJBiK' and fill it up with 100663297 sorted elements by Process 1/4 +853.894s => Time function sortedRuns() in Process 1/4 + 200.336s => Time to write '/mnt/raid/tmp/SortedRun745_OzUcEV' and fill it up with 100663297 sorted elements by Process 2/4 +871.766s => Time function sortedRuns() in Process 2/4 + 237.669s => Time to write '/mnt/raid/tmp/SortedRun745_3jooqa' and fill it up with 100663293 sorted elements by Process 4/4 +871.77s => Time function sortedRuns() in Process 4/4 + 226.526s => Time to write '/mnt/raid/tmp/SortedRun745_IcrEqu' and fill it up with 100663297 sorted elements by Process 3/4 +871.781s => Time function sortedRuns() in Process 3/4 +14.5331min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test1240/Distributed_Sorting.2069.out b/SortingAlg/outputs/test1240/Distributed_Sorting.2069.out new file mode 100644 index 0000000..08a9239 --- /dev/null +++ b/SortingAlg/outputs/test1240/Distributed_Sorting.2069.out @@ -0,0 +1,13 @@ +Using 1 nodes for sorting 2Gb file '/mnt/raid/testlists/_268435456.bin' of 268435456 elements + + 61.0639s => Time to read file from offset 0 to 89478486 in Process 1/1 + 255.437s => Time to sort elements in Process 1/1 memory + 75.6536s => Time to write '/mnt/raid/tmp/SortedRun8079_W9h0SK' and fill it up with 89478486 sorted elements by Process 1/1 + 59.7985s => Time to read file from offset 89478486 to 178956972 in Process 1/1 + 256.116s => Time to sort elements in Process 1/1 memory + 59.5701s => Time to write '/mnt/raid/tmp/SortedRun8079_MS5UBL' and fill it up with 89478486 sorted elements by Process 1/1 + 59.7781s => Time to read file from offset 178956972 to 268435458 in Process 1/1 + 254.114s => Time to sort elements in Process 1/1 memory + 72.7367s => Time to write '/mnt/raid/tmp/SortedRun8079_ecv4xM' and fill it up with 89478484 sorted elements by Process 1/1 +1196.34s => Time function sortedRuns() in Process 1/1 +19.9417min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test1240/Distributed_Sorting.2070.out b/SortingAlg/outputs/test1240/Distributed_Sorting.2070.out new file mode 100644 index 0000000..896a95b --- /dev/null +++ b/SortingAlg/outputs/test1240/Distributed_Sorting.2070.out @@ -0,0 +1,11 @@ +Using 2 nodes for sorting 3Gb file '/mnt/raid/testlists/_402653184.bin' of 402653184 elements + + 268.852s => Time to read file from offset 0 to 201326593 in Process 1/2 + 273.75s => Time to read file from offset 201326593 to 402653186 in Process 2/2 + 598.571s => Time to sort elements in Process 1/2 memory + 604.616s => Time to sort elements in Process 2/2 memory + 271.308s => Time to write '/mnt/raid/tmp/SortedRun2393_5vQ9eJ' and fill it up with 201326593 sorted elements by Process 1/2 +1169.31s => Time function sortedRuns() in Process 1/2 + 275.52s => Time to write '/mnt/raid/tmp/SortedRun2393_cIVdMb' and fill it up with 201326591 sorted elements by Process 2/2 +1185.57s => Time function sortedRuns() in Process 2/2 +19.7667min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test1240/Distributed_Sorting.2071.out b/SortingAlg/outputs/test1240/Distributed_Sorting.2071.out new file mode 100644 index 0000000..1f992a0 --- /dev/null +++ b/SortingAlg/outputs/test1240/Distributed_Sorting.2071.out @@ -0,0 +1,3 @@ +Using 4 nodes for sorting 7.99929Gb file '/mnt/raid/testlists/8gb.bin' of 1073646107 elements + +3 total processes killed (some possibly by mpirun during cleanup) diff --git a/SortingAlg/outputs/test1240/Distributed_Sorting.2072.out b/SortingAlg/outputs/test1240/Distributed_Sorting.2072.out new file mode 100644 index 0000000..0288e35 --- /dev/null +++ b/SortingAlg/outputs/test1240/Distributed_Sorting.2072.out @@ -0,0 +1,16 @@ +Using 1 nodes for sorting 3Gb file '/mnt/raid/testlists/_402653184.bin' of 402653184 elements + + 68.5285s => Time to read file from offset 0 to 100663297 in Process 1/1 + 289.665s => Time to sort elements in Process 1/1 memory + 80.7898s => Time to write '/mnt/raid/tmp/SortedRun9521_dtcN5T' and fill it up with 100663297 sorted elements by Process 1/1 + 67.6075s => Time to read file from offset 100663297 to 201326594 in Process 1/1 + 289.824s => Time to sort elements in Process 1/1 memory + 74.888s => Time to write '/mnt/raid/tmp/SortedRun9521_E7Bk5S' and fill it up with 100663297 sorted elements by Process 1/1 + 67.8111s => Time to read file from offset 201326594 to 301989891 in Process 1/1 + 291.499s => Time to sort elements in Process 1/1 memory + 79.4861s => Time to write '/mnt/raid/tmp/SortedRun9521_5HRcqU' and fill it up with 100663297 sorted elements by Process 1/1 + 67.4921s => Time to read file from offset 301989891 to 402653188 in Process 1/1 + 289.425s => Time to sort elements in Process 1/1 memory + 72.4182s => Time to write '/mnt/raid/tmp/SortedRun9521_uN6oiX' and fill it up with 100663293 sorted elements by Process 1/1 +1807.69s => Time function sortedRuns() in Process 1/1 +30.1313min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test1240/Distributed_Sorting.2073.out b/SortingAlg/outputs/test1240/Distributed_Sorting.2073.out new file mode 100644 index 0000000..0e8c9ec --- /dev/null +++ b/SortingAlg/outputs/test1240/Distributed_Sorting.2073.out @@ -0,0 +1,17 @@ +Using 2 nodes for sorting 7.99929Gb file '/mnt/raid/testlists/8gb.bin' of 1073646107 elements + + 363.412s => Time to read file from offset 0 to 268411527 in Process 1/2 + 366.685s => Time to read file from offset 268411527 to 536823054 in Process 2/2 + 810.504s => Time to sort elements in Process 2/2 memory + 814.083s => Time to sort elements in Process 1/2 memory + 369.381s => Time to write '/mnt/raid/tmp/SortedRun6728_P1J7tb' and fill it up with 268411527 sorted elements by Process 2/2 + 355.633s => Time to write '/mnt/raid/tmp/SortedRun6728_GDoxR3' and fill it up with 268411527 sorted elements by Process 1/2 + 365.933s => Time to read file from offset 805234581 to 1073646108 in Process 2/2 + 364.554s => Time to read file from offset 536823054 to 805234581 in Process 1/2 + 807.718s => Time to sort elements in Process 2/2 memory + 815.249s => Time to sort elements in Process 1/2 memory + 357.763s => Time to write '/mnt/raid/tmp/SortedRun6728_dYaoG6' and fill it up with 268411527 sorted elements by Process 1/2 +3124.47s => Time function sortedRuns() in Process 1/2 + 378.497s => Time to write '/mnt/raid/tmp/SortedRun6728_zAjKAd' and fill it up with 268411526 sorted elements by Process 2/2 +3131.88s => Time function sortedRuns() in Process 2/2 +52.2089min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test1240/Distributed_Sorting.2074.out b/SortingAlg/outputs/test1240/Distributed_Sorting.2074.out new file mode 100644 index 0000000..4480b00 --- /dev/null +++ b/SortingAlg/outputs/test1240/Distributed_Sorting.2074.out @@ -0,0 +1,22 @@ +Using 4 nodes for sorting 16Gb file '/mnt/raid/testlists/16gb.bin' of 2147483648 elements + + 1168.58s => Time to read file from offset 0 to 429496730 in Process 1/4 + 1169.07s => Time to read file from offset 858993460 to 1288490190 in Process 3/4 + 1169.06s => Time to read file from offset 1288490190 to 1717986920 in Process 4/4 + 1168.62s => Time to read file from offset 429496730 to 858993460 in Process 2/4 + 1324.6s => Time to sort elements in Process 3/4 memory + 1325.09s => Time to sort elements in Process 4/4 memory + 1338.87s => Time to sort elements in Process 2/4 memory + 1339.78s => Time to sort elements in Process 1/4 memory + 1207.82s => Time to write '/mnt/raid/tmp/SortedRun4577_sBwb4U' and fill it up with 429496730 sorted elements by Process 4/4 +3723.72s => Time function sortedRuns() in Process 4/4 + 1266.85s => Time to write '/mnt/raid/tmp/SortedRun4577_X0v6Ku' and fill it up with 429496730 sorted elements by Process 3/4 +3773.63s => Time function sortedRuns() in Process 3/4 + 1270.74s => Time to write '/mnt/raid/tmp/SortedRun4577_VhaAEi' and fill it up with 429496730 sorted elements by Process 2/4 +3784.46s => Time function sortedRuns() in Process 2/4 + 1275.42s => Time to write '/mnt/raid/tmp/SortedRun4577_R9KZ2b' and fill it up with 429496730 sorted elements by Process 1/4 + 292.217s => Time to read file from offset 1717986920 to 2147483650 in Process 1/4 + 1319.88s => Time to sort elements in Process 1/4 memory + 460.871s => Time to write '/mnt/raid/tmp/SortedRun4577_UL3uWb' and fill it up with 429496728 sorted elements by Process 1/4 +5861.94s => Time function sortedRuns() in Process 1/4 +97.7152min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test24/Distributed_Sorting.2083.out b/SortingAlg/outputs/test24/Distributed_Sorting.2083.out new file mode 100644 index 0000000..40c263f --- /dev/null +++ b/SortingAlg/outputs/test24/Distributed_Sorting.2083.out @@ -0,0 +1,19 @@ +Using 4 nodes for sorting 4Gb file '/mnt/raid/testlists/_536870912.bin' of 536870912 elements + + 255.255s => Time to read file from offset 0 to 134217729 in Process 1/4 + 267.399s => Time to read file from offset 268435458 to 402653187 in Process 3/4 + 268.18s => Time to read file from offset 134217729 to 268435458 in Process 2/4 + 269.079s => Time to read file from offset 402653187 to 536870916 in Process 4/4 + 392.458s => Time to sort elements in Process 1/4 memory + 391.51s => Time to sort elements in Process 3/4 memory + 393.09s => Time to sort elements in Process 4/4 memory + 396.252s => Time to sort elements in Process 2/4 memory + 317.867s => Time to write '/mnt/raid/tmp/SortedRun3514_mQgXp3' and fill it up with 134217729 sorted elements by Process 1/4 +989.51s => Time function sortedRuns() in Process 1/4 + 354.881s => Time to write '/mnt/raid/tmp/SortedRun3514_jZlqNY' and fill it up with 134217725 sorted elements by Process 4/4 +1033.29s => Time function sortedRuns() in Process 4/4 + 321.981s => Time to write '/mnt/raid/tmp/SortedRun3514_000Mvh' and fill it up with 134217729 sorted elements by Process 3/4 +1034.5s => Time function sortedRuns() in Process 3/4 + 360.158s => Time to write '/mnt/raid/tmp/SortedRun3514_kOlDij' and fill it up with 134217729 sorted elements by Process 2/4 +1036.9s => Time function sortedRuns() in Process 2/4 +17.2861min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test24/Distributed_Sorting.2084.out b/SortingAlg/outputs/test24/Distributed_Sorting.2084.out new file mode 100644 index 0000000..1f992a0 --- /dev/null +++ b/SortingAlg/outputs/test24/Distributed_Sorting.2084.out @@ -0,0 +1,3 @@ +Using 4 nodes for sorting 7.99929Gb file '/mnt/raid/testlists/8gb.bin' of 1073646107 elements + +3 total processes killed (some possibly by mpirun during cleanup) diff --git a/SortingAlg/outputs/test24/Distributed_Sorting.2085.out b/SortingAlg/outputs/test24/Distributed_Sorting.2085.out new file mode 100644 index 0000000..930b782 --- /dev/null +++ b/SortingAlg/outputs/test24/Distributed_Sorting.2085.out @@ -0,0 +1,22 @@ +Using 4 nodes for sorting 16Gb file '/mnt/raid/testlists/16gb.bin' of 2147483648 elements + + 1168.52s => Time to read file from offset 0 to 429496730 in Process 1/4 + 1169.52s => Time to read file from offset 858993460 to 1288490190 in Process 3/4 + 1169.8s => Time to read file from offset 1288490190 to 1717986920 in Process 4/4 + 1169.9s => Time to read file from offset 429496730 to 858993460 in Process 2/4 + 1324.24s => Time to sort elements in Process 3/4 memory + 1325.21s => Time to sort elements in Process 4/4 memory + 1336.61s => Time to sort elements in Process 2/4 memory + 1340.7s => Time to sort elements in Process 1/4 memory + 1255.36s => Time to write '/mnt/raid/tmp/SortedRun2338_eA4wz8' and fill it up with 429496730 sorted elements by Process 3/4 +3763.13s => Time function sortedRuns() in Process 3/4 + 1301.48s => Time to write '/mnt/raid/tmp/SortedRun2338_3xKD8N' and fill it up with 429496730 sorted elements by Process 4/4 +3809.01s => Time function sortedRuns() in Process 4/4 + 1297.52s => Time to write '/mnt/raid/tmp/SortedRun2338_vwNLFB' and fill it up with 429496730 sorted elements by Process 2/4 +3818.46s => Time function sortedRuns() in Process 2/4 + 1315.84s => Time to write '/mnt/raid/tmp/SortedRun2338_qkrq7P' and fill it up with 429496730 sorted elements by Process 1/4 + 292.207s => Time to read file from offset 1717986920 to 2147483650 in Process 1/4 + 1319.1s => Time to sort elements in Process 1/4 memory + 443.634s => Time to write '/mnt/raid/tmp/SortedRun2338_lgf1RQ' and fill it up with 429496728 sorted elements by Process 1/4 +5893.87s => Time function sortedRuns() in Process 1/4 +98.2468min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test24/Distributed_Sorting.2086.out b/SortingAlg/outputs/test24/Distributed_Sorting.2086.out new file mode 100644 index 0000000..f264db2 --- /dev/null +++ b/SortingAlg/outputs/test24/Distributed_Sorting.2086.out @@ -0,0 +1,55 @@ +Using 1 nodes for sorting 16Gb file '/mnt/raid/testlists/16gb.bin' of 2147483648 elements + + 85.9921s => Time to read file from offset 0 to 126322568 in Process 1/1 + 371.339s => Time to sort elements in Process 1/1 memory + 98.4194s => Time to write '/mnt/raid/tmp/SortedRun6228_HWquqW' and fill it up with 126322568 sorted elements by Process 1/1 + 85.1001s => Time to read file from offset 126322568 to 252645136 in Process 1/1 + 370.422s => Time to sort elements in Process 1/1 memory + 116.306s => Time to write '/mnt/raid/tmp/SortedRun6228_uxlkqT' and fill it up with 126322568 sorted elements by Process 1/1 + 85.4233s => Time to read file from offset 252645136 to 378967704 in Process 1/1 + 368.796s => Time to sort elements in Process 1/1 memory + 94.7553s => Time to write '/mnt/raid/tmp/SortedRun6228_oG2umU' and fill it up with 126322568 sorted elements by Process 1/1 + 85.1133s => Time to read file from offset 378967704 to 505290272 in Process 1/1 + 372.363s => Time to sort elements in Process 1/1 memory + 96.9411s => Time to write '/mnt/raid/tmp/SortedRun6228_W0GXaW' and fill it up with 126322568 sorted elements by Process 1/1 + 85.4413s => Time to read file from offset 505290272 to 631612840 in Process 1/1 + 368.506s => Time to sort elements in Process 1/1 memory + 101.382s => Time to write '/mnt/raid/tmp/SortedRun6228_ZOrENW' and fill it up with 126322568 sorted elements by Process 1/1 + 85.0917s => Time to read file from offset 631612840 to 757935408 in Process 1/1 + 367.046s => Time to sort elements in Process 1/1 memory + 105.625s => Time to write '/mnt/raid/tmp/SortedRun6228_LMH4YV' and fill it up with 126322568 sorted elements by Process 1/1 + 85.4161s => Time to read file from offset 757935408 to 884257976 in Process 1/1 + 367.837s => Time to sort elements in Process 1/1 memory + 99.3496s => Time to write '/mnt/raid/tmp/SortedRun6228_NkuzQX' and fill it up with 126322568 sorted elements by Process 1/1 + 85.1072s => Time to read file from offset 884257976 to 1010580544 in Process 1/1 + 367.915s => Time to sort elements in Process 1/1 memory + 103.607s => Time to write '/mnt/raid/tmp/SortedRun6228_aD7poV' and fill it up with 126322568 sorted elements by Process 1/1 + 85.4148s => Time to read file from offset 1010580544 to 1136903112 in Process 1/1 + 369.237s => Time to sort elements in Process 1/1 memory + 95.2655s => Time to write '/mnt/raid/tmp/SortedRun6228_utj9HX' and fill it up with 126322568 sorted elements by Process 1/1 + 85.0917s => Time to read file from offset 1136903112 to 1263225680 in Process 1/1 + 364.975s => Time to sort elements in Process 1/1 memory + 88.2151s => Time to write '/mnt/raid/tmp/SortedRun6228_3YzTRT' and fill it up with 126322568 sorted elements by Process 1/1 + 85.3888s => Time to read file from offset 1263225680 to 1389548248 in Process 1/1 + 367.077s => Time to sort elements in Process 1/1 memory + 102.834s => Time to write '/mnt/raid/tmp/SortedRun6228_pgsIXW' and fill it up with 126322568 sorted elements by Process 1/1 + 85.1443s => Time to read file from offset 1389548248 to 1515870816 in Process 1/1 + 371.002s => Time to sort elements in Process 1/1 memory + 104.803s => Time to write '/mnt/raid/tmp/SortedRun6228_UDQGST' and fill it up with 126322568 sorted elements by Process 1/1 + 84.8489s => Time to read file from offset 1515870816 to 1642193384 in Process 1/1 + 369.692s => Time to sort elements in Process 1/1 memory + 100.552s => Time to write '/mnt/raid/tmp/SortedRun6228_J6mnbW' and fill it up with 126322568 sorted elements by Process 1/1 + 85.1278s => Time to read file from offset 1642193384 to 1768515952 in Process 1/1 + 368.361s => Time to sort elements in Process 1/1 memory + 107.49s => Time to write '/mnt/raid/tmp/SortedRun6228_VQbPMW' and fill it up with 126322568 sorted elements by Process 1/1 + 84.8898s => Time to read file from offset 1768515952 to 1894838520 in Process 1/1 + 366.633s => Time to sort elements in Process 1/1 memory + 114.246s => Time to write '/mnt/raid/tmp/SortedRun6228_2JVfaX' and fill it up with 126322568 sorted elements by Process 1/1 + 85.1256s => Time to read file from offset 1894838520 to 2021161088 in Process 1/1 + 366.522s => Time to sort elements in Process 1/1 memory + 93.8305s => Time to write '/mnt/raid/tmp/SortedRun6228_m3CPKX' and fill it up with 126322568 sorted elements by Process 1/1 + 84.8551s => Time to read file from offset 2021161088 to 2147483656 in Process 1/1 + 368.401s => Time to sort elements in Process 1/1 memory + 99.9229s => Time to write '/mnt/raid/tmp/SortedRun6228_3LTmiT' and fill it up with 126322560 sorted elements by Process 1/1 +9738.46s => Time function sortedRuns() in Process 1/1 +162.312min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test24/Distributed_Sorting.2087.out b/SortingAlg/outputs/test24/Distributed_Sorting.2087.out new file mode 100644 index 0000000..2082604 --- /dev/null +++ b/SortingAlg/outputs/test24/Distributed_Sorting.2087.out @@ -0,0 +1,32 @@ +Using 2 nodes for sorting 16Gb file '/mnt/raid/testlists/16gb.bin' of 2147483648 elements + + 318.85s => Time to read file from offset 0 to 238609295 in Process 1/2 + 325.56s => Time to read file from offset 238609295 to 477218590 in Process 2/2 + 714.083s => Time to sort elements in Process 2/2 memory + 721.709s => Time to sort elements in Process 1/2 memory + 330.534s => Time to write '/mnt/raid/tmp/SortedRun5122_nh3xQ5' and fill it up with 238609295 sorted elements by Process 1/2 + 360.317s => Time to write '/mnt/raid/tmp/SortedRun5122_s8OTX8' and fill it up with 238609295 sorted elements by Process 2/2 + 317.739s => Time to read file from offset 477218590 to 715827885 in Process 1/2 + 321.643s => Time to read file from offset 715827885 to 954437180 in Process 2/2 + 723.678s => Time to sort elements in Process 1/2 memory + 718.633s => Time to sort elements in Process 2/2 memory + 373.566s => Time to write '/mnt/raid/tmp/SortedRun5122_bkYND5' and fill it up with 238609295 sorted elements by Process 2/2 + 388.722s => Time to write '/mnt/raid/tmp/SortedRun5122_8IVF07' and fill it up with 238609295 sorted elements by Process 1/2 + 323.547s => Time to read file from offset 954437180 to 1193046475 in Process 1/2 + 325.578s => Time to read file from offset 1193046475 to 1431655770 in Process 2/2 + 713.864s => Time to sort elements in Process 2/2 memory + 720.793s => Time to sort elements in Process 1/2 memory + 333.244s => Time to write '/mnt/raid/tmp/SortedRun5122_RWtj98' and fill it up with 238609295 sorted elements by Process 2/2 + 354.894s => Time to write '/mnt/raid/tmp/SortedRun5122_NCCKZ4' and fill it up with 238609295 sorted elements by Process 1/2 + 324.208s => Time to read file from offset 1670265065 to 1908874360 in Process 2/2 + 320.604s => Time to read file from offset 1431655770 to 1670265065 in Process 1/2 + 718.219s => Time to sort elements in Process 2/2 memory + 718.767s => Time to sort elements in Process 1/2 memory + 322.574s => Time to write '/mnt/raid/tmp/SortedRun5122_rFyc27' and fill it up with 238609295 sorted elements by Process 1/2 + 361.285s => Time to write '/mnt/raid/tmp/SortedRun5122_nCzCN5' and fill it up with 238609295 sorted elements by Process 2/2 +5682.74s => Time function sortedRuns() in Process 2/2 + 162.923s => Time to read file from offset 1908874360 to 2147483655 in Process 1/2 + 713.271s => Time to sort elements in Process 1/2 memory + 215.885s => Time to write '/mnt/raid/tmp/SortedRun5122_fVR1c6' and fill it up with 238609288 sorted elements by Process 1/2 +6782.52s => Time function sortedRuns() in Process 1/2 +113.052min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test24/Distributed_Sorting.2088.out b/SortingAlg/outputs/test24/Distributed_Sorting.2088.out new file mode 100644 index 0000000..e3b2cb1 --- /dev/null +++ b/SortingAlg/outputs/test24/Distributed_Sorting.2088.out @@ -0,0 +1,22 @@ +Using 4 nodes for sorting 16Gb file '/mnt/raid/testlists/16gb.bin' of 2147483648 elements + + 1168.47s => Time to read file from offset 0 to 429496730 in Process 1/4 + 1169.03s => Time to read file from offset 1288490190 to 1717986920 in Process 4/4 + 1169.37s => Time to read file from offset 429496730 to 858993460 in Process 2/4 + 1168.48s => Time to read file from offset 858993460 to 1288490190 in Process 3/4 + 1323.66s => Time to sort elements in Process 3/4 memory + 1325.21s => Time to sort elements in Process 4/4 memory + 1338.1s => Time to sort elements in Process 2/4 memory + 1341.1s => Time to sort elements in Process 1/4 memory + 1198.73s => Time to write '/mnt/raid/tmp/SortedRun5040_PemV5F' and fill it up with 429496730 sorted elements by Process 4/4 +3698.36s => Time function sortedRuns() in Process 4/4 + 1213.01s => Time to write '/mnt/raid/tmp/SortedRun5040_dLgvlF' and fill it up with 429496730 sorted elements by Process 1/4 + 1248.72s => Time to write '/mnt/raid/tmp/SortedRun5040_cVzUKI' and fill it up with 429496730 sorted elements by Process 3/4 +3754.46s => Time function sortedRuns() in Process 3/4 + 1242.59s => Time to write '/mnt/raid/tmp/SortedRun5040_qmE6O2' and fill it up with 429496730 sorted elements by Process 2/4 +3757.73s => Time function sortedRuns() in Process 2/4 + 303.579s => Time to read file from offset 1717986920 to 2147483650 in Process 1/4 + 1319.15s => Time to sort elements in Process 1/4 memory + 452.395s => Time to write '/mnt/raid/tmp/SortedRun5040_HnSMCD' and fill it up with 429496728 sorted elements by Process 1/4 +5814.62s => Time function sortedRuns() in Process 1/4 +96.9273min => FULL EXECUTION TIME diff --git a/SortingAlg/outputs/test24/Distributed_Sorting.2089.out b/SortingAlg/outputs/test24/Distributed_Sorting.2089.out new file mode 100644 index 0000000..c3d67f3 --- /dev/null +++ b/SortingAlg/outputs/test24/Distributed_Sorting.2089.out @@ -0,0 +1,3 @@ +Using 8 nodes for sorting 16Gb file '/mnt/raid/testlists/16gb.bin' of 2147483648 elements + +7 total processes killed (some possibly by mpirun during cleanup) diff --git a/SortingAlg/outputs/test24/Distributed_Sorting.2090.out b/SortingAlg/outputs/test24/Distributed_Sorting.2090.out new file mode 100644 index 0000000..eb9af19 --- /dev/null +++ b/SortingAlg/outputs/test24/Distributed_Sorting.2090.out @@ -0,0 +1,36 @@ +Using 17 nodes for sorting 16Gb file '/mnt/raid/testlists/16gb.bin' of 2147483648 elements + + 1459.15s => Time to read file from offset 0 to 126322568 in Process 1/17 + 1461.82s => Time to read file from offset 1136903112 to 1263225680 in Process 10/17 + 1460.86s => Time to read file from offset 1010580544 to 1136903112 in Process 9/17 + 1461.48s => Time to read file from offset 1389548248 to 1515870816 in Process 12/17 + 1461.74s => Time to read file from offset 631612840 to 757935408 in Process 6/17 + 1461.78s => Time to read file from offset 1642193384 to 1768515952 in Process 14/17 + 1461.8s => Time to read file from offset 378967704 to 505290272 in Process 4/17 + 1461.2s => Time to read file from offset 505290272 to 631612840 in Process 5/17 + 1461.5s => Time to read file from offset 757935408 to 884257976 in Process 7/17 + 1461.82s => Time to read file from offset 1894838520 to 2021161088 in Process 16/17 + 1461.86s => Time to read file from offset 884257976 to 1010580544 in Process 8/17 + 1460.34s => Time to read file from offset 2021161088 to 2147483656 in Process 17/17 + 1463.03s => Time to read file from offset 1263225680 to 1389548248 in Process 11/17 + 1461.39s => Time to read file from offset 252645136 to 378967704 in Process 3/17 + 1461.37s => Time to read file from offset 1515870816 to 1642193384 in Process 13/17 + 1461.59s => Time to read file from offset 1768515952 to 1894838520 in Process 15/17 + 1461.51s => Time to read file from offset 126322568 to 252645136 in Process 2/17 + 365.21s => Time to sort elements in Process 10/17 memory + 366.843s => Time to sort elements in Process 15/17 memory + 366.759s => Time to sort elements in Process 16/17 memory + 368.455s => Time to sort elements in Process 17/17 memory + 367.341s => Time to sort elements in Process 6/17 memory + 367.742s => Time to sort elements in Process 7/17 memory + 368.466s => Time to sort elements in Process 5/17 memory + 368.22s => Time to sort elements in Process 8/17 memory + 368.869s => Time to sort elements in Process 3/17 memory + 369.421s => Time to sort elements in Process 9/17 memory + 369.064s => Time to sort elements in Process 14/17 memory + 367.908s => Time to sort elements in Process 11/17 memory + 369.808s => Time to sort elements in Process 13/17 memory + 372.082s => Time to sort elements in Process 1/17 memory + 370.449s => Time to sort elements in Process 2/17 memory + 370.935s => Time to sort elements in Process 12/17 memory + 372.413s => Time to sort elements in Process 4/17 memory diff --git a/SortingAlg/sort_big_file b/SortingAlg/sort_big_file new file mode 100755 index 0000000000000000000000000000000000000000..63de7a9d830213675b99fcb1c14480499563a1c8 GIT binary patch literal 247608 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%0Dky+d!PH8@8|Pu{|)$Bp5Nn&6^7sA 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

qFR9V-q(Kx5O9Wg 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

0}0N(yfde1C5X1tVrz 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 literal 0 HcmV?d00001

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