Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 66 additions & 0 deletions homework/Brylkin/01/different_summing.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
#include <iostream>
#include "profile.h"
#include <cstdint>
#include <random>

using namespace std;

int main()
{
std::cerr << "Starting program!" << std::endl;
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<int8_t> 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;
}
38 changes: 38 additions & 0 deletions homework/Brylkin/01/profile.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#ifndef PROFILE_H
#define PROFILE_H

#include <chrono>
#include <iostream>
#include <string>

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<milliseconds>(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