source: src/benchmark/csv-data.c@ 39c5ea3

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors deferred_resn demangler enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr new-env no_list persistent-indexer pthread-emulation qualifiedEnum resolv-new with_gc
Last change on this file since 39c5ea3 was b510ac2, checked in by Thierry Delisle <tdelisle@…>, 8 years ago

Updated the benchmarks to new concurrency syntax

  • Property mode set to 100644
File size: 1.6 KB
Line 
1#include <fstream>
2#include <stdlib>
3#include <thread>
4
5extern "C" {
6#include <unistd.h> // sysconf
7#include <sys/times.h> // times
8#include <time.h>
9}
10
11inline unsigned long long int Time() {
12 timespec ts;
13 clock_gettime(
14#if defined( __linux__ )
15 CLOCK_THREAD_CPUTIME_ID,
16#elif defined( __freebsd__ )
17 CLOCK_PROF,
18#elif defined( __solaris__ )
19 CLOCK_HIGHRES,
20#else
21 #error uC++ : internal error, unsupported architecture
22#endif
23 &ts );
24 return 1000000000LL * ts.tv_sec + ts.tv_nsec;
25} // Time
26
27coroutine GreatSuspender {};
28
29void ?{}( GreatSuspender * this ) {
30 prime(this);
31}
32
33void main( GreatSuspender * this )
34{
35 while( true ) {
36 suspend();
37 }
38}
39
40void resumer( GreatSuspender * this, const unsigned int NoOfTimes ) {
41 for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
42 resume( this );
43 }
44}
45
46#ifndef N
47#define N 100000000
48#endif
49
50
51
52long long int measure_coroutine() {
53 const unsigned int NoOfTimes = N;
54 long long int StartTime, EndTime;
55
56 GreatSuspender s;
57
58 StartTime = Time();
59 // for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
60 // resume( this_coroutine() );
61 // // resume( &s );
62 // }
63 resumer( &s, NoOfTimes );
64 EndTime = Time();
65
66 return ( EndTime - StartTime ) / NoOfTimes;
67}
68
69long long int measure_thread() {
70 const unsigned int NoOfTimes = N;
71 long long int StartTime, EndTime;
72
73 StartTime = Time();
74 for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
75 yield();
76 }
77 EndTime = Time();
78
79 return ( EndTime - StartTime ) / NoOfTimes;
80}
81
82int main()
83{
84 sout | time(NULL) | ',' | measure_coroutine() | ',' | measure_thread() | endl;
85}
Note: See TracBrowser for help on using the repository browser.