From a729a9f68c3911f2435ef8986b275e57b53d2f67 Mon Sep 17 00:00:00 2001 From: pajjilykk Date: Tue, 21 Apr 2026 11:04:11 +0700 Subject: [PATCH] seems nice --- lab1 | Bin 17600 -> 27504 bytes main.cpp | 115 ++++++++++++++++++++++++++++--------------------------- 2 files changed, 58 insertions(+), 57 deletions(-) diff --git a/lab1 b/lab1 index 281ff034b27dac4af852a3389022c28e6433822f..b5f66d81c56623465ee2bbd071951a7501d4b904 100755 GIT binary patch literal 27504 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 literal 17600 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 V%W|}=F_!+U#g@c{c?x-~_#dwa`;-6x diff --git a/main.cpp b/main.cpp index 5f95ab6..3d35770 100644 --- a/main.cpp +++ b/main.cpp @@ -5,6 +5,9 @@ #include #include #include +#include +#include +#include using namespace std; @@ -15,36 +18,35 @@ struct SharedData { int arr[MAX]; }; -// ================= TIME ================= -double now() { - timeval t; - gettimeofday(&t, NULL); - return t.tv_sec + t.tv_usec / 1e6; +string now() { + timeval tv; + gettimeofday(&tv, NULL); + + ostringstream oss; + oss << tv.tv_sec << "." + << setfill('0') << setw(6) << tv.tv_usec; + + return oss.str(); } -// ================= MERGE ================= void merge(int *arr, int l, int m, int r) { int *temp = new int[r - l + 1]; int i = l, j = m + 1, k = 0; while (i <= m && j <= r) { - if (arr[i] < arr[j]) - temp[k++] = arr[i++]; - else - temp[k++] = arr[j++]; + if (arr[i] < arr[j]) temp[k++] = arr[i++]; + else temp[k++] = arr[j++]; } while (i <= m) temp[k++] = arr[i++]; while (j <= r) temp[k++] = arr[j++]; - for (int x = 0; x < k; x++) - arr[l + x] = temp[x]; + for (int x = 0; x < k; x++) arr[l + x] = temp[x]; delete[] temp; } -// ================= LOCAL SORT ================= void local_sort(int *arr, int l, int r) { if (l >= r) return; int m = (l + r) / 2; @@ -53,45 +55,53 @@ void local_sort(int *arr, int l, int r) { merge(arr, l, m, r); } -// ================= PARALLEL SORT ================= -void parallel_sort(int *arr, int l, int r, int depth) { - if (l >= r) return; +void parallel_sort(int l, int r, int depth, int shmid) { + SharedData *data = (SharedData*) shmat(shmid, NULL, 0); + int *arr = data->arr; - double start = now(); + string start_time = now(); - pid_t pid = getpid(); - pid_t ppid = getppid(); - - cout << "[START] t=" << start - << " PID=" << pid - << " PPID=" << ppid + cout << "START PID=" << getpid() + << " PPID=" << getppid() << " depth=" << depth - << " range=[" << l << "," << r << "]\n"; + << " range=[" << l << "," << r << "]" + << " time=" << start_time << "\n"; + + if (l >= r) { + string end_time = now(); + cout << "END PID=" << getpid() + << " range=[" << l << "," << r << "]" + << " time=" << end_time << "\n"; + shmdt(data); + return; + } int m = (l + r) / 2; if (depth >= MAX_DEPTH) { local_sort(arr, l, r); - double end = now(); - cout << "[END] t=" << end - << " PID=" << pid - << " duration=" << (end - start) - << " sec\n"; + string end_time = now(); + cout << "END PID=" << getpid() + << " depth=" << depth + << " range=[" << l << "," << r << "]" + << " time=" << end_time << "\n"; + + shmdt(data); return; } pid_t left = fork(); if (left == 0) { - parallel_sort(arr, l, m, depth + 1); + parallel_sort(l, m, depth + 1, shmid); _exit(0); } pid_t right = fork(); if (right == 0) { - parallel_sort(arr, m + 1, r, depth + 1); + parallel_sort(m + 1, r, depth + 1, shmid); _exit(0); } @@ -100,20 +110,21 @@ void parallel_sort(int *arr, int l, int r, int depth) { merge(arr, l, m, r); - double end = now(); + string end_time = now(); - cout << "[END] t=" << end - << " PID=" << pid - << " duration=" << (end - start) - << " sec\n"; + cout << "END PID=" << getpid() + << " depth=" << depth + << " range=[" << l << "," << r << "]" + << " time=" << end_time << "\n"; + + shmdt(data); } -// ================= MAIN ================= int main() { key_t key = ftok("shmfile", 65); int shmid = shmget(key, sizeof(SharedData), 0666 | IPC_CREAT); - SharedData *data = (SharedData*) shmat(shmid, (void*)0, 0); + SharedData *data = (SharedData*) shmat(shmid, NULL, 0); int n = 20000; @@ -122,27 +133,17 @@ int main() { for (int i = 0; i < n; i++) data->arr[i] = rand() % 100000; - double global_start = now(); + cout << "Before:\n"; + for (int i = 0; i < 20; i++) + cout << data->arr[i] << " "; + cout << "\n\n"; - cout << "Main PID=" << getpid() << "\n\n"; + parallel_sort(0, n - 1, 0, shmid); - parallel_sort(data->arr, 0, n - 1, 0); - - double global_end = now(); - - cout << "\nExecution time: " - << (global_end - global_start) - << " sec\n"; - - // Проверка - for (int i = 1; i < n; i++) { - if (data->arr[i - 1] > data->arr[i]) { - cout << "ERROR: not sorted!\n"; - break; - } - } - - cout << "Sorted correctly\n"; + cout << "\nAfter:\n"; + for (int i = 0; i < 20; i++) + cout << data->arr[i] << " "; + cout << "\n"; shmdt(data); shmctl(shmid, IPC_RMID, NULL);