diff --git a/homework/Brylkin/01/different_summing.cpp b/homework/Brylkin/01/different_summing.cpp new file mode 100644 index 0000000..6083e5c --- /dev/null +++ b/homework/Brylkin/01/different_summing.cpp @@ -0,0 +1,66 @@ +#include +#include "profile.h" +#include +#include + +using namespace std; + +int main() +{ + std::cerr << "Starting program!" << std::endl; + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution dis(-10, 10); + int64_t sum1 = 0, sum2 = 0; + const int N = 10000; + int8_t** arr = new int8_t*[N]; + for (int i = 0; i < N; ++i) + { + arr[i] = new int8_t[N]; + } + std::cerr << "Memory allocated!" << std::endl; + for (int i = 0; i < N; ++i) + { + for (int j = 0; j < N; ++j) + { + arr[i][j] = dis(gen); + } + } + std::cerr << "Elements initialized!" << std::endl; + // считаем сумму + { + LOG_DURATION("Summing by rows"); + for (int k = 0; k < N/100; ++k) + { + for (int i = 0; i < N; ++i) + { + for (int j = 0; j < N; ++j) + { + sum1 += arr[i][j]; + } + } + } + } + { + LOG_DURATION("Summing by cols"); + for (int k = 0; k < N/100; ++k) + { + for (int i = 0; i < N; ++i) + { + for (int j = 0; j < N; ++j) + { + sum2 += arr[j][i]; + } + } + } + } + std::cerr << "Summing ended!" << std::endl; + for (int i = 0; i < N; ++i) + { + delete [] arr[i]; + } + delete[] arr; + std::cerr << "Memory cleared!" << std::endl; + std::cout << "Sum1 = " << sum1 << "; Sum2 = " << sum2; + return 0; +} diff --git a/homework/Brylkin/01/profile.h b/homework/Brylkin/01/profile.h new file mode 100644 index 0000000..112549e --- /dev/null +++ b/homework/Brylkin/01/profile.h @@ -0,0 +1,38 @@ +#ifndef PROFILE_H +#define PROFILE_H + +#include +#include +#include + +using namespace std; +using namespace std::chrono; + +class LogDuration { +public: + explicit LogDuration(const string& msg = "") + : message(msg + ": ") + , start(steady_clock::now()) + { + } + + ~LogDuration() { + auto finish = steady_clock::now(); + auto dur = finish - start; + cerr << message + << duration_cast(dur).count() + << " ms" << endl; + } +private: + string message; + steady_clock::time_point start; +}; + +#define UNIQ_ID_IMPL(lineno) _a_local_var_##lineno +#define UNIQ_ID(lineno) UNIQ_ID_IMPL(lineno) + +#define LOG_DURATION(message) \ + LogDuration UNIQ_ID(__LINE__){message}; + + +#endif // PROFILE_H