Changes in / [044ae62:3a513d89]
- Files:
-
- 8 added
- 306 deleted
- 68 edited
Legend:
- Unmodified
- Added
- Removed
-
Jenkins/FullBuild
r044ae62 r3a513d89 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 // 45 // 43 //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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 11 11 ## Created On : Sun May 31 22:14:18 2015 12 12 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Wed May 17 11:02:34 202314 ## Update Count : 5613 ## 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 ?= yes 40 installed ?= no 41 ARCH = ${if ${arch},"arch=${arch}"} 42 arch_support = "x86/x64/arm" 39 debug=yes 40 check: 41 $(MAKE) -C tests all-tests installed=no debug=${debug} 43 42 44 # target "all" created by automake 43 installcheck: 44 $(MAKE) -C tests all-tests installed=yes debug=${debug} 45 45 46 c heck :47 ${MAKE} -C tests tests installed=${installed} debug=${debug} ${ARCH}46 configure-libcfa: @LIBCFA_TARGET_MAKEFILES@ 47 @true 48 48 49 tests : check # synonym 50 51 installcheck : 52 ${MAKE} -C tests tests installed=yes debug=${debug} ${ARCH} 53 54 installtest : installcheck # synonym 55 56 status : @LIBCFA_TARGET_MAKEFILES@ 49 status: @LIBCFA_TARGET_MAKEFILES@ 57 50 @echo -ne "translator\n\t" 58 51 @./config.status --config | sed "s/ /\n\t/g; s/\t'/\t/g; s/'\n/\n/g; s/^'//g; s/'$$//g" 59 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" 60 53 61 help : 62 @echo "user targets:" 63 @echo " Compile compiler/runtime." 64 @echo " $$ make (null) / all" 65 @echo "" 66 @echo " Compile compiler/runtime and run test suite." 67 @echo " $$ make check / tests [debug=yes/no] [installed=yes/no] [arch=${arch_support}]" 68 @echo "" 69 @echo " Compile compiler/runtime, install, and run test suite on installed system." 70 @echo " $$ make installcheck / installtests [debug=yes/no] installed=yes [arch=${arch_support}]" 71 @echo "" 72 @echo " Print configuration parameters and system build information." 73 @echo " $$ make status" 54 @LIBCFA_TARGET_DIRS@:: 55 $(MAKE) -C $@ $(MAKECMDGOALS) 74 56 75 configure-libcfa : @LIBCFA_TARGET_MAKEFILES@ 76 @true 77 78 @LIBCFA_TARGET_DIRS@ :: 79 ${MAKE} -C ${@} ${MAKECMDGOALS} 80 81 mostlyclean clean distclean maintainer-clean : @LIBCFA_TARGET_DIRS@ 57 mostlyclean clean distclean maintainer-clean: @LIBCFA_TARGET_DIRS@ -
configure.ac
r044ae62 r3a513d89 47 47 48 48 #============================================================================== 49 # HACK to be able to use condition als inside makefiles49 # HACK to be able to use conditionnals inside makefiles 50 50 DOifskipcompile='ifeq ($(skipcompile),yes) 51 51 else' -
doc/LaTeXmacros/lstlang.sty
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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 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
r044ae62 r3a513d89 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 \ 24 text/waituntil \ 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 \ 25 23 } 26 24 27 FIGURES = ${addsuffix .pgf, \28 figures/pykeExecutor \29 figures/pykeCFAExecutor \30 figures/nasusExecutor \31 figures/nasusCFAExecutor \32 figures/pykeMatrix \33 figures/pykeCFAMatrix \34 figures/nasusMatrix \35 figures/nasusCFAMatrix \36 figures/pykeRepeat \37 figures/pykeCFARepeat \38 figures/nasusRepeat \39 figures/nasusCFARepeat \40 figures/pykeCFABalance-One \41 figures/nasusCFABalance-One \42 figures/pykeCFABalance-Multi \43 figures/nasusCFABalance-Multi \44 figures/pyke_Aggregate_Lock_2 \45 figures/pyke_Aggregate_Lock_4 \46 figures/pyke_Aggregate_Lock_8 \47 figures/nasus_Aggregate_Lock_2 \48 figures/nasus_Aggregate_Lock_4 \49 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 \ 50 48 figures/nasus_Channel_Contention \ 51 49 figures/pyke_Channel_Contention \ 52 50 } 53 51 54 DATA = data/pykeSendStatic 55 data/pykeSendDynamic\56 data/pykeExecutorMem\57 data/nasusSendStatic\58 data/nasusSendDynamic\59 data/pykeExecutorMem\52 DATA = data/pykeSendStatic \ 53 data/pykeSendDynamic \ 54 data/pykeExecutorMem \ 55 data/nasusSendStatic \ 56 data/nasusSendDynamic \ 57 data/pykeExecutorMem \ 60 58 61 PICTURES = ${addsuffix .tikz, \62 diagrams/standard_actor \63 diagrams/inverted_actor \64 diagrams/gulp \65 diagrams/chain_swap \66 diagrams/M_to_one_swap \67 diagrams/acyclic_swap \68 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 \ 69 67 } 70 68 … … 107 105 # Make index from *.aux entries and input index at end of document 108 106 makeglossaries -q -s ${Build}/${basename $@}.ist ${Build}/${basename $@} 107 -version.sh 109 108 # Run again to finish citations 110 109 ${LaTeX} ${basename $@}.tex 110 111 111 112 112 ## Define the default recipes. -
doc/theses/colby_parsons_MMAth/benchmarks/actors/data/nasus_CFA.txt
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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/glossary.tex
r044ae62 r3a513d89 60 60 description={An implementation of the actor model.} 61 61 } 62 63 \newglossaryentry{synch_multiplex}64 {65 name=synchronous multiplexing,66 description={synchronization on some subset of a set of resources.}67 } -
doc/theses/colby_parsons_MMAth/local.bib
r044ae62 r3a513d89 55 55 url={http://hdl.handle.net/10012/17617} 56 56 } 57 58 @article{Roscoe88,59 title={The laws of occam programming},60 author={Roscoe, Andrew William and Hoare, Charles Antony Richard},61 journal={Theoretical Computer Science},62 volume={60},63 number={2},64 pages={177--229},65 year={1988},66 publisher={Elsevier}67 }68 69 @article{Pike84,70 title={The UNIX system: The blit: A multiplexed graphics terminal},71 author={Pike, Rob},72 journal={AT\&T Bell Laboratories Technical Journal},73 volume={63},74 number={8},75 pages={1607--1631},76 year={1984},77 publisher={Nokia Bell Labs}78 }79 80 @inproceedings{Dice11,81 title={Brief announcement: multilane-a concurrent blocking multiset},82 author={Dice, David and Otenko, Oleksandr},83 booktitle={Proceedings of the twenty-third annual ACM symposium on Parallelism in algorithms and architectures},84 pages={313--314},85 year={2011}86 }87 88 @misc{go:chan,89 author = "The Go Programming Language",90 title = "src/runtime/chan.go",91 howpublished = {\href{https://go.dev/src/runtime/chan.go}},92 note = "[Online; accessed 23-May-2023]"93 }94 95 @misc{go:select,96 author = "The Go Programming Language",97 title = "src/runtime/chan.go",98 howpublished = {\href{https://go.dev/src/runtime/select.go}},99 note = "[Online; accessed 23-May-2023]"100 }101 -
doc/theses/colby_parsons_MMAth/style/style.tex
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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 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 both the sender and receiver to explicitly name the process that is the 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. 17 Additionally all channel operations in CSP are synchronous (no buffering). 18 Advanced channels as a programming language feature has been popularized in recent years by the language Go~\cite{Go}, which encourages the use of channels as its fundamental concurrent feature. 19 It was the popularity of Go channels that lead to their implemention in \CFA. 20 Neither Go nor \CFA channels have the restrictions of the early channel-based concurrent systems. 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 ... 18 \CFA channels do not have these restrictions. 21 19 22 20 \section{Producer-Consumer Problem} 23 A channel is an abstraction for a shared-memory buffer, which 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~\cite[\S~4.1]{Dijkstra65}. 25 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. 26 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). 27 As well, a buffer needs protection from concurrent access by multiple producers or consumers attempting to insert or remove simultaneously (MX). 28 29 \section{Channel Size}\label{s:ChannelSize} 30 Channels come in three flavours of buffers: 31 \begin{enumerate} 32 \item 33 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. 34 \item 35 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. 36 \item 37 Infinite sized (unbounded) implies the communication is asynchronous, \ie the producer never waits but the consumer waits when the buffer is empty. 38 Since memory is finite, all unbounded buffers are ultimately bounded; 39 this restriction must be part of its implementation. 40 \end{enumerate} 41 42 In general, the order values are processed by the consumer does not affect the correctness of the producer-consumer problem. 43 For example, the buffer can be LIFO, FIFO, or prioritized with respect to insertion and removal. 44 However, like MX, a buffer should ensure every value is eventually removed after some reasonable bounded time (no long-term starvation). 45 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. 46 28 47 29 \section{First-Come First-Served} 48 As pointed out, a bounded buffer requires MX among multiple producers or consumers. 49 This MX should be fair among threads, independent of the FIFO buffer being fair among values. 50 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}. 51 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. 52 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. 53 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. 54 55 \gls{fcfs} is a fairness property that prevents unequal access to the shared resource and prevents starvation, however it comes at a cost. 56 Implementing an algorithm with \gls{fcfs} can lead to \Newterm{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. 57 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). 58 As such, algorithms that are not \gls{fcfs} (barging) can be more performant by skipping the wait for the CS and entering directly; 59 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. 60 37 61 38 \section{Channel Implementation} 62 Currently, only the Go programming language provides user-level threading where the primary communication mechanism is channels. 63 Experiments were conducted that varied the producer-consumer problem algorithm and lock type used inside the channel. 64 With the exception of non-\gls{fcfs} or non-FIFO 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. 65 Performance of channels can be improved by sharding the underlying buffer \cite{Dice11}. 66 In doing so the FIFO property is lost, which is undesireable for user-facing channels. 67 Therefore, the low-level channel implementation in \CFA is largely copied from the Go implementation, but adapted to the \CFA type and runtime systems. 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. 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. 68 42 As such the research contributions added by \CFA's channel implementation lie in the realm of safety and productivity features. 69 70 The Go channel implementation utilitizes cooperation between threads to achieve good performance~\cite{go:chan}.71 The cooperation between threads only occurs when producers or consumers need to block due to the buffer being full or empty.72 In these cases the blocking thread stores their relevant data in a shared location and the signalling thread will complete their operation before waking them.73 This helps improve performance in a few ways.74 First, each thread interacting with the channel with only acquire and release the internal channel lock exactly once.75 This decreases contention on the internal lock, as only entering threads will compete for the lock since signalled threads never reacquire the lock.76 The other advantage of the cooperation approach is that it eliminates the potential bottleneck of waiting for signalled threads.77 The property of acquiring/releasing the lock only once can be achieved without cooperation by \Newterm{baton passing} the lock.78 Baton passing is when one thread acquires a lock but does not release it, and instead signals a thread inside the critical section conceptually "passing" the mutual exclusion to the signalled thread.79 While baton passing is useful in some algorithms, it results in worse performance than the cooperation approach in channel implementations since all entering threads then need to wait for the blocked thread to reach the front of the ready queue and run before other operations on the channel can proceed.80 81 In this work, all channel sizes \see{Sections~\ref{s:ChannelSize}} are implemented with bounded buffers.82 However, only non-zero-sized buffers are analysed because of their complexity and higher usage.83 43 84 44 \section{Safety and Productivity} … … 87 47 88 48 \begin{itemize} 89 \item Toggle-able statistic collection on channel behaviour that count channel and blocking operations. 90 Tracking blocking operations helps illustrate usage for tuning the channel size, where the aim is to reduce blocking. 91 92 \item Deadlock detection on channel deallocation. 93 If threads are blocked inside a channel when it terminates, this case is detected and the user is informed, as this can cause a deadlock. 94 95 \item A @flush@ routine that delivers copies of an element to all waiting consumers, flushing the buffer. 96 Programmers use this mechanism to broadcast a sentinel value to multiple consumers. 97 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. 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. 51 \item Deadlock detection on deallocation of the channel. 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. 54 Programmers can use this to easily to broadcast data to multiple consumers. 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. 98 56 \end{itemize} 99 57 100 \subsection{Toggle-able Statistics} 101 As discussed, a channel is a concurrent layer over a bounded buffer. 102 To achieve efficient buffering users should aim for as few blocking operations on a channel as possible. 103 Often to achieve this users may change the buffer size, shard a channel into multiple channels, or tweak the number of producer and consumer threads. 104 Fo users to be able to make informed decisions when tuning channel usage, toggle-able channel statistics are provided. 105 The statistics are toggled at compile time via the @CHAN_STATS@ macro to ensure that they are entirely elided when not used. 106 When statistics are turned on, four counters are maintained per channel, two for producers and two for consumers. 107 The two counters per type of operation track the number of blocking operations and total operations. 108 In the channel destructor the counters are printed out aggregated and also per type of operation. 109 An example use case of the counters follows. 110 A user is buffering information between producer and consumer threads and wants to analyze channel performance. 111 Via the statistics they see that producers block for a large percentage of their operations while consumers do not block often. 112 They then can use this information to adjust their number of producers/consumers or channel size to achieve a larger percentage of non-blocking producer operations, thus increasing their channel throughput. 113 114 \subsection{Deadlock Detection} 115 The deadlock detection in the \CFA channels is fairly basic. 116 It only detects the case where threads are blocked on the channel during deallocation. 117 This case is guaranteed to deadlock since the list holding the blocked thread is internal to the channel and will be deallocated. 118 If a user maintained a separate reference to a thread and unparked it outside the channel they could avoid the deadlock, but would run into other runtime errors since the thread would access channel data after waking that is now deallocated. 119 More robust deadlock detection surrounding channel usage would have to be implemented separate from the channel implementation since it would require knowledge about the threading system and other channel/thread state. 120 121 \subsection{Program Shutdown} 58 The other safety and productivity feature of \CFA channels deals with concurrent termination. 122 59 Terminating concurrent programs is often one of the most difficult parts of writing concurrent code, particularly if graceful termination is needed. 123 The difficulty of graceful termination often arises from the usage of synchronization primitives thatneed to be handled carefully during shutdown.60 The difficulty of graceful termination often arises from the usage of synchronization primitives which need to be handled carefully during shutdown. 124 61 It is easy to deadlock during termination if threads are left behind on synchronization primitives. 125 62 Additionally, most synchronization primitives are prone to \gls{toctou} issues where there is race between one thread checking the state of a concurrent object and another thread changing the state. 126 63 \gls{toctou} issues with synchronization primitives often involve a race between one thread checking the primitive for blocked threads and another thread blocking on it. 127 Channels are a particularly hard synchronization primitive to terminate since both sending and receiving to/froma channel can block.64 Channels are a particularly hard synchronization primitive to terminate since both sending and receiving off a channel can block. 128 65 Thus, improperly handled \gls{toctou} issues with channels often result in deadlocks as threads trying to perform the termination may end up unexpectedly blocking in their attempt to help other threads exit the system. 129 66 130 \paragraph{Go channels} provide a set of tools to help with concurrent shutdown~\cite{go:chan}. 131 Channels in Go have a @close@ operation and a \Go{select} statement that both can be used to help threads terminate. 132 The \Go{select} statement is discussed in \ref{s:waituntil}, where \CFA's @waituntil@ statement is compared with the Go \Go{select} statement. 133 134 The @close@ operation on a channel in Go changes the state of the channel. 135 When a channel is closed, sends to the channel panic along with additional calls to @close@. 136 Receives are handled differently. 137 Receivers (consumers) never block on a closed channel and continue to remove elements from the channel. 138 Once a channel is empty, receivers can continue to remove elements, but receive the zero-value version of the element type. 139 To avoid unwanted zero-value elements, Go provides the ability to iterate over a closed channel to remove the remaining elements. 140 These Go design choices enforce a specific interaction style with channels during termination: careful thought is needed to ensure additional @close@ calls do not occur and no sends occur after a channel is closed. 67 % C_TODO: add reference to select chapter, add citation to go channels info 68 Go channels provide a set of tools to help with concurrent shutdown. 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. 73 Receives are handled differently where receivers will never block on a closed channel and will continue to remove elements from the channel. 74 Once a channel is empty, receivers can continue to remove elements, but will receive the zero-value version of the element type. 75 To aid in avoiding unwanted zero-value elements, Go provides the ability to iterate over a closed channel to remove the remaining elements. 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. 141 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. 142 If errors need to occur in Go, return codes are used to pass error information up call levels.143 Note , panics in Go can be caught, but it is not theidiomatic way to write Go programs.78 If errors need to occur in Go, return codes are used to pass error information where they are needed. 79 Note that panics in Go can be caught, but it is not considered an idiomatic way to write Go programs. 144 80 145 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. 146 Since both closing and sending panic once a channel is closed, a user often has to synchronize the senders (producers)before the channel can be closed to avoid panics.147 However, in doing so it renders the @close@ operation nearly useless, as the only utilities it provides are the ability to ensure receivers no longer block on the channel andreceive zero-valued elements.148 This functionality is only useful if the zero-typed element is recognized as a sentinel value, but if another sentinel value is necessary, then @close@ only provides thenon-blocking feature.149 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.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. 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. 150 86 Due to Go's asymmetric approach to channel shutdown, separate synchronization between producers and consumers of a channel has to occur during shutdown. 151 87 152 \paragraph{\CFA channels} have access to an extensive exception handling mechanism~\cite{Beach21}. 153 As such \CFA uses an exception-based approach to channel shutdown that is symmetric for both producers and consumers, and supports graceful shutdown. 154 155 Exceptions in \CFA support both termination and resumption. 156 \Newterm{Termination exception}s perform a dynamic call that unwinds the stack preventing the exception handler from returning to the raise point, such as in \CC, Python and Java. 157 \Newterm{Resumption exception}s perform a dynamic call that does not unwind the stack allowing the exception handler to return to the raise point. 158 In \CFA, if a resumption exception is not handled, it is reraised as a termination exception. 159 This mechanism is used to create a flexible and robust termination system for channels. 160 161 When a channel in \CFA is closed, all subsequent calls to the channel raise a resumption exception at the caller. 162 If the resumption is handled, the caller attempts to complete the channel operation. 163 However, if channel operation would block, a termination exception is thrown. 164 If the resumption is not handled, the exception is rethrown as a termination. 165 These termination exceptions allow for non-local transfer that is used to great effect to eagerly and gracefully shut down a thread. 88 In \CFA, exception handling is an encouraged paradigm and has full language support \cite{Beach21}. 89 As such \CFA uses an exception based approach to channel shutdown that is symmetric for both producers and consumers, and supports graceful shutdown.Exceptions in \CFA support both termination and resumption.Termination exceptions operate in the same way as exceptions seen in many popular programming languages such as \CC, Python and Java. 90 Resumption exceptions are a style of exception that when caught run the corresponding catch block in the same way that termination exceptions do. 91 The difference between the exception handling mechanisms arises after the exception is handled. 92 In termination handling, the control flow continues into the code following the catch after the exception is handled. 93 In resumption handling, the control flow returns to the site of the \code{throw}, allowing the control to continue where it left off. 94 Note that in resumption, since control can return to the point of error propagation, the stack is not unwound during resumption propagation. 95 In \CFA if a resumption is not handled, it is reraised as a termination. 96 This mechanism can be used to create a flexible and robust termination system for channels. 97 98 When a channel in \CFA is closed, all subsequent calls to the channel will throw a resumption exception at the caller. 99 If the resumption is handled, then the caller will proceed to attempt to complete their operation. 100 If the resumption is not handled it is then rethrown as a termination exception. 101 Or, if the resumption is handled, but the subsequent attempt at an operation would block, a termination exception is thrown. 102 These termination exceptions allow for non-local transfer that can be used to great effect to eagerly and gracefully shut down a thread. 166 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. 167 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. 168 105 The exception contains a pointer to the channel it was thrown from, and a pointer to an element. 169 106 In exceptions thrown from remove the element pointer will be null. … … 175 112 This should not be an issue, since termination is rarely an fast-path of an application and ensuring that termination can be implemented correctly with ease is the aim of the exception approach. 176 113 177 \section{\CFA / Go channel Examples} 178 To highlight the differences between \CFA's and Go's close semantics, three examples will be presented. 179 The first example is a simple shutdown case, where there are producer threads and consumer threads operating on a channel for a fixed duration. 180 Once the duration ends, producers and consumers terminate without worrying about any leftover values in the channel. 181 The second example extends the first example by requiring the channel to be empty upon shutdown. 182 Both the first and second example are shown in Figure~\ref{f:ChannelTermination}. 183 184 185 First the Go solutions to these examples shown in Figure~\ref{l:go_chan_term} are discussed. 186 Since some of the elements being passed through the channel are zero-valued, closing the channel in Go does not aid in communicating shutdown. 187 Instead, a different mechanism to communicate with the consumers and producers needs to be used. 114 To highlight the differences between \CFA's and Go's close semantics, an example program is presented. 115 The program is a barrier implemented using two channels shown in Listings~\ref{l:cfa_chan_bar} and \ref{l:go_chan_bar}. 116 Both of these examples are implemented using \CFA syntax so that they can be easily compared. 117 Listing~\ref{l:go_chan_bar} uses go-style channel close semantics and Listing~\ref{l:cfa_chan_bar} uses \CFA close semantics. 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. 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. 120 This sentinel value has to be checked at two points. 121 Furthermore, an additional flag \code{done} is needed to communicate to threads once they have left the barrier that they are done. 188 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. 189 In this example, a flag is used to communicate with producers and another flag is used for consumers.190 Producers and consumers need separate avenues of communication both so that producers terminate before the channel is closed to avoid panicking, and to avoid the case where all the consumers terminate first, which can result in a deadlock for producers if the channel is full.191 The producer flag is set first, then after producers terminate the consumer flag is set and the channel is closed.192 In the second example where all values need to be consumed, the main thread iterates over the closed channel to process any remaining values.193 194 195 In the \CFA solutions in Figure~\ref{l:cfa_chan_term}, shutdown is communicated directly to both producers and consumers via the @close@ call.196 In the first example where all values do not need to be consumed, both producers and consumers do not handle the resumption and finish once they receive the termination exception.197 The second \CFA example where all values must be consumed highlights how resumption is used with channel shutdown.198 The @Producer@ thread-main knows to stop producing when the @insert@ call on a closed channel raises exception @channel_closed@.199 The @Consumer@ thread-main knows to stop consuming after all elements of a closed channel are removed and the call to @remove@ would block.200 Hence, the consumer knows the moment the channel closes because a resumption exception is raised, caught, and ignored, and then control returns to @remove@ to return another item from the buffer.201 Only when the buffer is drained and the call to @remove@ would block, a termination exception is raised to stop consuming.202 The \CFA semantics allow users to communicate channel shutdown directly through the channel, without having to share extra state between threads.203 Additionally, when the channel needs to be drained, \CFA provides users with easy options for processing the leftover channel values in the main thread or in the consumer threads.204 If one wishes to consume the leftover values in the consumer threads in Go, extra synchronization between the main thread and the consumer threads is needed.205 206 \begin{figure}207 \centering208 209 \begin{lrbox}{\myboxA}210 \begin{cfa}[aboveskip=0pt,belowskip=0pt]211 channel( size_t ) Channel{ ChannelSize };212 213 thread Consumer {};214 void main( Consumer & this ) {215 try {216 for ( ;; )217 remove( Channel );218 @} catchResume( channel_closed * ) { @219 // handled resume => consume from chan220 } catch( channel_closed * ) {221 // empty or unhandled resume222 }223 }224 225 thread Producer {};226 void main( Producer & this ) {227 size_t count = 0;228 try {229 for ( ;; )230 insert( Channel, count++ );231 } catch ( channel_closed * ) {232 // unhandled resume or full233 }234 }235 236 int main( int argc, char * argv[] ) {237 Consumer c[Consumers];238 Producer p[Producers];239 sleep(Duration`s);240 close( Channel );241 return 0;242 }243 \end{cfa}244 \end{lrbox}245 246 \begin{lrbox}{\myboxB}247 \begin{cfa}[aboveskip=0pt,belowskip=0pt]248 var cons_done, prod_done bool = false, false;249 var prodJoin chan int = make(chan int, Producers)250 var consJoin chan int = make(chan int, Consumers)251 252 func consumer( channel chan uint64 ) {253 for {254 if cons_done { break }255 <-channel256 }257 consJoin <- 0 // synch with main thd258 }259 260 func producer( channel chan uint64 ) {261 var count uint64 = 0262 for {263 if prod_done { break }264 channel <- count++265 }266 prodJoin <- 0 // synch with main thd267 }268 269 func main() {270 channel = make(chan uint64, ChannelSize)271 for j := 0; j < Consumers; j++ {272 go consumer( channel )273 }274 for j := 0; j < Producers; j++ {275 go producer( channel )276 }277 time.Sleep(time.Second * Duration)278 prod_done = true279 for j := 0; j < Producers ; j++ {280 <-prodJoin // wait for prods281 }282 cons_done = true283 close(channel) // ensure no cons deadlock284 @for elem := range channel { @285 // process leftover values286 @}@287 for j := 0; j < Consumers; j++{288 <-consJoin // wait for cons289 }290 }291 \end{cfa}292 \end{lrbox}293 294 \subfloat[\CFA style]{\label{l:cfa_chan_term}\usebox\myboxA}295 \hspace*{3pt}296 \vrule297 \hspace*{3pt}298 \subfloat[Go style]{\label{l:go_chan_term}\usebox\myboxB}299 \caption{Channel Termination Examples 1 and 2. Code specific to example 2 is highlighted.}300 \label{f:ChannelTermination}301 \end{figure}302 303 The final shutdown example uses channels to implement a barrier.304 It is shown in Figure~\ref{f:ChannelBarrierTermination}.305 The problem of implementing a barrier is chosen since threads are both producers and consumers on the barrier-internal channels, which removes the ability to easily synchronize producers before consumers during shutdown.306 As such, while the shutdown details will be discussed with this problem in mind, they are also applicable to other problems taht have individual threads both producing and consuming from channels.307 Both of these examples are implemented using \CFA syntax so that they can be easily compared.308 Figure~\ref{l:cfa_chan_bar} uses \CFA-style channel close semantics and Figure~\ref{l:go_chan_bar} uses Go-style close semantics.309 In this example it is infeasible to use the Go @close@ call since all threads are both potentially producers and consumers, causing panics on close to be unavoidable without complex synchronization.310 As such in Figure~\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.311 This sentinel value has to be checked at two points.312 Furthermore, an additional flag @done@ is needed to communicate to threads once they have left the barrier that they are done.313 314 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. 315 124 This avoids the need to use a separate communication method other than the barrier, and avoids extra conditional checks on the fast path of the barrier implementation. 316 125 Also note that in the Go version~\ref{l:go_chan_bar}, the size of the barrier channels has to be larger than in the \CFA version to ensure that the main thread does not block when attempting to clear the barrier. 317 126 318 \begin{figure} 319 \centering 320 321 \begin{lrbox}{\myboxA} 322 \begin{cfa}[aboveskip=0pt,belowskip=0pt] 127 \begin{cfa}[caption={\CFA channel barrier termination},label={l:cfa_chan_bar}] 323 128 struct barrier { 324 channel( int ) barWait, entryWait; 129 channel( int ) barWait; 130 channel( int ) entryWait; 325 131 int size; 326 }; 327 void ?{}( barrier & this, int size ) with(this) { 328 barWait{size}; entryWait{size}; 132 } 133 void ?{}(barrier & this, int size) with(this) { 134 barWait{size}; 135 entryWait{size}; 329 136 this.size = size; 330 for ( i; size ) 331 insert( entryWait, i ); 332 } 333 void wait( barrier & this ) with(this) { 334 int ticket = remove( entryWait ); 335 137 for ( j; size ) 138 insert( *entryWait, j ); 139 } 140 141 void flush(barrier & this) with(this) { 142 close(barWait); 143 close(entryWait); 144 } 145 void wait(barrier & this) with(this) { 146 int ticket = remove( *entryWait ); 336 147 if ( ticket == size - 1 ) { 337 for ( i; size - 1 )338 insert( barWait, i);148 for ( j; size - 1 ) 149 insert( *barWait, j ); 339 150 return; 340 151 } 341 ticket = remove( barWait ); 342 343 if ( size == 1 || ticket == size - 2 ) { // last ? 344 for ( i; size ) 345 insert( entryWait, i ); 346 } 347 } 152 ticket = remove( *barWait ); 153 154 // last one out 155 if ( size == 1 || ticket == size - 2 ) { 156 for ( j; size ) 157 insert( *entryWait, j ); 158 } 159 } 160 barrier b{Tasks}; 161 162 // thread main 163 void main(Task & this) { 164 try { 165 for ( ;; ) { 166 wait( b ); 167 } 168 } catch ( channel_closed * e ) {} 169 } 170 171 int main() { 172 { 173 Task t[Tasks]; 174 175 sleep(10`s); 176 flush( b ); 177 } // wait for tasks to terminate 178 return 0; 179 } 180 \end{cfa} 181 182 \begin{cfa}[caption={Go channel barrier termination},label={l:go_chan_bar}] 183 184 struct barrier { 185 channel( int ) barWait; 186 channel( int ) entryWait; 187 int size; 188 } 189 void ?{}(barrier & this, int size) with(this) { 190 barWait{size + 1}; 191 entryWait{size + 1}; 192 this.size = size; 193 for ( j; size ) 194 insert( *entryWait, j ); 195 } 196 348 197 void flush(barrier & this) with(this) { 349 @close( barWait ); close( entryWait );@ 350 } 351 enum { Threads = 4 }; 352 barrier b{Threads}; 353 354 thread Thread {}; 355 void main( Thread & this ) { 356 @try {@ 357 for () 358 wait( b ); 359 @} catch ( channel_closed * ) {}@ 360 } 198 insert( *entryWait, -1 ); 199 insert( *barWait, -1 ); 200 } 201 void wait(barrier & this) with(this) { 202 int ticket = remove( *entryWait ); 203 if ( ticket == -1 ) { 204 insert( *entryWait, -1 ); 205 return; 206 } 207 if ( ticket == size - 1 ) { 208 for ( j; size - 1 ) 209 insert( *barWait, j ); 210 return; 211 } 212 ticket = remove( *barWait ); 213 if ( ticket == -1 ) { 214 insert( *barWait, -1 ); 215 return; 216 } 217 218 // last one out 219 if ( size == 1 || ticket == size - 2 ) { 220 for ( j; size ) 221 insert( *entryWait, j ); 222 } 223 } 224 barrier b; 225 226 bool done = false; 227 // thread main 228 void main(Task & this) { 229 for ( ;; ) { 230 if ( done ) break; 231 wait( b ); 232 } 233 } 234 361 235 int main() { 362 Thread t[Threads]; 363 sleep(10`s); 364 365 flush( b ); 366 } // wait for threads to terminate 236 { 237 Task t[Tasks]; 238 239 sleep(10`s); 240 done = true; 241 242 flush( b ); 243 } // wait for tasks to terminate 244 return 0; 245 } 367 246 \end{cfa} 368 \end{lrbox} 369 370 \begin{lrbox}{\myboxB} 371 \begin{cfa}[aboveskip=0pt,belowskip=0pt] 372 struct barrier { 373 channel( int ) barWait, entryWait; 374 int size; 375 }; 376 void ?{}( barrier & this, int size ) with(this) { 377 barWait{size + 1}; entryWait{size + 1}; 378 this.size = size; 379 for ( i; size ) 380 insert( entryWait, i ); 381 } 382 void wait( barrier & this ) with(this) { 383 int ticket = remove( entryWait ); 384 @if ( ticket == -1 ) { insert( entryWait, -1 ); return; }@ 385 if ( ticket == size - 1 ) { 386 for ( i; size - 1 ) 387 insert( barWait, i ); 388 return; 389 } 390 ticket = remove( barWait ); 391 @if ( ticket == -1 ) { insert( barWait, -1 ); return; }@ 392 if ( size == 1 || ticket == size - 2 ) { // last ? 393 for ( i; size ) 394 insert( entryWait, i ); 395 } 396 } 397 void flush(barrier & this) with(this) { 398 @insert( entryWait, -1 ); insert( barWait, -1 );@ 399 } 400 enum { Threads = 4 }; 401 barrier b{Threads}; 402 @bool done = false;@ 403 thread Thread {}; 404 void main( Thread & this ) { 405 for () { 406 @if ( done ) break;@ 407 wait( b ); 408 } 409 } 410 int main() { 411 Thread t[Threads]; 412 sleep(10`s); 413 done = true; 414 flush( b ); 415 } // wait for threads to terminate 247 248 In Listing~\ref{l:cfa_resume} an example of channel closing with resumption is used. 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. 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. 252 253 \begin{cfa}[caption={\CFA channel resumption usage},label={l:cfa_resume}] 254 channel( int ) chan{ 128 }; 255 256 // Consumer thread main 257 void main(Consumer & this) { 258 size_t runs = 0; 259 try { 260 for ( ;; ) { 261 remove( chan ); 262 } 263 } catchResume ( channel_closed * e ) {} 264 catch ( channel_closed * e ) {} 265 } 266 267 // Producer thread main 268 void main(Producer & this) { 269 int j = 0; 270 try { 271 for ( ;;j++ ) { 272 insert( chan, j ); 273 } 274 } catch ( channel_closed * e ) {} 275 } 276 277 int main( int argc, char * argv[] ) { 278 { 279 Consumers c[4]; 280 Producer p[4]; 281 282 sleep(10`s); 283 284 for ( i; Channels ) 285 close( channels[i] ); 286 } 287 return 0; 288 } 416 289 \end{cfa} 417 \end{lrbox}418 419 \subfloat[\CFA style]{\label{l:cfa_chan_bar}\usebox\myboxA}420 \hspace*{3pt}421 \vrule422 \hspace*{3pt}423 \subfloat[Go style]{\label{l:go_chan_bar}\usebox\myboxB}424 \caption{Channel Barrier Termination}425 \label{f:ChannelBarrierTermination}426 \end{figure}427 290 428 291 \section{Performance} 429 292 430 Given that the base implementation of the \CFA channels is very similar to the Go implementation, this section aims to show th e performance of the two implementations are comparable.431 The microbenchmark for the channel comparison is similar to Figure~\ref{f:ChannelTermination}, where the number of threads and processors is set from the command line.432 The processors are divided equally between producers and consumers, with one producer or consumer owning each core.293 Given that the base implementation of the \CFA channels is very similar to the Go implementation, this section aims to show that the performance of the two implementations are comparable. 294 One microbenchmark is conducted to compare Go and \CFA. 295 The benchmark is a ten second experiment where producers and consumers operate on a channel in parallel and throughput is measured. 433 296 The number of cores is varied to measure how throughput scales. 434 297 The cores are divided equally between producers and consumers, with one producer or consumer owning each core. 435 298 The results of the benchmark are shown in Figure~\ref{f:chanPerf}. 436 299 The performance of Go and \CFA channels on this microbenchmark is comparable. 437 Note, the performance should decline as the number of cores increases as the channel operations occur in a critical section, so increasing cores results in higher contention with no increase in parallelism. 300 Note, it is expected for the performance to decline as the number of cores increases as the channel operations all occur in a critical section so an increase in cores results in higher contention with no increase in parallelism. 301 438 302 439 303 \begin{figure} -
doc/theses/colby_parsons_MMAth/text/frontpgs.tex
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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} -
doc/theses/colby_parsons_MMAth/thesis.tex
r044ae62 r3a513d89 200 200 \input{actors} 201 201 202 \input{waituntil}203 204 202 %---------------------------------------------------------------------- 205 203 % END MATERIAL -
driver/cfa.cc
r044ae62 r3a513d89 10 10 // Created On : Tue Aug 20 13:44:49 2002 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue May 23 16:22:47202313 // Update Count : 47 712 // Last Modified On : Mon Apr 10 21:16:00 2023 13 // Update Count : 476 14 14 // 15 15 … … 329 329 #endif // __x86_64__ 330 330 331 #ifdef __ARM_ARCH332 args[nargs++] = "-mno-outline-atomics"; // use ARM LL/SC instructions for atomics333 #endif // __ARM_ARCH334 335 331 #ifdef __DEBUG_H__ 336 332 cerr << "args:"; -
libcfa/src/Makefile.am
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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; 62 bool closed; 63 #ifdef CHAN_STATS 64 size_t p_blocks, p_ops, c_blocks, c_ops; // counts total ops and ops resulting in a blocked thd61 dlist( wait_link ) prods, cons; // lists of blocked threads 62 go_mutex mutex_lock; // MX lock 63 bool closed; // indicates channel close/open 64 #ifdef CHAN_STATS 65 size_t blocks, operations; // counts total ops and ops resulting in a blocked thd 65 66 #endif 66 67 }; … … 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{}; … … 75 76 closed = false; 76 77 #ifdef CHAN_STATS 77 p_blocks = 0; 78 p_ops = 0; 79 c_blocks = 0; 80 c_ops = 0; 78 blocks = 0; 79 operations = 0; 81 80 #endif 82 81 } … … 85 84 static inline void ^?{}( channel(T) &c ) with(c) { 86 85 #ifdef CHAN_STATS 87 printf("Channel %p Blocks: %lu,\t\tOperations: %lu,\t%.2f%% of ops blocked\n", &c, p_blocks + c_blocks, p_ops + c_ops, ((double)p_blocks + c_blocks)/(p_ops + c_ops) * 100); 88 printf("Channel %p Consumer Blocks: %lu,\tConsumer Ops: %lu,\t%.2f%% of Consumer ops blocked\n", &c, p_blocks, p_ops, ((double)p_blocks)/p_ops * 100); 89 printf("Channel %p Producer Blocks: %lu,\tProducer Ops: %lu,\t%.2f%% of Producer ops blocked\n", &c, c_blocks, c_ops, ((double)c_blocks)/c_ops * 100); 90 #endif 91 verifyf( __handle_waituntil_OR( cons ) || __handle_waituntil_OR( prods ) || cons`isEmpty && prods`isEmpty, 92 "Attempted to delete channel with waiting threads (Deadlock).\n" ); 93 if ( size != 0 ) delete( buffer ); 94 } 95 static inline size_t get_count( channel(T) & chan ) with(chan) { return __atomic_load_n( &count, __ATOMIC_RELAXED ); } 96 static inline size_t get_size( channel(T) & chan ) with(chan) { return __atomic_load_n( &size, __ATOMIC_RELAXED ); } 86 printf("Channel %p Blocks: %lu, Operations: %lu, %.2f%% of ops blocked\n", &c, blocks, operations, ((double)blocks)/operations * 100); 87 #endif 88 verifyf( cons`isEmpty && prods`isEmpty, "Attempted to delete channel with waiting threads (Deadlock).\n" ); 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; } 97 93 static inline bool has_waiters( channel(T) & chan ) with(chan) { return !cons`isEmpty || !prods`isEmpty; } 98 94 static inline bool has_waiting_consumers( channel(T) & chan ) with(chan) { return !cons`isEmpty; } … … 106 102 // flush waiting consumers and producers 107 103 while ( has_waiting_consumers( chan ) ) { 108 if( !__handle_waituntil_OR( cons ) ) // ensure we only signal special OR case threads when they win the race 109 break; // if __handle_waituntil_OR returns false cons is empty so break 110 cons`first.extra = 0p; 104 cons`first.elem = 0p; 111 105 wake_one( cons ); 112 106 } 113 107 while ( has_waiting_producers( chan ) ) { 114 if( !__handle_waituntil_OR( prods ) ) // ensure we only signal special OR case threads when they win the race 115 break; // if __handle_waituntil_OR returns false prods is empty so break 116 prods`first.extra = 0p; 108 prods`first.elem = 0p; 117 109 wake_one( prods ); 118 110 } … … 122 114 static inline void is_closed( channel(T) & chan ) with(chan) { return closed; } 123 115 124 // used to hand an element to a blocked consumer and signal it125 static inline void __cons_handoff( channel(T) & chan, T & elem ) with(chan) {126 memcpy( cons`first.extra, (void *)&elem, sizeof(T) ); // do waiting consumer work127 wake_one( cons );128 }129 130 // used to hand an element to a blocked producer and signal it131 static inline void __prods_handoff( channel(T) & chan, T & retval ) with(chan) {132 memcpy( (void *)&retval, prods`first.extra, sizeof(T) );133 wake_one( prods );134 }135 136 116 static inline void flush( channel(T) & chan, T elem ) with(chan) { 137 117 lock( mutex_lock ); 138 118 while ( count == 0 && !cons`isEmpty ) { 139 __cons_handoff( chan, elem ); 119 memcpy(cons`first.elem, (void *)&elem, sizeof(T)); // do waiting consumer work 120 wake_one( cons ); 140 121 } 141 122 unlock( mutex_lock ); … … 144 125 // handles buffer insert 145 126 static inline void __buf_insert( channel(T) & chan, T & elem ) with(chan) { 146 memcpy( (void *)&buffer[back], (void *)&elem, sizeof(T));127 memcpy((void *)&buffer[back], (void *)&elem, sizeof(T)); 147 128 count += 1; 148 129 back++; … … 150 131 } 151 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 152 141 // needed to avoid an extra copy in closed case 153 142 static inline bool __internal_try_insert( channel(T) & chan, T & elem ) with(chan) { 154 143 lock( mutex_lock ); 155 144 #ifdef CHAN_STATS 156 p_ops++; 157 #endif 158 159 ConsEmpty: if ( !cons`isEmpty ) { 160 if ( !__handle_waituntil_OR( cons ) ) break ConsEmpty; 161 __cons_handoff( chan, elem ); 162 unlock( mutex_lock ); 163 return true; 164 } 165 145 operations++; 146 #endif 166 147 if ( count == size ) { unlock( mutex_lock ); return false; } 167 168 __buf_insert( chan, elem ); 148 __do_insert( chan, elem ); 169 149 unlock( mutex_lock ); 170 150 return true; … … 177 157 // handles closed case of insert routine 178 158 static inline void __closed_insert( channel(T) & chan, T & elem ) with(chan) { 179 channel_closed except{ 159 channel_closed except{&channel_closed_vt, &elem, &chan }; 180 160 throwResume except; // throw closed resumption 181 161 if ( !__internal_try_insert( chan, elem ) ) throw except; // if try to insert fails (would block), throw termination … … 192 172 193 173 #ifdef CHAN_STATS 194 if ( !closed ) p_ops++;174 if ( !closed ) operations++; 195 175 #endif 196 176 … … 202 182 } 203 183 204 // buffer count must be zero if cons are blocked (also handles zero-size case)205 ConsEmpty: if (!cons`isEmpty ) {206 if ( !__handle_waituntil_OR( cons ) ) break ConsEmpty;207 __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 ); 208 188 unlock( mutex_lock ); 209 return ;189 return true; 210 190 } 211 191 … … 213 193 if ( count == size ) { 214 194 #ifdef CHAN_STATS 215 p_blocks++;195 blocks++; 216 196 #endif 217 197 … … 222 202 } // if 223 203 224 __buf_insert( chan, elem ); 225 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; 226 218 } 227 219 228 220 // does the buffer remove and potentially does waiting producer work 229 221 static inline void __do_remove( channel(T) & chan, T & retval ) with(chan) { 230 memcpy( (void *)&retval, (void *)&buffer[front], sizeof(T) ); 231 count -= 1; 232 front = (front + 1) % size; 222 __buf_remove( chan, retval ); 233 223 if (count == size - 1 && !prods`isEmpty ) { 234 if ( !__handle_waituntil_OR( prods ) ) return; 235 __buf_insert( chan, *(T *)prods`first.extra ); // do waiting producer work 224 __buf_insert( chan, *(T *)prods`first.elem ); // do waiting producer work 236 225 wake_one( prods ); 237 226 } … … 242 231 lock( mutex_lock ); 243 232 #ifdef CHAN_STATS 244 c_ops++; 245 #endif 246 247 ZeroSize: if ( size == 0 && !prods`isEmpty ) { 248 if ( !__handle_waituntil_OR( prods ) ) break ZeroSize; 249 __prods_handoff( chan, retval ); 250 unlock( mutex_lock ); 251 return true; 252 } 253 233 operations++; 234 #endif 254 235 if ( count == 0 ) { unlock( mutex_lock ); return false; } 255 256 236 __do_remove( chan, retval ); 257 237 unlock( mutex_lock ); … … 264 244 static inline [T, bool] try_remove( channel(T) & chan ) { 265 245 T retval; 266 bool success = __internal_try_remove( chan, retval ); 267 return [ retval, success ]; 268 } 269 270 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 ) { 271 250 T retval; 272 251 __internal_try_remove( chan, retval ); … … 276 255 // handles closed case of insert routine 277 256 static inline void __closed_remove( channel(T) & chan, T & retval ) with(chan) { 278 channel_closed except{ 257 channel_closed except{&channel_closed_vt, 0p, &chan }; 279 258 throwResume except; // throw resumption 280 259 if ( !__internal_try_remove( chan, retval ) ) throw except; // if try to remove fails (would block), throw termination … … 290 269 291 270 #ifdef CHAN_STATS 292 if ( !closed ) c_ops++;271 if ( !closed ) operations++; 293 272 #endif 294 273 … … 300 279 301 280 // have to check for the zero size channel case 302 ZeroSize:if ( size == 0 && !prods`isEmpty ) {303 if ( !__handle_waituntil_OR( prods ) ) break ZeroSize;304 __prods_handoff( chan, retval);281 if ( size == 0 && !prods`isEmpty ) { 282 memcpy((void *)&retval, (void *)prods`first.elem, sizeof(T)); 283 wake_one( prods ); 305 284 unlock( mutex_lock ); 306 285 return retval; … … 308 287 309 288 // wait if buffer is empty, work will be completed by someone else 310 if ( count == 0) {289 if (count == 0) { 311 290 #ifdef CHAN_STATS 312 c_blocks++;291 blocks++; 313 292 #endif 314 293 // check for if woken due to close … … 320 299 // Remove from buffer 321 300 __do_remove( chan, retval ); 301 322 302 unlock( mutex_lock ); 323 303 return retval; 324 304 } 325 326 ///////////////////////////////////////////////////////////////////////////////////////////327 // The following is support for waituntil (select) statements328 ///////////////////////////////////////////////////////////////////////////////////////////329 static inline bool unregister_chan( channel(T) & chan, select_node & node ) with(chan) {330 if ( !node`isListed && !node.park_counter ) return false; // handle special OR case331 lock( mutex_lock );332 if ( node`isListed ) { // op wasn't performed333 remove( node );334 unlock( mutex_lock );335 return false;336 }337 unlock( mutex_lock );338 339 // only return true when not special OR case, not exceptional calse and status is SAT340 return ( node.extra == 0p || !node.park_counter ) ? false : *node.clause_status == __SELECT_SAT;341 }342 343 // type used by select statement to capture a chan read as the selected operation344 struct chan_read {345 T & ret;346 channel(T) & chan;347 };348 349 static inline void ?{}( chan_read(T) & cr, channel(T) & chan, T & ret ) {350 &cr.chan = &chan;351 &cr.ret = &ret;352 }353 static inline chan_read(T) ?<<?( T & ret, channel(T) & chan ) { chan_read(T) cr{ chan, ret }; return cr; }354 355 static inline void __handle_select_closed_read( chan_read(T) & this, select_node & node ) with(this.chan, this) {356 __closed_remove( chan, ret );357 // if we get here then the insert succeeded358 __make_select_node_available( node );359 }360 361 static inline bool register_select( chan_read(T) & this, select_node & node ) with(this.chan, this) {362 lock( mutex_lock );363 node.extra = &ret; // set .extra so that if it == 0p later in on_selected it is due to channel close364 365 #ifdef CHAN_STATS366 if ( !closed ) c_ops++;367 #endif368 369 if ( !node.park_counter ) {370 // are we special case OR and front of cons is also special case OR371 if ( !unlikely(closed) && !prods`isEmpty && prods`first.clause_status && !prods`first.park_counter ) {372 if ( !__make_select_node_pending( node ) ) {373 unlock( mutex_lock );374 return false;375 }376 377 if ( __handle_waituntil_OR( prods ) ) {378 __prods_handoff( chan, ret );379 __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_node380 unlock( mutex_lock );381 return true;382 }383 __make_select_node_unsat( node );384 }385 // check if we can complete operation. If so race to establish winner in special OR case386 if ( count != 0 || !prods`isEmpty || unlikely(closed) ) {387 if ( !__make_select_node_available( node ) ) { // we didn't win the race so give up on registering388 unlock( mutex_lock );389 return false;390 }391 }392 }393 394 if ( unlikely(closed) ) {395 unlock( mutex_lock );396 __handle_select_closed_read( this, node );397 return true;398 }399 400 // have to check for the zero size channel case401 ZeroSize: if ( size == 0 && !prods`isEmpty ) {402 if ( !__handle_waituntil_OR( prods ) ) break ZeroSize;403 __prods_handoff( chan, ret );404 __set_avail_then_unlock( node, mutex_lock );405 return true;406 }407 408 // wait if buffer is empty, work will be completed by someone else409 if ( count == 0 ) {410 #ifdef CHAN_STATS411 c_blocks++;412 #endif413 414 insert_last( cons, node );415 unlock( mutex_lock );416 return false;417 }418 419 // Remove from buffer420 __do_remove( chan, ret );421 __set_avail_then_unlock( node, mutex_lock );422 return true;423 }424 static inline bool unregister_select( chan_read(T) & this, select_node & node ) { return unregister_chan( this.chan, node ); }425 static inline bool on_selected( chan_read(T) & this, select_node & node ) with(this) {426 if ( node.extra == 0p ) // check if woken up due to closed channel427 __closed_remove( chan, ret );428 // This is only reachable if not closed or closed exception was handled429 return true;430 }431 432 // type used by select statement to capture a chan write as the selected operation433 struct chan_write {434 T elem;435 channel(T) & chan;436 };437 438 static inline void ?{}( chan_write(T) & cw, channel(T) & chan, T elem ) {439 &cw.chan = &chan;440 memcpy( (void *)&cw.elem, (void *)&elem, sizeof(T) );441 }442 static inline chan_write(T) ?>>?( T elem, channel(T) & chan ) { chan_write(T) cw{ chan, elem }; return cw; }443 444 static inline void __handle_select_closed_write( chan_write(T) & this, select_node & node ) with(this.chan, this) {445 __closed_insert( chan, elem );446 // if we get here then the insert succeeded447 __make_select_node_available( node );448 }449 450 static inline bool register_select( chan_write(T) & this, select_node & node ) with(this.chan, this) {451 lock( mutex_lock );452 node.extra = &elem; // set .extra so that if it == 0p later in on_selected it is due to channel close453 454 #ifdef CHAN_STATS455 if ( !closed ) p_ops++;456 #endif457 458 // special OR case handling459 if ( !node.park_counter ) {460 // are we special case OR and front of cons is also special case OR461 if ( !unlikely(closed) && !cons`isEmpty && cons`first.clause_status && !cons`first.park_counter ) {462 if ( !__make_select_node_pending( node ) ) {463 unlock( mutex_lock );464 return false;465 }466 467 if ( __handle_waituntil_OR( cons ) ) {468 __cons_handoff( chan, elem );469 __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_node470 unlock( mutex_lock );471 return true;472 }473 __make_select_node_unsat( node );474 }475 // check if we can complete operation. If so race to establish winner in special OR case476 if ( count != size || !cons`isEmpty || unlikely(closed) ) {477 if ( !__make_select_node_available( node ) ) { // we didn't win the race so give up on registering478 unlock( mutex_lock );479 return false;480 }481 }482 }483 484 // if closed handle485 if ( unlikely(closed) ) {486 unlock( mutex_lock );487 __handle_select_closed_write( this, node );488 return true;489 }490 491 // handle blocked consumer case via handoff (buffer is implicitly empty)492 ConsEmpty: if ( !cons`isEmpty ) {493 if ( !__handle_waituntil_OR( cons ) ) break ConsEmpty;494 __cons_handoff( chan, elem );495 __set_avail_then_unlock( node, mutex_lock );496 return true;497 }498 499 // insert node in list if buffer is full, work will be completed by someone else500 if ( count == size ) {501 #ifdef CHAN_STATS502 p_blocks++;503 #endif504 505 insert_last( prods, node );506 unlock( mutex_lock );507 return false;508 } // if509 510 // otherwise carry out write either via normal insert511 __buf_insert( chan, elem );512 __set_avail_then_unlock( node, mutex_lock );513 return true;514 }515 static inline bool unregister_select( chan_write(T) & this, select_node & node ) { return unregister_chan( this.chan, node ); }516 517 static inline bool on_selected( chan_write(T) & this, select_node & node ) with(this) {518 if ( node.extra == 0p ) // check if woken up due to closed channel519 __closed_insert( chan, elem );520 521 // This is only reachable if not closed or closed exception was handled522 return true;523 }524 525 305 } // forall( T ) 526 527 -
libcfa/src/concurrency/future.hfa
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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 //----------------------------------------------------------------------------- … … 176 128 static inline void ?{}(mcs_spin_node & this) { this.next = 0p; this.locked = true; } 177 129 130 static inline mcs_spin_node * volatile & ?`next ( mcs_spin_node * node ) { 131 return node->next; 132 } 133 178 134 struct mcs_spin_lock { 179 135 mcs_spin_queue queue; … … 181 137 182 138 static inline void lock(mcs_spin_lock & l, mcs_spin_node & n) { 183 n.locked = true;184 139 mcs_spin_node * prev = __atomic_exchange_n(&l.queue.tail, &n, __ATOMIC_SEQ_CST); 185 if( prev == 0p ) return; 140 n.locked = true; 141 if(prev == 0p) return; 186 142 prev->next = &n; 187 while( __atomic_load_n(&n.locked, __ATOMIC_RELAXED)) Pause();143 while(__atomic_load_n(&n.locked, __ATOMIC_RELAXED)) Pause(); 188 144 } 189 145 … … 191 147 mcs_spin_node * n_ptr = &n; 192 148 if (__atomic_compare_exchange_n(&l.queue.tail, &n_ptr, 0p, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) return; 193 while (__atomic_load_n(&n.next, __ATOMIC_RELAXED) == 0p) Pause();149 while (__atomic_load_n(&n.next, __ATOMIC_RELAXED) == 0p) {} 194 150 n.next->locked = false; 195 151 } … … 200 156 // - Kernel thd blocking alternative to the spinlock 201 157 // - No ownership (will deadlock on reacq) 202 // - no reacq on wakeup203 158 struct futex_mutex { 204 159 // lock state any state other than UNLOCKED is locked … … 214 169 } 215 170 216 static inline void ?{}( futex_mutex & this ) with(this) { val = 0; }217 218 static inline bool internal_try_lock( 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) { 219 174 return __atomic_compare_exchange_n((int*)&val, (int*)&compare_val, 1, false, __ATOMIC_ACQUIRE, __ATOMIC_ACQUIRE); 220 175 } 221 176 222 static inline int internal_exchange( futex_mutex & this) with(this) {177 static inline int internal_exchange(futex_mutex & this) with(this) { 223 178 return __atomic_exchange_n((int*)&val, 2, __ATOMIC_ACQUIRE); 224 179 } 225 180 226 181 // if this is called recursively IT WILL DEADLOCK!!!!! 227 static inline void lock( futex_mutex & this) with(this) {182 static inline void lock(futex_mutex & this) with(this) { 228 183 int state; 229 184 … … 235 190 for (int i = 0; i < spin; i++) Pause(); 236 191 } 192 193 // // no contention try to acquire 194 // if (internal_try_lock(this, state)) return; 237 195 238 196 // if not in contended state, set to be in contended state … … 254 212 } 255 213 256 DEFAULT_ON_NOTIFY( futex_mutex ) 257 DEFAULT_ON_WAIT( futex_mutex ) 258 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 ) {} 259 219 260 220 //----------------------------------------------------------------------------- … … 272 232 int val; 273 233 }; 234 274 235 static inline void ?{}( go_mutex & this ) with(this) { val = 0; } 275 // static inline void ?{}( go_mutex & this, go_mutex this2 ) = void; // these don't compile correctly at the moment so they should be omitted276 // static inline void ?=?( go_mutex & this, go_mutex this2 ) = void;277 236 278 237 static inline bool internal_try_lock(go_mutex & this, int & compare_val, int new_val ) with(this) { … … 285 244 286 245 // if this is called recursively IT WILL DEADLOCK!!!!! 287 static inline void lock( go_mutex & this ) with( this) {246 static inline void lock(go_mutex & this) with(this) { 288 247 int state, init_state; 289 248 … … 296 255 while( !val ) { // lock unlocked 297 256 state = 0; 298 if ( internal_try_lock( this, state, init_state )) return;257 if (internal_try_lock(this, state, init_state)) return; 299 258 } 300 259 for (int i = 0; i < 30; i++) Pause(); … … 303 262 while( !val ) { // lock unlocked 304 263 state = 0; 305 if ( internal_try_lock( this, state, init_state )) return;264 if (internal_try_lock(this, state, init_state)) return; 306 265 } 307 266 sched_yield(); 308 267 309 268 // if not in contended state, set to be in contended state 310 state = internal_exchange( this, 2);269 state = internal_exchange(this, 2); 311 270 if ( !state ) return; // state == 0 312 271 init_state = 2; 313 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 314 273 } 315 274 } … … 317 276 static inline void unlock( go_mutex & this ) with(this) { 318 277 // if uncontended do atomic unlock and then return 319 if ( __atomic_exchange_n(&val, 0, __ATOMIC_RELEASE) == 1) return;278 if (__atomic_exchange_n(&val, 0, __ATOMIC_RELEASE) == 1) return; 320 279 321 280 // otherwise threads are blocked so we must wake one 322 futex( (int *)&val, FUTEX_WAKE, 1 ); 323 } 324 325 DEFAULT_ON_NOTIFY( go_mutex ) 326 DEFAULT_ON_WAIT( go_mutex ) 327 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); } 328 317 329 318 //----------------------------------------------------------------------------- … … 345 334 this.lock_value = 0; 346 335 } 347 static inline void ?{}( exp_backoff_then_block_lock & this, exp_backoff_then_block_lock this2 ) = void;348 static inline void ?=?( exp_backoff_then_block_lock & this, exp_backoff_then_block_lock this2 ) = void;349 336 350 337 static inline void ^?{}( exp_backoff_then_block_lock & this ){} 351 338 352 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) { 353 340 return __atomic_compare_exchange_n(&lock_value, &compare_val, 1, false, __ATOMIC_ACQUIRE, __ATOMIC_RELAXED); 354 341 } 355 342 356 static inline bool try_lock( exp_backoff_then_block_lock & this ) { size_t compare_val = 0; return internal_try_lock( this, compare_val); }357 358 static inline bool try_lock_contention( exp_backoff_then_block_lock & this) with(this) {359 return !__atomic_exchange_n( &lock_value, 2, __ATOMIC_ACQUIRE);360 } 361 362 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) { 363 350 lock( spinlock __cfaabi_dbg_ctx2 ); 364 351 if (__atomic_load_n( &lock_value, __ATOMIC_SEQ_CST) != 2) { … … 372 359 } 373 360 374 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) { 375 362 size_t compare_val = 0; 376 363 int spin = 4; … … 391 378 } 392 379 393 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) { 394 381 if (__atomic_exchange_n(&lock_value, 0, __ATOMIC_RELEASE) == 1) return; 395 382 lock( spinlock __cfaabi_dbg_ctx2 ); … … 399 386 } 400 387 401 DEFAULT_ON_NOTIFY( exp_backoff_then_block_lock ) 402 DEFAULT_ON_WAIT( exp_backoff_then_block_lock ) 403 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); } 404 391 405 392 //----------------------------------------------------------------------------- … … 431 418 432 419 // if this is called recursively IT WILL DEADLOCK!!!!! 433 static inline void lock( fast_block_lock & this) with(this) {420 static inline void lock(fast_block_lock & this) with(this) { 434 421 lock( lock __cfaabi_dbg_ctx2 ); 435 422 if ( held ) { … … 443 430 } 444 431 445 static inline void unlock( fast_block_lock & this) with(this) {432 static inline void unlock(fast_block_lock & this) with(this) { 446 433 lock( lock __cfaabi_dbg_ctx2 ); 447 434 /* paranoid */ verifyf( held != false, "Attempt to release lock %p that isn't held", &this ); … … 452 439 } 453 440 454 static inline void on_notify( 441 static inline void on_notify(fast_block_lock & this, struct thread$ * t ) with(this) { 455 442 lock( lock __cfaabi_dbg_ctx2 ); 456 443 insert_last( blocked_threads, *t ); 457 444 unlock( lock ); 458 445 } 459 DEFAULT_ON_WAIT( fast_block_lock ) 460 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 ) { } 461 448 462 449 //----------------------------------------------------------------------------- … … 469 456 struct simple_owner_lock { 470 457 // List of blocked threads 471 dlist( select_node) blocked_threads;458 dlist( thread$ ) blocked_threads; 472 459 473 460 // Spin lock used for mutual exclusion … … 490 477 static inline void ?=?( simple_owner_lock & this, simple_owner_lock this2 ) = void; 491 478 492 static inline void lock( simple_owner_lock & this) with(this) {493 if ( owner == active_thread()) {479 static inline void lock(simple_owner_lock & this) with(this) { 480 if (owner == active_thread()) { 494 481 recursion_count++; 495 482 return; … … 497 484 lock( lock __cfaabi_dbg_ctx2 ); 498 485 499 if ( owner != 0p ) { 500 select_node node; 501 insert_last( blocked_threads, node ); 486 if (owner != 0p) { 487 insert_last( blocked_threads, *active_thread() ); 502 488 unlock( lock ); 503 489 park( ); … … 509 495 } 510 496 511 static inline void pop_node( simple_owner_lock & this ) with(this) { 512 __handle_waituntil_OR( blocked_threads ); 513 select_node * node = &try_pop_front( blocked_threads ); 514 if ( node ) { 515 owner = node->blocked_thread; 516 recursion_count = 1; 517 // if ( !node->clause_status || __make_select_node_available( *node ) ) unpark( node->blocked_thread ); 518 wake_one( blocked_threads, *node ); 519 } else { 520 owner = 0p; 521 recursion_count = 0; 522 } 523 } 524 525 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) { 526 506 lock( lock __cfaabi_dbg_ctx2 ); 527 507 /* paranoid */ verifyf( owner != 0p, "Attempt to release lock %p that isn't held", &this ); … … 530 510 recursion_count--; 531 511 if ( recursion_count == 0 ) { 532 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 ); 533 517 } 534 518 unlock( lock ); 535 519 } 536 520 537 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) { 538 522 lock( lock __cfaabi_dbg_ctx2 ); 539 523 // lock held 540 524 if ( owner != 0p ) { 541 insert_last( blocked_threads, * (select_node *)t->link_node);525 insert_last( blocked_threads, *t ); 542 526 } 543 527 // lock not held … … 550 534 } 551 535 552 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) { 553 537 lock( lock __cfaabi_dbg_ctx2 ); 554 538 /* paranoid */ verifyf( owner != 0p, "Attempt to release lock %p that isn't held", &this ); … … 557 541 size_t ret = recursion_count; 558 542 559 pop_node( this ); 560 561 select_node node; 562 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 563 550 unlock( lock ); 564 565 pre_park_then_park( pp_fn, pp_datum );566 567 551 return ret; 568 552 } 569 553 570 static inline void on_wakeup( simple_owner_lock & this, size_t recursion ) with(this) { recursion_count = recursion; } 571 572 // waituntil() support 573 static inline bool register_select( simple_owner_lock & this, select_node & node ) with(this) { 574 lock( lock __cfaabi_dbg_ctx2 ); 575 576 // check if we can complete operation. If so race to establish winner in special OR case 577 if ( !node.park_counter && ( owner == active_thread() || owner == 0p ) ) { 578 if ( !__make_select_node_available( node ) ) { // we didn't win the race so give up on registering 579 unlock( lock ); 580 return false; 581 } 582 } 583 584 if ( owner == active_thread() ) { 585 recursion_count++; 586 if ( node.park_counter ) __make_select_node_available( node ); 587 unlock( lock ); 588 return true; 589 } 590 591 if ( owner != 0p ) { 592 insert_last( blocked_threads, node ); 593 unlock( lock ); 594 return false; 595 } 596 597 owner = active_thread(); 598 recursion_count = 1; 599 600 if ( node.park_counter ) __make_select_node_available( node ); 601 unlock( lock ); 602 return true; 603 } 604 605 static inline bool unregister_select( simple_owner_lock & this, select_node & node ) with(this) { 606 lock( lock __cfaabi_dbg_ctx2 ); 607 if ( node`isListed ) { 608 remove( node ); 609 unlock( lock ); 610 return false; 611 } 612 613 if ( owner == active_thread() ) { 614 recursion_count--; 615 if ( recursion_count == 0 ) { 616 pop_node( this ); 617 } 618 } 619 unlock( lock ); 620 return false; 621 } 622 623 static inline bool on_selected( simple_owner_lock & this, select_node & node ) { return true; } 624 554 static inline void on_wakeup(simple_owner_lock & this, size_t recursion ) with(this) { recursion_count = recursion; } 625 555 626 556 //----------------------------------------------------------------------------- … … 648 578 649 579 // if this is called recursively IT WILL DEADLOCK! 650 static inline void lock( spin_queue_lock & this) with(this) {580 static inline void lock(spin_queue_lock & this) with(this) { 651 581 mcs_spin_node node; 652 582 lock( lock, node ); … … 656 586 } 657 587 658 static inline void unlock( spin_queue_lock & this) with(this) {588 static inline void unlock(spin_queue_lock & this) with(this) { 659 589 __atomic_store_n(&held, false, __ATOMIC_RELEASE); 660 590 } 661 591 662 DEFAULT_ON_NOTIFY( spin_queue_lock ) 663 DEFAULT_ON_WAIT( spin_queue_lock ) 664 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 665 598 666 599 //----------------------------------------------------------------------------- … … 688 621 689 622 // if this is called recursively IT WILL DEADLOCK!!!!! 690 static inline void lock( mcs_block_spin_lock & this) with(this) {623 static inline void lock(mcs_block_spin_lock & this) with(this) { 691 624 mcs_node node; 692 625 lock( lock, node ); … … 700 633 } 701 634 702 DEFAULT_ON_NOTIFY( mcs_block_spin_lock ) 703 DEFAULT_ON_WAIT( mcs_block_spin_lock ) 704 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); } 705 638 706 639 //----------------------------------------------------------------------------- … … 728 661 729 662 // if this is called recursively IT WILL DEADLOCK!!!!! 730 static inline void lock( block_spin_lock & this) with(this) {663 static inline void lock(block_spin_lock & this) with(this) { 731 664 lock( lock ); 732 665 while(__atomic_load_n(&held, __ATOMIC_SEQ_CST)) Pause(); … … 735 668 } 736 669 737 static inline void unlock( block_spin_lock & this) with(this) {670 static inline void unlock(block_spin_lock & this) with(this) { 738 671 __atomic_store_n(&held, false, __ATOMIC_RELEASE); 739 672 } 740 673 741 static inline void on_notify( 674 static inline void on_notify(block_spin_lock & this, struct thread$ * t ) with(this.lock) { 742 675 // first we acquire internal fast_block_lock 743 676 lock( lock __cfaabi_dbg_ctx2 ); … … 753 686 unpark(t); 754 687 } 755 DEFAULT_ON_WAIT( block_spin_lock ) 756 static inline void on_wakeup( 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) { 757 690 // now we acquire the entire block_spin_lock upon waking up 758 691 while(__atomic_load_n(&held, __ATOMIC_SEQ_CST)) Pause(); … … 760 693 unlock( lock ); // Now we release the internal fast_spin_lock 761 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 }; 762 709 763 710 //----------------------------------------------------------------------------- … … 767 714 forall(L & | is_blocking_lock(L)) { 768 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 ); 769 720 } 770 721 -
libcfa/src/concurrency/mutex_stmt.hfa
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 585 585 } 586 586 587 const ast::WhenClause * visit( const ast::WhenClause * node ) override final {588 // There is no old-AST WhenClause, so this should never be called.589 assert( !node );590 return nullptr;591 }592 593 587 const ast::Stmt * visit( const ast::WaitForStmt * node ) override final { 594 588 if ( inCache( node ) ) return nullptr; … … 597 591 for ( auto clause : node->clauses ) { 598 592 stmt->clauses.push_back({{ 599 get<Expression>().accept1( clause->target ),593 get<Expression>().accept1( clause->target_func ), 600 594 get<Expression>().acceptL( clause->target_args ), 601 595 }, 602 596 get<Statement>().accept1( clause->stmt ), 603 get<Expression>().accept1( clause-> when_cond ),597 get<Expression>().accept1( clause->cond ), 604 598 }); 605 599 } … … 618 612 const ast::WaitForClause * visit( const ast::WaitForClause * node ) override final { 619 613 // There is no old-AST WaitForClause, so this should never be called. 620 assert( !node );621 return nullptr;622 }623 624 const ast::Stmt * visit( const ast::WaitUntilStmt * node ) override final {625 // There is no old-AST WaitUntilStmt, so this should never be called.626 614 assert( !node ); 627 615 return nullptr; … … 2211 2199 auto clause = new ast::WaitForClause( old->location ); 2212 2200 2213 clause->target = GET_ACCEPT_1(clauses[i].target.function, Expr);2201 clause->target_func = GET_ACCEPT_1(clauses[i].target.function, Expr); 2214 2202 clause->target_args = GET_ACCEPT_V(clauses[i].target.arguments, Expr); 2215 2203 clause->stmt = GET_ACCEPT_1(clauses[i].statement, Stmt); 2216 clause-> when_cond = GET_ACCEPT_1(clauses[i].condition, Expr);2204 clause->cond = GET_ACCEPT_1(clauses[i].condition, Expr); 2217 2205 2218 2206 stmt->clauses.push_back( clause ); -
src/AST/Fwd.hpp
r044ae62 r3a513d89 59 59 class FinallyClause; 60 60 class SuspendStmt; 61 class WhenClause;62 61 class WaitForStmt; 63 62 class WaitForClause; 64 class WaitUntilStmt;65 63 class WithStmt; 66 64 class DeclStmt; -
src/AST/Node.cpp
r044ae62 r3a513d89 176 176 template class ast::ptr_base< ast::FinallyClause, ast::Node::ref_type::weak >; 177 177 template class ast::ptr_base< ast::FinallyClause, ast::Node::ref_type::strong >; 178 template class ast::ptr_base< ast::WhenClause, ast::Node::ref_type::weak >;179 template class ast::ptr_base< ast::WhenClause, ast::Node::ref_type::strong >;180 178 template class ast::ptr_base< ast::WaitForStmt, ast::Node::ref_type::weak >; 181 179 template class ast::ptr_base< ast::WaitForStmt, ast::Node::ref_type::strong >; 182 180 template class ast::ptr_base< ast::WaitForClause, ast::Node::ref_type::weak >; 183 181 template class ast::ptr_base< ast::WaitForClause, ast::Node::ref_type::strong >; 184 template class ast::ptr_base< ast::WaitUntilStmt, ast::Node::ref_type::weak >;185 template class ast::ptr_base< ast::WaitUntilStmt, ast::Node::ref_type::strong >;186 182 template class ast::ptr_base< ast::WithStmt, ast::Node::ref_type::weak >; 187 183 template class ast::ptr_base< ast::WithStmt, ast::Node::ref_type::strong >; -
src/AST/Pass.hpp
r044ae62 r3a513d89 163 163 const ast::FinallyClause * visit( const ast::FinallyClause * ) override final; 164 164 const ast::Stmt * visit( const ast::SuspendStmt * ) override final; 165 const ast::WhenClause * visit( const ast::WhenClause * ) override final;166 165 const ast::Stmt * visit( const ast::WaitForStmt * ) override final; 167 166 const ast::WaitForClause * visit( const ast::WaitForClause * ) override final; 168 const ast::Stmt * visit( const ast::WaitUntilStmt * ) override final;169 167 const ast::Decl * visit( const ast::WithStmt * ) override final; 170 168 const ast::NullStmt * visit( const ast::NullStmt * ) override final; -
src/AST/Pass.impl.hpp
r044ae62 r3a513d89 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 … … 1024 1097 1025 1098 //-------------------------------------------------------------------------- 1026 // WhenClause1027 template< typename core_t >1028 const ast::WhenClause * ast::Pass< core_t >::visit( const ast::WhenClause * node ) {1029 VISIT_START( node );1030 1031 if ( __visit_children() ) {1032 maybe_accept( node, &WhenClause::target );1033 maybe_accept( node, &WhenClause::stmt );1034 maybe_accept( node, &WhenClause::when_cond );1035 }1036 1037 VISIT_END( WhenClause, node );1038 }1039 1040 //--------------------------------------------------------------------------1041 1099 // WaitForStmt 1042 1100 template< typename core_t > … … 1063 1121 1064 1122 if ( __visit_children() ) { 1065 maybe_accept( node, &WaitForClause::target );1123 maybe_accept( node, &WaitForClause::target_func ); 1066 1124 maybe_accept( node, &WaitForClause::target_args ); 1067 1125 maybe_accept( node, &WaitForClause::stmt ); 1068 maybe_accept( node, &WaitForClause:: when_cond );1126 maybe_accept( node, &WaitForClause::cond ); 1069 1127 } 1070 1128 1071 1129 VISIT_END( WaitForClause, node ); 1072 }1073 1074 //--------------------------------------------------------------------------1075 // WaitUntilStmt1076 template< typename core_t >1077 const ast::Stmt * ast::Pass< core_t >::visit( const ast::WaitUntilStmt * node ) {1078 VISIT_START( node );1079 1080 if ( __visit_children() ) {1081 maybe_accept( node, &WaitUntilStmt::clauses );1082 maybe_accept( node, &WaitUntilStmt::timeout_time );1083 maybe_accept( node, &WaitUntilStmt::timeout_stmt );1084 maybe_accept( node, &WaitUntilStmt::timeout_cond );1085 maybe_accept( node, &WaitUntilStmt::else_stmt );1086 maybe_accept( node, &WaitUntilStmt::else_cond );1087 }1088 1089 VISIT_END( Stmt, node );1090 1130 } 1091 1131 … … 2194 2234 } 2195 2235 2196 #undef __pedantic_pass_assertf2197 #undef __pedantic_pass_assert2198 2236 #undef VISIT_START 2199 2237 #undef VISIT_END -
src/AST/Pass.proto.hpp
r044ae62 r3a513d89 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 … … 593 534 594 535 } // namespace ast::__pass 595 596 #undef __pedantic_pass_assertf597 #undef __pedantic_pass_assert -
src/AST/Print.cpp
r044ae62 r3a513d89 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() ) { … … 788 761 } 789 762 790 virtual const ast::WhenClause * visit( const ast::WhenClause * node ) override final {791 os << indent-1 << "target: ";792 safe_print( node->target );793 794 if ( node->stmt ) {795 os << indent-1 << "... with statment:" << endl;796 node->stmt->accept( *this );797 }798 799 if ( node->when_cond ) {800 os << indent-1 << "... with when condition:" << endl;801 node->when_cond->accept( *this );802 }803 804 return node;805 }806 807 763 virtual const ast::Stmt * visit( const ast::WaitForStmt * node ) override final { 808 764 os << "Waitfor Statement" << endl; … … 842 798 virtual const ast::WaitForClause * visit( const ast::WaitForClause * node ) override final { 843 799 os << indent-1 << "target function: "; 844 safe_print( node->target );800 safe_print( node->target_func ); 845 801 846 802 if ( !node->target_args.empty() ) { … … 856 812 } 857 813 858 if ( node-> when_cond ) {814 if ( node->cond ) { 859 815 os << indent-1 << "... with condition:" << endl; 860 node->when_cond->accept( *this ); 861 } 862 863 return node; 864 } 865 866 virtual const ast::Stmt * visit( const ast::WaitUntilStmt * node ) override final { 867 os << "Waituntil Statement" << endl; 868 indent += 2; 869 for( const auto & clause : node->clauses ) { 870 clause->accept( *this ); 871 } 872 print(node); // calls print( const ast::WaitStmt * node ) 816 node->cond->accept( *this ); 817 } 818 873 819 return node; 874 820 } -
src/AST/Stmt.hpp
r044ae62 r3a513d89 378 378 }; 379 379 380 // Base class of WaitFor/WaitUntil statements381 // form: KEYWORD(...) ... timeout(...) ... else ... 382 class WaitStmt : public Stmt { 383 public: 384 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
r044ae62 r3a513d89 51 51 virtual const ast::FinallyClause * visit( const ast::FinallyClause * ) = 0; 52 52 virtual const ast::Stmt * visit( const ast::SuspendStmt * ) = 0; 53 virtual const ast::WhenClause * visit( const ast::WhenClause * ) = 0;54 53 virtual const ast::Stmt * visit( const ast::WaitForStmt * ) = 0; 55 54 virtual const ast::WaitForClause * visit( const ast::WaitForClause * ) = 0; 56 virtual const ast::Stmt * visit( const ast::WaitUntilStmt * ) = 0;57 55 virtual const ast::Decl * visit( const ast::WithStmt * ) = 0; 58 56 virtual const ast::NullStmt * visit( const ast::NullStmt * ) = 0; -
src/Common/CodeLocationTools.cpp
r044ae62 r3a513d89 129 129 macro(FinallyClause, FinallyClause) \ 130 130 macro(SuspendStmt, Stmt) \ 131 macro(WhenClause, WhenClause) \132 131 macro(WaitForStmt, Stmt) \ 133 132 macro(WaitForClause, WaitForClause) \ 134 macro(WaitUntilStmt, Stmt) \135 133 macro(WithStmt, Decl) \ 136 134 macro(NullStmt, NullStmt) \ -
src/Concurrency/WaitforNew.cpp
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 9 9 // Author : Peter A. Buhr 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Wed Apr 26 16:45:37202313 // Update Count : 63 3011 // Last Modified By : Andrew Beach 12 // Last Modified On : Tue Apr 4 14:02:00 2023 13 // Update Count : 6329 14 14 // 15 15 … … 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 … … 1684 1682 1685 1683 waituntil: 1686 WAITUNTIL '(' c omma_expression ')'1684 WAITUNTIL '(' cast_expression ')' 1687 1685 { $$ = $3; } 1688 1686 ; … … 1690 1688 waituntil_clause: 1691 1689 when_clause_opt waituntil statement 1692 { $$ = build_waituntil_clause( yylloc, $1, $2, maybe_build_compound( yylloc, $3 ) ); }1690 { printf( "waituntil_clause 1\n" ); $$ = nullptr; } 1693 1691 | '(' wor_waituntil_clause ')' 1694 { $$ = $2; }1692 { printf( "waituntil_clause 2\n" ); $$ = nullptr; } 1695 1693 ; 1696 1694 1697 1695 wand_waituntil_clause: 1698 1696 waituntil_clause %prec THEN 1699 { $$ = $1; }1697 { printf( "wand_waituntil_clause 1\n" ); $$ = nullptr; } 1700 1698 | waituntil_clause wand wand_waituntil_clause 1701 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::AND, $1, $3 ); }1699 { printf( "wand_waituntil_clause 2\n" ); $$ = nullptr; } 1702 1700 ; 1703 1701 1704 1702 wor_waituntil_clause: 1705 1703 wand_waituntil_clause 1706 { $$ = $1; }1704 { printf( "wor_waituntil_clause 1\n" ); $$ = nullptr; } 1707 1705 | wor_waituntil_clause wor wand_waituntil_clause 1708 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::OR, $1, $3 ); }1706 { printf( "wor_waituntil_clause 2\n" ); $$ = nullptr; } 1709 1707 | wor_waituntil_clause wor when_clause_opt ELSE statement 1710 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::LEFT_OR, $1, build_waituntil_else( yylloc, $3, maybe_build_compound( yylloc, $5 ) ) ); }1708 { printf( "wor_waituntil_clause 3\n" ); $$ = nullptr; } 1711 1709 | wor_waituntil_clause wor when_clause_opt timeout statement %prec THEN 1712 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::LEFT_OR, $1, build_waituntil_timeout( yylloc, $3, $4, maybe_build_compound( yylloc, $5 ) ) ); }1710 { printf( "wor_waituntil_clause 4\n" ); $$ = nullptr; } 1713 1711 // "else" must be conditional after timeout or timeout is never triggered (i.e., it is meaningless) 1714 1712 | wor_waituntil_clause wor when_clause_opt timeout statement wor ELSE statement // syntax error 1715 1713 { SemanticError( yylloc, "else clause must be conditional after timeout or timeout never triggered." ); $$ = nullptr; } 1716 1714 | wor_waituntil_clause wor when_clause_opt timeout statement wor when_clause ELSE statement 1717 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::LEFT_OR, $1, 1718 new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::OR, 1719 build_waituntil_timeout( yylloc, $3, $4, maybe_build_compound( yylloc, $5 ) ), 1720 build_waituntil_else( yylloc, $7, maybe_build_compound( yylloc, $9 ) ) ) ); } 1715 { printf( "wor_waituntil_clause 6\n" ); $$ = nullptr; } 1721 1716 ; 1722 1717 … … 1724 1719 wor_waituntil_clause %prec THEN 1725 1720 // SKULLDUGGERY: create an empty compound statement to test parsing of waituntil statement. 1726 { 1727 $$ = new StatementNode( build_waituntil_stmt( yylloc, $1 ) ); 1728 // $$ = new StatementNode( build_compound( yylloc, nullptr ) ); 1729 } 1721 { $$ = new StatementNode( build_compound( yylloc, nullptr ) ); } 1730 1722 ; 1731 1723 -
src/ResolvExpr/Resolver.cc
r044ae62 r3a513d89 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
r044ae62 r3a513d89 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
r044ae62 r3a513d89 11 11 ## Created On : Sun May 31 09:08:15 2015 12 12 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Tue May 16 09:27:48202314 ## Update Count : 17813 ## 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}"} 27 arch_support = "x86/x64/arm" 28 DEBUG_FLAGS = -debug -g -O0 29 30 quick_test = avl_test operators numericConstants expression enum array typeof cast raii/dtor-early-exit raii/init_once attributes meta/dumpable 31 24 debug=yes 25 installed=no 32 26 archiveerrors= 27 28 DEBUG_FLAGS=-debug -g -O0 29 30 quick_test=avl_test operators numericConstants expression enum array typeof cast raii/dtor-early-exit raii/init_once attributes meta/dumpable 31 33 32 concurrent= 34 33 timeouts= … … 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 70 .INTERMEDIATE 63 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=${arch_support}]" 131 @echo "" 132 @echo " Run the short (quick) test suite." 133 @echo " $$ make quick [debug=yes/no] [installed=yes/no] [arch=${arch_support}]" 134 @echo "" 135 @echo " Run the concurrent test suite." 136 @echo " $$ make concurrency [debug=yes/no] [installed=yes/no] [arch=${arch_support}]" 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/PRNG.cfa
r044ae62 r3a513d89 8 8 // Created On : Wed Dec 29 09:38:12 2021 9 9 // Last Modified By : Peter A. Buhr 10 // Last Modified On : S un Apr 23 22:02:09202311 // Update Count : 4 2010 // Last Modified On : Sat Apr 15 16:44:31 2023 11 // Update Count : 419 12 12 // 13 13 … … 123 123 124 124 int main() { 125 // setlocale( LC_NUMERIC, getenv( "LANG" ) ); // causes leaked storage message 126 127 // only works on the current pthread thread 125 // causes leaked storage message 126 // setlocale( LC_NUMERIC, getenv( "LANG" ) ); // print digit separator 128 127 // locale_t loc = newlocale( LC_NUMERIC_MASK, getenv( "LANG" ), (locale_t)0p ); 129 128 // if ( loc == (locale_t)0p ) abort( "newlocale" ); -
tests/concurrent/futures/select_future.cfa
r044ae62 r3a513d89 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.