- Timestamp:
- Jan 7, 2021, 2:55:57 PM (5 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 58fe85a
- Parents:
- bdfc032 (diff), 44e37ef (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- benchmark
- Files:
-
- 39 added
- 1 deleted
- 12 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
benchmark/Makefile.am
rbdfc032 reef8dfb 11 11 ## Created On : Sun May 31 09:08:15 2015 12 12 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Sat Jan 25 09:20:44202014 ## Update Count : 25 513 ## Last Modified On : Tue Mar 10 11:41:18 2020 14 ## Update Count : 258 15 15 ############################################################################### 16 16 … … 19 19 20 20 # applies to both programs 21 include $(top_srcdir)/ src/cfa.make21 include $(top_srcdir)/tools/build/cfa.make 22 22 23 23 AM_CFLAGS = -O2 -Wall -Wextra -I$(srcdir) -lrt -pthread # -Werror … … 30 30 BENCH_V_UPP = $(__bench_v_UPP_$(__quiet)) 31 31 BENCH_V_GOC = $(__bench_v_GOC_$(__quiet)) 32 BENCH_V_PY = $(__bench_v_PY_$(__quiet)) 32 33 BENCH_V_RUSTC = $(__bench_v_RUSTC_$(__quiet)) 33 34 BENCH_V_NODEJS = $(__bench_v_NODEJS_$(__quiet)) … … 47 48 __bench_v_UPP_verbose = $(AM_V_UPP) 48 49 __bench_v_GOC_verbose = $(AM_V_GOC) 49 __bench_v_RUSTC_verbose = $(AM_V_RUSTC) 50 __bench_v_PY_verbose = $(AM_V_PY) 51 __bench_v_RUSTC_verbose = $(AM_V_RUST) 50 52 __bench_v_NODEJS_verbose = $(AM_V_NODEJS) 51 53 __bench_v_JAVAC_verbose = $(AM_V_JAVAC) … … 64 66 # Dummy hack tricks 65 67 EXTRA_PROGRAMS = dummy # build but do not install 66 dummy_SOURCES = dummyC.c dummyCXX.cpp68 nodist_dummy_SOURCES = dummyC.c dummyCXX.cpp 67 69 68 70 dummyC.c: … … 72 74 echo "int main() { return 0; }" > ${@} 73 75 74 #.SILENT: # do not print recipe 75 .ONESHELL: # use one shell to execute recipe 76 .SILENT: # do not print recipe 76 77 .NOTPARALLEL: 77 .PHONY: compile.csv basic.csv ctxswitch.csv mutex.csv schedint.csv 78 79 ## ========================================================================================================= 80 81 all : basic$(EXEEXT) ctxswitch$(EXEEXT) mutex$(EXEEXT) schedint$(EXEEXT) schedext$(EXEEXT) creation$(EXEEXT) 78 .PHONY: jenkins cleancsv 79 80 ## ========================================================================================================= 81 82 # all is used by make dist so ignore it 83 all: 84 85 all-bench : basic$(EXEEXT) ctxswitch$(EXEEXT) mutex$(EXEEXT) schedint$(EXEEXT) schedext$(EXEEXT) creation$(EXEEXT) 82 86 83 87 basic_loop_DURATION = 15000000000 … … 107 111 creation_cfa_coroutine_DURATION = 100000000 108 112 creation_cfa_coroutine_eager_DURATION = 10000000 113 creation_cfa_generator_DURATION = 1000000000 109 114 creation_upp_coroutine_DURATION = ${creation_cfa_coroutine_eager_DURATION} 110 creation_cfa_thread_DURATION = 10000000111 creation_upp_thread_DURATION = ${creation_cfa_thread_DURATION}112 115 creation_DURATION = 10000000 113 116 … … 142 145 FIX_NEW_LINES = cat $@ | tr "\n" "\t" | sed -r 's/\t,/,/' | tr "\t" "\n" > $@ 143 146 144 jenkins$(EXEEXT): 147 cleancsv: 148 rm -f compile.csv basic.csv ctxswitch.csv mutex.csv schedint.csv 149 150 jenkins$(EXEEXT): cleancsv 145 151 @DOifskipcompile@ 146 152 +make compile.csv 147 153 -+make compile.diff.csv 148 154 @DOendif@ 149 +make basic.csv150 -+make basic.diff.csv151 155 +make ctxswitch.csv 152 156 -+make ctxswitch.diff.csv … … 159 163 -cat compile.diff.csv 160 164 @DOendif@ 161 cat basic.csv162 -cat basic.diff.csv163 165 cat ctxswitch.csv 164 166 -cat ctxswitch.diff.csv … … 169 171 170 172 compile.csv: 173 echo "building $@" 171 174 echo "array,attributes,empty,expression,io,monitor,operators,typeof" > $@ 172 175 +make TIME_FORMAT='%e,' PRINT_FORMAT='' compile-array.make >> $@ … … 180 183 $(srcdir)/fixcsv.sh $@ 181 184 182 basic.csv:183 echo "generator,coroutine,thread" > $@184 +make basic-cfa_generator.runquiet >> $@ && echo -n ',' >> $@185 +make basic-cfa_coroutine.runquiet >> $@ && echo -n ',' >> $@186 +make basic-cfa_thread.runquiet >> $@187 $(srcdir)/fixcsv.sh $@188 189 185 ctxswitch.csv: 186 echo "building $@" 190 187 echo "generator,coroutine,thread" > $@ 191 188 +make ctxswitch-cfa_generator.runquiet >> $@ && echo -n ',' >> $@ … … 195 192 196 193 mutex.csv: 194 echo "building $@" 197 195 echo "1-monitor,2-monitor" > $@ 198 196 +make mutex-cfa1.runquiet >> $@ && echo -n ',' >> $@ … … 201 199 202 200 schedint.csv: 201 echo "building $@" 203 202 echo "schedint-1,schedint-2,schedext-1,schedext-2" > $@ 204 203 +make schedint-cfa1.runquiet >> $@ && echo -n ',' >> $@ … … 289 288 290 289 ctxswitch-python_coroutine$(EXEEXT): 291 echo "#!/bin/sh" > a.out292 echo "python3 .7 $(srcdir)/ctxswitch/python_cor.py" >> a.out290 $(BENCH_V_PY)echo "#!/bin/sh" > a.out 291 echo "python3 $(srcdir)/ctxswitch/python_cor.py \"$$""@\"" >> a.out 293 292 chmod a+x a.out 294 293 295 294 ctxswitch-nodejs_coroutine$(EXEEXT): 296 echo "#!/bin/sh" > a.out297 echo "nodejs $(srcdir)/ctxswitch/node_cor.js " >> a.out295 $(BENCH_V_NODEJS)echo "#!/bin/sh" > a.out 296 echo "nodejs $(srcdir)/ctxswitch/node_cor.js \"$$""@\"" >> a.out 298 297 chmod a+x a.out 299 298 300 299 ctxswitch-nodejs_await$(EXEEXT): 301 echo "#!/bin/sh" > a.out302 echo "nodejs $(srcdir)/ctxswitch/node_await.js " >> a.out300 $(BENCH_V_NODEJS)echo "#!/bin/sh" > a.out 301 echo "nodejs $(srcdir)/ctxswitch/node_await.js \"$$""@\"" >> a.out 303 302 chmod a+x a.out 304 303 … … 312 311 $(BENCH_V_JAVAC)javac -d $(builddir) $(srcdir)/ctxswitch/JavaThread.java 313 312 echo "#!/bin/sh" > a.out 314 echo "java JavaThread " >> a.out313 echo "java JavaThread \"$$""@\"" >> a.out 315 314 chmod a+x a.out 316 315 … … 354 353 $(BENCH_V_JAVAC)javac -d $(builddir) $(srcdir)/mutex/JavaThread.java 355 354 echo "#!/bin/sh" > a.out 356 echo "java JavaThread " >> a.out355 echo "java JavaThread \"$$""@\"" >> a.out 357 356 chmod a+x a.out 358 357 … … 386 385 $(BENCH_V_JAVAC)javac -d $(builddir) $(srcdir)/schedint/JavaThread.java 387 386 echo "#!/bin/sh" > a.out 388 echo "java JavaThread " >> a.out387 echo "java JavaThread \"$$""@\"" >> a.out 389 388 chmod a+x a.out 390 389 … … 452 451 453 452 creation-python_coroutine$(EXEEXT): 454 echo "#!/bin/sh" > a.out455 echo "python3 .7 $(srcdir)/creation/python_cor.py" >> a.out453 $(BENCH_V_PY)echo "#!/bin/sh" > a.out 454 echo "python3 $(srcdir)/creation/python_cor.py \"$$""@\"" >> a.out 456 455 chmod a+x a.out 457 456 458 457 creation-nodejs_coroutine$(EXEEXT): 459 echo "#!/bin/sh" > a.out460 echo "nodejs $(srcdir)/creation/node_cor.js " >> a.out458 $(BENCH_V_NODEJS)echo "#!/bin/sh" > a.out 459 echo "nodejs $(srcdir)/creation/node_cor.js \"$$""@\"" >> a.out 461 460 chmod a+x a.out 462 461 … … 470 469 $(BENCH_V_JAVAC)javac -d $(builddir) $(srcdir)/creation/JavaThread.java 471 470 echo "#!/bin/sh" > a.out 472 echo "java JavaThread " >> a.out471 echo "java JavaThread \"$$""@\"" >> a.out 473 472 chmod a+x a.out 474 473 … … 478 477 ## ========================================================================================================= 479 478 480 compile$(EXEEXT) : \479 bcompile$(EXEEXT) : \ 481 480 compile-array.make \ 482 481 compile-attributes.make \ … … 491 490 492 491 compile-array$(EXEEXT): 493 $(CFACOMPILE) - fsyntax-only -w $(testdir)/array.cfa492 $(CFACOMPILE) -DNO_COMPILED_PRAGMA -fsyntax-only -w $(testdir)/array.cfa 494 493 495 494 compile-attributes$(EXEEXT): 496 $(CFACOMPILE) - fsyntax-only -w $(testdir)/attributes.cfa495 $(CFACOMPILE) -DNO_COMPILED_PRAGMA -fsyntax-only -w $(testdir)/attributes.cfa 497 496 498 497 compile-empty$(EXEEXT): 499 $(CFACOMPILE) - fsyntax-only -w $(srcdir)/compile/empty.cfa498 $(CFACOMPILE) -DNO_COMPILED_PRAGMA -fsyntax-only -w $(srcdir)/compile/empty.cfa 500 499 501 500 compile-expression$(EXEEXT): 502 $(CFACOMPILE) - fsyntax-only -w $(testdir)/expression.cfa501 $(CFACOMPILE) -DNO_COMPILED_PRAGMA -fsyntax-only -w $(testdir)/expression.cfa 503 502 504 503 compile-io$(EXEEXT): 505 $(CFACOMPILE) - fsyntax-only -w $(testdir)/io1.cfa504 $(CFACOMPILE) -DNO_COMPILED_PRAGMA -fsyntax-only -w $(testdir)/io1.cfa 506 505 507 506 compile-monitor$(EXEEXT): 508 $(CFACOMPILE) - fsyntax-only -w $(testdir)/concurrent/monitor.cfa507 $(CFACOMPILE) -DNO_COMPILED_PRAGMA -fsyntax-only -w $(testdir)/concurrent/monitor.cfa 509 508 510 509 compile-operators$(EXEEXT): 511 $(CFACOMPILE) - fsyntax-only -w $(testdir)/operators.cfa510 $(CFACOMPILE) -DNO_COMPILED_PRAGMA -fsyntax-only -w $(testdir)/operators.cfa 512 511 513 512 compile-thread$(EXEEXT): 514 $(CFACOMPILE) - fsyntax-only -w $(testdir)/concurrent/thread.cfa513 $(CFACOMPILE) -DNO_COMPILED_PRAGMA -fsyntax-only -w $(testdir)/concurrent/thread.cfa 515 514 516 515 compile-typeof$(EXEEXT): 517 $(CFACOMPILE) -fsyntax-only -w $(testdir)/typeof.cfa 516 $(CFACOMPILE) -DNO_COMPILED_PRAGMA -fsyntax-only -w $(testdir)/typeof.cfa 517 518 ## ========================================================================================================= 519 520 size$(EXEEXT) : size-cfa.runquiet 521 522 size-cfa$(EXEEXT): 523 $(BENCH_V_CFA)$(CFACOMPILE) $(srcdir)/size/size.cfa 524 525 ## ========================================================================================================= 526 527 %-tokio$(EXEEXT): $(srcdir)/readyQ/%.rs $(srcdir)/bench.rs 528 cd $(builddir) && cargo build --release 529 cp $(builddir)/target/release/$(basename $@) $@ -
benchmark/baselines/x64/schedint.csv
rbdfc032 reef8dfb 1 waitfor-2,signal-1,signal-2,waitfor-11 schedext-2,schedint-1,schedint-2,schedext-1 2 2 393.69606249999987,325.99158333333327,409.01025000000004,319.90975000000003 -
benchmark/baselines/x86/schedint.csv
rbdfc032 reef8dfb 1 s ignal-2,waitfor-1,waitfor-2,signal-11 schedint-2,schedext-1,schedext-2,schedint-1 2 2 532.5297959183672,413.3084897959184,506.7579591836735,423.78826530612247 -
benchmark/creation/JavaThread.java
rbdfc032 reef8dfb 1 1 public class JavaThread { 2 2 // Simplistic low-quality Marsaglia Shift-XOR pseudo-random number generator. 3 // Bijective 3 // Bijective 4 4 // Cycle length for non-zero values is 4G-1. 5 5 // 0 is absorbing and should be avoided -- fixed point. 6 6 // The returned value is typically masked to produce a positive value. 7 static volatile int Ticket = 0 ; 7 static volatile int Ticket = 0 ; 8 8 9 9 private static int nextRandom (int x) { 10 if (x == 0) { 10 if (x == 0) { 11 11 // reseed the PRNG 12 // Ticket is accessed infrequently and does not constitute a coherence hot-spot. 13 // Note that we use a non-atomic racy increment -- the race is rare and benign. 14 // If the race is a concern switch to an AtomicInteger. 15 // In addition accesses to the RW volatile global "Ticket" variable are not 16 // (readily) predictable at compile-time so the JIT will not be able to elide 17 // nextRandom() invocations. 18 x = ++Ticket ; 19 if (x == 0) x = 1 ; 12 // Ticket is accessed infrequently and does not constitute a coherence hot-spot. 13 // Note that we use a non-atomic racy increment -- the race is rare and benign. 14 // If the race is a concern switch to an AtomicInteger. 15 // In addition accesses to the RW volatile global "Ticket" variable are not 16 // (readily) predictable at compile-time so the JIT will not be able to elide 17 // nextRandom() invocations. 18 x = ++Ticket ; 19 if (x == 0) x = 1 ; 20 20 } 21 21 x ^= x << 6; 22 22 x ^= x >>> 21; 23 23 x ^= x << 7; 24 return x ; 24 return x ; 25 25 } 26 26 static int x = 2; 27 27 28 static private int times = Integer.parseInt("10000") ;28 static private long times = Long.parseLong("10000") ; 29 29 30 30 public static class MyThread extends Thread { … … 33 33 } 34 34 public static void helper() throws InterruptedException { 35 for( inti = 1; i <= times; i += 1) {35 for(long i = 1; i <= times; i += 1) { 36 36 MyThread m = new MyThread(); 37 37 x = nextRandom( x ); … … 47 47 } 48 48 public static void main(String[] args) throws InterruptedException { 49 if ( args.length > 2) System.exit( 1 );50 if ( args.length == 2 ) { times = Integer.parseInt(args[1]); }49 if ( args.length > 1 ) System.exit( 1 ); 50 if ( args.length == 1 ) { times = Long.parseLong(args[0]); } 51 51 52 for (int i = Integer.parseInt("5"); --i >= 0 ; ) { 52 for (int i = Integer.parseInt("5"); --i >= 0 ; ) { 53 53 InnerMain(); 54 54 Thread.sleep(2000); // 2 seconds -
benchmark/creation/cfa_gen.cfa
rbdfc032 reef8dfb 1 #include " bench.h"1 #include "../bench.h" 2 2 3 struct C{3 generator G { 4 4 volatile int restart; // ensure compiler does not optimize away all the code 5 5 }; 6 void ?{}( C & c ) { c.restart = 0; }7 void main( C& ) {}6 void ?{}( G & g ) { g.restart = 0; } 7 void main( G & ) {} 8 8 9 9 int main( int argc, char * argv[] ) { … … 11 11 BENCH( 12 12 for ( times ) { 13 C c;13 G g; 14 14 }, 15 15 result -
benchmark/creation/node_cor.js
rbdfc032 reef8dfb 5 5 6 6 function * coroutine() { yield } 7 8 for ( var i = 0; i < times; i += 1 ) { // warm jit 9 cor = coroutine() 10 } 11 7 12 var hrstart = process.hrtime() 8 13 for ( var i = 0; i < times; i += 1 ) { -
benchmark/ctxswitch/JavaThread.java
rbdfc032 reef8dfb 1 1 public class JavaThread { 2 2 // Simplistic low-quality Marsaglia Shift-XOR pseudo-random number generator. 3 // Bijective 3 // Bijective 4 4 // Cycle length for non-zero values is 4G-1. 5 5 // 0 is absorbing and should be avoided -- fixed point. 6 6 // The returned value is typically masked to produce a positive value. 7 static volatile int Ticket = 0 ; 7 static volatile int Ticket = 0 ; 8 8 9 9 private static int nextRandom (int x) { 10 if (x == 0) { 10 if (x == 0) { 11 11 // reseed the PRNG 12 // Ticket is accessed infrequently and does not constitute a coherence hot-spot. 13 // Note that we use a non-atomic racy increment -- the race is rare and benign. 14 // If the race is a concern switch to an AtomicInteger. 15 // In addition accesses to the RW volatile global "Ticket" variable are not 16 // (readily) predictable at compile-time so the JIT will not be able to elide 17 // nextRandom() invocations. 18 x = ++Ticket ; 19 if (x == 0) x = 1 ; 12 // Ticket is accessed infrequently and does not constitute a coherence hot-spot. 13 // Note that we use a non-atomic racy increment -- the race is rare and benign. 14 // If the race is a concern switch to an AtomicInteger. 15 // In addition accesses to the RW volatile global "Ticket" variable are not 16 // (readily) predictable at compile-time so the JIT will not be able to elide 17 // nextRandom() invocations. 18 x = ++Ticket ; 19 if (x == 0) x = 1 ; 20 20 } 21 21 x ^= x << 6; 22 22 x ^= x >>> 21; 23 23 x ^= x << 7; 24 return x ; 24 return x ; 25 25 } 26 26 static int x = 2; 27 27 28 static private int times = Integer.parseInt("100000");28 static private long times = Long.parseLong("100000"); 29 29 30 30 public static void helper() { 31 for( inti = 1; i <= times; i += 1) {31 for(long i = 1; i <= times; i += 1) { 32 32 Thread.yield(); 33 33 } … … 40 40 } 41 41 public static void main(String[] args) throws InterruptedException { 42 if ( args.length > 2) System.exit( 1 );43 if ( args.length == 2 ) { times = Integer.parseInt(args[1]); }42 if ( args.length > 1 ) System.exit( 1 ); 43 if ( args.length == 1 ) { times = Long.parseLong(args[0]); } 44 44 45 45 for (int i = Integer.parseInt("5"); --i >= 0 ; ) { -
benchmark/ctxswitch/cfa_cor.cfa
rbdfc032 reef8dfb 2 2 #include <thread.hfa> 3 3 4 #include " bench.h"4 #include "../bench.h" 5 5 6 coroutine C {} c;6 coroutine C {}; 7 7 void main( __attribute__((unused)) C & ) { 8 while() {9 suspend ();8 for () { 9 suspend; 10 10 } 11 11 } 12 12 int main( int argc, char * argv[] ) { 13 C c; 13 14 BENCH_START() 14 15 BENCH( -
benchmark/ctxswitch/cfa_gen.cfa
rbdfc032 reef8dfb 1 1 #include "../bench.h" 2 2 3 typedef struct { 4 void * next; 5 } C; 6 7 void comain( C * c ) { 8 if ( __builtin_expect(c->next != 0, 1) ) goto *(c->next); 9 c->next = &&s1; 3 generator G {}; 4 void main( G & ) { 10 5 for () { 11 return; 12 s1: ; 6 suspend; 13 7 } 14 8 } 15 9 16 10 int main( int argc, char * argv[] ) { 11 G g; 17 12 BENCH_START() 18 C c = { 0 };19 13 BENCH( 20 14 for ( times ) { 21 comain( &c);15 resume( g ); 22 16 }, 23 17 result -
benchmark/ctxswitch/node_cor.js
rbdfc032 reef8dfb 10 10 } 11 11 cor = coroutine() 12 13 for ( var i = 0; i < times; i += 1 ) { // warm git 14 cor.next(); 15 } 12 16 13 17 var hrstart = process.hrtime() -
benchmark/exclude
rbdfc032 reef8dfb 10 10 interrupt_linux.c 11 11 exclude 12 io 12 13 Monitor.c -
benchmark/mutex/JavaThread.java
rbdfc032 reef8dfb 1 1 public class JavaThread { 2 2 // Simplistic low-quality Marsaglia Shift-XOR pseudo-random number generator. 3 // Bijective 3 // Bijective 4 4 // Cycle length for non-zero values is 4G-1. 5 5 // 0 is absorbing and should be avoided -- fixed point. 6 6 // The returned value is typically masked to produce a positive value. 7 static volatile int Ticket = 0 ; 7 static volatile int Ticket = 0 ; 8 8 9 9 private static int nextRandom (int x) { 10 if (x == 0) { 10 if (x == 0) { 11 11 // reseed the PRNG 12 // Ticket is accessed infrequently and does not constitute a coherence hot-spot. 13 // Note that we use a non-atomic racy increment -- the race is rare and benign. 14 // If the race is a concern switch to an AtomicInteger. 15 // In addition accesses to the RW volatile global "Ticket" variable are not 16 // (readily) predictable at compile-time so the JIT will not be able to elide 17 // nextRandom() invocations. 18 x = ++Ticket ; 19 if (x == 0) x = 1 ; 12 // Ticket is accessed infrequently and does not constitute a coherence hot-spot. 13 // Note that we use a non-atomic racy increment -- the race is rare and benign. 14 // If the race is a concern switch to an AtomicInteger. 15 // In addition accesses to the RW volatile global "Ticket" variable are not 16 // (readily) predictable at compile-time so the JIT will not be able to elide 17 // nextRandom() invocations. 18 x = ++Ticket ; 19 if (x == 0) x = 1 ; 20 20 } 21 21 x ^= x << 6; 22 22 x ^= x >>> 21; 23 23 x ^= x << 7; 24 return x ; 24 return x ; 25 25 } 26 26 static int x = 2; 27 27 28 static private int times = Integer.parseInt("100000000");28 static private long times = Long.parseLong("100000000"); 29 29 30 30 public synchronized void noop() { … … 34 34 JavaThread j = new JavaThread(); 35 35 // Inhibit biased locking ... 36 x = (j.hashCode() ^ System.identityHashCode(j)) | 1 ; 37 for( inti = 1; i <= times; i += 1) {36 x = (j.hashCode() ^ System.identityHashCode(j)) | 1 ; 37 for(long i = 1; i <= times; i += 1) { 38 38 x = nextRandom(x); 39 39 j.noop(); … … 47 47 } 48 48 public static void main(String[] args) throws InterruptedException { 49 if ( args.length > 2) System.exit( 1 );50 if ( args.length == 2 ) { times = Integer.parseInt(args[1]); }49 if ( args.length > 1 ) System.exit( 1 ); 50 if ( args.length == 1 ) { times = Long.parseLong(args[0]); } 51 51 52 for (int n = Integer.parseInt("5"); --n >= 0 ; ) { 52 for (int n = Integer.parseInt("5"); --n >= 0 ; ) { 53 53 InnerMain(); 54 54 Thread.sleep(2000); // 2 seconds -
benchmark/mutexC/JavaThread.java
rbdfc032 reef8dfb 1 1 class Noop { 2 2 // Simplistic low-quality Marsaglia Shift-XOR pseudo-random number generator. 3 // Bijective 3 // Bijective 4 4 // Cycle length for non-zero values is 4G-1. 5 5 // 0 is absorbing and should be avoided -- fixed point. 6 6 // The returned value is typically masked to produce a positive value. 7 static volatile int Ticket = 0 ; 7 static volatile int Ticket = 0 ; 8 8 9 9 public static int nextRandom( int x ) { 10 if (x == 0) { 10 if (x == 0) { 11 11 // reseed the PRNG 12 // Ticket is accessed infrequently and does not constitute a coherence hot-spot. 13 // Note that we use a non-atomic racy increment -- the race is rare and benign. 14 // If the race is a concern switch to an AtomicInteger. 15 // In addition accesses to the RW volatile global "Ticket" variable are not 16 // (readily) predictable at compile-time so the JIT will not be able to elide 17 // nextRandom() invocations. 18 x = ++Ticket ; 19 if (x == 0) x = 1 ; 12 // Ticket is accessed infrequently and does not constitute a coherence hot-spot. 13 // Note that we use a non-atomic racy increment -- the race is rare and benign. 14 // If the race is a concern switch to an AtomicInteger. 15 // In addition accesses to the RW volatile global "Ticket" variable are not 16 // (readily) predictable at compile-time so the JIT will not be able to elide 17 // nextRandom() invocations. 18 x = ++Ticket ; 19 if (x == 0) x = 1 ; 20 20 } 21 21 x ^= x << 6; 22 22 x ^= x >>> 21; 23 23 x ^= x << 7; 24 return x ; 24 return x ; 25 25 } 26 26 } … … 47 47 static int x = 2; 48 48 49 static private int times = Integer.parseInt("10000000");49 static private long times = Long.parseLong("10000000"); 50 50 51 51 public static void call( Monitor m ) throws InterruptedException { … … 53 53 m.go = true; 54 54 //while ( ! m.go2 ); 55 for ( inti = 0; i < times; i += 1 ) {55 for ( long i = 0; i < times; i += 1 ) { 56 56 m.call(); 57 57 x = Noop.nextRandom( x ); … … 71 71 public static void main( String[] args ) throws InterruptedException { 72 72 if ( args.length > 2 ) System.exit( 1 ); 73 if ( args.length == 2 ) { times = Integer.parseInt(args[1]); }73 if ( args.length == 2 ) { times = Long.parseLong(args[1]); } 74 74 75 if ( args.length > 2 ) System.exit( 1 ); 76 if ( args.length == 2 ) { times = Integer.parseInt(args[1]); } 77 78 for ( int i = Integer.parseInt("5"); --i >= 0 ; ) { 75 for ( int i = Integer.parseInt("5"); --i >= 0 ; ) { 79 76 InnerMain(); 80 77 // Thread.sleep(2000); // 2 seconds -
benchmark/schedint/JavaThread.java
rbdfc032 reef8dfb 24 24 public class JavaThread { 25 25 // Simplistic low-quality Marsaglia Shift-XOR pseudo-random number generator. 26 // Bijective 26 // Bijective 27 27 // Cycle length for non-zero values is 4G-1. 28 28 // 0 is absorbing and should be avoided -- fixed point. 29 29 // The returned value is typically masked to produce a positive value. 30 static volatile int Ticket = 0 ; 30 static volatile int Ticket = 0 ; 31 31 32 32 private static int nextRandom (int x) { 33 if (x == 0) { 33 if (x == 0) { 34 34 // reseed the PRNG 35 // Ticket is accessed infrequently and does not constitute a coherence hot-spot. 36 // Note that we use a non-atomic racy increment -- the race is rare and benign. 37 // If the race is a concern switch to an AtomicInteger. 38 // In addition accesses to the RW volatile global "Ticket" variable are not 39 // (readily) predictable at compile-time so the JIT will not be able to elide 40 // nextRandom() invocations. 41 x = ++Ticket ; 42 if (x == 0) x = 1 ; 35 // Ticket is accessed infrequently and does not constitute a coherence hot-spot. 36 // Note that we use a non-atomic racy increment -- the race is rare and benign. 37 // If the race is a concern switch to an AtomicInteger. 38 // In addition accesses to the RW volatile global "Ticket" variable are not 39 // (readily) predictable at compile-time so the JIT will not be able to elide 40 // nextRandom() invocations. 41 x = ++Ticket ; 42 if (x == 0) x = 1 ; 43 43 } 44 44 x ^= x << 6; 45 45 x ^= x >>> 21; 46 46 x ^= x << 7; 47 return x ; 47 return x ; 48 48 } 49 49 static int x = 2; 50 50 51 static private int times = Integer.parseInt("1000000");51 static private long times = Long.parseLong("1000000"); 52 52 53 53 public static void helper( Monitor m ) throws InterruptedException { 54 for( inti = 1; i <= times; i += 1) {54 for(long i = 1; i <= times; i += 1) { 55 55 m.wait(); // relase monitor lock 56 56 m.next = true; … … 75 75 } 76 76 public static void main(String[] args) throws InterruptedException { 77 if ( args.length > 2) System.exit( 1 );78 if ( args.length == 2 ) { times = Integer.parseInt(args[1]); }77 if ( args.length > 1 ) System.exit( 1 ); 78 if ( args.length == 1 ) { times = Long.parseLong(args[0]); } 79 79 80 for (int n = Integer.parseInt("5"); --n >= 0 ; ) { 80 for (int n = Integer.parseInt("5"); --n >= 0 ; ) { 81 81 InnerMain(); 82 82 Thread.sleep(2000); // 2 seconds
Note:
See TracChangeset
for help on using the changeset viewer.