From 1fcf466144eea59dc2ca5f274034cbc4c45b630c Mon Sep 17 00:00:00 2001 From: Trygve Date: Tue, 27 Feb 2024 18:37:22 +0100 Subject: [PATCH] Ferdig med 10 --- lab_2/10_answer.md | 8 +++ lab_2/10_memleak/Makefile | 18 ++++++ lab_2/10_memleak/chain-random-walk.cpp | 78 +++++++++++++++++++++++++ lab_2/10_memleak/chain-random-walk.h | 11 ++++ lab_2/10_memleak/const_Nm_timings.csv | 10 ++++ lab_2/10_memleak/const_m_timings.csv | 10 ++++ lab_2/10_memleak/memleak.cpp | 62 ++++++++++++++++++++ lab_2/10_memleak/plot.py | 34 +++++++++++ lab_2/10_memleak/time_Nm.nu | 6 ++ lab_2/10_runtime_plot.png | Bin 0 -> 46644 bytes 10 files changed, 237 insertions(+) create mode 100644 lab_2/10_answer.md create mode 100644 lab_2/10_memleak/Makefile create mode 100644 lab_2/10_memleak/chain-random-walk.cpp create mode 100644 lab_2/10_memleak/chain-random-walk.h create mode 100644 lab_2/10_memleak/const_Nm_timings.csv create mode 100644 lab_2/10_memleak/const_m_timings.csv create mode 100644 lab_2/10_memleak/memleak.cpp create mode 100644 lab_2/10_memleak/plot.py create mode 100644 lab_2/10_memleak/time_Nm.nu create mode 100644 lab_2/10_runtime_plot.png diff --git a/lab_2/10_answer.md b/lab_2/10_answer.md new file mode 100644 index 0000000..ae0d5c4 --- /dev/null +++ b/lab_2/10_answer.md @@ -0,0 +1,8 @@ +# How many steps m you can run the program? +The limit is somewhere between m=6300000 m=6400000 on my laptop + +# How do you recognize that the system is running out of memory? +The memory and swap gets filled up and the process gets killed by systemd-oomd + +# Plot the runtime +See 10_runtime_plot.png diff --git a/lab_2/10_memleak/Makefile b/lab_2/10_memleak/Makefile new file mode 100644 index 0000000..0ef13b8 --- /dev/null +++ b/lab_2/10_memleak/Makefile @@ -0,0 +1,18 @@ +binary = memleak +folder = memleak +objects = $(patsubst %.cpp,%.o,$(wildcard *.cpp)) + +run: $(binary) + ./$(binary) 7 100000000 + +$(binary): $(objects) + g++ -o $@ $^ + +clean: + rm -f *.o + +clear: clean + rm -f *.zip $(binary) + +zip: clean + zip $(folder) Makefile *.cpp *.h diff --git a/lab_2/10_memleak/chain-random-walk.cpp b/lab_2/10_memleak/chain-random-walk.cpp new file mode 100644 index 0000000..780b048 --- /dev/null +++ b/lab_2/10_memleak/chain-random-walk.cpp @@ -0,0 +1,78 @@ +#include +#include +#include + +#include "chain-random-walk.h" + +using namespace crw; + +namespace { + // set each element forward or backward by 1, at random + void stochastic_unit_step(long size, float config[]) + { + for(long i = 0; i < size; i++) + if(std::rand() % 2 == 0) config[i]++; + else config[i]--; + } + + void shift_centre_to_origin(long size, float config[]) + { + double sum = 0.0; + for(long i = 0; i < size; i++) sum += config[i]; + for(long i = 0; i < size; i++) config[i] -= sum/size; + } + + const int el_out_max = 9; // show at most the first nine elements +} + +float crw::elongation(long size, float config[]) +{ + float min = config[0]; + float max = config[0]; + + for(long i = 1; i < size; i++) + if(config[i] > max) max = config[i]; + else if(config[i] < min) min = config[i]; + + return max - min; +} + +float* crw::step(long size, float previous[]) +{ + // allocate the next configuration + float* config = new float[size](); + + // first, let the chain contract: each element is attracted by its neighbours + for(long i = 0; i < size; i++) + config[i] = 0.5*previous[i] + 0.25*previous[(i-1) % size] + + 0.25*previous[(i+1) % size]; + + stochastic_unit_step(size, config); // actual random walk step + shift_centre_to_origin(size, config); // shift such that the average remains zero + + return config; +} + +void crw::output(long no, long size, float present[], float extreme[], double avg_el) +{ + /* output statistics over the run so far + */ + std::cout << std::setw(12) << no << "\t" << std::setprecision(3) << std::fixed + << std::setw(6) << elongation(size, present) << " " + << std::setprecision(7) << std::setw(10) << avg_el << " " << std::setprecision(5) + << std::setw(9) << elongation(size, extreme) << std::setprecision(3) << "\t\t"; + + /* display the present configuration, showing up to element coordinates */ + for(long i = 0; (i < size) && (i < el_out_max); i++) + std::cout << std::setw(7) << present[i] << " "; + if(size > el_out_max) std::cout << "..."; + std::cout << "\t\t"; + + /* display the most extreme configuration so far, + * showing up to element coordinates + */ + for(long i = 0; (i < size) && (i < el_out_max); i++) + std::cout << std::setw(7) << extreme[i] << " "; + if(size > el_out_max) std::cout << "..."; + std::cout << "\n"; +} diff --git a/lab_2/10_memleak/chain-random-walk.h b/lab_2/10_memleak/chain-random-walk.h new file mode 100644 index 0000000..9ad3d0e --- /dev/null +++ b/lab_2/10_memleak/chain-random-walk.h @@ -0,0 +1,11 @@ +#ifndef CHAIN_RANDOM_WALK_H +#define CHAIN_RANDOM_WALK_H + +namespace crw +{ + float elongation(long size, float config[]); + float* step(long size, float previous[]); + void output(long no, long size, float present[], float extreme[], double avg_el); +} + +#endif diff --git a/lab_2/10_memleak/const_Nm_timings.csv b/lab_2/10_memleak/const_Nm_timings.csv new file mode 100644 index 0000000..3417d6c --- /dev/null +++ b/lab_2/10_memleak/const_Nm_timings.csv @@ -0,0 +1,10 @@ +1024, 43.46 +512, 44.03 +256, 45.26 +128, 46.54 +64, 47.82 +32, 50.89 +16, 56.13 +8, 60.42 +4, 59.66 +2, 56.71 \ No newline at end of file diff --git a/lab_2/10_memleak/const_m_timings.csv b/lab_2/10_memleak/const_m_timings.csv new file mode 100644 index 0000000..a1f2a8b --- /dev/null +++ b/lab_2/10_memleak/const_m_timings.csv @@ -0,0 +1,10 @@ +1024, 43.84 +512, 22.24 +256, 11.32 +128, 5.86 +64, 3.05 +32, 1.61 +16, 0.89 +8, 0.47 +4, 0.24 +2, 0.15 diff --git a/lab_2/10_memleak/memleak.cpp b/lab_2/10_memleak/memleak.cpp new file mode 100644 index 0000000..89b57b9 --- /dev/null +++ b/lab_2/10_memleak/memleak.cpp @@ -0,0 +1,62 @@ +#include +#include +#include + +#include "chain-random-walk.h" + +namespace { + constexpr int default_size = 7; + constexpr int default_steps = 100000000; + constexpr int outlines = 25; +} + +/* first argument: array size + * second argument: number of steps + */ +int main(int argc, char** argv) +{ + long size = default_size; + if(argc > 1) size = std::atol(argv[1]); + assert(size > 0); + + long steps = default_steps; + if(argc > 2) steps = std::atol(argv[2]); + assert(steps > 0); + + long outfreq = steps / outlines; + if(outfreq < 1) outfreq = 1; + + /* the configuration is given by an array of float numbers */ + float* present_configuration = new float[size](); + + /* store the one with greatest deviation between min and max element */ + float* extreme_configuration = present_configuration; + float extreme_elongation = 0.0; + double el_sum = 0.0; + double el_avg = 0.0; + + std::srand(std::time(nullptr)); // initialize the random number generator + + for(long i = 0; i < steps; i++) + { + if(i % outfreq == 0) + crw::output(i, size, present_configuration, extreme_configuration, el_avg); + + /* here we are calling the random walk step; + * this returns a new configuration (float array) on the heap + */ + present_configuration = crw::step(size, present_configuration); + float present_elongation = crw::elongation(size, present_configuration); + + if(present_elongation > extreme_elongation) + { + extreme_configuration = present_configuration; + extreme_elongation = present_elongation; + } + el_sum += present_elongation; + el_avg = el_sum / (i + 1.0); + } + crw::output(steps, size, present_configuration, extreme_configuration, el_avg); + + delete[] present_configuration; +} diff --git a/lab_2/10_memleak/plot.py b/lab_2/10_memleak/plot.py new file mode 100644 index 0000000..14f6332 --- /dev/null +++ b/lab_2/10_memleak/plot.py @@ -0,0 +1,34 @@ +import matplotlib.pyplot as plt +import matplotlib.cbook as cbook + +import numpy as np +import pandas as pd + +f = open('const_m_timings.csv', 'r') +x1 = [] +y1 = [] +for l in f.readlines(): + l = l.split(',') + x1.append(l[0]) + y1.append(float(l[1])) + +f = open('const_Nm_timings.csv', 'r') +x2 = [] +y2 = [] +for l in f.readlines(): + l = l.split(',') + x2.append(l[0]) + y2.append(float(l[1])) + +plt.plot(x1, y1, label = 'constant m') +plt.plot(x2, y2, label = 'constant Nm') +for i in range(len(x1)): + plt.text(i,y1[i],str(y1[i])+'s') +for i in range(len(x2)): + plt.text(i,y2[i],str(y2[i])+'s') +plt.title('runtime t as a function of number of steps N') +plt.xlabel('N') +plt.ylabel('time (s)') +plt.grid() +plt.legend() +plt.show() diff --git a/lab_2/10_memleak/time_Nm.nu b/lab_2/10_memleak/time_Nm.nu new file mode 100644 index 0000000..7ecab01 --- /dev/null +++ b/lab_2/10_memleak/time_Nm.nu @@ -0,0 +1,6 @@ +for x in [1024 512 256 128 64 32 16 8 4 2] { +$x | into string | save --append log.csv; +", " | save --append log.csv; +let m = 2048000000 / $x; +time -f %e -a -o log.csv ./memleak $x $m; +}; \ No newline at end of file diff --git a/lab_2/10_runtime_plot.png b/lab_2/10_runtime_plot.png new file mode 100644 index 0000000000000000000000000000000000000000..0d1da7c48bc938d427911988f75212c84f55392e GIT binary patch literal 46644 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