Changes in / [3982384:6e4c44d]
- Files:
-
- 8 added
- 305 deleted
- 62 edited
-
Jenkins/FullBuild (modified) (5 diffs)
-
Jenkinsfile (modified) (4 diffs)
-
Makefile.am (modified) (3 diffs)
-
benchmark/mutexStmt/JavaThread.java (added)
-
doc/LaTeXmacros/lstlang.sty (modified) (2 diffs)
-
doc/bibliography/pl.bib (modified) (16 diffs)
-
doc/papers/llheap/.gitignore (deleted)
-
doc/papers/llheap/AMA-stix_New.zip (deleted)
-
doc/papers/llheap/AMA-stix_New/Documents/.log (deleted)
-
doc/papers/llheap/AMA-stix_New/Documents/README.txt (deleted)
-
doc/papers/llheap/AMA-stix_New/Documents/wileyNJD-Doc.tex (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/STIXGeneral-Bold.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/STIXGeneral-BoldItalic.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/STIXGeneral-Italic.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/STIXGeneral-Regular.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/Windows-Stix-fontinstaller.exe (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/a_axxd65.enc (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ls1stix.fd (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ls1stixbb.fd (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ls1stixfrak.fd (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ls1stixscr.fd (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ls1stixsf.fd (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ls2stix.fd (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ls2stixcal.fd (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ls2stixex.fd (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ls2stixtt.fd (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ly1sti.fd (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ot1-stixgeneral-bold.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ot1-stixgeneral-bolditalic.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ot1-stixgeneral-italic.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ot1-stixgeneral.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ot1-stixgeneralsc-bold.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ot1-stixgeneralsc-bold.vf (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ot1-stixgeneralsc.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ot1-stixgeneralsc.vf (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ot1stix.fd (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ot2-stixgeneral-bold.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ot2-stixgeneral-bolditalic.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ot2-stixgeneral-italic.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ot2-stixgeneral.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ot2-stixgeneralsc-bold.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ot2-stixgeneralsc-bold.vf (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ot2-stixgeneralsc.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ot2-stixgeneralsc.vf (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ot2stix.fd (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-extra1.enc (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-extra1.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-extra2.enc (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-extra2.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-extra3.enc (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-extra3.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathbb-bold.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathbb-bold.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathbb.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathbb.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathbbit-bold.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathbbit-bold.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathbbit.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathbbit.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathcal-bold.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathcal-bold.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathcal.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathcal.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathex-bold.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathex-bold.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathex.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathex.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathfrak-bold.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathfrak-bold.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathfrak.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathfrak.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathit-bold.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathit-bold.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathit.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathit.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathrm-bold.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathrm-bold.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathrm.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathrm.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathscr-bold.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathscr-bold.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathscr.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathscr.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathsf-bold.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathsf-bold.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathsf.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathsf.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathsfit-bold.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathsfit-bold.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathsfit.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathsfit.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathtt-bold.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathtt-bold.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathtt.pfb (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-mathtt.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-ot1.enc (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-ot2.enc (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-t1.enc (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix-ts1.enc (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix.dtx (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix.fdd (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix.map (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/stix.sty (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/t1-stixgeneral-bold.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/t1-stixgeneral-bolditalic.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/t1-stixgeneral-italic.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/t1-stixgeneral.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/t1-stixgeneralsc-bold.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/t1-stixgeneralsc-bold.vf (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/t1-stixgeneralsc.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/t1-stixgeneralsc.vf (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/t1stix.fd (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ts1-stixgeneral-bold.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ts1-stixgeneral-bolditalic.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ts1-stixgeneral-italic.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ts1-stixgeneral.tfm (deleted)
-
doc/papers/llheap/AMA-stix_New/Stix-fonts/ts1stix.fd (deleted)
-
doc/papers/llheap/AMA-stix_New/ama/NJDnatbib.sty (deleted)
-
doc/papers/llheap/AMA-stix_New/ama/WileyNJD-v2.cls (deleted)
-
doc/papers/llheap/AMA-stix_New/ama/empty.eps (deleted)
-
doc/papers/llheap/AMA-stix_New/ama/wileyNJD-AMA.aux (deleted)
-
doc/papers/llheap/AMA-stix_New/ama/wileyNJD-AMA.bbl (deleted)
-
doc/papers/llheap/AMA-stix_New/ama/wileyNJD-AMA.bib (deleted)
-
doc/papers/llheap/AMA-stix_New/ama/wileyNJD-AMA.blg (deleted)
-
doc/papers/llheap/AMA-stix_New/ama/wileyNJD-AMA.log (deleted)
-
doc/papers/llheap/AMA-stix_New/ama/wileyNJD-AMA.pag (deleted)
-
doc/papers/llheap/AMA-stix_New/ama/wileyNJD-AMA.synctex (deleted)
-
doc/papers/llheap/AMA-stix_New/ama/wileyNJD-AMA.tex (deleted)
-
doc/papers/llheap/Makefile (deleted)
-
doc/papers/llheap/Paper.tex (deleted)
-
doc/papers/llheap/WileyNJD-v2.cls (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/cache_scratch_0-scratch.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/cache_thrash_0-thrash.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/churn.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/mem-1-prod-1-cons-100-dl.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/mem-1-prod-1-cons-100-glc.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/mem-1-prod-1-cons-100-hrd.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/mem-1-prod-1-cons-100-je.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/mem-1-prod-1-cons-100-llh.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/mem-1-prod-1-cons-100-pt3.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/mem-1-prod-1-cons-100-rp.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/mem-1-prod-1-cons-100-tbb.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/mem-4-prod-4-cons-100-dl.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/mem-4-prod-4-cons-100-glc.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/mem-4-prod-4-cons-100-hrd.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/mem-4-prod-4-cons-100-je.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/mem-4-prod-4-cons-100-llh.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/mem-4-prod-4-cons-100-pt3.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/mem-4-prod-4-cons-100-rp.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/mem-4-prod-4-cons-100-tbb.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/speed-1-malloc-null.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/speed-10-malloc-realloc.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/speed-11-calloc-realloc.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/speed-12-malloc-realloc-free.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/speed-13-calloc-realloc-free.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/speed-14-m-c-re-alloc-free.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/speed-2-free-null.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/speed-3-malloc.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/speed-4-realloc.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/speed-5-free.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/speed-6-calloc.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/speed-7-malloc-free.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/speed-8-realloc-free.eps (deleted)
-
doc/papers/llheap/evaluations/algol-perf-eps/speed-9-calloc-free.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/cache_scratch_0-scratch.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/cache_thrash_0-thrash.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/churn.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-dl.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-glc.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-hrd.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-je.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-llh.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-pt3.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-rp.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-tbb.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-dl.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-glc.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-hrd.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-je.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-llh.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-pt3.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-rp.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-tbb.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/speed-1-malloc-null.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/speed-10-malloc-realloc.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/speed-11-calloc-realloc.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/speed-12-malloc-realloc-free.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/speed-13-calloc-realloc-free.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/speed-14-m-c-re-alloc-free.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/speed-2-free-null.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/speed-3-malloc.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/speed-4-realloc.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/speed-5-free.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/speed-6-calloc.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/speed-7-malloc-free.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/speed-8-realloc-free.eps (deleted)
-
doc/papers/llheap/evaluations/nasus-perf-eps/speed-9-calloc-free.eps (deleted)
-
doc/papers/llheap/examples/C++Cor-ts.cpp (deleted)
-
doc/papers/llheap/examples/DatingServiceThread.cfa (deleted)
-
doc/papers/llheap/examples/Fib.c (deleted)
-
doc/papers/llheap/examples/Fib.cfa (deleted)
-
doc/papers/llheap/examples/Fib.cpp (deleted)
-
doc/papers/llheap/examples/Fib.js (deleted)
-
doc/papers/llheap/examples/Fib.py (deleted)
-
doc/papers/llheap/examples/Fib.sim (deleted)
-
doc/papers/llheap/examples/Fib1.c (deleted)
-
doc/papers/llheap/examples/Fib2.c (deleted)
-
doc/papers/llheap/examples/Fib2.cfa (deleted)
-
doc/papers/llheap/examples/Fib2.cpp (deleted)
-
doc/papers/llheap/examples/Fib2.py (deleted)
-
doc/papers/llheap/examples/Fib3.c (deleted)
-
doc/papers/llheap/examples/Fib3.cc (deleted)
-
doc/papers/llheap/examples/FibRefactor.py (deleted)
-
doc/papers/llheap/examples/Fmt.sim (deleted)
-
doc/papers/llheap/examples/Format.c (deleted)
-
doc/papers/llheap/examples/Format.cc (deleted)
-
doc/papers/llheap/examples/Format.cfa (deleted)
-
doc/papers/llheap/examples/Format.cpp (deleted)
-
doc/papers/llheap/examples/Format.data (deleted)
-
doc/papers/llheap/examples/Format.js (deleted)
-
doc/papers/llheap/examples/Format.py (deleted)
-
doc/papers/llheap/examples/Format.sim (deleted)
-
doc/papers/llheap/examples/Format1.c (deleted)
-
doc/papers/llheap/examples/PingPong.c (deleted)
-
doc/papers/llheap/examples/PingPong.cc (deleted)
-
doc/papers/llheap/examples/Pingpong.cc (deleted)
-
doc/papers/llheap/examples/Pingpong.cfa (deleted)
-
doc/papers/llheap/examples/Pingpong.py (deleted)
-
doc/papers/llheap/examples/Pingpong2.cfa (deleted)
-
doc/papers/llheap/examples/ProdCons.cfa (deleted)
-
doc/papers/llheap/examples/ProdCons.cpp (deleted)
-
doc/papers/llheap/examples/ProdCons.py (deleted)
-
doc/papers/llheap/examples/ProdCons.sim (deleted)
-
doc/papers/llheap/examples/RWMonitorEXT.cfa (deleted)
-
doc/papers/llheap/examples/RWMonitorINT.cfa (deleted)
-
doc/papers/llheap/examples/Refactor.py (deleted)
-
doc/papers/llheap/examples/channels.go (deleted)
-
doc/papers/llheap/examples/channels.rs (deleted)
-
doc/papers/llheap/examples/counter.cpp (deleted)
-
doc/papers/llheap/examples/future.rs (deleted)
-
doc/papers/llheap/figures/AddressSpace.fig (deleted)
-
doc/papers/llheap/figures/Alignment1.fig (deleted)
-
doc/papers/llheap/figures/Alignment2.fig (deleted)
-
doc/papers/llheap/figures/Alignment2Impl.fig (deleted)
-
doc/papers/llheap/figures/AllocDS1.fig (deleted)
-
doc/papers/llheap/figures/AllocDS2.fig (deleted)
-
doc/papers/llheap/figures/AllocInducedActiveFalseSharing.fig (deleted)
-
doc/papers/llheap/figures/AllocInducedPassiveFalseSharing.fig (deleted)
-
doc/papers/llheap/figures/AllocatedObject.fig (deleted)
-
doc/papers/llheap/figures/AllocatorComponents.fig (deleted)
-
doc/papers/llheap/figures/AllocatorComponents.fig.bak (deleted)
-
doc/papers/llheap/figures/CoalesceAllocated.fig (deleted)
-
doc/papers/llheap/figures/CoalesceFree.fig (deleted)
-
doc/papers/llheap/figures/CondSigWait.fig (deleted)
-
doc/papers/llheap/figures/Container.fig (deleted)
-
doc/papers/llheap/figures/ContainerFalseSharing1.fig (deleted)
-
doc/papers/llheap/figures/ContainerFalseSharing2.fig (deleted)
-
doc/papers/llheap/figures/ContainerNoOwnership.fig (deleted)
-
doc/papers/llheap/figures/ContainerNoOwnershipFreelist.fig (deleted)
-
doc/papers/llheap/figures/ContainerOwnership.fig (deleted)
-
doc/papers/llheap/figures/ContainerOwnershipFreelist.fig (deleted)
-
doc/papers/llheap/figures/ContigFragmentation.fig (deleted)
-
doc/papers/llheap/figures/FakeHeader.fig (deleted)
-
doc/papers/llheap/figures/FreeListAmongContainers.fig (deleted)
-
doc/papers/llheap/figures/FreeListWithinContainers.fig (deleted)
-
doc/papers/llheap/figures/FullCoroutinePhases.fig (deleted)
-
doc/papers/llheap/figures/FullProdConsStack.fig (deleted)
-
doc/papers/llheap/figures/Header.fig (deleted)
-
doc/papers/llheap/figures/HeapStructure.fig (deleted)
-
doc/papers/llheap/figures/IntExtFragmentation.fig (deleted)
-
doc/papers/llheap/figures/MemoryFragmentation.fig (deleted)
-
doc/papers/llheap/figures/MultipleHeapsNoOwnership.fig (deleted)
-
doc/papers/llheap/figures/MultipleHeapsOwnership.fig (deleted)
-
doc/papers/llheap/figures/MultipleHeapsOwnershipStorage.fig (deleted)
-
doc/papers/llheap/figures/MultipleHeapsStorage.fig (deleted)
-
doc/papers/llheap/figures/NewHeapStructure.eps (deleted)
-
doc/papers/llheap/figures/NonContigFragmentation.fig (deleted)
-
doc/papers/llheap/figures/ObjectHeaders.fig (deleted)
-
doc/papers/llheap/figures/PerThreadHeap.fig (deleted)
-
doc/papers/llheap/figures/PrivatePublicHeaps.fig (deleted)
-
doc/papers/llheap/figures/ProgramFalseSharing.fig (deleted)
-
doc/papers/llheap/figures/RemoteFreeList.fig (deleted)
-
doc/papers/llheap/figures/RunTimeStructure.fig (deleted)
-
doc/papers/llheap/figures/SharedHeaps.fig (deleted)
-
doc/papers/llheap/figures/SingleHeap.fig (deleted)
-
doc/papers/llheap/figures/SuperContainers.fig (deleted)
-
doc/papers/llheap/figures/UserKernelHeaps.fig (deleted)
-
doc/papers/llheap/figures/llheap.fig (deleted)
-
doc/papers/llheap/local.bib (deleted)
-
doc/proposals/alt-enums.md (deleted)
-
doc/theses/colby_parsons_MMAth/Makefile (modified) (2 diffs)
-
doc/theses/colby_parsons_MMAth/benchmarks/actors/data/nasus_CFA.txt (modified) (15 diffs)
-
doc/theses/colby_parsons_MMAth/benchmarks/actors/data/pyke_CFA.txt (modified) (15 diffs)
-
doc/theses/colby_parsons_MMAth/benchmarks/actors/plotData.py (modified) (3 diffs)
-
doc/theses/colby_parsons_MMAth/benchmarks/channels/plotData.py (modified) (4 diffs)
-
doc/theses/colby_parsons_MMAth/benchmarks/mutex_stmt/plotData.py (modified) (3 diffs)
-
doc/theses/colby_parsons_MMAth/benchmarks/mutex_stmt/run (modified) (1 diff)
-
doc/theses/colby_parsons_MMAth/code/swap_queues.cfa (modified) (3 diffs)
-
doc/theses/colby_parsons_MMAth/figures/nasus_Aggregate_Lock_2.pgf (modified) (28 diffs)
-
doc/theses/colby_parsons_MMAth/figures/nasus_Aggregate_Lock_4.pgf (modified) (47 diffs)
-
doc/theses/colby_parsons_MMAth/figures/nasus_Aggregate_Lock_8.pgf (modified) (27 diffs)
-
doc/theses/colby_parsons_MMAth/figures/nasus_Channel_Contention.pgf (modified) (16 diffs)
-
doc/theses/colby_parsons_MMAth/figures/pyke_Aggregate_Lock_2.pgf (modified) (26 diffs)
-
doc/theses/colby_parsons_MMAth/figures/pyke_Aggregate_Lock_4.pgf (modified) (48 diffs)
-
doc/theses/colby_parsons_MMAth/figures/pyke_Aggregate_Lock_8.pgf (modified) (27 diffs)
-
doc/theses/colby_parsons_MMAth/figures/pyke_Channel_Contention.pgf (modified) (16 diffs)
-
doc/theses/colby_parsons_MMAth/style/cfa-format.tex (added)
-
doc/theses/colby_parsons_MMAth/style/style.tex (modified) (1 diff)
-
doc/theses/colby_parsons_MMAth/text/CFA_concurrency.tex (modified) (2 diffs)
-
doc/theses/colby_parsons_MMAth/text/CFA_intro.tex (modified) (7 diffs)
-
doc/theses/colby_parsons_MMAth/text/actors.tex (modified) (1 diff)
-
doc/theses/colby_parsons_MMAth/text/channels.tex (modified) (9 diffs)
-
doc/theses/colby_parsons_MMAth/text/frontpgs.tex (modified) (1 diff)
-
doc/theses/colby_parsons_MMAth/text/intro.tex (modified) (1 diff)
-
doc/theses/colby_parsons_MMAth/text/mutex_stmt.tex (modified) (10 diffs)
-
doc/theses/colby_parsons_MMAth/version (added)
-
doc/theses/colby_parsons_MMAth/version.sh (added)
-
doc/theses/mike_brooks_MMath/pictures/lst-issues-direct.vsdx (modified) ( previous)
-
libcfa/src/Makefile.am (modified) (2 diffs)
-
libcfa/src/bits/weakso_locks.cfa (modified) (2 diffs)
-
libcfa/src/bits/weakso_locks.hfa (modified) (4 diffs)
-
libcfa/src/concurrency/channel.hfa (modified) (18 diffs)
-
libcfa/src/concurrency/future.hfa (modified) (8 diffs)
-
libcfa/src/concurrency/invoke.h (modified) (1 diff)
-
libcfa/src/concurrency/locks.cfa (modified) (15 diffs)
-
libcfa/src/concurrency/locks.hfa (modified) (36 diffs)
-
libcfa/src/concurrency/mutex_stmt.hfa (modified) (2 diffs)
-
libcfa/src/concurrency/preemption.cfa (modified) (1 diff)
-
libcfa/src/concurrency/select.cfa (deleted)
-
libcfa/src/concurrency/select.hfa (modified) (1 diff)
-
libcfa/src/concurrency/thread.cfa (modified) (3 diffs)
-
src/AST/Convert.cpp (modified) (4 diffs)
-
src/AST/Fwd.hpp (modified) (1 diff)
-
src/AST/Node.cpp (modified) (1 diff)
-
src/AST/Pass.hpp (modified) (1 diff)
-
src/AST/Pass.impl.hpp (modified) (7 diffs)
-
src/AST/Pass.proto.hpp (modified) (6 diffs)
-
src/AST/Print.cpp (modified) (4 diffs)
-
src/AST/Stmt.hpp (modified) (2 diffs)
-
src/AST/Visitor.hpp (modified) (1 diff)
-
src/Common/CodeLocationTools.cpp (modified) (1 diff)
-
src/Concurrency/WaitforNew.cpp (modified) (2 diffs)
-
src/Concurrency/Waituntil.cpp (deleted)
-
src/Concurrency/Waituntil.hpp (deleted)
-
src/Concurrency/module.mk (modified) (1 diff)
-
src/Parser/StatementNode.cc (modified) (2 diffs)
-
src/Parser/StatementNode.h (modified) (1 diff)
-
src/Parser/lex.ll (modified) (2 diffs)
-
src/Parser/parser.yy (modified) (4 diffs)
-
src/ResolvExpr/Resolver.cc (modified) (3 diffs)
-
src/main.cc (modified) (2 diffs)
-
tests/Makefile.am (modified) (12 diffs)
-
tests/concurrent/futures/select_future.cfa (modified) (1 diff)
-
tests/concurrent/mutexstmt/.expect/scoped_lock.txt (added)
-
tests/concurrent/mutexstmt/scoped_lock.cfa (added)
-
tests/concurrent/unified_locking/.expect/clh.txt (added)
-
tests/concurrent/unified_locking/clh.cfa (added)
-
tests/concurrent/waituntil/.expect/all_types.txt (deleted)
-
tests/concurrent/waituntil/.expect/basic_else.txt (deleted)
-
tests/concurrent/waituntil/.expect/channel_close.txt (deleted)
-
tests/concurrent/waituntil/.expect/channel_zero_size.txt (deleted)
-
tests/concurrent/waituntil/.expect/channels.txt (deleted)
-
tests/concurrent/waituntil/.expect/futures.txt (deleted)
-
tests/concurrent/waituntil/.expect/locks.txt (deleted)
-
tests/concurrent/waituntil/.expect/one_chan.txt (deleted)
-
tests/concurrent/waituntil/.expect/timeout.txt (deleted)
-
tests/concurrent/waituntil/all_types.cfa (deleted)
-
tests/concurrent/waituntil/basic_else.cfa (deleted)
-
tests/concurrent/waituntil/channel_close.cfa (deleted)
-
tests/concurrent/waituntil/channel_zero_size.cfa (deleted)
-
tests/concurrent/waituntil/channels.cfa (deleted)
-
tests/concurrent/waituntil/futures.cfa (deleted)
-
tests/concurrent/waituntil/locks.cfa (deleted)
-
tests/concurrent/waituntil/one_chan.cfa (deleted)
-
tests/concurrent/waituntil/timeout.cfa (deleted)
Legend:
- Unmodified
- Added
- Removed
-
Jenkins/FullBuild
r3982384 r6e4c44d 20 20 gcc_08_x86_new: { trigger_build( 'gcc-10', 'x86', false ) }, 21 21 gcc_07_x86_new: { trigger_build( 'gcc-9', 'x86', false ) }, 22 gcc_11_x64_new: { trigger_build( 'gcc-11', 'x64', false ) },23 22 gcc_10_x64_new: { trigger_build( 'gcc-10', 'x64', false ) }, 24 23 gcc_09_x64_new: { trigger_build( 'gcc-9', 'x64', false ) }, 25 24 gcc_08_x64_new: { trigger_build( 'gcc-8', 'x64', false ) }, 26 25 gcc_07_x64_new: { trigger_build( 'gcc-7', 'x64', false ) }, 27 //gcc_06_x64_new: { trigger_build( 'gcc-6', 'x64', false ) },26 gcc_06_x64_new: { trigger_build( 'gcc-6', 'x64', false ) }, 28 27 clang_x64_new: { trigger_build( 'clang', 'x64', true ) }, 29 28 ) … … 42 41 } 43 42 44 // If an exception is caught we need to change the status and remember to45 // attach the build log to the email43 //If an exception is caught we need to change the status and remember to 44 //attach the build log to the email 46 45 catch (Exception caughtError) { 47 46 echo('error caught') … … 74 73 // Run the build 75 74 // Don't propagate, it doesn't play nice with our email setup 76 def result = build job: 'Cforall/master', \75 def result = build job: 'Cforall/master', \ 77 76 parameters: [ \ 78 77 [$class: 'StringParameterValue', \ … … 84 83 [$class: 'BooleanParameterValue', \ 85 84 name: 'NewAST', \ 86 value: true], \85 value: true], \ 87 86 [$class: 'BooleanParameterValue', \ 88 87 name: 'RunAllTests', \ 89 value: true], \88 value: true], \ 90 89 [$class: 'BooleanParameterValue', \ 91 90 name: 'RunBenchmark', \ 92 value: true], \91 value: true], \ 93 92 [$class: 'BooleanParameterValue', \ 94 name: 'BuildDocumentation', \93 name: 'BuildDocumentation', \ 95 94 value: doc], \ 96 95 [$class: 'BooleanParameterValue', \ 97 96 name: 'Publish', \ 98 value: true], \97 value: true], \ 99 98 [$class: 'BooleanParameterValue', \ 100 99 name: 'Silent', \ 101 value: true], \102 ], \100 value: true], \ 101 ], \ 103 102 propagate: false 104 103 … … 112 111 113 112 def trigger_dist(String commitId, String buildNum) { 114 def result = build job: 'Cforall_Distribute_Ref', \113 def result = build job: 'Cforall_Distribute_Ref', \ 115 114 parameters: [ \ 116 115 string(name: 'GitRef', value: commitId), \ 117 string(name: 'Build' , value: buildNum) \118 ], \116 string(name: 'Build' , value: buildNum) \ 117 ], \ 119 118 propagate: false 120 119 -
Jenkinsfile
r3982384 r6e4c44d 155 155 dir (BuildDir) { 156 156 //Run the tests from the tests directory 157 sh """make ${jopt} --no-print-directory -C tests timeouts="--timeout=600 --global-timeout=14400" tests debug=yes archiveerrors=${BuildDir}/tests/crashes/full-debug"""157 sh """make ${jopt} --no-print-directory -C tests timeouts="--timeout=600 --global-timeout=14400" all-tests debug=yes archiveerrors=${BuildDir}/tests/crashes/full-debug""" 158 158 } 159 159 } … … 162 162 dir (BuildDir) { 163 163 //Run the tests from the tests directory 164 sh """make ${jopt} --no-print-directory -C tests timeouts="--timeout=600 --global-timeout=14400" tests debug=noarchiveerrors=${BuildDir}/tests/crashes/full-nodebug"""164 sh """make ${jopt} --no-print-directory -C tests timeouts="--timeout=600 --global-timeout=14400" all-tests debug=no archiveerrors=${BuildDir}/tests/crashes/full-nodebug""" 165 165 } 166 166 } … … 305 305 this.Compiler = new CC_Desc('gcc-7', 'g++-7', 'gcc-7', '-flto=auto') 306 306 break 307 //case 'gcc-6':308 //this.Compiler = new CC_Desc('gcc-6', 'g++-6', 'gcc-6', '-flto=auto')309 //break310 //case 'gcc-5':311 //this.Compiler = new CC_Desc('gcc-5', 'g++-5', 'gcc-5', '-flto=auto')312 //break313 //case 'gcc-4.9':314 //this.Compiler = new CC_Desc('gcc-4.9', 'g++-4.9', 'gcc-4.9', '-flto=auto')315 //break307 case 'gcc-6': 308 this.Compiler = new CC_Desc('gcc-6', 'g++-6', 'gcc-6', '-flto=auto') 309 break 310 case 'gcc-5': 311 this.Compiler = new CC_Desc('gcc-5', 'g++-5', 'gcc-5', '-flto=auto') 312 break 313 case 'gcc-4.9': 314 this.Compiler = new CC_Desc('gcc-4.9', 'g++-4.9', 'gcc-4.9', '-flto=auto') 315 break 316 316 case 'clang': 317 317 this.Compiler = new CC_Desc('clang', 'clang++-10', 'gcc-10', '-flto=thin -flto-jobs=0') … … 359 359 def prepare_build() { 360 360 // prepare the properties 361 properties ([ \362 buildDiscarder(logRotator( \363 artifactDaysToKeepStr: '', \364 artifactNumToKeepStr: '', \365 daysToKeepStr: '730', \366 numToKeepStr: '1000' \367 )), \368 [$class: 'ParametersDefinitionProperty', \369 parameterDefinitions: [ \370 [$class: 'ChoiceParameterDefinition', \371 description: 'Which compiler to use', \372 name: 'Compiler', \373 choices: 'gcc-11\ngcc-10\ngcc-9\ngcc-8\ngcc-7\n clang', \374 defaultValue: 'gcc- 9',\375 ], \376 [$class: 'ChoiceParameterDefinition', \377 description: 'The target architecture', \378 name: 'Architecture', \379 choices: 'x64\nx86', \380 defaultValue: 'x64', \381 ], \382 [$class: 'BooleanParameterDefinition', \361 properties ([ \ 362 buildDiscarder(logRotator( \ 363 artifactDaysToKeepStr: '', \ 364 artifactNumToKeepStr: '', \ 365 daysToKeepStr: '730', \ 366 numToKeepStr: '1000' \ 367 )), \ 368 [$class: 'ParametersDefinitionProperty', \ 369 parameterDefinitions: [ \ 370 [$class: 'ChoiceParameterDefinition', \ 371 description: 'Which compiler to use', \ 372 name: 'Compiler', \ 373 choices: 'gcc-11\ngcc-10\ngcc-9\ngcc-8\ngcc-7\ngcc-6\ngcc-5\ngcc-4.9\nclang', \ 374 defaultValue: 'gcc-8', \ 375 ], \ 376 [$class: 'ChoiceParameterDefinition', \ 377 description: 'The target architecture', \ 378 name: 'Architecture', \ 379 choices: 'x64\nx86', \ 380 defaultValue: 'x64', \ 381 ], \ 382 [$class: 'BooleanParameterDefinition', \ 383 383 description: 'If false, the test suite is only ran in debug', \ 384 name: 'RunAllTests', \385 defaultValue: false, \386 ], \387 [$class: 'BooleanParameterDefinition', \388 description: 'If true, jenkins also runs benchmarks', \389 name: 'RunBenchmark', \390 defaultValue: false, \391 ], \392 [$class: 'BooleanParameterDefinition', \393 description: 'If true, jenkins also builds documentation', \394 name: 'BuildDocumentation', \395 defaultValue: true, \396 ], \397 [$class: 'BooleanParameterDefinition', \398 description: 'If true, jenkins also publishes results', \399 name: 'Publish', \400 defaultValue: false, \401 ], \402 [$class: 'BooleanParameterDefinition', \403 description: 'If true, jenkins will not send emails', \404 name: 'Silent', \405 defaultValue: false, \406 ], \384 name: 'RunAllTests', \ 385 defaultValue: false, \ 386 ], \ 387 [$class: 'BooleanParameterDefinition', \ 388 description: 'If true, jenkins also runs benchmarks', \ 389 name: 'RunBenchmark', \ 390 defaultValue: false, \ 391 ], \ 392 [$class: 'BooleanParameterDefinition', \ 393 description: 'If true, jenkins also builds documentation', \ 394 name: 'BuildDocumentation', \ 395 defaultValue: true, \ 396 ], \ 397 [$class: 'BooleanParameterDefinition', \ 398 description: 'If true, jenkins also publishes results', \ 399 name: 'Publish', \ 400 defaultValue: false, \ 401 ], \ 402 [$class: 'BooleanParameterDefinition', \ 403 description: 'If true, jenkins will not send emails', \ 404 name: 'Silent', \ 405 defaultValue: false, \ 406 ], \ 407 407 ], 408 408 ]]) 409 // choices: 'gcc-11\ngcc-10\ngcc-9\ngcc-8\ngcc-7\ngcc-6\ngcc-5\ngcc-4.9\nclang',410 // defaultValue: 'gcc-8',411 409 412 410 // It's unfortunate but it looks like we need to checkout the entire repo just to get -
Makefile.am
r3982384 r6e4c44d 11 11 ## Created On : Sun May 31 22:14:18 2015 12 12 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Fri May 12 18:30:01 202314 ## Update Count : 4213 ## Last Modified On : Sat Feb 2 16:54:42 2019 14 ## Update Count : 21 15 15 ############################################################################### 16 16 … … 24 24 DIST_SUBDIRS = driver src . libcfa tests 25 25 26 @LIBCFA_TARGET_MAKEFILES@ : Makefile $ {srcdir}/libcfa/configure27 @$ {eval config_file = ${dir ${@}}config.data}28 @ls $ {config_file}|| (echo "Missing config.data, re-run configure script again" && false)29 @$ {eval config_data = ${shell cat ${config_file}}}30 @echo "Configuring libcfa ($ {abs_top_srcdir}/libcfa/configure) with '${config_data}' from ${shell pwd} / ${dir ${@}}"31 @cd $ {dir ${@}} && ${abs_top_srcdir}/libcfa/configure ${config_data}26 @LIBCFA_TARGET_MAKEFILES@ : Makefile $(srcdir)/libcfa/configure 27 @$(eval config_file = $(dir $@)config.data) 28 @ls $(config_file) || (echo "Missing config.data, re-run configure script again" && false) 29 @$(eval config_data = $(shell cat $(config_file))) 30 @echo "Configuring libcfa ($(abs_top_srcdir)/libcfa/configure) with '$(config_data)' from $(shell pwd) / $(dir $@)" 31 @cd $(dir $@) && $(abs_top_srcdir)/libcfa/configure $(config_data) 32 32 33 33 noinst_DATA = @LIBCFA_TARGET_MAKEFILES@ … … 37 37 EXTRA_DIST = LICENSE doc/man/cfa.1 libcfa/configure libcfa/Makefile.dist.am libcfa/Makefile.dist.in tools/build/distcc_hash tools/build/push2dist.sh 38 38 39 debug ?=yes40 installed ?= no 41 ARCH = ${if ${arch},"arch=${arch}"}39 debug=yes 40 check: 41 $(MAKE) -C tests all-tests installed=no debug=${debug} 42 42 43 check:44 $ {MAKE} -C tests tests installed=${installed} debug=${debug} ${ARCH}43 installcheck: 44 $(MAKE) -C tests all-tests installed=yes debug=${debug} 45 45 46 tests : check # synonym 47 48 installcheck : 49 ${MAKE} -C tests tests installed=yes debug=${debug} ${ARCH} 50 51 installtest : installcheck # synonym 52 53 help : 54 @echo "user targets:" 55 @echo " Compile compiler/runtime and run test suite." 56 @echo " $$ make check / tests [debug=yes/no] [installed=yes/no] [arch=x86/x64/arm]" 57 @echo "" 58 @echo " Compile compiler/runtime, run test suite, and install." 59 @echo " $$ make installcheck / installtests [debug=yes/no] installed=yes [arch=x86/x64/arm]" 60 61 configure-libcfa : @LIBCFA_TARGET_MAKEFILES@ 46 configure-libcfa: @LIBCFA_TARGET_MAKEFILES@ 62 47 @true 63 48 64 status : @LIBCFA_TARGET_MAKEFILES@49 status: @LIBCFA_TARGET_MAKEFILES@ 65 50 @echo -ne "translator\n\t" 66 51 @./config.status --config | sed "s/ /\n\t/g; s/\t'/\t/g; s/'\n/\n/g; s/^'//g; s/'$$//g" 67 52 @find libcfa -name config.status -printf "\n%h\n\t" -exec {} --config \; | sed "s/ /\n\t/g; s/\t'/\t/g; s/'\n/\n/g; s/^'//g; s/'$$//g" 68 53 69 @LIBCFA_TARGET_DIRS@ ::70 $ {MAKE} -C ${@} ${MAKECMDGOALS}54 @LIBCFA_TARGET_DIRS@:: 55 $(MAKE) -C $@ $(MAKECMDGOALS) 71 56 72 mostlyclean clean distclean maintainer-clean : @LIBCFA_TARGET_DIRS@57 mostlyclean clean distclean maintainer-clean: @LIBCFA_TARGET_DIRS@ -
doc/LaTeXmacros/lstlang.sty
r3982384 r6e4c44d 8 8 %% Created On : Sat May 13 16:34:42 2017 9 9 %% Last Modified By : Peter A. Buhr 10 %% Last Modified On : Tue May 2 08:52:35 202311 %% Update Count : 3010 %% Last Modified On : Mon May 31 08:20:41 2021 11 %% Update Count : 28 12 12 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 13 13 … … 112 112 \lstdefinelanguage{CFA}[ANSI]{C}{ 113 113 morekeywords={ 114 _Alignas, _Alignof, __alignof, __alignof__, and, asm, __asm, __asm__, _Atomic, __attribute, __attribute__, 115 __auto_type, basetypeof, _Bool, catch, catchResume, choose, coerce, _Complex, __complex, __complex__, __const, __const__, 116 coroutine, _Decimal32, _Decimal64, _Decimal128, disable, enable, exception, __extension__, fallthrough, fallthru, finally, fixup, 117 __float80, float80, __float128, float128, _Float16, _Float32, _Float32x, _Float64, _Float64x, _Float128, _Float128x, 118 forall, fortran, generator, _Generic, _Imaginary, __imag, __imag__, inline, __inline, __inline__, int128, __int128, __int128_t, 119 __label__, monitor, mutex, _Noreturn, __builtin_offsetof, one_t, or, recover, report, restrict, __restrict, __restrict__, 120 __signed, __signed__, _Static_assert, suspend, thread, __thread, _Thread_local, throw, throwResume, timeout, trait, try, 121 typeof, __typeof, __typeof__, typeid, __uint128_t, __builtin_va_arg, __builtin_va_list, virtual, __volatile, __volatile__, 122 vtable, waitfor, waituntil, when, with, zero_t, 114 _Alignas, _Alignof, __alignof, __alignof__, asm, __asm, __asm__, __attribute, __attribute__, 115 auto, basetypeof, _Bool, catch, catchResume, choose, _Complex, __complex, __complex__, __const, __const__, 116 coroutine, disable, dtype, enable, exception, __extension__, fallthrough, fallthru, finally, fixup, 117 __float80, float80, __float128, float128, forall, ftype, generator, _Generic, _Imaginary, __imag, __imag__, 118 inline, __inline, __inline__, __int128, int128, __label__, monitor, mutex, _Noreturn, one_t, or, 119 otype, restrict, __restrict, __restrict__, recover, report, __signed, __signed__, _Static_assert, suspend, 120 thread, __thread, _Thread_local, throw, throwResume, timeout, trait, try, ttype, typeof, __typeof, __typeof__, 121 virtual, __volatile, __volatile__, waitfor, when, with, zero_t, 123 122 }, 124 123 moredirectives={defined,include_next}% -
doc/bibliography/pl.bib
r3982384 r6e4c44d 198 198 } 199 199 200 @inproceedings{Koster16,201 keywords = {Actor Model, Concurrency},202 contributer = {pabuhr@plg},203 author = {De Koster, Joeri and Van Cutsem, Tom and De Meuter, Wolfgang},204 title = {43 Years of Actors: A Taxonomy of Actor Models and Their Key Properties},205 publisher = {ACM},206 address = {New York, NY, USA},207 organization= {Proceedings of the 6th International Workshop on Programming Based on Actors, Agents, and Decentralized Control},208 pages = {31-40},209 numpages = {10},210 year = {2016},211 location = {Amsterdam, Netherlands},212 series = {AGERE 2016}213 }214 215 200 @misc{ActorBenchmarks, 216 keywords = {Actors, microbenchmarks, uC++. CAF, ProtoActor, AkkaC, AkkaT},201 keywords = {Actors, microbenchmarks, uC++. CAF, AkkaC, AkkaT, ProtoActor}, 217 202 contributer = {pabuhr@plg}, 218 203 key = {ActorBenchmarks}, … … 230 215 publisher = {MIT Press, Cambridge}, 231 216 year = 1986 232 }233 234 @inproceedings{Srinivasan08,235 author = {Srinivasan, Sriram and Mycroft, Alan},236 editor = {Vitek, Jan},237 title = {Kilim: Isolation-Typed Actors for Java},238 organization= {ECOOP 2008 -- Object-Oriented Programming},239 year = {2008},240 publisher = {Springer Berlin Heidelberg},241 address = {Berlin, Heidelberg},242 pages = {104--128},243 }244 245 @inproceedings{Haller07,246 author = {Haller, Philipp and Odersky, Martin},247 editor = {Murphy, Amy L. and Vitek, Jan},248 title = {Actors That Unify Threads and Events},249 organization= {Coordination Models and Languages},250 year = 2007,251 publisher = {Springer Berlin Heidelberg},252 address = {Berlin, Heidelberg},253 pages = {171-190},254 217 } 255 218 … … 340 303 341 304 @article{Agrawal08, 342 keywords = {Adaptive scheduling, multiprocessing, processor allocation, randomized algorithm, space sharing, thread scheduling, two-level scheduling, work-stealing},305 keywords = {Adaptive scheduling, adversary, instantaneous parallelism, job scheduling, multiprocessing, multiprogramming, parallel computation, parallelism feedback, processor allocation, randomized algorithm, space sharing, span, thread scheduling, trim analysis, two-level scheduling, work, work-stealing}, 343 306 author = {Agrawal, Kunal and Leiserson, Charles E. and He, Yuxiong and Hsu, Wen Jing}, 344 307 title = {Adaptive Work-stealing with Parallelism Feedback}, … … 472 435 month = sep, 473 436 year = 2016, 474 note = {\url{http://doc.akka.io/docs/akka/2.4/AkkaScala.pdf}}, 475 } 476 477 @misc{AkkaClassic, 478 contributer = {pabuhr@plg}, 479 key = {AkkaClassic}, 480 title = {Akka Classic Actors}, 481 author = {{Lightbend}}, 482 howpublished= {\url{https://doc.akka.io/docs/akka/current/index-classic.html}}, 483 year = 2023, 437 note = {\href{http://doc.akka.io/docs/akka/2.4/AkkaScala.pdf}{http://\-doc.akka.io/\-docs/\-akka/\-2.4/\-AkkaScala.pdf}}, 484 438 } 485 439 … … 489 443 title = {Akka Futures}, 490 444 author = {{Lightbend}}, 491 howpublished= {\url{https://doc.akka.io/docs/akka/2.5/futures.html}}, 492 year = 2022, 493 } 494 495 @misc{AkkaTyped, 496 contributer = {pabuhr@plg}, 497 key = {AkkaTyped}, 498 title = {Akka Typed Actors}, 499 author = {{Lightbend}}, 500 howpublished= {\url{https://doc.akka.io/docs/akka/2.5/typed-actors.html}}, 445 howpublished= {\href{https://doc.akka.io/docs/akka/2.5/futures.html}{https://\-doc.akka.io/\-docs/\-akka/\-2.5/\-futures.html}}, 501 446 year = 2022, 502 447 } … … 1173 1118 @inproceedings{CAF, 1174 1119 keywords = {performance measurement, actor model, c++, message-oriented middleware, distributed debugging}, 1175 contributer = {pabuhr@plg},1176 1120 author = {Charousset, Dominik and Hiesgen, Raphael and Schmidt, Thomas C.}, 1177 title = {{CAF} - -the {C}++ Actor Framework for Scalable and Resource-Efficient Applications},1121 title = {{CAF} - the {C}++ Actor Framework for Scalable and Resource-Efficient Applications}, 1178 1122 publisher = {ACM}, 1179 1123 address = {New York, NY, USA}, 1180 1124 organization= {Proceedings of the 4th International Workshop on Programming Based on Actors Agents \& Decentralized Control}, 1181 1125 pages = {15-28}, 1182 numpages = 14,1126 numpages = {14}, 1183 1127 location = {Portland, Oregon, USA}, 1184 1128 series = {AGERE'14}, 1185 year = 2014,1129 year = {2014}, 1186 1130 } 1187 1131 … … 3158 3102 year = 2016, 3159 3103 note = {\href{http://erlang.org/doc/pdf/otp-system-documentation.pdf}{http://\-erlang.org/\-doc/\-pdf/\-otp-system-documentation.pdf}}, 3160 }3161 3162 @misc{Soleimani16,3163 keywords = {Erlang, scheduler, history},3164 contributer = {pabuhr@plg},3165 author = {Hamidreza Soleimani},3166 title = {Erlang Scheduler Details and Why It Matters},3167 month = feb,3168 year = 2016,3169 howpublished= {\url{https://hamidreza-s.github.io/erlang/scheduling/real-time/preemptive/migration/2016/02/09/erlang-scheduler-details.html}},3170 3104 } 3171 3105 … … 5402 5336 } 5403 5337 5404 @article{Lombardo19,5405 contributer = {pabuhr@plg},5406 author = {Lombardo, Gianfranco and Fornacciari, Paolo and Mordonini, Monica and Tomaiuolo, Michele and Poggi, Agostino},5407 title = {A Multi-Agent Architecture for Data Analysis},5408 journal = {Future Internet},5409 volume = 11,5410 year = 2019,5411 number = 2,5412 }5413 5414 5338 @article{multilisp, 5415 5339 keywords = {futures, scheme}, … … 6694 6618 } 6695 6619 6696 @article{Varela01,6697 keywords = {programming languages, SALSA, continuations, actors, java, internet, network computing, open systems, mobile computing},6698 contributer = {pabuhr@plg},6699 author = {Varela, Carlos and Agha, Gul},6700 title = {Programming Dynamically Reconfigurable Open Systems with SALSA},6701 issue_date = {December 2001},6702 publisher = {Association for Computing Machinery},6703 address = {New York, NY, USA},6704 volume = 36,6705 number = 12,6706 journal = {SIGPLAN Not.},6707 year = 2001,6708 month = dec,6709 pages = {20-34},6710 }6711 6712 6620 @book{PowerPC, 6713 6621 key = {PowerPC processor}, … … 6771 6679 title = {Programming Languages -- {C}}, 6772 6680 organization= {International Standard ISO/IEC 9899:1999 (E)}, 6773 publisher = {American National Standards Institute},6681 publisher = {American National Standards Institute}, 6774 6682 address = {www.ansi.org}, 6775 6683 year = 1999, … … 6782 6690 title = {{C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Programming Language ISO/IEC 14882:1998}, 6783 6691 edition = {1st}, 6784 organization = {International Standard Organization},6692 organization = {International Standard Organization}, 6785 6693 address = {Geneva, Switzerland}, 6786 6694 year = 1998, … … 7073 6981 } 7074 6982 7075 @misc{protoactor,7076 contributer = {pabuhr@plg},7077 key = {Protoactor},7078 author = {{proto.actor}},7079 title = {Asynkron AB},7080 year = 2023,7081 howpublished= {\url{https://proto.actor}},7082 }7083 7084 6983 @misc{Pthreads, 7085 6984 keywords = {pthreads, C concurrency}, … … 7559 7458 title = {The Semantics of a Simple Language for Parallel Programming}, 7560 7459 author = {Gilles Kahn}, 7561 organization= {IFIP Congress},7460 booktitle = {IFIP Congress}, 7562 7461 year = 1974, 7563 7462 } … … 8274 8173 8275 8174 @article{SysVABI, 8276 keywords = {System V ABI},8277 contributer = {a3moss@uwaterloo.ca},8175 keywords = {System V ABI}, 8176 contributer = {a3moss@uwaterloo.ca}, 8278 8177 title = {System {V} application binary interface}, 8279 8178 author = {Matz, Michael and Hubicka, Jan and Jaeger, Andreas and Mitchell, Mark}, … … 8281 8180 volume = {99}, 8282 8181 year = {2013} 8283 }8284 8285 @article{Albert18,8286 keywords = {actor-based concurrency, partial order reduction, systematic testing, synchronization, task independence},8287 contributer = {pabuhr@plg},8288 author = {Albert, Elvira and Arenas, Puri and G\'{o}mez-Zamalloa, Miguel},8289 title = {Systematic testing of actor systems},8290 journal = {Software Testing, Verification and Reliability},8291 volume = {28},8292 number = {3},8293 pages = {e1661},8294 year = {2018}8295 8182 } 8296 8183 … … 8319 8206 journal = jcss, 8320 8207 year = 1978, 8321 volume = 17, 8322 pages = {348-375}, 8208 volume = 17, pages = {348-375} 8323 8209 } 8324 8210 -
doc/theses/colby_parsons_MMAth/Makefile
r3982384 r6e4c44d 13 13 ## Define the text source files. 14 14 15 SOURCES = ${addsuffix .tex, \ 16 text/intro \ 17 text/CFA_intro \ 18 text/actors \ 19 text/frontpgs \ 20 text/CFA_concurrency \ 21 thesis \ 22 text/mutex_stmt \ 23 text/channels \ 15 SOURCES = ${addsuffix .tex, \ 16 text/CFA_intro \ 17 text/actors \ 18 text/frontpgs \ 19 text/CFA_concurrency \ 20 thesis \ 21 text/mutex_stmt \ 22 text/channels \ 24 23 } 25 24 26 FIGURES = ${addsuffix .pgf, \27 figures/pykeExecutor \28 figures/pykeCFAExecutor \29 figures/nasusExecutor \30 figures/nasusCFAExecutor \31 figures/pykeMatrix \32 figures/pykeCFAMatrix \33 figures/nasusMatrix \34 figures/nasusCFAMatrix \35 figures/pykeRepeat \36 figures/pykeCFARepeat \37 figures/nasusRepeat \38 figures/nasusCFARepeat \39 figures/pykeCFABalance-One \40 figures/nasusCFABalance-One \41 figures/pykeCFABalance-Multi \42 figures/nasusCFABalance-Multi \43 figures/pyke_Aggregate_Lock_2 \44 figures/pyke_Aggregate_Lock_4 \45 figures/pyke_Aggregate_Lock_8 \46 figures/nasus_Aggregate_Lock_2 \47 figures/nasus_Aggregate_Lock_4 \48 figures/nasus_Aggregate_Lock_8 \25 FIGURES = ${addsuffix .pgf, \ 26 figures/pykeExecutor \ 27 figures/pykeCFAExecutor \ 28 figures/nasusExecutor \ 29 figures/nasusCFAExecutor \ 30 figures/pykeMatrix \ 31 figures/pykeCFAMatrix \ 32 figures/nasusMatrix \ 33 figures/nasusCFAMatrix \ 34 figures/pykeRepeat \ 35 figures/pykeCFARepeat \ 36 figures/nasusRepeat \ 37 figures/nasusCFARepeat \ 38 figures/pykeCFABalance-One \ 39 figures/nasusCFABalance-One \ 40 figures/pykeCFABalance-Multi \ 41 figures/nasusCFABalance-Multi \ 42 figures/pyke_Aggregate_Lock_2 \ 43 figures/pyke_Aggregate_Lock_4 \ 44 figures/pyke_Aggregate_Lock_8 \ 45 figures/nasus_Aggregate_Lock_2 \ 46 figures/nasus_Aggregate_Lock_4 \ 47 figures/nasus_Aggregate_Lock_8 \ 49 48 figures/nasus_Channel_Contention \ 50 49 figures/pyke_Channel_Contention \ 51 50 } 52 51 53 DATA = data/pykeSendStatic \54 data/pykeSendDynamic\55 data/pykeExecutorMem\56 data/nasusSendStatic\57 data/nasusSendDynamic\58 data/pykeExecutorMem\52 DATA = data/pykeSendStatic \ 53 data/pykeSendDynamic \ 54 data/pykeExecutorMem \ 55 data/nasusSendStatic \ 56 data/nasusSendDynamic \ 57 data/pykeExecutorMem \ 59 58 60 PICTURES = ${addsuffix .tikz, \61 diagrams/standard_actor \62 diagrams/inverted_actor \63 diagrams/gulp \64 diagrams/chain_swap \65 diagrams/M_to_one_swap \66 diagrams/acyclic_swap \67 diagrams/cyclic_swap \59 PICTURES = ${addsuffix .tikz, \ 60 diagrams/standard_actor \ 61 diagrams/inverted_actor \ 62 diagrams/gulp \ 63 diagrams/chain_swap \ 64 diagrams/M_to_one_swap \ 65 diagrams/acyclic_swap \ 66 diagrams/cyclic_swap \ 68 67 } 69 68 … … 106 105 # Make index from *.aux entries and input index at end of document 107 106 makeglossaries -q -s ${Build}/${basename $@}.ist ${Build}/${basename $@} 107 -version.sh 108 108 # Run again to finish citations 109 109 ${LaTeX} ${basename $@}.tex 110 110 111 111 112 ## Define the default recipes. -
doc/theses/colby_parsons_MMAth/benchmarks/actors/data/nasus_CFA.txt
r3982384 r6e4c44d 1 1 5 2 2 1 2 4 8 16 24 32 48 3 Longest-Victim No-Stealing Random3 CFA-LV CFA-NS CFA-R 4 4 executor 5 Longest-Victim:5 CFA-LV: 6 6 proc time (s) 7 7 1 29.22 … … 45 45 48 1.20 46 46 48 1.20 47 No-Stealing:47 CFA-NS: 48 48 proc time (s) 49 49 1 28.25 … … 87 87 48 1.18 88 88 48 1.16 89 Random:89 CFA-R: 90 90 proc time (s) 91 91 1 28.58 … … 131 131 132 132 matrix 133 Longest-Victim:133 CFA-LV: 134 134 proc time (s) 135 135 1 105.48 … … 173 173 48 2.75 174 174 48 2.96 175 No-Stealing:175 CFA-NS: 176 176 proc time (s) 177 177 1 106.01 … … 215 215 48 2.78 216 216 48 2.92 217 Random:217 CFA-R: 218 218 proc time (s) 219 219 1 105.91 … … 259 259 260 260 repeat 261 Longest-Victim:261 CFA-LV: 262 262 proc time (s) 263 263 1 1.17 … … 301 301 48 13.73 302 302 48 14.55 303 No-Stealing:303 CFA-NS: 304 304 proc time (s) 305 305 1 1.15 … … 343 343 48 13.03 344 344 48 12.83 345 Random:345 CFA-R: 346 346 proc time (s) 347 347 1 1.15 … … 387 387 388 388 balance_one 389 Longest-Victim:389 CFA-LV: 390 390 proc time (s) 391 391 1 20.06 … … 429 429 48 1.11 430 430 48 1.12 431 No-Stealing:431 CFA-NS: 432 432 proc time (s) 433 433 1 20.13 … … 471 471 48 19.95 472 472 48 20.00 473 Random:473 CFA-R: 474 474 proc time (s) 475 475 1 19.92 … … 515 515 516 516 balance_multi 517 Longest-Victim:517 CFA-LV: 518 518 proc time (s) 519 519 1 8.17 … … 557 557 48 5.75 558 558 48 5.68 559 No-Stealing:559 CFA-NS: 560 560 proc time (s) 561 561 1 8.10 … … 599 599 48 9.28 600 600 48 9.26 601 Random:601 CFA-R: 602 602 proc time (s) 603 603 1 8.08 -
doc/theses/colby_parsons_MMAth/benchmarks/actors/data/pyke_CFA.txt
r3982384 r6e4c44d 1 1 5 2 2 1 2 4 8 16 24 32 48 3 Longest-Victim No-Stealing Random3 CFA-LV CFA-NS CFA-R 4 4 executor 5 Longest-Victim:5 CFA-LV: 6 6 proc time (s) 7 7 1 29.04 … … 45 45 48 2.58 46 46 48 2.55 47 No-Stealing:47 CFA-NS: 48 48 proc time (s) 49 49 1 28.15 … … 87 87 48 2.59 88 88 48 2.60 89 Random:89 CFA-R: 90 90 proc time (s) 91 91 1 29.06 … … 131 131 132 132 matrix 133 Longest-Victim:133 CFA-LV: 134 134 proc time (s) 135 135 1 127.44 … … 173 173 48 6.83 174 174 48 6.81 175 No-Stealing:175 CFA-NS: 176 176 proc time (s) 177 177 1 127.64 … … 215 215 48 6.77 216 216 48 6.74 217 Random:217 CFA-R: 218 218 proc time (s) 219 219 1 127.26 … … 259 259 260 260 repeat 261 Longest-Victim:261 CFA-LV: 262 262 proc time (s) 263 263 1 1.16 … … 301 301 48 19.75 302 302 48 19.71 303 No-Stealing:303 CFA-NS: 304 304 proc time (s) 305 305 1 1.18 … … 343 343 48 13.88 344 344 48 13.71 345 Random:345 CFA-R: 346 346 proc time (s) 347 347 1 1.18 … … 387 387 388 388 balance_one 389 Longest-Victim:389 CFA-LV: 390 390 proc time (s) 391 391 1 19.46 … … 429 429 48 2.12 430 430 48 2.17 431 No-Stealing:431 CFA-NS: 432 432 proc time (s) 433 433 1 21.00 … … 471 471 48 47.50 472 472 48 47.72 473 Random:473 CFA-R: 474 474 proc time (s) 475 475 1 20.81 … … 515 515 516 516 balance_multi 517 Longest-Victim:517 CFA-LV: 518 518 proc time (s) 519 519 1 7.94 … … 557 557 48 14.38 558 558 48 14.50 559 No-Stealing:559 CFA-NS: 560 560 proc time (s) 561 561 1 8.48 … … 599 599 48 21.50 600 600 48 21.15 601 Random:601 CFA-R: 602 602 proc time (s) 603 603 1 8.49 -
doc/theses/colby_parsons_MMAth/benchmarks/actors/plotData.py
r3982384 r6e4c44d 2 2 import sys 3 3 import time 4 import itertools5 4 import matplotlib.pyplot as plt 6 5 import matplotlib.ticker as ticks … … 18 17 'text.usetex': True, 19 18 'pgf.rcfonts': False, 20 'font.size': 1621 19 }) 22 marker = itertools.cycle(('o', 's', 'D', 'x', 'p', '^', 'h', '*', 'v' ))23 20 24 21 readfile = open(sys.argv[1], "r") … … 165 162 plt.xlabel("Cores") 166 163 for idx, arr in enumerate(data): 167 plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker= next(marker))164 plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker='o' ) 168 165 if currBench == Bench.Executor or currBench == Bench.Matrix or currBench == Bench.Balance_One or currBench == Bench.Repeat: 169 166 plt.yscale("log") -
doc/theses/colby_parsons_MMAth/benchmarks/channels/plotData.py
r3982384 r6e4c44d 2 2 import sys 3 3 import time 4 import itertools5 4 import matplotlib.pyplot as plt 6 5 import matplotlib.ticker as ticks … … 18 17 'text.usetex': True, 19 18 'pgf.rcfonts': False, 20 'font.size': 1621 19 }) 22 marker = itertools.cycle(('o', 's', 'D', 'x', 'p', '^', 'h', '*', 'v' ))23 20 24 21 readfile = open(sys.argv[1], "r") … … 73 70 if currBench == Bench.Unset: 74 71 if line == "contend:": 75 name = "C hannel Contention"72 name = "Contend" 76 73 currBench = Bench.Contend 77 74 elif line == "zero:": … … 129 126 plt.xlabel("Cores") 130 127 for idx, arr in enumerate(data): 131 plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker= next(marker))128 plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker='o' ) 132 129 133 130 plt.yscale("log") -
doc/theses/colby_parsons_MMAth/benchmarks/mutex_stmt/plotData.py
r3982384 r6e4c44d 2 2 import sys 3 3 import time 4 import itertools5 4 import matplotlib.pyplot as plt 6 5 import matplotlib.ticker as ticks … … 18 17 'text.usetex': True, 19 18 'pgf.rcfonts': False, 20 'font.size': 1621 19 }) 22 marker = itertools.cycle(('o', 's', 'D', 'x', 'p', '^', 'h', '*', 'v' ))23 20 24 21 readfile = open(sys.argv[1], "r") … … 102 99 plt.xlabel("Cores") 103 100 for idx, arr in enumerate(data): 104 plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker= next(marker))101 plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker='o' ) 105 102 plt.yscale("log") 106 103 plt.xticks(procs) -
doc/theses/colby_parsons_MMAth/benchmarks/mutex_stmt/run
r3982384 r6e4c44d 96 96 97 97 # toggle benchmarks 98 order=${ false}98 order=${true} 99 99 rand=${true} 100 100 baseline=${true} -
doc/theses/colby_parsons_MMAth/code/swap_queues.cfa
r3982384 r6e4c44d 1 // sequential equivalent swap 2 void swap( uint victim_idx, uint my_idx ) { 3 // Step 0: 1 // this is a code stub and will not compile 2 3 // tries to atomically swap two queues and returns 0p if the swap failed 4 // returns ptr to newly owned queue if swap succeeds 5 static inline work_queue * try_swap_queues( worker & this, unsigned int victim_idx, unsigned int my_idx ) with(this) { 4 6 work_queue * my_queue = request_queues[my_idx]; 5 work_queue * vic_queue = request_queues[victim_idx]; 6 // Step 2: 7 request_queues[my_idx] = 0p; 8 // Step 3: 9 request_queues[victim_idx] = my_queue; 10 // Step 4: 11 request_queues[my_idx] = vic_queue; 7 work_queue * other_queue = request_queues[victim_idx]; 8 9 // if either queue is 0p then they are in the process of being stolen 10 if ( other_queue == 0p || my_queue == 0p ) return 0p; 11 12 // try to set our queue ptr to be 0p. If it fails someone moved our queue so return false 13 if ( !__atomic_compare_exchange_n( &request_queues[my_idx], &my_queue, 0p, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST ) ) 14 return 0p; 15 16 // try to set other queue ptr to be our queue ptr. If it fails someone moved the other queue so fix up then return false 17 if ( !__atomic_compare_exchange_n( &request_queues[victim_idx], &other_queue, my_queue, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST ) ) { 18 /* paranoid */ verify( request_queues[my_idx] == 0p ); 19 request_queues[my_idx] = my_queue; // reset my queue ptr back to appropriate val 20 return 0p; 21 } 22 23 // we have successfully swapped and since our queue is 0p no one will touch it so write back new queue ptr non atomically 24 request_queues[my_idx] = other_queue; // last write does not need to be atomic 25 return other_queue; 12 26 } 13 27 … … 21 35 22 36 bool try_swap_queues( worker & this, uint victim_idx, uint my_idx ) with(this) { 23 // Step 0:24 // request_queues is the shared array of all sharded queues25 37 work_queue * my_queue = request_queues[my_idx]; 26 38 work_queue * vic_queue = request_queues[victim_idx]; 27 39 28 // Step 1:29 40 // If either queue is 0p then they are in the process of being stolen 30 41 // 0p is CForAll's equivalent of C++'s nullptr 31 if ( vic_queue == 0p ) return false;42 if ( vic_queue == 0p || my_queue == 0p ) return false; 32 43 33 // Step 2: 34 // Try to set thief's queue ptr to be 0p. 35 // If this CAS fails someone stole thief's queue so return false 44 // Try to set our queue ptr to be 0p. 45 // If this CAS fails someone moved our queue so return false 36 46 if ( !CAS( &request_queues[my_idx], &my_queue, 0p ) ) 37 47 return false; 38 39 // Step 3: 40 // Try to set victim queue ptr to be thief's queue ptr. 41 // If it fails someone stole the other queue, so fix up then return false 48 49 // Try to set other queue ptr to be our queue ptr. 50 // If it fails someone moved the other queue, so fix up then return false 42 51 if ( !CAS( &request_queues[victim_idx], &vic_queue, my_queue ) ) { 43 52 request_queues[my_idx] = my_queue; // reset queue ptr back to prev val … … 45 54 } 46 55 47 // Step 4:48 56 // Successfully swapped. 49 // Thief's ptr is 0p so no one will touch it 50 // Write back without CAS is safe 57 // Our queue is 0p so no one will touch it so write back without CAS is safe 51 58 request_queues[my_idx] = vic_queue; 52 59 return true; -
doc/theses/colby_parsons_MMAth/figures/nasus_Aggregate_Lock_2.pgf
r3982384 r6e4c44d 77 77 \pgfsetstrokecolor{textcolor}% 78 78 \pgfsetfillcolor{textcolor}% 79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 2\)}%79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 2\)}% 80 80 \end{pgfscope}% 81 81 \begin{pgfscope}% … … 102 102 \pgfsetstrokecolor{textcolor}% 103 103 \pgfsetfillcolor{textcolor}% 104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 4\)}%104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 4\)}% 105 105 \end{pgfscope}% 106 106 \begin{pgfscope}% … … 127 127 \pgfsetstrokecolor{textcolor}% 128 128 \pgfsetfillcolor{textcolor}% 129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 8\)}%129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 8\)}% 130 130 \end{pgfscope}% 131 131 \begin{pgfscope}% … … 152 152 \pgfsetstrokecolor{textcolor}% 153 153 \pgfsetfillcolor{textcolor}% 154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 16\)}%154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 16\)}% 155 155 \end{pgfscope}% 156 156 \begin{pgfscope}% … … 177 177 \pgfsetstrokecolor{textcolor}% 178 178 \pgfsetfillcolor{textcolor}% 179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 24\)}%179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 24\)}% 180 180 \end{pgfscope}% 181 181 \begin{pgfscope}% … … 202 202 \pgfsetstrokecolor{textcolor}% 203 203 \pgfsetfillcolor{textcolor}% 204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 32\)}%204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 32\)}% 205 205 \end{pgfscope}% 206 206 \begin{pgfscope}% … … 208 208 \pgfsetstrokecolor{textcolor}% 209 209 \pgfsetfillcolor{textcolor}% 210 \pgftext[x=3.280000in,y=0. 161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}%210 \pgftext[x=3.280000in,y=0.251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}% 211 211 \end{pgfscope}% 212 212 \begin{pgfscope}% … … 233 233 \pgfsetstrokecolor{textcolor}% 234 234 \pgfsetfillcolor{textcolor}% 235 \pgftext[x=0. 399655in,y=1.057810in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{5}\)}%235 \pgftext[x=0.501581in,y=1.092918in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{5}\)}% 236 236 \end{pgfscope}% 237 237 \begin{pgfscope}% … … 258 258 \pgfsetstrokecolor{textcolor}% 259 259 \pgfsetfillcolor{textcolor}% 260 \pgftext[x=0. 399655in,y=2.018954in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{6}\)}%260 \pgftext[x=0.501581in,y=2.054062in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{6}\)}% 261 261 \end{pgfscope}% 262 262 \begin{pgfscope}% … … 283 283 \pgfsetstrokecolor{textcolor}% 284 284 \pgfsetfillcolor{textcolor}% 285 \pgftext[x=0. 399655in,y=2.980099in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{7}\)}%285 \pgftext[x=0.501581in,y=3.015207in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{7}\)}% 286 286 \end{pgfscope}% 287 287 \begin{pgfscope}% … … 308 308 \pgfsetstrokecolor{textcolor}% 309 309 \pgfsetfillcolor{textcolor}% 310 \pgftext[x=0. 399655in,y=3.941243in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{8}\)}%310 \pgftext[x=0.501581in,y=3.976351in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{8}\)}% 311 311 \end{pgfscope}% 312 312 \begin{pgfscope}% … … 903 903 \pgfsetstrokecolor{textcolor}% 904 904 \pgfsetfillcolor{textcolor}% 905 \pgftext[x=0. 344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (entries)}%905 \pgftext[x=0.446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (entries)}% 906 906 \end{pgfscope}% 907 907 \begin{pgfscope}% … … 1492 1492 \end{pgfscope}% 1493 1493 \begin{pgfscope}% 1494 \pgfsys@transformshift{3.129697in}{ -3.129697in}%1494 \pgfsys@transformshift{3.129697in}{0in}% 1495 1495 \pgfsys@useobject{currentmarker}{}% 1496 1496 \end{pgfscope}% … … 1632 1632 \pgfusepath{clip}% 1633 1633 \pgfsetbuttcap% 1634 \pgfset miterjoin%1634 \pgfsetroundjoin% 1635 1635 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1636 1636 \pgfsetfillcolor{currentfill}% 1637 1637 \pgfsetlinewidth{1.003750pt}% 1638 1638 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1639 \pgfsetstrokecolor{currentstroke}%1640 \pgfsetdash{}{0pt}%1641 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%1642 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}%1643 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%1644 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%1645 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}%1646 \pgfpathclose%1647 \pgfusepath{stroke,fill}%1648 }%1649 \begin{pgfscope}%1650 \pgfsys@transformshift{1.025455in}{3.944983in}%1651 \pgfsys@useobject{currentmarker}{}%1652 \end{pgfscope}%1653 \begin{pgfscope}%1654 \pgfsys@transformshift{1.326061in}{3.977510in}%1655 \pgfsys@useobject{currentmarker}{}%1656 \end{pgfscope}%1657 \begin{pgfscope}%1658 \pgfsys@transformshift{1.927273in}{3.512430in}%1659 \pgfsys@useobject{currentmarker}{}%1660 \end{pgfscope}%1661 \begin{pgfscope}%1662 \pgfsys@transformshift{3.129697in}{3.352962in}%1663 \pgfsys@useobject{currentmarker}{}%1664 \end{pgfscope}%1665 \begin{pgfscope}%1666 \pgfsys@transformshift{4.332121in}{3.334197in}%1667 \pgfsys@useobject{currentmarker}{}%1668 \end{pgfscope}%1669 \begin{pgfscope}%1670 \pgfsys@transformshift{5.534545in}{3.317793in}%1671 \pgfsys@useobject{currentmarker}{}%1672 \end{pgfscope}%1673 \end{pgfscope}%1674 \begin{pgfscope}%1675 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%1676 \pgfusepath{clip}%1677 \pgfsetrectcap%1678 \pgfsetroundjoin%1679 \pgfsetlinewidth{1.505625pt}%1680 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%1681 \pgfsetstrokecolor{currentstroke}%1682 \pgfsetdash{}{0pt}%1683 \pgfpathmoveto{\pgfqpoint{1.025455in}{3.858276in}}%1684 \pgfpathlineto{\pgfqpoint{1.326061in}{3.706065in}}%1685 \pgfpathlineto{\pgfqpoint{1.927273in}{3.410611in}}%1686 \pgfpathlineto{\pgfqpoint{3.129697in}{3.314183in}}%1687 \pgfpathlineto{\pgfqpoint{4.332121in}{3.289120in}}%1688 \pgfpathlineto{\pgfqpoint{5.534545in}{3.271348in}}%1689 \pgfusepath{stroke}%1690 \end{pgfscope}%1691 \begin{pgfscope}%1692 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%1693 \pgfusepath{clip}%1694 \pgfsetbuttcap%1695 \pgfsetmiterjoin%1696 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%1697 \pgfsetfillcolor{currentfill}%1698 \pgfsetlinewidth{1.003750pt}%1699 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%1700 \pgfsetstrokecolor{currentstroke}%1701 \pgfsetdash{}{0pt}%1702 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.058926in}{-0.058926in}}{\pgfqpoint{0.058926in}{0.058926in}}{%1703 \pgfpathmoveto{\pgfqpoint{-0.000000in}{-0.058926in}}%1704 \pgfpathlineto{\pgfqpoint{0.058926in}{0.000000in}}%1705 \pgfpathlineto{\pgfqpoint{0.000000in}{0.058926in}}%1706 \pgfpathlineto{\pgfqpoint{-0.058926in}{0.000000in}}%1707 \pgfpathclose%1708 \pgfusepath{stroke,fill}%1709 }%1710 \begin{pgfscope}%1711 \pgfsys@transformshift{1.025455in}{3.858276in}%1712 \pgfsys@useobject{currentmarker}{}%1713 \end{pgfscope}%1714 \begin{pgfscope}%1715 \pgfsys@transformshift{1.326061in}{3.706065in}%1716 \pgfsys@useobject{currentmarker}{}%1717 \end{pgfscope}%1718 \begin{pgfscope}%1719 \pgfsys@transformshift{1.927273in}{3.410611in}%1720 \pgfsys@useobject{currentmarker}{}%1721 \end{pgfscope}%1722 \begin{pgfscope}%1723 \pgfsys@transformshift{3.129697in}{3.314183in}%1724 \pgfsys@useobject{currentmarker}{}%1725 \end{pgfscope}%1726 \begin{pgfscope}%1727 \pgfsys@transformshift{4.332121in}{3.289120in}%1728 \pgfsys@useobject{currentmarker}{}%1729 \end{pgfscope}%1730 \begin{pgfscope}%1731 \pgfsys@transformshift{5.534545in}{3.271348in}%1732 \pgfsys@useobject{currentmarker}{}%1733 \end{pgfscope}%1734 \end{pgfscope}%1735 \begin{pgfscope}%1736 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%1737 \pgfusepath{clip}%1738 \pgfsetrectcap%1739 \pgfsetroundjoin%1740 \pgfsetlinewidth{1.505625pt}%1741 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%1742 \pgfsetstrokecolor{currentstroke}%1743 \pgfsetdash{}{0pt}%1744 \pgfpathmoveto{\pgfqpoint{1.025455in}{4.050730in}}%1745 \pgfpathlineto{\pgfqpoint{1.326061in}{2.770511in}}%1746 \pgfpathlineto{\pgfqpoint{1.927273in}{2.067529in}}%1747 \pgfpathlineto{\pgfqpoint{3.129697in}{0.864067in}}%1748 \pgfpathlineto{\pgfqpoint{4.332121in}{0.696000in}}%1749 \pgfpathlineto{\pgfqpoint{5.534545in}{1.325424in}}%1750 \pgfusepath{stroke}%1751 \end{pgfscope}%1752 \begin{pgfscope}%1753 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%1754 \pgfusepath{clip}%1755 \pgfsetbuttcap%1756 \pgfsetroundjoin%1757 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%1758 \pgfsetfillcolor{currentfill}%1759 \pgfsetlinewidth{1.003750pt}%1760 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%1761 \pgfsetstrokecolor{currentstroke}%1762 \pgfsetdash{}{0pt}%1763 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%1764 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}%1765 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%1766 \pgfpathmoveto{\pgfqpoint{-0.041667in}{0.041667in}}%1767 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%1768 \pgfusepath{stroke,fill}%1769 }%1770 \begin{pgfscope}%1771 \pgfsys@transformshift{1.025455in}{4.050730in}%1772 \pgfsys@useobject{currentmarker}{}%1773 \end{pgfscope}%1774 \begin{pgfscope}%1775 \pgfsys@transformshift{1.326061in}{2.770511in}%1776 \pgfsys@useobject{currentmarker}{}%1777 \end{pgfscope}%1778 \begin{pgfscope}%1779 \pgfsys@transformshift{1.927273in}{2.067529in}%1780 \pgfsys@useobject{currentmarker}{}%1781 \end{pgfscope}%1782 \begin{pgfscope}%1783 \pgfsys@transformshift{3.129697in}{0.864067in}%1784 \pgfsys@useobject{currentmarker}{}%1785 \end{pgfscope}%1786 \begin{pgfscope}%1787 \pgfsys@transformshift{4.332121in}{0.696000in}%1788 \pgfsys@useobject{currentmarker}{}%1789 \end{pgfscope}%1790 \begin{pgfscope}%1791 \pgfsys@transformshift{5.534545in}{1.325424in}%1792 \pgfsys@useobject{currentmarker}{}%1793 \end{pgfscope}%1794 \end{pgfscope}%1795 \begin{pgfscope}%1796 \pgfsetrectcap%1797 \pgfsetmiterjoin%1798 \pgfsetlinewidth{0.803000pt}%1799 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%1800 \pgfsetstrokecolor{currentstroke}%1801 \pgfsetdash{}{0pt}%1802 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%1803 \pgfpathlineto{\pgfqpoint{0.800000in}{4.224000in}}%1804 \pgfusepath{stroke}%1805 \end{pgfscope}%1806 \begin{pgfscope}%1807 \pgfsetrectcap%1808 \pgfsetmiterjoin%1809 \pgfsetlinewidth{0.803000pt}%1810 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%1811 \pgfsetstrokecolor{currentstroke}%1812 \pgfsetdash{}{0pt}%1813 \pgfpathmoveto{\pgfqpoint{5.760000in}{0.528000in}}%1814 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%1815 \pgfusepath{stroke}%1816 \end{pgfscope}%1817 \begin{pgfscope}%1818 \pgfsetrectcap%1819 \pgfsetmiterjoin%1820 \pgfsetlinewidth{0.803000pt}%1821 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%1822 \pgfsetstrokecolor{currentstroke}%1823 \pgfsetdash{}{0pt}%1824 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%1825 \pgfpathlineto{\pgfqpoint{5.760000in}{0.528000in}}%1826 \pgfusepath{stroke}%1827 \end{pgfscope}%1828 \begin{pgfscope}%1829 \pgfsetrectcap%1830 \pgfsetmiterjoin%1831 \pgfsetlinewidth{0.803000pt}%1832 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%1833 \pgfsetstrokecolor{currentstroke}%1834 \pgfsetdash{}{0pt}%1835 \pgfpathmoveto{\pgfqpoint{0.800000in}{4.224000in}}%1836 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%1837 \pgfusepath{stroke}%1838 \end{pgfscope}%1839 \begin{pgfscope}%1840 \definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%1841 \pgfsetstrokecolor{textcolor}%1842 \pgfsetfillcolor{textcolor}%1843 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{19.200000}{23.040000}\selectfont Aggregate Lock Benchmark: 2 Locks}%1844 \end{pgfscope}%1845 \begin{pgfscope}%1846 \pgfsetbuttcap%1847 \pgfsetmiterjoin%1848 \definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}%1849 \pgfsetfillcolor{currentfill}%1850 \pgfsetfillopacity{0.800000}%1851 \pgfsetlinewidth{1.003750pt}%1852 \definecolor{currentstroke}{rgb}{0.800000,0.800000,0.800000}%1853 \pgfsetstrokecolor{currentstroke}%1854 \pgfsetstrokeopacity{0.800000}%1855 \pgfsetdash{}{0pt}%1856 \pgfpathmoveto{\pgfqpoint{3.602702in}{1.693747in}}%1857 \pgfpathlineto{\pgfqpoint{5.604444in}{1.693747in}}%1858 \pgfpathquadraticcurveto{\pgfqpoint{5.648889in}{1.693747in}}{\pgfqpoint{5.648889in}{1.738192in}}%1859 \pgfpathlineto{\pgfqpoint{5.648889in}{3.013808in}}%1860 \pgfpathquadraticcurveto{\pgfqpoint{5.648889in}{3.058253in}}{\pgfqpoint{5.604444in}{3.058253in}}%1861 \pgfpathlineto{\pgfqpoint{3.602702in}{3.058253in}}%1862 \pgfpathquadraticcurveto{\pgfqpoint{3.558257in}{3.058253in}}{\pgfqpoint{3.558257in}{3.013808in}}%1863 \pgfpathlineto{\pgfqpoint{3.558257in}{1.738192in}}%1864 \pgfpathquadraticcurveto{\pgfqpoint{3.558257in}{1.693747in}}{\pgfqpoint{3.602702in}{1.693747in}}%1865 \pgfpathclose%1866 \pgfusepath{stroke,fill}%1867 \end{pgfscope}%1868 \begin{pgfscope}%1869 \pgfsetbuttcap%1870 \pgfsetroundjoin%1871 \pgfsetlinewidth{1.505625pt}%1872 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%1873 \pgfsetstrokecolor{currentstroke}%1874 \pgfsetdash{}{0pt}%1875 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.769364in}}%1876 \pgfpathlineto{\pgfqpoint{3.869368in}{2.991586in}}%1877 \pgfusepath{stroke}%1878 \end{pgfscope}%1879 \begin{pgfscope}%1880 \pgfsetbuttcap%1881 \pgfsetroundjoin%1882 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%1883 \pgfsetfillcolor{currentfill}%1884 \pgfsetlinewidth{1.003750pt}%1885 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%1886 \pgfsetstrokecolor{currentstroke}%1887 \pgfsetdash{}{0pt}%1888 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%1889 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%1890 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%1891 \pgfusepath{stroke,fill}%1892 }%1893 \begin{pgfscope}%1894 \pgfsys@transformshift{3.869368in}{2.769364in}%1895 \pgfsys@useobject{currentmarker}{}%1896 \end{pgfscope}%1897 \end{pgfscope}%1898 \begin{pgfscope}%1899 \pgfsetbuttcap%1900 \pgfsetroundjoin%1901 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%1902 \pgfsetfillcolor{currentfill}%1903 \pgfsetlinewidth{1.003750pt}%1904 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%1905 \pgfsetstrokecolor{currentstroke}%1906 \pgfsetdash{}{0pt}%1907 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%1908 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%1909 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%1910 \pgfusepath{stroke,fill}%1911 }%1912 \begin{pgfscope}%1913 \pgfsys@transformshift{3.869368in}{2.991586in}%1914 \pgfsys@useobject{currentmarker}{}%1915 \end{pgfscope}%1916 \end{pgfscope}%1917 \begin{pgfscope}%1918 \pgfsetrectcap%1919 \pgfsetroundjoin%1920 \pgfsetlinewidth{1.505625pt}%1921 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%1922 \pgfsetstrokecolor{currentstroke}%1923 \pgfsetdash{}{0pt}%1924 \pgfpathmoveto{\pgfqpoint{3.647146in}{2.880475in}}%1925 \pgfpathlineto{\pgfqpoint{4.091591in}{2.880475in}}%1926 \pgfusepath{stroke}%1927 \end{pgfscope}%1928 \begin{pgfscope}%1929 \pgfsetbuttcap%1930 \pgfsetroundjoin%1931 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%1932 \pgfsetfillcolor{currentfill}%1933 \pgfsetlinewidth{1.003750pt}%1934 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%1935 1639 \pgfsetstrokecolor{currentstroke}% 1936 1640 \pgfsetdash{}{0pt}% … … 1949 1653 }% 1950 1654 \begin{pgfscope}% 1951 \pgfsys@transformshift{3.869368in}{2.880475in}% 1952 \pgfsys@useobject{currentmarker}{}% 1953 \end{pgfscope}% 1655 \pgfsys@transformshift{1.025455in}{3.944983in}% 1656 \pgfsys@useobject{currentmarker}{}% 1657 \end{pgfscope}% 1658 \begin{pgfscope}% 1659 \pgfsys@transformshift{1.326061in}{3.977510in}% 1660 \pgfsys@useobject{currentmarker}{}% 1661 \end{pgfscope}% 1662 \begin{pgfscope}% 1663 \pgfsys@transformshift{1.927273in}{3.512430in}% 1664 \pgfsys@useobject{currentmarker}{}% 1665 \end{pgfscope}% 1666 \begin{pgfscope}% 1667 \pgfsys@transformshift{3.129697in}{3.352962in}% 1668 \pgfsys@useobject{currentmarker}{}% 1669 \end{pgfscope}% 1670 \begin{pgfscope}% 1671 \pgfsys@transformshift{4.332121in}{3.334197in}% 1672 \pgfsys@useobject{currentmarker}{}% 1673 \end{pgfscope}% 1674 \begin{pgfscope}% 1675 \pgfsys@transformshift{5.534545in}{3.317793in}% 1676 \pgfsys@useobject{currentmarker}{}% 1677 \end{pgfscope}% 1678 \end{pgfscope}% 1679 \begin{pgfscope}% 1680 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}% 1681 \pgfusepath{clip}% 1682 \pgfsetrectcap% 1683 \pgfsetroundjoin% 1684 \pgfsetlinewidth{1.505625pt}% 1685 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 1686 \pgfsetstrokecolor{currentstroke}% 1687 \pgfsetdash{}{0pt}% 1688 \pgfpathmoveto{\pgfqpoint{1.025455in}{3.858276in}}% 1689 \pgfpathlineto{\pgfqpoint{1.326061in}{3.706065in}}% 1690 \pgfpathlineto{\pgfqpoint{1.927273in}{3.410611in}}% 1691 \pgfpathlineto{\pgfqpoint{3.129697in}{3.314183in}}% 1692 \pgfpathlineto{\pgfqpoint{4.332121in}{3.289120in}}% 1693 \pgfpathlineto{\pgfqpoint{5.534545in}{3.271348in}}% 1694 \pgfusepath{stroke}% 1695 \end{pgfscope}% 1696 \begin{pgfscope}% 1697 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}% 1698 \pgfusepath{clip}% 1699 \pgfsetbuttcap% 1700 \pgfsetroundjoin% 1701 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 1702 \pgfsetfillcolor{currentfill}% 1703 \pgfsetlinewidth{1.003750pt}% 1704 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 1705 \pgfsetstrokecolor{currentstroke}% 1706 \pgfsetdash{}{0pt}% 1707 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 1708 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 1709 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 1710 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 1711 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 1712 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 1713 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 1714 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 1715 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 1716 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 1717 \pgfpathclose% 1718 \pgfusepath{stroke,fill}% 1719 }% 1720 \begin{pgfscope}% 1721 \pgfsys@transformshift{1.025455in}{3.858276in}% 1722 \pgfsys@useobject{currentmarker}{}% 1723 \end{pgfscope}% 1724 \begin{pgfscope}% 1725 \pgfsys@transformshift{1.326061in}{3.706065in}% 1726 \pgfsys@useobject{currentmarker}{}% 1727 \end{pgfscope}% 1728 \begin{pgfscope}% 1729 \pgfsys@transformshift{1.927273in}{3.410611in}% 1730 \pgfsys@useobject{currentmarker}{}% 1731 \end{pgfscope}% 1732 \begin{pgfscope}% 1733 \pgfsys@transformshift{3.129697in}{3.314183in}% 1734 \pgfsys@useobject{currentmarker}{}% 1735 \end{pgfscope}% 1736 \begin{pgfscope}% 1737 \pgfsys@transformshift{4.332121in}{3.289120in}% 1738 \pgfsys@useobject{currentmarker}{}% 1739 \end{pgfscope}% 1740 \begin{pgfscope}% 1741 \pgfsys@transformshift{5.534545in}{3.271348in}% 1742 \pgfsys@useobject{currentmarker}{}% 1743 \end{pgfscope}% 1744 \end{pgfscope}% 1745 \begin{pgfscope}% 1746 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}% 1747 \pgfusepath{clip}% 1748 \pgfsetrectcap% 1749 \pgfsetroundjoin% 1750 \pgfsetlinewidth{1.505625pt}% 1751 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 1752 \pgfsetstrokecolor{currentstroke}% 1753 \pgfsetdash{}{0pt}% 1754 \pgfpathmoveto{\pgfqpoint{1.025455in}{4.050730in}}% 1755 \pgfpathlineto{\pgfqpoint{1.326061in}{2.770511in}}% 1756 \pgfpathlineto{\pgfqpoint{1.927273in}{2.067529in}}% 1757 \pgfpathlineto{\pgfqpoint{3.129697in}{0.864067in}}% 1758 \pgfpathlineto{\pgfqpoint{4.332121in}{0.696000in}}% 1759 \pgfpathlineto{\pgfqpoint{5.534545in}{1.325424in}}% 1760 \pgfusepath{stroke}% 1761 \end{pgfscope}% 1762 \begin{pgfscope}% 1763 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}% 1764 \pgfusepath{clip}% 1765 \pgfsetbuttcap% 1766 \pgfsetroundjoin% 1767 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 1768 \pgfsetfillcolor{currentfill}% 1769 \pgfsetlinewidth{1.003750pt}% 1770 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 1771 \pgfsetstrokecolor{currentstroke}% 1772 \pgfsetdash{}{0pt}% 1773 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 1774 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 1775 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 1776 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 1777 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 1778 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 1779 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 1780 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 1781 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 1782 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 1783 \pgfpathclose% 1784 \pgfusepath{stroke,fill}% 1785 }% 1786 \begin{pgfscope}% 1787 \pgfsys@transformshift{1.025455in}{4.050730in}% 1788 \pgfsys@useobject{currentmarker}{}% 1789 \end{pgfscope}% 1790 \begin{pgfscope}% 1791 \pgfsys@transformshift{1.326061in}{2.770511in}% 1792 \pgfsys@useobject{currentmarker}{}% 1793 \end{pgfscope}% 1794 \begin{pgfscope}% 1795 \pgfsys@transformshift{1.927273in}{2.067529in}% 1796 \pgfsys@useobject{currentmarker}{}% 1797 \end{pgfscope}% 1798 \begin{pgfscope}% 1799 \pgfsys@transformshift{3.129697in}{0.864067in}% 1800 \pgfsys@useobject{currentmarker}{}% 1801 \end{pgfscope}% 1802 \begin{pgfscope}% 1803 \pgfsys@transformshift{4.332121in}{0.696000in}% 1804 \pgfsys@useobject{currentmarker}{}% 1805 \end{pgfscope}% 1806 \begin{pgfscope}% 1807 \pgfsys@transformshift{5.534545in}{1.325424in}% 1808 \pgfsys@useobject{currentmarker}{}% 1809 \end{pgfscope}% 1810 \end{pgfscope}% 1811 \begin{pgfscope}% 1812 \pgfsetrectcap% 1813 \pgfsetmiterjoin% 1814 \pgfsetlinewidth{0.803000pt}% 1815 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 1816 \pgfsetstrokecolor{currentstroke}% 1817 \pgfsetdash{}{0pt}% 1818 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}% 1819 \pgfpathlineto{\pgfqpoint{0.800000in}{4.224000in}}% 1820 \pgfusepath{stroke}% 1821 \end{pgfscope}% 1822 \begin{pgfscope}% 1823 \pgfsetrectcap% 1824 \pgfsetmiterjoin% 1825 \pgfsetlinewidth{0.803000pt}% 1826 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 1827 \pgfsetstrokecolor{currentstroke}% 1828 \pgfsetdash{}{0pt}% 1829 \pgfpathmoveto{\pgfqpoint{5.760000in}{0.528000in}}% 1830 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}% 1831 \pgfusepath{stroke}% 1832 \end{pgfscope}% 1833 \begin{pgfscope}% 1834 \pgfsetrectcap% 1835 \pgfsetmiterjoin% 1836 \pgfsetlinewidth{0.803000pt}% 1837 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 1838 \pgfsetstrokecolor{currentstroke}% 1839 \pgfsetdash{}{0pt}% 1840 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}% 1841 \pgfpathlineto{\pgfqpoint{5.760000in}{0.528000in}}% 1842 \pgfusepath{stroke}% 1843 \end{pgfscope}% 1844 \begin{pgfscope}% 1845 \pgfsetrectcap% 1846 \pgfsetmiterjoin% 1847 \pgfsetlinewidth{0.803000pt}% 1848 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 1849 \pgfsetstrokecolor{currentstroke}% 1850 \pgfsetdash{}{0pt}% 1851 \pgfpathmoveto{\pgfqpoint{0.800000in}{4.224000in}}% 1852 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}% 1853 \pgfusepath{stroke}% 1954 1854 \end{pgfscope}% 1955 1855 \begin{pgfscope}% … … 1957 1857 \pgfsetstrokecolor{textcolor}% 1958 1858 \pgfsetfillcolor{textcolor}% 1959 \pgftext[x=4.269368in,y=2.802697in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-baseline}% 1960 \end{pgfscope}% 1961 \begin{pgfscope}% 1962 \pgfsetbuttcap% 1963 \pgfsetroundjoin% 1964 \pgfsetlinewidth{1.505625pt}% 1965 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1966 \pgfsetstrokecolor{currentstroke}% 1967 \pgfsetdash{}{0pt}% 1968 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.444904in}}% 1969 \pgfpathlineto{\pgfqpoint{3.869368in}{2.667126in}}% 1970 \pgfusepath{stroke}% 1971 \end{pgfscope}% 1972 \begin{pgfscope}% 1973 \pgfsetbuttcap% 1974 \pgfsetroundjoin% 1975 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1976 \pgfsetfillcolor{currentfill}% 1977 \pgfsetlinewidth{1.003750pt}% 1978 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1859 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{12.000000}{14.400000}\selectfont Aggregate Lock Benchmark: 2 Locks}% 1860 \end{pgfscope}% 1861 \begin{pgfscope}% 1862 \pgfsetbuttcap% 1863 \pgfsetmiterjoin% 1864 \definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}% 1865 \pgfsetfillcolor{currentfill}% 1866 \pgfsetfillopacity{0.800000}% 1867 \pgfsetlinewidth{1.003750pt}% 1868 \definecolor{currentstroke}{rgb}{0.800000,0.800000,0.800000}% 1869 \pgfsetstrokecolor{currentstroke}% 1870 \pgfsetstrokeopacity{0.800000}% 1871 \pgfsetdash{}{0pt}% 1872 \pgfpathmoveto{\pgfqpoint{4.403517in}{1.967821in}}% 1873 \pgfpathlineto{\pgfqpoint{5.662778in}{1.967821in}}% 1874 \pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{1.967821in}}{\pgfqpoint{5.690556in}{1.995599in}}% 1875 \pgfpathlineto{\pgfqpoint{5.690556in}{2.756401in}}% 1876 \pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{2.784179in}}{\pgfqpoint{5.662778in}{2.784179in}}% 1877 \pgfpathlineto{\pgfqpoint{4.403517in}{2.784179in}}% 1878 \pgfpathquadraticcurveto{\pgfqpoint{4.375739in}{2.784179in}}{\pgfqpoint{4.375739in}{2.756401in}}% 1879 \pgfpathlineto{\pgfqpoint{4.375739in}{1.995599in}}% 1880 \pgfpathquadraticcurveto{\pgfqpoint{4.375739in}{1.967821in}}{\pgfqpoint{4.403517in}{1.967821in}}% 1881 \pgfpathclose% 1882 \pgfusepath{stroke,fill}% 1883 \end{pgfscope}% 1884 \begin{pgfscope}% 1885 \pgfsetbuttcap% 1886 \pgfsetroundjoin% 1887 \pgfsetlinewidth{1.505625pt}% 1888 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1889 \pgfsetstrokecolor{currentstroke}% 1890 \pgfsetdash{}{0pt}% 1891 \pgfpathmoveto{\pgfqpoint{4.570184in}{2.610568in}}% 1892 \pgfpathlineto{\pgfqpoint{4.570184in}{2.749457in}}% 1893 \pgfusepath{stroke}% 1894 \end{pgfscope}% 1895 \begin{pgfscope}% 1896 \pgfsetbuttcap% 1897 \pgfsetroundjoin% 1898 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 1899 \pgfsetfillcolor{currentfill}% 1900 \pgfsetlinewidth{1.003750pt}% 1901 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1979 1902 \pgfsetstrokecolor{currentstroke}% 1980 1903 \pgfsetdash{}{0pt}% … … 1985 1908 }% 1986 1909 \begin{pgfscope}% 1987 \pgfsys@transformshift{ 3.869368in}{2.444904in}%1988 \pgfsys@useobject{currentmarker}{}% 1989 \end{pgfscope}% 1990 \end{pgfscope}% 1991 \begin{pgfscope}% 1992 \pgfsetbuttcap% 1993 \pgfsetroundjoin% 1994 \definecolor{currentfill}{rgb}{ 1.000000,0.498039,0.054902}%1995 \pgfsetfillcolor{currentfill}% 1996 \pgfsetlinewidth{1.003750pt}% 1997 \definecolor{currentstroke}{rgb}{ 1.000000,0.498039,0.054902}%1910 \pgfsys@transformshift{4.570184in}{2.610568in}% 1911 \pgfsys@useobject{currentmarker}{}% 1912 \end{pgfscope}% 1913 \end{pgfscope}% 1914 \begin{pgfscope}% 1915 \pgfsetbuttcap% 1916 \pgfsetroundjoin% 1917 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 1918 \pgfsetfillcolor{currentfill}% 1919 \pgfsetlinewidth{1.003750pt}% 1920 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1998 1921 \pgfsetstrokecolor{currentstroke}% 1999 1922 \pgfsetdash{}{0pt}% … … 2004 1927 }% 2005 1928 \begin{pgfscope}% 2006 \pgfsys@transformshift{ 3.869368in}{2.667126in}%1929 \pgfsys@transformshift{4.570184in}{2.749457in}% 2007 1930 \pgfsys@useobject{currentmarker}{}% 2008 1931 \end{pgfscope}% … … 2012 1935 \pgfsetroundjoin% 2013 1936 \pgfsetlinewidth{1.505625pt}% 2014 \definecolor{currentstroke}{rgb}{ 1.000000,0.498039,0.054902}%2015 \pgfsetstrokecolor{currentstroke}% 2016 \pgfsetdash{}{0pt}% 2017 \pgfpathmoveto{\pgfqpoint{ 3.647146in}{2.556015in}}%2018 \pgfpathlineto{\pgfqpoint{4. 091591in}{2.556015in}}%2019 \pgfusepath{stroke}% 2020 \end{pgfscope}% 2021 \begin{pgfscope}% 2022 \pgfsetbuttcap% 2023 \pgfset miterjoin%2024 \definecolor{currentfill}{rgb}{ 1.000000,0.498039,0.054902}%2025 \pgfsetfillcolor{currentfill}% 2026 \pgfsetlinewidth{1.003750pt}% 2027 \definecolor{currentstroke}{rgb}{ 1.000000,0.498039,0.054902}%1937 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1938 \pgfsetstrokecolor{currentstroke}% 1939 \pgfsetdash{}{0pt}% 1940 \pgfpathmoveto{\pgfqpoint{4.431295in}{2.680012in}}% 1941 \pgfpathlineto{\pgfqpoint{4.709073in}{2.680012in}}% 1942 \pgfusepath{stroke}% 1943 \end{pgfscope}% 1944 \begin{pgfscope}% 1945 \pgfsetbuttcap% 1946 \pgfsetroundjoin% 1947 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 1948 \pgfsetfillcolor{currentfill}% 1949 \pgfsetlinewidth{1.003750pt}% 1950 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 2028 1951 \pgfsetstrokecolor{currentstroke}% 2029 1952 \pgfsetdash{}{0pt}% 2030 1953 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2031 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}% 2032 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}% 2033 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}% 2034 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}% 1954 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 1955 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 1956 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 1957 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 1958 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 1959 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 1960 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 1961 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 1962 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2035 1963 \pgfpathclose% 2036 1964 \pgfusepath{stroke,fill}% 2037 1965 }% 2038 1966 \begin{pgfscope}% 2039 \pgfsys@transformshift{ 3.869368in}{2.556015in}%1967 \pgfsys@transformshift{4.570184in}{2.680012in}% 2040 1968 \pgfsys@useobject{currentmarker}{}% 2041 1969 \end{pgfscope}% … … 2045 1973 \pgfsetstrokecolor{textcolor}% 2046 1974 \pgfsetfillcolor{textcolor}% 2047 \pgftext[x=4. 269368in,y=2.478238in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-baseline}%2048 \end{pgfscope}% 2049 \begin{pgfscope}% 2050 \pgfsetbuttcap% 2051 \pgfsetroundjoin% 2052 \pgfsetlinewidth{1.505625pt}% 2053 \definecolor{currentstroke}{rgb}{ 0.172549,0.627451,0.172549}%2054 \pgfsetstrokecolor{currentstroke}% 2055 \pgfsetdash{}{0pt}% 2056 \pgfpathmoveto{\pgfqpoint{ 3.869368in}{2.120444in}}%2057 \pgfpathlineto{\pgfqpoint{ 3.869368in}{2.342667in}}%2058 \pgfusepath{stroke}% 2059 \end{pgfscope}% 2060 \begin{pgfscope}% 2061 \pgfsetbuttcap% 2062 \pgfsetroundjoin% 2063 \definecolor{currentfill}{rgb}{ 0.172549,0.627451,0.172549}%2064 \pgfsetfillcolor{currentfill}% 2065 \pgfsetlinewidth{1.003750pt}% 2066 \definecolor{currentstroke}{rgb}{ 0.172549,0.627451,0.172549}%1975 \pgftext[x=4.820184in,y=2.631401in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-baseline}% 1976 \end{pgfscope}% 1977 \begin{pgfscope}% 1978 \pgfsetbuttcap% 1979 \pgfsetroundjoin% 1980 \pgfsetlinewidth{1.505625pt}% 1981 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1982 \pgfsetstrokecolor{currentstroke}% 1983 \pgfsetdash{}{0pt}% 1984 \pgfpathmoveto{\pgfqpoint{4.570184in}{2.416895in}}% 1985 \pgfpathlineto{\pgfqpoint{4.570184in}{2.555784in}}% 1986 \pgfusepath{stroke}% 1987 \end{pgfscope}% 1988 \begin{pgfscope}% 1989 \pgfsetbuttcap% 1990 \pgfsetroundjoin% 1991 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1992 \pgfsetfillcolor{currentfill}% 1993 \pgfsetlinewidth{1.003750pt}% 1994 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2067 1995 \pgfsetstrokecolor{currentstroke}% 2068 1996 \pgfsetdash{}{0pt}% … … 2073 2001 }% 2074 2002 \begin{pgfscope}% 2075 \pgfsys@transformshift{ 3.869368in}{2.120444in}%2076 \pgfsys@useobject{currentmarker}{}% 2077 \end{pgfscope}% 2078 \end{pgfscope}% 2079 \begin{pgfscope}% 2080 \pgfsetbuttcap% 2081 \pgfsetroundjoin% 2082 \definecolor{currentfill}{rgb}{ 0.172549,0.627451,0.172549}%2083 \pgfsetfillcolor{currentfill}% 2084 \pgfsetlinewidth{1.003750pt}% 2085 \definecolor{currentstroke}{rgb}{ 0.172549,0.627451,0.172549}%2003 \pgfsys@transformshift{4.570184in}{2.416895in}% 2004 \pgfsys@useobject{currentmarker}{}% 2005 \end{pgfscope}% 2006 \end{pgfscope}% 2007 \begin{pgfscope}% 2008 \pgfsetbuttcap% 2009 \pgfsetroundjoin% 2010 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 2011 \pgfsetfillcolor{currentfill}% 2012 \pgfsetlinewidth{1.003750pt}% 2013 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2086 2014 \pgfsetstrokecolor{currentstroke}% 2087 2015 \pgfsetdash{}{0pt}% … … 2092 2020 }% 2093 2021 \begin{pgfscope}% 2094 \pgfsys@transformshift{ 3.869368in}{2.342667in}%2022 \pgfsys@transformshift{4.570184in}{2.555784in}% 2095 2023 \pgfsys@useobject{currentmarker}{}% 2096 2024 \end{pgfscope}% … … 2100 2028 \pgfsetroundjoin% 2101 2029 \pgfsetlinewidth{1.505625pt}% 2102 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2103 \pgfsetstrokecolor{currentstroke}% 2104 \pgfsetdash{}{0pt}% 2105 \pgfpathmoveto{\pgfqpoint{3.647146in}{2.231556in}}% 2106 \pgfpathlineto{\pgfqpoint{4.091591in}{2.231556in}}% 2107 \pgfusepath{stroke}% 2108 \end{pgfscope}% 2109 \begin{pgfscope}% 2110 \pgfsetbuttcap% 2111 \pgfsetmiterjoin% 2112 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2113 \pgfsetfillcolor{currentfill}% 2114 \pgfsetlinewidth{1.003750pt}% 2115 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2116 \pgfsetstrokecolor{currentstroke}% 2117 \pgfsetdash{}{0pt}% 2118 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.058926in}{-0.058926in}}{\pgfqpoint{0.058926in}{0.058926in}}{% 2119 \pgfpathmoveto{\pgfqpoint{-0.000000in}{-0.058926in}}% 2120 \pgfpathlineto{\pgfqpoint{0.058926in}{0.000000in}}% 2121 \pgfpathlineto{\pgfqpoint{0.000000in}{0.058926in}}% 2122 \pgfpathlineto{\pgfqpoint{-0.058926in}{0.000000in}}% 2030 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2031 \pgfsetstrokecolor{currentstroke}% 2032 \pgfsetdash{}{0pt}% 2033 \pgfpathmoveto{\pgfqpoint{4.431295in}{2.486339in}}% 2034 \pgfpathlineto{\pgfqpoint{4.709073in}{2.486339in}}% 2035 \pgfusepath{stroke}% 2036 \end{pgfscope}% 2037 \begin{pgfscope}% 2038 \pgfsetbuttcap% 2039 \pgfsetroundjoin% 2040 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 2041 \pgfsetfillcolor{currentfill}% 2042 \pgfsetlinewidth{1.003750pt}% 2043 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2044 \pgfsetstrokecolor{currentstroke}% 2045 \pgfsetdash{}{0pt}% 2046 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2047 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2048 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2049 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2050 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2051 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2052 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2053 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2054 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2055 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2123 2056 \pgfpathclose% 2124 2057 \pgfusepath{stroke,fill}% 2125 2058 }% 2126 2059 \begin{pgfscope}% 2127 \pgfsys@transformshift{ 3.869368in}{2.231556in}%2060 \pgfsys@transformshift{4.570184in}{2.486339in}% 2128 2061 \pgfsys@useobject{currentmarker}{}% 2129 2062 \end{pgfscope}% … … 2133 2066 \pgfsetstrokecolor{textcolor}% 2134 2067 \pgfsetfillcolor{textcolor}% 2135 \pgftext[x=4. 269368in,y=2.153778in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-rand}%2136 \end{pgfscope}% 2137 \begin{pgfscope}% 2138 \pgfsetbuttcap% 2139 \pgfsetroundjoin% 2140 \pgfsetlinewidth{1.505625pt}% 2141 \definecolor{currentstroke}{rgb}{0. 839216,0.152941,0.156863}%2142 \pgfsetstrokecolor{currentstroke}% 2143 \pgfsetdash{}{0pt}% 2144 \pgfpathmoveto{\pgfqpoint{ 3.869368in}{1.795985in}}%2145 \pgfpathlineto{\pgfqpoint{ 3.869368in}{2.018207in}}%2146 \pgfusepath{stroke}% 2147 \end{pgfscope}% 2148 \begin{pgfscope}% 2149 \pgfsetbuttcap% 2150 \pgfsetroundjoin% 2151 \definecolor{currentfill}{rgb}{0. 839216,0.152941,0.156863}%2152 \pgfsetfillcolor{currentfill}% 2153 \pgfsetlinewidth{1.003750pt}% 2154 \definecolor{currentstroke}{rgb}{0. 839216,0.152941,0.156863}%2068 \pgftext[x=4.820184in,y=2.437728in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-baseline}% 2069 \end{pgfscope}% 2070 \begin{pgfscope}% 2071 \pgfsetbuttcap% 2072 \pgfsetroundjoin% 2073 \pgfsetlinewidth{1.505625pt}% 2074 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2075 \pgfsetstrokecolor{currentstroke}% 2076 \pgfsetdash{}{0pt}% 2077 \pgfpathmoveto{\pgfqpoint{4.570184in}{2.223222in}}% 2078 \pgfpathlineto{\pgfqpoint{4.570184in}{2.362111in}}% 2079 \pgfusepath{stroke}% 2080 \end{pgfscope}% 2081 \begin{pgfscope}% 2082 \pgfsetbuttcap% 2083 \pgfsetroundjoin% 2084 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2085 \pgfsetfillcolor{currentfill}% 2086 \pgfsetlinewidth{1.003750pt}% 2087 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2155 2088 \pgfsetstrokecolor{currentstroke}% 2156 2089 \pgfsetdash{}{0pt}% … … 2161 2094 }% 2162 2095 \begin{pgfscope}% 2163 \pgfsys@transformshift{ 3.869368in}{1.795985in}%2164 \pgfsys@useobject{currentmarker}{}% 2165 \end{pgfscope}% 2166 \end{pgfscope}% 2167 \begin{pgfscope}% 2168 \pgfsetbuttcap% 2169 \pgfsetroundjoin% 2170 \definecolor{currentfill}{rgb}{0. 839216,0.152941,0.156863}%2171 \pgfsetfillcolor{currentfill}% 2172 \pgfsetlinewidth{1.003750pt}% 2173 \definecolor{currentstroke}{rgb}{0. 839216,0.152941,0.156863}%2096 \pgfsys@transformshift{4.570184in}{2.223222in}% 2097 \pgfsys@useobject{currentmarker}{}% 2098 \end{pgfscope}% 2099 \end{pgfscope}% 2100 \begin{pgfscope}% 2101 \pgfsetbuttcap% 2102 \pgfsetroundjoin% 2103 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2104 \pgfsetfillcolor{currentfill}% 2105 \pgfsetlinewidth{1.003750pt}% 2106 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2174 2107 \pgfsetstrokecolor{currentstroke}% 2175 2108 \pgfsetdash{}{0pt}% … … 2180 2113 }% 2181 2114 \begin{pgfscope}% 2182 \pgfsys@transformshift{ 3.869368in}{2.018207in}%2115 \pgfsys@transformshift{4.570184in}{2.362111in}% 2183 2116 \pgfsys@useobject{currentmarker}{}% 2184 2117 \end{pgfscope}% … … 2188 2121 \pgfsetroundjoin% 2189 2122 \pgfsetlinewidth{1.505625pt}% 2190 \definecolor{currentstroke}{rgb}{0. 839216,0.152941,0.156863}%2191 \pgfsetstrokecolor{currentstroke}% 2192 \pgfsetdash{}{0pt}% 2193 \pgfpathmoveto{\pgfqpoint{ 3.647146in}{1.907096in}}%2194 \pgfpathlineto{\pgfqpoint{4. 091591in}{1.907096in}}%2195 \pgfusepath{stroke}% 2196 \end{pgfscope}% 2197 \begin{pgfscope}% 2198 \pgfsetbuttcap% 2199 \pgfsetroundjoin% 2200 \definecolor{currentfill}{rgb}{0. 839216,0.152941,0.156863}%2201 \pgfsetfillcolor{currentfill}% 2202 \pgfsetlinewidth{1.003750pt}% 2203 \definecolor{currentstroke}{rgb}{0. 839216,0.152941,0.156863}%2123 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2124 \pgfsetstrokecolor{currentstroke}% 2125 \pgfsetdash{}{0pt}% 2126 \pgfpathmoveto{\pgfqpoint{4.431295in}{2.292667in}}% 2127 \pgfpathlineto{\pgfqpoint{4.709073in}{2.292667in}}% 2128 \pgfusepath{stroke}% 2129 \end{pgfscope}% 2130 \begin{pgfscope}% 2131 \pgfsetbuttcap% 2132 \pgfsetroundjoin% 2133 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2134 \pgfsetfillcolor{currentfill}% 2135 \pgfsetlinewidth{1.003750pt}% 2136 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2204 2137 \pgfsetstrokecolor{currentstroke}% 2205 2138 \pgfsetdash{}{0pt}% 2206 2139 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2207 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}% 2208 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}% 2209 \pgfpathmoveto{\pgfqpoint{-0.041667in}{0.041667in}}% 2210 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}% 2211 \pgfusepath{stroke,fill}% 2212 }% 2213 \begin{pgfscope}% 2214 \pgfsys@transformshift{3.869368in}{1.907096in}% 2140 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2141 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2142 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2143 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2144 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2145 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2146 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2147 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2148 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2149 \pgfpathclose% 2150 \pgfusepath{stroke,fill}% 2151 }% 2152 \begin{pgfscope}% 2153 \pgfsys@transformshift{4.570184in}{2.292667in}% 2215 2154 \pgfsys@useobject{currentmarker}{}% 2216 2155 \end{pgfscope}% … … 2220 2159 \pgfsetstrokecolor{textcolor}% 2221 2160 \pgfsetfillcolor{textcolor}% 2222 \pgftext[x=4.269368in,y=1.829318in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-rand}% 2161 \pgftext[x=4.820184in,y=2.244056in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-rand}% 2162 \end{pgfscope}% 2163 \begin{pgfscope}% 2164 \pgfsetbuttcap% 2165 \pgfsetroundjoin% 2166 \pgfsetlinewidth{1.505625pt}% 2167 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2168 \pgfsetstrokecolor{currentstroke}% 2169 \pgfsetdash{}{0pt}% 2170 \pgfpathmoveto{\pgfqpoint{4.570184in}{2.029549in}}% 2171 \pgfpathlineto{\pgfqpoint{4.570184in}{2.168438in}}% 2172 \pgfusepath{stroke}% 2173 \end{pgfscope}% 2174 \begin{pgfscope}% 2175 \pgfsetbuttcap% 2176 \pgfsetroundjoin% 2177 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2178 \pgfsetfillcolor{currentfill}% 2179 \pgfsetlinewidth{1.003750pt}% 2180 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2181 \pgfsetstrokecolor{currentstroke}% 2182 \pgfsetdash{}{0pt}% 2183 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 2184 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 2185 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 2186 \pgfusepath{stroke,fill}% 2187 }% 2188 \begin{pgfscope}% 2189 \pgfsys@transformshift{4.570184in}{2.029549in}% 2190 \pgfsys@useobject{currentmarker}{}% 2191 \end{pgfscope}% 2192 \end{pgfscope}% 2193 \begin{pgfscope}% 2194 \pgfsetbuttcap% 2195 \pgfsetroundjoin% 2196 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2197 \pgfsetfillcolor{currentfill}% 2198 \pgfsetlinewidth{1.003750pt}% 2199 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2200 \pgfsetstrokecolor{currentstroke}% 2201 \pgfsetdash{}{0pt}% 2202 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 2203 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 2204 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 2205 \pgfusepath{stroke,fill}% 2206 }% 2207 \begin{pgfscope}% 2208 \pgfsys@transformshift{4.570184in}{2.168438in}% 2209 \pgfsys@useobject{currentmarker}{}% 2210 \end{pgfscope}% 2211 \end{pgfscope}% 2212 \begin{pgfscope}% 2213 \pgfsetrectcap% 2214 \pgfsetroundjoin% 2215 \pgfsetlinewidth{1.505625pt}% 2216 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2217 \pgfsetstrokecolor{currentstroke}% 2218 \pgfsetdash{}{0pt}% 2219 \pgfpathmoveto{\pgfqpoint{4.431295in}{2.098994in}}% 2220 \pgfpathlineto{\pgfqpoint{4.709073in}{2.098994in}}% 2221 \pgfusepath{stroke}% 2222 \end{pgfscope}% 2223 \begin{pgfscope}% 2224 \pgfsetbuttcap% 2225 \pgfsetroundjoin% 2226 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2227 \pgfsetfillcolor{currentfill}% 2228 \pgfsetlinewidth{1.003750pt}% 2229 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2230 \pgfsetstrokecolor{currentstroke}% 2231 \pgfsetdash{}{0pt}% 2232 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2233 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2234 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2235 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2236 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2237 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2238 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2239 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2240 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2241 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2242 \pgfpathclose% 2243 \pgfusepath{stroke,fill}% 2244 }% 2245 \begin{pgfscope}% 2246 \pgfsys@transformshift{4.570184in}{2.098994in}% 2247 \pgfsys@useobject{currentmarker}{}% 2248 \end{pgfscope}% 2249 \end{pgfscope}% 2250 \begin{pgfscope}% 2251 \definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% 2252 \pgfsetstrokecolor{textcolor}% 2253 \pgfsetfillcolor{textcolor}% 2254 \pgftext[x=4.820184in,y=2.050383in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-rand}% 2223 2255 \end{pgfscope}% 2224 2256 \end{pgfpicture}% -
doc/theses/colby_parsons_MMAth/figures/nasus_Aggregate_Lock_4.pgf
r3982384 r6e4c44d 77 77 \pgfsetstrokecolor{textcolor}% 78 78 \pgfsetfillcolor{textcolor}% 79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 2\)}%79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 2\)}% 80 80 \end{pgfscope}% 81 81 \begin{pgfscope}% … … 102 102 \pgfsetstrokecolor{textcolor}% 103 103 \pgfsetfillcolor{textcolor}% 104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 4\)}%104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 4\)}% 105 105 \end{pgfscope}% 106 106 \begin{pgfscope}% … … 127 127 \pgfsetstrokecolor{textcolor}% 128 128 \pgfsetfillcolor{textcolor}% 129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 8\)}%129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 8\)}% 130 130 \end{pgfscope}% 131 131 \begin{pgfscope}% … … 152 152 \pgfsetstrokecolor{textcolor}% 153 153 \pgfsetfillcolor{textcolor}% 154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 16\)}%154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 16\)}% 155 155 \end{pgfscope}% 156 156 \begin{pgfscope}% … … 177 177 \pgfsetstrokecolor{textcolor}% 178 178 \pgfsetfillcolor{textcolor}% 179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 24\)}%179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 24\)}% 180 180 \end{pgfscope}% 181 181 \begin{pgfscope}% … … 202 202 \pgfsetstrokecolor{textcolor}% 203 203 \pgfsetfillcolor{textcolor}% 204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 32\)}%204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 32\)}% 205 205 \end{pgfscope}% 206 206 \begin{pgfscope}% … … 208 208 \pgfsetstrokecolor{textcolor}% 209 209 \pgfsetfillcolor{textcolor}% 210 \pgftext[x=3.280000in,y=0. 161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}%210 \pgftext[x=3.280000in,y=0.251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}% 211 211 \end{pgfscope}% 212 212 \begin{pgfscope}% … … 233 233 \pgfsetstrokecolor{textcolor}% 234 234 \pgfsetfillcolor{textcolor}% 235 \pgftext[x=0. 399655in,y=0.697537in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{3}\)}%235 \pgftext[x=0.501581in,y=0.732645in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{3}\)}% 236 236 \end{pgfscope}% 237 237 \begin{pgfscope}% … … 258 258 \pgfsetstrokecolor{textcolor}% 259 259 \pgfsetfillcolor{textcolor}% 260 \pgftext[x=0. 399655in,y=1.392266in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{4}\)}%260 \pgftext[x=0.501581in,y=1.427374in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{4}\)}% 261 261 \end{pgfscope}% 262 262 \begin{pgfscope}% … … 283 283 \pgfsetstrokecolor{textcolor}% 284 284 \pgfsetfillcolor{textcolor}% 285 \pgftext[x=0. 399655in,y=2.086994in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{5}\)}%285 \pgftext[x=0.501581in,y=2.122103in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{5}\)}% 286 286 \end{pgfscope}% 287 287 \begin{pgfscope}% … … 308 308 \pgfsetstrokecolor{textcolor}% 309 309 \pgfsetfillcolor{textcolor}% 310 \pgftext[x=0. 399655in,y=2.781723in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{6}\)}%310 \pgftext[x=0.501581in,y=2.816831in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{6}\)}% 311 311 \end{pgfscope}% 312 312 \begin{pgfscope}% … … 333 333 \pgfsetstrokecolor{textcolor}% 334 334 \pgfsetfillcolor{textcolor}% 335 \pgftext[x=0. 399655in,y=3.476452in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{7}\)}%335 \pgftext[x=0.501581in,y=3.511560in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{7}\)}% 336 336 \end{pgfscope}% 337 337 \begin{pgfscope}% … … 1194 1194 \pgfsetstrokecolor{textcolor}% 1195 1195 \pgfsetfillcolor{textcolor}% 1196 \pgftext[x=0. 344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (entries)}%1196 \pgftext[x=0.446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (entries)}% 1197 1197 \end{pgfscope}% 1198 1198 \begin{pgfscope}% … … 1857 1857 \pgfusepath{clip}% 1858 1858 \pgfsetbuttcap% 1859 \pgfset miterjoin%1859 \pgfsetroundjoin% 1860 1860 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 1861 1861 \pgfsetfillcolor{currentfill}% … … 1864 1864 \pgfsetstrokecolor{currentstroke}% 1865 1865 \pgfsetdash{}{0pt}% 1866 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.039627in}{-0.033709in}}{\pgfqpoint{0.039627in}{0.041667in}}{% 1867 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 1868 \pgfpathlineto{\pgfqpoint{-0.039627in}{0.012876in}}% 1869 \pgfpathlineto{\pgfqpoint{-0.024491in}{-0.033709in}}% 1870 \pgfpathlineto{\pgfqpoint{0.024491in}{-0.033709in}}% 1871 \pgfpathlineto{\pgfqpoint{0.039627in}{0.012876in}}% 1866 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 1867 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 1868 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 1869 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 1870 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 1871 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 1872 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 1873 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 1874 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 1875 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 1872 1876 \pgfpathclose% 1873 1877 \pgfusepath{stroke,fill}% … … 1919 1923 \pgfusepath{clip}% 1920 1924 \pgfsetbuttcap% 1921 \pgfset miterjoin%1925 \pgfsetroundjoin% 1922 1926 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1923 1927 \pgfsetfillcolor{currentfill}% … … 1927 1931 \pgfsetdash{}{0pt}% 1928 1932 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 1929 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 1930 \pgfpathlineto{\pgfqpoint{-0.041667in}{-0.041667in}}% 1931 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}% 1933 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 1934 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 1935 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 1936 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 1937 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 1938 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 1939 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 1940 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 1941 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 1932 1942 \pgfpathclose% 1933 1943 \pgfusepath{stroke,fill}% … … 1979 1989 \pgfusepath{clip}% 1980 1990 \pgfsetbuttcap% 1981 \pgfset miterjoin%1991 \pgfsetroundjoin% 1982 1992 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 1983 1993 \pgfsetfillcolor{currentfill}% … … 1986 1996 \pgfsetstrokecolor{currentstroke}% 1987 1997 \pgfsetdash{}{0pt}% 1988 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.036084in}{-0.041667in}}{\pgfqpoint{0.036084in}{0.041667in}}{% 1989 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 1990 \pgfpathlineto{\pgfqpoint{-0.036084in}{0.020833in}}% 1991 \pgfpathlineto{\pgfqpoint{-0.036084in}{-0.020833in}}% 1992 \pgfpathlineto{\pgfqpoint{-0.000000in}{-0.041667in}}% 1993 \pgfpathlineto{\pgfqpoint{0.036084in}{-0.020833in}}% 1994 \pgfpathlineto{\pgfqpoint{0.036084in}{0.020833in}}% 1998 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 1999 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2000 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2001 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2002 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2003 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2004 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2005 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2006 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2007 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 1995 2008 \pgfpathclose% 1996 2009 \pgfusepath{stroke,fill}% … … 2042 2055 \pgfusepath{clip}% 2043 2056 \pgfsetbuttcap% 2044 \pgfset beveljoin%2057 \pgfsetroundjoin% 2045 2058 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2046 2059 \pgfsetfillcolor{currentfill}% … … 2049 2062 \pgfsetstrokecolor{currentstroke}% 2050 2063 \pgfsetdash{}{0pt}% 2051 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.039627in}{-0.033709in}}{\pgfqpoint{0.039627in}{0.041667in}}{% 2052 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 2053 \pgfpathlineto{\pgfqpoint{-0.009355in}{0.012876in}}% 2054 \pgfpathlineto{\pgfqpoint{-0.039627in}{0.012876in}}% 2055 \pgfpathlineto{\pgfqpoint{-0.015136in}{-0.004918in}}% 2056 \pgfpathlineto{\pgfqpoint{-0.024491in}{-0.033709in}}% 2057 \pgfpathlineto{\pgfqpoint{-0.000000in}{-0.015915in}}% 2058 \pgfpathlineto{\pgfqpoint{0.024491in}{-0.033709in}}% 2059 \pgfpathlineto{\pgfqpoint{0.015136in}{-0.004918in}}% 2060 \pgfpathlineto{\pgfqpoint{0.039627in}{0.012876in}}% 2061 \pgfpathlineto{\pgfqpoint{0.009355in}{0.012876in}}% 2064 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2065 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2066 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2067 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2068 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2069 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2070 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2071 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2072 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2073 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2062 2074 \pgfpathclose% 2063 2075 \pgfusepath{stroke,fill}% … … 2136 2148 \pgfsetstrokecolor{textcolor}% 2137 2149 \pgfsetfillcolor{textcolor}% 2138 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{1 9.200000}{23.040000}\selectfont Aggregate Lock Benchmark: 4 Locks}%2150 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{12.000000}{14.400000}\selectfont Aggregate Lock Benchmark: 4 Locks}% 2139 2151 \end{pgfscope}% 2140 2152 \begin{pgfscope}% … … 2149 2161 \pgfsetstrokeopacity{0.800000}% 2150 2162 \pgfsetdash{}{0pt}% 2151 \pgfpathmoveto{\pgfqpoint{ 3.602702in}{1.693747in}}%2152 \pgfpathlineto{\pgfqpoint{ 5.604444in}{1.693747in}}%2153 \pgfpathquadraticcurveto{\pgfqpoint{ 5.648889in}{1.693747in}}{\pgfqpoint{5.648889in}{1.738192in}}%2154 \pgfpathlineto{\pgfqpoint{ 5.648889in}{3.013808in}}%2155 \pgfpathquadraticcurveto{\pgfqpoint{ 5.648889in}{3.058253in}}{\pgfqpoint{5.604444in}{3.058253in}}%2156 \pgfpathlineto{\pgfqpoint{ 3.602702in}{3.058253in}}%2157 \pgfpathquadraticcurveto{\pgfqpoint{ 3.558257in}{3.058253in}}{\pgfqpoint{3.558257in}{3.013808in}}%2158 \pgfpathlineto{\pgfqpoint{ 3.558257in}{1.738192in}}%2159 \pgfpathquadraticcurveto{\pgfqpoint{ 3.558257in}{1.693747in}}{\pgfqpoint{3.602702in}{1.693747in}}%2163 \pgfpathmoveto{\pgfqpoint{0.897222in}{0.597444in}}% 2164 \pgfpathlineto{\pgfqpoint{2.156483in}{0.597444in}}% 2165 \pgfpathquadraticcurveto{\pgfqpoint{2.184261in}{0.597444in}}{\pgfqpoint{2.184261in}{0.625222in}}% 2166 \pgfpathlineto{\pgfqpoint{2.184261in}{1.386024in}}% 2167 \pgfpathquadraticcurveto{\pgfqpoint{2.184261in}{1.413802in}}{\pgfqpoint{2.156483in}{1.413802in}}% 2168 \pgfpathlineto{\pgfqpoint{0.897222in}{1.413802in}}% 2169 \pgfpathquadraticcurveto{\pgfqpoint{0.869444in}{1.413802in}}{\pgfqpoint{0.869444in}{1.386024in}}% 2170 \pgfpathlineto{\pgfqpoint{0.869444in}{0.625222in}}% 2171 \pgfpathquadraticcurveto{\pgfqpoint{0.869444in}{0.597444in}}{\pgfqpoint{0.897222in}{0.597444in}}% 2160 2172 \pgfpathclose% 2161 2173 \pgfusepath{stroke,fill}% … … 2168 2180 \pgfsetstrokecolor{currentstroke}% 2169 2181 \pgfsetdash{}{0pt}% 2170 \pgfpathmoveto{\pgfqpoint{ 3.869368in}{2.769364in}}%2171 \pgfpathlineto{\pgfqpoint{ 3.869368in}{2.991586in}}%2182 \pgfpathmoveto{\pgfqpoint{1.063889in}{1.240191in}}% 2183 \pgfpathlineto{\pgfqpoint{1.063889in}{1.379080in}}% 2172 2184 \pgfusepath{stroke}% 2173 2185 \end{pgfscope}% … … 2187 2199 }% 2188 2200 \begin{pgfscope}% 2189 \pgfsys@transformshift{ 3.869368in}{2.769364in}%2201 \pgfsys@transformshift{1.063889in}{1.240191in}% 2190 2202 \pgfsys@useobject{currentmarker}{}% 2191 2203 \end{pgfscope}% … … 2206 2218 }% 2207 2219 \begin{pgfscope}% 2208 \pgfsys@transformshift{ 3.869368in}{2.991586in}%2220 \pgfsys@transformshift{1.063889in}{1.379080in}% 2209 2221 \pgfsys@useobject{currentmarker}{}% 2210 2222 \end{pgfscope}% … … 2217 2229 \pgfsetstrokecolor{currentstroke}% 2218 2230 \pgfsetdash{}{0pt}% 2219 \pgfpathmoveto{\pgfqpoint{ 3.647146in}{2.880475in}}%2220 \pgfpathlineto{\pgfqpoint{ 4.091591in}{2.880475in}}%2221 \pgfusepath{stroke}% 2222 \end{pgfscope}% 2223 \begin{pgfscope}% 2224 \pgfsetbuttcap% 2225 \pgfset miterjoin%2231 \pgfpathmoveto{\pgfqpoint{0.925000in}{1.309636in}}% 2232 \pgfpathlineto{\pgfqpoint{1.202778in}{1.309636in}}% 2233 \pgfusepath{stroke}% 2234 \end{pgfscope}% 2235 \begin{pgfscope}% 2236 \pgfsetbuttcap% 2237 \pgfsetroundjoin% 2226 2238 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 2227 2239 \pgfsetfillcolor{currentfill}% … … 2230 2242 \pgfsetstrokecolor{currentstroke}% 2231 2243 \pgfsetdash{}{0pt}% 2232 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.039627in}{-0.033709in}}{\pgfqpoint{0.039627in}{0.041667in}}{% 2233 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 2234 \pgfpathlineto{\pgfqpoint{-0.039627in}{0.012876in}}% 2235 \pgfpathlineto{\pgfqpoint{-0.024491in}{-0.033709in}}% 2236 \pgfpathlineto{\pgfqpoint{0.024491in}{-0.033709in}}% 2237 \pgfpathlineto{\pgfqpoint{0.039627in}{0.012876in}}% 2244 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2245 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2246 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2247 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2248 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2249 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2250 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2251 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2252 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2253 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2238 2254 \pgfpathclose% 2239 2255 \pgfusepath{stroke,fill}% 2240 2256 }% 2241 2257 \begin{pgfscope}% 2242 \pgfsys@transformshift{ 3.869368in}{2.880475in}%2258 \pgfsys@transformshift{1.063889in}{1.309636in}% 2243 2259 \pgfsys@useobject{currentmarker}{}% 2244 2260 \end{pgfscope}% … … 2248 2264 \pgfsetstrokecolor{textcolor}% 2249 2265 \pgfsetfillcolor{textcolor}% 2250 \pgftext[x= 4.269368in,y=2.802697in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-baseline}%2266 \pgftext[x=1.313889in,y=1.261024in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-baseline}% 2251 2267 \end{pgfscope}% 2252 2268 \begin{pgfscope}% … … 2257 2273 \pgfsetstrokecolor{currentstroke}% 2258 2274 \pgfsetdash{}{0pt}% 2259 \pgfpathmoveto{\pgfqpoint{ 3.869368in}{2.444904in}}%2260 \pgfpathlineto{\pgfqpoint{ 3.869368in}{2.667126in}}%2275 \pgfpathmoveto{\pgfqpoint{1.063889in}{1.046518in}}% 2276 \pgfpathlineto{\pgfqpoint{1.063889in}{1.185407in}}% 2261 2277 \pgfusepath{stroke}% 2262 2278 \end{pgfscope}% … … 2276 2292 }% 2277 2293 \begin{pgfscope}% 2278 \pgfsys@transformshift{ 3.869368in}{2.444904in}%2294 \pgfsys@transformshift{1.063889in}{1.046518in}% 2279 2295 \pgfsys@useobject{currentmarker}{}% 2280 2296 \end{pgfscope}% … … 2295 2311 }% 2296 2312 \begin{pgfscope}% 2297 \pgfsys@transformshift{ 3.869368in}{2.667126in}%2313 \pgfsys@transformshift{1.063889in}{1.185407in}% 2298 2314 \pgfsys@useobject{currentmarker}{}% 2299 2315 \end{pgfscope}% … … 2306 2322 \pgfsetstrokecolor{currentstroke}% 2307 2323 \pgfsetdash{}{0pt}% 2308 \pgfpathmoveto{\pgfqpoint{ 3.647146in}{2.556015in}}%2309 \pgfpathlineto{\pgfqpoint{ 4.091591in}{2.556015in}}%2310 \pgfusepath{stroke}% 2311 \end{pgfscope}% 2312 \begin{pgfscope}% 2313 \pgfsetbuttcap% 2314 \pgfset miterjoin%2324 \pgfpathmoveto{\pgfqpoint{0.925000in}{1.115963in}}% 2325 \pgfpathlineto{\pgfqpoint{1.202778in}{1.115963in}}% 2326 \pgfusepath{stroke}% 2327 \end{pgfscope}% 2328 \begin{pgfscope}% 2329 \pgfsetbuttcap% 2330 \pgfsetroundjoin% 2315 2331 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 2316 2332 \pgfsetfillcolor{currentfill}% … … 2320 2336 \pgfsetdash{}{0pt}% 2321 2337 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2322 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 2323 \pgfpathlineto{\pgfqpoint{-0.041667in}{-0.041667in}}% 2324 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}% 2338 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2339 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2340 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2341 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2342 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2343 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2344 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2345 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2346 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2325 2347 \pgfpathclose% 2326 2348 \pgfusepath{stroke,fill}% 2327 2349 }% 2328 2350 \begin{pgfscope}% 2329 \pgfsys@transformshift{ 3.869368in}{2.556015in}%2351 \pgfsys@transformshift{1.063889in}{1.115963in}% 2330 2352 \pgfsys@useobject{currentmarker}{}% 2331 2353 \end{pgfscope}% … … 2335 2357 \pgfsetstrokecolor{textcolor}% 2336 2358 \pgfsetfillcolor{textcolor}% 2337 \pgftext[x= 4.269368in,y=2.478238in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-baseline}%2359 \pgftext[x=1.313889in,y=1.067352in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-baseline}% 2338 2360 \end{pgfscope}% 2339 2361 \begin{pgfscope}% … … 2344 2366 \pgfsetstrokecolor{currentstroke}% 2345 2367 \pgfsetdash{}{0pt}% 2346 \pgfpathmoveto{\pgfqpoint{ 3.869368in}{2.120444in}}%2347 \pgfpathlineto{\pgfqpoint{ 3.869368in}{2.342667in}}%2368 \pgfpathmoveto{\pgfqpoint{1.063889in}{0.852846in}}% 2369 \pgfpathlineto{\pgfqpoint{1.063889in}{0.991734in}}% 2348 2370 \pgfusepath{stroke}% 2349 2371 \end{pgfscope}% … … 2363 2385 }% 2364 2386 \begin{pgfscope}% 2365 \pgfsys@transformshift{ 3.869368in}{2.120444in}%2387 \pgfsys@transformshift{1.063889in}{0.852846in}% 2366 2388 \pgfsys@useobject{currentmarker}{}% 2367 2389 \end{pgfscope}% … … 2382 2404 }% 2383 2405 \begin{pgfscope}% 2384 \pgfsys@transformshift{ 3.869368in}{2.342667in}%2406 \pgfsys@transformshift{1.063889in}{0.991734in}% 2385 2407 \pgfsys@useobject{currentmarker}{}% 2386 2408 \end{pgfscope}% … … 2393 2415 \pgfsetstrokecolor{currentstroke}% 2394 2416 \pgfsetdash{}{0pt}% 2395 \pgfpathmoveto{\pgfqpoint{ 3.647146in}{2.231556in}}%2396 \pgfpathlineto{\pgfqpoint{ 4.091591in}{2.231556in}}%2397 \pgfusepath{stroke}% 2398 \end{pgfscope}% 2399 \begin{pgfscope}% 2400 \pgfsetbuttcap% 2401 \pgfset miterjoin%2417 \pgfpathmoveto{\pgfqpoint{0.925000in}{0.922290in}}% 2418 \pgfpathlineto{\pgfqpoint{1.202778in}{0.922290in}}% 2419 \pgfusepath{stroke}% 2420 \end{pgfscope}% 2421 \begin{pgfscope}% 2422 \pgfsetbuttcap% 2423 \pgfsetroundjoin% 2402 2424 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2403 2425 \pgfsetfillcolor{currentfill}% … … 2406 2428 \pgfsetstrokecolor{currentstroke}% 2407 2429 \pgfsetdash{}{0pt}% 2408 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.036084in}{-0.041667in}}{\pgfqpoint{0.036084in}{0.041667in}}{% 2409 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 2410 \pgfpathlineto{\pgfqpoint{-0.036084in}{0.020833in}}% 2411 \pgfpathlineto{\pgfqpoint{-0.036084in}{-0.020833in}}% 2412 \pgfpathlineto{\pgfqpoint{-0.000000in}{-0.041667in}}% 2413 \pgfpathlineto{\pgfqpoint{0.036084in}{-0.020833in}}% 2414 \pgfpathlineto{\pgfqpoint{0.036084in}{0.020833in}}% 2430 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2431 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2432 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2433 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2434 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2435 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2436 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2437 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2438 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2439 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2415 2440 \pgfpathclose% 2416 2441 \pgfusepath{stroke,fill}% 2417 2442 }% 2418 2443 \begin{pgfscope}% 2419 \pgfsys@transformshift{ 3.869368in}{2.231556in}%2444 \pgfsys@transformshift{1.063889in}{0.922290in}% 2420 2445 \pgfsys@useobject{currentmarker}{}% 2421 2446 \end{pgfscope}% … … 2425 2450 \pgfsetstrokecolor{textcolor}% 2426 2451 \pgfsetfillcolor{textcolor}% 2427 \pgftext[x= 4.269368in,y=2.153778in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-rand}%2452 \pgftext[x=1.313889in,y=0.873679in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-rand}% 2428 2453 \end{pgfscope}% 2429 2454 \begin{pgfscope}% … … 2434 2459 \pgfsetstrokecolor{currentstroke}% 2435 2460 \pgfsetdash{}{0pt}% 2436 \pgfpathmoveto{\pgfqpoint{ 3.869368in}{1.795985in}}%2437 \pgfpathlineto{\pgfqpoint{ 3.869368in}{2.018207in}}%2461 \pgfpathmoveto{\pgfqpoint{1.063889in}{0.659173in}}% 2462 \pgfpathlineto{\pgfqpoint{1.063889in}{0.798062in}}% 2438 2463 \pgfusepath{stroke}% 2439 2464 \end{pgfscope}% … … 2453 2478 }% 2454 2479 \begin{pgfscope}% 2455 \pgfsys@transformshift{ 3.869368in}{1.795985in}%2480 \pgfsys@transformshift{1.063889in}{0.659173in}% 2456 2481 \pgfsys@useobject{currentmarker}{}% 2457 2482 \end{pgfscope}% … … 2472 2497 }% 2473 2498 \begin{pgfscope}% 2474 \pgfsys@transformshift{ 3.869368in}{2.018207in}%2499 \pgfsys@transformshift{1.063889in}{0.798062in}% 2475 2500 \pgfsys@useobject{currentmarker}{}% 2476 2501 \end{pgfscope}% … … 2483 2508 \pgfsetstrokecolor{currentstroke}% 2484 2509 \pgfsetdash{}{0pt}% 2485 \pgfpathmoveto{\pgfqpoint{ 3.647146in}{1.907096in}}%2486 \pgfpathlineto{\pgfqpoint{ 4.091591in}{1.907096in}}%2487 \pgfusepath{stroke}% 2488 \end{pgfscope}% 2489 \begin{pgfscope}% 2490 \pgfsetbuttcap% 2491 \pgfset beveljoin%2510 \pgfpathmoveto{\pgfqpoint{0.925000in}{0.728617in}}% 2511 \pgfpathlineto{\pgfqpoint{1.202778in}{0.728617in}}% 2512 \pgfusepath{stroke}% 2513 \end{pgfscope}% 2514 \begin{pgfscope}% 2515 \pgfsetbuttcap% 2516 \pgfsetroundjoin% 2492 2517 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2493 2518 \pgfsetfillcolor{currentfill}% … … 2496 2521 \pgfsetstrokecolor{currentstroke}% 2497 2522 \pgfsetdash{}{0pt}% 2498 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.039627in}{-0.033709in}}{\pgfqpoint{0.039627in}{0.041667in}}{% 2499 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 2500 \pgfpathlineto{\pgfqpoint{-0.009355in}{0.012876in}}% 2501 \pgfpathlineto{\pgfqpoint{-0.039627in}{0.012876in}}% 2502 \pgfpathlineto{\pgfqpoint{-0.015136in}{-0.004918in}}% 2503 \pgfpathlineto{\pgfqpoint{-0.024491in}{-0.033709in}}% 2504 \pgfpathlineto{\pgfqpoint{-0.000000in}{-0.015915in}}% 2505 \pgfpathlineto{\pgfqpoint{0.024491in}{-0.033709in}}% 2506 \pgfpathlineto{\pgfqpoint{0.015136in}{-0.004918in}}% 2507 \pgfpathlineto{\pgfqpoint{0.039627in}{0.012876in}}% 2508 \pgfpathlineto{\pgfqpoint{0.009355in}{0.012876in}}% 2523 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2524 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2525 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2526 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2527 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2528 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2529 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2530 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2531 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2532 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2509 2533 \pgfpathclose% 2510 2534 \pgfusepath{stroke,fill}% 2511 2535 }% 2512 2536 \begin{pgfscope}% 2513 \pgfsys@transformshift{ 3.869368in}{1.907096in}%2537 \pgfsys@transformshift{1.063889in}{0.728617in}% 2514 2538 \pgfsys@useobject{currentmarker}{}% 2515 2539 \end{pgfscope}% … … 2519 2543 \pgfsetstrokecolor{textcolor}% 2520 2544 \pgfsetfillcolor{textcolor}% 2521 \pgftext[x= 4.269368in,y=1.829318in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-rand}%2545 \pgftext[x=1.313889in,y=0.680006in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-rand}% 2522 2546 \end{pgfscope}% 2523 2547 \end{pgfpicture}% -
doc/theses/colby_parsons_MMAth/figures/nasus_Aggregate_Lock_8.pgf
r3982384 r6e4c44d 77 77 \pgfsetstrokecolor{textcolor}% 78 78 \pgfsetfillcolor{textcolor}% 79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 2\)}%79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 2\)}% 80 80 \end{pgfscope}% 81 81 \begin{pgfscope}% … … 102 102 \pgfsetstrokecolor{textcolor}% 103 103 \pgfsetfillcolor{textcolor}% 104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 4\)}%104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 4\)}% 105 105 \end{pgfscope}% 106 106 \begin{pgfscope}% … … 127 127 \pgfsetstrokecolor{textcolor}% 128 128 \pgfsetfillcolor{textcolor}% 129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 8\)}%129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 8\)}% 130 130 \end{pgfscope}% 131 131 \begin{pgfscope}% … … 152 152 \pgfsetstrokecolor{textcolor}% 153 153 \pgfsetfillcolor{textcolor}% 154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 16\)}%154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 16\)}% 155 155 \end{pgfscope}% 156 156 \begin{pgfscope}% … … 177 177 \pgfsetstrokecolor{textcolor}% 178 178 \pgfsetfillcolor{textcolor}% 179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 24\)}%179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 24\)}% 180 180 \end{pgfscope}% 181 181 \begin{pgfscope}% … … 202 202 \pgfsetstrokecolor{textcolor}% 203 203 \pgfsetfillcolor{textcolor}% 204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 32\)}%204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 32\)}% 205 205 \end{pgfscope}% 206 206 \begin{pgfscope}% … … 208 208 \pgfsetstrokecolor{textcolor}% 209 209 \pgfsetfillcolor{textcolor}% 210 \pgftext[x=3.280000in,y=0. 161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}%210 \pgftext[x=3.280000in,y=0.251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}% 211 211 \end{pgfscope}% 212 212 \begin{pgfscope}% … … 233 233 \pgfsetstrokecolor{textcolor}% 234 234 \pgfsetfillcolor{textcolor}% 235 \pgftext[x=0. 399655in,y=0.700496in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{3}\)}%235 \pgftext[x=0.501581in,y=0.735604in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{3}\)}% 236 236 \end{pgfscope}% 237 237 \begin{pgfscope}% … … 258 258 \pgfsetstrokecolor{textcolor}% 259 259 \pgfsetfillcolor{textcolor}% 260 \pgftext[x=0. 399655in,y=1.343761in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{4}\)}%260 \pgftext[x=0.501581in,y=1.378869in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{4}\)}% 261 261 \end{pgfscope}% 262 262 \begin{pgfscope}% … … 283 283 \pgfsetstrokecolor{textcolor}% 284 284 \pgfsetfillcolor{textcolor}% 285 \pgftext[x=0. 399655in,y=1.987026in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{5}\)}%285 \pgftext[x=0.501581in,y=2.022134in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{5}\)}% 286 286 \end{pgfscope}% 287 287 \begin{pgfscope}% … … 308 308 \pgfsetstrokecolor{textcolor}% 309 309 \pgfsetfillcolor{textcolor}% 310 \pgftext[x=0. 399655in,y=2.630291in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{6}\)}%310 \pgftext[x=0.501581in,y=2.665399in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{6}\)}% 311 311 \end{pgfscope}% 312 312 \begin{pgfscope}% … … 333 333 \pgfsetstrokecolor{textcolor}% 334 334 \pgfsetfillcolor{textcolor}% 335 \pgftext[x=0. 399655in,y=3.273555in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{7}\)}%335 \pgftext[x=0.501581in,y=3.308663in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{7}\)}% 336 336 \end{pgfscope}% 337 337 \begin{pgfscope}% … … 358 358 \pgfsetstrokecolor{textcolor}% 359 359 \pgfsetfillcolor{textcolor}% 360 \pgftext[x=0. 399655in,y=3.916820in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{8}\)}%360 \pgftext[x=0.501581in,y=3.951928in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{8}\)}% 361 361 \end{pgfscope}% 362 362 \begin{pgfscope}% … … 1238 1238 \pgfsetstrokecolor{textcolor}% 1239 1239 \pgfsetfillcolor{textcolor}% 1240 \pgftext[x=0. 344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (entries)}%1240 \pgftext[x=0.446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (entries)}% 1241 1241 \end{pgfscope}% 1242 1242 \begin{pgfscope}% … … 1901 1901 \pgfusepath{clip}% 1902 1902 \pgfsetbuttcap% 1903 \pgfset miterjoin%1903 \pgfsetroundjoin% 1904 1904 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 1905 1905 \pgfsetfillcolor{currentfill}% 1906 1906 \pgfsetlinewidth{1.003750pt}% 1907 1907 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1908 \pgfsetstrokecolor{currentstroke}%1909 \pgfsetdash{}{0pt}%1910 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%1911 \pgfpathmoveto{\pgfqpoint{-0.000000in}{-0.041667in}}%1912 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%1913 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}%1914 \pgfpathclose%1915 \pgfusepath{stroke,fill}%1916 }%1917 \begin{pgfscope}%1918 \pgfsys@transformshift{1.025455in}{3.772496in}%1919 \pgfsys@useobject{currentmarker}{}%1920 \end{pgfscope}%1921 \begin{pgfscope}%1922 \pgfsys@transformshift{1.326061in}{3.656800in}%1923 \pgfsys@useobject{currentmarker}{}%1924 \end{pgfscope}%1925 \begin{pgfscope}%1926 \pgfsys@transformshift{1.927273in}{3.464610in}%1927 \pgfsys@useobject{currentmarker}{}%1928 \end{pgfscope}%1929 \begin{pgfscope}%1930 \pgfsys@transformshift{3.129697in}{3.364807in}%1931 \pgfsys@useobject{currentmarker}{}%1932 \end{pgfscope}%1933 \begin{pgfscope}%1934 \pgfsys@transformshift{4.332121in}{3.378536in}%1935 \pgfsys@useobject{currentmarker}{}%1936 \end{pgfscope}%1937 \begin{pgfscope}%1938 \pgfsys@transformshift{5.534545in}{3.364296in}%1939 \pgfsys@useobject{currentmarker}{}%1940 \end{pgfscope}%1941 \end{pgfscope}%1942 \begin{pgfscope}%1943 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%1944 \pgfusepath{clip}%1945 \pgfsetrectcap%1946 \pgfsetroundjoin%1947 \pgfsetlinewidth{1.505625pt}%1948 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%1949 \pgfsetstrokecolor{currentstroke}%1950 \pgfsetdash{}{0pt}%1951 \pgfpathmoveto{\pgfqpoint{1.025455in}{4.055876in}}%1952 \pgfpathlineto{\pgfqpoint{1.326061in}{3.957809in}}%1953 \pgfpathlineto{\pgfqpoint{1.927273in}{3.719959in}}%1954 \pgfpathlineto{\pgfqpoint{3.129697in}{3.604550in}}%1955 \pgfpathlineto{\pgfqpoint{4.332121in}{3.597915in}}%1956 \pgfpathlineto{\pgfqpoint{5.534545in}{3.583182in}}%1957 \pgfusepath{stroke}%1958 \end{pgfscope}%1959 \begin{pgfscope}%1960 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%1961 \pgfusepath{clip}%1962 \pgfsetbuttcap%1963 \pgfsetroundjoin%1964 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%1965 \pgfsetfillcolor{currentfill}%1966 \pgfsetlinewidth{1.003750pt}%1967 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%1968 1908 \pgfsetstrokecolor{currentstroke}% 1969 1909 \pgfsetdash{}{0pt}% … … 1982 1922 }% 1983 1923 \begin{pgfscope}% 1984 \pgfsys@transformshift{1.025455in}{ 4.055876in}%1985 \pgfsys@useobject{currentmarker}{}% 1986 \end{pgfscope}% 1987 \begin{pgfscope}% 1988 \pgfsys@transformshift{1.326061in}{3. 957809in}%1989 \pgfsys@useobject{currentmarker}{}% 1990 \end{pgfscope}% 1991 \begin{pgfscope}% 1992 \pgfsys@transformshift{1.927273in}{3. 719959in}%1993 \pgfsys@useobject{currentmarker}{}% 1994 \end{pgfscope}% 1995 \begin{pgfscope}% 1996 \pgfsys@transformshift{3.129697in}{3. 604550in}%1997 \pgfsys@useobject{currentmarker}{}% 1998 \end{pgfscope}% 1999 \begin{pgfscope}% 2000 \pgfsys@transformshift{4.332121in}{3. 597915in}%2001 \pgfsys@useobject{currentmarker}{}% 2002 \end{pgfscope}% 2003 \begin{pgfscope}% 2004 \pgfsys@transformshift{5.534545in}{3. 583182in}%1924 \pgfsys@transformshift{1.025455in}{3.772496in}% 1925 \pgfsys@useobject{currentmarker}{}% 1926 \end{pgfscope}% 1927 \begin{pgfscope}% 1928 \pgfsys@transformshift{1.326061in}{3.656800in}% 1929 \pgfsys@useobject{currentmarker}{}% 1930 \end{pgfscope}% 1931 \begin{pgfscope}% 1932 \pgfsys@transformshift{1.927273in}{3.464610in}% 1933 \pgfsys@useobject{currentmarker}{}% 1934 \end{pgfscope}% 1935 \begin{pgfscope}% 1936 \pgfsys@transformshift{3.129697in}{3.364807in}% 1937 \pgfsys@useobject{currentmarker}{}% 1938 \end{pgfscope}% 1939 \begin{pgfscope}% 1940 \pgfsys@transformshift{4.332121in}{3.378536in}% 1941 \pgfsys@useobject{currentmarker}{}% 1942 \end{pgfscope}% 1943 \begin{pgfscope}% 1944 \pgfsys@transformshift{5.534545in}{3.364296in}% 2005 1945 \pgfsys@useobject{currentmarker}{}% 2006 1946 \end{pgfscope}% … … 2012 1952 \pgfsetroundjoin% 2013 1953 \pgfsetlinewidth{1.505625pt}% 2014 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%2015 \pgfsetstrokecolor{currentstroke}%2016 \pgfsetdash{}{0pt}%2017 \pgfpathmoveto{\pgfqpoint{1.025455in}{3.973113in}}%2018 \pgfpathlineto{\pgfqpoint{1.326061in}{3.935736in}}%2019 \pgfpathlineto{\pgfqpoint{1.927273in}{3.735517in}}%2020 \pgfpathlineto{\pgfqpoint{3.129697in}{3.665369in}}%2021 \pgfpathlineto{\pgfqpoint{4.332121in}{3.655510in}}%2022 \pgfpathlineto{\pgfqpoint{5.534545in}{3.646498in}}%2023 \pgfusepath{stroke}%2024 \end{pgfscope}%2025 \begin{pgfscope}%2026 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%2027 \pgfusepath{clip}%2028 \pgfsetbuttcap%2029 \pgfsetmiterjoin%2030 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%2031 \pgfsetfillcolor{currentfill}%2032 \pgfsetlinewidth{1.003750pt}%2033 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%2034 \pgfsetstrokecolor{currentstroke}%2035 \pgfsetdash{}{0pt}%2036 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%2037 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}%2038 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%2039 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%2040 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}%2041 \pgfpathclose%2042 \pgfusepath{stroke,fill}%2043 }%2044 \begin{pgfscope}%2045 \pgfsys@transformshift{1.025455in}{3.973113in}%2046 \pgfsys@useobject{currentmarker}{}%2047 \end{pgfscope}%2048 \begin{pgfscope}%2049 \pgfsys@transformshift{1.326061in}{3.935736in}%2050 \pgfsys@useobject{currentmarker}{}%2051 \end{pgfscope}%2052 \begin{pgfscope}%2053 \pgfsys@transformshift{1.927273in}{3.735517in}%2054 \pgfsys@useobject{currentmarker}{}%2055 \end{pgfscope}%2056 \begin{pgfscope}%2057 \pgfsys@transformshift{3.129697in}{3.665369in}%2058 \pgfsys@useobject{currentmarker}{}%2059 \end{pgfscope}%2060 \begin{pgfscope}%2061 \pgfsys@transformshift{4.332121in}{3.655510in}%2062 \pgfsys@useobject{currentmarker}{}%2063 \end{pgfscope}%2064 \begin{pgfscope}%2065 \pgfsys@transformshift{5.534545in}{3.646498in}%2066 \pgfsys@useobject{currentmarker}{}%2067 \end{pgfscope}%2068 \end{pgfscope}%2069 \begin{pgfscope}%2070 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%2071 \pgfusepath{clip}%2072 \pgfsetrectcap%2073 \pgfsetroundjoin%2074 \pgfsetlinewidth{1.505625pt}%2075 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%2076 \pgfsetstrokecolor{currentstroke}%2077 \pgfsetdash{}{0pt}%2078 \pgfpathmoveto{\pgfqpoint{1.025455in}{2.771065in}}%2079 \pgfpathlineto{\pgfqpoint{1.326061in}{1.232613in}}%2080 \pgfpathlineto{\pgfqpoint{1.927273in}{1.221115in}}%2081 \pgfpathlineto{\pgfqpoint{3.129697in}{0.810456in}}%2082 \pgfpathlineto{\pgfqpoint{4.332121in}{0.758096in}}%2083 \pgfpathlineto{\pgfqpoint{5.534545in}{0.796927in}}%2084 \pgfusepath{stroke}%2085 \end{pgfscope}%2086 \begin{pgfscope}%2087 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%2088 \pgfusepath{clip}%2089 \pgfsetbuttcap%2090 \pgfsetmiterjoin%2091 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%2092 \pgfsetfillcolor{currentfill}%2093 \pgfsetlinewidth{1.003750pt}%2094 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%2095 \pgfsetstrokecolor{currentstroke}%2096 \pgfsetdash{}{0pt}%2097 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.058926in}{-0.058926in}}{\pgfqpoint{0.058926in}{0.058926in}}{%2098 \pgfpathmoveto{\pgfqpoint{-0.000000in}{-0.058926in}}%2099 \pgfpathlineto{\pgfqpoint{0.058926in}{0.000000in}}%2100 \pgfpathlineto{\pgfqpoint{0.000000in}{0.058926in}}%2101 \pgfpathlineto{\pgfqpoint{-0.058926in}{0.000000in}}%2102 \pgfpathclose%2103 \pgfusepath{stroke,fill}%2104 }%2105 \begin{pgfscope}%2106 \pgfsys@transformshift{1.025455in}{2.771065in}%2107 \pgfsys@useobject{currentmarker}{}%2108 \end{pgfscope}%2109 \begin{pgfscope}%2110 \pgfsys@transformshift{1.326061in}{1.232613in}%2111 \pgfsys@useobject{currentmarker}{}%2112 \end{pgfscope}%2113 \begin{pgfscope}%2114 \pgfsys@transformshift{1.927273in}{1.221115in}%2115 \pgfsys@useobject{currentmarker}{}%2116 \end{pgfscope}%2117 \begin{pgfscope}%2118 \pgfsys@transformshift{3.129697in}{0.810456in}%2119 \pgfsys@useobject{currentmarker}{}%2120 \end{pgfscope}%2121 \begin{pgfscope}%2122 \pgfsys@transformshift{4.332121in}{0.758096in}%2123 \pgfsys@useobject{currentmarker}{}%2124 \end{pgfscope}%2125 \begin{pgfscope}%2126 \pgfsys@transformshift{5.534545in}{0.796927in}%2127 \pgfsys@useobject{currentmarker}{}%2128 \end{pgfscope}%2129 \end{pgfscope}%2130 \begin{pgfscope}%2131 \pgfsetrectcap%2132 \pgfsetmiterjoin%2133 \pgfsetlinewidth{0.803000pt}%2134 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%2135 \pgfsetstrokecolor{currentstroke}%2136 \pgfsetdash{}{0pt}%2137 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%2138 \pgfpathlineto{\pgfqpoint{0.800000in}{4.224000in}}%2139 \pgfusepath{stroke}%2140 \end{pgfscope}%2141 \begin{pgfscope}%2142 \pgfsetrectcap%2143 \pgfsetmiterjoin%2144 \pgfsetlinewidth{0.803000pt}%2145 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%2146 \pgfsetstrokecolor{currentstroke}%2147 \pgfsetdash{}{0pt}%2148 \pgfpathmoveto{\pgfqpoint{5.760000in}{0.528000in}}%2149 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%2150 \pgfusepath{stroke}%2151 \end{pgfscope}%2152 \begin{pgfscope}%2153 \pgfsetrectcap%2154 \pgfsetmiterjoin%2155 \pgfsetlinewidth{0.803000pt}%2156 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%2157 \pgfsetstrokecolor{currentstroke}%2158 \pgfsetdash{}{0pt}%2159 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%2160 \pgfpathlineto{\pgfqpoint{5.760000in}{0.528000in}}%2161 \pgfusepath{stroke}%2162 \end{pgfscope}%2163 \begin{pgfscope}%2164 \pgfsetrectcap%2165 \pgfsetmiterjoin%2166 \pgfsetlinewidth{0.803000pt}%2167 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%2168 \pgfsetstrokecolor{currentstroke}%2169 \pgfsetdash{}{0pt}%2170 \pgfpathmoveto{\pgfqpoint{0.800000in}{4.224000in}}%2171 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%2172 \pgfusepath{stroke}%2173 \end{pgfscope}%2174 \begin{pgfscope}%2175 \definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%2176 \pgfsetstrokecolor{textcolor}%2177 \pgfsetfillcolor{textcolor}%2178 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{19.200000}{23.040000}\selectfont Aggregate Lock Benchmark: 8 Locks}%2179 \end{pgfscope}%2180 \begin{pgfscope}%2181 \pgfsetbuttcap%2182 \pgfsetmiterjoin%2183 \definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}%2184 \pgfsetfillcolor{currentfill}%2185 \pgfsetfillopacity{0.800000}%2186 \pgfsetlinewidth{1.003750pt}%2187 \definecolor{currentstroke}{rgb}{0.800000,0.800000,0.800000}%2188 \pgfsetstrokecolor{currentstroke}%2189 \pgfsetstrokeopacity{0.800000}%2190 \pgfsetdash{}{0pt}%2191 \pgfpathmoveto{\pgfqpoint{3.602702in}{1.693747in}}%2192 \pgfpathlineto{\pgfqpoint{5.604444in}{1.693747in}}%2193 \pgfpathquadraticcurveto{\pgfqpoint{5.648889in}{1.693747in}}{\pgfqpoint{5.648889in}{1.738192in}}%2194 \pgfpathlineto{\pgfqpoint{5.648889in}{3.013808in}}%2195 \pgfpathquadraticcurveto{\pgfqpoint{5.648889in}{3.058253in}}{\pgfqpoint{5.604444in}{3.058253in}}%2196 \pgfpathlineto{\pgfqpoint{3.602702in}{3.058253in}}%2197 \pgfpathquadraticcurveto{\pgfqpoint{3.558257in}{3.058253in}}{\pgfqpoint{3.558257in}{3.013808in}}%2198 \pgfpathlineto{\pgfqpoint{3.558257in}{1.738192in}}%2199 \pgfpathquadraticcurveto{\pgfqpoint{3.558257in}{1.693747in}}{\pgfqpoint{3.602702in}{1.693747in}}%2200 \pgfpathclose%2201 \pgfusepath{stroke,fill}%2202 \end{pgfscope}%2203 \begin{pgfscope}%2204 \pgfsetbuttcap%2205 \pgfsetroundjoin%2206 \pgfsetlinewidth{1.505625pt}%2207 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%2208 \pgfsetstrokecolor{currentstroke}%2209 \pgfsetdash{}{0pt}%2210 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.769364in}}%2211 \pgfpathlineto{\pgfqpoint{3.869368in}{2.991586in}}%2212 \pgfusepath{stroke}%2213 \end{pgfscope}%2214 \begin{pgfscope}%2215 \pgfsetbuttcap%2216 \pgfsetroundjoin%2217 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%2218 \pgfsetfillcolor{currentfill}%2219 \pgfsetlinewidth{1.003750pt}%2220 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%2221 \pgfsetstrokecolor{currentstroke}%2222 \pgfsetdash{}{0pt}%2223 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%2224 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%2225 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%2226 \pgfusepath{stroke,fill}%2227 }%2228 \begin{pgfscope}%2229 \pgfsys@transformshift{3.869368in}{2.769364in}%2230 \pgfsys@useobject{currentmarker}{}%2231 \end{pgfscope}%2232 \end{pgfscope}%2233 \begin{pgfscope}%2234 \pgfsetbuttcap%2235 \pgfsetroundjoin%2236 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%2237 \pgfsetfillcolor{currentfill}%2238 \pgfsetlinewidth{1.003750pt}%2239 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%2240 \pgfsetstrokecolor{currentstroke}%2241 \pgfsetdash{}{0pt}%2242 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%2243 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%2244 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%2245 \pgfusepath{stroke,fill}%2246 }%2247 \begin{pgfscope}%2248 \pgfsys@transformshift{3.869368in}{2.991586in}%2249 \pgfsys@useobject{currentmarker}{}%2250 \end{pgfscope}%2251 \end{pgfscope}%2252 \begin{pgfscope}%2253 \pgfsetrectcap%2254 \pgfsetroundjoin%2255 \pgfsetlinewidth{1.505625pt}%2256 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%2257 \pgfsetstrokecolor{currentstroke}%2258 \pgfsetdash{}{0pt}%2259 \pgfpathmoveto{\pgfqpoint{3.647146in}{2.880475in}}%2260 \pgfpathlineto{\pgfqpoint{4.091591in}{2.880475in}}%2261 \pgfusepath{stroke}%2262 \end{pgfscope}%2263 \begin{pgfscope}%2264 \pgfsetbuttcap%2265 \pgfsetmiterjoin%2266 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%2267 \pgfsetfillcolor{currentfill}%2268 \pgfsetlinewidth{1.003750pt}%2269 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%2270 \pgfsetstrokecolor{currentstroke}%2271 \pgfsetdash{}{0pt}%2272 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%2273 \pgfpathmoveto{\pgfqpoint{-0.000000in}{-0.041667in}}%2274 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%2275 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}%2276 \pgfpathclose%2277 \pgfusepath{stroke,fill}%2278 }%2279 \begin{pgfscope}%2280 \pgfsys@transformshift{3.869368in}{2.880475in}%2281 \pgfsys@useobject{currentmarker}{}%2282 \end{pgfscope}%2283 \end{pgfscope}%2284 \begin{pgfscope}%2285 \definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%2286 \pgfsetstrokecolor{textcolor}%2287 \pgfsetfillcolor{textcolor}%2288 \pgftext[x=4.269368in,y=2.802697in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-baseline}%2289 \end{pgfscope}%2290 \begin{pgfscope}%2291 \pgfsetbuttcap%2292 \pgfsetroundjoin%2293 \pgfsetlinewidth{1.505625pt}%2294 1954 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2295 1955 \pgfsetstrokecolor{currentstroke}% 2296 1956 \pgfsetdash{}{0pt}% 2297 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.444904in}}% 2298 \pgfpathlineto{\pgfqpoint{3.869368in}{2.667126in}}% 2299 \pgfusepath{stroke}% 2300 \end{pgfscope}% 2301 \begin{pgfscope}% 2302 \pgfsetbuttcap% 2303 \pgfsetroundjoin% 2304 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 2305 \pgfsetfillcolor{currentfill}% 2306 \pgfsetlinewidth{1.003750pt}% 2307 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2308 \pgfsetstrokecolor{currentstroke}% 2309 \pgfsetdash{}{0pt}% 2310 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 2311 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 2312 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 2313 \pgfusepath{stroke,fill}% 2314 }% 2315 \begin{pgfscope}% 2316 \pgfsys@transformshift{3.869368in}{2.444904in}% 2317 \pgfsys@useobject{currentmarker}{}% 2318 \end{pgfscope}% 2319 \end{pgfscope}% 2320 \begin{pgfscope}% 2321 \pgfsetbuttcap% 2322 \pgfsetroundjoin% 2323 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 2324 \pgfsetfillcolor{currentfill}% 2325 \pgfsetlinewidth{1.003750pt}% 2326 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2327 \pgfsetstrokecolor{currentstroke}% 2328 \pgfsetdash{}{0pt}% 2329 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 2330 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 2331 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 2332 \pgfusepath{stroke,fill}% 2333 }% 2334 \begin{pgfscope}% 2335 \pgfsys@transformshift{3.869368in}{2.667126in}% 2336 \pgfsys@useobject{currentmarker}{}% 2337 \end{pgfscope}% 2338 \end{pgfscope}% 2339 \begin{pgfscope}% 2340 \pgfsetrectcap% 2341 \pgfsetroundjoin% 2342 \pgfsetlinewidth{1.505625pt}% 2343 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2344 \pgfsetstrokecolor{currentstroke}% 2345 \pgfsetdash{}{0pt}% 2346 \pgfpathmoveto{\pgfqpoint{3.647146in}{2.556015in}}% 2347 \pgfpathlineto{\pgfqpoint{4.091591in}{2.556015in}}% 2348 \pgfusepath{stroke}% 2349 \end{pgfscope}% 2350 \begin{pgfscope}% 1957 \pgfpathmoveto{\pgfqpoint{1.025455in}{4.055876in}}% 1958 \pgfpathlineto{\pgfqpoint{1.326061in}{3.957809in}}% 1959 \pgfpathlineto{\pgfqpoint{1.927273in}{3.719959in}}% 1960 \pgfpathlineto{\pgfqpoint{3.129697in}{3.604550in}}% 1961 \pgfpathlineto{\pgfqpoint{4.332121in}{3.597915in}}% 1962 \pgfpathlineto{\pgfqpoint{5.534545in}{3.583182in}}% 1963 \pgfusepath{stroke}% 1964 \end{pgfscope}% 1965 \begin{pgfscope}% 1966 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}% 1967 \pgfusepath{clip}% 2351 1968 \pgfsetbuttcap% 2352 1969 \pgfsetroundjoin% … … 2371 1988 }% 2372 1989 \begin{pgfscope}% 2373 \pgfsys@transformshift{3.869368in}{2.556015in}% 2374 \pgfsys@useobject{currentmarker}{}% 2375 \end{pgfscope}% 1990 \pgfsys@transformshift{1.025455in}{4.055876in}% 1991 \pgfsys@useobject{currentmarker}{}% 1992 \end{pgfscope}% 1993 \begin{pgfscope}% 1994 \pgfsys@transformshift{1.326061in}{3.957809in}% 1995 \pgfsys@useobject{currentmarker}{}% 1996 \end{pgfscope}% 1997 \begin{pgfscope}% 1998 \pgfsys@transformshift{1.927273in}{3.719959in}% 1999 \pgfsys@useobject{currentmarker}{}% 2000 \end{pgfscope}% 2001 \begin{pgfscope}% 2002 \pgfsys@transformshift{3.129697in}{3.604550in}% 2003 \pgfsys@useobject{currentmarker}{}% 2004 \end{pgfscope}% 2005 \begin{pgfscope}% 2006 \pgfsys@transformshift{4.332121in}{3.597915in}% 2007 \pgfsys@useobject{currentmarker}{}% 2008 \end{pgfscope}% 2009 \begin{pgfscope}% 2010 \pgfsys@transformshift{5.534545in}{3.583182in}% 2011 \pgfsys@useobject{currentmarker}{}% 2012 \end{pgfscope}% 2013 \end{pgfscope}% 2014 \begin{pgfscope}% 2015 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}% 2016 \pgfusepath{clip}% 2017 \pgfsetrectcap% 2018 \pgfsetroundjoin% 2019 \pgfsetlinewidth{1.505625pt}% 2020 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2021 \pgfsetstrokecolor{currentstroke}% 2022 \pgfsetdash{}{0pt}% 2023 \pgfpathmoveto{\pgfqpoint{1.025455in}{3.973113in}}% 2024 \pgfpathlineto{\pgfqpoint{1.326061in}{3.935736in}}% 2025 \pgfpathlineto{\pgfqpoint{1.927273in}{3.735517in}}% 2026 \pgfpathlineto{\pgfqpoint{3.129697in}{3.665369in}}% 2027 \pgfpathlineto{\pgfqpoint{4.332121in}{3.655510in}}% 2028 \pgfpathlineto{\pgfqpoint{5.534545in}{3.646498in}}% 2029 \pgfusepath{stroke}% 2030 \end{pgfscope}% 2031 \begin{pgfscope}% 2032 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}% 2033 \pgfusepath{clip}% 2034 \pgfsetbuttcap% 2035 \pgfsetroundjoin% 2036 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2037 \pgfsetfillcolor{currentfill}% 2038 \pgfsetlinewidth{1.003750pt}% 2039 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2040 \pgfsetstrokecolor{currentstroke}% 2041 \pgfsetdash{}{0pt}% 2042 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2043 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2044 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2045 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2046 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2047 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2048 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2049 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2050 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2051 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2052 \pgfpathclose% 2053 \pgfusepath{stroke,fill}% 2054 }% 2055 \begin{pgfscope}% 2056 \pgfsys@transformshift{1.025455in}{3.973113in}% 2057 \pgfsys@useobject{currentmarker}{}% 2058 \end{pgfscope}% 2059 \begin{pgfscope}% 2060 \pgfsys@transformshift{1.326061in}{3.935736in}% 2061 \pgfsys@useobject{currentmarker}{}% 2062 \end{pgfscope}% 2063 \begin{pgfscope}% 2064 \pgfsys@transformshift{1.927273in}{3.735517in}% 2065 \pgfsys@useobject{currentmarker}{}% 2066 \end{pgfscope}% 2067 \begin{pgfscope}% 2068 \pgfsys@transformshift{3.129697in}{3.665369in}% 2069 \pgfsys@useobject{currentmarker}{}% 2070 \end{pgfscope}% 2071 \begin{pgfscope}% 2072 \pgfsys@transformshift{4.332121in}{3.655510in}% 2073 \pgfsys@useobject{currentmarker}{}% 2074 \end{pgfscope}% 2075 \begin{pgfscope}% 2076 \pgfsys@transformshift{5.534545in}{3.646498in}% 2077 \pgfsys@useobject{currentmarker}{}% 2078 \end{pgfscope}% 2079 \end{pgfscope}% 2080 \begin{pgfscope}% 2081 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}% 2082 \pgfusepath{clip}% 2083 \pgfsetrectcap% 2084 \pgfsetroundjoin% 2085 \pgfsetlinewidth{1.505625pt}% 2086 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2087 \pgfsetstrokecolor{currentstroke}% 2088 \pgfsetdash{}{0pt}% 2089 \pgfpathmoveto{\pgfqpoint{1.025455in}{2.771065in}}% 2090 \pgfpathlineto{\pgfqpoint{1.326061in}{1.232613in}}% 2091 \pgfpathlineto{\pgfqpoint{1.927273in}{1.221115in}}% 2092 \pgfpathlineto{\pgfqpoint{3.129697in}{0.810456in}}% 2093 \pgfpathlineto{\pgfqpoint{4.332121in}{0.758096in}}% 2094 \pgfpathlineto{\pgfqpoint{5.534545in}{0.796927in}}% 2095 \pgfusepath{stroke}% 2096 \end{pgfscope}% 2097 \begin{pgfscope}% 2098 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}% 2099 \pgfusepath{clip}% 2100 \pgfsetbuttcap% 2101 \pgfsetroundjoin% 2102 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2103 \pgfsetfillcolor{currentfill}% 2104 \pgfsetlinewidth{1.003750pt}% 2105 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2106 \pgfsetstrokecolor{currentstroke}% 2107 \pgfsetdash{}{0pt}% 2108 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2109 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2110 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2111 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2112 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2113 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2114 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2115 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2116 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2117 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2118 \pgfpathclose% 2119 \pgfusepath{stroke,fill}% 2120 }% 2121 \begin{pgfscope}% 2122 \pgfsys@transformshift{1.025455in}{2.771065in}% 2123 \pgfsys@useobject{currentmarker}{}% 2124 \end{pgfscope}% 2125 \begin{pgfscope}% 2126 \pgfsys@transformshift{1.326061in}{1.232613in}% 2127 \pgfsys@useobject{currentmarker}{}% 2128 \end{pgfscope}% 2129 \begin{pgfscope}% 2130 \pgfsys@transformshift{1.927273in}{1.221115in}% 2131 \pgfsys@useobject{currentmarker}{}% 2132 \end{pgfscope}% 2133 \begin{pgfscope}% 2134 \pgfsys@transformshift{3.129697in}{0.810456in}% 2135 \pgfsys@useobject{currentmarker}{}% 2136 \end{pgfscope}% 2137 \begin{pgfscope}% 2138 \pgfsys@transformshift{4.332121in}{0.758096in}% 2139 \pgfsys@useobject{currentmarker}{}% 2140 \end{pgfscope}% 2141 \begin{pgfscope}% 2142 \pgfsys@transformshift{5.534545in}{0.796927in}% 2143 \pgfsys@useobject{currentmarker}{}% 2144 \end{pgfscope}% 2145 \end{pgfscope}% 2146 \begin{pgfscope}% 2147 \pgfsetrectcap% 2148 \pgfsetmiterjoin% 2149 \pgfsetlinewidth{0.803000pt}% 2150 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 2151 \pgfsetstrokecolor{currentstroke}% 2152 \pgfsetdash{}{0pt}% 2153 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}% 2154 \pgfpathlineto{\pgfqpoint{0.800000in}{4.224000in}}% 2155 \pgfusepath{stroke}% 2156 \end{pgfscope}% 2157 \begin{pgfscope}% 2158 \pgfsetrectcap% 2159 \pgfsetmiterjoin% 2160 \pgfsetlinewidth{0.803000pt}% 2161 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 2162 \pgfsetstrokecolor{currentstroke}% 2163 \pgfsetdash{}{0pt}% 2164 \pgfpathmoveto{\pgfqpoint{5.760000in}{0.528000in}}% 2165 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}% 2166 \pgfusepath{stroke}% 2167 \end{pgfscope}% 2168 \begin{pgfscope}% 2169 \pgfsetrectcap% 2170 \pgfsetmiterjoin% 2171 \pgfsetlinewidth{0.803000pt}% 2172 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 2173 \pgfsetstrokecolor{currentstroke}% 2174 \pgfsetdash{}{0pt}% 2175 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}% 2176 \pgfpathlineto{\pgfqpoint{5.760000in}{0.528000in}}% 2177 \pgfusepath{stroke}% 2178 \end{pgfscope}% 2179 \begin{pgfscope}% 2180 \pgfsetrectcap% 2181 \pgfsetmiterjoin% 2182 \pgfsetlinewidth{0.803000pt}% 2183 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 2184 \pgfsetstrokecolor{currentstroke}% 2185 \pgfsetdash{}{0pt}% 2186 \pgfpathmoveto{\pgfqpoint{0.800000in}{4.224000in}}% 2187 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}% 2188 \pgfusepath{stroke}% 2376 2189 \end{pgfscope}% 2377 2190 \begin{pgfscope}% … … 2379 2192 \pgfsetstrokecolor{textcolor}% 2380 2193 \pgfsetfillcolor{textcolor}% 2381 \pgftext[x=4.269368in,y=2.478238in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-baseline}% 2382 \end{pgfscope}% 2383 \begin{pgfscope}% 2384 \pgfsetbuttcap% 2385 \pgfsetroundjoin% 2386 \pgfsetlinewidth{1.505625pt}% 2387 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2388 \pgfsetstrokecolor{currentstroke}% 2389 \pgfsetdash{}{0pt}% 2390 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.120444in}}% 2391 \pgfpathlineto{\pgfqpoint{3.869368in}{2.342667in}}% 2392 \pgfusepath{stroke}% 2393 \end{pgfscope}% 2394 \begin{pgfscope}% 2395 \pgfsetbuttcap% 2396 \pgfsetroundjoin% 2397 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2398 \pgfsetfillcolor{currentfill}% 2194 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{12.000000}{14.400000}\selectfont Aggregate Lock Benchmark: 8 Locks}% 2195 \end{pgfscope}% 2196 \begin{pgfscope}% 2197 \pgfsetbuttcap% 2198 \pgfsetmiterjoin% 2199 \definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}% 2200 \pgfsetfillcolor{currentfill}% 2201 \pgfsetfillopacity{0.800000}% 2399 2202 \pgfsetlinewidth{1.003750pt}% 2400 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2203 \definecolor{currentstroke}{rgb}{0.800000,0.800000,0.800000}% 2204 \pgfsetstrokecolor{currentstroke}% 2205 \pgfsetstrokeopacity{0.800000}% 2206 \pgfsetdash{}{0pt}% 2207 \pgfpathmoveto{\pgfqpoint{4.403517in}{1.967821in}}% 2208 \pgfpathlineto{\pgfqpoint{5.662778in}{1.967821in}}% 2209 \pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{1.967821in}}{\pgfqpoint{5.690556in}{1.995599in}}% 2210 \pgfpathlineto{\pgfqpoint{5.690556in}{2.756401in}}% 2211 \pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{2.784179in}}{\pgfqpoint{5.662778in}{2.784179in}}% 2212 \pgfpathlineto{\pgfqpoint{4.403517in}{2.784179in}}% 2213 \pgfpathquadraticcurveto{\pgfqpoint{4.375739in}{2.784179in}}{\pgfqpoint{4.375739in}{2.756401in}}% 2214 \pgfpathlineto{\pgfqpoint{4.375739in}{1.995599in}}% 2215 \pgfpathquadraticcurveto{\pgfqpoint{4.375739in}{1.967821in}}{\pgfqpoint{4.403517in}{1.967821in}}% 2216 \pgfpathclose% 2217 \pgfusepath{stroke,fill}% 2218 \end{pgfscope}% 2219 \begin{pgfscope}% 2220 \pgfsetbuttcap% 2221 \pgfsetroundjoin% 2222 \pgfsetlinewidth{1.505625pt}% 2223 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 2224 \pgfsetstrokecolor{currentstroke}% 2225 \pgfsetdash{}{0pt}% 2226 \pgfpathmoveto{\pgfqpoint{4.570184in}{2.610568in}}% 2227 \pgfpathlineto{\pgfqpoint{4.570184in}{2.749457in}}% 2228 \pgfusepath{stroke}% 2229 \end{pgfscope}% 2230 \begin{pgfscope}% 2231 \pgfsetbuttcap% 2232 \pgfsetroundjoin% 2233 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 2234 \pgfsetfillcolor{currentfill}% 2235 \pgfsetlinewidth{1.003750pt}% 2236 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 2401 2237 \pgfsetstrokecolor{currentstroke}% 2402 2238 \pgfsetdash{}{0pt}% … … 2407 2243 }% 2408 2244 \begin{pgfscope}% 2409 \pgfsys@transformshift{ 3.869368in}{2.120444in}%2410 \pgfsys@useobject{currentmarker}{}% 2411 \end{pgfscope}% 2412 \end{pgfscope}% 2413 \begin{pgfscope}% 2414 \pgfsetbuttcap% 2415 \pgfsetroundjoin% 2416 \definecolor{currentfill}{rgb}{0.1 72549,0.627451,0.172549}%2245 \pgfsys@transformshift{4.570184in}{2.610568in}% 2246 \pgfsys@useobject{currentmarker}{}% 2247 \end{pgfscope}% 2248 \end{pgfscope}% 2249 \begin{pgfscope}% 2250 \pgfsetbuttcap% 2251 \pgfsetroundjoin% 2252 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 2417 2253 \pgfsetfillcolor{currentfill}% 2418 2254 \pgfsetlinewidth{1.003750pt}% 2419 \definecolor{currentstroke}{rgb}{0.1 72549,0.627451,0.172549}%2255 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 2420 2256 \pgfsetstrokecolor{currentstroke}% 2421 2257 \pgfsetdash{}{0pt}% … … 2426 2262 }% 2427 2263 \begin{pgfscope}% 2428 \pgfsys@transformshift{ 3.869368in}{2.342667in}%2264 \pgfsys@transformshift{4.570184in}{2.749457in}% 2429 2265 \pgfsys@useobject{currentmarker}{}% 2430 2266 \end{pgfscope}% … … 2434 2270 \pgfsetroundjoin% 2435 2271 \pgfsetlinewidth{1.505625pt}% 2436 \definecolor{currentstroke}{rgb}{0.1 72549,0.627451,0.172549}%2437 \pgfsetstrokecolor{currentstroke}% 2438 \pgfsetdash{}{0pt}% 2439 \pgfpathmoveto{\pgfqpoint{ 3.647146in}{2.231556in}}%2440 \pgfpathlineto{\pgfqpoint{4. 091591in}{2.231556in}}%2441 \pgfusepath{stroke}% 2442 \end{pgfscope}% 2443 \begin{pgfscope}% 2444 \pgfsetbuttcap% 2445 \pgfset miterjoin%2446 \definecolor{currentfill}{rgb}{0.1 72549,0.627451,0.172549}%2272 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 2273 \pgfsetstrokecolor{currentstroke}% 2274 \pgfsetdash{}{0pt}% 2275 \pgfpathmoveto{\pgfqpoint{4.431295in}{2.680012in}}% 2276 \pgfpathlineto{\pgfqpoint{4.709073in}{2.680012in}}% 2277 \pgfusepath{stroke}% 2278 \end{pgfscope}% 2279 \begin{pgfscope}% 2280 \pgfsetbuttcap% 2281 \pgfsetroundjoin% 2282 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 2447 2283 \pgfsetfillcolor{currentfill}% 2448 2284 \pgfsetlinewidth{1.003750pt}% 2449 \definecolor{currentstroke}{rgb}{0.1 72549,0.627451,0.172549}%2285 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 2450 2286 \pgfsetstrokecolor{currentstroke}% 2451 2287 \pgfsetdash{}{0pt}% 2452 2288 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2453 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}% 2454 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}% 2455 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}% 2456 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}% 2289 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2290 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2291 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2292 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2293 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2294 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2295 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2296 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2297 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2457 2298 \pgfpathclose% 2458 2299 \pgfusepath{stroke,fill}% 2459 2300 }% 2460 2301 \begin{pgfscope}% 2461 \pgfsys@transformshift{ 3.869368in}{2.231556in}%2302 \pgfsys@transformshift{4.570184in}{2.680012in}% 2462 2303 \pgfsys@useobject{currentmarker}{}% 2463 2304 \end{pgfscope}% … … 2467 2308 \pgfsetstrokecolor{textcolor}% 2468 2309 \pgfsetfillcolor{textcolor}% 2469 \pgftext[x=4. 269368in,y=2.153778in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-rand}%2470 \end{pgfscope}% 2471 \begin{pgfscope}% 2472 \pgfsetbuttcap% 2473 \pgfsetroundjoin% 2474 \pgfsetlinewidth{1.505625pt}% 2475 \definecolor{currentstroke}{rgb}{ 0.839216,0.152941,0.156863}%2476 \pgfsetstrokecolor{currentstroke}% 2477 \pgfsetdash{}{0pt}% 2478 \pgfpathmoveto{\pgfqpoint{ 3.869368in}{1.795985in}}%2479 \pgfpathlineto{\pgfqpoint{ 3.869368in}{2.018207in}}%2480 \pgfusepath{stroke}% 2481 \end{pgfscope}% 2482 \begin{pgfscope}% 2483 \pgfsetbuttcap% 2484 \pgfsetroundjoin% 2485 \definecolor{currentfill}{rgb}{ 0.839216,0.152941,0.156863}%2310 \pgftext[x=4.820184in,y=2.631401in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-baseline}% 2311 \end{pgfscope}% 2312 \begin{pgfscope}% 2313 \pgfsetbuttcap% 2314 \pgfsetroundjoin% 2315 \pgfsetlinewidth{1.505625pt}% 2316 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2317 \pgfsetstrokecolor{currentstroke}% 2318 \pgfsetdash{}{0pt}% 2319 \pgfpathmoveto{\pgfqpoint{4.570184in}{2.416895in}}% 2320 \pgfpathlineto{\pgfqpoint{4.570184in}{2.555784in}}% 2321 \pgfusepath{stroke}% 2322 \end{pgfscope}% 2323 \begin{pgfscope}% 2324 \pgfsetbuttcap% 2325 \pgfsetroundjoin% 2326 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 2486 2327 \pgfsetfillcolor{currentfill}% 2487 2328 \pgfsetlinewidth{1.003750pt}% 2488 \definecolor{currentstroke}{rgb}{ 0.839216,0.152941,0.156863}%2329 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2489 2330 \pgfsetstrokecolor{currentstroke}% 2490 2331 \pgfsetdash{}{0pt}% … … 2495 2336 }% 2496 2337 \begin{pgfscope}% 2497 \pgfsys@transformshift{ 3.869368in}{1.795985in}%2498 \pgfsys@useobject{currentmarker}{}% 2499 \end{pgfscope}% 2500 \end{pgfscope}% 2501 \begin{pgfscope}% 2502 \pgfsetbuttcap% 2503 \pgfsetroundjoin% 2504 \definecolor{currentfill}{rgb}{ 0.839216,0.152941,0.156863}%2338 \pgfsys@transformshift{4.570184in}{2.416895in}% 2339 \pgfsys@useobject{currentmarker}{}% 2340 \end{pgfscope}% 2341 \end{pgfscope}% 2342 \begin{pgfscope}% 2343 \pgfsetbuttcap% 2344 \pgfsetroundjoin% 2345 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 2505 2346 \pgfsetfillcolor{currentfill}% 2506 2347 \pgfsetlinewidth{1.003750pt}% 2507 \definecolor{currentstroke}{rgb}{ 0.839216,0.152941,0.156863}%2348 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2508 2349 \pgfsetstrokecolor{currentstroke}% 2509 2350 \pgfsetdash{}{0pt}% … … 2514 2355 }% 2515 2356 \begin{pgfscope}% 2516 \pgfsys@transformshift{ 3.869368in}{2.018207in}%2357 \pgfsys@transformshift{4.570184in}{2.555784in}% 2517 2358 \pgfsys@useobject{currentmarker}{}% 2518 2359 \end{pgfscope}% … … 2522 2363 \pgfsetroundjoin% 2523 2364 \pgfsetlinewidth{1.505625pt}% 2524 \definecolor{currentstroke}{rgb}{ 0.839216,0.152941,0.156863}%2525 \pgfsetstrokecolor{currentstroke}% 2526 \pgfsetdash{}{0pt}% 2527 \pgfpathmoveto{\pgfqpoint{ 3.647146in}{1.907096in}}%2528 \pgfpathlineto{\pgfqpoint{4. 091591in}{1.907096in}}%2529 \pgfusepath{stroke}% 2530 \end{pgfscope}% 2531 \begin{pgfscope}% 2532 \pgfsetbuttcap% 2533 \pgfset miterjoin%2534 \definecolor{currentfill}{rgb}{ 0.839216,0.152941,0.156863}%2365 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2366 \pgfsetstrokecolor{currentstroke}% 2367 \pgfsetdash{}{0pt}% 2368 \pgfpathmoveto{\pgfqpoint{4.431295in}{2.486339in}}% 2369 \pgfpathlineto{\pgfqpoint{4.709073in}{2.486339in}}% 2370 \pgfusepath{stroke}% 2371 \end{pgfscope}% 2372 \begin{pgfscope}% 2373 \pgfsetbuttcap% 2374 \pgfsetroundjoin% 2375 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 2535 2376 \pgfsetfillcolor{currentfill}% 2536 2377 \pgfsetlinewidth{1.003750pt}% 2537 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2538 \pgfsetstrokecolor{currentstroke}% 2539 \pgfsetdash{}{0pt}% 2540 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.058926in}{-0.058926in}}{\pgfqpoint{0.058926in}{0.058926in}}{% 2541 \pgfpathmoveto{\pgfqpoint{-0.000000in}{-0.058926in}}% 2542 \pgfpathlineto{\pgfqpoint{0.058926in}{0.000000in}}% 2543 \pgfpathlineto{\pgfqpoint{0.000000in}{0.058926in}}% 2544 \pgfpathlineto{\pgfqpoint{-0.058926in}{0.000000in}}% 2378 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2379 \pgfsetstrokecolor{currentstroke}% 2380 \pgfsetdash{}{0pt}% 2381 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2382 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2383 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2384 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2385 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2386 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2387 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2388 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2389 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2390 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2545 2391 \pgfpathclose% 2546 2392 \pgfusepath{stroke,fill}% 2547 2393 }% 2548 2394 \begin{pgfscope}% 2549 \pgfsys@transformshift{ 3.869368in}{1.907096in}%2395 \pgfsys@transformshift{4.570184in}{2.486339in}% 2550 2396 \pgfsys@useobject{currentmarker}{}% 2551 2397 \end{pgfscope}% … … 2555 2401 \pgfsetstrokecolor{textcolor}% 2556 2402 \pgfsetfillcolor{textcolor}% 2557 \pgftext[x=4.269368in,y=1.829318in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-rand}% 2403 \pgftext[x=4.820184in,y=2.437728in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-baseline}% 2404 \end{pgfscope}% 2405 \begin{pgfscope}% 2406 \pgfsetbuttcap% 2407 \pgfsetroundjoin% 2408 \pgfsetlinewidth{1.505625pt}% 2409 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2410 \pgfsetstrokecolor{currentstroke}% 2411 \pgfsetdash{}{0pt}% 2412 \pgfpathmoveto{\pgfqpoint{4.570184in}{2.223222in}}% 2413 \pgfpathlineto{\pgfqpoint{4.570184in}{2.362111in}}% 2414 \pgfusepath{stroke}% 2415 \end{pgfscope}% 2416 \begin{pgfscope}% 2417 \pgfsetbuttcap% 2418 \pgfsetroundjoin% 2419 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2420 \pgfsetfillcolor{currentfill}% 2421 \pgfsetlinewidth{1.003750pt}% 2422 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2423 \pgfsetstrokecolor{currentstroke}% 2424 \pgfsetdash{}{0pt}% 2425 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 2426 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 2427 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 2428 \pgfusepath{stroke,fill}% 2429 }% 2430 \begin{pgfscope}% 2431 \pgfsys@transformshift{4.570184in}{2.223222in}% 2432 \pgfsys@useobject{currentmarker}{}% 2433 \end{pgfscope}% 2434 \end{pgfscope}% 2435 \begin{pgfscope}% 2436 \pgfsetbuttcap% 2437 \pgfsetroundjoin% 2438 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2439 \pgfsetfillcolor{currentfill}% 2440 \pgfsetlinewidth{1.003750pt}% 2441 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2442 \pgfsetstrokecolor{currentstroke}% 2443 \pgfsetdash{}{0pt}% 2444 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 2445 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 2446 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 2447 \pgfusepath{stroke,fill}% 2448 }% 2449 \begin{pgfscope}% 2450 \pgfsys@transformshift{4.570184in}{2.362111in}% 2451 \pgfsys@useobject{currentmarker}{}% 2452 \end{pgfscope}% 2453 \end{pgfscope}% 2454 \begin{pgfscope}% 2455 \pgfsetrectcap% 2456 \pgfsetroundjoin% 2457 \pgfsetlinewidth{1.505625pt}% 2458 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2459 \pgfsetstrokecolor{currentstroke}% 2460 \pgfsetdash{}{0pt}% 2461 \pgfpathmoveto{\pgfqpoint{4.431295in}{2.292667in}}% 2462 \pgfpathlineto{\pgfqpoint{4.709073in}{2.292667in}}% 2463 \pgfusepath{stroke}% 2464 \end{pgfscope}% 2465 \begin{pgfscope}% 2466 \pgfsetbuttcap% 2467 \pgfsetroundjoin% 2468 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2469 \pgfsetfillcolor{currentfill}% 2470 \pgfsetlinewidth{1.003750pt}% 2471 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2472 \pgfsetstrokecolor{currentstroke}% 2473 \pgfsetdash{}{0pt}% 2474 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2475 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2476 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2477 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2478 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2479 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2480 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2481 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2482 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2483 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2484 \pgfpathclose% 2485 \pgfusepath{stroke,fill}% 2486 }% 2487 \begin{pgfscope}% 2488 \pgfsys@transformshift{4.570184in}{2.292667in}% 2489 \pgfsys@useobject{currentmarker}{}% 2490 \end{pgfscope}% 2491 \end{pgfscope}% 2492 \begin{pgfscope}% 2493 \definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% 2494 \pgfsetstrokecolor{textcolor}% 2495 \pgfsetfillcolor{textcolor}% 2496 \pgftext[x=4.820184in,y=2.244056in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-rand}% 2497 \end{pgfscope}% 2498 \begin{pgfscope}% 2499 \pgfsetbuttcap% 2500 \pgfsetroundjoin% 2501 \pgfsetlinewidth{1.505625pt}% 2502 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2503 \pgfsetstrokecolor{currentstroke}% 2504 \pgfsetdash{}{0pt}% 2505 \pgfpathmoveto{\pgfqpoint{4.570184in}{2.029549in}}% 2506 \pgfpathlineto{\pgfqpoint{4.570184in}{2.168438in}}% 2507 \pgfusepath{stroke}% 2508 \end{pgfscope}% 2509 \begin{pgfscope}% 2510 \pgfsetbuttcap% 2511 \pgfsetroundjoin% 2512 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2513 \pgfsetfillcolor{currentfill}% 2514 \pgfsetlinewidth{1.003750pt}% 2515 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2516 \pgfsetstrokecolor{currentstroke}% 2517 \pgfsetdash{}{0pt}% 2518 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 2519 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 2520 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 2521 \pgfusepath{stroke,fill}% 2522 }% 2523 \begin{pgfscope}% 2524 \pgfsys@transformshift{4.570184in}{2.029549in}% 2525 \pgfsys@useobject{currentmarker}{}% 2526 \end{pgfscope}% 2527 \end{pgfscope}% 2528 \begin{pgfscope}% 2529 \pgfsetbuttcap% 2530 \pgfsetroundjoin% 2531 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2532 \pgfsetfillcolor{currentfill}% 2533 \pgfsetlinewidth{1.003750pt}% 2534 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2535 \pgfsetstrokecolor{currentstroke}% 2536 \pgfsetdash{}{0pt}% 2537 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 2538 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 2539 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 2540 \pgfusepath{stroke,fill}% 2541 }% 2542 \begin{pgfscope}% 2543 \pgfsys@transformshift{4.570184in}{2.168438in}% 2544 \pgfsys@useobject{currentmarker}{}% 2545 \end{pgfscope}% 2546 \end{pgfscope}% 2547 \begin{pgfscope}% 2548 \pgfsetrectcap% 2549 \pgfsetroundjoin% 2550 \pgfsetlinewidth{1.505625pt}% 2551 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2552 \pgfsetstrokecolor{currentstroke}% 2553 \pgfsetdash{}{0pt}% 2554 \pgfpathmoveto{\pgfqpoint{4.431295in}{2.098994in}}% 2555 \pgfpathlineto{\pgfqpoint{4.709073in}{2.098994in}}% 2556 \pgfusepath{stroke}% 2557 \end{pgfscope}% 2558 \begin{pgfscope}% 2559 \pgfsetbuttcap% 2560 \pgfsetroundjoin% 2561 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2562 \pgfsetfillcolor{currentfill}% 2563 \pgfsetlinewidth{1.003750pt}% 2564 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2565 \pgfsetstrokecolor{currentstroke}% 2566 \pgfsetdash{}{0pt}% 2567 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2568 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2569 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2570 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2571 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2572 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2573 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2574 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2575 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2576 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2577 \pgfpathclose% 2578 \pgfusepath{stroke,fill}% 2579 }% 2580 \begin{pgfscope}% 2581 \pgfsys@transformshift{4.570184in}{2.098994in}% 2582 \pgfsys@useobject{currentmarker}{}% 2583 \end{pgfscope}% 2584 \end{pgfscope}% 2585 \begin{pgfscope}% 2586 \definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% 2587 \pgfsetstrokecolor{textcolor}% 2588 \pgfsetfillcolor{textcolor}% 2589 \pgftext[x=4.820184in,y=2.050383in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-rand}% 2558 2590 \end{pgfscope}% 2559 2591 \end{pgfpicture}% -
doc/theses/colby_parsons_MMAth/figures/nasus_Channel_Contention.pgf
r3982384 r6e4c44d 77 77 \pgfsetstrokecolor{textcolor}% 78 78 \pgfsetfillcolor{textcolor}% 79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 2\)}%79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 2\)}% 80 80 \end{pgfscope}% 81 81 \begin{pgfscope}% … … 102 102 \pgfsetstrokecolor{textcolor}% 103 103 \pgfsetfillcolor{textcolor}% 104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 4\)}%104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 4\)}% 105 105 \end{pgfscope}% 106 106 \begin{pgfscope}% … … 127 127 \pgfsetstrokecolor{textcolor}% 128 128 \pgfsetfillcolor{textcolor}% 129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 8\)}%129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 8\)}% 130 130 \end{pgfscope}% 131 131 \begin{pgfscope}% … … 152 152 \pgfsetstrokecolor{textcolor}% 153 153 \pgfsetfillcolor{textcolor}% 154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 16\)}%154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 16\)}% 155 155 \end{pgfscope}% 156 156 \begin{pgfscope}% … … 177 177 \pgfsetstrokecolor{textcolor}% 178 178 \pgfsetfillcolor{textcolor}% 179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 24\)}%179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 24\)}% 180 180 \end{pgfscope}% 181 181 \begin{pgfscope}% … … 202 202 \pgfsetstrokecolor{textcolor}% 203 203 \pgfsetfillcolor{textcolor}% 204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 32\)}%204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 32\)}% 205 205 \end{pgfscope}% 206 206 \begin{pgfscope}% … … 208 208 \pgfsetstrokecolor{textcolor}% 209 209 \pgfsetfillcolor{textcolor}% 210 \pgftext[x=3.280000in,y=0. 161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}%210 \pgftext[x=3.280000in,y=0.251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}% 211 211 \end{pgfscope}% 212 212 \begin{pgfscope}% … … 233 233 \pgfsetstrokecolor{textcolor}% 234 234 \pgfsetfillcolor{textcolor}% 235 \pgftext[x=0. 399655in,y=2.012615in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{8}\)}%235 \pgftext[x=0.501581in,y=2.047723in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{8}\)}% 236 236 \end{pgfscope}% 237 237 \begin{pgfscope}% … … 467 467 \pgfsetstrokecolor{textcolor}% 468 468 \pgfsetfillcolor{textcolor}% 469 \pgftext[x=0. 344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (channel operations)}%469 \pgftext[x=0.446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (channel operations)}% 470 470 \end{pgfscope}% 471 471 \begin{pgfscope}% … … 876 876 \pgfusepath{clip}% 877 877 \pgfsetbuttcap% 878 \pgfset miterjoin%878 \pgfsetroundjoin% 879 879 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 880 880 \pgfsetfillcolor{currentfill}% 881 881 \pgfsetlinewidth{1.003750pt}% 882 882 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 883 \pgfsetstrokecolor{currentstroke}%884 \pgfsetdash{}{0pt}%885 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%886 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}%887 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%888 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%889 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}%890 \pgfpathclose%891 \pgfusepath{stroke,fill}%892 }%893 \begin{pgfscope}%894 \pgfsys@transformshift{1.025455in}{3.406486in}%895 \pgfsys@useobject{currentmarker}{}%896 \end{pgfscope}%897 \begin{pgfscope}%898 \pgfsys@transformshift{1.326061in}{3.091073in}%899 \pgfsys@useobject{currentmarker}{}%900 \end{pgfscope}%901 \begin{pgfscope}%902 \pgfsys@transformshift{1.927273in}{2.246470in}%903 \pgfsys@useobject{currentmarker}{}%904 \end{pgfscope}%905 \begin{pgfscope}%906 \pgfsys@transformshift{3.129697in}{1.072038in}%907 \pgfsys@useobject{currentmarker}{}%908 \end{pgfscope}%909 \begin{pgfscope}%910 \pgfsys@transformshift{4.332121in}{0.890889in}%911 \pgfsys@useobject{currentmarker}{}%912 \end{pgfscope}%913 \begin{pgfscope}%914 \pgfsys@transformshift{5.534545in}{1.106104in}%915 \pgfsys@useobject{currentmarker}{}%916 \end{pgfscope}%917 \end{pgfscope}%918 \begin{pgfscope}%919 \pgfsetrectcap%920 \pgfsetmiterjoin%921 \pgfsetlinewidth{0.803000pt}%922 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%923 \pgfsetstrokecolor{currentstroke}%924 \pgfsetdash{}{0pt}%925 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%926 \pgfpathlineto{\pgfqpoint{0.800000in}{4.224000in}}%927 \pgfusepath{stroke}%928 \end{pgfscope}%929 \begin{pgfscope}%930 \pgfsetrectcap%931 \pgfsetmiterjoin%932 \pgfsetlinewidth{0.803000pt}%933 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%934 \pgfsetstrokecolor{currentstroke}%935 \pgfsetdash{}{0pt}%936 \pgfpathmoveto{\pgfqpoint{5.760000in}{0.528000in}}%937 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%938 \pgfusepath{stroke}%939 \end{pgfscope}%940 \begin{pgfscope}%941 \pgfsetrectcap%942 \pgfsetmiterjoin%943 \pgfsetlinewidth{0.803000pt}%944 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%945 \pgfsetstrokecolor{currentstroke}%946 \pgfsetdash{}{0pt}%947 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%948 \pgfpathlineto{\pgfqpoint{5.760000in}{0.528000in}}%949 \pgfusepath{stroke}%950 \end{pgfscope}%951 \begin{pgfscope}%952 \pgfsetrectcap%953 \pgfsetmiterjoin%954 \pgfsetlinewidth{0.803000pt}%955 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%956 \pgfsetstrokecolor{currentstroke}%957 \pgfsetdash{}{0pt}%958 \pgfpathmoveto{\pgfqpoint{0.800000in}{4.224000in}}%959 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%960 \pgfusepath{stroke}%961 \end{pgfscope}%962 \begin{pgfscope}%963 \definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%964 \pgfsetstrokecolor{textcolor}%965 \pgfsetfillcolor{textcolor}%966 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{19.200000}{23.040000}\selectfont Channel Contention Benchmark}%967 \end{pgfscope}%968 \begin{pgfscope}%969 \pgfsetbuttcap%970 \pgfsetmiterjoin%971 \definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}%972 \pgfsetfillcolor{currentfill}%973 \pgfsetfillopacity{0.800000}%974 \pgfsetlinewidth{1.003750pt}%975 \definecolor{currentstroke}{rgb}{0.800000,0.800000,0.800000}%976 \pgfsetstrokecolor{currentstroke}%977 \pgfsetstrokeopacity{0.800000}%978 \pgfsetdash{}{0pt}%979 \pgfpathmoveto{\pgfqpoint{4.447292in}{3.397303in}}%980 \pgfpathlineto{\pgfqpoint{5.604444in}{3.397303in}}%981 \pgfpathquadraticcurveto{\pgfqpoint{5.648889in}{3.397303in}}{\pgfqpoint{5.648889in}{3.441747in}}%982 \pgfpathlineto{\pgfqpoint{5.648889in}{4.068444in}}%983 \pgfpathquadraticcurveto{\pgfqpoint{5.648889in}{4.112889in}}{\pgfqpoint{5.604444in}{4.112889in}}%984 \pgfpathlineto{\pgfqpoint{4.447292in}{4.112889in}}%985 \pgfpathquadraticcurveto{\pgfqpoint{4.402848in}{4.112889in}}{\pgfqpoint{4.402848in}{4.068444in}}%986 \pgfpathlineto{\pgfqpoint{4.402848in}{3.441747in}}%987 \pgfpathquadraticcurveto{\pgfqpoint{4.402848in}{3.397303in}}{\pgfqpoint{4.447292in}{3.397303in}}%988 \pgfpathclose%989 \pgfusepath{stroke,fill}%990 \end{pgfscope}%991 \begin{pgfscope}%992 \pgfsetbuttcap%993 \pgfsetroundjoin%994 \pgfsetlinewidth{1.505625pt}%995 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%996 \pgfsetstrokecolor{currentstroke}%997 \pgfsetdash{}{0pt}%998 \pgfpathmoveto{\pgfqpoint{4.713959in}{3.824000in}}%999 \pgfpathlineto{\pgfqpoint{4.713959in}{4.046222in}}%1000 \pgfusepath{stroke}%1001 \end{pgfscope}%1002 \begin{pgfscope}%1003 \pgfsetbuttcap%1004 \pgfsetroundjoin%1005 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%1006 \pgfsetfillcolor{currentfill}%1007 \pgfsetlinewidth{1.003750pt}%1008 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%1009 \pgfsetstrokecolor{currentstroke}%1010 \pgfsetdash{}{0pt}%1011 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%1012 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%1013 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%1014 \pgfusepath{stroke,fill}%1015 }%1016 \begin{pgfscope}%1017 \pgfsys@transformshift{4.713959in}{3.824000in}%1018 \pgfsys@useobject{currentmarker}{}%1019 \end{pgfscope}%1020 \end{pgfscope}%1021 \begin{pgfscope}%1022 \pgfsetbuttcap%1023 \pgfsetroundjoin%1024 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%1025 \pgfsetfillcolor{currentfill}%1026 \pgfsetlinewidth{1.003750pt}%1027 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%1028 \pgfsetstrokecolor{currentstroke}%1029 \pgfsetdash{}{0pt}%1030 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%1031 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%1032 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%1033 \pgfusepath{stroke,fill}%1034 }%1035 \begin{pgfscope}%1036 \pgfsys@transformshift{4.713959in}{4.046222in}%1037 \pgfsys@useobject{currentmarker}{}%1038 \end{pgfscope}%1039 \end{pgfscope}%1040 \begin{pgfscope}%1041 \pgfsetrectcap%1042 \pgfsetroundjoin%1043 \pgfsetlinewidth{1.505625pt}%1044 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%1045 \pgfsetstrokecolor{currentstroke}%1046 \pgfsetdash{}{0pt}%1047 \pgfpathmoveto{\pgfqpoint{4.491737in}{3.935111in}}%1048 \pgfpathlineto{\pgfqpoint{4.936181in}{3.935111in}}%1049 \pgfusepath{stroke}%1050 \end{pgfscope}%1051 \begin{pgfscope}%1052 \pgfsetbuttcap%1053 \pgfsetroundjoin%1054 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%1055 \pgfsetfillcolor{currentfill}%1056 \pgfsetlinewidth{1.003750pt}%1057 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%1058 883 \pgfsetstrokecolor{currentstroke}% 1059 884 \pgfsetdash{}{0pt}% … … 1072 897 }% 1073 898 \begin{pgfscope}% 1074 \pgfsys@transformshift{4.713959in}{3.935111in}% 1075 \pgfsys@useobject{currentmarker}{}% 1076 \end{pgfscope}% 899 \pgfsys@transformshift{1.025455in}{3.406486in}% 900 \pgfsys@useobject{currentmarker}{}% 901 \end{pgfscope}% 902 \begin{pgfscope}% 903 \pgfsys@transformshift{1.326061in}{3.091073in}% 904 \pgfsys@useobject{currentmarker}{}% 905 \end{pgfscope}% 906 \begin{pgfscope}% 907 \pgfsys@transformshift{1.927273in}{2.246470in}% 908 \pgfsys@useobject{currentmarker}{}% 909 \end{pgfscope}% 910 \begin{pgfscope}% 911 \pgfsys@transformshift{3.129697in}{1.072038in}% 912 \pgfsys@useobject{currentmarker}{}% 913 \end{pgfscope}% 914 \begin{pgfscope}% 915 \pgfsys@transformshift{4.332121in}{0.890889in}% 916 \pgfsys@useobject{currentmarker}{}% 917 \end{pgfscope}% 918 \begin{pgfscope}% 919 \pgfsys@transformshift{5.534545in}{1.106104in}% 920 \pgfsys@useobject{currentmarker}{}% 921 \end{pgfscope}% 922 \end{pgfscope}% 923 \begin{pgfscope}% 924 \pgfsetrectcap% 925 \pgfsetmiterjoin% 926 \pgfsetlinewidth{0.803000pt}% 927 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 928 \pgfsetstrokecolor{currentstroke}% 929 \pgfsetdash{}{0pt}% 930 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}% 931 \pgfpathlineto{\pgfqpoint{0.800000in}{4.224000in}}% 932 \pgfusepath{stroke}% 933 \end{pgfscope}% 934 \begin{pgfscope}% 935 \pgfsetrectcap% 936 \pgfsetmiterjoin% 937 \pgfsetlinewidth{0.803000pt}% 938 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 939 \pgfsetstrokecolor{currentstroke}% 940 \pgfsetdash{}{0pt}% 941 \pgfpathmoveto{\pgfqpoint{5.760000in}{0.528000in}}% 942 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}% 943 \pgfusepath{stroke}% 944 \end{pgfscope}% 945 \begin{pgfscope}% 946 \pgfsetrectcap% 947 \pgfsetmiterjoin% 948 \pgfsetlinewidth{0.803000pt}% 949 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 950 \pgfsetstrokecolor{currentstroke}% 951 \pgfsetdash{}{0pt}% 952 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}% 953 \pgfpathlineto{\pgfqpoint{5.760000in}{0.528000in}}% 954 \pgfusepath{stroke}% 955 \end{pgfscope}% 956 \begin{pgfscope}% 957 \pgfsetrectcap% 958 \pgfsetmiterjoin% 959 \pgfsetlinewidth{0.803000pt}% 960 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 961 \pgfsetstrokecolor{currentstroke}% 962 \pgfsetdash{}{0pt}% 963 \pgfpathmoveto{\pgfqpoint{0.800000in}{4.224000in}}% 964 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}% 965 \pgfusepath{stroke}% 1077 966 \end{pgfscope}% 1078 967 \begin{pgfscope}% … … 1080 969 \pgfsetstrokecolor{textcolor}% 1081 970 \pgfsetfillcolor{textcolor}% 1082 \pgftext[x=5.113959in,y=3.857333in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA}% 1083 \end{pgfscope}% 1084 \begin{pgfscope}% 1085 \pgfsetbuttcap% 1086 \pgfsetroundjoin% 1087 \pgfsetlinewidth{1.505625pt}% 1088 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1089 \pgfsetstrokecolor{currentstroke}% 1090 \pgfsetdash{}{0pt}% 1091 \pgfpathmoveto{\pgfqpoint{4.713959in}{3.499540in}}% 1092 \pgfpathlineto{\pgfqpoint{4.713959in}{3.721763in}}% 1093 \pgfusepath{stroke}% 1094 \end{pgfscope}% 1095 \begin{pgfscope}% 1096 \pgfsetbuttcap% 1097 \pgfsetroundjoin% 1098 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1099 \pgfsetfillcolor{currentfill}% 1100 \pgfsetlinewidth{1.003750pt}% 1101 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 971 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{12.000000}{14.400000}\selectfont Channel Contention Benchmark}% 972 \end{pgfscope}% 973 \begin{pgfscope}% 974 \pgfsetbuttcap% 975 \pgfsetmiterjoin% 976 \definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}% 977 \pgfsetfillcolor{currentfill}% 978 \pgfsetfillopacity{0.800000}% 979 \pgfsetlinewidth{1.003750pt}% 980 \definecolor{currentstroke}{rgb}{0.800000,0.800000,0.800000}% 981 \pgfsetstrokecolor{currentstroke}% 982 \pgfsetstrokeopacity{0.800000}% 983 \pgfsetdash{}{0pt}% 984 \pgfpathmoveto{\pgfqpoint{4.938626in}{3.725543in}}% 985 \pgfpathlineto{\pgfqpoint{5.662778in}{3.725543in}}% 986 \pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{3.725543in}}{\pgfqpoint{5.690556in}{3.753321in}}% 987 \pgfpathlineto{\pgfqpoint{5.690556in}{4.126778in}}% 988 \pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{4.154556in}}{\pgfqpoint{5.662778in}{4.154556in}}% 989 \pgfpathlineto{\pgfqpoint{4.938626in}{4.154556in}}% 990 \pgfpathquadraticcurveto{\pgfqpoint{4.910848in}{4.154556in}}{\pgfqpoint{4.910848in}{4.126778in}}% 991 \pgfpathlineto{\pgfqpoint{4.910848in}{3.753321in}}% 992 \pgfpathquadraticcurveto{\pgfqpoint{4.910848in}{3.725543in}}{\pgfqpoint{4.938626in}{3.725543in}}% 993 \pgfpathclose% 994 \pgfusepath{stroke,fill}% 995 \end{pgfscope}% 996 \begin{pgfscope}% 997 \pgfsetbuttcap% 998 \pgfsetroundjoin% 999 \pgfsetlinewidth{1.505625pt}% 1000 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1001 \pgfsetstrokecolor{currentstroke}% 1002 \pgfsetdash{}{0pt}% 1003 \pgfpathmoveto{\pgfqpoint{5.105293in}{3.980944in}}% 1004 \pgfpathlineto{\pgfqpoint{5.105293in}{4.119833in}}% 1005 \pgfusepath{stroke}% 1006 \end{pgfscope}% 1007 \begin{pgfscope}% 1008 \pgfsetbuttcap% 1009 \pgfsetroundjoin% 1010 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 1011 \pgfsetfillcolor{currentfill}% 1012 \pgfsetlinewidth{1.003750pt}% 1013 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1102 1014 \pgfsetstrokecolor{currentstroke}% 1103 1015 \pgfsetdash{}{0pt}% … … 1108 1020 }% 1109 1021 \begin{pgfscope}% 1110 \pgfsys@transformshift{ 4.713959in}{3.499540in}%1111 \pgfsys@useobject{currentmarker}{}% 1112 \end{pgfscope}% 1113 \end{pgfscope}% 1114 \begin{pgfscope}% 1115 \pgfsetbuttcap% 1116 \pgfsetroundjoin% 1117 \definecolor{currentfill}{rgb}{ 1.000000,0.498039,0.054902}%1118 \pgfsetfillcolor{currentfill}% 1119 \pgfsetlinewidth{1.003750pt}% 1120 \definecolor{currentstroke}{rgb}{ 1.000000,0.498039,0.054902}%1022 \pgfsys@transformshift{5.105293in}{3.980944in}% 1023 \pgfsys@useobject{currentmarker}{}% 1024 \end{pgfscope}% 1025 \end{pgfscope}% 1026 \begin{pgfscope}% 1027 \pgfsetbuttcap% 1028 \pgfsetroundjoin% 1029 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 1030 \pgfsetfillcolor{currentfill}% 1031 \pgfsetlinewidth{1.003750pt}% 1032 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1121 1033 \pgfsetstrokecolor{currentstroke}% 1122 1034 \pgfsetdash{}{0pt}% … … 1127 1039 }% 1128 1040 \begin{pgfscope}% 1129 \pgfsys@transformshift{ 4.713959in}{3.721763in}%1041 \pgfsys@transformshift{5.105293in}{4.119833in}% 1130 1042 \pgfsys@useobject{currentmarker}{}% 1131 1043 \end{pgfscope}% … … 1135 1047 \pgfsetroundjoin% 1136 1048 \pgfsetlinewidth{1.505625pt}% 1137 \definecolor{currentstroke}{rgb}{ 1.000000,0.498039,0.054902}%1138 \pgfsetstrokecolor{currentstroke}% 1139 \pgfsetdash{}{0pt}% 1140 \pgfpathmoveto{\pgfqpoint{4. 491737in}{3.610651in}}%1141 \pgfpathlineto{\pgfqpoint{ 4.936181in}{3.610651in}}%1142 \pgfusepath{stroke}% 1143 \end{pgfscope}% 1144 \begin{pgfscope}% 1145 \pgfsetbuttcap% 1146 \pgfset miterjoin%1147 \definecolor{currentfill}{rgb}{ 1.000000,0.498039,0.054902}%1148 \pgfsetfillcolor{currentfill}% 1149 \pgfsetlinewidth{1.003750pt}% 1150 \definecolor{currentstroke}{rgb}{ 1.000000,0.498039,0.054902}%1049 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1050 \pgfsetstrokecolor{currentstroke}% 1051 \pgfsetdash{}{0pt}% 1052 \pgfpathmoveto{\pgfqpoint{4.966404in}{4.050389in}}% 1053 \pgfpathlineto{\pgfqpoint{5.244182in}{4.050389in}}% 1054 \pgfusepath{stroke}% 1055 \end{pgfscope}% 1056 \begin{pgfscope}% 1057 \pgfsetbuttcap% 1058 \pgfsetroundjoin% 1059 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 1060 \pgfsetfillcolor{currentfill}% 1061 \pgfsetlinewidth{1.003750pt}% 1062 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1151 1063 \pgfsetstrokecolor{currentstroke}% 1152 1064 \pgfsetdash{}{0pt}% 1153 1065 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 1154 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}% 1155 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}% 1156 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}% 1157 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}% 1066 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 1067 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 1068 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 1069 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 1070 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 1071 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 1072 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 1073 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 1074 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 1158 1075 \pgfpathclose% 1159 1076 \pgfusepath{stroke,fill}% 1160 1077 }% 1161 1078 \begin{pgfscope}% 1162 \pgfsys@transformshift{ 4.713959in}{3.610651in}%1079 \pgfsys@transformshift{5.105293in}{4.050389in}% 1163 1080 \pgfsys@useobject{currentmarker}{}% 1164 1081 \end{pgfscope}% … … 1168 1085 \pgfsetstrokecolor{textcolor}% 1169 1086 \pgfsetfillcolor{textcolor}% 1170 \pgftext[x=5.113959in,y=3.532874in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Go}% 1087 \pgftext[x=5.355293in,y=4.001778in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA}% 1088 \end{pgfscope}% 1089 \begin{pgfscope}% 1090 \pgfsetbuttcap% 1091 \pgfsetroundjoin% 1092 \pgfsetlinewidth{1.505625pt}% 1093 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1094 \pgfsetstrokecolor{currentstroke}% 1095 \pgfsetdash{}{0pt}% 1096 \pgfpathmoveto{\pgfqpoint{5.105293in}{3.787272in}}% 1097 \pgfpathlineto{\pgfqpoint{5.105293in}{3.926161in}}% 1098 \pgfusepath{stroke}% 1099 \end{pgfscope}% 1100 \begin{pgfscope}% 1101 \pgfsetbuttcap% 1102 \pgfsetroundjoin% 1103 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1104 \pgfsetfillcolor{currentfill}% 1105 \pgfsetlinewidth{1.003750pt}% 1106 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1107 \pgfsetstrokecolor{currentstroke}% 1108 \pgfsetdash{}{0pt}% 1109 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 1110 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 1111 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 1112 \pgfusepath{stroke,fill}% 1113 }% 1114 \begin{pgfscope}% 1115 \pgfsys@transformshift{5.105293in}{3.787272in}% 1116 \pgfsys@useobject{currentmarker}{}% 1117 \end{pgfscope}% 1118 \end{pgfscope}% 1119 \begin{pgfscope}% 1120 \pgfsetbuttcap% 1121 \pgfsetroundjoin% 1122 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1123 \pgfsetfillcolor{currentfill}% 1124 \pgfsetlinewidth{1.003750pt}% 1125 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1126 \pgfsetstrokecolor{currentstroke}% 1127 \pgfsetdash{}{0pt}% 1128 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 1129 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 1130 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 1131 \pgfusepath{stroke,fill}% 1132 }% 1133 \begin{pgfscope}% 1134 \pgfsys@transformshift{5.105293in}{3.926161in}% 1135 \pgfsys@useobject{currentmarker}{}% 1136 \end{pgfscope}% 1137 \end{pgfscope}% 1138 \begin{pgfscope}% 1139 \pgfsetrectcap% 1140 \pgfsetroundjoin% 1141 \pgfsetlinewidth{1.505625pt}% 1142 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1143 \pgfsetstrokecolor{currentstroke}% 1144 \pgfsetdash{}{0pt}% 1145 \pgfpathmoveto{\pgfqpoint{4.966404in}{3.856716in}}% 1146 \pgfpathlineto{\pgfqpoint{5.244182in}{3.856716in}}% 1147 \pgfusepath{stroke}% 1148 \end{pgfscope}% 1149 \begin{pgfscope}% 1150 \pgfsetbuttcap% 1151 \pgfsetroundjoin% 1152 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1153 \pgfsetfillcolor{currentfill}% 1154 \pgfsetlinewidth{1.003750pt}% 1155 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1156 \pgfsetstrokecolor{currentstroke}% 1157 \pgfsetdash{}{0pt}% 1158 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 1159 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 1160 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 1161 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 1162 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 1163 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 1164 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 1165 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 1166 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 1167 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 1168 \pgfpathclose% 1169 \pgfusepath{stroke,fill}% 1170 }% 1171 \begin{pgfscope}% 1172 \pgfsys@transformshift{5.105293in}{3.856716in}% 1173 \pgfsys@useobject{currentmarker}{}% 1174 \end{pgfscope}% 1175 \end{pgfscope}% 1176 \begin{pgfscope}% 1177 \definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% 1178 \pgfsetstrokecolor{textcolor}% 1179 \pgfsetfillcolor{textcolor}% 1180 \pgftext[x=5.355293in,y=3.808105in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Go}% 1171 1181 \end{pgfscope}% 1172 1182 \end{pgfpicture}% -
doc/theses/colby_parsons_MMAth/figures/pyke_Aggregate_Lock_2.pgf
r3982384 r6e4c44d 77 77 \pgfsetstrokecolor{textcolor}% 78 78 \pgfsetfillcolor{textcolor}% 79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 2\)}%79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 2\)}% 80 80 \end{pgfscope}% 81 81 \begin{pgfscope}% … … 102 102 \pgfsetstrokecolor{textcolor}% 103 103 \pgfsetfillcolor{textcolor}% 104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 4\)}%104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 4\)}% 105 105 \end{pgfscope}% 106 106 \begin{pgfscope}% … … 127 127 \pgfsetstrokecolor{textcolor}% 128 128 \pgfsetfillcolor{textcolor}% 129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 8\)}%129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 8\)}% 130 130 \end{pgfscope}% 131 131 \begin{pgfscope}% … … 152 152 \pgfsetstrokecolor{textcolor}% 153 153 \pgfsetfillcolor{textcolor}% 154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 16\)}%154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 16\)}% 155 155 \end{pgfscope}% 156 156 \begin{pgfscope}% … … 177 177 \pgfsetstrokecolor{textcolor}% 178 178 \pgfsetfillcolor{textcolor}% 179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 24\)}%179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 24\)}% 180 180 \end{pgfscope}% 181 181 \begin{pgfscope}% … … 202 202 \pgfsetstrokecolor{textcolor}% 203 203 \pgfsetfillcolor{textcolor}% 204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 32\)}%204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 32\)}% 205 205 \end{pgfscope}% 206 206 \begin{pgfscope}% … … 208 208 \pgfsetstrokecolor{textcolor}% 209 209 \pgfsetfillcolor{textcolor}% 210 \pgftext[x=3.280000in,y=0. 161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}%210 \pgftext[x=3.280000in,y=0.251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}% 211 211 \end{pgfscope}% 212 212 \begin{pgfscope}% … … 233 233 \pgfsetstrokecolor{textcolor}% 234 234 \pgfsetfillcolor{textcolor}% 235 \pgftext[x=0. 399655in,y=0.928807in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{6}\)}%235 \pgftext[x=0.501581in,y=0.963915in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{6}\)}% 236 236 \end{pgfscope}% 237 237 \begin{pgfscope}% … … 258 258 \pgfsetstrokecolor{textcolor}% 259 259 \pgfsetfillcolor{textcolor}% 260 \pgftext[x=0. 399655in,y=2.320168in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{7}\)}%260 \pgftext[x=0.501581in,y=2.355276in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{7}\)}% 261 261 \end{pgfscope}% 262 262 \begin{pgfscope}% … … 283 283 \pgfsetstrokecolor{textcolor}% 284 284 \pgfsetfillcolor{textcolor}% 285 \pgftext[x=0. 399655in,y=3.711528in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{8}\)}%285 \pgftext[x=0.501581in,y=3.746636in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{8}\)}% 286 286 \end{pgfscope}% 287 287 \begin{pgfscope}% … … 707 707 \pgfsetstrokecolor{textcolor}% 708 708 \pgfsetfillcolor{textcolor}% 709 \pgftext[x=0. 344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (entries)}%709 \pgftext[x=0.446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (entries)}% 710 710 \end{pgfscope}% 711 711 \begin{pgfscope}% … … 1436 1436 \pgfusepath{clip}% 1437 1437 \pgfsetbuttcap% 1438 \pgfset miterjoin%1438 \pgfsetroundjoin% 1439 1439 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1440 1440 \pgfsetfillcolor{currentfill}% 1441 1441 \pgfsetlinewidth{1.003750pt}% 1442 1442 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1443 \pgfsetstrokecolor{currentstroke}%1444 \pgfsetdash{}{0pt}%1445 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%1446 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}%1447 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%1448 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%1449 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}%1450 \pgfpathclose%1451 \pgfusepath{stroke,fill}%1452 }%1453 \begin{pgfscope}%1454 \pgfsys@transformshift{1.025455in}{4.014803in}%1455 \pgfsys@useobject{currentmarker}{}%1456 \end{pgfscope}%1457 \begin{pgfscope}%1458 \pgfsys@transformshift{1.326061in}{3.745922in}%1459 \pgfsys@useobject{currentmarker}{}%1460 \end{pgfscope}%1461 \begin{pgfscope}%1462 \pgfsys@transformshift{1.927273in}{3.503889in}%1463 \pgfsys@useobject{currentmarker}{}%1464 \end{pgfscope}%1465 \begin{pgfscope}%1466 \pgfsys@transformshift{3.129697in}{3.173273in}%1467 \pgfsys@useobject{currentmarker}{}%1468 \end{pgfscope}%1469 \begin{pgfscope}%1470 \pgfsys@transformshift{4.332121in}{2.828641in}%1471 \pgfsys@useobject{currentmarker}{}%1472 \end{pgfscope}%1473 \begin{pgfscope}%1474 \pgfsys@transformshift{5.534545in}{2.787501in}%1475 \pgfsys@useobject{currentmarker}{}%1476 \end{pgfscope}%1477 \end{pgfscope}%1478 \begin{pgfscope}%1479 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%1480 \pgfusepath{clip}%1481 \pgfsetrectcap%1482 \pgfsetroundjoin%1483 \pgfsetlinewidth{1.505625pt}%1484 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%1485 \pgfsetstrokecolor{currentstroke}%1486 \pgfsetdash{}{0pt}%1487 \pgfpathmoveto{\pgfqpoint{1.025455in}{3.845372in}}%1488 \pgfpathlineto{\pgfqpoint{1.326061in}{3.591512in}}%1489 \pgfpathlineto{\pgfqpoint{1.927273in}{3.353860in}}%1490 \pgfpathlineto{\pgfqpoint{3.129697in}{2.972783in}}%1491 \pgfpathlineto{\pgfqpoint{4.332121in}{2.504321in}}%1492 \pgfpathlineto{\pgfqpoint{5.534545in}{2.425566in}}%1493 \pgfusepath{stroke}%1494 \end{pgfscope}%1495 \begin{pgfscope}%1496 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%1497 \pgfusepath{clip}%1498 \pgfsetbuttcap%1499 \pgfsetmiterjoin%1500 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%1501 \pgfsetfillcolor{currentfill}%1502 \pgfsetlinewidth{1.003750pt}%1503 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%1504 \pgfsetstrokecolor{currentstroke}%1505 \pgfsetdash{}{0pt}%1506 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.058926in}{-0.058926in}}{\pgfqpoint{0.058926in}{0.058926in}}{%1507 \pgfpathmoveto{\pgfqpoint{-0.000000in}{-0.058926in}}%1508 \pgfpathlineto{\pgfqpoint{0.058926in}{0.000000in}}%1509 \pgfpathlineto{\pgfqpoint{0.000000in}{0.058926in}}%1510 \pgfpathlineto{\pgfqpoint{-0.058926in}{0.000000in}}%1511 \pgfpathclose%1512 \pgfusepath{stroke,fill}%1513 }%1514 \begin{pgfscope}%1515 \pgfsys@transformshift{1.025455in}{3.845372in}%1516 \pgfsys@useobject{currentmarker}{}%1517 \end{pgfscope}%1518 \begin{pgfscope}%1519 \pgfsys@transformshift{1.326061in}{3.591512in}%1520 \pgfsys@useobject{currentmarker}{}%1521 \end{pgfscope}%1522 \begin{pgfscope}%1523 \pgfsys@transformshift{1.927273in}{3.353860in}%1524 \pgfsys@useobject{currentmarker}{}%1525 \end{pgfscope}%1526 \begin{pgfscope}%1527 \pgfsys@transformshift{3.129697in}{2.972783in}%1528 \pgfsys@useobject{currentmarker}{}%1529 \end{pgfscope}%1530 \begin{pgfscope}%1531 \pgfsys@transformshift{4.332121in}{2.504321in}%1532 \pgfsys@useobject{currentmarker}{}%1533 \end{pgfscope}%1534 \begin{pgfscope}%1535 \pgfsys@transformshift{5.534545in}{2.425566in}%1536 \pgfsys@useobject{currentmarker}{}%1537 \end{pgfscope}%1538 \end{pgfscope}%1539 \begin{pgfscope}%1540 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%1541 \pgfusepath{clip}%1542 \pgfsetrectcap%1543 \pgfsetroundjoin%1544 \pgfsetlinewidth{1.505625pt}%1545 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%1546 \pgfsetstrokecolor{currentstroke}%1547 \pgfsetdash{}{0pt}%1548 \pgfpathmoveto{\pgfqpoint{1.025455in}{3.748153in}}%1549 \pgfpathlineto{\pgfqpoint{1.326061in}{3.100576in}}%1550 \pgfpathlineto{\pgfqpoint{1.927273in}{2.500046in}}%1551 \pgfpathlineto{\pgfqpoint{3.129697in}{1.740526in}}%1552 \pgfpathlineto{\pgfqpoint{4.332121in}{1.218298in}}%1553 \pgfpathlineto{\pgfqpoint{5.534545in}{0.734521in}}%1554 \pgfusepath{stroke}%1555 \end{pgfscope}%1556 \begin{pgfscope}%1557 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%1558 \pgfusepath{clip}%1559 \pgfsetbuttcap%1560 \pgfsetroundjoin%1561 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%1562 \pgfsetfillcolor{currentfill}%1563 \pgfsetlinewidth{1.003750pt}%1564 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%1565 \pgfsetstrokecolor{currentstroke}%1566 \pgfsetdash{}{0pt}%1567 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%1568 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}%1569 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%1570 \pgfpathmoveto{\pgfqpoint{-0.041667in}{0.041667in}}%1571 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%1572 \pgfusepath{stroke,fill}%1573 }%1574 \begin{pgfscope}%1575 \pgfsys@transformshift{1.025455in}{3.748153in}%1576 \pgfsys@useobject{currentmarker}{}%1577 \end{pgfscope}%1578 \begin{pgfscope}%1579 \pgfsys@transformshift{1.326061in}{3.100576in}%1580 \pgfsys@useobject{currentmarker}{}%1581 \end{pgfscope}%1582 \begin{pgfscope}%1583 \pgfsys@transformshift{1.927273in}{2.500046in}%1584 \pgfsys@useobject{currentmarker}{}%1585 \end{pgfscope}%1586 \begin{pgfscope}%1587 \pgfsys@transformshift{3.129697in}{1.740526in}%1588 \pgfsys@useobject{currentmarker}{}%1589 \end{pgfscope}%1590 \begin{pgfscope}%1591 \pgfsys@transformshift{4.332121in}{1.218298in}%1592 \pgfsys@useobject{currentmarker}{}%1593 \end{pgfscope}%1594 \begin{pgfscope}%1595 \pgfsys@transformshift{5.534545in}{0.734521in}%1596 \pgfsys@useobject{currentmarker}{}%1597 \end{pgfscope}%1598 \end{pgfscope}%1599 \begin{pgfscope}%1600 \pgfsetrectcap%1601 \pgfsetmiterjoin%1602 \pgfsetlinewidth{0.803000pt}%1603 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%1604 \pgfsetstrokecolor{currentstroke}%1605 \pgfsetdash{}{0pt}%1606 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%1607 \pgfpathlineto{\pgfqpoint{0.800000in}{4.224000in}}%1608 \pgfusepath{stroke}%1609 \end{pgfscope}%1610 \begin{pgfscope}%1611 \pgfsetrectcap%1612 \pgfsetmiterjoin%1613 \pgfsetlinewidth{0.803000pt}%1614 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%1615 \pgfsetstrokecolor{currentstroke}%1616 \pgfsetdash{}{0pt}%1617 \pgfpathmoveto{\pgfqpoint{5.760000in}{0.528000in}}%1618 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%1619 \pgfusepath{stroke}%1620 \end{pgfscope}%1621 \begin{pgfscope}%1622 \pgfsetrectcap%1623 \pgfsetmiterjoin%1624 \pgfsetlinewidth{0.803000pt}%1625 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%1626 \pgfsetstrokecolor{currentstroke}%1627 \pgfsetdash{}{0pt}%1628 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%1629 \pgfpathlineto{\pgfqpoint{5.760000in}{0.528000in}}%1630 \pgfusepath{stroke}%1631 \end{pgfscope}%1632 \begin{pgfscope}%1633 \pgfsetrectcap%1634 \pgfsetmiterjoin%1635 \pgfsetlinewidth{0.803000pt}%1636 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%1637 \pgfsetstrokecolor{currentstroke}%1638 \pgfsetdash{}{0pt}%1639 \pgfpathmoveto{\pgfqpoint{0.800000in}{4.224000in}}%1640 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%1641 \pgfusepath{stroke}%1642 \end{pgfscope}%1643 \begin{pgfscope}%1644 \definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%1645 \pgfsetstrokecolor{textcolor}%1646 \pgfsetfillcolor{textcolor}%1647 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{19.200000}{23.040000}\selectfont Aggregate Lock Benchmark: 2 Locks}%1648 \end{pgfscope}%1649 \begin{pgfscope}%1650 \pgfsetbuttcap%1651 \pgfsetmiterjoin%1652 \definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}%1653 \pgfsetfillcolor{currentfill}%1654 \pgfsetfillopacity{0.800000}%1655 \pgfsetlinewidth{1.003750pt}%1656 \definecolor{currentstroke}{rgb}{0.800000,0.800000,0.800000}%1657 \pgfsetstrokecolor{currentstroke}%1658 \pgfsetstrokeopacity{0.800000}%1659 \pgfsetdash{}{0pt}%1660 \pgfpathmoveto{\pgfqpoint{0.955556in}{0.639111in}}%1661 \pgfpathlineto{\pgfqpoint{2.957298in}{0.639111in}}%1662 \pgfpathquadraticcurveto{\pgfqpoint{3.001743in}{0.639111in}}{\pgfqpoint{3.001743in}{0.683556in}}%1663 \pgfpathlineto{\pgfqpoint{3.001743in}{1.959172in}}%1664 \pgfpathquadraticcurveto{\pgfqpoint{3.001743in}{2.003617in}}{\pgfqpoint{2.957298in}{2.003617in}}%1665 \pgfpathlineto{\pgfqpoint{0.955556in}{2.003617in}}%1666 \pgfpathquadraticcurveto{\pgfqpoint{0.911111in}{2.003617in}}{\pgfqpoint{0.911111in}{1.959172in}}%1667 \pgfpathlineto{\pgfqpoint{0.911111in}{0.683556in}}%1668 \pgfpathquadraticcurveto{\pgfqpoint{0.911111in}{0.639111in}}{\pgfqpoint{0.955556in}{0.639111in}}%1669 \pgfpathclose%1670 \pgfusepath{stroke,fill}%1671 \end{pgfscope}%1672 \begin{pgfscope}%1673 \pgfsetbuttcap%1674 \pgfsetroundjoin%1675 \pgfsetlinewidth{1.505625pt}%1676 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%1677 \pgfsetstrokecolor{currentstroke}%1678 \pgfsetdash{}{0pt}%1679 \pgfpathmoveto{\pgfqpoint{1.222222in}{1.714728in}}%1680 \pgfpathlineto{\pgfqpoint{1.222222in}{1.936950in}}%1681 \pgfusepath{stroke}%1682 \end{pgfscope}%1683 \begin{pgfscope}%1684 \pgfsetbuttcap%1685 \pgfsetroundjoin%1686 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%1687 \pgfsetfillcolor{currentfill}%1688 \pgfsetlinewidth{1.003750pt}%1689 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%1690 \pgfsetstrokecolor{currentstroke}%1691 \pgfsetdash{}{0pt}%1692 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%1693 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%1694 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%1695 \pgfusepath{stroke,fill}%1696 }%1697 \begin{pgfscope}%1698 \pgfsys@transformshift{1.222222in}{1.714728in}%1699 \pgfsys@useobject{currentmarker}{}%1700 \end{pgfscope}%1701 \end{pgfscope}%1702 \begin{pgfscope}%1703 \pgfsetbuttcap%1704 \pgfsetroundjoin%1705 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%1706 \pgfsetfillcolor{currentfill}%1707 \pgfsetlinewidth{1.003750pt}%1708 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%1709 \pgfsetstrokecolor{currentstroke}%1710 \pgfsetdash{}{0pt}%1711 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%1712 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%1713 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%1714 \pgfusepath{stroke,fill}%1715 }%1716 \begin{pgfscope}%1717 \pgfsys@transformshift{1.222222in}{1.936950in}%1718 \pgfsys@useobject{currentmarker}{}%1719 \end{pgfscope}%1720 \end{pgfscope}%1721 \begin{pgfscope}%1722 \pgfsetrectcap%1723 \pgfsetroundjoin%1724 \pgfsetlinewidth{1.505625pt}%1725 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%1726 \pgfsetstrokecolor{currentstroke}%1727 \pgfsetdash{}{0pt}%1728 \pgfpathmoveto{\pgfqpoint{1.000000in}{1.825839in}}%1729 \pgfpathlineto{\pgfqpoint{1.444444in}{1.825839in}}%1730 \pgfusepath{stroke}%1731 \end{pgfscope}%1732 \begin{pgfscope}%1733 \pgfsetbuttcap%1734 \pgfsetroundjoin%1735 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%1736 \pgfsetfillcolor{currentfill}%1737 \pgfsetlinewidth{1.003750pt}%1738 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%1739 1443 \pgfsetstrokecolor{currentstroke}% 1740 1444 \pgfsetdash{}{0pt}% … … 1753 1457 }% 1754 1458 \begin{pgfscope}% 1755 \pgfsys@transformshift{1.222222in}{1.825839in}% 1756 \pgfsys@useobject{currentmarker}{}% 1757 \end{pgfscope}% 1459 \pgfsys@transformshift{1.025455in}{4.014803in}% 1460 \pgfsys@useobject{currentmarker}{}% 1461 \end{pgfscope}% 1462 \begin{pgfscope}% 1463 \pgfsys@transformshift{1.326061in}{3.745922in}% 1464 \pgfsys@useobject{currentmarker}{}% 1465 \end{pgfscope}% 1466 \begin{pgfscope}% 1467 \pgfsys@transformshift{1.927273in}{3.503889in}% 1468 \pgfsys@useobject{currentmarker}{}% 1469 \end{pgfscope}% 1470 \begin{pgfscope}% 1471 \pgfsys@transformshift{3.129697in}{3.173273in}% 1472 \pgfsys@useobject{currentmarker}{}% 1473 \end{pgfscope}% 1474 \begin{pgfscope}% 1475 \pgfsys@transformshift{4.332121in}{2.828641in}% 1476 \pgfsys@useobject{currentmarker}{}% 1477 \end{pgfscope}% 1478 \begin{pgfscope}% 1479 \pgfsys@transformshift{5.534545in}{2.787501in}% 1480 \pgfsys@useobject{currentmarker}{}% 1481 \end{pgfscope}% 1482 \end{pgfscope}% 1483 \begin{pgfscope}% 1484 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}% 1485 \pgfusepath{clip}% 1486 \pgfsetrectcap% 1487 \pgfsetroundjoin% 1488 \pgfsetlinewidth{1.505625pt}% 1489 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 1490 \pgfsetstrokecolor{currentstroke}% 1491 \pgfsetdash{}{0pt}% 1492 \pgfpathmoveto{\pgfqpoint{1.025455in}{3.845372in}}% 1493 \pgfpathlineto{\pgfqpoint{1.326061in}{3.591512in}}% 1494 \pgfpathlineto{\pgfqpoint{1.927273in}{3.353860in}}% 1495 \pgfpathlineto{\pgfqpoint{3.129697in}{2.972783in}}% 1496 \pgfpathlineto{\pgfqpoint{4.332121in}{2.504321in}}% 1497 \pgfpathlineto{\pgfqpoint{5.534545in}{2.425566in}}% 1498 \pgfusepath{stroke}% 1499 \end{pgfscope}% 1500 \begin{pgfscope}% 1501 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}% 1502 \pgfusepath{clip}% 1503 \pgfsetbuttcap% 1504 \pgfsetroundjoin% 1505 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 1506 \pgfsetfillcolor{currentfill}% 1507 \pgfsetlinewidth{1.003750pt}% 1508 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 1509 \pgfsetstrokecolor{currentstroke}% 1510 \pgfsetdash{}{0pt}% 1511 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 1512 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 1513 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 1514 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 1515 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 1516 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 1517 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 1518 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 1519 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 1520 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 1521 \pgfpathclose% 1522 \pgfusepath{stroke,fill}% 1523 }% 1524 \begin{pgfscope}% 1525 \pgfsys@transformshift{1.025455in}{3.845372in}% 1526 \pgfsys@useobject{currentmarker}{}% 1527 \end{pgfscope}% 1528 \begin{pgfscope}% 1529 \pgfsys@transformshift{1.326061in}{3.591512in}% 1530 \pgfsys@useobject{currentmarker}{}% 1531 \end{pgfscope}% 1532 \begin{pgfscope}% 1533 \pgfsys@transformshift{1.927273in}{3.353860in}% 1534 \pgfsys@useobject{currentmarker}{}% 1535 \end{pgfscope}% 1536 \begin{pgfscope}% 1537 \pgfsys@transformshift{3.129697in}{2.972783in}% 1538 \pgfsys@useobject{currentmarker}{}% 1539 \end{pgfscope}% 1540 \begin{pgfscope}% 1541 \pgfsys@transformshift{4.332121in}{2.504321in}% 1542 \pgfsys@useobject{currentmarker}{}% 1543 \end{pgfscope}% 1544 \begin{pgfscope}% 1545 \pgfsys@transformshift{5.534545in}{2.425566in}% 1546 \pgfsys@useobject{currentmarker}{}% 1547 \end{pgfscope}% 1548 \end{pgfscope}% 1549 \begin{pgfscope}% 1550 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}% 1551 \pgfusepath{clip}% 1552 \pgfsetrectcap% 1553 \pgfsetroundjoin% 1554 \pgfsetlinewidth{1.505625pt}% 1555 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 1556 \pgfsetstrokecolor{currentstroke}% 1557 \pgfsetdash{}{0pt}% 1558 \pgfpathmoveto{\pgfqpoint{1.025455in}{3.748153in}}% 1559 \pgfpathlineto{\pgfqpoint{1.326061in}{3.100576in}}% 1560 \pgfpathlineto{\pgfqpoint{1.927273in}{2.500046in}}% 1561 \pgfpathlineto{\pgfqpoint{3.129697in}{1.740526in}}% 1562 \pgfpathlineto{\pgfqpoint{4.332121in}{1.218298in}}% 1563 \pgfpathlineto{\pgfqpoint{5.534545in}{0.734521in}}% 1564 \pgfusepath{stroke}% 1565 \end{pgfscope}% 1566 \begin{pgfscope}% 1567 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}% 1568 \pgfusepath{clip}% 1569 \pgfsetbuttcap% 1570 \pgfsetroundjoin% 1571 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 1572 \pgfsetfillcolor{currentfill}% 1573 \pgfsetlinewidth{1.003750pt}% 1574 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 1575 \pgfsetstrokecolor{currentstroke}% 1576 \pgfsetdash{}{0pt}% 1577 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 1578 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 1579 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 1580 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 1581 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 1582 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 1583 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 1584 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 1585 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 1586 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 1587 \pgfpathclose% 1588 \pgfusepath{stroke,fill}% 1589 }% 1590 \begin{pgfscope}% 1591 \pgfsys@transformshift{1.025455in}{3.748153in}% 1592 \pgfsys@useobject{currentmarker}{}% 1593 \end{pgfscope}% 1594 \begin{pgfscope}% 1595 \pgfsys@transformshift{1.326061in}{3.100576in}% 1596 \pgfsys@useobject{currentmarker}{}% 1597 \end{pgfscope}% 1598 \begin{pgfscope}% 1599 \pgfsys@transformshift{1.927273in}{2.500046in}% 1600 \pgfsys@useobject{currentmarker}{}% 1601 \end{pgfscope}% 1602 \begin{pgfscope}% 1603 \pgfsys@transformshift{3.129697in}{1.740526in}% 1604 \pgfsys@useobject{currentmarker}{}% 1605 \end{pgfscope}% 1606 \begin{pgfscope}% 1607 \pgfsys@transformshift{4.332121in}{1.218298in}% 1608 \pgfsys@useobject{currentmarker}{}% 1609 \end{pgfscope}% 1610 \begin{pgfscope}% 1611 \pgfsys@transformshift{5.534545in}{0.734521in}% 1612 \pgfsys@useobject{currentmarker}{}% 1613 \end{pgfscope}% 1614 \end{pgfscope}% 1615 \begin{pgfscope}% 1616 \pgfsetrectcap% 1617 \pgfsetmiterjoin% 1618 \pgfsetlinewidth{0.803000pt}% 1619 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 1620 \pgfsetstrokecolor{currentstroke}% 1621 \pgfsetdash{}{0pt}% 1622 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}% 1623 \pgfpathlineto{\pgfqpoint{0.800000in}{4.224000in}}% 1624 \pgfusepath{stroke}% 1625 \end{pgfscope}% 1626 \begin{pgfscope}% 1627 \pgfsetrectcap% 1628 \pgfsetmiterjoin% 1629 \pgfsetlinewidth{0.803000pt}% 1630 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 1631 \pgfsetstrokecolor{currentstroke}% 1632 \pgfsetdash{}{0pt}% 1633 \pgfpathmoveto{\pgfqpoint{5.760000in}{0.528000in}}% 1634 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}% 1635 \pgfusepath{stroke}% 1636 \end{pgfscope}% 1637 \begin{pgfscope}% 1638 \pgfsetrectcap% 1639 \pgfsetmiterjoin% 1640 \pgfsetlinewidth{0.803000pt}% 1641 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 1642 \pgfsetstrokecolor{currentstroke}% 1643 \pgfsetdash{}{0pt}% 1644 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}% 1645 \pgfpathlineto{\pgfqpoint{5.760000in}{0.528000in}}% 1646 \pgfusepath{stroke}% 1647 \end{pgfscope}% 1648 \begin{pgfscope}% 1649 \pgfsetrectcap% 1650 \pgfsetmiterjoin% 1651 \pgfsetlinewidth{0.803000pt}% 1652 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 1653 \pgfsetstrokecolor{currentstroke}% 1654 \pgfsetdash{}{0pt}% 1655 \pgfpathmoveto{\pgfqpoint{0.800000in}{4.224000in}}% 1656 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}% 1657 \pgfusepath{stroke}% 1758 1658 \end{pgfscope}% 1759 1659 \begin{pgfscope}% … … 1761 1661 \pgfsetstrokecolor{textcolor}% 1762 1662 \pgfsetfillcolor{textcolor}% 1763 \pgftext[x=1.622222in,y=1.748061in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-baseline}% 1764 \end{pgfscope}% 1765 \begin{pgfscope}% 1766 \pgfsetbuttcap% 1767 \pgfsetroundjoin% 1768 \pgfsetlinewidth{1.505625pt}% 1769 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1770 \pgfsetstrokecolor{currentstroke}% 1771 \pgfsetdash{}{0pt}% 1772 \pgfpathmoveto{\pgfqpoint{1.222222in}{1.390268in}}% 1773 \pgfpathlineto{\pgfqpoint{1.222222in}{1.612490in}}% 1774 \pgfusepath{stroke}% 1775 \end{pgfscope}% 1776 \begin{pgfscope}% 1777 \pgfsetbuttcap% 1778 \pgfsetroundjoin% 1779 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1780 \pgfsetfillcolor{currentfill}% 1781 \pgfsetlinewidth{1.003750pt}% 1782 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1663 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{12.000000}{14.400000}\selectfont Aggregate Lock Benchmark: 2 Locks}% 1664 \end{pgfscope}% 1665 \begin{pgfscope}% 1666 \pgfsetbuttcap% 1667 \pgfsetmiterjoin% 1668 \definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}% 1669 \pgfsetfillcolor{currentfill}% 1670 \pgfsetfillopacity{0.800000}% 1671 \pgfsetlinewidth{1.003750pt}% 1672 \definecolor{currentstroke}{rgb}{0.800000,0.800000,0.800000}% 1673 \pgfsetstrokecolor{currentstroke}% 1674 \pgfsetstrokeopacity{0.800000}% 1675 \pgfsetdash{}{0pt}% 1676 \pgfpathmoveto{\pgfqpoint{4.403517in}{3.338198in}}% 1677 \pgfpathlineto{\pgfqpoint{5.662778in}{3.338198in}}% 1678 \pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{3.338198in}}{\pgfqpoint{5.690556in}{3.365976in}}% 1679 \pgfpathlineto{\pgfqpoint{5.690556in}{4.126778in}}% 1680 \pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{4.154556in}}{\pgfqpoint{5.662778in}{4.154556in}}% 1681 \pgfpathlineto{\pgfqpoint{4.403517in}{4.154556in}}% 1682 \pgfpathquadraticcurveto{\pgfqpoint{4.375739in}{4.154556in}}{\pgfqpoint{4.375739in}{4.126778in}}% 1683 \pgfpathlineto{\pgfqpoint{4.375739in}{3.365976in}}% 1684 \pgfpathquadraticcurveto{\pgfqpoint{4.375739in}{3.338198in}}{\pgfqpoint{4.403517in}{3.338198in}}% 1685 \pgfpathclose% 1686 \pgfusepath{stroke,fill}% 1687 \end{pgfscope}% 1688 \begin{pgfscope}% 1689 \pgfsetbuttcap% 1690 \pgfsetroundjoin% 1691 \pgfsetlinewidth{1.505625pt}% 1692 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1693 \pgfsetstrokecolor{currentstroke}% 1694 \pgfsetdash{}{0pt}% 1695 \pgfpathmoveto{\pgfqpoint{4.570184in}{3.980944in}}% 1696 \pgfpathlineto{\pgfqpoint{4.570184in}{4.119833in}}% 1697 \pgfusepath{stroke}% 1698 \end{pgfscope}% 1699 \begin{pgfscope}% 1700 \pgfsetbuttcap% 1701 \pgfsetroundjoin% 1702 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 1703 \pgfsetfillcolor{currentfill}% 1704 \pgfsetlinewidth{1.003750pt}% 1705 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1783 1706 \pgfsetstrokecolor{currentstroke}% 1784 1707 \pgfsetdash{}{0pt}% … … 1789 1712 }% 1790 1713 \begin{pgfscope}% 1791 \pgfsys@transformshift{ 1.222222in}{1.390268in}%1792 \pgfsys@useobject{currentmarker}{}% 1793 \end{pgfscope}% 1794 \end{pgfscope}% 1795 \begin{pgfscope}% 1796 \pgfsetbuttcap% 1797 \pgfsetroundjoin% 1798 \definecolor{currentfill}{rgb}{ 1.000000,0.498039,0.054902}%1799 \pgfsetfillcolor{currentfill}% 1800 \pgfsetlinewidth{1.003750pt}% 1801 \definecolor{currentstroke}{rgb}{ 1.000000,0.498039,0.054902}%1714 \pgfsys@transformshift{4.570184in}{3.980944in}% 1715 \pgfsys@useobject{currentmarker}{}% 1716 \end{pgfscope}% 1717 \end{pgfscope}% 1718 \begin{pgfscope}% 1719 \pgfsetbuttcap% 1720 \pgfsetroundjoin% 1721 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 1722 \pgfsetfillcolor{currentfill}% 1723 \pgfsetlinewidth{1.003750pt}% 1724 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1802 1725 \pgfsetstrokecolor{currentstroke}% 1803 1726 \pgfsetdash{}{0pt}% … … 1808 1731 }% 1809 1732 \begin{pgfscope}% 1810 \pgfsys@transformshift{ 1.222222in}{1.612490in}%1733 \pgfsys@transformshift{4.570184in}{4.119833in}% 1811 1734 \pgfsys@useobject{currentmarker}{}% 1812 1735 \end{pgfscope}% … … 1816 1739 \pgfsetroundjoin% 1817 1740 \pgfsetlinewidth{1.505625pt}% 1818 \definecolor{currentstroke}{rgb}{ 1.000000,0.498039,0.054902}%1819 \pgfsetstrokecolor{currentstroke}% 1820 \pgfsetdash{}{0pt}% 1821 \pgfpathmoveto{\pgfqpoint{ 1.000000in}{1.501379in}}%1822 \pgfpathlineto{\pgfqpoint{ 1.444444in}{1.501379in}}%1823 \pgfusepath{stroke}% 1824 \end{pgfscope}% 1825 \begin{pgfscope}% 1826 \pgfsetbuttcap% 1827 \pgfset miterjoin%1828 \definecolor{currentfill}{rgb}{ 1.000000,0.498039,0.054902}%1829 \pgfsetfillcolor{currentfill}% 1830 \pgfsetlinewidth{1.003750pt}% 1831 \definecolor{currentstroke}{rgb}{ 1.000000,0.498039,0.054902}%1741 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1742 \pgfsetstrokecolor{currentstroke}% 1743 \pgfsetdash{}{0pt}% 1744 \pgfpathmoveto{\pgfqpoint{4.431295in}{4.050389in}}% 1745 \pgfpathlineto{\pgfqpoint{4.709073in}{4.050389in}}% 1746 \pgfusepath{stroke}% 1747 \end{pgfscope}% 1748 \begin{pgfscope}% 1749 \pgfsetbuttcap% 1750 \pgfsetroundjoin% 1751 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 1752 \pgfsetfillcolor{currentfill}% 1753 \pgfsetlinewidth{1.003750pt}% 1754 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1832 1755 \pgfsetstrokecolor{currentstroke}% 1833 1756 \pgfsetdash{}{0pt}% 1834 1757 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 1835 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}% 1836 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}% 1837 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}% 1838 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}% 1758 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 1759 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 1760 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 1761 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 1762 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 1763 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 1764 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 1765 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 1766 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 1839 1767 \pgfpathclose% 1840 1768 \pgfusepath{stroke,fill}% 1841 1769 }% 1842 1770 \begin{pgfscope}% 1843 \pgfsys@transformshift{ 1.222222in}{1.501379in}%1771 \pgfsys@transformshift{4.570184in}{4.050389in}% 1844 1772 \pgfsys@useobject{currentmarker}{}% 1845 1773 \end{pgfscope}% … … 1849 1777 \pgfsetstrokecolor{textcolor}% 1850 1778 \pgfsetfillcolor{textcolor}% 1851 \pgftext[x= 1.622222in,y=1.423601in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-baseline}%1852 \end{pgfscope}% 1853 \begin{pgfscope}% 1854 \pgfsetbuttcap% 1855 \pgfsetroundjoin% 1856 \pgfsetlinewidth{1.505625pt}% 1857 \definecolor{currentstroke}{rgb}{ 0.172549,0.627451,0.172549}%1858 \pgfsetstrokecolor{currentstroke}% 1859 \pgfsetdash{}{0pt}% 1860 \pgfpathmoveto{\pgfqpoint{ 1.222222in}{1.065808in}}%1861 \pgfpathlineto{\pgfqpoint{ 1.222222in}{1.288031in}}%1862 \pgfusepath{stroke}% 1863 \end{pgfscope}% 1864 \begin{pgfscope}% 1865 \pgfsetbuttcap% 1866 \pgfsetroundjoin% 1867 \definecolor{currentfill}{rgb}{ 0.172549,0.627451,0.172549}%1868 \pgfsetfillcolor{currentfill}% 1869 \pgfsetlinewidth{1.003750pt}% 1870 \definecolor{currentstroke}{rgb}{ 0.172549,0.627451,0.172549}%1779 \pgftext[x=4.820184in,y=4.001778in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-baseline}% 1780 \end{pgfscope}% 1781 \begin{pgfscope}% 1782 \pgfsetbuttcap% 1783 \pgfsetroundjoin% 1784 \pgfsetlinewidth{1.505625pt}% 1785 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1786 \pgfsetstrokecolor{currentstroke}% 1787 \pgfsetdash{}{0pt}% 1788 \pgfpathmoveto{\pgfqpoint{4.570184in}{3.787272in}}% 1789 \pgfpathlineto{\pgfqpoint{4.570184in}{3.926161in}}% 1790 \pgfusepath{stroke}% 1791 \end{pgfscope}% 1792 \begin{pgfscope}% 1793 \pgfsetbuttcap% 1794 \pgfsetroundjoin% 1795 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1796 \pgfsetfillcolor{currentfill}% 1797 \pgfsetlinewidth{1.003750pt}% 1798 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1871 1799 \pgfsetstrokecolor{currentstroke}% 1872 1800 \pgfsetdash{}{0pt}% … … 1877 1805 }% 1878 1806 \begin{pgfscope}% 1879 \pgfsys@transformshift{ 1.222222in}{1.065808in}%1880 \pgfsys@useobject{currentmarker}{}% 1881 \end{pgfscope}% 1882 \end{pgfscope}% 1883 \begin{pgfscope}% 1884 \pgfsetbuttcap% 1885 \pgfsetroundjoin% 1886 \definecolor{currentfill}{rgb}{ 0.172549,0.627451,0.172549}%1887 \pgfsetfillcolor{currentfill}% 1888 \pgfsetlinewidth{1.003750pt}% 1889 \definecolor{currentstroke}{rgb}{ 0.172549,0.627451,0.172549}%1807 \pgfsys@transformshift{4.570184in}{3.787272in}% 1808 \pgfsys@useobject{currentmarker}{}% 1809 \end{pgfscope}% 1810 \end{pgfscope}% 1811 \begin{pgfscope}% 1812 \pgfsetbuttcap% 1813 \pgfsetroundjoin% 1814 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1815 \pgfsetfillcolor{currentfill}% 1816 \pgfsetlinewidth{1.003750pt}% 1817 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1890 1818 \pgfsetstrokecolor{currentstroke}% 1891 1819 \pgfsetdash{}{0pt}% … … 1896 1824 }% 1897 1825 \begin{pgfscope}% 1898 \pgfsys@transformshift{ 1.222222in}{1.288031in}%1826 \pgfsys@transformshift{4.570184in}{3.926161in}% 1899 1827 \pgfsys@useobject{currentmarker}{}% 1900 1828 \end{pgfscope}% … … 1904 1832 \pgfsetroundjoin% 1905 1833 \pgfsetlinewidth{1.505625pt}% 1906 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 1907 \pgfsetstrokecolor{currentstroke}% 1908 \pgfsetdash{}{0pt}% 1909 \pgfpathmoveto{\pgfqpoint{1.000000in}{1.176919in}}% 1910 \pgfpathlineto{\pgfqpoint{1.444444in}{1.176919in}}% 1911 \pgfusepath{stroke}% 1912 \end{pgfscope}% 1913 \begin{pgfscope}% 1914 \pgfsetbuttcap% 1915 \pgfsetmiterjoin% 1916 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 1917 \pgfsetfillcolor{currentfill}% 1918 \pgfsetlinewidth{1.003750pt}% 1919 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 1920 \pgfsetstrokecolor{currentstroke}% 1921 \pgfsetdash{}{0pt}% 1922 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.058926in}{-0.058926in}}{\pgfqpoint{0.058926in}{0.058926in}}{% 1923 \pgfpathmoveto{\pgfqpoint{-0.000000in}{-0.058926in}}% 1924 \pgfpathlineto{\pgfqpoint{0.058926in}{0.000000in}}% 1925 \pgfpathlineto{\pgfqpoint{0.000000in}{0.058926in}}% 1926 \pgfpathlineto{\pgfqpoint{-0.058926in}{0.000000in}}% 1834 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1835 \pgfsetstrokecolor{currentstroke}% 1836 \pgfsetdash{}{0pt}% 1837 \pgfpathmoveto{\pgfqpoint{4.431295in}{3.856716in}}% 1838 \pgfpathlineto{\pgfqpoint{4.709073in}{3.856716in}}% 1839 \pgfusepath{stroke}% 1840 \end{pgfscope}% 1841 \begin{pgfscope}% 1842 \pgfsetbuttcap% 1843 \pgfsetroundjoin% 1844 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1845 \pgfsetfillcolor{currentfill}% 1846 \pgfsetlinewidth{1.003750pt}% 1847 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1848 \pgfsetstrokecolor{currentstroke}% 1849 \pgfsetdash{}{0pt}% 1850 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 1851 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 1852 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 1853 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 1854 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 1855 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 1856 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 1857 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 1858 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 1859 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 1927 1860 \pgfpathclose% 1928 1861 \pgfusepath{stroke,fill}% 1929 1862 }% 1930 1863 \begin{pgfscope}% 1931 \pgfsys@transformshift{ 1.222222in}{1.176919in}%1864 \pgfsys@transformshift{4.570184in}{3.856716in}% 1932 1865 \pgfsys@useobject{currentmarker}{}% 1933 1866 \end{pgfscope}% … … 1937 1870 \pgfsetstrokecolor{textcolor}% 1938 1871 \pgfsetfillcolor{textcolor}% 1939 \pgftext[x= 1.622222in,y=1.099142in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-rand}%1940 \end{pgfscope}% 1941 \begin{pgfscope}% 1942 \pgfsetbuttcap% 1943 \pgfsetroundjoin% 1944 \pgfsetlinewidth{1.505625pt}% 1945 \definecolor{currentstroke}{rgb}{0. 839216,0.152941,0.156863}%1946 \pgfsetstrokecolor{currentstroke}% 1947 \pgfsetdash{}{0pt}% 1948 \pgfpathmoveto{\pgfqpoint{ 1.222222in}{0.741349in}}%1949 \pgfpathlineto{\pgfqpoint{ 1.222222in}{0.963571in}}%1950 \pgfusepath{stroke}% 1951 \end{pgfscope}% 1952 \begin{pgfscope}% 1953 \pgfsetbuttcap% 1954 \pgfsetroundjoin% 1955 \definecolor{currentfill}{rgb}{0. 839216,0.152941,0.156863}%1956 \pgfsetfillcolor{currentfill}% 1957 \pgfsetlinewidth{1.003750pt}% 1958 \definecolor{currentstroke}{rgb}{0. 839216,0.152941,0.156863}%1872 \pgftext[x=4.820184in,y=3.808105in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-baseline}% 1873 \end{pgfscope}% 1874 \begin{pgfscope}% 1875 \pgfsetbuttcap% 1876 \pgfsetroundjoin% 1877 \pgfsetlinewidth{1.505625pt}% 1878 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 1879 \pgfsetstrokecolor{currentstroke}% 1880 \pgfsetdash{}{0pt}% 1881 \pgfpathmoveto{\pgfqpoint{4.570184in}{3.593599in}}% 1882 \pgfpathlineto{\pgfqpoint{4.570184in}{3.732488in}}% 1883 \pgfusepath{stroke}% 1884 \end{pgfscope}% 1885 \begin{pgfscope}% 1886 \pgfsetbuttcap% 1887 \pgfsetroundjoin% 1888 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 1889 \pgfsetfillcolor{currentfill}% 1890 \pgfsetlinewidth{1.003750pt}% 1891 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 1959 1892 \pgfsetstrokecolor{currentstroke}% 1960 1893 \pgfsetdash{}{0pt}% … … 1965 1898 }% 1966 1899 \begin{pgfscope}% 1967 \pgfsys@transformshift{ 1.222222in}{0.741349in}%1968 \pgfsys@useobject{currentmarker}{}% 1969 \end{pgfscope}% 1970 \end{pgfscope}% 1971 \begin{pgfscope}% 1972 \pgfsetbuttcap% 1973 \pgfsetroundjoin% 1974 \definecolor{currentfill}{rgb}{0. 839216,0.152941,0.156863}%1975 \pgfsetfillcolor{currentfill}% 1976 \pgfsetlinewidth{1.003750pt}% 1977 \definecolor{currentstroke}{rgb}{0. 839216,0.152941,0.156863}%1900 \pgfsys@transformshift{4.570184in}{3.593599in}% 1901 \pgfsys@useobject{currentmarker}{}% 1902 \end{pgfscope}% 1903 \end{pgfscope}% 1904 \begin{pgfscope}% 1905 \pgfsetbuttcap% 1906 \pgfsetroundjoin% 1907 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 1908 \pgfsetfillcolor{currentfill}% 1909 \pgfsetlinewidth{1.003750pt}% 1910 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 1978 1911 \pgfsetstrokecolor{currentstroke}% 1979 1912 \pgfsetdash{}{0pt}% … … 1984 1917 }% 1985 1918 \begin{pgfscope}% 1986 \pgfsys@transformshift{ 1.222222in}{0.963571in}%1919 \pgfsys@transformshift{4.570184in}{3.732488in}% 1987 1920 \pgfsys@useobject{currentmarker}{}% 1988 1921 \end{pgfscope}% … … 1992 1925 \pgfsetroundjoin% 1993 1926 \pgfsetlinewidth{1.505625pt}% 1994 \definecolor{currentstroke}{rgb}{0. 839216,0.152941,0.156863}%1995 \pgfsetstrokecolor{currentstroke}% 1996 \pgfsetdash{}{0pt}% 1997 \pgfpathmoveto{\pgfqpoint{ 1.000000in}{0.852460in}}%1998 \pgfpathlineto{\pgfqpoint{ 1.444444in}{0.852460in}}%1999 \pgfusepath{stroke}% 2000 \end{pgfscope}% 2001 \begin{pgfscope}% 2002 \pgfsetbuttcap% 2003 \pgfsetroundjoin% 2004 \definecolor{currentfill}{rgb}{0. 839216,0.152941,0.156863}%2005 \pgfsetfillcolor{currentfill}% 2006 \pgfsetlinewidth{1.003750pt}% 2007 \definecolor{currentstroke}{rgb}{0. 839216,0.152941,0.156863}%1927 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 1928 \pgfsetstrokecolor{currentstroke}% 1929 \pgfsetdash{}{0pt}% 1930 \pgfpathmoveto{\pgfqpoint{4.431295in}{3.663043in}}% 1931 \pgfpathlineto{\pgfqpoint{4.709073in}{3.663043in}}% 1932 \pgfusepath{stroke}% 1933 \end{pgfscope}% 1934 \begin{pgfscope}% 1935 \pgfsetbuttcap% 1936 \pgfsetroundjoin% 1937 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 1938 \pgfsetfillcolor{currentfill}% 1939 \pgfsetlinewidth{1.003750pt}% 1940 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2008 1941 \pgfsetstrokecolor{currentstroke}% 2009 1942 \pgfsetdash{}{0pt}% 2010 1943 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2011 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}% 2012 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}% 2013 \pgfpathmoveto{\pgfqpoint{-0.041667in}{0.041667in}}% 2014 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}% 2015 \pgfusepath{stroke,fill}% 2016 }% 2017 \begin{pgfscope}% 2018 \pgfsys@transformshift{1.222222in}{0.852460in}% 1944 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 1945 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 1946 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 1947 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 1948 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 1949 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 1950 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 1951 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 1952 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 1953 \pgfpathclose% 1954 \pgfusepath{stroke,fill}% 1955 }% 1956 \begin{pgfscope}% 1957 \pgfsys@transformshift{4.570184in}{3.663043in}% 2019 1958 \pgfsys@useobject{currentmarker}{}% 2020 1959 \end{pgfscope}% … … 2024 1963 \pgfsetstrokecolor{textcolor}% 2025 1964 \pgfsetfillcolor{textcolor}% 2026 \pgftext[x=1.622222in,y=0.774682in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-rand}% 1965 \pgftext[x=4.820184in,y=3.614432in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-rand}% 1966 \end{pgfscope}% 1967 \begin{pgfscope}% 1968 \pgfsetbuttcap% 1969 \pgfsetroundjoin% 1970 \pgfsetlinewidth{1.505625pt}% 1971 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 1972 \pgfsetstrokecolor{currentstroke}% 1973 \pgfsetdash{}{0pt}% 1974 \pgfpathmoveto{\pgfqpoint{4.570184in}{3.399926in}}% 1975 \pgfpathlineto{\pgfqpoint{4.570184in}{3.538815in}}% 1976 \pgfusepath{stroke}% 1977 \end{pgfscope}% 1978 \begin{pgfscope}% 1979 \pgfsetbuttcap% 1980 \pgfsetroundjoin% 1981 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 1982 \pgfsetfillcolor{currentfill}% 1983 \pgfsetlinewidth{1.003750pt}% 1984 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 1985 \pgfsetstrokecolor{currentstroke}% 1986 \pgfsetdash{}{0pt}% 1987 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 1988 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 1989 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 1990 \pgfusepath{stroke,fill}% 1991 }% 1992 \begin{pgfscope}% 1993 \pgfsys@transformshift{4.570184in}{3.399926in}% 1994 \pgfsys@useobject{currentmarker}{}% 1995 \end{pgfscope}% 1996 \end{pgfscope}% 1997 \begin{pgfscope}% 1998 \pgfsetbuttcap% 1999 \pgfsetroundjoin% 2000 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2001 \pgfsetfillcolor{currentfill}% 2002 \pgfsetlinewidth{1.003750pt}% 2003 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2004 \pgfsetstrokecolor{currentstroke}% 2005 \pgfsetdash{}{0pt}% 2006 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 2007 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 2008 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 2009 \pgfusepath{stroke,fill}% 2010 }% 2011 \begin{pgfscope}% 2012 \pgfsys@transformshift{4.570184in}{3.538815in}% 2013 \pgfsys@useobject{currentmarker}{}% 2014 \end{pgfscope}% 2015 \end{pgfscope}% 2016 \begin{pgfscope}% 2017 \pgfsetrectcap% 2018 \pgfsetroundjoin% 2019 \pgfsetlinewidth{1.505625pt}% 2020 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2021 \pgfsetstrokecolor{currentstroke}% 2022 \pgfsetdash{}{0pt}% 2023 \pgfpathmoveto{\pgfqpoint{4.431295in}{3.469371in}}% 2024 \pgfpathlineto{\pgfqpoint{4.709073in}{3.469371in}}% 2025 \pgfusepath{stroke}% 2026 \end{pgfscope}% 2027 \begin{pgfscope}% 2028 \pgfsetbuttcap% 2029 \pgfsetroundjoin% 2030 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2031 \pgfsetfillcolor{currentfill}% 2032 \pgfsetlinewidth{1.003750pt}% 2033 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2034 \pgfsetstrokecolor{currentstroke}% 2035 \pgfsetdash{}{0pt}% 2036 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2037 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2038 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2039 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2040 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2041 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2042 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2043 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2044 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2045 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2046 \pgfpathclose% 2047 \pgfusepath{stroke,fill}% 2048 }% 2049 \begin{pgfscope}% 2050 \pgfsys@transformshift{4.570184in}{3.469371in}% 2051 \pgfsys@useobject{currentmarker}{}% 2052 \end{pgfscope}% 2053 \end{pgfscope}% 2054 \begin{pgfscope}% 2055 \definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% 2056 \pgfsetstrokecolor{textcolor}% 2057 \pgfsetfillcolor{textcolor}% 2058 \pgftext[x=4.820184in,y=3.420759in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-rand}% 2027 2059 \end{pgfscope}% 2028 2060 \end{pgfpicture}% -
doc/theses/colby_parsons_MMAth/figures/pyke_Aggregate_Lock_4.pgf
r3982384 r6e4c44d 77 77 \pgfsetstrokecolor{textcolor}% 78 78 \pgfsetfillcolor{textcolor}% 79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 2\)}%79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 2\)}% 80 80 \end{pgfscope}% 81 81 \begin{pgfscope}% … … 102 102 \pgfsetstrokecolor{textcolor}% 103 103 \pgfsetfillcolor{textcolor}% 104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 4\)}%104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 4\)}% 105 105 \end{pgfscope}% 106 106 \begin{pgfscope}% … … 127 127 \pgfsetstrokecolor{textcolor}% 128 128 \pgfsetfillcolor{textcolor}% 129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 8\)}%129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 8\)}% 130 130 \end{pgfscope}% 131 131 \begin{pgfscope}% … … 152 152 \pgfsetstrokecolor{textcolor}% 153 153 \pgfsetfillcolor{textcolor}% 154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 16\)}%154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 16\)}% 155 155 \end{pgfscope}% 156 156 \begin{pgfscope}% … … 177 177 \pgfsetstrokecolor{textcolor}% 178 178 \pgfsetfillcolor{textcolor}% 179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 24\)}%179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 24\)}% 180 180 \end{pgfscope}% 181 181 \begin{pgfscope}% … … 202 202 \pgfsetstrokecolor{textcolor}% 203 203 \pgfsetfillcolor{textcolor}% 204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 32\)}%204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 32\)}% 205 205 \end{pgfscope}% 206 206 \begin{pgfscope}% … … 208 208 \pgfsetstrokecolor{textcolor}% 209 209 \pgfsetfillcolor{textcolor}% 210 \pgftext[x=3.280000in,y=0. 161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}%210 \pgftext[x=3.280000in,y=0.251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}% 211 211 \end{pgfscope}% 212 212 \begin{pgfscope}% … … 233 233 \pgfsetstrokecolor{textcolor}% 234 234 \pgfsetfillcolor{textcolor}% 235 \pgftext[x=0. 399655in,y=0.592592in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{3}\)}%235 \pgftext[x=0.501581in,y=0.627700in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{3}\)}% 236 236 \end{pgfscope}% 237 237 \begin{pgfscope}% … … 258 258 \pgfsetstrokecolor{textcolor}% 259 259 \pgfsetfillcolor{textcolor}% 260 \pgftext[x=0. 399655in,y=1.275604in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{4}\)}%260 \pgftext[x=0.501581in,y=1.310712in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{4}\)}% 261 261 \end{pgfscope}% 262 262 \begin{pgfscope}% … … 283 283 \pgfsetstrokecolor{textcolor}% 284 284 \pgfsetfillcolor{textcolor}% 285 \pgftext[x=0. 399655in,y=1.958615in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{5}\)}%285 \pgftext[x=0.501581in,y=1.993723in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{5}\)}% 286 286 \end{pgfscope}% 287 287 \begin{pgfscope}% … … 308 308 \pgfsetstrokecolor{textcolor}% 309 309 \pgfsetfillcolor{textcolor}% 310 \pgftext[x=0. 399655in,y=2.641627in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{6}\)}%310 \pgftext[x=0.501581in,y=2.676735in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{6}\)}% 311 311 \end{pgfscope}% 312 312 \begin{pgfscope}% … … 333 333 \pgfsetstrokecolor{textcolor}% 334 334 \pgfsetfillcolor{textcolor}% 335 \pgftext[x=0. 399655in,y=3.324638in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{7}\)}%335 \pgftext[x=0.501581in,y=3.359746in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{7}\)}% 336 336 \end{pgfscope}% 337 337 \begin{pgfscope}% … … 358 358 \pgfsetstrokecolor{textcolor}% 359 359 \pgfsetfillcolor{textcolor}% 360 \pgftext[x=0. 399655in,y=4.007649in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{8}\)}%360 \pgftext[x=0.501581in,y=4.042757in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{8}\)}% 361 361 \end{pgfscope}% 362 362 \begin{pgfscope}% … … 1181 1181 \pgfsetstrokecolor{textcolor}% 1182 1182 \pgfsetfillcolor{textcolor}% 1183 \pgftext[x=0. 344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (entries)}%1183 \pgftext[x=0.446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (entries)}% 1184 1184 \end{pgfscope}% 1185 1185 \begin{pgfscope}% … … 1844 1844 \pgfusepath{clip}% 1845 1845 \pgfsetbuttcap% 1846 \pgfset miterjoin%1846 \pgfsetroundjoin% 1847 1847 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 1848 1848 \pgfsetfillcolor{currentfill}% … … 1851 1851 \pgfsetstrokecolor{currentstroke}% 1852 1852 \pgfsetdash{}{0pt}% 1853 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.039627in}{-0.033709in}}{\pgfqpoint{0.039627in}{0.041667in}}{% 1854 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 1855 \pgfpathlineto{\pgfqpoint{-0.039627in}{0.012876in}}% 1856 \pgfpathlineto{\pgfqpoint{-0.024491in}{-0.033709in}}% 1857 \pgfpathlineto{\pgfqpoint{0.024491in}{-0.033709in}}% 1858 \pgfpathlineto{\pgfqpoint{0.039627in}{0.012876in}}% 1853 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 1854 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 1855 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 1856 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 1857 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 1858 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 1859 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 1860 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 1861 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 1862 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 1859 1863 \pgfpathclose% 1860 1864 \pgfusepath{stroke,fill}% … … 1906 1910 \pgfusepath{clip}% 1907 1911 \pgfsetbuttcap% 1908 \pgfset miterjoin%1912 \pgfsetroundjoin% 1909 1913 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1910 1914 \pgfsetfillcolor{currentfill}% … … 1914 1918 \pgfsetdash{}{0pt}% 1915 1919 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 1916 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 1917 \pgfpathlineto{\pgfqpoint{-0.041667in}{-0.041667in}}% 1918 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}% 1920 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 1921 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 1922 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 1923 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 1924 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 1925 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 1926 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 1927 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 1928 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 1919 1929 \pgfpathclose% 1920 1930 \pgfusepath{stroke,fill}% … … 1966 1976 \pgfusepath{clip}% 1967 1977 \pgfsetbuttcap% 1968 \pgfset miterjoin%1978 \pgfsetroundjoin% 1969 1979 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 1970 1980 \pgfsetfillcolor{currentfill}% … … 1973 1983 \pgfsetstrokecolor{currentstroke}% 1974 1984 \pgfsetdash{}{0pt}% 1975 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.036084in}{-0.041667in}}{\pgfqpoint{0.036084in}{0.041667in}}{% 1976 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 1977 \pgfpathlineto{\pgfqpoint{-0.036084in}{0.020833in}}% 1978 \pgfpathlineto{\pgfqpoint{-0.036084in}{-0.020833in}}% 1979 \pgfpathlineto{\pgfqpoint{-0.000000in}{-0.041667in}}% 1980 \pgfpathlineto{\pgfqpoint{0.036084in}{-0.020833in}}% 1981 \pgfpathlineto{\pgfqpoint{0.036084in}{0.020833in}}% 1985 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 1986 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 1987 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 1988 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 1989 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 1990 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 1991 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 1992 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 1993 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 1994 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 1982 1995 \pgfpathclose% 1983 1996 \pgfusepath{stroke,fill}% … … 2029 2042 \pgfusepath{clip}% 2030 2043 \pgfsetbuttcap% 2031 \pgfset beveljoin%2044 \pgfsetroundjoin% 2032 2045 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2033 2046 \pgfsetfillcolor{currentfill}% … … 2036 2049 \pgfsetstrokecolor{currentstroke}% 2037 2050 \pgfsetdash{}{0pt}% 2038 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.039627in}{-0.033709in}}{\pgfqpoint{0.039627in}{0.041667in}}{% 2039 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 2040 \pgfpathlineto{\pgfqpoint{-0.009355in}{0.012876in}}% 2041 \pgfpathlineto{\pgfqpoint{-0.039627in}{0.012876in}}% 2042 \pgfpathlineto{\pgfqpoint{-0.015136in}{-0.004918in}}% 2043 \pgfpathlineto{\pgfqpoint{-0.024491in}{-0.033709in}}% 2044 \pgfpathlineto{\pgfqpoint{-0.000000in}{-0.015915in}}% 2045 \pgfpathlineto{\pgfqpoint{0.024491in}{-0.033709in}}% 2046 \pgfpathlineto{\pgfqpoint{0.015136in}{-0.004918in}}% 2047 \pgfpathlineto{\pgfqpoint{0.039627in}{0.012876in}}% 2048 \pgfpathlineto{\pgfqpoint{0.009355in}{0.012876in}}% 2051 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2052 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2053 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2054 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2055 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2056 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2057 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2058 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2059 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2060 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2049 2061 \pgfpathclose% 2050 2062 \pgfusepath{stroke,fill}% … … 2123 2135 \pgfsetstrokecolor{textcolor}% 2124 2136 \pgfsetfillcolor{textcolor}% 2125 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{1 9.200000}{23.040000}\selectfont Aggregate Lock Benchmark: 4 Locks}%2137 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{12.000000}{14.400000}\selectfont Aggregate Lock Benchmark: 4 Locks}% 2126 2138 \end{pgfscope}% 2127 2139 \begin{pgfscope}% … … 2136 2148 \pgfsetstrokeopacity{0.800000}% 2137 2149 \pgfsetdash{}{0pt}% 2138 \pgfpathmoveto{\pgfqpoint{ 3.602702in}{1.693747in}}%2139 \pgfpathlineto{\pgfqpoint{ 5.604444in}{1.693747in}}%2140 \pgfpathquadraticcurveto{\pgfqpoint{ 5.648889in}{1.693747in}}{\pgfqpoint{5.648889in}{1.738192in}}%2141 \pgfpathlineto{\pgfqpoint{ 5.648889in}{3.013808in}}%2142 \pgfpathquadraticcurveto{\pgfqpoint{ 5.648889in}{3.058253in}}{\pgfqpoint{5.604444in}{3.058253in}}%2143 \pgfpathlineto{\pgfqpoint{ 3.602702in}{3.058253in}}%2144 \pgfpathquadraticcurveto{\pgfqpoint{ 3.558257in}{3.058253in}}{\pgfqpoint{3.558257in}{3.013808in}}%2145 \pgfpathlineto{\pgfqpoint{ 3.558257in}{1.738192in}}%2146 \pgfpathquadraticcurveto{\pgfqpoint{ 3.558257in}{1.693747in}}{\pgfqpoint{3.602702in}{1.693747in}}%2150 \pgfpathmoveto{\pgfqpoint{0.897222in}{0.597444in}}% 2151 \pgfpathlineto{\pgfqpoint{2.156483in}{0.597444in}}% 2152 \pgfpathquadraticcurveto{\pgfqpoint{2.184261in}{0.597444in}}{\pgfqpoint{2.184261in}{0.625222in}}% 2153 \pgfpathlineto{\pgfqpoint{2.184261in}{1.386024in}}% 2154 \pgfpathquadraticcurveto{\pgfqpoint{2.184261in}{1.413802in}}{\pgfqpoint{2.156483in}{1.413802in}}% 2155 \pgfpathlineto{\pgfqpoint{0.897222in}{1.413802in}}% 2156 \pgfpathquadraticcurveto{\pgfqpoint{0.869444in}{1.413802in}}{\pgfqpoint{0.869444in}{1.386024in}}% 2157 \pgfpathlineto{\pgfqpoint{0.869444in}{0.625222in}}% 2158 \pgfpathquadraticcurveto{\pgfqpoint{0.869444in}{0.597444in}}{\pgfqpoint{0.897222in}{0.597444in}}% 2147 2159 \pgfpathclose% 2148 2160 \pgfusepath{stroke,fill}% … … 2155 2167 \pgfsetstrokecolor{currentstroke}% 2156 2168 \pgfsetdash{}{0pt}% 2157 \pgfpathmoveto{\pgfqpoint{ 3.869368in}{2.769364in}}%2158 \pgfpathlineto{\pgfqpoint{ 3.869368in}{2.991586in}}%2169 \pgfpathmoveto{\pgfqpoint{1.063889in}{1.240191in}}% 2170 \pgfpathlineto{\pgfqpoint{1.063889in}{1.379080in}}% 2159 2171 \pgfusepath{stroke}% 2160 2172 \end{pgfscope}% … … 2174 2186 }% 2175 2187 \begin{pgfscope}% 2176 \pgfsys@transformshift{ 3.869368in}{2.769364in}%2188 \pgfsys@transformshift{1.063889in}{1.240191in}% 2177 2189 \pgfsys@useobject{currentmarker}{}% 2178 2190 \end{pgfscope}% … … 2193 2205 }% 2194 2206 \begin{pgfscope}% 2195 \pgfsys@transformshift{ 3.869368in}{2.991586in}%2207 \pgfsys@transformshift{1.063889in}{1.379080in}% 2196 2208 \pgfsys@useobject{currentmarker}{}% 2197 2209 \end{pgfscope}% … … 2204 2216 \pgfsetstrokecolor{currentstroke}% 2205 2217 \pgfsetdash{}{0pt}% 2206 \pgfpathmoveto{\pgfqpoint{ 3.647146in}{2.880475in}}%2207 \pgfpathlineto{\pgfqpoint{ 4.091591in}{2.880475in}}%2208 \pgfusepath{stroke}% 2209 \end{pgfscope}% 2210 \begin{pgfscope}% 2211 \pgfsetbuttcap% 2212 \pgfset miterjoin%2218 \pgfpathmoveto{\pgfqpoint{0.925000in}{1.309636in}}% 2219 \pgfpathlineto{\pgfqpoint{1.202778in}{1.309636in}}% 2220 \pgfusepath{stroke}% 2221 \end{pgfscope}% 2222 \begin{pgfscope}% 2223 \pgfsetbuttcap% 2224 \pgfsetroundjoin% 2213 2225 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 2214 2226 \pgfsetfillcolor{currentfill}% … … 2217 2229 \pgfsetstrokecolor{currentstroke}% 2218 2230 \pgfsetdash{}{0pt}% 2219 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.039627in}{-0.033709in}}{\pgfqpoint{0.039627in}{0.041667in}}{% 2220 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 2221 \pgfpathlineto{\pgfqpoint{-0.039627in}{0.012876in}}% 2222 \pgfpathlineto{\pgfqpoint{-0.024491in}{-0.033709in}}% 2223 \pgfpathlineto{\pgfqpoint{0.024491in}{-0.033709in}}% 2224 \pgfpathlineto{\pgfqpoint{0.039627in}{0.012876in}}% 2231 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2232 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2233 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2234 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2235 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2236 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2237 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2238 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2239 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2240 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2225 2241 \pgfpathclose% 2226 2242 \pgfusepath{stroke,fill}% 2227 2243 }% 2228 2244 \begin{pgfscope}% 2229 \pgfsys@transformshift{ 3.869368in}{2.880475in}%2245 \pgfsys@transformshift{1.063889in}{1.309636in}% 2230 2246 \pgfsys@useobject{currentmarker}{}% 2231 2247 \end{pgfscope}% … … 2235 2251 \pgfsetstrokecolor{textcolor}% 2236 2252 \pgfsetfillcolor{textcolor}% 2237 \pgftext[x= 4.269368in,y=2.802697in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-baseline}%2253 \pgftext[x=1.313889in,y=1.261024in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-baseline}% 2238 2254 \end{pgfscope}% 2239 2255 \begin{pgfscope}% … … 2244 2260 \pgfsetstrokecolor{currentstroke}% 2245 2261 \pgfsetdash{}{0pt}% 2246 \pgfpathmoveto{\pgfqpoint{ 3.869368in}{2.444904in}}%2247 \pgfpathlineto{\pgfqpoint{ 3.869368in}{2.667126in}}%2262 \pgfpathmoveto{\pgfqpoint{1.063889in}{1.046518in}}% 2263 \pgfpathlineto{\pgfqpoint{1.063889in}{1.185407in}}% 2248 2264 \pgfusepath{stroke}% 2249 2265 \end{pgfscope}% … … 2263 2279 }% 2264 2280 \begin{pgfscope}% 2265 \pgfsys@transformshift{ 3.869368in}{2.444904in}%2281 \pgfsys@transformshift{1.063889in}{1.046518in}% 2266 2282 \pgfsys@useobject{currentmarker}{}% 2267 2283 \end{pgfscope}% … … 2282 2298 }% 2283 2299 \begin{pgfscope}% 2284 \pgfsys@transformshift{ 3.869368in}{2.667126in}%2300 \pgfsys@transformshift{1.063889in}{1.185407in}% 2285 2301 \pgfsys@useobject{currentmarker}{}% 2286 2302 \end{pgfscope}% … … 2293 2309 \pgfsetstrokecolor{currentstroke}% 2294 2310 \pgfsetdash{}{0pt}% 2295 \pgfpathmoveto{\pgfqpoint{ 3.647146in}{2.556015in}}%2296 \pgfpathlineto{\pgfqpoint{ 4.091591in}{2.556015in}}%2297 \pgfusepath{stroke}% 2298 \end{pgfscope}% 2299 \begin{pgfscope}% 2300 \pgfsetbuttcap% 2301 \pgfset miterjoin%2311 \pgfpathmoveto{\pgfqpoint{0.925000in}{1.115963in}}% 2312 \pgfpathlineto{\pgfqpoint{1.202778in}{1.115963in}}% 2313 \pgfusepath{stroke}% 2314 \end{pgfscope}% 2315 \begin{pgfscope}% 2316 \pgfsetbuttcap% 2317 \pgfsetroundjoin% 2302 2318 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 2303 2319 \pgfsetfillcolor{currentfill}% … … 2307 2323 \pgfsetdash{}{0pt}% 2308 2324 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2309 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 2310 \pgfpathlineto{\pgfqpoint{-0.041667in}{-0.041667in}}% 2311 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}% 2325 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2326 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2327 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2328 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2329 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2330 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2331 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2332 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2333 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2312 2334 \pgfpathclose% 2313 2335 \pgfusepath{stroke,fill}% 2314 2336 }% 2315 2337 \begin{pgfscope}% 2316 \pgfsys@transformshift{ 3.869368in}{2.556015in}%2338 \pgfsys@transformshift{1.063889in}{1.115963in}% 2317 2339 \pgfsys@useobject{currentmarker}{}% 2318 2340 \end{pgfscope}% … … 2322 2344 \pgfsetstrokecolor{textcolor}% 2323 2345 \pgfsetfillcolor{textcolor}% 2324 \pgftext[x= 4.269368in,y=2.478238in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-baseline}%2346 \pgftext[x=1.313889in,y=1.067352in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-baseline}% 2325 2347 \end{pgfscope}% 2326 2348 \begin{pgfscope}% … … 2331 2353 \pgfsetstrokecolor{currentstroke}% 2332 2354 \pgfsetdash{}{0pt}% 2333 \pgfpathmoveto{\pgfqpoint{ 3.869368in}{2.120444in}}%2334 \pgfpathlineto{\pgfqpoint{ 3.869368in}{2.342667in}}%2355 \pgfpathmoveto{\pgfqpoint{1.063889in}{0.852846in}}% 2356 \pgfpathlineto{\pgfqpoint{1.063889in}{0.991734in}}% 2335 2357 \pgfusepath{stroke}% 2336 2358 \end{pgfscope}% … … 2350 2372 }% 2351 2373 \begin{pgfscope}% 2352 \pgfsys@transformshift{ 3.869368in}{2.120444in}%2374 \pgfsys@transformshift{1.063889in}{0.852846in}% 2353 2375 \pgfsys@useobject{currentmarker}{}% 2354 2376 \end{pgfscope}% … … 2369 2391 }% 2370 2392 \begin{pgfscope}% 2371 \pgfsys@transformshift{ 3.869368in}{2.342667in}%2393 \pgfsys@transformshift{1.063889in}{0.991734in}% 2372 2394 \pgfsys@useobject{currentmarker}{}% 2373 2395 \end{pgfscope}% … … 2380 2402 \pgfsetstrokecolor{currentstroke}% 2381 2403 \pgfsetdash{}{0pt}% 2382 \pgfpathmoveto{\pgfqpoint{ 3.647146in}{2.231556in}}%2383 \pgfpathlineto{\pgfqpoint{ 4.091591in}{2.231556in}}%2384 \pgfusepath{stroke}% 2385 \end{pgfscope}% 2386 \begin{pgfscope}% 2387 \pgfsetbuttcap% 2388 \pgfset miterjoin%2404 \pgfpathmoveto{\pgfqpoint{0.925000in}{0.922290in}}% 2405 \pgfpathlineto{\pgfqpoint{1.202778in}{0.922290in}}% 2406 \pgfusepath{stroke}% 2407 \end{pgfscope}% 2408 \begin{pgfscope}% 2409 \pgfsetbuttcap% 2410 \pgfsetroundjoin% 2389 2411 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2390 2412 \pgfsetfillcolor{currentfill}% … … 2393 2415 \pgfsetstrokecolor{currentstroke}% 2394 2416 \pgfsetdash{}{0pt}% 2395 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.036084in}{-0.041667in}}{\pgfqpoint{0.036084in}{0.041667in}}{% 2396 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 2397 \pgfpathlineto{\pgfqpoint{-0.036084in}{0.020833in}}% 2398 \pgfpathlineto{\pgfqpoint{-0.036084in}{-0.020833in}}% 2399 \pgfpathlineto{\pgfqpoint{-0.000000in}{-0.041667in}}% 2400 \pgfpathlineto{\pgfqpoint{0.036084in}{-0.020833in}}% 2401 \pgfpathlineto{\pgfqpoint{0.036084in}{0.020833in}}% 2417 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2418 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2419 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2420 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2421 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2422 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2423 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2424 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2425 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2426 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2402 2427 \pgfpathclose% 2403 2428 \pgfusepath{stroke,fill}% 2404 2429 }% 2405 2430 \begin{pgfscope}% 2406 \pgfsys@transformshift{ 3.869368in}{2.231556in}%2431 \pgfsys@transformshift{1.063889in}{0.922290in}% 2407 2432 \pgfsys@useobject{currentmarker}{}% 2408 2433 \end{pgfscope}% … … 2412 2437 \pgfsetstrokecolor{textcolor}% 2413 2438 \pgfsetfillcolor{textcolor}% 2414 \pgftext[x= 4.269368in,y=2.153778in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-rand}%2439 \pgftext[x=1.313889in,y=0.873679in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-rand}% 2415 2440 \end{pgfscope}% 2416 2441 \begin{pgfscope}% … … 2421 2446 \pgfsetstrokecolor{currentstroke}% 2422 2447 \pgfsetdash{}{0pt}% 2423 \pgfpathmoveto{\pgfqpoint{ 3.869368in}{1.795985in}}%2424 \pgfpathlineto{\pgfqpoint{ 3.869368in}{2.018207in}}%2448 \pgfpathmoveto{\pgfqpoint{1.063889in}{0.659173in}}% 2449 \pgfpathlineto{\pgfqpoint{1.063889in}{0.798062in}}% 2425 2450 \pgfusepath{stroke}% 2426 2451 \end{pgfscope}% … … 2440 2465 }% 2441 2466 \begin{pgfscope}% 2442 \pgfsys@transformshift{ 3.869368in}{1.795985in}%2467 \pgfsys@transformshift{1.063889in}{0.659173in}% 2443 2468 \pgfsys@useobject{currentmarker}{}% 2444 2469 \end{pgfscope}% … … 2459 2484 }% 2460 2485 \begin{pgfscope}% 2461 \pgfsys@transformshift{ 3.869368in}{2.018207in}%2486 \pgfsys@transformshift{1.063889in}{0.798062in}% 2462 2487 \pgfsys@useobject{currentmarker}{}% 2463 2488 \end{pgfscope}% … … 2470 2495 \pgfsetstrokecolor{currentstroke}% 2471 2496 \pgfsetdash{}{0pt}% 2472 \pgfpathmoveto{\pgfqpoint{ 3.647146in}{1.907096in}}%2473 \pgfpathlineto{\pgfqpoint{ 4.091591in}{1.907096in}}%2474 \pgfusepath{stroke}% 2475 \end{pgfscope}% 2476 \begin{pgfscope}% 2477 \pgfsetbuttcap% 2478 \pgfset beveljoin%2497 \pgfpathmoveto{\pgfqpoint{0.925000in}{0.728617in}}% 2498 \pgfpathlineto{\pgfqpoint{1.202778in}{0.728617in}}% 2499 \pgfusepath{stroke}% 2500 \end{pgfscope}% 2501 \begin{pgfscope}% 2502 \pgfsetbuttcap% 2503 \pgfsetroundjoin% 2479 2504 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2480 2505 \pgfsetfillcolor{currentfill}% … … 2483 2508 \pgfsetstrokecolor{currentstroke}% 2484 2509 \pgfsetdash{}{0pt}% 2485 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.039627in}{-0.033709in}}{\pgfqpoint{0.039627in}{0.041667in}}{% 2486 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 2487 \pgfpathlineto{\pgfqpoint{-0.009355in}{0.012876in}}% 2488 \pgfpathlineto{\pgfqpoint{-0.039627in}{0.012876in}}% 2489 \pgfpathlineto{\pgfqpoint{-0.015136in}{-0.004918in}}% 2490 \pgfpathlineto{\pgfqpoint{-0.024491in}{-0.033709in}}% 2491 \pgfpathlineto{\pgfqpoint{-0.000000in}{-0.015915in}}% 2492 \pgfpathlineto{\pgfqpoint{0.024491in}{-0.033709in}}% 2493 \pgfpathlineto{\pgfqpoint{0.015136in}{-0.004918in}}% 2494 \pgfpathlineto{\pgfqpoint{0.039627in}{0.012876in}}% 2495 \pgfpathlineto{\pgfqpoint{0.009355in}{0.012876in}}% 2510 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2511 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2512 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2513 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2514 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2515 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2516 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2517 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2518 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2519 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2496 2520 \pgfpathclose% 2497 2521 \pgfusepath{stroke,fill}% 2498 2522 }% 2499 2523 \begin{pgfscope}% 2500 \pgfsys@transformshift{ 3.869368in}{1.907096in}%2524 \pgfsys@transformshift{1.063889in}{0.728617in}% 2501 2525 \pgfsys@useobject{currentmarker}{}% 2502 2526 \end{pgfscope}% … … 2506 2530 \pgfsetstrokecolor{textcolor}% 2507 2531 \pgfsetfillcolor{textcolor}% 2508 \pgftext[x= 4.269368in,y=1.829318in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-rand}%2532 \pgftext[x=1.313889in,y=0.680006in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-rand}% 2509 2533 \end{pgfscope}% 2510 2534 \end{pgfpicture}% -
doc/theses/colby_parsons_MMAth/figures/pyke_Aggregate_Lock_8.pgf
r3982384 r6e4c44d 77 77 \pgfsetstrokecolor{textcolor}% 78 78 \pgfsetfillcolor{textcolor}% 79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 2\)}%79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 2\)}% 80 80 \end{pgfscope}% 81 81 \begin{pgfscope}% … … 102 102 \pgfsetstrokecolor{textcolor}% 103 103 \pgfsetfillcolor{textcolor}% 104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 4\)}%104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 4\)}% 105 105 \end{pgfscope}% 106 106 \begin{pgfscope}% … … 127 127 \pgfsetstrokecolor{textcolor}% 128 128 \pgfsetfillcolor{textcolor}% 129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 8\)}%129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 8\)}% 130 130 \end{pgfscope}% 131 131 \begin{pgfscope}% … … 152 152 \pgfsetstrokecolor{textcolor}% 153 153 \pgfsetfillcolor{textcolor}% 154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 16\)}%154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 16\)}% 155 155 \end{pgfscope}% 156 156 \begin{pgfscope}% … … 177 177 \pgfsetstrokecolor{textcolor}% 178 178 \pgfsetfillcolor{textcolor}% 179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 24\)}%179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 24\)}% 180 180 \end{pgfscope}% 181 181 \begin{pgfscope}% … … 202 202 \pgfsetstrokecolor{textcolor}% 203 203 \pgfsetfillcolor{textcolor}% 204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 32\)}%204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 32\)}% 205 205 \end{pgfscope}% 206 206 \begin{pgfscope}% … … 208 208 \pgfsetstrokecolor{textcolor}% 209 209 \pgfsetfillcolor{textcolor}% 210 \pgftext[x=3.280000in,y=0. 161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}%210 \pgftext[x=3.280000in,y=0.251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}% 211 211 \end{pgfscope}% 212 212 \begin{pgfscope}% … … 233 233 \pgfsetstrokecolor{textcolor}% 234 234 \pgfsetfillcolor{textcolor}% 235 \pgftext[x=0. 399655in,y=0.575766in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{2}\)}%235 \pgftext[x=0.501581in,y=0.610874in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{2}\)}% 236 236 \end{pgfscope}% 237 237 \begin{pgfscope}% … … 258 258 \pgfsetstrokecolor{textcolor}% 259 259 \pgfsetfillcolor{textcolor}% 260 \pgftext[x=0. 399655in,y=1.181854in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{3}\)}%260 \pgftext[x=0.501581in,y=1.216962in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{3}\)}% 261 261 \end{pgfscope}% 262 262 \begin{pgfscope}% … … 283 283 \pgfsetstrokecolor{textcolor}% 284 284 \pgfsetfillcolor{textcolor}% 285 \pgftext[x=0. 399655in,y=1.787942in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{4}\)}%285 \pgftext[x=0.501581in,y=1.823050in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{4}\)}% 286 286 \end{pgfscope}% 287 287 \begin{pgfscope}% … … 308 308 \pgfsetstrokecolor{textcolor}% 309 309 \pgfsetfillcolor{textcolor}% 310 \pgftext[x=0. 399655in,y=2.394030in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{5}\)}%310 \pgftext[x=0.501581in,y=2.429138in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{5}\)}% 311 311 \end{pgfscope}% 312 312 \begin{pgfscope}% … … 333 333 \pgfsetstrokecolor{textcolor}% 334 334 \pgfsetfillcolor{textcolor}% 335 \pgftext[x=0. 399655in,y=3.000119in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{6}\)}%335 \pgftext[x=0.501581in,y=3.035227in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{6}\)}% 336 336 \end{pgfscope}% 337 337 \begin{pgfscope}% … … 358 358 \pgfsetstrokecolor{textcolor}% 359 359 \pgfsetfillcolor{textcolor}% 360 \pgftext[x=0. 399655in,y=3.606207in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{7}\)}%360 \pgftext[x=0.501581in,y=3.641315in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{7}\)}% 361 361 \end{pgfscope}% 362 362 \begin{pgfscope}% … … 1295 1295 \pgfsetstrokecolor{textcolor}% 1296 1296 \pgfsetfillcolor{textcolor}% 1297 \pgftext[x=0. 344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (entries)}%1297 \pgftext[x=0.446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (entries)}% 1298 1298 \end{pgfscope}% 1299 1299 \begin{pgfscope}% … … 1958 1958 \pgfusepath{clip}% 1959 1959 \pgfsetbuttcap% 1960 \pgfset miterjoin%1960 \pgfsetroundjoin% 1961 1961 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 1962 1962 \pgfsetfillcolor{currentfill}% 1963 1963 \pgfsetlinewidth{1.003750pt}% 1964 1964 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1965 \pgfsetstrokecolor{currentstroke}%1966 \pgfsetdash{}{0pt}%1967 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%1968 \pgfpathmoveto{\pgfqpoint{-0.000000in}{-0.041667in}}%1969 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%1970 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}%1971 \pgfpathclose%1972 \pgfusepath{stroke,fill}%1973 }%1974 \begin{pgfscope}%1975 \pgfsys@transformshift{1.025455in}{3.946569in}%1976 \pgfsys@useobject{currentmarker}{}%1977 \end{pgfscope}%1978 \begin{pgfscope}%1979 \pgfsys@transformshift{1.326061in}{3.802273in}%1980 \pgfsys@useobject{currentmarker}{}%1981 \end{pgfscope}%1982 \begin{pgfscope}%1983 \pgfsys@transformshift{1.927273in}{3.677930in}%1984 \pgfsys@useobject{currentmarker}{}%1985 \end{pgfscope}%1986 \begin{pgfscope}%1987 \pgfsys@transformshift{3.129697in}{3.534576in}%1988 \pgfsys@useobject{currentmarker}{}%1989 \end{pgfscope}%1990 \begin{pgfscope}%1991 \pgfsys@transformshift{4.332121in}{3.431799in}%1992 \pgfsys@useobject{currentmarker}{}%1993 \end{pgfscope}%1994 \begin{pgfscope}%1995 \pgfsys@transformshift{5.534545in}{3.440731in}%1996 \pgfsys@useobject{currentmarker}{}%1997 \end{pgfscope}%1998 \end{pgfscope}%1999 \begin{pgfscope}%2000 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%2001 \pgfusepath{clip}%2002 \pgfsetrectcap%2003 \pgfsetroundjoin%2004 \pgfsetlinewidth{1.505625pt}%2005 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%2006 \pgfsetstrokecolor{currentstroke}%2007 \pgfsetdash{}{0pt}%2008 \pgfpathmoveto{\pgfqpoint{1.025455in}{4.038293in}}%2009 \pgfpathlineto{\pgfqpoint{1.326061in}{3.879198in}}%2010 \pgfpathlineto{\pgfqpoint{1.927273in}{3.775409in}}%2011 \pgfpathlineto{\pgfqpoint{3.129697in}{3.635703in}}%2012 \pgfpathlineto{\pgfqpoint{4.332121in}{3.543668in}}%2013 \pgfpathlineto{\pgfqpoint{5.534545in}{3.552229in}}%2014 \pgfusepath{stroke}%2015 \end{pgfscope}%2016 \begin{pgfscope}%2017 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%2018 \pgfusepath{clip}%2019 \pgfsetbuttcap%2020 \pgfsetroundjoin%2021 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%2022 \pgfsetfillcolor{currentfill}%2023 \pgfsetlinewidth{1.003750pt}%2024 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%2025 1965 \pgfsetstrokecolor{currentstroke}% 2026 1966 \pgfsetdash{}{0pt}% … … 2039 1979 }% 2040 1980 \begin{pgfscope}% 2041 \pgfsys@transformshift{1.025455in}{ 4.038293in}%2042 \pgfsys@useobject{currentmarker}{}% 2043 \end{pgfscope}% 2044 \begin{pgfscope}% 2045 \pgfsys@transformshift{1.326061in}{3.8 79198in}%2046 \pgfsys@useobject{currentmarker}{}% 2047 \end{pgfscope}% 2048 \begin{pgfscope}% 2049 \pgfsys@transformshift{1.927273in}{3. 775409in}%2050 \pgfsys@useobject{currentmarker}{}% 2051 \end{pgfscope}% 2052 \begin{pgfscope}% 2053 \pgfsys@transformshift{3.129697in}{3. 635703in}%2054 \pgfsys@useobject{currentmarker}{}% 2055 \end{pgfscope}% 2056 \begin{pgfscope}% 2057 \pgfsys@transformshift{4.332121in}{3. 543668in}%2058 \pgfsys@useobject{currentmarker}{}% 2059 \end{pgfscope}% 2060 \begin{pgfscope}% 2061 \pgfsys@transformshift{5.534545in}{3. 552229in}%1981 \pgfsys@transformshift{1.025455in}{3.946569in}% 1982 \pgfsys@useobject{currentmarker}{}% 1983 \end{pgfscope}% 1984 \begin{pgfscope}% 1985 \pgfsys@transformshift{1.326061in}{3.802273in}% 1986 \pgfsys@useobject{currentmarker}{}% 1987 \end{pgfscope}% 1988 \begin{pgfscope}% 1989 \pgfsys@transformshift{1.927273in}{3.677930in}% 1990 \pgfsys@useobject{currentmarker}{}% 1991 \end{pgfscope}% 1992 \begin{pgfscope}% 1993 \pgfsys@transformshift{3.129697in}{3.534576in}% 1994 \pgfsys@useobject{currentmarker}{}% 1995 \end{pgfscope}% 1996 \begin{pgfscope}% 1997 \pgfsys@transformshift{4.332121in}{3.431799in}% 1998 \pgfsys@useobject{currentmarker}{}% 1999 \end{pgfscope}% 2000 \begin{pgfscope}% 2001 \pgfsys@transformshift{5.534545in}{3.440731in}% 2062 2002 \pgfsys@useobject{currentmarker}{}% 2063 2003 \end{pgfscope}% … … 2069 2009 \pgfsetroundjoin% 2070 2010 \pgfsetlinewidth{1.505625pt}% 2071 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%2072 \pgfsetstrokecolor{currentstroke}%2073 \pgfsetdash{}{0pt}%2074 \pgfpathmoveto{\pgfqpoint{1.025455in}{3.986946in}}%2075 \pgfpathlineto{\pgfqpoint{1.326061in}{3.894328in}}%2076 \pgfpathlineto{\pgfqpoint{1.927273in}{3.799708in}}%2077 \pgfpathlineto{\pgfqpoint{3.129697in}{3.659501in}}%2078 \pgfpathlineto{\pgfqpoint{4.332121in}{3.551737in}}%2079 \pgfpathlineto{\pgfqpoint{5.534545in}{3.536503in}}%2080 \pgfusepath{stroke}%2081 \end{pgfscope}%2082 \begin{pgfscope}%2083 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%2084 \pgfusepath{clip}%2085 \pgfsetbuttcap%2086 \pgfsetmiterjoin%2087 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%2088 \pgfsetfillcolor{currentfill}%2089 \pgfsetlinewidth{1.003750pt}%2090 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%2091 \pgfsetstrokecolor{currentstroke}%2092 \pgfsetdash{}{0pt}%2093 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%2094 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}%2095 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%2096 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%2097 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}%2098 \pgfpathclose%2099 \pgfusepath{stroke,fill}%2100 }%2101 \begin{pgfscope}%2102 \pgfsys@transformshift{1.025455in}{3.986946in}%2103 \pgfsys@useobject{currentmarker}{}%2104 \end{pgfscope}%2105 \begin{pgfscope}%2106 \pgfsys@transformshift{1.326061in}{3.894328in}%2107 \pgfsys@useobject{currentmarker}{}%2108 \end{pgfscope}%2109 \begin{pgfscope}%2110 \pgfsys@transformshift{1.927273in}{3.799708in}%2111 \pgfsys@useobject{currentmarker}{}%2112 \end{pgfscope}%2113 \begin{pgfscope}%2114 \pgfsys@transformshift{3.129697in}{3.659501in}%2115 \pgfsys@useobject{currentmarker}{}%2116 \end{pgfscope}%2117 \begin{pgfscope}%2118 \pgfsys@transformshift{4.332121in}{3.551737in}%2119 \pgfsys@useobject{currentmarker}{}%2120 \end{pgfscope}%2121 \begin{pgfscope}%2122 \pgfsys@transformshift{5.534545in}{3.536503in}%2123 \pgfsys@useobject{currentmarker}{}%2124 \end{pgfscope}%2125 \end{pgfscope}%2126 \begin{pgfscope}%2127 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%2128 \pgfusepath{clip}%2129 \pgfsetrectcap%2130 \pgfsetroundjoin%2131 \pgfsetlinewidth{1.505625pt}%2132 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%2133 \pgfsetstrokecolor{currentstroke}%2134 \pgfsetdash{}{0pt}%2135 \pgfpathmoveto{\pgfqpoint{1.025455in}{3.616719in}}%2136 \pgfpathlineto{\pgfqpoint{1.326061in}{2.880579in}}%2137 \pgfpathlineto{\pgfqpoint{1.927273in}{1.983335in}}%2138 \pgfpathlineto{\pgfqpoint{3.129697in}{1.145651in}}%2139 \pgfpathlineto{\pgfqpoint{4.332121in}{0.876039in}}%2140 \pgfpathlineto{\pgfqpoint{5.534545in}{0.885117in}}%2141 \pgfusepath{stroke}%2142 \end{pgfscope}%2143 \begin{pgfscope}%2144 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%2145 \pgfusepath{clip}%2146 \pgfsetbuttcap%2147 \pgfsetmiterjoin%2148 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%2149 \pgfsetfillcolor{currentfill}%2150 \pgfsetlinewidth{1.003750pt}%2151 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%2152 \pgfsetstrokecolor{currentstroke}%2153 \pgfsetdash{}{0pt}%2154 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.058926in}{-0.058926in}}{\pgfqpoint{0.058926in}{0.058926in}}{%2155 \pgfpathmoveto{\pgfqpoint{-0.000000in}{-0.058926in}}%2156 \pgfpathlineto{\pgfqpoint{0.058926in}{0.000000in}}%2157 \pgfpathlineto{\pgfqpoint{0.000000in}{0.058926in}}%2158 \pgfpathlineto{\pgfqpoint{-0.058926in}{0.000000in}}%2159 \pgfpathclose%2160 \pgfusepath{stroke,fill}%2161 }%2162 \begin{pgfscope}%2163 \pgfsys@transformshift{1.025455in}{3.616719in}%2164 \pgfsys@useobject{currentmarker}{}%2165 \end{pgfscope}%2166 \begin{pgfscope}%2167 \pgfsys@transformshift{1.326061in}{2.880579in}%2168 \pgfsys@useobject{currentmarker}{}%2169 \end{pgfscope}%2170 \begin{pgfscope}%2171 \pgfsys@transformshift{1.927273in}{1.983335in}%2172 \pgfsys@useobject{currentmarker}{}%2173 \end{pgfscope}%2174 \begin{pgfscope}%2175 \pgfsys@transformshift{3.129697in}{1.145651in}%2176 \pgfsys@useobject{currentmarker}{}%2177 \end{pgfscope}%2178 \begin{pgfscope}%2179 \pgfsys@transformshift{4.332121in}{0.876039in}%2180 \pgfsys@useobject{currentmarker}{}%2181 \end{pgfscope}%2182 \begin{pgfscope}%2183 \pgfsys@transformshift{5.534545in}{0.885117in}%2184 \pgfsys@useobject{currentmarker}{}%2185 \end{pgfscope}%2186 \end{pgfscope}%2187 \begin{pgfscope}%2188 \pgfsetrectcap%2189 \pgfsetmiterjoin%2190 \pgfsetlinewidth{0.803000pt}%2191 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%2192 \pgfsetstrokecolor{currentstroke}%2193 \pgfsetdash{}{0pt}%2194 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%2195 \pgfpathlineto{\pgfqpoint{0.800000in}{4.224000in}}%2196 \pgfusepath{stroke}%2197 \end{pgfscope}%2198 \begin{pgfscope}%2199 \pgfsetrectcap%2200 \pgfsetmiterjoin%2201 \pgfsetlinewidth{0.803000pt}%2202 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%2203 \pgfsetstrokecolor{currentstroke}%2204 \pgfsetdash{}{0pt}%2205 \pgfpathmoveto{\pgfqpoint{5.760000in}{0.528000in}}%2206 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%2207 \pgfusepath{stroke}%2208 \end{pgfscope}%2209 \begin{pgfscope}%2210 \pgfsetrectcap%2211 \pgfsetmiterjoin%2212 \pgfsetlinewidth{0.803000pt}%2213 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%2214 \pgfsetstrokecolor{currentstroke}%2215 \pgfsetdash{}{0pt}%2216 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%2217 \pgfpathlineto{\pgfqpoint{5.760000in}{0.528000in}}%2218 \pgfusepath{stroke}%2219 \end{pgfscope}%2220 \begin{pgfscope}%2221 \pgfsetrectcap%2222 \pgfsetmiterjoin%2223 \pgfsetlinewidth{0.803000pt}%2224 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%2225 \pgfsetstrokecolor{currentstroke}%2226 \pgfsetdash{}{0pt}%2227 \pgfpathmoveto{\pgfqpoint{0.800000in}{4.224000in}}%2228 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%2229 \pgfusepath{stroke}%2230 \end{pgfscope}%2231 \begin{pgfscope}%2232 \definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%2233 \pgfsetstrokecolor{textcolor}%2234 \pgfsetfillcolor{textcolor}%2235 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{19.200000}{23.040000}\selectfont Aggregate Lock Benchmark: 8 Locks}%2236 \end{pgfscope}%2237 \begin{pgfscope}%2238 \pgfsetbuttcap%2239 \pgfsetmiterjoin%2240 \definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}%2241 \pgfsetfillcolor{currentfill}%2242 \pgfsetfillopacity{0.800000}%2243 \pgfsetlinewidth{1.003750pt}%2244 \definecolor{currentstroke}{rgb}{0.800000,0.800000,0.800000}%2245 \pgfsetstrokecolor{currentstroke}%2246 \pgfsetstrokeopacity{0.800000}%2247 \pgfsetdash{}{0pt}%2248 \pgfpathmoveto{\pgfqpoint{3.602702in}{1.693747in}}%2249 \pgfpathlineto{\pgfqpoint{5.604444in}{1.693747in}}%2250 \pgfpathquadraticcurveto{\pgfqpoint{5.648889in}{1.693747in}}{\pgfqpoint{5.648889in}{1.738192in}}%2251 \pgfpathlineto{\pgfqpoint{5.648889in}{3.013808in}}%2252 \pgfpathquadraticcurveto{\pgfqpoint{5.648889in}{3.058253in}}{\pgfqpoint{5.604444in}{3.058253in}}%2253 \pgfpathlineto{\pgfqpoint{3.602702in}{3.058253in}}%2254 \pgfpathquadraticcurveto{\pgfqpoint{3.558257in}{3.058253in}}{\pgfqpoint{3.558257in}{3.013808in}}%2255 \pgfpathlineto{\pgfqpoint{3.558257in}{1.738192in}}%2256 \pgfpathquadraticcurveto{\pgfqpoint{3.558257in}{1.693747in}}{\pgfqpoint{3.602702in}{1.693747in}}%2257 \pgfpathclose%2258 \pgfusepath{stroke,fill}%2259 \end{pgfscope}%2260 \begin{pgfscope}%2261 \pgfsetbuttcap%2262 \pgfsetroundjoin%2263 \pgfsetlinewidth{1.505625pt}%2264 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%2265 \pgfsetstrokecolor{currentstroke}%2266 \pgfsetdash{}{0pt}%2267 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.769364in}}%2268 \pgfpathlineto{\pgfqpoint{3.869368in}{2.991586in}}%2269 \pgfusepath{stroke}%2270 \end{pgfscope}%2271 \begin{pgfscope}%2272 \pgfsetbuttcap%2273 \pgfsetroundjoin%2274 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%2275 \pgfsetfillcolor{currentfill}%2276 \pgfsetlinewidth{1.003750pt}%2277 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%2278 \pgfsetstrokecolor{currentstroke}%2279 \pgfsetdash{}{0pt}%2280 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%2281 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%2282 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%2283 \pgfusepath{stroke,fill}%2284 }%2285 \begin{pgfscope}%2286 \pgfsys@transformshift{3.869368in}{2.769364in}%2287 \pgfsys@useobject{currentmarker}{}%2288 \end{pgfscope}%2289 \end{pgfscope}%2290 \begin{pgfscope}%2291 \pgfsetbuttcap%2292 \pgfsetroundjoin%2293 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%2294 \pgfsetfillcolor{currentfill}%2295 \pgfsetlinewidth{1.003750pt}%2296 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%2297 \pgfsetstrokecolor{currentstroke}%2298 \pgfsetdash{}{0pt}%2299 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%2300 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%2301 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%2302 \pgfusepath{stroke,fill}%2303 }%2304 \begin{pgfscope}%2305 \pgfsys@transformshift{3.869368in}{2.991586in}%2306 \pgfsys@useobject{currentmarker}{}%2307 \end{pgfscope}%2308 \end{pgfscope}%2309 \begin{pgfscope}%2310 \pgfsetrectcap%2311 \pgfsetroundjoin%2312 \pgfsetlinewidth{1.505625pt}%2313 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%2314 \pgfsetstrokecolor{currentstroke}%2315 \pgfsetdash{}{0pt}%2316 \pgfpathmoveto{\pgfqpoint{3.647146in}{2.880475in}}%2317 \pgfpathlineto{\pgfqpoint{4.091591in}{2.880475in}}%2318 \pgfusepath{stroke}%2319 \end{pgfscope}%2320 \begin{pgfscope}%2321 \pgfsetbuttcap%2322 \pgfsetmiterjoin%2323 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%2324 \pgfsetfillcolor{currentfill}%2325 \pgfsetlinewidth{1.003750pt}%2326 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%2327 \pgfsetstrokecolor{currentstroke}%2328 \pgfsetdash{}{0pt}%2329 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%2330 \pgfpathmoveto{\pgfqpoint{-0.000000in}{-0.041667in}}%2331 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%2332 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}%2333 \pgfpathclose%2334 \pgfusepath{stroke,fill}%2335 }%2336 \begin{pgfscope}%2337 \pgfsys@transformshift{3.869368in}{2.880475in}%2338 \pgfsys@useobject{currentmarker}{}%2339 \end{pgfscope}%2340 \end{pgfscope}%2341 \begin{pgfscope}%2342 \definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%2343 \pgfsetstrokecolor{textcolor}%2344 \pgfsetfillcolor{textcolor}%2345 \pgftext[x=4.269368in,y=2.802697in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-baseline}%2346 \end{pgfscope}%2347 \begin{pgfscope}%2348 \pgfsetbuttcap%2349 \pgfsetroundjoin%2350 \pgfsetlinewidth{1.505625pt}%2351 2011 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2352 2012 \pgfsetstrokecolor{currentstroke}% 2353 2013 \pgfsetdash{}{0pt}% 2354 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.444904in}}% 2355 \pgfpathlineto{\pgfqpoint{3.869368in}{2.667126in}}% 2356 \pgfusepath{stroke}% 2357 \end{pgfscope}% 2358 \begin{pgfscope}% 2359 \pgfsetbuttcap% 2360 \pgfsetroundjoin% 2361 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 2362 \pgfsetfillcolor{currentfill}% 2363 \pgfsetlinewidth{1.003750pt}% 2364 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2365 \pgfsetstrokecolor{currentstroke}% 2366 \pgfsetdash{}{0pt}% 2367 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 2368 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 2369 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 2370 \pgfusepath{stroke,fill}% 2371 }% 2372 \begin{pgfscope}% 2373 \pgfsys@transformshift{3.869368in}{2.444904in}% 2374 \pgfsys@useobject{currentmarker}{}% 2375 \end{pgfscope}% 2376 \end{pgfscope}% 2377 \begin{pgfscope}% 2378 \pgfsetbuttcap% 2379 \pgfsetroundjoin% 2380 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 2381 \pgfsetfillcolor{currentfill}% 2382 \pgfsetlinewidth{1.003750pt}% 2383 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2384 \pgfsetstrokecolor{currentstroke}% 2385 \pgfsetdash{}{0pt}% 2386 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 2387 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 2388 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 2389 \pgfusepath{stroke,fill}% 2390 }% 2391 \begin{pgfscope}% 2392 \pgfsys@transformshift{3.869368in}{2.667126in}% 2393 \pgfsys@useobject{currentmarker}{}% 2394 \end{pgfscope}% 2395 \end{pgfscope}% 2396 \begin{pgfscope}% 2397 \pgfsetrectcap% 2398 \pgfsetroundjoin% 2399 \pgfsetlinewidth{1.505625pt}% 2400 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2401 \pgfsetstrokecolor{currentstroke}% 2402 \pgfsetdash{}{0pt}% 2403 \pgfpathmoveto{\pgfqpoint{3.647146in}{2.556015in}}% 2404 \pgfpathlineto{\pgfqpoint{4.091591in}{2.556015in}}% 2405 \pgfusepath{stroke}% 2406 \end{pgfscope}% 2407 \begin{pgfscope}% 2014 \pgfpathmoveto{\pgfqpoint{1.025455in}{4.038293in}}% 2015 \pgfpathlineto{\pgfqpoint{1.326061in}{3.879198in}}% 2016 \pgfpathlineto{\pgfqpoint{1.927273in}{3.775409in}}% 2017 \pgfpathlineto{\pgfqpoint{3.129697in}{3.635703in}}% 2018 \pgfpathlineto{\pgfqpoint{4.332121in}{3.543668in}}% 2019 \pgfpathlineto{\pgfqpoint{5.534545in}{3.552229in}}% 2020 \pgfusepath{stroke}% 2021 \end{pgfscope}% 2022 \begin{pgfscope}% 2023 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}% 2024 \pgfusepath{clip}% 2408 2025 \pgfsetbuttcap% 2409 2026 \pgfsetroundjoin% … … 2428 2045 }% 2429 2046 \begin{pgfscope}% 2430 \pgfsys@transformshift{3.869368in}{2.556015in}% 2431 \pgfsys@useobject{currentmarker}{}% 2432 \end{pgfscope}% 2047 \pgfsys@transformshift{1.025455in}{4.038293in}% 2048 \pgfsys@useobject{currentmarker}{}% 2049 \end{pgfscope}% 2050 \begin{pgfscope}% 2051 \pgfsys@transformshift{1.326061in}{3.879198in}% 2052 \pgfsys@useobject{currentmarker}{}% 2053 \end{pgfscope}% 2054 \begin{pgfscope}% 2055 \pgfsys@transformshift{1.927273in}{3.775409in}% 2056 \pgfsys@useobject{currentmarker}{}% 2057 \end{pgfscope}% 2058 \begin{pgfscope}% 2059 \pgfsys@transformshift{3.129697in}{3.635703in}% 2060 \pgfsys@useobject{currentmarker}{}% 2061 \end{pgfscope}% 2062 \begin{pgfscope}% 2063 \pgfsys@transformshift{4.332121in}{3.543668in}% 2064 \pgfsys@useobject{currentmarker}{}% 2065 \end{pgfscope}% 2066 \begin{pgfscope}% 2067 \pgfsys@transformshift{5.534545in}{3.552229in}% 2068 \pgfsys@useobject{currentmarker}{}% 2069 \end{pgfscope}% 2070 \end{pgfscope}% 2071 \begin{pgfscope}% 2072 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}% 2073 \pgfusepath{clip}% 2074 \pgfsetrectcap% 2075 \pgfsetroundjoin% 2076 \pgfsetlinewidth{1.505625pt}% 2077 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2078 \pgfsetstrokecolor{currentstroke}% 2079 \pgfsetdash{}{0pt}% 2080 \pgfpathmoveto{\pgfqpoint{1.025455in}{3.986946in}}% 2081 \pgfpathlineto{\pgfqpoint{1.326061in}{3.894328in}}% 2082 \pgfpathlineto{\pgfqpoint{1.927273in}{3.799708in}}% 2083 \pgfpathlineto{\pgfqpoint{3.129697in}{3.659501in}}% 2084 \pgfpathlineto{\pgfqpoint{4.332121in}{3.551737in}}% 2085 \pgfpathlineto{\pgfqpoint{5.534545in}{3.536503in}}% 2086 \pgfusepath{stroke}% 2087 \end{pgfscope}% 2088 \begin{pgfscope}% 2089 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}% 2090 \pgfusepath{clip}% 2091 \pgfsetbuttcap% 2092 \pgfsetroundjoin% 2093 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2094 \pgfsetfillcolor{currentfill}% 2095 \pgfsetlinewidth{1.003750pt}% 2096 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2097 \pgfsetstrokecolor{currentstroke}% 2098 \pgfsetdash{}{0pt}% 2099 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2100 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2101 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2102 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2103 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2104 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2105 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2106 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2107 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2108 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2109 \pgfpathclose% 2110 \pgfusepath{stroke,fill}% 2111 }% 2112 \begin{pgfscope}% 2113 \pgfsys@transformshift{1.025455in}{3.986946in}% 2114 \pgfsys@useobject{currentmarker}{}% 2115 \end{pgfscope}% 2116 \begin{pgfscope}% 2117 \pgfsys@transformshift{1.326061in}{3.894328in}% 2118 \pgfsys@useobject{currentmarker}{}% 2119 \end{pgfscope}% 2120 \begin{pgfscope}% 2121 \pgfsys@transformshift{1.927273in}{3.799708in}% 2122 \pgfsys@useobject{currentmarker}{}% 2123 \end{pgfscope}% 2124 \begin{pgfscope}% 2125 \pgfsys@transformshift{3.129697in}{3.659501in}% 2126 \pgfsys@useobject{currentmarker}{}% 2127 \end{pgfscope}% 2128 \begin{pgfscope}% 2129 \pgfsys@transformshift{4.332121in}{3.551737in}% 2130 \pgfsys@useobject{currentmarker}{}% 2131 \end{pgfscope}% 2132 \begin{pgfscope}% 2133 \pgfsys@transformshift{5.534545in}{3.536503in}% 2134 \pgfsys@useobject{currentmarker}{}% 2135 \end{pgfscope}% 2136 \end{pgfscope}% 2137 \begin{pgfscope}% 2138 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}% 2139 \pgfusepath{clip}% 2140 \pgfsetrectcap% 2141 \pgfsetroundjoin% 2142 \pgfsetlinewidth{1.505625pt}% 2143 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2144 \pgfsetstrokecolor{currentstroke}% 2145 \pgfsetdash{}{0pt}% 2146 \pgfpathmoveto{\pgfqpoint{1.025455in}{3.616719in}}% 2147 \pgfpathlineto{\pgfqpoint{1.326061in}{2.880579in}}% 2148 \pgfpathlineto{\pgfqpoint{1.927273in}{1.983335in}}% 2149 \pgfpathlineto{\pgfqpoint{3.129697in}{1.145651in}}% 2150 \pgfpathlineto{\pgfqpoint{4.332121in}{0.876039in}}% 2151 \pgfpathlineto{\pgfqpoint{5.534545in}{0.885117in}}% 2152 \pgfusepath{stroke}% 2153 \end{pgfscope}% 2154 \begin{pgfscope}% 2155 \pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}% 2156 \pgfusepath{clip}% 2157 \pgfsetbuttcap% 2158 \pgfsetroundjoin% 2159 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2160 \pgfsetfillcolor{currentfill}% 2161 \pgfsetlinewidth{1.003750pt}% 2162 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2163 \pgfsetstrokecolor{currentstroke}% 2164 \pgfsetdash{}{0pt}% 2165 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2166 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2167 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2168 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2169 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2170 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2171 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2172 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2173 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2174 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2175 \pgfpathclose% 2176 \pgfusepath{stroke,fill}% 2177 }% 2178 \begin{pgfscope}% 2179 \pgfsys@transformshift{1.025455in}{3.616719in}% 2180 \pgfsys@useobject{currentmarker}{}% 2181 \end{pgfscope}% 2182 \begin{pgfscope}% 2183 \pgfsys@transformshift{1.326061in}{2.880579in}% 2184 \pgfsys@useobject{currentmarker}{}% 2185 \end{pgfscope}% 2186 \begin{pgfscope}% 2187 \pgfsys@transformshift{1.927273in}{1.983335in}% 2188 \pgfsys@useobject{currentmarker}{}% 2189 \end{pgfscope}% 2190 \begin{pgfscope}% 2191 \pgfsys@transformshift{3.129697in}{1.145651in}% 2192 \pgfsys@useobject{currentmarker}{}% 2193 \end{pgfscope}% 2194 \begin{pgfscope}% 2195 \pgfsys@transformshift{4.332121in}{0.876039in}% 2196 \pgfsys@useobject{currentmarker}{}% 2197 \end{pgfscope}% 2198 \begin{pgfscope}% 2199 \pgfsys@transformshift{5.534545in}{0.885117in}% 2200 \pgfsys@useobject{currentmarker}{}% 2201 \end{pgfscope}% 2202 \end{pgfscope}% 2203 \begin{pgfscope}% 2204 \pgfsetrectcap% 2205 \pgfsetmiterjoin% 2206 \pgfsetlinewidth{0.803000pt}% 2207 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 2208 \pgfsetstrokecolor{currentstroke}% 2209 \pgfsetdash{}{0pt}% 2210 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}% 2211 \pgfpathlineto{\pgfqpoint{0.800000in}{4.224000in}}% 2212 \pgfusepath{stroke}% 2213 \end{pgfscope}% 2214 \begin{pgfscope}% 2215 \pgfsetrectcap% 2216 \pgfsetmiterjoin% 2217 \pgfsetlinewidth{0.803000pt}% 2218 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 2219 \pgfsetstrokecolor{currentstroke}% 2220 \pgfsetdash{}{0pt}% 2221 \pgfpathmoveto{\pgfqpoint{5.760000in}{0.528000in}}% 2222 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}% 2223 \pgfusepath{stroke}% 2224 \end{pgfscope}% 2225 \begin{pgfscope}% 2226 \pgfsetrectcap% 2227 \pgfsetmiterjoin% 2228 \pgfsetlinewidth{0.803000pt}% 2229 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 2230 \pgfsetstrokecolor{currentstroke}% 2231 \pgfsetdash{}{0pt}% 2232 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}% 2233 \pgfpathlineto{\pgfqpoint{5.760000in}{0.528000in}}% 2234 \pgfusepath{stroke}% 2235 \end{pgfscope}% 2236 \begin{pgfscope}% 2237 \pgfsetrectcap% 2238 \pgfsetmiterjoin% 2239 \pgfsetlinewidth{0.803000pt}% 2240 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 2241 \pgfsetstrokecolor{currentstroke}% 2242 \pgfsetdash{}{0pt}% 2243 \pgfpathmoveto{\pgfqpoint{0.800000in}{4.224000in}}% 2244 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}% 2245 \pgfusepath{stroke}% 2433 2246 \end{pgfscope}% 2434 2247 \begin{pgfscope}% … … 2436 2249 \pgfsetstrokecolor{textcolor}% 2437 2250 \pgfsetfillcolor{textcolor}% 2438 \pgftext[x=4.269368in,y=2.478238in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-baseline}% 2439 \end{pgfscope}% 2440 \begin{pgfscope}% 2441 \pgfsetbuttcap% 2442 \pgfsetroundjoin% 2443 \pgfsetlinewidth{1.505625pt}% 2444 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2445 \pgfsetstrokecolor{currentstroke}% 2446 \pgfsetdash{}{0pt}% 2447 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.120444in}}% 2448 \pgfpathlineto{\pgfqpoint{3.869368in}{2.342667in}}% 2449 \pgfusepath{stroke}% 2450 \end{pgfscope}% 2451 \begin{pgfscope}% 2452 \pgfsetbuttcap% 2453 \pgfsetroundjoin% 2454 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2455 \pgfsetfillcolor{currentfill}% 2251 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{12.000000}{14.400000}\selectfont Aggregate Lock Benchmark: 8 Locks}% 2252 \end{pgfscope}% 2253 \begin{pgfscope}% 2254 \pgfsetbuttcap% 2255 \pgfsetmiterjoin% 2256 \definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}% 2257 \pgfsetfillcolor{currentfill}% 2258 \pgfsetfillopacity{0.800000}% 2456 2259 \pgfsetlinewidth{1.003750pt}% 2457 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2260 \definecolor{currentstroke}{rgb}{0.800000,0.800000,0.800000}% 2261 \pgfsetstrokecolor{currentstroke}% 2262 \pgfsetstrokeopacity{0.800000}% 2263 \pgfsetdash{}{0pt}% 2264 \pgfpathmoveto{\pgfqpoint{0.897222in}{0.597444in}}% 2265 \pgfpathlineto{\pgfqpoint{2.156483in}{0.597444in}}% 2266 \pgfpathquadraticcurveto{\pgfqpoint{2.184261in}{0.597444in}}{\pgfqpoint{2.184261in}{0.625222in}}% 2267 \pgfpathlineto{\pgfqpoint{2.184261in}{1.386024in}}% 2268 \pgfpathquadraticcurveto{\pgfqpoint{2.184261in}{1.413802in}}{\pgfqpoint{2.156483in}{1.413802in}}% 2269 \pgfpathlineto{\pgfqpoint{0.897222in}{1.413802in}}% 2270 \pgfpathquadraticcurveto{\pgfqpoint{0.869444in}{1.413802in}}{\pgfqpoint{0.869444in}{1.386024in}}% 2271 \pgfpathlineto{\pgfqpoint{0.869444in}{0.625222in}}% 2272 \pgfpathquadraticcurveto{\pgfqpoint{0.869444in}{0.597444in}}{\pgfqpoint{0.897222in}{0.597444in}}% 2273 \pgfpathclose% 2274 \pgfusepath{stroke,fill}% 2275 \end{pgfscope}% 2276 \begin{pgfscope}% 2277 \pgfsetbuttcap% 2278 \pgfsetroundjoin% 2279 \pgfsetlinewidth{1.505625pt}% 2280 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 2281 \pgfsetstrokecolor{currentstroke}% 2282 \pgfsetdash{}{0pt}% 2283 \pgfpathmoveto{\pgfqpoint{1.063889in}{1.240191in}}% 2284 \pgfpathlineto{\pgfqpoint{1.063889in}{1.379080in}}% 2285 \pgfusepath{stroke}% 2286 \end{pgfscope}% 2287 \begin{pgfscope}% 2288 \pgfsetbuttcap% 2289 \pgfsetroundjoin% 2290 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 2291 \pgfsetfillcolor{currentfill}% 2292 \pgfsetlinewidth{1.003750pt}% 2293 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 2458 2294 \pgfsetstrokecolor{currentstroke}% 2459 2295 \pgfsetdash{}{0pt}% … … 2464 2300 }% 2465 2301 \begin{pgfscope}% 2466 \pgfsys@transformshift{ 3.869368in}{2.120444in}%2467 \pgfsys@useobject{currentmarker}{}% 2468 \end{pgfscope}% 2469 \end{pgfscope}% 2470 \begin{pgfscope}% 2471 \pgfsetbuttcap% 2472 \pgfsetroundjoin% 2473 \definecolor{currentfill}{rgb}{0.1 72549,0.627451,0.172549}%2302 \pgfsys@transformshift{1.063889in}{1.240191in}% 2303 \pgfsys@useobject{currentmarker}{}% 2304 \end{pgfscope}% 2305 \end{pgfscope}% 2306 \begin{pgfscope}% 2307 \pgfsetbuttcap% 2308 \pgfsetroundjoin% 2309 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 2474 2310 \pgfsetfillcolor{currentfill}% 2475 2311 \pgfsetlinewidth{1.003750pt}% 2476 \definecolor{currentstroke}{rgb}{0.1 72549,0.627451,0.172549}%2312 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 2477 2313 \pgfsetstrokecolor{currentstroke}% 2478 2314 \pgfsetdash{}{0pt}% … … 2483 2319 }% 2484 2320 \begin{pgfscope}% 2485 \pgfsys@transformshift{ 3.869368in}{2.342667in}%2321 \pgfsys@transformshift{1.063889in}{1.379080in}% 2486 2322 \pgfsys@useobject{currentmarker}{}% 2487 2323 \end{pgfscope}% … … 2491 2327 \pgfsetroundjoin% 2492 2328 \pgfsetlinewidth{1.505625pt}% 2493 \definecolor{currentstroke}{rgb}{0.1 72549,0.627451,0.172549}%2494 \pgfsetstrokecolor{currentstroke}% 2495 \pgfsetdash{}{0pt}% 2496 \pgfpathmoveto{\pgfqpoint{ 3.647146in}{2.231556in}}%2497 \pgfpathlineto{\pgfqpoint{ 4.091591in}{2.231556in}}%2498 \pgfusepath{stroke}% 2499 \end{pgfscope}% 2500 \begin{pgfscope}% 2501 \pgfsetbuttcap% 2502 \pgfset miterjoin%2503 \definecolor{currentfill}{rgb}{0.1 72549,0.627451,0.172549}%2329 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 2330 \pgfsetstrokecolor{currentstroke}% 2331 \pgfsetdash{}{0pt}% 2332 \pgfpathmoveto{\pgfqpoint{0.925000in}{1.309636in}}% 2333 \pgfpathlineto{\pgfqpoint{1.202778in}{1.309636in}}% 2334 \pgfusepath{stroke}% 2335 \end{pgfscope}% 2336 \begin{pgfscope}% 2337 \pgfsetbuttcap% 2338 \pgfsetroundjoin% 2339 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 2504 2340 \pgfsetfillcolor{currentfill}% 2505 2341 \pgfsetlinewidth{1.003750pt}% 2506 \definecolor{currentstroke}{rgb}{0.1 72549,0.627451,0.172549}%2342 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 2507 2343 \pgfsetstrokecolor{currentstroke}% 2508 2344 \pgfsetdash{}{0pt}% 2509 2345 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2510 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}% 2511 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}% 2512 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}% 2513 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}% 2346 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2347 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2348 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2349 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2350 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2351 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2352 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2353 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2354 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2514 2355 \pgfpathclose% 2515 2356 \pgfusepath{stroke,fill}% 2516 2357 }% 2517 2358 \begin{pgfscope}% 2518 \pgfsys@transformshift{ 3.869368in}{2.231556in}%2359 \pgfsys@transformshift{1.063889in}{1.309636in}% 2519 2360 \pgfsys@useobject{currentmarker}{}% 2520 2361 \end{pgfscope}% … … 2524 2365 \pgfsetstrokecolor{textcolor}% 2525 2366 \pgfsetfillcolor{textcolor}% 2526 \pgftext[x= 4.269368in,y=2.153778in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-rand}%2527 \end{pgfscope}% 2528 \begin{pgfscope}% 2529 \pgfsetbuttcap% 2530 \pgfsetroundjoin% 2531 \pgfsetlinewidth{1.505625pt}% 2532 \definecolor{currentstroke}{rgb}{ 0.839216,0.152941,0.156863}%2533 \pgfsetstrokecolor{currentstroke}% 2534 \pgfsetdash{}{0pt}% 2535 \pgfpathmoveto{\pgfqpoint{ 3.869368in}{1.795985in}}%2536 \pgfpathlineto{\pgfqpoint{ 3.869368in}{2.018207in}}%2537 \pgfusepath{stroke}% 2538 \end{pgfscope}% 2539 \begin{pgfscope}% 2540 \pgfsetbuttcap% 2541 \pgfsetroundjoin% 2542 \definecolor{currentfill}{rgb}{ 0.839216,0.152941,0.156863}%2367 \pgftext[x=1.313889in,y=1.261024in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-baseline}% 2368 \end{pgfscope}% 2369 \begin{pgfscope}% 2370 \pgfsetbuttcap% 2371 \pgfsetroundjoin% 2372 \pgfsetlinewidth{1.505625pt}% 2373 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2374 \pgfsetstrokecolor{currentstroke}% 2375 \pgfsetdash{}{0pt}% 2376 \pgfpathmoveto{\pgfqpoint{1.063889in}{1.046518in}}% 2377 \pgfpathlineto{\pgfqpoint{1.063889in}{1.185407in}}% 2378 \pgfusepath{stroke}% 2379 \end{pgfscope}% 2380 \begin{pgfscope}% 2381 \pgfsetbuttcap% 2382 \pgfsetroundjoin% 2383 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 2543 2384 \pgfsetfillcolor{currentfill}% 2544 2385 \pgfsetlinewidth{1.003750pt}% 2545 \definecolor{currentstroke}{rgb}{ 0.839216,0.152941,0.156863}%2386 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2546 2387 \pgfsetstrokecolor{currentstroke}% 2547 2388 \pgfsetdash{}{0pt}% … … 2552 2393 }% 2553 2394 \begin{pgfscope}% 2554 \pgfsys@transformshift{ 3.869368in}{1.795985in}%2555 \pgfsys@useobject{currentmarker}{}% 2556 \end{pgfscope}% 2557 \end{pgfscope}% 2558 \begin{pgfscope}% 2559 \pgfsetbuttcap% 2560 \pgfsetroundjoin% 2561 \definecolor{currentfill}{rgb}{ 0.839216,0.152941,0.156863}%2395 \pgfsys@transformshift{1.063889in}{1.046518in}% 2396 \pgfsys@useobject{currentmarker}{}% 2397 \end{pgfscope}% 2398 \end{pgfscope}% 2399 \begin{pgfscope}% 2400 \pgfsetbuttcap% 2401 \pgfsetroundjoin% 2402 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 2562 2403 \pgfsetfillcolor{currentfill}% 2563 2404 \pgfsetlinewidth{1.003750pt}% 2564 \definecolor{currentstroke}{rgb}{ 0.839216,0.152941,0.156863}%2405 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2565 2406 \pgfsetstrokecolor{currentstroke}% 2566 2407 \pgfsetdash{}{0pt}% … … 2571 2412 }% 2572 2413 \begin{pgfscope}% 2573 \pgfsys@transformshift{ 3.869368in}{2.018207in}%2414 \pgfsys@transformshift{1.063889in}{1.185407in}% 2574 2415 \pgfsys@useobject{currentmarker}{}% 2575 2416 \end{pgfscope}% … … 2579 2420 \pgfsetroundjoin% 2580 2421 \pgfsetlinewidth{1.505625pt}% 2581 \definecolor{currentstroke}{rgb}{ 0.839216,0.152941,0.156863}%2582 \pgfsetstrokecolor{currentstroke}% 2583 \pgfsetdash{}{0pt}% 2584 \pgfpathmoveto{\pgfqpoint{ 3.647146in}{1.907096in}}%2585 \pgfpathlineto{\pgfqpoint{ 4.091591in}{1.907096in}}%2586 \pgfusepath{stroke}% 2587 \end{pgfscope}% 2588 \begin{pgfscope}% 2589 \pgfsetbuttcap% 2590 \pgfset miterjoin%2591 \definecolor{currentfill}{rgb}{ 0.839216,0.152941,0.156863}%2422 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2423 \pgfsetstrokecolor{currentstroke}% 2424 \pgfsetdash{}{0pt}% 2425 \pgfpathmoveto{\pgfqpoint{0.925000in}{1.115963in}}% 2426 \pgfpathlineto{\pgfqpoint{1.202778in}{1.115963in}}% 2427 \pgfusepath{stroke}% 2428 \end{pgfscope}% 2429 \begin{pgfscope}% 2430 \pgfsetbuttcap% 2431 \pgfsetroundjoin% 2432 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 2592 2433 \pgfsetfillcolor{currentfill}% 2593 2434 \pgfsetlinewidth{1.003750pt}% 2594 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2595 \pgfsetstrokecolor{currentstroke}% 2596 \pgfsetdash{}{0pt}% 2597 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.058926in}{-0.058926in}}{\pgfqpoint{0.058926in}{0.058926in}}{% 2598 \pgfpathmoveto{\pgfqpoint{-0.000000in}{-0.058926in}}% 2599 \pgfpathlineto{\pgfqpoint{0.058926in}{0.000000in}}% 2600 \pgfpathlineto{\pgfqpoint{0.000000in}{0.058926in}}% 2601 \pgfpathlineto{\pgfqpoint{-0.058926in}{0.000000in}}% 2435 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2436 \pgfsetstrokecolor{currentstroke}% 2437 \pgfsetdash{}{0pt}% 2438 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2439 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2440 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2441 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2442 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2443 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2444 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2445 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2446 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2447 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2602 2448 \pgfpathclose% 2603 2449 \pgfusepath{stroke,fill}% 2604 2450 }% 2605 2451 \begin{pgfscope}% 2606 \pgfsys@transformshift{ 3.869368in}{1.907096in}%2452 \pgfsys@transformshift{1.063889in}{1.115963in}% 2607 2453 \pgfsys@useobject{currentmarker}{}% 2608 2454 \end{pgfscope}% … … 2612 2458 \pgfsetstrokecolor{textcolor}% 2613 2459 \pgfsetfillcolor{textcolor}% 2614 \pgftext[x=4.269368in,y=1.829318in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-rand}% 2460 \pgftext[x=1.313889in,y=1.067352in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-baseline}% 2461 \end{pgfscope}% 2462 \begin{pgfscope}% 2463 \pgfsetbuttcap% 2464 \pgfsetroundjoin% 2465 \pgfsetlinewidth{1.505625pt}% 2466 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2467 \pgfsetstrokecolor{currentstroke}% 2468 \pgfsetdash{}{0pt}% 2469 \pgfpathmoveto{\pgfqpoint{1.063889in}{0.852846in}}% 2470 \pgfpathlineto{\pgfqpoint{1.063889in}{0.991734in}}% 2471 \pgfusepath{stroke}% 2472 \end{pgfscope}% 2473 \begin{pgfscope}% 2474 \pgfsetbuttcap% 2475 \pgfsetroundjoin% 2476 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2477 \pgfsetfillcolor{currentfill}% 2478 \pgfsetlinewidth{1.003750pt}% 2479 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2480 \pgfsetstrokecolor{currentstroke}% 2481 \pgfsetdash{}{0pt}% 2482 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 2483 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 2484 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 2485 \pgfusepath{stroke,fill}% 2486 }% 2487 \begin{pgfscope}% 2488 \pgfsys@transformshift{1.063889in}{0.852846in}% 2489 \pgfsys@useobject{currentmarker}{}% 2490 \end{pgfscope}% 2491 \end{pgfscope}% 2492 \begin{pgfscope}% 2493 \pgfsetbuttcap% 2494 \pgfsetroundjoin% 2495 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2496 \pgfsetfillcolor{currentfill}% 2497 \pgfsetlinewidth{1.003750pt}% 2498 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2499 \pgfsetstrokecolor{currentstroke}% 2500 \pgfsetdash{}{0pt}% 2501 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 2502 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 2503 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 2504 \pgfusepath{stroke,fill}% 2505 }% 2506 \begin{pgfscope}% 2507 \pgfsys@transformshift{1.063889in}{0.991734in}% 2508 \pgfsys@useobject{currentmarker}{}% 2509 \end{pgfscope}% 2510 \end{pgfscope}% 2511 \begin{pgfscope}% 2512 \pgfsetrectcap% 2513 \pgfsetroundjoin% 2514 \pgfsetlinewidth{1.505625pt}% 2515 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2516 \pgfsetstrokecolor{currentstroke}% 2517 \pgfsetdash{}{0pt}% 2518 \pgfpathmoveto{\pgfqpoint{0.925000in}{0.922290in}}% 2519 \pgfpathlineto{\pgfqpoint{1.202778in}{0.922290in}}% 2520 \pgfusepath{stroke}% 2521 \end{pgfscope}% 2522 \begin{pgfscope}% 2523 \pgfsetbuttcap% 2524 \pgfsetroundjoin% 2525 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2526 \pgfsetfillcolor{currentfill}% 2527 \pgfsetlinewidth{1.003750pt}% 2528 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2529 \pgfsetstrokecolor{currentstroke}% 2530 \pgfsetdash{}{0pt}% 2531 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2532 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2533 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2534 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2535 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2536 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2537 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2538 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2539 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2540 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2541 \pgfpathclose% 2542 \pgfusepath{stroke,fill}% 2543 }% 2544 \begin{pgfscope}% 2545 \pgfsys@transformshift{1.063889in}{0.922290in}% 2546 \pgfsys@useobject{currentmarker}{}% 2547 \end{pgfscope}% 2548 \end{pgfscope}% 2549 \begin{pgfscope}% 2550 \definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% 2551 \pgfsetstrokecolor{textcolor}% 2552 \pgfsetfillcolor{textcolor}% 2553 \pgftext[x=1.313889in,y=0.873679in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-rand}% 2554 \end{pgfscope}% 2555 \begin{pgfscope}% 2556 \pgfsetbuttcap% 2557 \pgfsetroundjoin% 2558 \pgfsetlinewidth{1.505625pt}% 2559 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2560 \pgfsetstrokecolor{currentstroke}% 2561 \pgfsetdash{}{0pt}% 2562 \pgfpathmoveto{\pgfqpoint{1.063889in}{0.659173in}}% 2563 \pgfpathlineto{\pgfqpoint{1.063889in}{0.798062in}}% 2564 \pgfusepath{stroke}% 2565 \end{pgfscope}% 2566 \begin{pgfscope}% 2567 \pgfsetbuttcap% 2568 \pgfsetroundjoin% 2569 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2570 \pgfsetfillcolor{currentfill}% 2571 \pgfsetlinewidth{1.003750pt}% 2572 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2573 \pgfsetstrokecolor{currentstroke}% 2574 \pgfsetdash{}{0pt}% 2575 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 2576 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 2577 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 2578 \pgfusepath{stroke,fill}% 2579 }% 2580 \begin{pgfscope}% 2581 \pgfsys@transformshift{1.063889in}{0.659173in}% 2582 \pgfsys@useobject{currentmarker}{}% 2583 \end{pgfscope}% 2584 \end{pgfscope}% 2585 \begin{pgfscope}% 2586 \pgfsetbuttcap% 2587 \pgfsetroundjoin% 2588 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2589 \pgfsetfillcolor{currentfill}% 2590 \pgfsetlinewidth{1.003750pt}% 2591 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2592 \pgfsetstrokecolor{currentstroke}% 2593 \pgfsetdash{}{0pt}% 2594 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 2595 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 2596 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 2597 \pgfusepath{stroke,fill}% 2598 }% 2599 \begin{pgfscope}% 2600 \pgfsys@transformshift{1.063889in}{0.798062in}% 2601 \pgfsys@useobject{currentmarker}{}% 2602 \end{pgfscope}% 2603 \end{pgfscope}% 2604 \begin{pgfscope}% 2605 \pgfsetrectcap% 2606 \pgfsetroundjoin% 2607 \pgfsetlinewidth{1.505625pt}% 2608 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2609 \pgfsetstrokecolor{currentstroke}% 2610 \pgfsetdash{}{0pt}% 2611 \pgfpathmoveto{\pgfqpoint{0.925000in}{0.728617in}}% 2612 \pgfpathlineto{\pgfqpoint{1.202778in}{0.728617in}}% 2613 \pgfusepath{stroke}% 2614 \end{pgfscope}% 2615 \begin{pgfscope}% 2616 \pgfsetbuttcap% 2617 \pgfsetroundjoin% 2618 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2619 \pgfsetfillcolor{currentfill}% 2620 \pgfsetlinewidth{1.003750pt}% 2621 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2622 \pgfsetstrokecolor{currentstroke}% 2623 \pgfsetdash{}{0pt}% 2624 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 2625 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 2626 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 2627 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 2628 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 2629 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 2630 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 2631 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 2632 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 2633 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 2634 \pgfpathclose% 2635 \pgfusepath{stroke,fill}% 2636 }% 2637 \begin{pgfscope}% 2638 \pgfsys@transformshift{1.063889in}{0.728617in}% 2639 \pgfsys@useobject{currentmarker}{}% 2640 \end{pgfscope}% 2641 \end{pgfscope}% 2642 \begin{pgfscope}% 2643 \definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% 2644 \pgfsetstrokecolor{textcolor}% 2645 \pgfsetfillcolor{textcolor}% 2646 \pgftext[x=1.313889in,y=0.680006in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-rand}% 2615 2647 \end{pgfscope}% 2616 2648 \end{pgfpicture}% -
doc/theses/colby_parsons_MMAth/figures/pyke_Channel_Contention.pgf
r3982384 r6e4c44d 77 77 \pgfsetstrokecolor{textcolor}% 78 78 \pgfsetfillcolor{textcolor}% 79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 2\)}%79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 2\)}% 80 80 \end{pgfscope}% 81 81 \begin{pgfscope}% … … 102 102 \pgfsetstrokecolor{textcolor}% 103 103 \pgfsetfillcolor{textcolor}% 104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 4\)}%104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 4\)}% 105 105 \end{pgfscope}% 106 106 \begin{pgfscope}% … … 127 127 \pgfsetstrokecolor{textcolor}% 128 128 \pgfsetfillcolor{textcolor}% 129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 8\)}%129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 8\)}% 130 130 \end{pgfscope}% 131 131 \begin{pgfscope}% … … 152 152 \pgfsetstrokecolor{textcolor}% 153 153 \pgfsetfillcolor{textcolor}% 154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 16\)}%154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 16\)}% 155 155 \end{pgfscope}% 156 156 \begin{pgfscope}% … … 177 177 \pgfsetstrokecolor{textcolor}% 178 178 \pgfsetfillcolor{textcolor}% 179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 24\)}%179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 24\)}% 180 180 \end{pgfscope}% 181 181 \begin{pgfscope}% … … 202 202 \pgfsetstrokecolor{textcolor}% 203 203 \pgfsetfillcolor{textcolor}% 204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 6.000000}{19.200000}\selectfont \(\displaystyle 32\)}%204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 32\)}% 205 205 \end{pgfscope}% 206 206 \begin{pgfscope}% … … 208 208 \pgfsetstrokecolor{textcolor}% 209 209 \pgfsetfillcolor{textcolor}% 210 \pgftext[x=3.280000in,y=0. 161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}%210 \pgftext[x=3.280000in,y=0.251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}% 211 211 \end{pgfscope}% 212 212 \begin{pgfscope}% … … 233 233 \pgfsetstrokecolor{textcolor}% 234 234 \pgfsetfillcolor{textcolor}% 235 \pgftext[x=0. 399655in,y=2.241198in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{8}\)}%235 \pgftext[x=0.501581in,y=2.276306in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{8}\)}% 236 236 \end{pgfscope}% 237 237 \begin{pgfscope}% … … 429 429 \pgfsetstrokecolor{textcolor}% 430 430 \pgfsetfillcolor{textcolor}% 431 \pgftext[x=0. 344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (channel operations)}%431 \pgftext[x=0.446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (channel operations)}% 432 432 \end{pgfscope}% 433 433 \begin{pgfscope}% … … 838 838 \pgfusepath{clip}% 839 839 \pgfsetbuttcap% 840 \pgfset miterjoin%840 \pgfsetroundjoin% 841 841 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 842 842 \pgfsetfillcolor{currentfill}% 843 843 \pgfsetlinewidth{1.003750pt}% 844 844 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 845 \pgfsetstrokecolor{currentstroke}%846 \pgfsetdash{}{0pt}%847 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%848 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}%849 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%850 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%851 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}%852 \pgfpathclose%853 \pgfusepath{stroke,fill}%854 }%855 \begin{pgfscope}%856 \pgfsys@transformshift{1.025455in}{3.619140in}%857 \pgfsys@useobject{currentmarker}{}%858 \end{pgfscope}%859 \begin{pgfscope}%860 \pgfsys@transformshift{1.326061in}{3.242405in}%861 \pgfsys@useobject{currentmarker}{}%862 \end{pgfscope}%863 \begin{pgfscope}%864 \pgfsys@transformshift{1.927273in}{2.083323in}%865 \pgfsys@useobject{currentmarker}{}%866 \end{pgfscope}%867 \begin{pgfscope}%868 \pgfsys@transformshift{3.129697in}{0.987727in}%869 \pgfsys@useobject{currentmarker}{}%870 \end{pgfscope}%871 \begin{pgfscope}%872 \pgfsys@transformshift{4.332121in}{0.742138in}%873 \pgfsys@useobject{currentmarker}{}%874 \end{pgfscope}%875 \begin{pgfscope}%876 \pgfsys@transformshift{5.534545in}{0.704967in}%877 \pgfsys@useobject{currentmarker}{}%878 \end{pgfscope}%879 \end{pgfscope}%880 \begin{pgfscope}%881 \pgfsetrectcap%882 \pgfsetmiterjoin%883 \pgfsetlinewidth{0.803000pt}%884 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%885 \pgfsetstrokecolor{currentstroke}%886 \pgfsetdash{}{0pt}%887 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%888 \pgfpathlineto{\pgfqpoint{0.800000in}{4.224000in}}%889 \pgfusepath{stroke}%890 \end{pgfscope}%891 \begin{pgfscope}%892 \pgfsetrectcap%893 \pgfsetmiterjoin%894 \pgfsetlinewidth{0.803000pt}%895 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%896 \pgfsetstrokecolor{currentstroke}%897 \pgfsetdash{}{0pt}%898 \pgfpathmoveto{\pgfqpoint{5.760000in}{0.528000in}}%899 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%900 \pgfusepath{stroke}%901 \end{pgfscope}%902 \begin{pgfscope}%903 \pgfsetrectcap%904 \pgfsetmiterjoin%905 \pgfsetlinewidth{0.803000pt}%906 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%907 \pgfsetstrokecolor{currentstroke}%908 \pgfsetdash{}{0pt}%909 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%910 \pgfpathlineto{\pgfqpoint{5.760000in}{0.528000in}}%911 \pgfusepath{stroke}%912 \end{pgfscope}%913 \begin{pgfscope}%914 \pgfsetrectcap%915 \pgfsetmiterjoin%916 \pgfsetlinewidth{0.803000pt}%917 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%918 \pgfsetstrokecolor{currentstroke}%919 \pgfsetdash{}{0pt}%920 \pgfpathmoveto{\pgfqpoint{0.800000in}{4.224000in}}%921 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%922 \pgfusepath{stroke}%923 \end{pgfscope}%924 \begin{pgfscope}%925 \definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%926 \pgfsetstrokecolor{textcolor}%927 \pgfsetfillcolor{textcolor}%928 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{19.200000}{23.040000}\selectfont Channel Contention Benchmark}%929 \end{pgfscope}%930 \begin{pgfscope}%931 \pgfsetbuttcap%932 \pgfsetmiterjoin%933 \definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}%934 \pgfsetfillcolor{currentfill}%935 \pgfsetfillopacity{0.800000}%936 \pgfsetlinewidth{1.003750pt}%937 \definecolor{currentstroke}{rgb}{0.800000,0.800000,0.800000}%938 \pgfsetstrokecolor{currentstroke}%939 \pgfsetstrokeopacity{0.800000}%940 \pgfsetdash{}{0pt}%941 \pgfpathmoveto{\pgfqpoint{4.447292in}{3.397303in}}%942 \pgfpathlineto{\pgfqpoint{5.604444in}{3.397303in}}%943 \pgfpathquadraticcurveto{\pgfqpoint{5.648889in}{3.397303in}}{\pgfqpoint{5.648889in}{3.441747in}}%944 \pgfpathlineto{\pgfqpoint{5.648889in}{4.068444in}}%945 \pgfpathquadraticcurveto{\pgfqpoint{5.648889in}{4.112889in}}{\pgfqpoint{5.604444in}{4.112889in}}%946 \pgfpathlineto{\pgfqpoint{4.447292in}{4.112889in}}%947 \pgfpathquadraticcurveto{\pgfqpoint{4.402848in}{4.112889in}}{\pgfqpoint{4.402848in}{4.068444in}}%948 \pgfpathlineto{\pgfqpoint{4.402848in}{3.441747in}}%949 \pgfpathquadraticcurveto{\pgfqpoint{4.402848in}{3.397303in}}{\pgfqpoint{4.447292in}{3.397303in}}%950 \pgfpathclose%951 \pgfusepath{stroke,fill}%952 \end{pgfscope}%953 \begin{pgfscope}%954 \pgfsetbuttcap%955 \pgfsetroundjoin%956 \pgfsetlinewidth{1.505625pt}%957 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%958 \pgfsetstrokecolor{currentstroke}%959 \pgfsetdash{}{0pt}%960 \pgfpathmoveto{\pgfqpoint{4.713959in}{3.824000in}}%961 \pgfpathlineto{\pgfqpoint{4.713959in}{4.046222in}}%962 \pgfusepath{stroke}%963 \end{pgfscope}%964 \begin{pgfscope}%965 \pgfsetbuttcap%966 \pgfsetroundjoin%967 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%968 \pgfsetfillcolor{currentfill}%969 \pgfsetlinewidth{1.003750pt}%970 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%971 \pgfsetstrokecolor{currentstroke}%972 \pgfsetdash{}{0pt}%973 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%974 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%975 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%976 \pgfusepath{stroke,fill}%977 }%978 \begin{pgfscope}%979 \pgfsys@transformshift{4.713959in}{3.824000in}%980 \pgfsys@useobject{currentmarker}{}%981 \end{pgfscope}%982 \end{pgfscope}%983 \begin{pgfscope}%984 \pgfsetbuttcap%985 \pgfsetroundjoin%986 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%987 \pgfsetfillcolor{currentfill}%988 \pgfsetlinewidth{1.003750pt}%989 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%990 \pgfsetstrokecolor{currentstroke}%991 \pgfsetdash{}{0pt}%992 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%993 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%994 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%995 \pgfusepath{stroke,fill}%996 }%997 \begin{pgfscope}%998 \pgfsys@transformshift{4.713959in}{4.046222in}%999 \pgfsys@useobject{currentmarker}{}%1000 \end{pgfscope}%1001 \end{pgfscope}%1002 \begin{pgfscope}%1003 \pgfsetrectcap%1004 \pgfsetroundjoin%1005 \pgfsetlinewidth{1.505625pt}%1006 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%1007 \pgfsetstrokecolor{currentstroke}%1008 \pgfsetdash{}{0pt}%1009 \pgfpathmoveto{\pgfqpoint{4.491737in}{3.935111in}}%1010 \pgfpathlineto{\pgfqpoint{4.936181in}{3.935111in}}%1011 \pgfusepath{stroke}%1012 \end{pgfscope}%1013 \begin{pgfscope}%1014 \pgfsetbuttcap%1015 \pgfsetroundjoin%1016 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%1017 \pgfsetfillcolor{currentfill}%1018 \pgfsetlinewidth{1.003750pt}%1019 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%1020 845 \pgfsetstrokecolor{currentstroke}% 1021 846 \pgfsetdash{}{0pt}% … … 1034 859 }% 1035 860 \begin{pgfscope}% 1036 \pgfsys@transformshift{4.713959in}{3.935111in}% 1037 \pgfsys@useobject{currentmarker}{}% 1038 \end{pgfscope}% 861 \pgfsys@transformshift{1.025455in}{3.619140in}% 862 \pgfsys@useobject{currentmarker}{}% 863 \end{pgfscope}% 864 \begin{pgfscope}% 865 \pgfsys@transformshift{1.326061in}{3.242405in}% 866 \pgfsys@useobject{currentmarker}{}% 867 \end{pgfscope}% 868 \begin{pgfscope}% 869 \pgfsys@transformshift{1.927273in}{2.083323in}% 870 \pgfsys@useobject{currentmarker}{}% 871 \end{pgfscope}% 872 \begin{pgfscope}% 873 \pgfsys@transformshift{3.129697in}{0.987727in}% 874 \pgfsys@useobject{currentmarker}{}% 875 \end{pgfscope}% 876 \begin{pgfscope}% 877 \pgfsys@transformshift{4.332121in}{0.742138in}% 878 \pgfsys@useobject{currentmarker}{}% 879 \end{pgfscope}% 880 \begin{pgfscope}% 881 \pgfsys@transformshift{5.534545in}{0.704967in}% 882 \pgfsys@useobject{currentmarker}{}% 883 \end{pgfscope}% 884 \end{pgfscope}% 885 \begin{pgfscope}% 886 \pgfsetrectcap% 887 \pgfsetmiterjoin% 888 \pgfsetlinewidth{0.803000pt}% 889 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 890 \pgfsetstrokecolor{currentstroke}% 891 \pgfsetdash{}{0pt}% 892 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}% 893 \pgfpathlineto{\pgfqpoint{0.800000in}{4.224000in}}% 894 \pgfusepath{stroke}% 895 \end{pgfscope}% 896 \begin{pgfscope}% 897 \pgfsetrectcap% 898 \pgfsetmiterjoin% 899 \pgfsetlinewidth{0.803000pt}% 900 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 901 \pgfsetstrokecolor{currentstroke}% 902 \pgfsetdash{}{0pt}% 903 \pgfpathmoveto{\pgfqpoint{5.760000in}{0.528000in}}% 904 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}% 905 \pgfusepath{stroke}% 906 \end{pgfscope}% 907 \begin{pgfscope}% 908 \pgfsetrectcap% 909 \pgfsetmiterjoin% 910 \pgfsetlinewidth{0.803000pt}% 911 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 912 \pgfsetstrokecolor{currentstroke}% 913 \pgfsetdash{}{0pt}% 914 \pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}% 915 \pgfpathlineto{\pgfqpoint{5.760000in}{0.528000in}}% 916 \pgfusepath{stroke}% 917 \end{pgfscope}% 918 \begin{pgfscope}% 919 \pgfsetrectcap% 920 \pgfsetmiterjoin% 921 \pgfsetlinewidth{0.803000pt}% 922 \definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% 923 \pgfsetstrokecolor{currentstroke}% 924 \pgfsetdash{}{0pt}% 925 \pgfpathmoveto{\pgfqpoint{0.800000in}{4.224000in}}% 926 \pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}% 927 \pgfusepath{stroke}% 1039 928 \end{pgfscope}% 1040 929 \begin{pgfscope}% … … 1042 931 \pgfsetstrokecolor{textcolor}% 1043 932 \pgfsetfillcolor{textcolor}% 1044 \pgftext[x=5.113959in,y=3.857333in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA}% 1045 \end{pgfscope}% 1046 \begin{pgfscope}% 1047 \pgfsetbuttcap% 1048 \pgfsetroundjoin% 1049 \pgfsetlinewidth{1.505625pt}% 1050 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1051 \pgfsetstrokecolor{currentstroke}% 1052 \pgfsetdash{}{0pt}% 1053 \pgfpathmoveto{\pgfqpoint{4.713959in}{3.499540in}}% 1054 \pgfpathlineto{\pgfqpoint{4.713959in}{3.721763in}}% 1055 \pgfusepath{stroke}% 1056 \end{pgfscope}% 1057 \begin{pgfscope}% 1058 \pgfsetbuttcap% 1059 \pgfsetroundjoin% 1060 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1061 \pgfsetfillcolor{currentfill}% 1062 \pgfsetlinewidth{1.003750pt}% 1063 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 933 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{12.000000}{14.400000}\selectfont Channel Contention Benchmark}% 934 \end{pgfscope}% 935 \begin{pgfscope}% 936 \pgfsetbuttcap% 937 \pgfsetmiterjoin% 938 \definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}% 939 \pgfsetfillcolor{currentfill}% 940 \pgfsetfillopacity{0.800000}% 941 \pgfsetlinewidth{1.003750pt}% 942 \definecolor{currentstroke}{rgb}{0.800000,0.800000,0.800000}% 943 \pgfsetstrokecolor{currentstroke}% 944 \pgfsetstrokeopacity{0.800000}% 945 \pgfsetdash{}{0pt}% 946 \pgfpathmoveto{\pgfqpoint{4.938626in}{3.725543in}}% 947 \pgfpathlineto{\pgfqpoint{5.662778in}{3.725543in}}% 948 \pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{3.725543in}}{\pgfqpoint{5.690556in}{3.753321in}}% 949 \pgfpathlineto{\pgfqpoint{5.690556in}{4.126778in}}% 950 \pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{4.154556in}}{\pgfqpoint{5.662778in}{4.154556in}}% 951 \pgfpathlineto{\pgfqpoint{4.938626in}{4.154556in}}% 952 \pgfpathquadraticcurveto{\pgfqpoint{4.910848in}{4.154556in}}{\pgfqpoint{4.910848in}{4.126778in}}% 953 \pgfpathlineto{\pgfqpoint{4.910848in}{3.753321in}}% 954 \pgfpathquadraticcurveto{\pgfqpoint{4.910848in}{3.725543in}}{\pgfqpoint{4.938626in}{3.725543in}}% 955 \pgfpathclose% 956 \pgfusepath{stroke,fill}% 957 \end{pgfscope}% 958 \begin{pgfscope}% 959 \pgfsetbuttcap% 960 \pgfsetroundjoin% 961 \pgfsetlinewidth{1.505625pt}% 962 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 963 \pgfsetstrokecolor{currentstroke}% 964 \pgfsetdash{}{0pt}% 965 \pgfpathmoveto{\pgfqpoint{5.105293in}{3.980944in}}% 966 \pgfpathlineto{\pgfqpoint{5.105293in}{4.119833in}}% 967 \pgfusepath{stroke}% 968 \end{pgfscope}% 969 \begin{pgfscope}% 970 \pgfsetbuttcap% 971 \pgfsetroundjoin% 972 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 973 \pgfsetfillcolor{currentfill}% 974 \pgfsetlinewidth{1.003750pt}% 975 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1064 976 \pgfsetstrokecolor{currentstroke}% 1065 977 \pgfsetdash{}{0pt}% … … 1070 982 }% 1071 983 \begin{pgfscope}% 1072 \pgfsys@transformshift{ 4.713959in}{3.499540in}%1073 \pgfsys@useobject{currentmarker}{}% 1074 \end{pgfscope}% 1075 \end{pgfscope}% 1076 \begin{pgfscope}% 1077 \pgfsetbuttcap% 1078 \pgfsetroundjoin% 1079 \definecolor{currentfill}{rgb}{ 1.000000,0.498039,0.054902}%1080 \pgfsetfillcolor{currentfill}% 1081 \pgfsetlinewidth{1.003750pt}% 1082 \definecolor{currentstroke}{rgb}{ 1.000000,0.498039,0.054902}%984 \pgfsys@transformshift{5.105293in}{3.980944in}% 985 \pgfsys@useobject{currentmarker}{}% 986 \end{pgfscope}% 987 \end{pgfscope}% 988 \begin{pgfscope}% 989 \pgfsetbuttcap% 990 \pgfsetroundjoin% 991 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 992 \pgfsetfillcolor{currentfill}% 993 \pgfsetlinewidth{1.003750pt}% 994 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1083 995 \pgfsetstrokecolor{currentstroke}% 1084 996 \pgfsetdash{}{0pt}% … … 1089 1001 }% 1090 1002 \begin{pgfscope}% 1091 \pgfsys@transformshift{ 4.713959in}{3.721763in}%1003 \pgfsys@transformshift{5.105293in}{4.119833in}% 1092 1004 \pgfsys@useobject{currentmarker}{}% 1093 1005 \end{pgfscope}% … … 1097 1009 \pgfsetroundjoin% 1098 1010 \pgfsetlinewidth{1.505625pt}% 1099 \definecolor{currentstroke}{rgb}{ 1.000000,0.498039,0.054902}%1100 \pgfsetstrokecolor{currentstroke}% 1101 \pgfsetdash{}{0pt}% 1102 \pgfpathmoveto{\pgfqpoint{4. 491737in}{3.610651in}}%1103 \pgfpathlineto{\pgfqpoint{ 4.936181in}{3.610651in}}%1104 \pgfusepath{stroke}% 1105 \end{pgfscope}% 1106 \begin{pgfscope}% 1107 \pgfsetbuttcap% 1108 \pgfset miterjoin%1109 \definecolor{currentfill}{rgb}{ 1.000000,0.498039,0.054902}%1110 \pgfsetfillcolor{currentfill}% 1111 \pgfsetlinewidth{1.003750pt}% 1112 \definecolor{currentstroke}{rgb}{ 1.000000,0.498039,0.054902}%1011 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1012 \pgfsetstrokecolor{currentstroke}% 1013 \pgfsetdash{}{0pt}% 1014 \pgfpathmoveto{\pgfqpoint{4.966404in}{4.050389in}}% 1015 \pgfpathlineto{\pgfqpoint{5.244182in}{4.050389in}}% 1016 \pgfusepath{stroke}% 1017 \end{pgfscope}% 1018 \begin{pgfscope}% 1019 \pgfsetbuttcap% 1020 \pgfsetroundjoin% 1021 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 1022 \pgfsetfillcolor{currentfill}% 1023 \pgfsetlinewidth{1.003750pt}% 1024 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% 1113 1025 \pgfsetstrokecolor{currentstroke}% 1114 1026 \pgfsetdash{}{0pt}% 1115 1027 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 1116 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}% 1117 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}% 1118 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}% 1119 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}% 1028 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 1029 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 1030 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 1031 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 1032 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 1033 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 1034 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 1035 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 1036 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 1120 1037 \pgfpathclose% 1121 1038 \pgfusepath{stroke,fill}% 1122 1039 }% 1123 1040 \begin{pgfscope}% 1124 \pgfsys@transformshift{ 4.713959in}{3.610651in}%1041 \pgfsys@transformshift{5.105293in}{4.050389in}% 1125 1042 \pgfsys@useobject{currentmarker}{}% 1126 1043 \end{pgfscope}% … … 1130 1047 \pgfsetstrokecolor{textcolor}% 1131 1048 \pgfsetfillcolor{textcolor}% 1132 \pgftext[x=5.113959in,y=3.532874in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Go}% 1049 \pgftext[x=5.355293in,y=4.001778in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA}% 1050 \end{pgfscope}% 1051 \begin{pgfscope}% 1052 \pgfsetbuttcap% 1053 \pgfsetroundjoin% 1054 \pgfsetlinewidth{1.505625pt}% 1055 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1056 \pgfsetstrokecolor{currentstroke}% 1057 \pgfsetdash{}{0pt}% 1058 \pgfpathmoveto{\pgfqpoint{5.105293in}{3.787272in}}% 1059 \pgfpathlineto{\pgfqpoint{5.105293in}{3.926161in}}% 1060 \pgfusepath{stroke}% 1061 \end{pgfscope}% 1062 \begin{pgfscope}% 1063 \pgfsetbuttcap% 1064 \pgfsetroundjoin% 1065 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1066 \pgfsetfillcolor{currentfill}% 1067 \pgfsetlinewidth{1.003750pt}% 1068 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1069 \pgfsetstrokecolor{currentstroke}% 1070 \pgfsetdash{}{0pt}% 1071 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 1072 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 1073 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 1074 \pgfusepath{stroke,fill}% 1075 }% 1076 \begin{pgfscope}% 1077 \pgfsys@transformshift{5.105293in}{3.787272in}% 1078 \pgfsys@useobject{currentmarker}{}% 1079 \end{pgfscope}% 1080 \end{pgfscope}% 1081 \begin{pgfscope}% 1082 \pgfsetbuttcap% 1083 \pgfsetroundjoin% 1084 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1085 \pgfsetfillcolor{currentfill}% 1086 \pgfsetlinewidth{1.003750pt}% 1087 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1088 \pgfsetstrokecolor{currentstroke}% 1089 \pgfsetdash{}{0pt}% 1090 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{% 1091 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}% 1092 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}% 1093 \pgfusepath{stroke,fill}% 1094 }% 1095 \begin{pgfscope}% 1096 \pgfsys@transformshift{5.105293in}{3.926161in}% 1097 \pgfsys@useobject{currentmarker}{}% 1098 \end{pgfscope}% 1099 \end{pgfscope}% 1100 \begin{pgfscope}% 1101 \pgfsetrectcap% 1102 \pgfsetroundjoin% 1103 \pgfsetlinewidth{1.505625pt}% 1104 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1105 \pgfsetstrokecolor{currentstroke}% 1106 \pgfsetdash{}{0pt}% 1107 \pgfpathmoveto{\pgfqpoint{4.966404in}{3.856716in}}% 1108 \pgfpathlineto{\pgfqpoint{5.244182in}{3.856716in}}% 1109 \pgfusepath{stroke}% 1110 \end{pgfscope}% 1111 \begin{pgfscope}% 1112 \pgfsetbuttcap% 1113 \pgfsetroundjoin% 1114 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1115 \pgfsetfillcolor{currentfill}% 1116 \pgfsetlinewidth{1.003750pt}% 1117 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1118 \pgfsetstrokecolor{currentstroke}% 1119 \pgfsetdash{}{0pt}% 1120 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 1121 \pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}% 1122 \pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}% 1123 \pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}% 1124 \pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}% 1125 \pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}% 1126 \pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}% 1127 \pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}% 1128 \pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}% 1129 \pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}% 1130 \pgfpathclose% 1131 \pgfusepath{stroke,fill}% 1132 }% 1133 \begin{pgfscope}% 1134 \pgfsys@transformshift{5.105293in}{3.856716in}% 1135 \pgfsys@useobject{currentmarker}{}% 1136 \end{pgfscope}% 1137 \end{pgfscope}% 1138 \begin{pgfscope}% 1139 \definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% 1140 \pgfsetstrokecolor{textcolor}% 1141 \pgfsetfillcolor{textcolor}% 1142 \pgftext[x=5.355293in,y=3.808105in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Go}% 1133 1143 \end{pgfscope}% 1134 1144 \end{pgfpicture}% -
doc/theses/colby_parsons_MMAth/style/style.tex
r3982384 r6e4c44d 7 7 8 8 \newcommand{\code}[1]{\lstinline[language=CFA]{#1}} 9 \newcommand{\Go}[1]{\lstinline[language=Go]{#1}}10 9 \newcommand{\uC}{$\mu$\CC} 11 10 \newcommand{\PAB}[1]{{\color{red}PAB: #1}} 12 \newcommand{\CAP}[1]{{\color{orange}CAP: #1}}13 11 14 12 \newsavebox{\myboxA} % used with subfigure -
doc/theses/colby_parsons_MMAth/text/CFA_concurrency.tex
r3982384 r6e4c44d 7 7 \section{Threading Model}\label{s:threading} 8 8 \CFA provides user-level threading and supports an $M$:$N$ threading model where $M$ user threads are scheduled on $N$ kernel threads, where both $M$ and $N$ can be explicitly set by the user. 9 Kernel threads are created by declaring a @processor@ structure.9 Kernel threads are created by instancing a @processor@ structure. 10 10 User-thread types are defined by creating a @thread@ aggregate-type, \ie replace @struct@ with @thread@. 11 11 For each thread type a corresponding @main@ routine must be defined, which is where the thread starts running once it is created. … … 30 30 When processors are added, they are added alongside the existing processor given to each program. 31 31 Thus, for $N$ processors, allocate $N-1$ processors. 32 A thread is implicitly joined at deallocat ion, either implicitly at block exit for stack allocation or explicitly at @delete@ for heap allocation.32 A thread is implicitly joined at deallocated, either implicitly at block exit for stack allocation or explicitly at @delete@ for heap allocation. 33 33 The thread performing the deallocation must wait for the thread to terminate before the deallocation can occur. 34 34 A thread terminates by returning from the main routine where it starts. -
doc/theses/colby_parsons_MMAth/text/CFA_intro.tex
r3982384 r6e4c44d 6 6 7 7 \section{Overview} 8 The following serves as an introduction to \CFA. 9 \CFA is a layer over C, is transpiled\footnote{Source to source translator.} to C, and is largely considered to be an extension of C. 10 Beyond C, it adds productivity features, extended libraries, an advanced type -system, and many control-flow/concurrency constructions.11 However, \CFA stays true to the C programming style, with most code revolving around @struct@'s and routines, and respects the same rules as C. 12 \CFA is not object oriented as it has no notion of @this@ (receiver) and no structures with methods, but supports some object oriented ideas including constructors, destructors, and limited nominal inheritance.8 The following serves as an introduction to \CFA. 9 \CFA is a layer over C, is transpiled\footnote{Source to source translator.} to C, and is largely considered to be an extension of C. 10 Beyond C, it adds productivity features, extended libraries, an advanced type system, and many control-flow/concurrency constructions. 11 However, \CFA stays true to the C programming style, with most code revolving around @struct@'s and routines, and respects the same rules as C. 12 \CFA is not object oriented as it has no notion of @this@ (receiver) and no structures with methods, but supports some object oriented ideas including constructors, destructors, and limited containment inheritance. 13 13 While \CFA is rich with interesting features, only the subset pertinent to this work is discussed. 14 14 15 15 \section{References} 16 References in \CFA are similar to references in \CC; however \CFA references are \emph{rebindable}, and support multi-level referencing.17 References in \CFA are a layer of syntactic sugar over pointers to reduce the number of ref/deref operations needed with pointer usage. 16 References in \CFA are similar to references in \CC; however \CFA references are rebindable, and support multi-level referencing. 17 References in \CFA are a layer of syntactic sugar over pointers to reduce the number of ref/deref operations needed with pointer usage. 18 18 Another difference is the use of @0p@ instead of C's @NULL@ or \CC's @nullptr@. 19 Examples of references are shown in \VRef[Listing]{l:cfa_ref}. 19 Examples of references are shown in \VRef[Listing]{l:cfa_ref}. 20 20 21 21 \begin{cfa}[caption={Example of \CFA references},label={l:cfa_ref}] … … 37 37 38 38 \section{Overloading}\label{s:Overloading} 39 \CFA routines can be overloaded on parameter type, number of parameters, and \emph{return type}. 40 Variables can also be overloaded on type, meaning that two variables can have the same name so long as they have different types. 39 \CFA routines can be overloaded on parameter type, number of parameters, and \emph{return type}. 40 Variables can also be overloaded on type, meaning that two variables can have the same name so long as they have different types. 41 41 A routine or variable is disambiguated at each usage site via its type and surrounding expression context. 42 A cast is used to disambiguate any conflicting usage. 43 Examples of overloading are shown in \VRef[Listing]{l:cfa_overload}. 42 A cast is used to disambiguate any conflicting usage. 43 Examples of overloading are shown in \VRef[Listing]{l:cfa_overload}. 44 44 45 45 \begin{cfa}[caption={Example of \CFA overloading},label={l:cfa_overload}] … … 60 60 61 61 62 \section{ \lstinline{with}Statement}62 \section{With Statement} 63 63 The \CFA @with@ statement is for exposing fields of an aggregate type within a scope, allowing field names without qualification. 64 This feature is also implemented in Pascal~\cite{Pascal}. 65 It can exist as a stand-alone statement or wrap a routine body to expose aggregate fields. 66 Examples of the @with@ statement are shown in \VRef[Listing]{l:cfa_with}. 64 This feature is also implemented in Pascal~\cite{Pascal}. 65 It can exist as a stand-alone statement or wrap a routine body to expose aggregate fields. 66 Examples of the @with@ statement are shown in \VRef[Listing]{l:cfa_with}. 67 67 68 68 \begin{cfa}[caption={Example of \CFA \lstinline{with} statement},label={l:cfa_with}] … … 83 83 84 84 \section{Operators} 85 Operators can be overloaded in \CFA with operator routines. 85 Operators can be overloaded in \CFA with operator routines. 86 86 Operators in \CFA are named using an operator symbol and '@?@' to represent operands. 87 Examples of \CFA operators are shown in \VRef[Listing]{l:cfa_operate}. 87 Examples of \CFA operators are shown in \VRef[Listing]{l:cfa_operate}. 88 88 89 89 \begin{cfa}[caption={Example of \CFA operators},label={l:cfa_operate}] … … 102 102 103 103 \section{Constructors and Destructors} 104 Constructors and destructors in \CFA are special operator routines used for creation and destruction of objects. 105 The default constructor and destructor for a type are called implicitly upon creation and deletion, respectively. 106 Examples of \CFA constructors and destructors are shown in \VRef[Listing]{l:cfa_ctor}. 104 Constructors and destructors in \CFA are special operator routines used for creation and destruction of objects. 105 The default constructor and destructor for a type are called implicitly upon creation and deletion, respectively. 106 Examples of \CFA constructors and destructors are shown in \VRef[Listing]{l:cfa_ctor}. 107 107 108 108 \begin{cfa}[caption={Example of \CFA constructors and destructors},label={l:cfa_ctor}] … … 128 128 \section{Polymorphism}\label{s:poly} 129 129 C supports limited polymorphism, often requiring users to implement polymorphism using a @void *@ (type erasure) approach. 130 \CFA extends C with generalized overloading polymorphism (see \VRef{s:Overloading}), as well as, parametric polymorphism and limitednominal inheritance.130 \CFA extends C with generalized overloading polymorphism (see \VRef{s:Overloading}), as well as, parametric polymorphism and nominal inheritance. 131 131 132 132 \subsection{Parametric Polymorphism} 133 \CFA provides parametric polymorphism in the form of @forall@, and @trait@s. 134 A @forall@ takes in a set of types and a list of constraints. 135 The declarations that follow the @forall@ are parameterized over the types listed that satisfy the constraints. 136 A list of @forall@ constraints can be refactored into a named @trait@ and reused in @forall@s. 137 Examples of \CFA parametric polymorphism are shown in \VRef[Listing]{l:cfa_poly}. 133 \CFA provides parametric polymorphism in the form of @forall@, and @trait@s. 134 A @forall@ takes in a set of types and a list of constraints. 135 The declarations that follow the @forall@ are parameterized over the types listed that satisfy the constraints. 136 A list of @forall@ constraints can be refactored into a named @trait@ and reused in @forall@s. 137 Examples of \CFA parametric polymorphism are shown in \VRef[Listing]{l:cfa_poly}. 138 138 139 139 \begin{cfa}[caption={Example of \CFA parametric polymorphism},label={l:cfa_poly}] … … 180 180 181 181 \subsection{Inheritance} 182 Inheritance in \CFA is taken from Plan-9 C's nominal inheritance.183 In \CFA, @struct@s can @inline@ another struct type to gain its fields and masquerade as that type. 184 Examples of \CFA nominal inheritance are shown in \VRef[Listing]{l:cfa_inherit}.185 186 \begin{cfa}[caption={Example of \CFA nominalinheritance},label={l:cfa_inherit}]182 Inheritance in \CFA is taken from Plan-9 C's containment inheritance. 183 In \CFA, @struct@s can @inline@ another struct type to gain its fields and masquerade as that type. 184 Examples of \CFA containment inheritance are shown in \VRef[Listing]{l:cfa_inherit}. 185 186 \begin{cfa}[caption={Example of \CFA containment inheritance},label={l:cfa_inherit}] 187 187 struct one_d { double x; }; 188 struct two_d { 188 struct two_d { 189 189 @inline@ one_d; 190 190 double y; 191 191 }; 192 struct three_d { 192 struct three_d { 193 193 @inline@ two_d; 194 194 double z; -
doc/theses/colby_parsons_MMAth/text/actors.tex
r3982384 r6e4c44d 673 673 674 674 \section{Performance}\label{s:actor_perf} 675 \CAP{I will update the figures to have the larger font size and different line markers once we start editing this chapter.}676 675 The performance of \CFA's actor system is tested using a suite of microbenchmarks, and compared with other actor systems. 677 676 Most of the benchmarks are the same as those presented in \ref{}, with a few additions. -
doc/theses/colby_parsons_MMAth/text/channels.tex
r3982384 r6e4c44d 5 5 % ====================================================================== 6 6 7 Channels are a concurrent-language feature used to perform \Newterm{message-passing concurrency}: a model of concurrency where threads communicate by sending (mostly nonblocking) data as messages and synchronizing by receiving (blocking) sent data. 8 This model is an alternative to shared-memory concurrency, where threads can communicate directly by changing shared state. 7 9 Most modern concurrent programming languages do not subscribe to just one style of communication among threads and provide features that support multiple approaches. 8 Channels are a concurrent-language feature used to perform \Newterm{message-passing concurrency}: a model of concurrency where threads communicate by sending data as messages (mostly non\-blocking) and synchronizing by receiving sent messages (blocking).9 This model is an alternative to shared-memory concurrency, where threads can communicate directly by changing shared state.10 10 11 11 Channels were first introduced by Kahn~\cite{Kahn74} and extended by Hoare~\cite{Hoare78} (CSP). … … 13 13 Both languages are highly restrictive. 14 14 Kahn's language restricts a reading process to only wait for data on a single channel at a time and different writing processes cannot send data on the same channel. 15 Hoare's language restricts channels such that both the sender and receiver need to explicitly name the process that is destination of a channel send or the source of a channel receive. 16 These channel semantics remove the ability to have an anonymous sender or receiver and additionally all channel operations in CSP are synchronous (no buffering). 17 Channels as a programming language feature has been popularized in recent years by the language Go, which encourages the use of channels as its fundamental concurrent feature. 18 Go's restrictions are ... \CAP{The only restrictions in Go but not CFA that I can think of are the closing semantics and the functionality of select vs. waituntil. Is that worth mentioning here or should it be discussed later?} 15 Hoare's language restricts ... 16 Channels as a programming language feature has been popularized in recent years due to the language Go, which encourages the use of channels as its fundamental concurrent feature. 17 Go's restrictions are ... 19 18 \CFA channels do not have these restrictions. 20 19 21 20 \section{Producer-Consumer Problem} 22 A channel is an abstraction for a shared-memory buffer, which turns the implementation of a channel into the producer-consumer problem. 23 The producer-consumer problem, also known as the bounded-buffer problem, was introduced by Dijkstra~\cite[\S~4.1]{Dijkstra65}. 24 In the problem, threads interact with a buffer in two ways: producing threads insert values into the buffer and consuming threads remove values from the buffer. 25 In general, a buffer needs protection to ensure a producer only inserts into a non-full buffer and a consumer only removes from a non-empty buffer (synchronization). 26 As well, a buffer needs protection from concurrent access by multiple producers or consumers attempt to insert or remove simultaneously (MX). 27 28 Channels come in three flavours of buffers: 29 \begin{enumerate} 30 \item 31 Zero sized implies the communication is synchronous, \ie the producer must wait for the consumer to arrive or vice versa for a value to be communicated. 32 \item 33 Fixed sized (bounded) implies the communication is asynchronous, \ie the producer can proceed up to the buffer size and vice versa for the consumer with respect to removal. 34 \item 35 Infinite sized (unbounded) implies the communication is asynchronous, \ie the producer never waits but the consumer waits when the buffer is empty. 36 Since memory is finite, all unbounded buffers are ultimately bounded; 37 this restriction must be part of its implementation. 38 \end{enumerate} 39 40 In general, the order values are processed by the consumer does not affect the correctness of the producer-consumer problem. 41 For example, the buffer can be LIFO, FIFO, or prioritized with respect to insertion and removal. 42 However, like MX, a buffer should ensure every value is eventually removed after some reasonable bounded time (no long-term starvation). 43 The simplest way to prevent starvation is to implement the buffer as a queue, either with a cyclic array or linked nodes. 21 Most channels in modern programming languages are built on top of a shared memory buffer. 22 While it is possible to create a channel that contains an unbounded buffer, most implementations opt to only support a fixed size channel, where the size is given at the time of channel creation. 23 This turns the implementation of a channel into the producer-consumer problem. 24 The producer-consumer problem, also known as the bounded buffer problem, was introduced by Dijkstra in his book Cooperating Sequential Processes\cite{Dijkstra65}. 25 In the problem threads interact with the buffer in two ways, either consuming values by removing them from the buffer, or producing values and inserting them in the buffer. 26 The buffer needs to be protected from concurrent access since each item in the buffer should only be produced and consumed once. 27 Additionally, a consumer can only remove from a non-empty buffer and a producer can only insert into a non-full buffer. 44 28 45 29 \section{First-Come First-Served} 46 As pointed out, a bounded buffer requires MX among multiple producers or consumers. 47 This MX should be fair among threads, independent of the FIFO buffer being fair among values. 48 Fairness among threads is called \gls{fcfs} and was defined by Lamport~\cite[p.~454]{Lamport74}. 30 The channel implementations that will be discussed are \gls{fcfs}. 31 This term was defined by Lamport~\cite{Lamport74}. 49 32 \gls{fcfs} is defined in relation to a doorway~\cite[p.~330]{Lamport86II}, which is the point at which an ordering among threads can be established. 50 Given this doorway, a CS is said to be \gls{fcfs}, if threads access the shared resource in the order they proceed through the doorway. 51 A consequence of \gls{fcfs} execution is the elimination of \Newterm{barging}, where barging means a thread arrives at a CS with waiting threads, and the MX protecting the CS allows the arriving thread to enter the CS ahead of one or more of the waiting threads. 52 53 \gls{fcfs} is a fairness property that prevents unequal access to the shared resource and prevents starvation, however it comes at a cost. 54 Implementing an algorithm with \gls{fcfs} can lead to double blocking, where arriving threads block outside the doorway waiting for a thread in the lock entry-protocol and inside the doorway waiting for a thread in the CS. 55 An analogue is boarding an airplane: first you wait to get through security to the departure gates (short term), and then wait again at the departure gate for the airplane (long term). 56 As such, algorithms that are not \gls{fcfs} (barging) can be more performant by skipping the wait for the CS and entering directly; 57 however, this performance gain comes by introducing unfairness with possible starvation for waiting threads. 33 Given this doorway, a critical section is said to be \gls{fcfs}, if threads access the shared resource in the order they proceed through the doorway. 34 \gls{fcfs} is a fairness property which prevents unequal access to the shared resource and prevents starvation, however it can come at a cost. 35 Implementing an algorithm with \gls{fcfs} can lead to double blocking, where entering threads may need to block to allow other threads to proceed first, resulting in blocking both inside and outside the doorway. 36 As such algorithms that are not \gls{fcfs} may be more performant but that performance comes with the downside of likely introducing starvation and unfairness. 58 37 59 38 \section{Channel Implementation} 60 Currently, only the Go programming language~\cite{Go} provides user-level threading where the primary communication mechanism is channels.61 Experiment s wereconducted that varied the producer-consumer problem algorithm and lock type used inside the channel.39 The channel implementation in \CFA is a near carbon copy of the Go implementation. 40 Experimentation was conducted that varied the producer-consumer problem algorithm and lock type used inside the channel. 62 41 With the exception of non-\gls{fcfs} algorithms, no algorithm or lock usage in the channel implementation was found to be consistently more performant that Go's choice of algorithm and lock implementation. 63 Therefore, the low-level channel implementation in \CFA is largely copied from the Go implementation, but adapted to the \CFA type and runtime systems.64 42 As such the research contributions added by \CFA's channel implementation lie in the realm of safety and productivity features. 65 66 \PAB{Discuss the Go channel implementation. Need to tie in FIFO buffer and FCFS locking.}67 68 In this work, all channels are implemented with bounded buffers, so there is no zero-sized buffering.69 \CAP{I do have zero size channels implemented, however I don't focus on them since I think they are uninteresting as they are just a thin layer over binary semaphores. Should I mention that I support it but omit discussion or just leave it out?}70 43 71 44 \section{Safety and Productivity} … … 74 47 75 48 \begin{itemize} 76 \item Toggle-able statistic collection on channel behaviour that count channel and blocking operations.77 Tracking blocking operations helps illustrate usage and then tune the channel size, where the aim is to reduce blocking.49 \item Toggle-able statistic collection on channel behaviour that counts channel operations, and the number of the operations that block. 50 Tracking blocking operations helps users tune their channel size or channel usage when the channel is used for buffering, where the aim is to have as few blocking operations as possible. 78 51 \item Deadlock detection on deallocation of the channel. 79 If threads are blocked inside the channel when it terminates, this case is detected and the user is informed, as this cancause a deadlock.80 \item A @flush@routine that delivers copies of an element to all waiting consumers, flushing the buffer.52 If any threads are blocked inside the channel when it terminates it is detected and informs the user, as this would cause a deadlock. 53 \item A \code{flush} routine that delivers copies of an element to all waiting consumers, flushing the buffer. 81 54 Programmers can use this to easily to broadcast data to multiple consumers. 82 Additionally, the @flush@ routine is more performant then looping around the @insert@operation since it can deliver the elements without having to reacquire mutual exclusion for each element sent.55 Additionally, the \code{flush} routine is more performant then looping around the \code{insert} operation since it can deliver the elements without having to reacquire mutual exclusion for each element sent. 83 56 \end{itemize} 84 57 … … 94 67 % C_TODO: add reference to select chapter, add citation to go channels info 95 68 Go channels provide a set of tools to help with concurrent shutdown. 96 Channels in Go have a @close@ operation and a \Go{select} statement that both can be used to help threads terminate.97 The \ Go{select} statement will be discussed in \ref{}, where \CFA's @waituntil@ statement will be compared with the Go \Go{select} statement.98 The @close@operation on a channel in Go changes the state of the channel.99 When a channel is closed, sends to the channel will panic and additional calls to @close@will panic.69 Channels in Go have a \code{close} operation and a \code{select} statement that both can be used to help threads terminate. 70 The \code{select} statement will be discussed in \ref{}, where \CFA's \code{waituntil} statement will be compared with the Go \code{select} statement. 71 The \code{close} operation on a channel in Go changes the state of the channel. 72 When a channel is closed, sends to the channel will panic and additional calls to \code{close} will panic. 100 73 Receives are handled differently where receivers will never block on a closed channel and will continue to remove elements from the channel. 101 74 Once a channel is empty, receivers can continue to remove elements, but will receive the zero-value version of the element type. 102 75 To aid in avoiding unwanted zero-value elements, Go provides the ability to iterate over a closed channel to remove the remaining elements. 103 These design choices for Go channels enforce a specific interaction style with channels during termination, where careful thought is needed to ensure that additional @close@calls don't occur and that no sends occur after channels are closed.76 These design choices for Go channels enforce a specific interaction style with channels during termination, where careful thought is needed to ensure that additional \code{close} calls don't occur and that no sends occur after channels are closed. 104 77 These design choices fit Go's paradigm of error management, where users are expected to explicitly check for errors, rather than letting errors occur and catching them. 105 78 If errors need to occur in Go, return codes are used to pass error information where they are needed. … … 108 81 While Go's channel closing semantics are powerful enough to perform any concurrent termination needed by a program, their lack of ease of use leaves much to be desired. 109 82 Since both closing and sending panic, once a channel is closed, a user often has to synchronize the senders to a channel before the channel can be closed to avoid panics. 110 However, in doing so it renders the @close@operation nearly useless, as the only utilities it provides are the ability to ensure that receivers no longer block on the channel, and will receive zero-valued elements.111 This can be useful if the zero-typed element is recognized as a sentinel value, but if another sentinel value is preferred, then @close@only provides its non-blocking feature.112 To avoid \gls{toctou} issues during shutdown, a busy wait with a \ Go{select} statement is often used to add or remove elements from a channel.83 However, in doing so it renders the \code{close} operation nearly useless, as the only utilities it provides are the ability to ensure that receivers no longer block on the channel, and will receive zero-valued elements. 84 This can be useful if the zero-typed element is recognized as a sentinel value, but if another sentinel value is preferred, then \code{close} only provides its non-blocking feature. 85 To avoid \gls{toctou} issues during shutdown, a busy wait with a \code{select} statement is often used to add or remove elements from a channel. 113 86 Due to Go's asymmetric approach to channel shutdown, separate synchronization between producers and consumers of a channel has to occur during shutdown. 114 87 … … 118 91 The difference between the exception handling mechanisms arises after the exception is handled. 119 92 In termination handling, the control flow continues into the code following the catch after the exception is handled. 120 In resumption handling, the control flow returns to the site of the @throw@, allowing the control to continue where it left off.93 In resumption handling, the control flow returns to the site of the \code{throw}, allowing the control to continue where it left off. 121 94 Note that in resumption, since control can return to the point of error propagation, the stack is not unwound during resumption propagation. 122 95 In \CFA if a resumption is not handled, it is reraised as a termination. … … 129 102 These termination exceptions allow for non-local transfer that can be used to great effect to eagerly and gracefully shut down a thread. 130 103 When a channel is closed, if there are any blocked producers or consumers inside the channel, they are woken up and also have a resumption thrown at them. 131 The resumption exception, @channel_closed@, has a couple fields to aid in handling the exception.104 The resumption exception, \code{channel_closed}, has a couple fields to aid in handling the exception. 132 105 The exception contains a pointer to the channel it was thrown from, and a pointer to an element. 133 106 In exceptions thrown from remove the element pointer will be null. … … 143 116 Both of these examples are implemented using \CFA syntax so that they can be easily compared. 144 117 Listing~\ref{l:go_chan_bar} uses go-style channel close semantics and Listing~\ref{l:cfa_chan_bar} uses \CFA close semantics. 145 In this problem it is infeasible to use the Go @close@call since all tasks are both potentially producers and consumers, causing panics on close to be unavoidable.118 In this problem it is infeasible to use the Go \code{close} call since all tasks are both potentially producers and consumers, causing panics on close to be unavoidable. 146 119 As such in Listing~\ref{l:go_chan_bar} to implement a flush routine for the buffer, a sentinel value of $-1$ has to be used to indicate to threads that they need to leave the barrier. 147 120 This sentinel value has to be checked at two points. 148 Furthermore, an additional flag @done@is needed to communicate to threads once they have left the barrier that they are done.121 Furthermore, an additional flag \code{done} is needed to communicate to threads once they have left the barrier that they are done. 149 122 This use of an additional flag or communication method is common in Go channel shutdown code, since to avoid panics on a channel, the shutdown of a channel often has to be communicated with threads before it occurs. 150 123 In the \CFA version~\ref{l:cfa_chan_bar}, the barrier shutdown results in an exception being thrown at threads operating on it, which informs the threads that they must terminate. … … 274 247 275 248 In Listing~\ref{l:cfa_resume} an example of channel closing with resumption is used. 276 This program uses resumption in the @Consumer@thread main to ensure that all elements in the channel are removed before the consumer thread terminates.277 The producer only has a @catch@so the moment it receives an exception it terminates, whereas the consumer will continue to remove from the closed channel via handling resumptions until the buffer is empty, which then throws a termination exception.249 This program uses resumption in the \code{Consumer} thread main to ensure that all elements in the channel are removed before the consumer thread terminates. 250 The producer only has a \code{catch} so the moment it receives an exception it terminates, whereas the consumer will continue to remove from the closed channel via handling resumptions until the buffer is empty, which then throws a termination exception. 278 251 If the same program was implemented in Go it would require explicit synchronization with both producers and consumers by some mechanism outside the channel to ensure that all elements were removed before task termination. 279 252 -
doc/theses/colby_parsons_MMAth/text/frontpgs.tex
r3982384 r6e4c44d 80 80 Concurrent programs are notoriously hard to program and even harder to debug. Furthermore concurrent programs must be performant, as the introduction of concurrency into a program is often done to achieve some form of speedup. 81 81 82 This thesis presents a suite of high-level concurrent-language features in the new programming-language \CFA, all of which are implemented with the aim of improving the performance, productivity, and safety of concurrent programs. 83 \CFA is a non-object-oriented programming language that extends C. 84 The foundation for concurrency in \CFA was laid by Thierry Delisle~\cite{Delisle18}, who implemented coroutines, user-level threads, and monitors. 85 This thesis builds upon that work and introduces a suite of new concurrent features as its main contribution. 86 The features include a @mutex@ statement (similar to a \CC scoped lock or Java \lstinline[language=Java]{synchronized} statement), Go-like channels and \lstinline[language=Go]{select} statement, and an actor system. 87 The root ideas behind these features are not new, but the \CFA implementations extends the original ideas in performance, productivity, and safety. 82 This thesis presents a suite of high-level concurrent-language features in the new programming language \CFA, all of which are implemented with the aim of improving the performance, productivity, and safety of concurrent programs. \CFA is a non object-oriented programming language that extends C. The foundation for concurrency in \CFA was laid by Thierry Delisle~\cite{Delisle18}, who implemented coroutines, user-level threads, and monitors. This thesis builds upon that work and introduces a suite of new concurrent features as its main contribution. The features include Go-like channels, mutex statements (similar to \CC scoped locks or Java synchronized statement), an actor system, and a Go-like select statement. The root ideas behind these features are not new, but the \CFA implementations extends the original ideas in performance, productivity, and safety. 88 83 89 84 \cleardoublepage -
doc/theses/colby_parsons_MMAth/text/intro.tex
r3982384 r6e4c44d 8 8 To seize the reins and write performant and safe concurrent code, high-level concurrent-language features are needed. 9 9 Like any other craftsmen, programmers are only as good as their tools, and concurrent tooling and features are no exception. 10 11 This thesis presents a suite of high-level concurrent-language features implemented in the new programming-language \CFA. 10 This thesis presents a set of concurrent features implemented in the new programming-language \CFA. 12 11 These features aim to improve the performance of concurrent programs, aid in writing safe programs, and assist user productivity by improving the ease of concurrent programming. 13 12 The groundwork for concurrent features in \CFA was implemented by Thierry Delisle~\cite{Delisle18}, who contributed the threading system, coroutines, monitors and other tools. 14 13 This thesis builds on top of that foundation by providing a suite of high-level concurrent features. 15 The features include a @mutex@ statement, channels and a @waituntil@ statement, and an actor system.14 These features include mutex statements, channels, an actor system and a waituntil statement. 16 15 All of these features exist in other programming in some shape or form, however this thesis extends the original ideas by improving performance, productivity, and safety. -
doc/theses/colby_parsons_MMAth/text/mutex_stmt.tex
r3982384 r6e4c44d 5 5 % ====================================================================== 6 6 7 The mutual exclusion problem was introduced by Dijkstra in 1965~\cite{Dijkstra65,Dijkstra65a} :8 there are several concurrent processes or threads that communicate by shared variables and from time to time need exclusive access to shared resources.7 The mutual exclusion problem was introduced by Dijkstra in 1965~\cite{Dijkstra65,Dijkstra65a}. 8 There are several concurrent processes or threads that communicate by shared variables and from time to time need exclusive access to shared resources. 9 9 A shared resource and code manipulating it form a pairing called a \Newterm{critical section (CS)}, which is a many-to-one relationship; 10 10 \eg if multiple files are being written to by multiple threads, only the pairings of simultaneous writes to the same files are CSs. … … 26 26 27 27 \section{Monitor} 28 \CFA provides a high-level locking object, called a \Newterm{monitor}, an elegant and efficient abstraction for providing mutual exclusion and synchronization for shared-memory systems. 29 First proposed by Brinch Hansen~\cite{Hansen73} and later described and extended by C.A.R.~Hoare~\cite{Hoare74}. 30 Several concurrent programming languages provide monitors as an explicit language construct: \eg Concurrent Pascal~\cite{ConcurrentPascal}, Mesa~\cite{Mesa}, Turing~\cite{Turing:old}, Modula-3~\cite{Modula-3}, \uC~\cite{Buhr92a} and Java~\cite{Java}. 28 \CFA provides a high-level locking object, called a \Newterm{monitor}, an elegant, efficient, high-level mechanisms for mutual exclusion and synchronization for shared-memory systems. 29 First proposed by Brinch Hansen~\cite{Hansen73} and later described and extended by C.A.R.~Hoare~\cite{Hoare74}, several concurrent programming languages provide monitors as an explicit language construct: \eg Concurrent Pascal~\cite{ConcurrentPascal}, Mesa~\cite{Mesa}, Turing~\cite{Turing:old}, Modula-3~\cite{Modula-3}, \uC~\cite{Buhr92a} and Java~\cite{Java}. 31 30 In addition, operating-system kernels and device drivers have a monitor-like structure, although they often use lower-level primitives such as mutex locks or semaphores to manually implement a monitor. 32 31 33 32 Figure~\ref{f:AtomicCounter} shows a \CFA and Java monitor implementing an atomic counter. 34 33 A \Newterm{monitor} is a programming technique that implicitly binds mutual exclusion to static function scope by call and return. 35 In contrast, lock mutual exclusion, defined by acquire/release calls, is independent of lexical context (analogous to block versus heap storage allocation).34 Lock mutual exclusion, defined by acquire/release calls, is independent of lexical context (analogous to block versus heap storage allocation). 36 35 Restricting acquire and release points in a monitor eases programming, comprehension, and maintenance, at a slight cost in flexibility and efficiency. 37 36 Ultimately, a monitor is implemented using a combination of basic locks and atomic instructions. … … 111 110 To increase locking flexibility, some languages introduce a mutex statement. 112 111 \VRef[Figure]{f:ReadersWriter} shows the outline of a reader/writer lock written as a \CFA monitor and mutex statements. 113 (The exact lock implement ationis irrelevant.)112 (The exact lock implement is irrelevant.) 114 113 The @read@ and @write@ functions are called with a reader/write lock and any arguments to perform reading or writing. 115 114 The @read@ function is not MX because multiple readers can read simultaneously. … … 272 271 The @scoped_lock@ uses a deadlock avoidance algorithm where all locks after the first are acquired using @try_lock@ and if any of the lock attempts fail, all acquired locks are released. 273 272 This repeats after selecting a new starting point in a cyclic manner until all locks are acquired successfully. 274 This deadlock avoidance algorithm is shown in Figure~\ref{f:cc_deadlock_avoid}.273 This deadlock avoidance algorithm is shown in Listing~\ref{l:cc_deadlock_avoid}. 275 274 The algorithm is taken directly from the source code of the @<mutex>@ header, with some renaming and comments for clarity. 276 275 277 \begin{figure} 278 \begin{cfa} 276 \begin{cfa}[caption={\CC \lstinline{scoped_lock} deadlock avoidance algorithm},label={l:cc_deadlock_avoid}] 279 277 int first = 0; // first lock to attempt to lock 280 278 do { … … 293 291 } while ( ! locks[first].owns_lock() ); $\C{// is first lock held?}$ 294 292 \end{cfa} 295 \caption{\CC \lstinline{scoped_lock} deadlock avoidance algorithm} 296 \label{f:cc_deadlock_avoid} 297 \end{figure} 298 299 While this algorithm successfully avoids deadlock, there is a livelock scenario. 293 294 While the algorithm in \ref{l:cc_deadlock_avoid} successfully avoids deadlock, there is a livelock scenario. 300 295 Assume two threads, $A$ and $B$, create a @scoped_lock@ accessing two locks, $L1$ and $L2$. 301 296 A livelock can form as follows. … … 340 335 \end{cquote} 341 336 Comparatively, if the @scoped_lock@ is used and the same locks are acquired elsewhere, there is no concern of the @scoped_lock@ deadlocking, due to its avoidance scheme, but it may livelock. 342 The convenience and safety of the @mutex@ statement, \eg guaranteed lock release with exceptions, should encourage programmers to always use it for locking, mitigating any deadlock scenario versus combining manual locking with the mutex statement.337 The convenience and safety of the @mutex@ statement, \eg guaranteed lock release with exceptions, should encourage programmers to always use it for locking, mitigating any deadlock scenario. 343 338 344 339 \section{Performance} … … 350 345 351 346 The benchmark used to evaluate the avoidance algorithms repeatedly acquires a fixed number of locks in a random order and then releases them. 352 The pseudo code for the deadlock avoidance benchmark is shown in \VRef[Listing]{l:deadlock_avoid_pseudo}.347 The pseudo code for the deadlock avoidance benchmark is shown in \VRef[Listing]{l:deadlock_avoid_pseudo}. 353 348 To ensure the comparison exercises the implementation of each lock avoidance algorithm, an identical spinlock is implemented in each language using a set of builtin atomics available in both \CC and \CFA. 354 349 The benchmarks are run for a fixed duration of 10 seconds and then terminate. … … 357 352 The median is calculated and is plotted alongside the 95\% confidence intervals for each point. 358 353 359 \begin{cfa}[caption={Deadlock avoidance benchmark pseudocode},label={l:deadlock_avoid_pseudo}] 360 361 size_t n_locks; $\C{// number of locks}$ 362 size_t n_thds; $\C{// number of threads}$ 363 size_t n_gens; $\C{// number of random orderings (default 100)}$ 364 size_t total = 0; $\C{// global throughput aggregator}$ 365 volatile bool done = false; $\C{// termination flag}$ 366 367 test_spinlock locks[n_locks]; 368 size_t rands[n_thds][n_locks * n_gens]; $\C{// random ordering per thread}$ 369 370 void main( worker & w ) with(w) { $\C{// thread main}$ 371 size_t count = 0, idx = 0; 372 while ( !done ) { 373 idx = (count % n_locks * n_gens) * n_locks; $\C{// get start of next sequence}$ 374 mutex(locks[rands[0]], ..., locks[rands[n_locks - 1]]){} $\C{// lock sequence of locks}$ 375 count++; 376 } 377 __atomic_add_fetch(&total, count, __ATOMIC_SEQ_CST); $\C{// atomically add to total}$ 378 } 379 380 int main( int argc, char * argv[] ) { 381 gen_orders(); $\C{// generate random orderings}$ 382 { 383 worker w[n_thds]; 384 sleep( 10`s ); 385 done = true; 386 } 387 printf( "%lu\n", total ); 388 } 354 \begin{cfa}[caption={Deadlock avoidance bendchmark pseudo code},label={l:deadlock_avoid_pseudo}] 355 356 357 358 $\PAB{// add pseudo code}$ 359 360 389 361 390 362 \end{cfa} … … 402 374 403 375 Figure~\ref{f:mutex_bench} shows the results of the benchmark experiments. 376 \PAB{Make the points in the graphs for each line different. 377 Also, make the text in the graphs larger.} 404 378 The baseline results for both languages are mostly comparable, except for the 8 locks results in \ref{f:mutex_bench8_AMD} and \ref{f:mutex_bench8_Intel}, where the \CFA baseline is slightly slower. 405 379 The avoidance result for both languages is significantly different, where \CFA's mutex statement achieves throughput that is magnitudes higher than \CC's @scoped_lock@. … … 409 383 For example, on the AMD machine with 32 threads and 8 locks, the benchmarks would occasionally livelock indefinitely, with no threads making any progress for 3 hours before the experiment was terminated manually. 410 384 It is likely that shorter bouts of livelock occurred in many of the experiments, which would explain large confidence intervals for some of the data points in the \CC data. 411 In Figures~\ref{f:mutex_bench8_AMD} and \ref{f:mutex_bench8_Intel} the re is the counter-intuitive result of the mutex statement performingbetter than the baseline.412 At 7 locks and above the mutex statement switches from a hard coded sort to insertion sort , which should decrease performance.413 It is likely th e increase in throughput compared to baseline is due to the delayspent in the insertion sort, which decreases contention on the locks.385 In Figures~\ref{f:mutex_bench8_AMD} and \ref{f:mutex_bench8_Intel} the mutex statement performs better than the baseline. 386 At 7 locks and above the mutex statement switches from a hard coded sort to insertion sort. 387 It is likely that the improvement in throughput compared to baseline is due to the time spent in the insertion sort, which decreases contention on the locks. 414 388 415 389 \begin{figure} -
libcfa/src/Makefile.am
r3982384 r6e4c44d 115 115 concurrency/kernel/fwd.hfa \ 116 116 concurrency/mutex_stmt.hfa \ 117 concurrency/select.hfa \ 117 118 concurrency/channel.hfa \ 118 119 concurrency/actor.hfa … … 127 128 concurrency/monitor.hfa \ 128 129 concurrency/mutex.hfa \ 129 concurrency/select.hfa \130 130 concurrency/thread.hfa 131 131 -
libcfa/src/bits/weakso_locks.cfa
r3982384 r6e4c44d 15 15 // Update Count : 16 16 // 17 17 18 #include "bits/weakso_locks.hfa" 19 18 20 #pragma GCC visibility push(default) 19 21 … … 25 27 void unlock( blocking_lock & ) {} 26 28 void on_notify( blocking_lock &, struct thread$ * ) {} 27 size_t on_wait( blocking_lock & , void (*pp_fn)( void * ), void * pp_datum) { return 0; }29 size_t on_wait( blocking_lock & ) { return 0; } 28 30 void on_wakeup( blocking_lock &, size_t ) {} 29 31 size_t wait_count( blocking_lock & ) { return 0; } 30 bool register_select( blocking_lock & this, select_node & node ) { return false; }31 bool unregister_select( blocking_lock & this, select_node & node ) { return false; }32 bool on_selected( blocking_lock & this, select_node & node ) { return true; }33 -
libcfa/src/bits/weakso_locks.hfa
r3982384 r6e4c44d 23 23 #include "containers/list.hfa" 24 24 25 struct select_node;25 struct thread$; 26 26 27 27 //----------------------------------------------------------------------------- … … 32 32 33 33 // List of blocked threads 34 dlist( select_node) blocked_threads;34 dlist( thread$ ) blocked_threads; 35 35 36 36 // Count of current blocked threads … … 57 57 void unlock( blocking_lock & this ) OPTIONAL_THREAD; 58 58 void on_notify( blocking_lock & this, struct thread$ * t ) OPTIONAL_THREAD; 59 size_t on_wait( blocking_lock & this , void (*pp_fn)( void * ), void * pp_datum) OPTIONAL_THREAD;59 size_t on_wait( blocking_lock & this ) OPTIONAL_THREAD; 60 60 void on_wakeup( blocking_lock & this, size_t ) OPTIONAL_THREAD; 61 61 size_t wait_count( blocking_lock & this ) OPTIONAL_THREAD; 62 bool register_select( blocking_lock & this, select_node & node ) OPTIONAL_THREAD;63 bool unregister_select( blocking_lock & this, select_node & node ) OPTIONAL_THREAD;64 bool on_selected( blocking_lock & this, select_node & node ) OPTIONAL_THREAD;65 62 66 63 //---------- … … 75 72 static inline bool try_lock ( multiple_acquisition_lock & this ) { return try_lock( (blocking_lock &)this ); } 76 73 static inline void unlock ( multiple_acquisition_lock & this ) { unlock ( (blocking_lock &)this ); } 77 static inline size_t on_wait ( multiple_acquisition_lock & this , void (*pp_fn)( void * ), void * pp_datum ) { return on_wait ( (blocking_lock &)this, pp_fn, pp_datum); }74 static inline size_t on_wait ( multiple_acquisition_lock & this ) { return on_wait ( (blocking_lock &)this ); } 78 75 static inline void on_wakeup( multiple_acquisition_lock & this, size_t v ) { on_wakeup ( (blocking_lock &)this, v ); } 79 76 static inline void on_notify( multiple_acquisition_lock & this, struct thread$ * t ){ on_notify( (blocking_lock &)this, t ); } 80 static inline bool register_select( multiple_acquisition_lock & this, select_node & node ) { return register_select( (blocking_lock &)this, node ); }81 static inline bool unregister_select( multiple_acquisition_lock & this, select_node & node ) { return unregister_select( (blocking_lock &)this, node ); }82 static inline bool on_selected( multiple_acquisition_lock & this, select_node & node ) { return on_selected( (blocking_lock &)this, node ); } -
libcfa/src/concurrency/channel.hfa
r3982384 r6e4c44d 1 //2 // Cforall Version 1.0.0 Copyright (C) 2021 University of Waterloo3 //4 // The contents of this file are covered under the licence agreement in the5 // file "LICENCE" distributed with Cforall.6 //7 // channel.hfa -- LIBCFATHREAD8 // Runtime locks that used with the runtime thread system.9 //10 // Author : Colby Alexander Parsons11 // Created On : Thu Jan 21 19:46:50 202212 // Last Modified By :13 // Last Modified On :14 // Update Count :15 //16 17 1 #pragma once 18 2 19 3 #include <locks.hfa> 20 4 #include <list.hfa> 21 #include "select.hfa" 5 #include <mutex_stmt.hfa> 6 7 // link field used for threads waiting on channel 8 struct wait_link { 9 // used to put wait_link on a dl queue 10 inline dlink(wait_link); 11 12 // waiting thread 13 struct thread$ * t; 14 15 // shadow field 16 void * elem; 17 }; 18 P9_EMBEDDED( wait_link, dlink(wait_link) ) 19 20 static inline void ?{}( wait_link & this, thread$ * t, void * elem ) { 21 this.t = t; 22 this.elem = elem; 23 } 24 25 // wake one thread from the list 26 static inline void wake_one( dlist( wait_link ) & queue ) { 27 wait_link & popped = try_pop_front( queue ); 28 unpark( popped.t ); 29 } 22 30 23 31 // returns true if woken due to shutdown 24 32 // blocks thread on list and releases passed lock 25 static inline bool block( dlist( select_node) & queue, void * elem_ptr, go_mutex & lock ) {26 select_node sn{ active_thread(), elem_ptr };27 insert_last( queue, sn);33 static inline bool block( dlist( wait_link ) & queue, void * elem_ptr, go_mutex & lock ) { 34 wait_link w{ active_thread(), elem_ptr }; 35 insert_last( queue, w ); 28 36 unlock( lock ); 29 37 park(); 30 return sn.extra == 0p; 31 } 32 33 // Waituntil support (un)register_select helper routine 34 // Sets select node avail if not special OR case and then unlocks 35 static inline void __set_avail_then_unlock( select_node & node, go_mutex & mutex_lock ) { 36 if ( node.park_counter ) __make_select_node_available( node ); 37 unlock( mutex_lock ); 38 return w.elem == 0p; 38 39 } 39 40 … … 58 59 size_t size, front, back, count; 59 60 T * buffer; 60 dlist( select_node) prods, cons; // lists of blocked threads61 go_mutex mutex_lock; // MX lock62 bool closed; // indicates channel close/open61 dlist( wait_link ) prods, cons; // lists of blocked threads 62 go_mutex mutex_lock; // MX lock 63 bool closed; // indicates channel close/open 63 64 #ifdef CHAN_STATS 64 65 size_t blocks, operations; // counts total ops and ops resulting in a blocked thd … … 69 70 size = _size; 70 71 front = back = count = 0; 71 if ( size != 0 )buffer = aalloc( size );72 buffer = aalloc( size ); 72 73 prods{}; 73 74 cons{}; … … 86 87 #endif 87 88 verifyf( cons`isEmpty && prods`isEmpty, "Attempted to delete channel with waiting threads (Deadlock).\n" ); 88 if ( size != 0 )delete( buffer );89 } 90 static inline size_t get_count( channel(T) & chan ) with(chan) { return __atomic_load_n( &count, __ATOMIC_RELAXED ); }91 static inline size_t get_size( channel(T) & chan ) with(chan) { return __atomic_load_n( &size, __ATOMIC_RELAXED ); }89 delete( buffer ); 90 } 91 static inline size_t get_count( channel(T) & chan ) with(chan) { return count; } 92 static inline size_t get_size( channel(T) & chan ) with(chan) { return size; } 92 93 static inline bool has_waiters( channel(T) & chan ) with(chan) { return !cons`isEmpty || !prods`isEmpty; } 93 94 static inline bool has_waiting_consumers( channel(T) & chan ) with(chan) { return !cons`isEmpty; } … … 101 102 // flush waiting consumers and producers 102 103 while ( has_waiting_consumers( chan ) ) { 103 if( !__handle_waituntil_OR( cons ) ) // ensure we only signal special OR case threads when they win the race 104 break; // if __handle_waituntil_OR returns false cons is empty so break 105 cons`first.extra = 0p; 104 cons`first.elem = 0p; 106 105 wake_one( cons ); 107 106 } 108 107 while ( has_waiting_producers( chan ) ) { 109 if( !__handle_waituntil_OR( prods ) ) // ensure we only signal special OR case threads when they win the race 110 break; // if __handle_waituntil_OR returns false prods is empty so break 111 prods`first.extra = 0p; 108 prods`first.elem = 0p; 112 109 wake_one( prods ); 113 110 } … … 117 114 static inline void is_closed( channel(T) & chan ) with(chan) { return closed; } 118 115 119 // used to hand an element to a blocked consumer and signal it120 static inline void __cons_handoff( channel(T) & chan, T & elem ) with(chan) {121 memcpy( cons`first.extra, (void *)&elem, sizeof(T) ); // do waiting consumer work122 wake_one( cons );123 }124 125 // used to hand an element to a blocked producer and signal it126 static inline void __prods_handoff( channel(T) & chan, T & retval ) with(chan) {127 memcpy( (void *)&retval, prods`first.extra, sizeof(T) );128 wake_one( prods );129 }130 131 116 static inline void flush( channel(T) & chan, T elem ) with(chan) { 132 117 lock( mutex_lock ); 133 118 while ( count == 0 && !cons`isEmpty ) { 134 __cons_handoff( chan, elem ); 119 memcpy(cons`first.elem, (void *)&elem, sizeof(T)); // do waiting consumer work 120 wake_one( cons ); 135 121 } 136 122 unlock( mutex_lock ); … … 139 125 // handles buffer insert 140 126 static inline void __buf_insert( channel(T) & chan, T & elem ) with(chan) { 141 memcpy( (void *)&buffer[back], (void *)&elem, sizeof(T));127 memcpy((void *)&buffer[back], (void *)&elem, sizeof(T)); 142 128 count += 1; 143 129 back++; … … 145 131 } 146 132 133 // does the buffer insert or hands elem directly to consumer if one is waiting 134 static inline void __do_insert( channel(T) & chan, T & elem ) with(chan) { 135 if ( count == 0 && !cons`isEmpty ) { 136 memcpy(cons`first.elem, (void *)&elem, sizeof(T)); // do waiting consumer work 137 wake_one( cons ); 138 } else __buf_insert( chan, elem ); 139 } 140 147 141 // needed to avoid an extra copy in closed case 148 142 static inline bool __internal_try_insert( channel(T) & chan, T & elem ) with(chan) { … … 151 145 operations++; 152 146 #endif 153 154 ConsEmpty: if ( !cons`isEmpty ) {155 if ( !__handle_waituntil_OR( cons ) ) break ConsEmpty;156 __cons_handoff( chan, elem );157 unlock( mutex_lock );158 return true;159 }160 161 147 if ( count == size ) { unlock( mutex_lock ); return false; } 162 163 __buf_insert( chan, elem ); 148 __do_insert( chan, elem ); 164 149 unlock( mutex_lock ); 165 150 return true; … … 172 157 // handles closed case of insert routine 173 158 static inline void __closed_insert( channel(T) & chan, T & elem ) with(chan) { 174 channel_closed except{ &channel_closed_vt, &elem, &chan };159 channel_closed except{&channel_closed_vt, &elem, &chan }; 175 160 throwResume except; // throw closed resumption 176 161 if ( !__internal_try_insert( chan, elem ) ) throw except; // if try to insert fails (would block), throw termination … … 197 182 } 198 183 199 // buffer count must be zero if cons are blocked (also handles zero-size case)200 ConsEmpty: if (!cons`isEmpty ) {201 if ( !__handle_waituntil_OR( cons ) ) break ConsEmpty;202 __cons_handoff( chan, elem);184 // have to check for the zero size channel case 185 if ( size == 0 && !cons`isEmpty ) { 186 memcpy(cons`first.elem, (void *)&elem, sizeof(T)); 187 wake_one( cons ); 203 188 unlock( mutex_lock ); 204 return ;189 return true; 205 190 } 206 191 … … 217 202 } // if 218 203 219 __buf_insert( chan, elem ); 220 unlock( mutex_lock ); 204 if ( count == 0 && !cons`isEmpty ) { 205 memcpy(cons`first.elem, (void *)&elem, sizeof(T)); // do waiting consumer work 206 wake_one( cons ); 207 } else __buf_insert( chan, elem ); 208 209 unlock( mutex_lock ); 210 return; 211 } 212 213 // handles buffer remove 214 static inline void __buf_remove( channel(T) & chan, T & retval ) with(chan) { 215 memcpy((void *)&retval, (void *)&buffer[front], sizeof(T)); 216 count -= 1; 217 front = (front + 1) % size; 221 218 } 222 219 223 220 // does the buffer remove and potentially does waiting producer work 224 221 static inline void __do_remove( channel(T) & chan, T & retval ) with(chan) { 225 memcpy( (void *)&retval, (void *)&buffer[front], sizeof(T) ); 226 count -= 1; 227 front = (front + 1) % size; 222 __buf_remove( chan, retval ); 228 223 if (count == size - 1 && !prods`isEmpty ) { 229 if ( !__handle_waituntil_OR( prods ) ) return; 230 __buf_insert( chan, *(T *)prods`first.extra ); // do waiting producer work 224 __buf_insert( chan, *(T *)prods`first.elem ); // do waiting producer work 231 225 wake_one( prods ); 232 226 } … … 239 233 operations++; 240 234 #endif 241 242 ZeroSize: if ( size == 0 && !prods`isEmpty ) {243 if ( !__handle_waituntil_OR( prods ) ) break ZeroSize;244 __prods_handoff( chan, retval );245 unlock( mutex_lock );246 return true;247 }248 249 235 if ( count == 0 ) { unlock( mutex_lock ); return false; } 250 251 236 __do_remove( chan, retval ); 252 237 unlock( mutex_lock ); … … 259 244 static inline [T, bool] try_remove( channel(T) & chan ) { 260 245 T retval; 261 bool success = __internal_try_remove( chan, retval ); 262 return [ retval, success ]; 263 } 264 265 static inline T try_remove( channel(T) & chan ) { 246 return [ retval, __internal_try_remove( chan, retval ) ]; 247 } 248 249 static inline T try_remove( channel(T) & chan, T elem ) { 266 250 T retval; 267 251 __internal_try_remove( chan, retval ); … … 271 255 // handles closed case of insert routine 272 256 static inline void __closed_remove( channel(T) & chan, T & retval ) with(chan) { 273 channel_closed except{ &channel_closed_vt, 0p, &chan };257 channel_closed except{&channel_closed_vt, 0p, &chan }; 274 258 throwResume except; // throw resumption 275 259 if ( !__internal_try_remove( chan, retval ) ) throw except; // if try to remove fails (would block), throw termination … … 295 279 296 280 // have to check for the zero size channel case 297 ZeroSize:if ( size == 0 && !prods`isEmpty ) {298 if ( !__handle_waituntil_OR( prods ) ) break ZeroSize;299 __prods_handoff( chan, retval);281 if ( size == 0 && !prods`isEmpty ) { 282 memcpy((void *)&retval, (void *)prods`first.elem, sizeof(T)); 283 wake_one( prods ); 300 284 unlock( mutex_lock ); 301 285 return retval; … … 303 287 304 288 // wait if buffer is empty, work will be completed by someone else 305 if ( count == 0) {289 if (count == 0) { 306 290 #ifdef CHAN_STATS 307 291 blocks++; … … 315 299 // Remove from buffer 316 300 __do_remove( chan, retval ); 301 317 302 unlock( mutex_lock ); 318 303 return retval; 319 304 } 320 321 ///////////////////////////////////////////////////////////////////////////////////////////322 // The following is support for waituntil (select) statements323 ///////////////////////////////////////////////////////////////////////////////////////////324 static inline bool unregister_chan( channel(T) & chan, select_node & node ) with(chan) {325 // if ( !node`isListed && !node.park_counter ) return false; // handle special OR case C_TODO: try adding this back326 lock( mutex_lock );327 if ( node`isListed ) { // op wasn't performed328 #ifdef CHAN_STATS329 operations--;330 #endif331 remove( node );332 unlock( mutex_lock );333 return false;334 }335 unlock( mutex_lock );336 337 // only return true when not special OR case, not exceptional calse and status is SAT338 return ( node.extra == 0p || !node.park_counter ) ? false : *node.clause_status == __SELECT_SAT;339 }340 341 // type used by select statement to capture a chan read as the selected operation342 struct chan_read {343 T & ret;344 channel(T) & chan;345 };346 347 static inline void ?{}( chan_read(T) & cr, channel(T) & chan, T & ret ) {348 &cr.chan = &chan;349 &cr.ret = &ret;350 }351 static inline chan_read(T) ?<<?( T & ret, channel(T) & chan ) { chan_read(T) cr{ chan, ret }; return cr; }352 353 static inline void __handle_select_closed_read( chan_read(T) & this, select_node & node ) with(this.chan, this) {354 __closed_remove( chan, ret );355 // if we get here then the insert succeeded356 __make_select_node_available( node );357 }358 359 static inline bool register_select( chan_read(T) & this, select_node & node ) with(this.chan, this) {360 lock( mutex_lock );361 node.extra = &ret; // set .extra so that if it == 0p later in on_selected it is due to channel close362 363 #ifdef CHAN_STATS364 if ( !closed ) operations++;365 #endif366 367 if ( !node.park_counter ) {368 // are we special case OR and front of cons is also special case OR369 if ( !unlikely(closed) && !prods`isEmpty && prods`first.clause_status && !prods`first.park_counter ) {370 if ( !__make_select_node_pending( node ) ) {371 unlock( mutex_lock );372 return false;373 }374 375 if ( __handle_waituntil_OR( prods ) ) {376 __prods_handoff( chan, ret );377 __make_select_node_sat( node ); // need to to mark SAT now that we know operation is done or else threads could get stuck in __mark_select_node378 unlock( mutex_lock );379 return true;380 }381 __make_select_node_unsat( node );382 }383 // check if we can complete operation. If so race to establish winner in special OR case384 if ( count != 0 || !prods`isEmpty || unlikely(closed) ) {385 if ( !__make_select_node_available( node ) ) { // we didn't win the race so give up on registering386 unlock( mutex_lock );387 return false;388 }389 }390 }391 392 if ( unlikely(closed) ) {393 unlock( mutex_lock );394 __handle_select_closed_read( this, node );395 return true;396 }397 398 // have to check for the zero size channel case399 ZeroSize: if ( size == 0 && !prods`isEmpty ) {400 if ( !__handle_waituntil_OR( prods ) ) break ZeroSize;401 __prods_handoff( chan, ret );402 __set_avail_then_unlock( node, mutex_lock );403 return true;404 }405 406 // wait if buffer is empty, work will be completed by someone else407 if ( count == 0 ) {408 #ifdef CHAN_STATS409 blocks++;410 #endif411 412 insert_last( cons, node );413 unlock( mutex_lock );414 return false;415 }416 417 // Remove from buffer418 __do_remove( chan, ret );419 __set_avail_then_unlock( node, mutex_lock );420 return true;421 }422 static inline bool unregister_select( chan_read(T) & this, select_node & node ) { return unregister_chan( this.chan, node ); }423 static inline bool on_selected( chan_read(T) & this, select_node & node ) with(this) {424 if ( node.extra == 0p ) // check if woken up due to closed channel425 __closed_remove( chan, ret );426 // This is only reachable if not closed or closed exception was handled427 return true;428 }429 430 // type used by select statement to capture a chan write as the selected operation431 struct chan_write {432 T elem;433 channel(T) & chan;434 };435 436 static inline void ?{}( chan_write(T) & cw, channel(T) & chan, T elem ) {437 &cw.chan = &chan;438 memcpy( (void *)&cw.elem, (void *)&elem, sizeof(T) );439 }440 static inline chan_write(T) ?>>?( T elem, channel(T) & chan ) { chan_write(T) cw{ chan, elem }; return cw; }441 442 static inline void __handle_select_closed_write( chan_write(T) & this, select_node & node ) with(this.chan, this) {443 __closed_insert( chan, elem );444 // if we get here then the insert succeeded445 __make_select_node_available( node );446 }447 448 static inline bool register_select( chan_write(T) & this, select_node & node ) with(this.chan, this) {449 lock( mutex_lock );450 node.extra = &elem; // set .extra so that if it == 0p later in on_selected it is due to channel close451 452 #ifdef CHAN_STATS453 if ( !closed ) operations++;454 #endif455 456 // special OR case handling457 if ( !node.park_counter ) {458 // are we special case OR and front of cons is also special case OR459 if ( !unlikely(closed) && !cons`isEmpty && cons`first.clause_status && !cons`first.park_counter ) {460 if ( !__make_select_node_pending( node ) ) {461 unlock( mutex_lock );462 return false;463 }464 465 if ( __handle_waituntil_OR( cons ) ) {466 __cons_handoff( chan, elem );467 __make_select_node_sat( node ); // need to to mark SAT now that we know operation is done or else threads could get stuck in __mark_select_node468 unlock( mutex_lock );469 return true;470 }471 __make_select_node_unsat( node );472 }473 // check if we can complete operation. If so race to establish winner in special OR case474 if ( count != size || !cons`isEmpty || unlikely(closed) ) {475 if ( !__make_select_node_available( node ) ) { // we didn't win the race so give up on registering476 unlock( mutex_lock );477 return false;478 }479 }480 }481 482 // if closed handle483 if ( unlikely(closed) ) {484 unlock( mutex_lock );485 __handle_select_closed_write( this, node );486 return true;487 }488 489 // handle blocked consumer case via handoff (buffer is implicitly empty)490 ConsEmpty: if ( !cons`isEmpty ) {491 if ( !__handle_waituntil_OR( cons ) ) break ConsEmpty;492 __cons_handoff( chan, elem );493 __set_avail_then_unlock( node, mutex_lock );494 return true;495 }496 497 // insert node in list if buffer is full, work will be completed by someone else498 if ( count == size ) {499 #ifdef CHAN_STATS500 blocks++;501 #endif502 503 insert_last( prods, node );504 unlock( mutex_lock );505 return false;506 } // if507 508 // otherwise carry out write either via normal insert509 __buf_insert( chan, elem );510 __set_avail_then_unlock( node, mutex_lock );511 return true;512 }513 static inline bool unregister_select( chan_write(T) & this, select_node & node ) { return unregister_chan( this.chan, node ); }514 515 static inline bool on_selected( chan_write(T) & this, select_node & node ) with(this) {516 if ( node.extra == 0p ) // check if woken up due to closed channel517 __closed_insert( chan, elem );518 519 // This is only reachable if not closed or closed exception was handled520 return true;521 }522 523 305 } // forall( T ) 524 525 -
libcfa/src/concurrency/future.hfa
r3982384 r6e4c44d 19 19 #include "monitor.hfa" 20 20 #include "select.hfa" 21 #include "locks.hfa"22 21 23 22 //---------------------------------------------------------------------------- … … 27 26 // future_t is lockfree and uses atomics which aren't needed given we use locks here 28 27 forall( T ) { 29 // enum { FUTURE_EMPTY = 0, FUTURE_FULFILLED = 1 }; // Enums seem to be broken so feel free to add this back afterwards28 // enum(int) { FUTURE_EMPTY = 0, FUTURE_FULFILLED = 1 }; // Enums seem to be broken so feel free to add this back afterwards 30 29 31 30 // temporary enum replacement … … 45 44 }; 46 45 46 // C_TODO: perhaps allow exceptions to be inserted like uC++? 47 47 48 static inline { 48 49 … … 52 53 } 53 54 54 void ?{}( future(T) & this) {55 void ?{}(future(T) & this) { 55 56 this.waiters{}; 56 57 this.state = FUTURE_EMPTY; … … 59 60 60 61 // Reset future back to original state 61 void reset( future(T) & this) with(this)62 void reset(future(T) & this) with(this) 62 63 { 63 64 lock( lock ); … … 81 82 void _internal_flush( future(T) & this ) with(this) { 82 83 while( ! waiters`isEmpty ) { 83 if ( !__handle_waituntil_OR( waiters ) ) // handle special waituntil OR case84 break; // if handle_OR returns false then waiters is empty so break85 84 select_node &s = try_pop_front( waiters ); 86 85 87 if ( s.clause_status == 0p ) // poke in result so that woken threads do not need to reacquire any locks 86 if ( s.race_flag == 0p ) 87 // poke in result so that woken threads do not need to reacquire any locks 88 // *(((future_node(T) &)s).my_result) = result; 88 89 copy_T( result, *(((future_node(T) &)s).my_result) ); 90 else if ( !install_select_winner( s, &this ) ) continue; 89 91 90 wake_one( waiters, s ); 92 // only unpark if future is not selected 93 // or if it is selected we only unpark if we win the race 94 unpark( s.blocked_thread ); 91 95 } 92 96 } 93 97 94 98 // Fulfil the future, returns whether or not someone was unblocked 95 bool fulfil( future(T) & this, T val ) with(this) {99 bool fulfil( future(T) & this, T & val ) with(this) { 96 100 lock( lock ); 97 101 if( state != FUTURE_EMPTY ) … … 149 153 } 150 154 151 bool register_select( future(T) & this, select_node & s ) with(this) { 152 lock( lock ); 153 154 // check if we can complete operation. If so race to establish winner in special OR case 155 if ( !s.park_counter && state != FUTURE_EMPTY ) { 156 if ( !__make_select_node_available( s ) ) { // we didn't win the race so give up on registering 157 unlock( lock ); 158 return false; 159 } 160 } 161 162 // future not ready -> insert select node and return 155 void * register_select( future(T) & this, select_node & s ) with(this) { 156 lock( lock ); 157 158 // future not ready -> insert select node and return 0p 163 159 if( state == FUTURE_EMPTY ) { 164 160 insert_last( waiters, s ); 165 161 unlock( lock ); 166 return false; 167 } 168 169 __make_select_node_available( s ); 170 unlock( lock ); 171 return true; 172 } 173 174 bool unregister_select( future(T) & this, select_node & s ) with(this) { 175 if ( ! s`isListed ) return false; 162 return 0p; 163 } 164 165 // future ready and we won race to install it as the select winner return 1p 166 if ( install_select_winner( s, &this ) ) { 167 unlock( lock ); 168 return 1p; 169 } 170 171 unlock( lock ); 172 // future ready and we lost race to install it as the select winner 173 return 2p; 174 } 175 176 void unregister_select( future(T) & this, select_node & s ) with(this) { 176 177 lock( lock ); 177 178 if ( s`isListed ) remove( s ); 178 179 unlock( lock ); 179 return false;180 180 } 181 181 182 bool on_selected( future(T) & this, select_node & node ) { return true; }183 182 } 184 183 } … … 187 186 // These futures below do not support select statements so they may not be as useful as 'future' 188 187 // however the 'single_future' is cheap and cheerful and is most likely more performant than 'future' 189 // since it uses raw atomics and no locks 188 // since it uses raw atomics and no locks afaik 190 189 // 191 190 // As far as 'multi_future' goes I can't see many use cases as it will be less performant than 'future' -
libcfa/src/concurrency/invoke.h
r3982384 r6e4c44d 217 217 struct __thread_user_link cltr_link; 218 218 219 // used to point to this thd's current clh node 220 volatile bool * clh_node; 221 219 222 struct processor * last_proc; 220 221 // ptr used during handover between blocking lists to allow for stack allocation of intrusive nodes222 // main use case is wait-morphing to allow a different node to be used to block on condvar vs lock223 void * link_node;224 223 225 224 PRNG_STATE_T random_state; // fast random numbers -
libcfa/src/concurrency/locks.cfa
r3982384 r6e4c44d 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // locks. cfa -- LIBCFATHREAD7 // locks.hfa -- LIBCFATHREAD 8 8 // Runtime locks that used with the runtime thread system. 9 9 // … … 79 79 // lock is held by some other thread 80 80 if ( owner != 0p && owner != thrd ) { 81 select_node node; 82 insert_last( blocked_threads, node ); 81 insert_last( blocked_threads, *thrd ); 83 82 wait_count++; 84 83 unlock( lock ); 85 84 park( ); 86 return; 87 } else if ( owner == thrd && multi_acquisition ) { // multi acquisition lock is held by current thread 85 } 86 // multi acquisition lock is held by current thread 87 else if ( owner == thrd && multi_acquisition ) { 88 88 recursion_count++; 89 } else { // lock isn't held 89 unlock( lock ); 90 } 91 // lock isn't held 92 else { 90 93 owner = thrd; 91 94 recursion_count = 1; 92 }93 unlock( lock ); 95 unlock( lock ); 96 } 94 97 } 95 98 … … 114 117 } 115 118 116 static inline void pop_node( blocking_lock & this ) with( this ) { 117 __handle_waituntil_OR( blocked_threads ); 118 select_node * node = &try_pop_front( blocked_threads ); 119 if ( node ) { 120 wait_count--; 121 owner = node->blocked_thread; 122 recursion_count = 1; 123 // if ( !node->clause_status || __make_select_node_available( *node ) ) unpark( node->blocked_thread ); 124 wake_one( blocked_threads, *node ); 125 } else { 126 owner = 0p; 127 recursion_count = 0; 128 } 119 static void pop_and_set_new_owner( blocking_lock & this ) with( this ) { 120 thread$ * t = &try_pop_front( blocked_threads ); 121 owner = t; 122 recursion_count = ( t ? 1 : 0 ); 123 if ( t ) wait_count--; 124 unpark( t ); 129 125 } 130 126 … … 138 134 recursion_count--; 139 135 if ( recursion_count == 0 ) { 140 pop_ node( this );136 pop_and_set_new_owner( this ); 141 137 } 142 138 unlock( lock ); … … 151 147 // lock held 152 148 if ( owner != 0p ) { 153 insert_last( blocked_threads, * (select_node *)t->link_node);149 insert_last( blocked_threads, *t ); 154 150 wait_count++; 151 unlock( lock ); 155 152 } 156 153 // lock not held … … 159 156 recursion_count = 1; 160 157 unpark( t ); 161 }162 unlock( lock ); 163 } 164 165 size_t on_wait( blocking_lock & this , __cfa_pre_park pp_fn, void * pp_datum) with( this ) {158 unlock( lock ); 159 } 160 } 161 162 size_t on_wait( blocking_lock & this ) with( this ) { 166 163 lock( lock __cfaabi_dbg_ctx2 ); 167 164 /* paranoid */ verifyf( owner != 0p, "Attempt to release lock %p that isn't held", &this ); … … 170 167 size_t ret = recursion_count; 171 168 172 pop_node( this ); 173 174 select_node node; 175 active_thread()->link_node = (void *)&node; 169 pop_and_set_new_owner( this ); 176 170 unlock( lock ); 177 178 pre_park_then_park( pp_fn, pp_datum );179 180 171 return ret; 181 172 } … … 184 175 recursion_count = recursion; 185 176 } 186 187 // waituntil() support188 bool register_select( blocking_lock & this, select_node & node ) with(this) {189 lock( lock __cfaabi_dbg_ctx2 );190 thread$ * thrd = active_thread();191 192 // single acquisition lock is held by current thread193 /* paranoid */ verifyf( owner != thrd || multi_acquisition, "Single acquisition lock holder (%p) attempted to reacquire the lock %p resulting in a deadlock.", owner, &this );194 195 if ( !node.park_counter && ( (owner == thrd && multi_acquisition) || owner == 0p ) ) { // OR special case196 if ( !__make_select_node_available( node ) ) { // we didn't win the race so give up on registering197 unlock( lock );198 return false;199 }200 }201 202 // lock is held by some other thread203 if ( owner != 0p && owner != thrd ) {204 insert_last( blocked_threads, node );205 wait_count++;206 unlock( lock );207 return false;208 } else if ( owner == thrd && multi_acquisition ) { // multi acquisition lock is held by current thread209 recursion_count++;210 } else { // lock isn't held211 owner = thrd;212 recursion_count = 1;213 }214 215 if ( node.park_counter ) __make_select_node_available( node );216 unlock( lock );217 return true;218 }219 220 bool unregister_select( blocking_lock & this, select_node & node ) with(this) {221 lock( lock __cfaabi_dbg_ctx2 );222 if ( node`isListed ) {223 remove( node );224 wait_count--;225 unlock( lock );226 return false;227 }228 229 if ( owner == active_thread() ) {230 /* paranoid */ verifyf( recursion_count == 1 || multi_acquisition, "Thread %p attempted to unlock owner lock %p in waituntil unregister, which is not recursive but has a recursive count of %zu", active_thread(), &this, recursion_count );231 // if recursion count is zero release lock and set new owner if one is waiting232 recursion_count--;233 if ( recursion_count == 0 ) {234 pop_node( this );235 }236 }237 unlock( lock );238 return false;239 }240 241 bool on_selected( blocking_lock & this, select_node & node ) { return true; }242 177 243 178 //----------------------------------------------------------------------------- … … 376 311 int counter( condition_variable(L) & this ) with(this) { return count; } 377 312 378 static void enqueue_thread( condition_variable(L) & this, info_thread(L) * i ) with(this) {313 static size_t queue_and_get_recursion( condition_variable(L) & this, info_thread(L) * i ) with(this) { 379 314 // add info_thread to waiting queue 380 315 insert_last( blocked_threads, *i ); 381 316 count++; 382 } 383 384 static size_t block_and_get_recursion( info_thread(L) & i, __cfa_pre_park pp_fn, void * pp_datum ) { 385 size_t recursion_count = 0; 386 if ( i.lock ) // if lock was passed get recursion count to reset to after waking thread 387 recursion_count = on_wait( *i.lock, pp_fn, pp_datum ); // this call blocks 388 else 389 pre_park_then_park( pp_fn, pp_datum ); 390 return recursion_count; 391 } 392 static size_t block_and_get_recursion( info_thread(L) & i ) { return block_and_get_recursion( i, pre_park_noop, 0p ); } 317 size_t recursion_count = 0; 318 if (i->lock) { 319 // if lock was passed get recursion count to reset to after waking thread 320 recursion_count = on_wait( *i->lock ); 321 } 322 return recursion_count; 323 } 393 324 394 325 // helper for wait()'s' with no timeout 395 326 static void queue_info_thread( condition_variable(L) & this, info_thread(L) & i ) with(this) { 396 327 lock( lock __cfaabi_dbg_ctx2 ); 397 enqueue_thread( this, &i);328 size_t recursion_count = queue_and_get_recursion(this, &i); 398 329 unlock( lock ); 399 330 400 331 // blocks here 401 size_t recursion_count = block_and_get_recursion( i);332 park( ); 402 333 403 334 // resets recursion count here after waking 404 if ( i.lock ) on_wakeup( *i.lock, recursion_count);335 if (i.lock) on_wakeup(*i.lock, recursion_count); 405 336 } 406 337 … … 409 340 queue_info_thread( this, i ); 410 341 411 static void cond_alarm_register( void * node_ptr ) { register_self( (alarm_node_t *)node_ptr ); }412 413 342 // helper for wait()'s' with a timeout 414 343 static void queue_info_thread_timeout( condition_variable(L) & this, info_thread(L) & info, Duration t, Alarm_Callback callback ) with(this) { 415 344 lock( lock __cfaabi_dbg_ctx2 ); 416 enqueue_thread( this, &info);345 size_t recursion_count = queue_and_get_recursion(this, &info); 417 346 alarm_node_wrap(L) node_wrap = { t, 0`s, callback, &this, &info }; 418 347 unlock( lock ); 419 348 420 // blocks here and registers alarm node before blocking after releasing locks to avoid deadlock 421 size_t recursion_count = block_and_get_recursion( info, cond_alarm_register, (void *)(&node_wrap.alarm_node) ); 422 // park(); 349 // registers alarm outside cond lock to avoid deadlock 350 register_self( &node_wrap.alarm_node ); 351 352 // blocks here 353 park(); 423 354 424 355 // unregisters alarm so it doesn't go off if this happens first … … 426 357 427 358 // resets recursion count here after waking 428 if ( info.lock ) on_wakeup( *info.lock, recursion_count);359 if (info.lock) on_wakeup(*info.lock, recursion_count); 429 360 } 430 361 … … 486 417 info_thread( L ) i = { active_thread(), info, &l }; 487 418 insert_last( blocked_threads, i ); 488 size_t recursion_count = on_wait( *i.lock , pre_park_noop, 0p ); // blocks here489 //park( );419 size_t recursion_count = on_wait( *i.lock ); 420 park( ); 490 421 on_wakeup(*i.lock, recursion_count); 491 422 } … … 528 459 bool empty ( pthread_cond_var(L) & this ) with(this) { return blocked_threads`isEmpty; } 529 460 461 static size_t queue_and_get_recursion( pthread_cond_var(L) & this, info_thread(L) * i ) with(this) { 462 // add info_thread to waiting queue 463 insert_last( blocked_threads, *i ); 464 size_t recursion_count = 0; 465 recursion_count = on_wait( *i->lock ); 466 return recursion_count; 467 } 468 530 469 static void queue_info_thread_timeout( pthread_cond_var(L) & this, info_thread(L) & info, Duration t, Alarm_Callback callback ) with(this) { 531 470 lock( lock __cfaabi_dbg_ctx2 ); 532 insert_last( blocked_threads, info);471 size_t recursion_count = queue_and_get_recursion(this, &info); 533 472 pthread_alarm_node_wrap(L) node_wrap = { t, 0`s, callback, &this, &info }; 534 473 unlock( lock ); 535 474 536 // blocks here and registers alarm node before blocking after releasing locks to avoid deadlock 537 size_t recursion_count = block_and_get_recursion( info, cond_alarm_register, (void *)(&node_wrap.alarm_node) ); 538 539 // unregisters alarm so it doesn't go off if signal happens first 475 // registers alarm outside cond lock to avoid deadlock 476 register_self( &node_wrap.alarm_node ); 477 478 // blocks here 479 park(); 480 481 // unregisters alarm so it doesn't go off if this happens first 540 482 unregister_self( &node_wrap.alarm_node ); 541 483 542 484 // resets recursion count here after waking 543 if ( info.lock ) on_wakeup( *info.lock, recursion_count);485 if (info.lock) on_wakeup(*info.lock, recursion_count); 544 486 } 545 487 … … 551 493 lock( lock __cfaabi_dbg_ctx2 ); 552 494 info_thread( L ) i = { active_thread(), info, &l }; 553 insert_last( blocked_threads, i ); 554 unlock( lock ); 555 556 // blocks here 557 size_t recursion_count = block_and_get_recursion( i ); 558 559 on_wakeup( *i.lock, recursion_count ); 495 size_t recursion_count = queue_and_get_recursion(this, &i); 496 unlock( lock ); 497 park( ); 498 on_wakeup(*i.lock, recursion_count); 560 499 } 561 500 … … 645 584 return thrd != 0p; 646 585 } 647 -
libcfa/src/concurrency/locks.hfa
r3982384 r6e4c44d 30 30 #include "time.hfa" 31 31 32 #include "select.hfa"33 34 32 #include <fstream.hfa> 35 33 … … 39 37 #include <unistd.h> 40 38 41 typedef void (*__cfa_pre_park)( void * ); 42 43 static inline void pre_park_noop( void * ) {} 44 45 //----------------------------------------------------------------------------- 46 // is_blocking_lock 47 forall( L & | sized(L) ) 48 trait is_blocking_lock { 49 // For synchronization locks to use when acquiring 50 void on_notify( L &, struct thread$ * ); 51 52 // For synchronization locks to use when releasing 53 size_t on_wait( L &, __cfa_pre_park pp_fn, void * pp_datum ); 54 55 // to set recursion count after getting signalled; 56 void on_wakeup( L &, size_t recursion ); 57 }; 58 59 static inline void pre_park_then_park( __cfa_pre_park pp_fn, void * pp_datum ) { 60 pp_fn( pp_datum ); 61 park(); 62 } 63 64 // macros for default routine impls for is_blocking_lock trait that do not wait-morph 65 66 #define DEFAULT_ON_NOTIFY( lock_type ) \ 67 static inline void on_notify( lock_type & this, thread$ * t ){ unpark(t); } 68 69 #define DEFAULT_ON_WAIT( lock_type ) \ 70 static inline size_t on_wait( lock_type & this, __cfa_pre_park pp_fn, void * pp_datum ) { \ 71 unlock( this ); \ 72 pre_park_then_park( pp_fn, pp_datum ); \ 73 return 0; \ 74 } 75 76 // on_wakeup impl if lock should be reacquired after waking up 77 #define DEFAULT_ON_WAKEUP_REACQ( lock_type ) \ 78 static inline void on_wakeup( lock_type & this, size_t recursion ) { lock( this ); } 79 80 // on_wakeup impl if lock will not be reacquired after waking up 81 #define DEFAULT_ON_WAKEUP_NO_REACQ( lock_type ) \ 82 static inline void on_wakeup( lock_type & this, size_t recursion ) {} 83 84 39 // C_TODO: cleanup this and locks.cfa 40 // - appropriate separation of interface and impl 41 // - clean up unused/unneeded locks 42 // - change messy big blocking lock from inheritance to composition to remove need for flags 85 43 86 44 //----------------------------------------------------------------------------- … … 109 67 static inline bool try_lock ( single_acquisition_lock & this ) { return try_lock( (blocking_lock &)this ); } 110 68 static inline void unlock ( single_acquisition_lock & this ) { unlock ( (blocking_lock &)this ); } 111 static inline size_t on_wait ( single_acquisition_lock & this , __cfa_pre_park pp_fn, void * pp_datum ) { return on_wait ( (blocking_lock &)this, pp_fn, pp_datum); }69 static inline size_t on_wait ( single_acquisition_lock & this ) { return on_wait ( (blocking_lock &)this ); } 112 70 static inline void on_wakeup( single_acquisition_lock & this, size_t v ) { on_wakeup ( (blocking_lock &)this, v ); } 113 71 static inline void on_notify( single_acquisition_lock & this, struct thread$ * t ) { on_notify( (blocking_lock &)this, t ); } 114 static inline bool register_select( single_acquisition_lock & this, select_node & node ) { return register_select( (blocking_lock &)this, node ); }115 static inline bool unregister_select( single_acquisition_lock & this, select_node & node ) { return unregister_select( (blocking_lock &)this, node ); }116 static inline bool on_selected( single_acquisition_lock & this, select_node & node ) { return on_selected( (blocking_lock &)this, node ); }117 72 118 73 //---------- … … 126 81 static inline bool try_lock ( owner_lock & this ) { return try_lock( (blocking_lock &)this ); } 127 82 static inline void unlock ( owner_lock & this ) { unlock ( (blocking_lock &)this ); } 128 static inline size_t on_wait ( owner_lock & this , __cfa_pre_park pp_fn, void * pp_datum ) { return on_wait ( (blocking_lock &)this, pp_fn, pp_datum); }83 static inline size_t on_wait ( owner_lock & this ) { return on_wait ( (blocking_lock &)this ); } 129 84 static inline void on_wakeup( owner_lock & this, size_t v ) { on_wakeup ( (blocking_lock &)this, v ); } 130 85 static inline void on_notify( owner_lock & this, struct thread$ * t ) { on_notify( (blocking_lock &)this, t ); } 131 static inline bool register_select( owner_lock & this, select_node & node ) { return register_select( (blocking_lock &)this, node ); }132 static inline bool unregister_select( owner_lock & this, select_node & node ) { return unregister_select( (blocking_lock &)this, node ); }133 static inline bool on_selected( owner_lock & this, select_node & node ) { return on_selected( (blocking_lock &)this, node ); }134 86 135 87 //----------------------------------------------------------------------------- … … 204 156 // - Kernel thd blocking alternative to the spinlock 205 157 // - No ownership (will deadlock on reacq) 206 // - no reacq on wakeup207 158 struct futex_mutex { 208 159 // lock state any state other than UNLOCKED is locked … … 218 169 } 219 170 220 static inline void ?{}( futex_mutex & this ) with(this) { val = 0; }221 222 static inline bool internal_try_lock( futex_mutex & this, int & compare_val) with(this) {171 static inline void ?{}( futex_mutex & this ) with(this) { val = 0; } 172 173 static inline bool internal_try_lock(futex_mutex & this, int & compare_val) with(this) { 223 174 return __atomic_compare_exchange_n((int*)&val, (int*)&compare_val, 1, false, __ATOMIC_ACQUIRE, __ATOMIC_ACQUIRE); 224 175 } 225 176 226 static inline int internal_exchange( futex_mutex & this) with(this) {177 static inline int internal_exchange(futex_mutex & this) with(this) { 227 178 return __atomic_exchange_n((int*)&val, 2, __ATOMIC_ACQUIRE); 228 179 } 229 180 230 181 // if this is called recursively IT WILL DEADLOCK!!!!! 231 static inline void lock( futex_mutex & this) with(this) {182 static inline void lock(futex_mutex & this) with(this) { 232 183 int state; 233 184 … … 239 190 for (int i = 0; i < spin; i++) Pause(); 240 191 } 192 193 // // no contention try to acquire 194 // if (internal_try_lock(this, state)) return; 241 195 242 196 // if not in contended state, set to be in contended state … … 258 212 } 259 213 260 DEFAULT_ON_NOTIFY( futex_mutex ) 261 DEFAULT_ON_WAIT( futex_mutex ) 262 DEFAULT_ON_WAKEUP_NO_REACQ( futex_mutex ) 214 static inline void on_notify( futex_mutex & f, thread$ * t){ unpark(t); } 215 static inline size_t on_wait( futex_mutex & f ) {unlock(f); return 0;} 216 217 // to set recursion count after getting signalled; 218 static inline void on_wakeup( futex_mutex & f, size_t recursion ) {} 263 219 264 220 //----------------------------------------------------------------------------- … … 276 232 int val; 277 233 }; 234 278 235 static inline void ?{}( go_mutex & this ) with(this) { val = 0; } 279 // static inline void ?{}( go_mutex & this, go_mutex this2 ) = void; // these don't compile correctly at the moment so they should be omitted280 // static inline void ?=?( go_mutex & this, go_mutex this2 ) = void;281 236 282 237 static inline bool internal_try_lock(go_mutex & this, int & compare_val, int new_val ) with(this) { … … 289 244 290 245 // if this is called recursively IT WILL DEADLOCK!!!!! 291 static inline void lock( go_mutex & this ) with( this) {246 static inline void lock(go_mutex & this) with(this) { 292 247 int state, init_state; 293 248 … … 300 255 while( !val ) { // lock unlocked 301 256 state = 0; 302 if ( internal_try_lock( this, state, init_state )) return;257 if (internal_try_lock(this, state, init_state)) return; 303 258 } 304 259 for (int i = 0; i < 30; i++) Pause(); … … 307 262 while( !val ) { // lock unlocked 308 263 state = 0; 309 if ( internal_try_lock( this, state, init_state )) return;264 if (internal_try_lock(this, state, init_state)) return; 310 265 } 311 266 sched_yield(); 312 267 313 268 // if not in contended state, set to be in contended state 314 state = internal_exchange( this, 2);269 state = internal_exchange(this, 2); 315 270 if ( !state ) return; // state == 0 316 271 init_state = 2; 317 futex( (int*)&val, FUTEX_WAIT, 2); // if val is not 2 this returns with EWOULDBLOCK272 futex((int*)&val, FUTEX_WAIT, 2); // if val is not 2 this returns with EWOULDBLOCK 318 273 } 319 274 } … … 321 276 static inline void unlock( go_mutex & this ) with(this) { 322 277 // if uncontended do atomic unlock and then return 323 if ( __atomic_exchange_n(&val, 0, __ATOMIC_RELEASE) == 1) return;278 if (__atomic_exchange_n(&val, 0, __ATOMIC_RELEASE) == 1) return; 324 279 325 280 // otherwise threads are blocked so we must wake one 326 futex( (int *)&val, FUTEX_WAKE, 1 ); 327 } 328 329 DEFAULT_ON_NOTIFY( go_mutex ) 330 DEFAULT_ON_WAIT( go_mutex ) 331 DEFAULT_ON_WAKEUP_NO_REACQ( go_mutex ) 281 futex((int *)&val, FUTEX_WAKE, 1); 282 } 283 284 static inline void on_notify( go_mutex & f, thread$ * t){ unpark(t); } 285 static inline size_t on_wait( go_mutex & f ) {unlock(f); return 0;} 286 static inline void on_wakeup( go_mutex & f, size_t recursion ) {} 287 288 //----------------------------------------------------------------------------- 289 // CLH Spinlock 290 // - No recursive acquisition 291 // - Needs to be released by owner 292 293 struct clh_lock { 294 volatile bool * volatile tail; 295 volatile bool * volatile head; 296 }; 297 298 static inline void ?{}( clh_lock & this ) { this.tail = malloc(); *this.tail = true; } 299 static inline void ^?{}( clh_lock & this ) { free(this.tail); } 300 301 static inline void lock(clh_lock & l) { 302 thread$ * curr_thd = active_thread(); 303 *(curr_thd->clh_node) = false; 304 volatile bool * prev = __atomic_exchange_n((bool **)(&l.tail), (bool *)(curr_thd->clh_node), __ATOMIC_SEQ_CST); 305 while(!__atomic_load_n(prev, __ATOMIC_SEQ_CST)) Pause(); 306 __atomic_store_n((bool **)(&l.head), (bool *)curr_thd->clh_node, __ATOMIC_SEQ_CST); 307 curr_thd->clh_node = prev; 308 } 309 310 static inline void unlock(clh_lock & l) { 311 __atomic_store_n((bool *)(l.head), true, __ATOMIC_SEQ_CST); 312 } 313 314 static inline void on_notify(clh_lock & this, struct thread$ * t ) { unpark(t); } 315 static inline size_t on_wait(clh_lock & this) { unlock(this); return 0; } 316 static inline void on_wakeup(clh_lock & this, size_t recursion ) { lock(this); } 332 317 333 318 //----------------------------------------------------------------------------- … … 349 334 this.lock_value = 0; 350 335 } 351 static inline void ?{}( exp_backoff_then_block_lock & this, exp_backoff_then_block_lock this2 ) = void;352 static inline void ?=?( exp_backoff_then_block_lock & this, exp_backoff_then_block_lock this2 ) = void;353 336 354 337 static inline void ^?{}( exp_backoff_then_block_lock & this ){} 355 338 356 static inline bool internal_try_lock( exp_backoff_then_block_lock & this, size_t & compare_val) with(this) {339 static inline bool internal_try_lock(exp_backoff_then_block_lock & this, size_t & compare_val) with(this) { 357 340 return __atomic_compare_exchange_n(&lock_value, &compare_val, 1, false, __ATOMIC_ACQUIRE, __ATOMIC_RELAXED); 358 341 } 359 342 360 static inline bool try_lock( exp_backoff_then_block_lock & this ) { size_t compare_val = 0; return internal_try_lock( this, compare_val); }361 362 static inline bool try_lock_contention( exp_backoff_then_block_lock & this) with(this) {363 return !__atomic_exchange_n( &lock_value, 2, __ATOMIC_ACQUIRE);364 } 365 366 static inline bool block( exp_backoff_then_block_lock & this) with(this) {343 static inline bool try_lock(exp_backoff_then_block_lock & this) { size_t compare_val = 0; return internal_try_lock(this, compare_val); } 344 345 static inline bool try_lock_contention(exp_backoff_then_block_lock & this) with(this) { 346 return !__atomic_exchange_n(&lock_value, 2, __ATOMIC_ACQUIRE); 347 } 348 349 static inline bool block(exp_backoff_then_block_lock & this) with(this) { 367 350 lock( spinlock __cfaabi_dbg_ctx2 ); 368 351 if (__atomic_load_n( &lock_value, __ATOMIC_SEQ_CST) != 2) { … … 376 359 } 377 360 378 static inline void lock( exp_backoff_then_block_lock & this) with(this) {361 static inline void lock(exp_backoff_then_block_lock & this) with(this) { 379 362 size_t compare_val = 0; 380 363 int spin = 4; … … 395 378 } 396 379 397 static inline void unlock( exp_backoff_then_block_lock & this) with(this) {380 static inline void unlock(exp_backoff_then_block_lock & this) with(this) { 398 381 if (__atomic_exchange_n(&lock_value, 0, __ATOMIC_RELEASE) == 1) return; 399 382 lock( spinlock __cfaabi_dbg_ctx2 ); … … 403 386 } 404 387 405 DEFAULT_ON_NOTIFY( exp_backoff_then_block_lock ) 406 DEFAULT_ON_WAIT( exp_backoff_then_block_lock ) 407 DEFAULT_ON_WAKEUP_REACQ( exp_backoff_then_block_lock ) 388 static inline void on_notify(exp_backoff_then_block_lock & this, struct thread$ * t ) { unpark(t); } 389 static inline size_t on_wait(exp_backoff_then_block_lock & this) { unlock(this); return 0; } 390 static inline void on_wakeup(exp_backoff_then_block_lock & this, size_t recursion ) { lock(this); } 408 391 409 392 //----------------------------------------------------------------------------- … … 435 418 436 419 // if this is called recursively IT WILL DEADLOCK!!!!! 437 static inline void lock( fast_block_lock & this) with(this) {420 static inline void lock(fast_block_lock & this) with(this) { 438 421 lock( lock __cfaabi_dbg_ctx2 ); 439 422 if ( held ) { … … 447 430 } 448 431 449 static inline void unlock( fast_block_lock & this) with(this) {432 static inline void unlock(fast_block_lock & this) with(this) { 450 433 lock( lock __cfaabi_dbg_ctx2 ); 451 434 /* paranoid */ verifyf( held != false, "Attempt to release lock %p that isn't held", &this ); … … 456 439 } 457 440 458 static inline void on_notify( fast_block_lock & this, struct thread$ * t ) with(this) {441 static inline void on_notify(fast_block_lock & this, struct thread$ * t ) with(this) { 459 442 lock( lock __cfaabi_dbg_ctx2 ); 460 443 insert_last( blocked_threads, *t ); 461 444 unlock( lock ); 462 445 } 463 DEFAULT_ON_WAIT( fast_block_lock ) 464 DEFAULT_ON_WAKEUP_NO_REACQ( fast_block_lock ) 446 static inline size_t on_wait(fast_block_lock & this) { unlock(this); return 0; } 447 static inline void on_wakeup(fast_block_lock & this, size_t recursion ) { } 465 448 466 449 //----------------------------------------------------------------------------- … … 473 456 struct simple_owner_lock { 474 457 // List of blocked threads 475 dlist( select_node) blocked_threads;458 dlist( thread$ ) blocked_threads; 476 459 477 460 // Spin lock used for mutual exclusion … … 494 477 static inline void ?=?( simple_owner_lock & this, simple_owner_lock this2 ) = void; 495 478 496 static inline void lock( simple_owner_lock & this) with(this) {497 if ( owner == active_thread()) {479 static inline void lock(simple_owner_lock & this) with(this) { 480 if (owner == active_thread()) { 498 481 recursion_count++; 499 482 return; … … 501 484 lock( lock __cfaabi_dbg_ctx2 ); 502 485 503 if ( owner != 0p ) { 504 select_node node; 505 insert_last( blocked_threads, node ); 486 if (owner != 0p) { 487 insert_last( blocked_threads, *active_thread() ); 506 488 unlock( lock ); 507 489 park( ); … … 513 495 } 514 496 515 static inline void pop_node( simple_owner_lock & this ) with(this) { 516 __handle_waituntil_OR( blocked_threads ); 517 select_node * node = &try_pop_front( blocked_threads ); 518 if ( node ) { 519 owner = node->blocked_thread; 520 recursion_count = 1; 521 // if ( !node->clause_status || __make_select_node_available( *node ) ) unpark( node->blocked_thread ); 522 wake_one( blocked_threads, *node ); 523 } else { 524 owner = 0p; 525 recursion_count = 0; 526 } 527 } 528 529 static inline void unlock( simple_owner_lock & this ) with(this) { 497 // TODO: fix duplicate def issue and bring this back 498 // void pop_and_set_new_owner( simple_owner_lock & this ) with( this ) { 499 // thread$ * t = &try_pop_front( blocked_threads ); 500 // owner = t; 501 // recursion_count = ( t ? 1 : 0 ); 502 // unpark( t ); 503 // } 504 505 static inline void unlock(simple_owner_lock & this) with(this) { 530 506 lock( lock __cfaabi_dbg_ctx2 ); 531 507 /* paranoid */ verifyf( owner != 0p, "Attempt to release lock %p that isn't held", &this ); … … 534 510 recursion_count--; 535 511 if ( recursion_count == 0 ) { 536 pop_node( this ); 512 // pop_and_set_new_owner( this ); 513 thread$ * t = &try_pop_front( blocked_threads ); 514 owner = t; 515 recursion_count = ( t ? 1 : 0 ); 516 unpark( t ); 537 517 } 538 518 unlock( lock ); 539 519 } 540 520 541 static inline void on_notify( simple_owner_lock & this,thread$ * t ) with(this) {521 static inline void on_notify(simple_owner_lock & this, struct thread$ * t ) with(this) { 542 522 lock( lock __cfaabi_dbg_ctx2 ); 543 523 // lock held 544 524 if ( owner != 0p ) { 545 insert_last( blocked_threads, * (select_node *)t->link_node);525 insert_last( blocked_threads, *t ); 546 526 } 547 527 // lock not held … … 554 534 } 555 535 556 static inline size_t on_wait( simple_owner_lock & this, __cfa_pre_park pp_fn, void * pp_datum) with(this) {536 static inline size_t on_wait(simple_owner_lock & this) with(this) { 557 537 lock( lock __cfaabi_dbg_ctx2 ); 558 538 /* paranoid */ verifyf( owner != 0p, "Attempt to release lock %p that isn't held", &this ); … … 561 541 size_t ret = recursion_count; 562 542 563 pop_node( this ); 564 565 select_node node; 566 active_thread()->link_node = (void *)&node; 543 // pop_and_set_new_owner( this ); 544 545 thread$ * t = &try_pop_front( blocked_threads ); 546 owner = t; 547 recursion_count = ( t ? 1 : 0 ); 548 unpark( t ); 549 567 550 unlock( lock ); 568 569 pre_park_then_park( pp_fn, pp_datum );570 571 551 return ret; 572 552 } 573 553 574 static inline void on_wakeup( simple_owner_lock & this, size_t recursion ) with(this) { recursion_count = recursion; } 575 576 // waituntil() support 577 static inline bool register_select( simple_owner_lock & this, select_node & node ) with(this) { 578 lock( lock __cfaabi_dbg_ctx2 ); 579 580 // check if we can complete operation. If so race to establish winner in special OR case 581 if ( !node.park_counter && ( owner == active_thread() || owner == 0p ) ) { 582 if ( !__make_select_node_available( node ) ) { // we didn't win the race so give up on registering 583 unlock( lock ); 584 return false; 585 } 586 } 587 588 if ( owner == active_thread() ) { 589 recursion_count++; 590 if ( node.park_counter ) __make_select_node_available( node ); 591 unlock( lock ); 592 return true; 593 } 594 595 if ( owner != 0p ) { 596 insert_last( blocked_threads, node ); 597 unlock( lock ); 598 return false; 599 } 600 601 owner = active_thread(); 602 recursion_count = 1; 603 604 if ( node.park_counter ) __make_select_node_available( node ); 605 unlock( lock ); 606 return true; 607 } 608 609 static inline bool unregister_select( simple_owner_lock & this, select_node & node ) with(this) { 610 lock( lock __cfaabi_dbg_ctx2 ); 611 if ( node`isListed ) { 612 remove( node ); 613 unlock( lock ); 614 return false; 615 } 616 617 if ( owner == active_thread() ) { 618 recursion_count--; 619 if ( recursion_count == 0 ) { 620 pop_node( this ); 621 } 622 } 623 unlock( lock ); 624 return false; 625 } 626 627 static inline bool on_selected( simple_owner_lock & this, select_node & node ) { return true; } 628 554 static inline void on_wakeup(simple_owner_lock & this, size_t recursion ) with(this) { recursion_count = recursion; } 629 555 630 556 //----------------------------------------------------------------------------- … … 652 578 653 579 // if this is called recursively IT WILL DEADLOCK! 654 static inline void lock( spin_queue_lock & this) with(this) {580 static inline void lock(spin_queue_lock & this) with(this) { 655 581 mcs_spin_node node; 656 582 lock( lock, node ); … … 660 586 } 661 587 662 static inline void unlock( spin_queue_lock & this) with(this) {588 static inline void unlock(spin_queue_lock & this) with(this) { 663 589 __atomic_store_n(&held, false, __ATOMIC_RELEASE); 664 590 } 665 591 666 DEFAULT_ON_NOTIFY( spin_queue_lock ) 667 DEFAULT_ON_WAIT( spin_queue_lock ) 668 DEFAULT_ON_WAKEUP_REACQ( spin_queue_lock ) 592 static inline void on_notify(spin_queue_lock & this, struct thread$ * t ) { 593 unpark(t); 594 } 595 static inline size_t on_wait(spin_queue_lock & this) { unlock(this); return 0; } 596 static inline void on_wakeup(spin_queue_lock & this, size_t recursion ) { lock(this); } 597 669 598 670 599 //----------------------------------------------------------------------------- … … 692 621 693 622 // if this is called recursively IT WILL DEADLOCK!!!!! 694 static inline void lock( mcs_block_spin_lock & this) with(this) {623 static inline void lock(mcs_block_spin_lock & this) with(this) { 695 624 mcs_node node; 696 625 lock( lock, node ); … … 704 633 } 705 634 706 DEFAULT_ON_NOTIFY( mcs_block_spin_lock ) 707 DEFAULT_ON_WAIT( mcs_block_spin_lock ) 708 DEFAULT_ON_WAKEUP_REACQ( mcs_block_spin_lock ) 635 static inline void on_notify(mcs_block_spin_lock & this, struct thread$ * t ) { unpark(t); } 636 static inline size_t on_wait(mcs_block_spin_lock & this) { unlock(this); return 0; } 637 static inline void on_wakeup(mcs_block_spin_lock & this, size_t recursion ) {lock(this); } 709 638 710 639 //----------------------------------------------------------------------------- … … 732 661 733 662 // if this is called recursively IT WILL DEADLOCK!!!!! 734 static inline void lock( block_spin_lock & this) with(this) {663 static inline void lock(block_spin_lock & this) with(this) { 735 664 lock( lock ); 736 665 while(__atomic_load_n(&held, __ATOMIC_SEQ_CST)) Pause(); … … 739 668 } 740 669 741 static inline void unlock( block_spin_lock & this) with(this) {670 static inline void unlock(block_spin_lock & this) with(this) { 742 671 __atomic_store_n(&held, false, __ATOMIC_RELEASE); 743 672 } 744 673 745 static inline void on_notify( block_spin_lock & this, struct thread$ * t ) with(this.lock) {674 static inline void on_notify(block_spin_lock & this, struct thread$ * t ) with(this.lock) { 746 675 // first we acquire internal fast_block_lock 747 676 lock( lock __cfaabi_dbg_ctx2 ); … … 757 686 unpark(t); 758 687 } 759 DEFAULT_ON_WAIT( block_spin_lock ) 760 static inline void on_wakeup( block_spin_lock & this, size_t recursion ) with(this) {688 static inline size_t on_wait(block_spin_lock & this) { unlock(this); return 0; } 689 static inline void on_wakeup(block_spin_lock & this, size_t recursion ) with(this) { 761 690 // now we acquire the entire block_spin_lock upon waking up 762 691 while(__atomic_load_n(&held, __ATOMIC_SEQ_CST)) Pause(); … … 764 693 unlock( lock ); // Now we release the internal fast_spin_lock 765 694 } 695 696 //----------------------------------------------------------------------------- 697 // is_blocking_lock 698 forall( L & | sized(L) ) 699 trait is_blocking_lock { 700 // For synchronization locks to use when acquiring 701 void on_notify( L &, struct thread$ * ); 702 703 // For synchronization locks to use when releasing 704 size_t on_wait( L & ); 705 706 // to set recursion count after getting signalled; 707 void on_wakeup( L &, size_t recursion ); 708 }; 766 709 767 710 //----------------------------------------------------------------------------- … … 771 714 forall(L & | is_blocking_lock(L)) { 772 715 struct info_thread; 716 717 // // for use by sequence 718 // info_thread(L) *& Back( info_thread(L) * this ); 719 // info_thread(L) *& Next( info_thread(L) * this ); 773 720 } 774 721 -
libcfa/src/concurrency/mutex_stmt.hfa
r3982384 r6e4c44d 15 15 }; 16 16 17 17 18 struct __mutex_stmt_lock_guard { 18 19 void ** lockarr; … … 29 30 30 31 forall(L & | is_lock(L)) { 31 static inline void * __get_mutexstmt_lock_ptr( L & this ) { return &this; } 32 static inline L __get_mutexstmt_lock_type( L & this ) {} 33 static inline L __get_mutexstmt_lock_type( L * this ) {} 32 33 struct scoped_lock { 34 L * internal_lock; 35 }; 36 37 static inline void ?{}( scoped_lock(L) & this, L & internal_lock ) { 38 this.internal_lock = &internal_lock; 39 lock(internal_lock); 40 } 41 42 static inline void ^?{}( scoped_lock(L) & this ) with(this) { 43 unlock(*internal_lock); 44 } 45 46 static inline void * __get_mutexstmt_lock_ptr( L & this ) { 47 return &this; 48 } 49 50 static inline L __get_mutexstmt_lock_type( L & this ); 51 52 static inline L __get_mutexstmt_lock_type( L * this ); 34 53 } -
libcfa/src/concurrency/preemption.cfa
r3982384 r6e4c44d 117 117 __cfadbg_print_buffer_decl( preemption, " KERNEL: preemption tick %lu\n", currtime.tn); 118 118 Duration period = node->period; 119 if( period == 0 ) {119 if( period == 0) { 120 120 node->set = false; // Node is one-shot, just mark it as not pending 121 121 } -
libcfa/src/concurrency/select.hfa
r3982384 r6e4c44d 1 //2 // Cforall Version 1.0.0 Copyright (C) 2021 University of Waterloo3 //4 // The contents of this file are covered under the licence agreement in the5 // file "LICENCE" distributed with Cforall.6 //7 // channel.hfa -- LIBCFATHREAD8 // Runtime locks that used with the runtime thread system.9 //10 // Author : Colby Alexander Parsons11 // Created On : Thu Jan 21 19:46:50 202312 // Last Modified By :13 // Last Modified On :14 // Update Count :15 //16 17 1 #pragma once 18 2 19 3 #include "containers/list.hfa" 20 #include "alarm.hfa"21 #include "kernel.hfa"22 #include "time.hfa"4 #include <stdint.h> 5 #include <kernel.hfa> 6 #include <locks.hfa> 23 7 24 struct select_node;25 26 // node status27 static const unsigned long int __SELECT_UNSAT = 0;28 static const unsigned long int __SELECT_PENDING = 1; // used only by special OR case29 static const unsigned long int __SELECT_SAT = 2;30 static const unsigned long int __SELECT_RUN = 3;31 32 // these are used inside the compiler to aid in code generation33 static inline bool __CFA_has_clause_run( unsigned long int status ) { return status == __SELECT_RUN; }34 static inline void __CFA_maybe_park( int * park_counter ) {35 if ( __atomic_sub_fetch( park_counter, 1, __ATOMIC_SEQ_CST) < 0 )36 park();37 }38 39 // node used for coordinating waituntil synchronization40 8 struct select_node { 41 int * park_counter; // If this is 0p then the node is in a special OR case waituntil42 unsigned long int * clause_status; // needs to point at ptr sized location, if this is 0p then node is not part of a waituntil43 44 void * extra; // used to store arbitrary data needed by some primitives45 46 9 thread$ * blocked_thread; 10 void ** race_flag; 47 11 inline dlink(select_node); 48 12 }; 49 13 P9_EMBEDDED( select_node, dlink(select_node) ) 50 14 51 static inline void ?{}( select_node & this ) { 52 this.blocked_thread = active_thread(); 53 this.clause_status = 0p; 54 this.park_counter = 0p; 55 this.extra = 0p; 15 void ?{}( select_node & this ) { 16 this.blocked_thread = 0p; 17 this.race_flag = 0p; 56 18 } 57 19 58 static inlinevoid ?{}( select_node & this, thread$ * blocked_thread ) {20 void ?{}( select_node & this, thread$ * blocked_thread ) { 59 21 this.blocked_thread = blocked_thread; 60 this.clause_status = 0p; 61 this.park_counter = 0p; 62 this.extra = 0p; 22 this.race_flag = 0p; 63 23 } 64 24 65 static inline void ?{}( select_node & this, thread$ * blocked_thread, void * extra) {25 void ?{}( select_node & this, thread$ * blocked_thread, void ** race_flag ) { 66 26 this.blocked_thread = blocked_thread; 67 this.clause_status = 0p; 68 this.park_counter = 0p; 69 this.extra = extra; 27 this.race_flag = race_flag; 70 28 } 71 static inline void ^?{}( select_node & this ) {}72 29 73 // this is used inside the compiler to aid in code generation 74 static inline unsigned long int * __get_clause_status( select_node & s ) { return s.clause_status; } 30 void ^?{}( select_node & this ) {} 75 31 76 // this is used inside the compiler to attempt to establish an else clause as a winner in the OR special case race77 static inline bool __select_node_else_race( select_node & this ) with( this ) {78 unsigned long int cmp_status = __SELECT_UNSAT;79 return *clause_status == 080 && __atomic_compare_exchange_n( clause_status, &cmp_status, __SELECT_SAT, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST );81 }82 32 83 33 //----------------------------------------------------------------------------- 84 34 // is_selectable 85 forall(T & | sized(T)) 86 trait is_selectable { 87 // For registering a select stmt on a selectable concurrency primitive 88 // Returns bool that indicates if operation is already SAT 89 bool register_select( T &, select_node & ); 35 trait is_selectable(T & | sized(T)) { 36 // For registering a select on a selectable concurrency primitive 37 // return 0p if primitive not accessible yet 38 // return 1p if primitive gets acquired 39 // return 2p if primitive is accessible but some other primitive won the race 40 // C_TODO: add enum for return values 41 void * register_select( T &, select_node & ); 90 42 91 // For unregistering a select stmt on a selectable concurrency primitive 92 // If true is returned then the corresponding code block is run (only in non-special OR case and only if node status is not RUN) 93 bool unregister_select( T &, select_node & ); 94 95 // This routine is run on the selecting thread prior to executing the statement corresponding to the select_node 96 // passed as an arg to this routine 97 // If on_selected returns false, the statement is not run, if it returns true it is run. 98 bool on_selected( T &, select_node & ); 43 void unregister_select( T &, select_node & ); 99 44 }; 100 45 101 //============================================================================================= 102 // Waituntil Helpers 103 //============================================================================================= 104 105 // used for the 2-stage avail needed by the special OR case 106 static inline bool __mark_select_node( select_node & this, unsigned long int val ) with( this ) { 107 /* paranoid */ verify( park_counter == 0p ); 108 /* paranoid */ verify( clause_status != 0p ); 109 110 unsigned long int cmp_status = __SELECT_UNSAT; 111 while( !__atomic_compare_exchange_n( clause_status, &cmp_status, val, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST ) ) { 112 if ( cmp_status != __SELECT_PENDING ) return false; 113 cmp_status = __SELECT_UNSAT; 114 } 115 return true; 46 static inline bool install_select_winner( select_node & this, void * primitive_ptr ) with(this) { 47 // temporary needed for atomic instruction 48 void * cmp_flag = 0p; 49 50 // if we dont win the selector race we need to potentially 51 // ignore this node and move to the next one so we return accordingly 52 if ( *race_flag != 0p || 53 !__atomic_compare_exchange_n( 54 race_flag, 55 &cmp_flag, 56 primitive_ptr, 57 false, 58 __ATOMIC_SEQ_CST, 59 __ATOMIC_SEQ_CST 60 ) 61 ) return false; // lost race and some other node triggered select 62 return true; // won race so this node is what the select proceeds with 116 63 } 117 118 static inline void __make_select_node_unsat( select_node & this ) with( this ) {119 __atomic_store_n( clause_status, __SELECT_UNSAT, __ATOMIC_SEQ_CST );120 }121 static inline void __make_select_node_sat( select_node & this ) with( this ) {122 __atomic_store_n( clause_status, __SELECT_SAT, __ATOMIC_SEQ_CST );123 }124 125 static inline bool __make_select_node_pending( select_node & this ) with( this ) {126 return __mark_select_node( this, __SELECT_PENDING );127 }128 129 // when a primitive becomes available it calls the following routine on it's node to update the select state:130 // return true if we want to unpark the thd131 static inline bool __make_select_node_available( select_node & this ) with( this ) {132 /* paranoid */ verify( clause_status != 0p );133 if( !park_counter )134 return __mark_select_node( this, (unsigned long int)&this );135 136 unsigned long int cmp_status = __SELECT_UNSAT;137 138 return *clause_status == 0 // C_TODO might not need a cmp_xchg in non special OR case139 && __atomic_compare_exchange_n( clause_status, &cmp_status, __SELECT_SAT, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST ) // can maybe just use atomic write140 && !__atomic_add_fetch( park_counter, 1, __ATOMIC_SEQ_CST);141 }142 143 // Handles the special OR case of the waituntil statement144 // Since only one select node can win in the OR case, we need to race to set the node available BEFORE145 // performing the operation since if we lose the race the operation should not be performed as it will be lost146 // Returns true if execution can continue normally and false if the queue has now been drained147 static inline bool __handle_waituntil_OR( dlist( select_node ) & queue ) {148 if ( queue`isEmpty ) return false;149 if ( queue`first.clause_status && !queue`first.park_counter ) {150 while ( !queue`isEmpty ) {151 // if node not a special OR case or if we win the special OR case race break152 if ( !queue`first.clause_status || queue`first.park_counter || __make_select_node_available( queue`first ) )153 return true;154 // otherwise we lost the special OR race so discard node155 try_pop_front( queue );156 }157 return false;158 }159 return true;160 }161 162 // wake one thread from the list163 static inline void wake_one( dlist( select_node ) & queue, select_node & popped ) {164 if ( !popped.clause_status // normal case, node is not a select node165 || ( popped.clause_status && !popped.park_counter ) // If popped link is special case OR selecting unpark but don't call __make_select_node_available166 || __make_select_node_available( popped ) ) // check if popped link belongs to a selecting thread167 unpark( popped.blocked_thread );168 }169 170 static inline void wake_one( dlist( select_node ) & queue ) { wake_one( queue, try_pop_front( queue ) ); }171 172 static inline void setup_clause( select_node & this, unsigned long int * clause_status, int * park_counter ) {173 this.blocked_thread = active_thread();174 this.clause_status = clause_status;175 this.park_counter = park_counter;176 }177 178 // waituntil ( timeout( ... ) ) support179 struct select_timeout_node {180 alarm_node_t a_node;181 select_node * s_node;182 };183 void ?{}( select_timeout_node & this, Duration duration, Alarm_Callback callback );184 void ^?{}( select_timeout_node & this );185 void timeout_handler_select_cast( alarm_node_t & node );186 187 // Selectable trait routines188 bool register_select( select_timeout_node & this, select_node & node );189 bool unregister_select( select_timeout_node & this, select_node & node );190 bool on_selected( select_timeout_node & this, select_node & node );191 192 // Gateway routines to waituntil on duration193 select_timeout_node timeout( Duration duration );194 select_timeout_node sleep( Duration duration ); -
libcfa/src/concurrency/thread.cfa
r3982384 r6e4c44d 53 53 preferred = ready_queue_new_preferred(); 54 54 last_proc = 0p; 55 link_node = 0p;56 55 PRNG_SET_SEED( random_state, __global_random_mask ? __global_random_prime : __global_random_prime ^ rdtscl() ); 57 56 #if defined( __CFA_WITH_VERIFY__ ) … … 60 59 #endif 61 60 61 clh_node = malloc( ); 62 *clh_node = false; 63 62 64 doregister(curr_cluster, this); 63 65 monitors{ &self_mon_p, 1, (fptr_t)0 }; … … 68 70 canary = 0xDEADDEADDEADDEADp; 69 71 #endif 72 free(clh_node); 70 73 unregister(curr_cluster, this); 71 74 ^self_cor{}; -
src/AST/Convert.cpp
r3982384 r6e4c44d 567 567 } 568 568 569 const ast::WhenClause * visit( const ast::WhenClause * node ) override final {570 // There is no old-AST WhenClause, so this should never be called.571 assert( !node );572 return nullptr;573 }574 575 569 const ast::Stmt * visit( const ast::WaitForStmt * node ) override final { 576 570 if ( inCache( node ) ) return nullptr; … … 579 573 for ( auto clause : node->clauses ) { 580 574 stmt->clauses.push_back({{ 581 get<Expression>().accept1( clause->target ),575 get<Expression>().accept1( clause->target_func ), 582 576 get<Expression>().acceptL( clause->target_args ), 583 577 }, 584 578 get<Statement>().accept1( clause->stmt ), 585 get<Expression>().accept1( clause-> when_cond ),579 get<Expression>().accept1( clause->cond ), 586 580 }); 587 581 } … … 600 594 const ast::WaitForClause * visit( const ast::WaitForClause * node ) override final { 601 595 // There is no old-AST WaitForClause, so this should never be called. 602 assert( !node );603 return nullptr;604 }605 606 const ast::Stmt * visit( const ast::WaitUntilStmt * node ) override final {607 // There is no old-AST WaitUntilStmt, so this should never be called.608 596 assert( !node ); 609 597 return nullptr; … … 2170 2158 auto clause = new ast::WaitForClause( old->location ); 2171 2159 2172 clause->target = GET_ACCEPT_1(clauses[i].target.function, Expr);2160 clause->target_func = GET_ACCEPT_1(clauses[i].target.function, Expr); 2173 2161 clause->target_args = GET_ACCEPT_V(clauses[i].target.arguments, Expr); 2174 2162 clause->stmt = GET_ACCEPT_1(clauses[i].statement, Stmt); 2175 clause-> when_cond = GET_ACCEPT_1(clauses[i].condition, Expr);2163 clause->cond = GET_ACCEPT_1(clauses[i].condition, Expr); 2176 2164 2177 2165 stmt->clauses.push_back( clause ); -
src/AST/Fwd.hpp
r3982384 r6e4c44d 58 58 class FinallyClause; 59 59 class SuspendStmt; 60 class WhenClause;61 60 class WaitForStmt; 62 61 class WaitForClause; 63 class WaitUntilStmt;64 62 class WithStmt; 65 63 class DeclStmt; -
src/AST/Node.cpp
r3982384 r6e4c44d 174 174 template class ast::ptr_base< ast::FinallyClause, ast::Node::ref_type::weak >; 175 175 template class ast::ptr_base< ast::FinallyClause, ast::Node::ref_type::strong >; 176 template class ast::ptr_base< ast::WhenClause, ast::Node::ref_type::weak >;177 template class ast::ptr_base< ast::WhenClause, ast::Node::ref_type::strong >;178 176 template class ast::ptr_base< ast::WaitForStmt, ast::Node::ref_type::weak >; 179 177 template class ast::ptr_base< ast::WaitForStmt, ast::Node::ref_type::strong >; 180 178 template class ast::ptr_base< ast::WaitForClause, ast::Node::ref_type::weak >; 181 179 template class ast::ptr_base< ast::WaitForClause, ast::Node::ref_type::strong >; 182 template class ast::ptr_base< ast::WaitUntilStmt, ast::Node::ref_type::weak >;183 template class ast::ptr_base< ast::WaitUntilStmt, ast::Node::ref_type::strong >;184 180 template class ast::ptr_base< ast::WithStmt, ast::Node::ref_type::weak >; 185 181 template class ast::ptr_base< ast::WithStmt, ast::Node::ref_type::strong >; -
src/AST/Pass.hpp
r3982384 r6e4c44d 162 162 const ast::FinallyClause * visit( const ast::FinallyClause * ) override final; 163 163 const ast::Stmt * visit( const ast::SuspendStmt * ) override final; 164 const ast::WhenClause * visit( const ast::WhenClause * ) override final;165 164 const ast::Stmt * visit( const ast::WaitForStmt * ) override final; 166 165 const ast::WaitForClause * visit( const ast::WaitForClause * ) override final; 167 const ast::Stmt * visit( const ast::WaitUntilStmt * ) override final;168 166 const ast::Decl * visit( const ast::WithStmt * ) override final; 169 167 const ast::NullStmt * visit( const ast::NullStmt * ) override final; -
src/AST/Pass.impl.hpp
r3982384 r6e4c44d 22 22 #include "AST/TranslationUnit.hpp" 23 23 #include "AST/TypeSubstitution.hpp" 24 #include "Common/Iterate.hpp" 24 25 25 26 #define VISIT_START( node ) \ … … 126 127 } 127 128 129 template< typename node_t > 130 template< typename object_t, typename super_t, typename field_t > 131 void __pass::result1< node_t >::apply( object_t * object, field_t super_t::* field ) { 132 object->*field = value; 133 } 134 128 135 template< typename core_t > 129 136 template< typename node_t > … … 227 234 228 235 return {true, compound}; 236 } 237 238 template< template <class...> class container_t > 239 template< typename object_t, typename super_t, typename field_t > 240 void __pass::resultNstmt<container_t>::apply(object_t * object, field_t super_t::* field) { 241 auto & container = object->*field; 242 __pedantic_pass_assert( container.size() <= values.size() ); 243 244 auto cit = enumerate(container).begin(); 245 246 container_t<ptr<Stmt>> nvals; 247 for (delta & d : values) { 248 if ( d.is_old ) { 249 __pedantic_pass_assert( cit.idx <= d.old_idx ); 250 std::advance( cit, d.old_idx - cit.idx ); 251 nvals.push_back( std::move( (*cit).val) ); 252 } else { 253 nvals.push_back( std::move(d.new_val) ); 254 } 255 } 256 257 container = std::move(nvals); 258 } 259 260 template< template <class...> class container_t > 261 template< template <class...> class incontainer_t > 262 void __pass::resultNstmt< container_t >::take_all( incontainer_t<ptr<Stmt>> * stmts ) { 263 if (!stmts || stmts->empty()) return; 264 265 std::transform(stmts->begin(), stmts->end(), std::back_inserter( values ), 266 [](ast::ptr<ast::Stmt>& stmt) -> delta { 267 return delta( stmt.release(), -1, false ); 268 }); 269 stmts->clear(); 270 differs = true; 271 } 272 273 template< template<class...> class container_t > 274 template< template<class...> class incontainer_t > 275 void __pass::resultNstmt< container_t >::take_all( incontainer_t<ptr<Decl>> * decls ) { 276 if (!decls || decls->empty()) return; 277 278 std::transform(decls->begin(), decls->end(), std::back_inserter( values ), 279 [](ast::ptr<ast::Decl>& decl) -> delta { 280 auto loc = decl->location; 281 auto stmt = new DeclStmt( loc, decl.release() ); 282 return delta( stmt, -1, false ); 283 }); 284 decls->clear(); 285 differs = true; 229 286 } 230 287 … … 296 353 297 354 return new_kids; 355 } 356 357 template< template <class...> class container_t, typename node_t > 358 template< typename object_t, typename super_t, typename field_t > 359 void __pass::resultN<container_t, node_t>::apply(object_t * object, field_t super_t::* field) { 360 auto & container = object->*field; 361 __pedantic_pass_assert( container.size() == values.size() ); 362 363 for(size_t i = 0; i < container.size(); i++) { 364 // Take all the elements that are different in 'values' 365 // and swap them into 'container' 366 if( values[i] != nullptr ) swap(container[i], values[i]); 367 } 368 369 // Now the original containers should still have the unchanged values 370 // but also contain the new values 298 371 } 299 372 … … 993 1066 994 1067 //-------------------------------------------------------------------------- 995 // WhenClause996 template< typename core_t >997 const ast::WhenClause * ast::Pass< core_t >::visit( const ast::WhenClause * node ) {998 VISIT_START( node );999 1000 if ( __visit_children() ) {1001 maybe_accept( node, &WhenClause::target );1002 maybe_accept( node, &WhenClause::stmt );1003 maybe_accept( node, &WhenClause::when_cond );1004 }1005 1006 VISIT_END( WhenClause, node );1007 }1008 1009 //--------------------------------------------------------------------------1010 1068 // WaitForStmt 1011 1069 template< typename core_t > … … 1032 1090 1033 1091 if ( __visit_children() ) { 1034 maybe_accept( node, &WaitForClause::target );1092 maybe_accept( node, &WaitForClause::target_func ); 1035 1093 maybe_accept( node, &WaitForClause::target_args ); 1036 1094 maybe_accept( node, &WaitForClause::stmt ); 1037 maybe_accept( node, &WaitForClause:: when_cond );1095 maybe_accept( node, &WaitForClause::cond ); 1038 1096 } 1039 1097 1040 1098 VISIT_END( WaitForClause, node ); 1041 }1042 1043 //--------------------------------------------------------------------------1044 // WaitUntilStmt1045 template< typename core_t >1046 const ast::Stmt * ast::Pass< core_t >::visit( const ast::WaitUntilStmt * node ) {1047 VISIT_START( node );1048 1049 if ( __visit_children() ) {1050 maybe_accept( node, &WaitUntilStmt::clauses );1051 maybe_accept( node, &WaitUntilStmt::timeout_time );1052 maybe_accept( node, &WaitUntilStmt::timeout_stmt );1053 maybe_accept( node, &WaitUntilStmt::timeout_cond );1054 maybe_accept( node, &WaitUntilStmt::else_stmt );1055 maybe_accept( node, &WaitUntilStmt::else_cond );1056 }1057 1058 VISIT_END( Stmt, node );1059 1099 } 1060 1100 … … 2163 2203 } 2164 2204 2165 #undef __pedantic_pass_assertf2166 #undef __pedantic_pass_assert2167 2205 #undef VISIT_START 2168 2206 #undef VISIT_END -
src/AST/Pass.proto.hpp
r3982384 r6e4c44d 17 17 // IWYU pragma: private, include "Pass.hpp" 18 18 19 #include "Common/Iterate.hpp"20 19 #include "Common/Stats/Heap.h" 21 20 namespace ast { … … 25 24 template<typename node_t> node_t * deepCopy( const node_t * ); 26 25 } 27 28 #ifdef PEDANTIC_PASS_ASSERT29 #define __pedantic_pass_assert(...) assert (__VA_ARGS__)30 #define __pedantic_pass_assertf(...) assertf(__VA_ARGS__)31 #else32 #define __pedantic_pass_assert(...)33 #define __pedantic_pass_assertf(...)34 #endif35 26 36 27 namespace ast::__pass { … … 139 130 140 131 template< typename object_t, typename super_t, typename field_t > 141 void apply( object_t * object, field_t super_t::* field ) { 142 object->*field = value; 143 } 132 void apply( object_t *, field_t super_t::* field ); 144 133 }; 145 134 … … 161 150 162 151 template< typename object_t, typename super_t, typename field_t > 163 void apply( object_t * object, field_t super_t::* field ) { 164 field_t & container = object->*field; 165 __pedantic_pass_assert( container.size() <= values.size() ); 166 167 auto cit = enumerate(container).begin(); 168 169 container_t<ptr<Stmt>> nvals; 170 for ( delta & d : values ) { 171 if ( d.is_old ) { 172 __pedantic_pass_assert( cit.idx <= d.old_idx ); 173 std::advance( cit, d.old_idx - cit.idx ); 174 nvals.push_back( std::move( (*cit).val ) ); 175 } else { 176 nvals.push_back( std::move( d.new_val ) ); 177 } 178 } 179 180 container = std::move(nvals); 181 } 152 void apply( object_t *, field_t super_t::* field ); 182 153 183 154 template< template<class...> class incontainer_t > 184 void take_all( incontainer_t<ptr<Stmt>> * stmts ) { 185 if ( !stmts || stmts->empty() ) return; 186 187 std::transform( stmts->begin(), stmts->end(), std::back_inserter( values ), 188 [](ast::ptr<ast::Stmt>& stmt) -> delta { 189 return delta( stmt.release(), -1, false ); 190 }); 191 stmts->clear(); 192 differs = true; 193 } 155 void take_all( incontainer_t<ptr<Stmt>> * stmts ); 194 156 195 157 template< template<class...> class incontainer_t > 196 void take_all( incontainer_t<ptr<Decl>> * decls ) { 197 if ( !decls || decls->empty() ) return; 198 199 std::transform( decls->begin(), decls->end(), std::back_inserter( values ), 200 [](ast::ptr<ast::Decl>& decl) -> delta { 201 ast::Decl const * d = decl.release(); 202 return delta( new DeclStmt( d->location, d ), -1, false ); 203 }); 204 decls->clear(); 205 differs = true; 206 } 158 void take_all( incontainer_t<ptr<Decl>> * decls ); 207 159 }; 208 160 … … 214 166 215 167 template< typename object_t, typename super_t, typename field_t > 216 void apply( object_t * object, field_t super_t::* field ) { 217 field_t & container = object->*field; 218 __pedantic_pass_assert( container.size() == values.size() ); 219 220 for ( size_t i = 0; i < container.size(); ++i ) { 221 // Take all the elements that are different in 'values' 222 // and swap them into 'container' 223 if ( values[i] != nullptr ) swap(container[i], values[i]); 224 } 225 // Now the original containers should still have the unchanged values 226 // but also contain the new values. 227 } 168 void apply( object_t *, field_t super_t::* field ); 228 169 }; 229 170 … … 576 517 577 518 } // namespace ast::__pass 578 579 #undef __pedantic_pass_assertf580 #undef __pedantic_pass_assert -
src/AST/Print.cpp
r3982384 r6e4c44d 208 208 } 209 209 210 void print( const ast::WaitStmt * node ) {211 if ( node->timeout_time ) {212 os << indent-1 << "timeout of:" << endl;213 node->timeout_time->accept( *this );214 215 if ( node->timeout_stmt ) {216 os << indent-1 << "... with statment:" << endl;217 node->timeout_stmt->accept( *this );218 }219 220 if ( node->timeout_cond ) {221 os << indent-1 << "... with condition:" << endl;222 node->timeout_cond->accept( *this );223 }224 }225 226 if ( node->else_stmt ) {227 os << indent-1 << "else:" << endl;228 node->else_stmt->accept( *this );229 230 if ( node->else_cond ) {231 os << indent-1 << "... with condition:" << endl;232 node->else_cond->accept( *this );233 }234 }235 }236 237 210 void preprint( const ast::NamedTypeDecl * node ) { 238 211 if ( ! node->name.empty() ) { … … 783 756 } 784 757 785 virtual const ast::WhenClause * visit( const ast::WhenClause * node ) override final {786 os << indent-1 << "target: ";787 safe_print( node->target );788 789 if ( node->stmt ) {790 os << indent-1 << "... with statment:" << endl;791 node->stmt->accept( *this );792 }793 794 if ( node->when_cond ) {795 os << indent-1 << "... with when condition:" << endl;796 node->when_cond->accept( *this );797 }798 799 return node;800 }801 802 758 virtual const ast::Stmt * visit( const ast::WaitForStmt * node ) override final { 803 759 os << "Waitfor Statement" << endl; … … 837 793 virtual const ast::WaitForClause * visit( const ast::WaitForClause * node ) override final { 838 794 os << indent-1 << "target function: "; 839 safe_print( node->target );795 safe_print( node->target_func ); 840 796 841 797 if ( !node->target_args.empty() ) { … … 851 807 } 852 808 853 if ( node-> when_cond ) {809 if ( node->cond ) { 854 810 os << indent-1 << "... with condition:" << endl; 855 node->when_cond->accept( *this ); 856 } 857 858 return node; 859 } 860 861 virtual const ast::Stmt * visit( const ast::WaitUntilStmt * node ) override final { 862 os << "Waituntil Statement" << endl; 863 indent += 2; 864 for( const auto & clause : node->clauses ) { 865 clause->accept( *this ); 866 } 867 print(node); // calls print( const ast::WaitStmt * node ) 811 node->cond->accept( *this ); 812 } 813 868 814 return node; 869 815 } -
src/AST/Stmt.hpp
r3982384 r6e4c44d 378 378 }; 379 379 380 // Base class of WaitFor/WaitUntil statements381 // form: KEYWORD(...) ... timeout(...) ... else ... 382 class WaitStmt : public Stmt { 383 public: 384 ptr<Expr> timeout_time;380 // Waitfor statement: when (...) waitfor (... , ...) ... timeout(...) ... else ... 381 class WaitForStmt final : public Stmt { 382 public: 383 std::vector<ptr<WaitForClause>> clauses; 384 ptr<Expr> timeout_time; 385 385 ptr<Stmt> timeout_stmt; 386 386 ptr<Expr> timeout_cond; … … 388 388 ptr<Expr> else_cond; 389 389 390 WaitStmt( const CodeLocation & loc, const std::vector<Label> && labels = {} )390 WaitForStmt( const CodeLocation & loc, const std::vector<Label> && labels = {} ) 391 391 : Stmt(loc, std::move(labels)) {} 392 392 393 private: 394 WaitStmt * clone() const override = 0; 395 MUTATE_FRIEND 396 }; 397 398 // Base class for WaitFor/WaitUntil clauses 399 // form: when( when_cond ) KEYWORD( target ) stmt 400 class WhenClause : public StmtClause { 401 public: 402 ptr<Expr> target; 393 const Stmt * accept( Visitor & v ) const override { return v.visit( this ); } 394 private: 395 WaitForStmt * clone() const override { return new WaitForStmt{ *this }; } 396 MUTATE_FRIEND 397 }; 398 399 // Clause in a waitfor statement: waitfor (..., ...) ... 400 class WaitForClause final : public StmtClause { 401 public: 402 ptr<Expr> target_func; 403 std::vector<ptr<Expr>> target_args; 403 404 ptr<Stmt> stmt; 404 ptr<Expr> when_cond;405 406 W henClause( const CodeLocation & loc )405 ptr<Expr> cond; 406 407 WaitForClause( const CodeLocation & loc ) 407 408 : StmtClause( loc ) {} 408 409 409 const WhenClause * accept( Visitor & v ) const override { return v.visit( this ); }410 private:411 WhenClause * clone() const override { return new WhenClause{ *this }; }412 MUTATE_FRIEND413 };414 415 // Waitfor statement: when (...) waitfor (... , ...) ... timeout(...) ... else ...416 class WaitForStmt final : public WaitStmt {417 public:418 std::vector<ptr<WaitForClause>> clauses;419 420 WaitForStmt( const CodeLocation & loc, const std::vector<Label> && labels = {} )421 : WaitStmt(loc, std::move(labels)) {}422 423 const Stmt * accept( Visitor & v ) const override { return v.visit( this ); }424 private:425 WaitForStmt * clone() const override { return new WaitForStmt{ *this }; }426 MUTATE_FRIEND427 };428 429 // Clause in a waitfor statement: waitfor (..., ...) ...430 class WaitForClause final : public WhenClause {431 public:432 std::vector<ptr<Expr>> target_args;433 434 WaitForClause( const CodeLocation & loc )435 : WhenClause( loc ) {}436 437 410 const WaitForClause * accept( Visitor & v ) const override { return v.visit( this ); } 438 411 private: 439 412 WaitForClause * clone() const override { return new WaitForClause{ *this }; } 440 MUTATE_FRIEND441 };442 443 // waituntil statement: when (...) waituntil (...) ... timeout(...) ... else ...444 class WaitUntilStmt final : public WaitStmt {445 public:446 // Non-ast node used during compilation to store data needed to generate predicates447 // and set initial status values for clauses448 // Used to create a tree corresponding to the structure of the clauses in a WaitUntil449 struct ClauseNode {450 enum Op { AND, OR, LEFT_OR, LEAF, ELSE, TIMEOUT } op; // operation/type tag451 // LEFT_OR used with TIMEOUT/ELSE to indicate that we ignore right hand side after parsing452 453 ClauseNode * left;454 ClauseNode * right;455 WhenClause * leaf; // only set if this node is a leaf (points into vector of clauses)456 457 bool ambiguousWhen; // used to paint nodes of predicate tree based on when() clauses458 bool whenState; // used to track if when_cond is toggled on or off for generating init values459 bool childOfAnd; // true on leaf nodes that are children of AND, false otherwise460 461 ClauseNode( Op op, ClauseNode * left, ClauseNode * right )462 : op(op), left(left), right(right), leaf(nullptr),463 ambiguousWhen(false), whenState(true), childOfAnd(false) {}464 ClauseNode( Op op, WhenClause * leaf )465 : op(op), left(nullptr), right(nullptr), leaf(leaf),466 ambiguousWhen(false), whenState(true), childOfAnd(false) {}467 ClauseNode( WhenClause * leaf ) : ClauseNode(LEAF, leaf) {}468 469 ~ClauseNode() {470 if ( left ) delete left;471 if ( right ) delete right;472 }473 };474 475 std::vector<ptr<WhenClause>> clauses;476 ClauseNode * predicateTree;477 478 WaitUntilStmt( const CodeLocation & loc, const std::vector<Label> && labels = {} )479 : WaitStmt(loc, std::move(labels)) {}480 481 ~WaitUntilStmt() { delete predicateTree; }482 483 const Stmt * accept( Visitor & v ) const override { return v.visit( this ); }484 private:485 WaitUntilStmt * clone() const override { return new WaitUntilStmt{ *this }; }486 413 MUTATE_FRIEND 487 414 }; -
src/AST/Visitor.hpp
r3982384 r6e4c44d 50 50 virtual const ast::FinallyClause * visit( const ast::FinallyClause * ) = 0; 51 51 virtual const ast::Stmt * visit( const ast::SuspendStmt * ) = 0; 52 virtual const ast::WhenClause * visit( const ast::WhenClause * ) = 0;53 52 virtual const ast::Stmt * visit( const ast::WaitForStmt * ) = 0; 54 53 virtual const ast::WaitForClause * visit( const ast::WaitForClause * ) = 0; 55 virtual const ast::Stmt * visit( const ast::WaitUntilStmt * ) = 0;56 54 virtual const ast::Decl * visit( const ast::WithStmt * ) = 0; 57 55 virtual const ast::NullStmt * visit( const ast::NullStmt * ) = 0; -
src/Common/CodeLocationTools.cpp
r3982384 r6e4c44d 128 128 macro(FinallyClause, FinallyClause) \ 129 129 macro(SuspendStmt, Stmt) \ 130 macro(WhenClause, WhenClause) \131 130 macro(WaitForStmt, Stmt) \ 132 131 macro(WaitForClause, WaitForClause) \ 133 macro(WaitUntilStmt, Stmt) \134 132 macro(WithStmt, Decl) \ 135 133 macro(NullStmt, NullStmt) \ -
src/Concurrency/WaitforNew.cpp
r3982384 r6e4c44d 305 305 306 306 const ast::VariableExpr * variableExpr = 307 clause->target .as<ast::VariableExpr>();307 clause->target_func.as<ast::VariableExpr>(); 308 308 ast::Expr * castExpr = new ast::CastExpr( 309 309 location, 310 310 new ast::CastExpr( 311 311 location, 312 clause->target ,312 clause->target_func, 313 313 ast::deepCopy( variableExpr->result.get() ), 314 314 ast::GeneratedCast ), … … 325 325 326 326 ResolveContext context{ symtab, transUnit().global }; 327 out->push_back( maybeCond( location, clause-> when_cond.get(), {327 out->push_back( maybeCond( location, clause->cond.get(), { 328 328 makeAccStmt( location, acceptables, index, "is_dtor", 329 detectIsDtor( location, clause->target ), context ),329 detectIsDtor( location, clause->target_func ), context ), 330 330 makeAccStmt( location, acceptables, index, "func", 331 331 funcExpr, context ), -
src/Concurrency/module.mk
r3982384 r6e4c44d 23 23 Concurrency/WaitforNew.cpp \ 24 24 Concurrency/Waitfor.cc \ 25 Concurrency/Waitfor.h \ 26 Concurrency/Waituntil.cpp \ 27 Concurrency/Waituntil.hpp 25 Concurrency/Waitfor.h -
src/Parser/StatementNode.cc
r3982384 r6e4c44d 328 328 ast::WaitForStmt * build_waitfor( const CodeLocation & location, ast::WaitForStmt * existing, ExpressionNode * when, ExpressionNode * targetExpr, StatementNode * stmt ) { 329 329 auto clause = new ast::WaitForClause( location ); 330 clause->target = maybeBuild( targetExpr );330 clause->target_func = maybeBuild( targetExpr ); 331 331 clause->stmt = maybeMoveBuild( stmt ); 332 clause-> when_cond = notZeroExpr( maybeMoveBuild( when ) );332 clause->cond = notZeroExpr( maybeMoveBuild( when ) ); 333 333 334 334 ExpressionNode * next = dynamic_cast<ExpressionNode *>( targetExpr->get_next() ); … … 359 359 return existing; 360 360 } // build_waitfor_timeout 361 362 ast::WaitUntilStmt::ClauseNode * build_waituntil_clause( const CodeLocation & loc, ExpressionNode * when, ExpressionNode * targetExpr, StatementNode * stmt ) {363 ast::WhenClause * clause = new ast::WhenClause( loc );364 clause->when_cond = notZeroExpr( maybeMoveBuild( when ) );365 clause->stmt = maybeMoveBuild( stmt );366 clause->target = maybeMoveBuild( targetExpr );367 return new ast::WaitUntilStmt::ClauseNode( clause );368 }369 ast::WaitUntilStmt::ClauseNode * build_waituntil_else( const CodeLocation & loc, ExpressionNode * when, StatementNode * stmt ) {370 ast::WhenClause * clause = new ast::WhenClause( loc );371 clause->when_cond = notZeroExpr( maybeMoveBuild( when ) );372 clause->stmt = maybeMoveBuild( stmt );373 return new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::ELSE, clause );374 }375 ast::WaitUntilStmt::ClauseNode * build_waituntil_timeout( const CodeLocation & loc, ExpressionNode * when, ExpressionNode * timeout, StatementNode * stmt ) {376 ast::WhenClause * clause = new ast::WhenClause( loc );377 clause->when_cond = notZeroExpr( maybeMoveBuild( when ) );378 clause->stmt = maybeMoveBuild( stmt );379 clause->target = maybeMoveBuild( timeout );380 return new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::TIMEOUT, clause );381 }382 383 ast::WaitUntilStmt * build_waituntil_stmt( const CodeLocation & loc, ast::WaitUntilStmt::ClauseNode * root ) {384 ast::WaitUntilStmt * retStmt = new ast::WaitUntilStmt( loc );385 retStmt->predicateTree = root;386 387 // iterative tree traversal388 std::vector<ast::WaitUntilStmt::ClauseNode *> nodeStack; // stack needed for iterative traversal389 ast::WaitUntilStmt::ClauseNode * currNode = nullptr;390 ast::WaitUntilStmt::ClauseNode * lastInternalNode = nullptr;391 ast::WaitUntilStmt::ClauseNode * cleanup = nullptr; // used to cleanup removed else/timeout392 nodeStack.push_back(root);393 394 do {395 currNode = nodeStack.back();396 nodeStack.pop_back(); // remove node since it will be processed397 398 switch (currNode->op) {399 case ast::WaitUntilStmt::ClauseNode::LEAF:400 retStmt->clauses.push_back(currNode->leaf);401 break;402 case ast::WaitUntilStmt::ClauseNode::ELSE:403 retStmt->else_stmt = currNode->leaf->stmt404 ? ast::deepCopy( currNode->leaf->stmt )405 : nullptr;406 407 retStmt->else_cond = currNode->leaf->when_cond408 ? ast::deepCopy( currNode->leaf->when_cond )409 : nullptr;410 411 delete currNode->leaf;412 break;413 case ast::WaitUntilStmt::ClauseNode::TIMEOUT:414 retStmt->timeout_time = currNode->leaf->target415 ? ast::deepCopy( currNode->leaf->target )416 : nullptr;417 retStmt->timeout_stmt = currNode->leaf->stmt418 ? ast::deepCopy( currNode->leaf->stmt )419 : nullptr;420 retStmt->timeout_cond = currNode->leaf->when_cond421 ? ast::deepCopy( currNode->leaf->when_cond )422 : nullptr;423 424 delete currNode->leaf;425 break;426 default:427 nodeStack.push_back( currNode->right ); // process right after left428 nodeStack.push_back( currNode->left );429 430 // Cut else/timeout out of the tree431 if ( currNode->op == ast::WaitUntilStmt::ClauseNode::LEFT_OR ) {432 if ( lastInternalNode )433 lastInternalNode->right = currNode->left;434 else // if not set then root is LEFT_OR435 retStmt->predicateTree = currNode->left;436 437 currNode->left = nullptr;438 cleanup = currNode;439 }440 441 lastInternalNode = currNode;442 break;443 }444 } while ( !nodeStack.empty() );445 446 if ( cleanup ) delete cleanup;447 448 return retStmt;449 }450 361 451 362 ast::Stmt * build_with( const CodeLocation & location, ExpressionNode * exprs, StatementNode * stmt ) { -
src/Parser/StatementNode.h
r3982384 r6e4c44d 100 100 ast::WaitForStmt * build_waitfor_else( const CodeLocation &, ast::WaitForStmt * existing, ExpressionNode * when, StatementNode * stmt ); 101 101 ast::WaitForStmt * build_waitfor_timeout( const CodeLocation &, ast::WaitForStmt * existing, ExpressionNode * when, ExpressionNode * timeout, StatementNode * stmt ); 102 ast::WaitUntilStmt::ClauseNode * build_waituntil_clause( const CodeLocation &, ExpressionNode * when, ExpressionNode * targetExpr, StatementNode * stmt );103 ast::WaitUntilStmt::ClauseNode * build_waituntil_else( const CodeLocation &, ExpressionNode * when, StatementNode * stmt );104 ast::WaitUntilStmt::ClauseNode * build_waituntil_timeout( const CodeLocation &, ExpressionNode * when, ExpressionNode * timeout, StatementNode * stmt );105 ast::WaitUntilStmt * build_waituntil_stmt( const CodeLocation &, ast::WaitUntilStmt::ClauseNode * root );106 102 ast::Stmt * build_with( const CodeLocation &, ExpressionNode * exprs, StatementNode * stmt ); 107 103 ast::Stmt * build_mutex( const CodeLocation &, ExpressionNode * exprs, StatementNode * stmt ); -
src/Parser/lex.ll
r3982384 r6e4c44d 10 10 * Created On : Sat Sep 22 08:58:10 2001 11 11 * Last Modified By : Peter A. Buhr 12 * Last Modified On : Tue May 2 08:45:21202313 * Update Count : 76 912 * Last Modified On : Sat Mar 25 08:09:03 2023 13 * Update Count : 768 14 14 */ 15 15 … … 258 258 enable { KEYWORD_RETURN(ENABLE); } // CFA 259 259 enum { KEYWORD_RETURN(ENUM); } 260 __extension__ { KEYWORD_RETURN(EXTENSION); } // GCC 260 261 exception { KEYWORD_RETURN(EXCEPTION); } // CFA 261 __extension__ { KEYWORD_RETURN(EXTENSION); } // GCC262 262 extern { KEYWORD_RETURN(EXTERN); } 263 263 fallthrough { KEYWORD_RETURN(FALLTHROUGH); } // CFA -
src/Parser/parser.yy
r3982384 r6e4c44d 307 307 ClauseNode * clause; 308 308 ast::WaitForStmt * wfs; 309 ast::WaitUntilStmt::ClauseNode * wucn;310 309 CondCtl * ifctl; 311 310 ForCtrl * forctl; … … 428 427 %type<expr> when_clause when_clause_opt waitfor waituntil timeout 429 428 %type<stmt> waitfor_statement waituntil_statement 430 %type<wfs> wor_waitfor_clause 431 %type<wucn> waituntil_clause wand_waituntil_clause wor_waituntil_clause 429 %type<wfs> wor_waitfor_clause waituntil_clause wand_waituntil_clause wor_waituntil_clause 432 430 433 431 // declarations … … 1687 1685 waituntil_clause: 1688 1686 when_clause_opt waituntil statement 1689 { $$ = build_waituntil_clause( yylloc, $1, $2, maybe_build_compound( yylloc, $3 ) ); }1687 { printf( "waituntil_clause 1\n" ); $$ = nullptr; } 1690 1688 | '(' wor_waituntil_clause ')' 1691 { $$ = $2; }1689 { printf( "waituntil_clause 2\n" ); $$ = nullptr; } 1692 1690 ; 1693 1691 1694 1692 wand_waituntil_clause: 1695 1693 waituntil_clause %prec THEN 1696 { $$ = $1; }1694 { printf( "wand_waituntil_clause 1\n" ); $$ = nullptr; } 1697 1695 | waituntil_clause wand wand_waituntil_clause 1698 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::AND, $1, $3 ); }1696 { printf( "wand_waituntil_clause 2\n" ); $$ = nullptr; } 1699 1697 ; 1700 1698 1701 1699 wor_waituntil_clause: 1702 1700 wand_waituntil_clause 1703 { $$ = $1; }1701 { printf( "wor_waituntil_clause 1\n" ); $$ = nullptr; } 1704 1702 | wor_waituntil_clause wor wand_waituntil_clause 1705 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::OR, $1, $3 ); }1703 { printf( "wor_waituntil_clause 2\n" ); $$ = nullptr; } 1706 1704 | wor_waituntil_clause wor when_clause_opt ELSE statement 1707 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::LEFT_OR, $1, build_waituntil_else( yylloc, $3, maybe_build_compound( yylloc, $5 ) ) ); }1705 { printf( "wor_waituntil_clause 3\n" ); $$ = nullptr; } 1708 1706 | wor_waituntil_clause wor when_clause_opt timeout statement %prec THEN 1709 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::LEFT_OR, $1, build_waituntil_timeout( yylloc, $3, $4, maybe_build_compound( yylloc, $5 ) ) ); }1707 { printf( "wor_waituntil_clause 4\n" ); $$ = nullptr; } 1710 1708 // "else" must be conditional after timeout or timeout is never triggered (i.e., it is meaningless) 1711 1709 | wor_waituntil_clause wor when_clause_opt timeout statement wor ELSE statement // syntax error 1712 1710 { SemanticError( yylloc, "else clause must be conditional after timeout or timeout never triggered." ); $$ = nullptr; } 1713 1711 | wor_waituntil_clause wor when_clause_opt timeout statement wor when_clause ELSE statement 1714 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::LEFT_OR, $1, 1715 new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::OR, 1716 build_waituntil_timeout( yylloc, $3, $4, maybe_build_compound( yylloc, $5 ) ), 1717 build_waituntil_else( yylloc, $7, maybe_build_compound( yylloc, $9 ) ) ) ); } 1712 { printf( "wor_waituntil_clause 6\n" ); $$ = nullptr; } 1718 1713 ; 1719 1714 … … 1721 1716 wor_waituntil_clause %prec THEN 1722 1717 // SKULLDUGGERY: create an empty compound statement to test parsing of waituntil statement. 1723 { 1724 $$ = new StatementNode( build_waituntil_stmt( yylloc, $1 ) ); 1725 // $$ = new StatementNode( build_compound( yylloc, nullptr ) ); 1726 } 1718 { $$ = new StatementNode( build_compound( yylloc, nullptr ) ); } 1727 1719 ; 1728 1720 -
src/ResolvExpr/Resolver.cc
r3982384 r6e4c44d 1730 1730 1731 1731 // Find all candidates for a function in canonical form 1732 funcFinder.find( clause.target , ResolvMode::withAdjustment() );1732 funcFinder.find( clause.target_func, ResolvMode::withAdjustment() ); 1733 1733 1734 1734 if ( funcFinder.candidates.empty() ) { 1735 1735 stringstream ss; 1736 1736 ss << "Use of undeclared indentifier '"; 1737 ss << clause.target .strict_as< ast::NameExpr >()->name;1737 ss << clause.target_func.strict_as< ast::NameExpr >()->name; 1738 1738 ss << "' in call to waitfor"; 1739 1739 SemanticError( stmt->location, ss.str() ); … … 1922 1922 auto clause2 = new ast::WaitForClause( clause.location ); 1923 1923 1924 clause2->target = funcCandidates.front()->expr;1924 clause2->target_func = funcCandidates.front()->expr; 1925 1925 1926 1926 clause2->target_args.reserve( clause.target_args.size() ); … … 1945 1945 1946 1946 // Resolve the conditions as if it were an IfStmt, statements normally 1947 clause2-> when_cond = findSingleExpression( clause.when_cond, context );1947 clause2->cond = findSingleExpression( clause.cond, context ); 1948 1948 clause2->stmt = clause.stmt->accept( *visitor ); 1949 1949 -
src/main.cc
r3982384 r6e4c44d 48 48 #include "Concurrency/Keywords.h" // for implementMutex, implement... 49 49 #include "Concurrency/Waitfor.h" // for generateWaitfor 50 #include "Concurrency/Waituntil.hpp" // for generateWaitUntil51 50 #include "ControlStruct/ExceptDecl.h" // for translateExcept 52 51 #include "ControlStruct/ExceptTranslate.h" // for translateThrows, translat... … … 341 340 PASS( "Implement Concurrent Keywords", Concurrency::implementKeywords, transUnit ); 342 341 PASS( "Forall Pointer Decay", Validate::decayForallPointers, transUnit ); 343 PASS( "Implement Waituntil", Concurrency::generateWaitUntil, transUnit );344 342 PASS( "Hoist Control Declarations", ControlStruct::hoistControlDecls, transUnit ); 345 343 -
tests/Makefile.am
r3982384 r6e4c44d 11 11 ## Created On : Sun May 31 09:08:15 2015 12 12 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Fri May 12 18:03:57202314 ## Update Count : 17613 ## Last Modified On : Mon Apr 10 23:24:02 2023 14 ## Update Count : 96 15 15 ############################################################################### 16 16 … … 22 22 DEFAULT_INCLUDES = -I${abs_srcdir} 23 23 24 debug ?= yes 25 installed ?= no 26 ARCH=${if ${arch},"--arch=${arch}"} 24 debug=yes 25 installed=no 27 26 archiveerrors= 28 27 … … 38 37 # applies to both programs 39 38 # since automake doesn't have support for CFA we have to 40 AM_CFLAGS = $ {if ${test}, 2> ${test}, }\41 -fdebug-prefix-map=$ {abspath ${abs_srcdir}}= \39 AM_CFLAGS = $(if $(test), 2> $(test), ) \ 40 -fdebug-prefix-map=$(abspath ${abs_srcdir})= \ 42 41 -fdebug-prefix-map=/tmp= \ 43 42 -fno-diagnostics-show-caret \ … … 52 51 53 52 # get the desired cfa to test 54 TARGET_CFA = $ {if ${filter ${installed},yes}, @CFACC_INSTALL@, @CFACC@}53 TARGET_CFA = $(if $(filter $(installed),yes), @CFACC_INSTALL@, @CFACC@) 55 54 56 55 # adjust CC to current flags 57 CC = LC_ALL=C $ {if ${DISTCC_CFA_PATH},distcc ${DISTCC_CFA_PATH} ${ARCH_FLAGS} ,${TARGET_CFA} ${DEBUG_FLAGS} ${ARCH_FLAGS}}58 CFACC = $ {CC}56 CC = LC_ALL=C $(if $(DISTCC_CFA_PATH),distcc $(DISTCC_CFA_PATH) ${ARCH_FLAGS} ,$(TARGET_CFA) ${DEBUG_FLAGS} ${ARCH_FLAGS}) 57 CFACC = $(CC) 59 58 60 59 # get local binary for depedencies … … 62 61 63 62 # adjusted CC but without the actual distcc call 64 CFACCLOCAL = $ {if ${DISTCC_CFA_PATH},${DISTCC_CFA_PATH} ${ARCH_FLAGS} ,${TARGET_CFA} ${DEBUG_FLAGS} ${ARCH_FLAGS}}65 CFACCLINK = $ {CFACCLOCAL} -quiet ${if ${test}, 2> ${test}, } ${${shell echo "${@}_FLAGSLD" | sed 's/-\|\//_/g'}}66 67 PRETTY_PATH=mkdir -p $ {dir ${abspath ${@}}}&& cd ${srcdir} &&68 69 .PHONY : list .validate .test_makeflags70 .INTERMEDIATE : .validate .validate.cfa .test_makeflags63 CFACCLOCAL = $(if $(DISTCC_CFA_PATH),$(DISTCC_CFA_PATH) ${ARCH_FLAGS} ,$(TARGET_CFA) ${DEBUG_FLAGS} ${ARCH_FLAGS}) 64 CFACCLINK = $(CFACCLOCAL) -quiet $(if $(test), 2> $(test), ) $($(shell echo "${@}_FLAGSLD" | sed 's/-\|\//_/g')) 65 66 PRETTY_PATH=mkdir -p $(dir $(abspath ${@})) && cd ${srcdir} && 67 68 .PHONY: list .validate .test_makeflags 69 .INTERMEDIATE: .validate .validate.cfa .test_makeflags 71 70 EXTRA_PROGRAMS = avl_test linkonce linking/mangling/anon .dummy_hack # build but do not install 72 71 EXTRA_DIST = test.py \ … … 96 95 for file in `${TEST_PY} --list-dist`; do \ 97 96 if test -f ${srcdir}/$${file}; then \ 98 $ {MKDIR_P}$$(dirname ${distdir}/$${file}); \97 $(MKDIR_P) $$(dirname ${distdir}/$${file}); \ 99 98 cp -df ${srcdir}/$${file} ${distdir}/$${file}; \ 100 99 fi; \ … … 108 107 109 108 #---------------------------------------------------------------------------------------------------------------- 110 111 all-local : # This name is important to automake and implies the default build target. 112 @+${TEST_PY} --debug=${debug} --install=${installed} --invariant --archive-errors=${archiveerrors} ${concurrent} ${timeouts} ${ARCH} --all # '@' => do not echo command (SILENT), '+' => allows recursive make from within python program 113 114 install : all-local # PAB only 115 116 tests : all-local 117 118 quick : 119 @+${TEST_PY} --debug=${debug} --install=${installed} --archive-errors=${archiveerrors} ${concurrent} ${timeouts} ${ARCH} ${quick_test} 120 121 concurrency : 122 @+${TEST_PY} --debug=${debug} --install=${installed} ${ARCH} -Iconcurrent 123 124 list : 125 @+${TEST_PY} --list ${concurrent} 126 127 help : 128 @echo "user targets:" 129 @echo " Run the complete test suite." 130 @echo " $$ make (null) / tests [debug=yes/no] [installed=yes/no] [arch=x86/x64/arm]" 131 @echo "" 132 @echo " Run the short (quick) test suite." 133 @echo " $$ make quick [debug=yes/no] [installed=yes/no] [arch=x86/x64/arm]" 134 @echo "" 135 @echo " Run the concurrent test suite." 136 @echo " $$ make concurrency [debug=yes/no] [installed=yes/no] [arch=x86/x64/arm]" 137 @echo "" 138 @echo " List all tests in the test suite." 139 @echo " $$ make list" 109 all-local : 110 @+${TEST_PY} --debug=${debug} --install=${installed} --archive-errors=${archiveerrors} ${concurrent} ${timeouts} ${quick_test} 111 112 all-tests : 113 @+${TEST_PY} --debug=${debug} --install=${installed} --archive-errors=${archiveerrors} ${concurrent} ${timeouts} --all # '@' => do not echo command (SILENT), '+' => allows recursive make from within python program 140 114 141 115 mostlyclean-local : … … 149 123 find ${builddir} -path '*.Po' -delete 150 124 125 list : 126 @+${TEST_PY} --list ${concurrent} 127 151 128 .test_makeflags: 152 129 @echo "${MAKEFLAGS}" 153 130 154 131 .validate: .validate.cfa 155 $ {CFACOMPILE}.validate.cfa -fsyntax-only -Wall -Wextra -Werror132 $(CFACOMPILE) .validate.cfa -fsyntax-only -Wall -Wextra -Werror 156 133 157 134 .validate.cfa: … … 165 142 @echo "int bar() { return 0; }" > ${@} 166 143 144 concurrency : 145 @+${TEST_PY} --debug=${debug} --install=${installed} -Iconcurrent 146 167 147 #---------------------------------------------------------------------------------------------------------------- 168 148 169 149 # Use for all tests, make sure the path are correct and all flags are added 170 CFACOMPILETEST=$ {PRETTY_PATH} ${CFACOMPILE} ${shell realpath --relative-to=${srcdir} ${<}} ${${shell echo "${@}_FLAGSCFA" | sed 's/-\|\//_/g'}}150 CFACOMPILETEST=$(PRETTY_PATH) $(CFACOMPILE) $(shell realpath --relative-to=${srcdir} ${<}) $($(shell echo "${@}_FLAGSCFA" | sed 's/-\|\//_/g')) 171 151 172 152 #---------------------------------------------------------------------------------------------------------------- … … 175 155 # split into two steps to support compiling remotely using distcc 176 156 # don't use distcc to do the linking because distcc doesn't do linking 177 % : %.cfa $ {CFACCBIN}178 $ {CFACOMPILETEST} -c -o ${abspath ${@}}.o -DIN_DIR="${abspath ${dir ${<}}}/.in/"179 $ {CFACCLINK} ${@}.o -o ${abspath ${@}}180 rm $ {abspath ${@}}.o157 % : %.cfa $(CFACCBIN) 158 $(CFACOMPILETEST) -c -o $(abspath ${@}).o -DIN_DIR="$(abspath $(dir ${<}))/.in/" 159 $(CFACCLINK) ${@}.o -o $(abspath ${@}) 160 rm $(abspath ${@}).o 181 161 182 162 # implicit rule for c++ test 183 163 # convient for testing the testsuite itself but not actuall used 184 164 % : %.cpp 185 $ {PRETTY_PATH} ${CXXCOMPILE} ${shell realpath --relative-to=${srcdir} ${<}} -o ${abspath ${@}}165 $(PRETTY_PATH) $(CXXCOMPILE) $(shell realpath --relative-to=${srcdir} ${<}) -o $(abspath ${@}) 186 166 187 167 #------------------------------------------------------------------------------ … … 194 174 # Generated code 195 175 GENERATED_CODE = declarationSpecifier gccExtensions extension attributes functions KRfunctions 196 $ {GENERATED_CODE} : % : %.cfa ${CFACCBIN}197 $ {CFACOMPILETEST} -CFA -XCFA -p -c -fsyntax-only -o ${abspath ${@}}176 $(GENERATED_CODE): % : %.cfa $(CFACCBIN) 177 $(CFACOMPILETEST) -CFA -XCFA -p -c -fsyntax-only -o $(abspath ${@}) 198 178 199 179 #------------------------------------------------------------------------------ … … 201 181 #------------------------------------------------------------------------------ 202 182 # tests that just validate syntax and compiler output should be compared to stderr 203 CFACOMPILE_SYNTAX = $ {CFACOMPILETEST} -Wno-unused-variable -Wno-unused-label -c -fsyntax-only -o ${abspath ${@}}183 CFACOMPILE_SYNTAX = $(CFACOMPILETEST) -Wno-unused-variable -Wno-unused-label -c -fsyntax-only -o $(abspath ${@}) 204 184 205 185 SYNTAX_ONLY_CODE = expression typedefRedef variableDeclarator switch numericConstants identFuncDeclarator \ 206 186 init1 limits nested-types cast labelledExit array quasiKeyword include/stdincludes include/includes builtins/sync warnings/self-assignment concurrent/waitfor/parse 207 $ {SYNTAX_ONLY_CODE} : % : %.cfa ${CFACCBIN}208 $ {CFACOMPILE_SYNTAX}209 $ {if ${test}, cp ${test} ${abspath ${@}}, }187 $(SYNTAX_ONLY_CODE): % : %.cfa $(CFACCBIN) 188 $(CFACOMPILE_SYNTAX) 189 $(if $(test), cp $(test) $(abspath ${@}), ) 210 190 211 191 # expected failures 212 192 # use custom target since they require a custom define *and* have a name that doesn't match the file 213 alloc-ERROR : alloc.cfa $ {CFACCBIN}214 $ {CFACOMPILE_SYNTAX}-DERR1215 -cp $ {test} ${abspath ${@}}216 217 init1-ERROR : init1.cfa $ {CFACCBIN}218 $ {CFACOMPILE_SYNTAX}-DERR1219 -cp $ {test} ${abspath ${@}}220 221 typedefRedef-ERR1 : typedefRedef.cfa $ {CFACCBIN}222 $ {CFACOMPILE_SYNTAX}-DERR1223 -cp $ {test} ${abspath ${@}}224 225 nested-types-ERR1 : nested-types.cfa $ {CFACCBIN}226 $ {CFACOMPILE_SYNTAX}-DERR1227 -cp $ {test} ${abspath ${@}}228 229 nested-types-ERR2 : nested-types.cfa $ {CFACCBIN}230 $ {CFACOMPILE_SYNTAX}-DERR2231 -cp $ {test} ${abspath ${@}}232 233 raii/memberCtors-ERR1 : raii/memberCtors.cfa $ {CFACCBIN}234 $ {CFACOMPILE_SYNTAX}-DERR1235 -cp $ {test} ${abspath ${@}}236 237 raii/ctor-autogen-ERR1 : raii/ctor-autogen.cfa $ {CFACCBIN}238 $ {CFACOMPILE_SYNTAX}-DERR1239 -cp $ {test} ${abspath ${@}}240 241 raii/dtor-early-exit-ERR1 : raii/dtor-early-exit.cfa $ {CFACCBIN}242 $ {CFACOMPILE_SYNTAX}-DERR1243 -cp $ {test} ${abspath ${@}}244 245 raii/dtor-early-exit-ERR2 : raii/dtor-early-exit.cfa $ {CFACCBIN}246 $ {CFACOMPILE_SYNTAX}-DERR2247 -cp $ {test} ${abspath ${@}}193 alloc-ERROR : alloc.cfa $(CFACCBIN) 194 $(CFACOMPILE_SYNTAX) -DERR1 195 -cp $(test) $(abspath ${@}) 196 197 init1-ERROR : init1.cfa $(CFACCBIN) 198 $(CFACOMPILE_SYNTAX) -DERR1 199 -cp $(test) $(abspath ${@}) 200 201 typedefRedef-ERR1 : typedefRedef.cfa $(CFACCBIN) 202 $(CFACOMPILE_SYNTAX) -DERR1 203 -cp $(test) $(abspath ${@}) 204 205 nested-types-ERR1 : nested-types.cfa $(CFACCBIN) 206 $(CFACOMPILE_SYNTAX) -DERR1 207 -cp $(test) $(abspath ${@}) 208 209 nested-types-ERR2 : nested-types.cfa $(CFACCBIN) 210 $(CFACOMPILE_SYNTAX) -DERR2 211 -cp $(test) $(abspath ${@}) 212 213 raii/memberCtors-ERR1 : raii/memberCtors.cfa $(CFACCBIN) 214 $(CFACOMPILE_SYNTAX) -DERR1 215 -cp $(test) $(abspath ${@}) 216 217 raii/ctor-autogen-ERR1 : raii/ctor-autogen.cfa $(CFACCBIN) 218 $(CFACOMPILE_SYNTAX) -DERR1 219 -cp $(test) $(abspath ${@}) 220 221 raii/dtor-early-exit-ERR1 : raii/dtor-early-exit.cfa $(CFACCBIN) 222 $(CFACOMPILE_SYNTAX) -DERR1 223 -cp $(test) $(abspath ${@}) 224 225 raii/dtor-early-exit-ERR2 : raii/dtor-early-exit.cfa $(CFACCBIN) 226 $(CFACOMPILE_SYNTAX) -DERR2 227 -cp $(test) $(abspath ${@}) 248 228 249 229 # Exception Tests 250 230 # Test with libcfathread; it changes how storage works. 251 231 252 exceptions/%-threads : exceptions/%.cfa $ {CFACCBIN}253 $ {CFACOMPILETEST} -include exceptions/with-threads.hfa -c -o ${abspath ${@}}.o254 $ {CFACCLOCAL} ${${shell echo "${@}_FLAGSLD" | sed 's/-\|\//_/g'}} ${abspath ${@}}.o -o ${abspath ${@}}232 exceptions/%-threads : exceptions/%.cfa $(CFACCBIN) 233 $(CFACOMPILETEST) -include exceptions/with-threads.hfa -c -o $(abspath ${@}).o 234 $(CFACCLOCAL) $($(shell echo "${@}_FLAGSLD" | sed 's/-\|\//_/g')) $(abspath ${@}).o -o $(abspath ${@}) 255 235 256 236 # Linking tests 257 237 # Meta tests to make sure we see linking errors (can't compile with -O2 since it may multiply number of calls) 258 linking/linkerror : linking/linkerror.cfa $ {CFACCBIN}259 $ {CFACOMPILETEST} -O0 -c -o ${abspath ${@}}.o260 $ {CFACCLINK} -O0 ${@}.o -o ${abspath ${@}}261 rm $ {abspath ${@}}.o238 linking/linkerror : linking/linkerror.cfa $(CFACCBIN) 239 $(CFACOMPILETEST) -O0 -c -o $(abspath ${@}).o 240 $(CFACCLINK) -O0 ${@}.o -o $(abspath ${@}) 241 rm $(abspath ${@}).o 262 242 263 243 #------------------------------------------------------------------------------ -
tests/concurrent/futures/select_future.cfa
r3982384 r6e4c44d 196 196 delete( shared_future ); 197 197 printf( "done 3\n" ); 198 } 198 199 // C_TODO: add test for select statement once it is implemented 200 }
Note:
See TracChangeset
for help on using the changeset viewer.