Added quantiling UDAFs
[com/gs-lite.git] / src / tools / qnode.h
index 6e2c7cb..42ac910 100644 (file)
-/* ------------------------------------------------
-Copyright 2014 AT&T Intellectual Property
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
- ------------------------------------------- */
-
-#ifndef __QNODE_H_DEFINED_
-#define __QNODE_H_DEFINED_
-
-#include<string>
-
-struct perf_struct{
-       int n_samples;
-       int init_discard;
-       int init_time;
-       int last_update;
-       unsigned long long int init_stime;
-       unsigned long long int init_utime;
-       unsigned long long int total_stime;
-       unsigned long long int total_utime;
-       double max_stime;
-       double max_utime;
-       double max_time;
-       unsigned long long int max_vm_size;
-       unsigned long long int max_rss;
-
-       void init(){
-               n_samples = 0;
-               init_time = 0;
-               init_stime = 0;
-               init_utime = 0;
-               total_stime = 0;
-               total_utime = 0;
-               max_stime = 0.0;
-               max_utime = 0.0;
-               max_time = 0.0;
-               max_vm_size = 0;
-               max_rss = 0;
-               last_update = -1;
-       }
-
-       perf_struct(){
-               init();
-       }
-       perf_struct(int d){
-               init();
-               init_discard = d;
-       }
-
-       bool update(int t, unsigned long long int u, unsigned long long int s,
-         unsigned long long int v, unsigned long long int r){
-               if(init_discard>0){
-                       init_discard--;
-                       return false;;
-               }
-
-
-               if(v>max_vm_size)
-                       max_vm_size = v;
-               if(r>max_rss)
-                       max_rss = r;
-               if(last_update<0){
-                       init_time = t;
-                       init_stime = s;
-                       init_utime = u;
-               }else{
-                       if(t<=last_update || u<total_utime || s<total_stime){
-                               return true;
-                       }
-
-                       double tmps,tmpu,tmpt;
-                       tmps = (double)((s-total_stime))/(t-last_update);
-                       tmpu = (double)((u-total_utime))/(t-last_update);
-                       tmpt = tmps+tmpu;
-                       if(tmps>max_stime)
-                               max_stime = tmps;
-                       if(tmpu>max_utime)
-                               max_utime = tmpu;
-                       if(tmpt>max_time)
-                               max_time = tmpt;
-               }
-               total_stime = s;
-               total_utime = u;
-               last_update = t;
-
-               return false;
-       }
-
-       std::string to_string(){
-               char ret[1000];
-               if(last_update - init_time>0){
-                       sprintf(ret,"stime=%lf, utime=%lf, time=%lf max_stime=%lf, max_utime=%lf, max_time=%lf, max_vmsize=%lld, max_rss = %lld",
-                         (double)(total_stime-init_stime)/(last_update - init_time),
-                         (double)(total_utime-init_utime)/(last_update - init_time),
-                         (double)(total_stime-init_stime)/(last_update - init_time) + (double)(total_utime-init_utime)/(last_update - init_time),
-                               max_stime,max_utime,max_time,
-                               max_vm_size,max_rss
-                       );
-                       return ret;
-               }
-               return("(no perf results)");
-       }
-
-       static std::string to_csv_hdr(){
-               return "avg_system_time,avg_user_time,avg_cpu_time,max_sys_time,max_user_time,max_total_time,max_vm_size,max_rss";
-       }
-
-       std::string to_csv(){
-               char ret[1000];
-               if(last_update - init_time>0){
-                       sprintf(ret,"%lf,%lf,%lf,%lf,%lf,%lf,%lld,%lld",
-                         (double)(total_stime-init_stime)/(last_update - init_time),
-                         (double)(total_utime-init_utime)/(last_update - init_time),
-                         (double)(total_stime-init_stime)/(last_update - init_time) + (double)(total_utime-init_utime)/(last_update - init_time),
-                               max_stime,max_utime,max_time,
-                               max_vm_size,max_rss
-                       );
-                       return ret;
-               }
-               return(",,,,,,");
-       }
-
-       double avg_cpu_time(){
-               return ((double)((total_stime-init_stime)+(total_utime-init_utime))/(last_update - init_time))/100.0;
-       }
-
-       bool is_valid(){
-               return last_update > 0;
-       }
-};
-
-
-
-
-struct field_str{
-       std::string name;
-       int pos;
-       std::string type;
-       std::string mods;
-
-       field_str(){};
-       field_str(std::string n, int p, std::string t, std::string m){
-               name=n;
-               pos=p;
-               type=t;
-               mods=m;
-       }
-};
-
-
-struct qnode{
-       std::string name;
-       std::string executable_name;
-       std::string qnode_type;
-       int aggr_tbl_size;
-       std::vector<field_str *> fields;
-       std::vector<std::string> reads_from;
-       std::vector<int> reads_from_idx;
-       std::vector<int> sources_to_idx;
-       std::string src_interface;
-       int par_index;
-       int start_tick, end_tick;
-
-       unsigned long long int in_tup,out_tup,out_sz;
-       unsigned long long int accepted_tup,cycles,collisions,evictions;
-       double inferred_in_sz;
-       perf_struct *perf;
-
-       qnode(int d){
-               aggr_tbl_size = 0;
-               in_tup = 0;
-               out_tup = 0;
-               accepted_tup = 0;
-               cycles = 0;
-               collisions = 0;
-               evictions = 0;
-               inferred_in_sz = 0.0;
-               par_index = 0;
-               start_tick = end_tick = -1;
-               perf = new perf_struct(d);
-       };
-
-       qnode(std::string type, std::string n,int d){
-               qnode_type=type;
-               name=n;
-               aggr_tbl_size = 0;
-
-               in_tup = 0;
-               out_tup = 0;
-               out_sz = 0;
-               accepted_tup = 0;
-               cycles = 0;
-               collisions = 0;
-               evictions = 0;
-               inferred_in_sz = 0.0;
-               par_index = 0;
-               start_tick = end_tick = -1;
-               perf = new perf_struct(d);
-       }
-
-       double output_rate(){
-               if(end_tick == start_tick){
-                       return 0.0;
-               }
-               return( ((double)out_sz)/(end_tick-start_tick) );
-       }
-
-       void add_field(field_str *fld){
-               fields.push_back(fld);
-       }
-
-       void add_source(std::string src){
-               reads_from.push_back(src);
-       }
-
-};
-
-
-
-
-
-#endif
+/* ------------------------------------------------\r
+Copyright 2014 AT&T Intellectual Property\r
+   Licensed under the Apache License, Version 2.0 (the "License");\r
+   you may not use this file except in compliance with the License.\r
+   You may obtain a copy of the License at\r
+\r
+     http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+   Unless required by applicable law or agreed to in writing, software\r
+   distributed under the License is distributed on an "AS IS" BASIS,\r
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+   See the License for the specific language governing permissions and\r
+   limitations under the License.\r
+ ------------------------------------------- */\r
+\r
+#ifndef __QNODE_H_DEFINED_\r
+#define __QNODE_H_DEFINED_\r
+\r
+#include<string>\r
+\r
+struct perf_struct{\r
+       int n_samples;\r
+       int init_discard;\r
+       int init_time;\r
+       int last_update;\r
+       unsigned long long int init_stime;\r
+       unsigned long long int init_utime;\r
+       unsigned long long int total_stime;\r
+       unsigned long long int total_utime;\r
+       double max_stime;\r
+       double max_utime;\r
+       double max_time;\r
+       unsigned long long int max_vm_size;\r
+       unsigned long long int max_rss;\r
+\r
+       void init(){\r
+               n_samples = 0;\r
+               init_time = 0;\r
+               init_stime = 0;\r
+               init_utime = 0;\r
+               total_stime = 0;\r
+               total_utime = 0;\r
+               max_stime = 0.0;\r
+               max_utime = 0.0;\r
+               max_time = 0.0;\r
+               max_vm_size = 0;\r
+               max_rss = 0;\r
+               last_update = -1;\r
+       }\r
+\r
+       perf_struct(){\r
+               init();\r
+       }\r
+       perf_struct(int d){\r
+               init();\r
+               init_discard = d;\r
+       }\r
+\r
+       bool update(int t, unsigned long long int u, unsigned long long int s,\r
+         unsigned long long int v, unsigned long long int r){\r
+               if(init_discard>0){\r
+                       init_discard--;\r
+                       return false;;\r
+               }\r
+\r
+\r
+               if(v>max_vm_size)\r
+                       max_vm_size = v;\r
+               if(r>max_rss)\r
+                       max_rss = r;\r
+               if(last_update<0){\r
+                       init_time = t;\r
+                       init_stime = s;\r
+                       init_utime = u;\r
+               }else{\r
+                       if(t<=last_update || u<total_utime || s<total_stime){\r
+                               return true;\r
+                       }\r
+\r
+                       double tmps,tmpu,tmpt;\r
+                       tmps = (double)((s-total_stime))/(t-last_update);\r
+                       tmpu = (double)((u-total_utime))/(t-last_update);\r
+                       tmpt = tmps+tmpu;\r
+                       if(tmps>max_stime)\r
+                               max_stime = tmps;\r
+                       if(tmpu>max_utime)\r
+                               max_utime = tmpu;\r
+                       if(tmpt>max_time)\r
+                               max_time = tmpt;\r
+               }\r
+               total_stime = s;\r
+               total_utime = u;\r
+               last_update = t;\r
+\r
+               return false;\r
+       }\r
+\r
+       std::string to_string(){\r
+               char ret[1000];\r
+               if(last_update - init_time>0){\r
+                       sprintf(ret,"stime=%lf, utime=%lf, time=%lf max_stime=%lf, max_utime=%lf, max_time=%lf, max_vmsize=%lld, max_rss = %lld",\r
+                         (double)(total_stime-init_stime)/(last_update - init_time),\r
+                         (double)(total_utime-init_utime)/(last_update - init_time),\r
+                         (double)(total_stime-init_stime)/(last_update - init_time) + (double)(total_utime-init_utime)/(last_update - init_time),\r
+                               max_stime,max_utime,max_time,\r
+                               max_vm_size,max_rss\r
+                       );\r
+                       return ret;\r
+               }\r
+               return("(no perf results)");\r
+       }\r
+\r
+       static std::string to_csv_hdr(){\r
+               return "avg_system_time,avg_user_time,avg_cpu_time,max_sys_time,max_user_time,max_total_time,max_vm_size,max_rss";\r
+       }\r
+\r
+       std::string to_csv(){\r
+               char ret[1000];\r
+               if(last_update - init_time>0){\r
+                       sprintf(ret,"%lf,%lf,%lf,%lf,%lf,%lf,%lld,%lld",\r
+                         (double)(total_stime-init_stime)/(last_update - init_time),\r
+                         (double)(total_utime-init_utime)/(last_update - init_time),\r
+                         (double)(total_stime-init_stime)/(last_update - init_time) + (double)(total_utime-init_utime)/(last_update - init_time),\r
+                               max_stime,max_utime,max_time,\r
+                               max_vm_size,max_rss\r
+                       );\r
+                       return ret;\r
+               }\r
+               return(",,,,,,");\r
+       }\r
+\r
+       double avg_cpu_time(){\r
+               return ((double)((total_stime-init_stime)+(total_utime-init_utime))/(last_update - init_time))/100.0;\r
+       }\r
+\r
+       bool is_valid(){\r
+               return last_update > 0;\r
+       }\r
+};\r
+\r
+\r
+\r
+\r
+struct field_str{\r
+       std::string name;\r
+       int pos;\r
+       std::string type;\r
+       std::string mods;\r
+\r
+       field_str(){};\r
+       field_str(std::string n, int p, std::string t, std::string m){\r
+               name=n;\r
+               pos=p;\r
+               type=t;\r
+               mods=m;\r
+       }\r
+};\r
+\r
+\r
+struct qnode{\r
+       std::string name;\r
+       std::string executable_name;\r
+       std::string qnode_type;\r
+       int aggr_tbl_size;\r
+       std::vector<field_str *> fields;\r
+       std::vector<std::string> reads_from;\r
+       std::vector<int> reads_from_idx;\r
+       std::vector<int> sources_to_idx;\r
+       std::string src_interface;\r
+       int par_index;\r
+       int start_tick, end_tick;\r
+\r
+       unsigned long long int in_tup,out_tup,out_sz;\r
+       unsigned long long int accepted_tup,cycles,collisions,evictions;\r
+       double inferred_in_sz;\r
+       perf_struct *perf;\r
+\r
+       qnode(int d){\r
+               aggr_tbl_size = 0;\r
+               in_tup = 0;\r
+               out_tup = 0;\r
+               accepted_tup = 0;\r
+               cycles = 0;\r
+               collisions = 0;\r
+               evictions = 0;\r
+               inferred_in_sz = 0.0;\r
+               par_index = 0;\r
+               start_tick = end_tick = -1;\r
+               perf = new perf_struct(d);\r
+       };\r
+\r
+       qnode(std::string type, std::string n,int d){\r
+               qnode_type=type;\r
+               name=n;\r
+               aggr_tbl_size = 0;\r
+\r
+               in_tup = 0;\r
+               out_tup = 0;\r
+               out_sz = 0;\r
+               accepted_tup = 0;\r
+               cycles = 0;\r
+               collisions = 0;\r
+               evictions = 0;\r
+               inferred_in_sz = 0.0;\r
+               par_index = 0;\r
+               start_tick = end_tick = -1;\r
+               perf = new perf_struct(d);\r
+       }\r
+\r
+       double output_rate(){\r
+               if(end_tick == start_tick){\r
+                       return 0.0;\r
+               }\r
+               return( ((double)out_sz)/(end_tick-start_tick) );\r
+       }\r
+\r
+       void add_field(field_str *fld){\r
+               fields.push_back(fld);\r
+       }\r
+\r
+       void add_source(std::string src){\r
+               reads_from.push_back(src);\r
+       }\r
+\r
+};\r
+\r
+\r
+\r
+\r
+\r
+#endif\r