int main(void){ // Unoptimized versions diff = getdiff(iter); printf("Unoptimized iter() function call time: \n%0.10f secs\n", diff); diff = getdiff(ptr); printf("Unoptimized ptr() function call time: \n%0.10f secs\n", diff); // Optimized versions of these functinos diff = getdiff(opt_iter); printf("Optimized opt_iter() function call time: \n%0.10f secs\n", diff); diff = getdiff(opt_ptr); printf("Optimized opt_ptr() function call time: \n%0.10f secs\n", diff); return 0; }
gresser(){ function<diffv(const storage::storage_base*)> getdiff(&gresser::get_diff); function<int(const storage::storage_base*, const diffv&, diffv&)> reduce(&gresser::reduce); function<int(storage::storage_base*, const diffv&)> putdiff(&gresser::put_diff); set_mixer(getdiff, reduce, putdiff); }
int main(int argc, char **argv) { timespec ts1, ts2, diff; struct sockaddr_rc addr = { 0 }; int s, status; char dest[18] = "00:06:66:4B:45:7A"; // allocate a socket s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM); // set the connection parameters (who to connect to) addr.rc_family = AF_BLUETOOTH; addr.rc_channel = (uint8_t) 1; str2ba( dest, &addr.rc_bdaddr ); // connect to server status = connect(s, (struct sockaddr *)&addr, sizeof(addr)); if (status == -1) { perror("connect"); return 1; } const size_t measures = 100; size_t outbuf_len; unsigned i; double timearray[measures]; for (i=0; i < measures; i++) { outbuf_len = sprintf(outbuf, "PING %u", i); clock_gettime(CLOCK_REALTIME, &ts1); if (write(s, outbuf, outbuf_len) == -1) { perror("send"); return 1; } size_t accum = 0; do { int stat = read(s, inbuf+accum, outbuf_len-accum); if (stat == -1) { perror("recv fail"); return 1; } accum += stat; } while ( accum < outbuf_len); clock_gettime(CLOCK_REALTIME, &ts2); diff = getdiff(ts1, ts2); double diff_ms = diff.tv_sec*1000 +(double)diff.tv_nsec/1000000; timearray[i] = diff_ms; printf("%.*s diff: %fms\n" , outbuf_len, inbuf, diff_ms); } double avg = 0, variance = 0, stddev = 0; for (int i=0; i<measures; i++) { avg += timearray[i]; } avg /= measures; for (int i=0; i<measures; i++) { double tmp = timearray[i]-avg; variance += tmp*tmp; } variance /= measures; stddev = sqrt(variance); printf("Avg: %.1fms std.dev: %.1fms\n", avg, stddev); close(s); return 0; }