OpenFPM_pdata  1.1.0
Project that contain the implementation of distributed structures
 All Data Structures Namespaces Functions Variables Typedefs Enumerations Friends Pages
cl_part_performance_graph.hpp
1 /*
2  * cl_part_performance_graph.hpp
3  *
4  * Created on: Dec 23, 2016
5  * Author: i-bird
6  */
7 
8 #ifndef SRC_VECTOR_PERFORMANCE_CL_PART_PERFORMANCE_GRAPH_HPP_
9 #define SRC_VECTOR_PERFORMANCE_CL_PART_PERFORMANCE_GRAPH_HPP_
10 
11 #include "vector_dist_performance_util.hpp"
12 
13 template<unsigned int dim> void cl_part_time(GoogleChart & cg,
14  openfpm::vector<size_t> & cl_n_particles,
15  openfpm::vector<float> & cl_r_cutoff,
16  openfpm::vector<size_t> &cl_orders,
18  openfpm::vector<openfpm::vector<double>> cl_time_rand_mean,
20  openfpm::vector<openfpm::vector<double>> cl_time_rand_dev)
21 {
22  std::string file_mean(test_dir);
23  std::string file_var(test_dir);
24  file_mean += std::string("/openfpm_pdata/cl_part_norm_hilbert_mean_" + std::to_string(dim) + std::string("_ref"));
25  file_var += std::string("/openfpm_pdata/cl_part_norm_hilbert_dev_" + std::to_string(dim) + std::string("_ref"));
26 
27  std::string file_mean_save = std::string("cl_part_norm_hilbert_mean_" + std::to_string(dim) + std::to_string("_ref"));
28  std::string file_var_save = std::string("cl_part_norm_hilbert_dev_" + std::to_string(dim) + std::to_string("_ref"));
29 
30  openfpm::vector<size_t> xp = cl_n_particles;
31 
34 
37 
38  yp_mean.resize(cl_time_rand_mean.size());
39  yp_dev.resize(cl_time_rand_dev.size());
40  for (size_t i = 0 ; i < yp_mean.size() ; i++)
41  {
42  yp_mean.get(i).resize(cl_time_rand_mean.get(i).size());
43  yp_dev.get(i).resize(cl_time_rand_dev.get(i).size());
44 
45  for (size_t j = 0 ; j < yp_mean.get(i).size() ; j++)
46  {
47  yp_mean.get(i).get(j).resize(1+cl_time_hilb_mean.get(i).get(j).size());
48  yp_dev.get(i).get(j).resize(1+cl_time_hilb_dev.get(i).get(j).size());
49 
50  for (size_t k = 0 ; k < cl_time_hilb_mean.get(i).get(j).size() ; k++)
51  {
52  yp_mean.get(i).get(j).get(k) = cl_time_hilb_mean.get(i).get(j).get(k);
53  yp_dev.get(i).get(j).get(k) = cl_time_hilb_dev.get(i).get(j).get(k);
54  }
55  yp_mean.get(i).get(j).get(cl_time_hilb_mean.get(i).get(j).size()) = cl_time_rand_mean.get(i).get(j);
56  yp_dev.get(i).get(j).get(cl_time_hilb_mean.get(i).get(j).size()) = cl_time_rand_dev.get(i).get(j);
57  }
58  }
59 
60  for (size_t i = 0 ; i < cl_orders.size() ; i++)
61  {names.add(std::string("Order of: " + std::to_string(cl_orders.get(i))));}
62  names.add("No-order");
63 
64  for (size_t i = 0 ; i < cl_r_cutoff.size() ; i++)
65  gnames.add("Cell-list performance, cut-off radius: " + std::to_string(cl_r_cutoff.get(i)));
66 
67  std::string y_string = std::string("Time to calculate forces (s)");
68  std::string x_string = std::string("Number of particles");
69 
70  std::string str("<h1>Cell-list " + std::to_string(dim) + "-D performance tests: </h1>");
71  str += "<h2> 1) Time to calculate forces in the case of particles randomly ordered in a vector of particles, and in the case of particles ordered along an hilbert curve of order N</h2>";
72 
73  cg.addHTML(str);
74 
75  StandardPerformanceGraph(file_mean,
76  file_var,
77  file_mean_save,
78  file_var_save,
79  cg,
80  xp,
81  yp_mean,
82  yp_dev,
83  names,
84  gnames,
85  x_string,
86  y_string,
87  false);
88 }
89 
90 template<unsigned int dim> void cl_part_reorder_time(GoogleChart & cg,
91  openfpm::vector<size_t> & cl_n_particles,
92  openfpm::vector<float> & cl_r_cutoff,
93  openfpm::vector<size_t> &cl_orders,
96 {
97  // Get the test dir
98  std::string file_mean(test_dir);
99  std::string file_var(test_dir);
100  file_mean += std::string("/openfpm_pdata/cl_part_reorder_hilbert_mean_" + std::to_string(dim) + std::string("_ref"));
101  file_var += std::string("/openfpm_pdata/cl_part_reorder_hilbert_dev_" + std::to_string(dim) + std::string("_ref"));
102 
105  y_ref_mean.load(file_mean);
106  y_ref_dev.load(file_var);
107 
108  // warning level
109  openfpm::vector<int> warning_vlevel;
110 
111  // graphs data
116 
117  for (size_t i = 0; i < cl_n_particles.size() ; i++)
118  x.add(cl_n_particles.get(i));
119 
120  for (size_t i = 0; i < cl_orders.size(); i++)
121  yn.add("Order of: " + std::to_string(cl_orders.get(i)));
122 
123  // Add reorder time
124  y.resize(cl_time_reorder_mean.size());
125  y_dev.resize(cl_time_reorder_dev.size());
126  for (size_t r = 0; r < cl_time_reorder_mean.size(); r++)
127  {
128  y.get(r).resize(cl_time_reorder_mean.get(r).size());
129  y_dev.get(r).resize(cl_time_reorder_mean.get(r).size());
130  for (size_t k = 0; k < cl_time_reorder_mean.get(r).size(); k++)
131  {
132  // reorder time
133  for (size_t m = 0; m < cl_time_reorder_mean.get(r).get(k).size(); m++)
134  {
135  // Put time
136  y.get(r).get(k).add(cl_time_reorder_mean.get(r).get(k).get(m));
137  y_dev.get(r).get(k).add(cl_time_reorder_dev.get(r).get(k).get(m));
138  }
139  }
140  }
141 
142  // Save y
143  y.save("cl_part_reorder_hilbert_mean_" + std::to_string(dim) + std::to_string("_ref"));
144  y_dev.save("cl_part_reorder_hilbert_dev_" + std::to_string(dim) + std::to_string("_ref"));
145 
146  if (y_ref_mean.size() != 0)
147  {
148  yn.clear();
149  y.clear();
150 
151  size_t i = cl_orders.size()-1;
152  yn.add("Order of: " + std::to_string(cl_orders.get(i)));
153  yn.add("interval");
154  yn.add("interval");
155 
156  // Add reorder time
157  y.resize(cl_time_reorder_mean.size());
158  for (size_t r = 0; r < cl_time_reorder_mean.size(); r++)
159  {
160  int warning_level = -1;
161 
162  y.get(r).resize(cl_time_reorder_mean.get(r).size());
163  for (size_t k = 0; k < cl_time_reorder_mean.get(r).size(); k++)
164  {
165  // reorder time
166  size_t m = cl_orders.size()-1;
167 
168  // Put time
169  y.get(r).get(k).add(cl_time_reorder_mean.get(r).get(k).get(m));
170  y.get(r).get(k).add(y_ref_mean.get(r).get(k).get(m) - 3.0*y_ref_dev.get(r).get(k).get(m) );
171  y.get(r).get(k).add(y_ref_mean.get(r).get(k).get(m) + 3.0*y_ref_dev.get(r).get(k).get(m) );
172 
173  warning_set(warning_level,cl_time_reorder_mean.get(r).get(k).get(m),y_ref_mean.get(r).get(k).get(m),y_ref_dev.get(r).get(k).get(m));
174  }
175 
176  warning_vlevel.add(warning_level);
177  }
178  }
179 
180  // Speedup graphs report
181 
182  // Google charts options
183  GCoptions options;
184 
185  options.yAxis = std::string("Time (s)");
186  options.xAxis = std::string("Number of particles");
187  options.lineWidth = 2;
188  options.more = GC_ZOOM;
189 
190  //options.more = "hAxis: {logScale: true}";
191 
192  std::string str("<h1>Cell-list " + std::to_string(dim) + "-D performance tests: </h1>");
193  str += "<h2> 1) Time to reorder the distributed vector</h2>";
194 
195  cg.addHTML(str);
196 
197  for (size_t i = 0; i < cl_r_cutoff.size(); i++)
198  {
199  std::string chart_area;
200  if (warning_vlevel.size() != 0)
201  addchartarea(chart_area,warning_vlevel.get(i));
202  options.more = GC_Y_LOG + "," + GC_ZOOM + chart_area;
203 
204  options.title = std::string("Cell-list performance, cut-off radius: " + std::to_string(cl_r_cutoff.get(i)));
205  cg.AddLinesGraph(x,y.get(i),yn,options);
206  }
207 }
208 
209 #endif /* SRC_VECTOR_PERFORMANCE_CL_PART_PERFORMANCE_GRAPH_HPP_ */
void addHTML(const std::string &html)
Add HTML text.
void AddLinesGraph(openfpm::vector< X > &x, openfpm::vector< Y > &y, const GCoptions &opt)
Add a simple lines graph.
std::string title
Title of the chart.
Definition: GoogleChart.hpp:27
std::string more
more
Definition: GoogleChart.hpp:66
size_t size()
Stub size.
Definition: map_vector.hpp:70
std::string yAxis
Y axis name.
Definition: GoogleChart.hpp:29
Small class to produce graph with Google chart in HTML.
size_t lineWidth
Width of the line.
Definition: GoogleChart.hpp:55
std::string xAxis
X axis name.
Definition: GoogleChart.hpp:31
Google chart options.
Definition: GoogleChart.hpp:24