main.cpp

Jens Garstka, 2015-06-05 09:43 am

Download (2 kB)

 
1
// STL
2
#include <cstdlib>
3
#include <cstring>
4
#include <fstream>
5
#include <ios>
6
7
// Sysconf
8
#include <unistd.h>
9
10
// OpemCV
11
#include <opencv2/core.hpp>
12
13
void process_mem_usage(double& vm_usage, double& resident_set)
14
{
15
   vm_usage     = 0.0;
16
   resident_set = 0.0;
17
18
   // 'file' stat seems to give the most reliable results
19
   //
20
   std::ifstream stat_stream("/proc/self/stat",std::ios_base::in);
21
22
   // dummy vars for leading entries in stat that we don't care about
23
   //
24
   std::string pid, comm, state, ppid, pgrp, session, tty_nr;
25
   std::string tpgid, flags, minflt, cminflt, majflt, cmajflt;
26
   std::string utime, stime, cutime, cstime, priority, nice;
27
   std::string O, itrealvalue, starttime;
28
29
   // the two fields we want
30
   //
31
   unsigned long vsize;
32
   long rss;
33
34
   stat_stream >> pid >> comm >> state >> ppid >> pgrp >> session >> tty_nr
35
               >> tpgid >> flags >> minflt >> cminflt >> majflt >> cmajflt
36
               >> utime >> stime >> cutime >> cstime >> priority >> nice
37
               >> O >> itrealvalue >> starttime >> vsize >> rss; 
38
39
   stat_stream.close();
40
41
   // in case x86-64 is configured to use 2MB pages
42
   //
43
   long page_size_kb = sysconf(_SC_PAGE_SIZE) / 1024; 
44
   
45
   vm_usage     = vsize / 1024.0;
46
   resident_set = rss * page_size_kb;
47
}
48
49
50
int main(int argc, char **argv) 
51
{
52
  // create a dummy line with random data
53
  //
54
  float random_data[153];
55
  std::random_device rd;
56
  std::uniform_real_distribution<float> dist(0.0, 1.0);
57
  for (int i = 0; i < 153 ; i++) random_data[i] = dist(rd);
58
59
  // create a matrix with random data
60
  //
61
  cv::Mat random_mat(1,153,CV_32F,random_data);
62
  
63
  // create a destination matrix with one row for the beginning
64
  //
65
  cv::Mat dest_mat = random_mat.clone();
66
67
  // add rows
68
  //
69
  double vm, rss;
70
  for (int i = 0; i < 12000000; i++) {
71
    dest_mat.push_back(random_mat);
72
    if ( (i%10000) == 0 ) {
73
      process_mem_usage(vm, rss);
74
      printf("%9d:    virtual %8.2fM    resident %8.2fM\n",i, vm/1024, rss/1024);
75
    }
76
  }
77
  return 0;
78
}