Changes in / [6e4c44d:3982384]
- Files:
-
- 305 added
- 8 deleted
- 62 edited
Legend:
- Unmodified
- Added
- Removed
-
Jenkins/FullBuild
r6e4c44d r3982384 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 ) }, 22 23 gcc_10_x64_new: { trigger_build( 'gcc-10', 'x64', false ) }, 23 24 gcc_09_x64_new: { trigger_build( 'gcc-9', 'x64', false ) }, 24 25 gcc_08_x64_new: { trigger_build( 'gcc-8', 'x64', false ) }, 25 26 gcc_07_x64_new: { trigger_build( 'gcc-7', 'x64', false ) }, 26 gcc_06_x64_new: { trigger_build( 'gcc-6', 'x64', false ) },27 // gcc_06_x64_new: { trigger_build( 'gcc-6', 'x64', false ) }, 27 28 clang_x64_new: { trigger_build( 'clang', 'x64', true ) }, 28 29 ) … … 41 42 } 42 43 43 // If an exception is caught we need to change the status and remember to44 // attach the build log to the email44 // If an exception is caught we need to change the status and remember to 45 // attach the build log to the email 45 46 catch (Exception caughtError) { 46 47 echo('error caught') … … 73 74 // Run the build 74 75 // Don't propagate, it doesn't play nice with our email setup 75 def result = build job: 'Cforall/master', \76 def result = build job: 'Cforall/master', \ 76 77 parameters: [ \ 77 78 [$class: 'StringParameterValue', \ … … 83 84 [$class: 'BooleanParameterValue', \ 84 85 name: 'NewAST', \ 85 value: true], 86 value: true], \ 86 87 [$class: 'BooleanParameterValue', \ 87 88 name: 'RunAllTests', \ 88 value: true], 89 value: true], \ 89 90 [$class: 'BooleanParameterValue', \ 90 91 name: 'RunBenchmark', \ 91 value: true], 92 value: true], \ 92 93 [$class: 'BooleanParameterValue', \ 93 name: 'BuildDocumentation', \94 name: 'BuildDocumentation', \ 94 95 value: doc], \ 95 96 [$class: 'BooleanParameterValue', \ 96 97 name: 'Publish', \ 97 value: true], 98 value: true], \ 98 99 [$class: 'BooleanParameterValue', \ 99 100 name: 'Silent', \ 100 value: true], 101 ], 101 value: true], \ 102 ], \ 102 103 propagate: false 103 104 … … 111 112 112 113 def trigger_dist(String commitId, String buildNum) { 113 def result = build job: 'Cforall_Distribute_Ref', \114 def result = build job: 'Cforall_Distribute_Ref', \ 114 115 parameters: [ \ 115 116 string(name: 'GitRef', value: commitId), \ 116 string(name: 'Build' , value: buildNum) \117 ], 117 string(name: 'Build' , value: buildNum) \ 118 ], \ 118 119 propagate: false 119 120 -
Jenkinsfile
r6e4c44d r3982384 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" all-tests debug=yes archiveerrors=${BuildDir}/tests/crashes/full-debug"""157 sh """make ${jopt} --no-print-directory -C tests timeouts="--timeout=600 --global-timeout=14400" 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" all-tests debug=noarchiveerrors=${BuildDir}/tests/crashes/full-nodebug"""164 sh """make ${jopt} --no-print-directory -C tests timeouts="--timeout=600 --global-timeout=14400" 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 gcc-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', 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\nclang', \ 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', \ 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', 409 411 410 412 // It's unfortunate but it looks like we need to checkout the entire repo just to get -
Makefile.am
r6e4c44d r3982384 11 11 ## Created On : Sun May 31 22:14:18 2015 12 12 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Sat Feb 2 16:54:42 201914 ## Update Count : 2113 ## Last Modified On : Fri May 12 18:30:01 2023 14 ## Update Count : 42 15 15 ############################################################################### 16 16 … … 24 24 DIST_SUBDIRS = driver src . libcfa tests 25 25 26 @LIBCFA_TARGET_MAKEFILES@ : Makefile $ (srcdir)/libcfa/configure27 @$ (eval config_file = $(dir $@)config.data)28 @ls $ (config_file)|| (echo "Missing config.data, re-run configure script again" && false)29 @$ (eval config_data = $(shell cat $(config_file)))30 @echo "Configuring libcfa ($ (abs_top_srcdir)/libcfa/configure) with '$(config_data)' from $(shell pwd) / $(dir $@)"31 @cd $ (dir $@) && $(abs_top_srcdir)/libcfa/configure $(config_data)26 @LIBCFA_TARGET_MAKEFILES@ : Makefile ${srcdir}/libcfa/configure 27 @${eval config_file = ${dir ${@}}config.data} 28 @ls ${config_file} || (echo "Missing config.data, re-run configure script again" && false) 29 @${eval config_data = ${shell cat ${config_file}}} 30 @echo "Configuring libcfa (${abs_top_srcdir}/libcfa/configure) with '${config_data}' from ${shell pwd} / ${dir ${@}}" 31 @cd ${dir ${@}} && ${abs_top_srcdir}/libcfa/configure ${config_data} 32 32 33 33 noinst_DATA = @LIBCFA_TARGET_MAKEFILES@ … … 37 37 EXTRA_DIST = LICENSE doc/man/cfa.1 libcfa/configure libcfa/Makefile.dist.am libcfa/Makefile.dist.in tools/build/distcc_hash tools/build/push2dist.sh 38 38 39 debug =yes40 check: 41 $(MAKE) -C tests all-tests installed=no debug=${debug}39 debug ?= yes 40 installed ?= no 41 ARCH = ${if ${arch},"arch=${arch}"} 42 42 43 installcheck:44 $ (MAKE) -C tests all-tests installed=yes debug=${debug}43 check : 44 ${MAKE} -C tests tests installed=${installed} debug=${debug} ${ARCH} 45 45 46 configure-libcfa: @LIBCFA_TARGET_MAKEFILES@ 46 tests : check # synonym 47 48 installcheck : 49 ${MAKE} -C tests tests installed=yes debug=${debug} ${ARCH} 50 51 installtest : installcheck # synonym 52 53 help : 54 @echo "user targets:" 55 @echo " Compile compiler/runtime and run test suite." 56 @echo " $$ make check / tests [debug=yes/no] [installed=yes/no] [arch=x86/x64/arm]" 57 @echo "" 58 @echo " Compile compiler/runtime, run test suite, and install." 59 @echo " $$ make installcheck / installtests [debug=yes/no] installed=yes [arch=x86/x64/arm]" 60 61 configure-libcfa : @LIBCFA_TARGET_MAKEFILES@ 47 62 @true 48 63 49 status : @LIBCFA_TARGET_MAKEFILES@64 status : @LIBCFA_TARGET_MAKEFILES@ 50 65 @echo -ne "translator\n\t" 51 66 @./config.status --config | sed "s/ /\n\t/g; s/\t'/\t/g; s/'\n/\n/g; s/^'//g; s/'$$//g" 52 67 @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" 53 68 54 @LIBCFA_TARGET_DIRS@ ::55 $ (MAKE) -C $@ $(MAKECMDGOALS)69 @LIBCFA_TARGET_DIRS@ :: 70 ${MAKE} -C ${@} ${MAKECMDGOALS} 56 71 57 mostlyclean clean distclean maintainer-clean : @LIBCFA_TARGET_DIRS@72 mostlyclean clean distclean maintainer-clean : @LIBCFA_TARGET_DIRS@ -
doc/LaTeXmacros/lstlang.sty
r6e4c44d r3982384 8 8 %% Created On : Sat May 13 16:34:42 2017 9 9 %% Last Modified By : Peter A. Buhr 10 %% Last Modified On : Mon May 31 08:20:41 202111 %% Update Count : 2810 %% Last Modified On : Tue May 2 08:52:35 2023 11 %% Update Count : 30 12 12 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 13 13 … … 112 112 \lstdefinelanguage{CFA}[ANSI]{C}{ 113 113 morekeywords={ 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, 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, 122 123 }, 123 124 moredirectives={defined,include_next}% -
doc/bibliography/pl.bib
r6e4c44d r3982384 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 200 215 @misc{ActorBenchmarks, 201 keywords = {Actors, microbenchmarks, uC++. CAF, AkkaC, AkkaT, ProtoActor},216 keywords = {Actors, microbenchmarks, uC++. CAF, ProtoActor, AkkaC, AkkaT}, 202 217 contributer = {pabuhr@plg}, 203 218 key = {ActorBenchmarks}, … … 215 230 publisher = {MIT Press, Cambridge}, 216 231 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}, 217 254 } 218 255 … … 303 340 304 341 @article{Agrawal08, 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},342 keywords = {Adaptive scheduling, multiprocessing, processor allocation, randomized algorithm, space sharing, thread scheduling, two-level scheduling, work-stealing}, 306 343 author = {Agrawal, Kunal and Leiserson, Charles E. and He, Yuxiong and Hsu, Wen Jing}, 307 344 title = {Adaptive Work-stealing with Parallelism Feedback}, … … 435 472 month = sep, 436 473 year = 2016, 437 note = {\href{http://doc.akka.io/docs/akka/2.4/AkkaScala.pdf}{http://\-doc.akka.io/\-docs/\-akka/\-2.4/\-AkkaScala.pdf}}, 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, 438 484 } 439 485 … … 443 489 title = {Akka Futures}, 444 490 author = {{Lightbend}}, 445 howpublished= {\href{https://doc.akka.io/docs/akka/2.5/futures.html}{https://\-doc.akka.io/\-docs/\-akka/\-2.5/\-futures.html}}, 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}}, 446 501 year = 2022, 447 502 } … … 1118 1173 @inproceedings{CAF, 1119 1174 keywords = {performance measurement, actor model, c++, message-oriented middleware, distributed debugging}, 1175 contributer = {pabuhr@plg}, 1120 1176 author = {Charousset, Dominik and Hiesgen, Raphael and Schmidt, Thomas C.}, 1121 title = {{CAF} - the {C}++ Actor Framework for Scalable and Resource-Efficient Applications},1177 title = {{CAF} -- the {C}++ Actor Framework for Scalable and Resource-Efficient Applications}, 1122 1178 publisher = {ACM}, 1123 1179 address = {New York, NY, USA}, 1124 1180 organization= {Proceedings of the 4th International Workshop on Programming Based on Actors Agents \& Decentralized Control}, 1125 1181 pages = {15-28}, 1126 numpages = {14},1182 numpages = 14, 1127 1183 location = {Portland, Oregon, USA}, 1128 1184 series = {AGERE'14}, 1129 year = {2014},1185 year = 2014, 1130 1186 } 1131 1187 … … 3102 3158 year = 2016, 3103 3159 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}}, 3104 3170 } 3105 3171 … … 5336 5402 } 5337 5403 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 5338 5414 @article{multilisp, 5339 5415 keywords = {futures, scheme}, … … 6618 6694 } 6619 6695 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 6620 6712 @book{PowerPC, 6621 6713 key = {PowerPC processor}, … … 6679 6771 title = {Programming Languages -- {C}}, 6680 6772 organization= {International Standard ISO/IEC 9899:1999 (E)}, 6681 publisher 6773 publisher = {American National Standards Institute}, 6682 6774 address = {www.ansi.org}, 6683 6775 year = 1999, … … 6690 6782 title = {{C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Programming Language ISO/IEC 14882:1998}, 6691 6783 edition = {1st}, 6692 organization 6784 organization= {International Standard Organization}, 6693 6785 address = {Geneva, Switzerland}, 6694 6786 year = 1998, … … 6981 7073 } 6982 7074 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 6983 7084 @misc{Pthreads, 6984 7085 keywords = {pthreads, C concurrency}, … … 7458 7559 title = {The Semantics of a Simple Language for Parallel Programming}, 7459 7560 author = {Gilles Kahn}, 7460 booktitle= {IFIP Congress},7561 organization= {IFIP Congress}, 7461 7562 year = 1974, 7462 7563 } … … 8173 8274 8174 8275 @article{SysVABI, 8175 keywords = 8176 contributer = 8276 keywords = {System V ABI}, 8277 contributer = {a3moss@uwaterloo.ca}, 8177 8278 title = {System {V} application binary interface}, 8178 8279 author = {Matz, Michael and Hubicka, Jan and Jaeger, Andreas and Mitchell, Mark}, … … 8180 8281 volume = {99}, 8181 8282 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} 8182 8295 } 8183 8296 … … 8206 8319 journal = jcss, 8207 8320 year = 1978, 8208 volume = 17, pages = {348-375} 8321 volume = 17, 8322 pages = {348-375}, 8209 8323 } 8210 8324 -
doc/theses/colby_parsons_MMAth/Makefile
r6e4c44d r3982384 13 13 ## Define the text source files. 14 14 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 \ 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 \ 23 24 } 24 25 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 26 FIGURES = ${addsuffix .pgf, \ 27 figures/pykeExecutor \ 28 figures/pykeCFAExecutor \ 29 figures/nasusExecutor \ 30 figures/nasusCFAExecutor \ 31 figures/pykeMatrix \ 32 figures/pykeCFAMatrix \ 33 figures/nasusMatrix \ 34 figures/nasusCFAMatrix \ 35 figures/pykeRepeat \ 36 figures/pykeCFARepeat \ 37 figures/nasusRepeat \ 38 figures/nasusCFARepeat \ 39 figures/pykeCFABalance-One \ 40 figures/nasusCFABalance-One\ 41 figures/pykeCFABalance-Multi \ 42 figures/nasusCFABalance-Multi \ 43 figures/pyke_Aggregate_Lock_2 \ 44 figures/pyke_Aggregate_Lock_4 \ 45 figures/pyke_Aggregate_Lock_8 \ 46 figures/nasus_Aggregate_Lock_2 \ 47 figures/nasus_Aggregate_Lock_4 \ 48 figures/nasus_Aggregate_Lock_8 \ 48 49 figures/nasus_Channel_Contention \ 49 50 figures/pyke_Channel_Contention \ 50 51 } 51 52 52 DATA = data/pykeSendStatic 53 data/pykeSendDynamic\54 data/pykeExecutorMem\55 data/nasusSendStatic\56 data/nasusSendDynamic\57 data/pykeExecutorMem\53 DATA = data/pykeSendStatic \ 54 data/pykeSendDynamic\ 55 data/pykeExecutorMem\ 56 data/nasusSendStatic\ 57 data/nasusSendDynamic\ 58 data/pykeExecutorMem\ 58 59 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 60 PICTURES = ${addsuffix .tikz, \ 61 diagrams/standard_actor \ 62 diagrams/inverted_actor \ 63 diagrams/gulp \ 64 diagrams/chain_swap \ 65 diagrams/M_to_one_swap \ 66 diagrams/acyclic_swap \ 67 diagrams/cyclic_swap \ 67 68 } 68 69 … … 105 106 # Make index from *.aux entries and input index at end of document 106 107 makeglossaries -q -s ${Build}/${basename $@}.ist ${Build}/${basename $@} 107 -version.sh108 108 # Run again to finish citations 109 109 ${LaTeX} ${basename $@}.tex 110 111 110 112 111 ## Define the default recipes. -
doc/theses/colby_parsons_MMAth/benchmarks/actors/data/nasus_CFA.txt
r6e4c44d r3982384 1 1 5 2 2 1 2 4 8 16 24 32 48 3 CFA-LV CFA-NS CFA-R3 Longest-Victim No-Stealing Random 4 4 executor 5 CFA-LV:5 Longest-Victim: 6 6 proc time (s) 7 7 1 29.22 … … 45 45 48 1.20 46 46 48 1.20 47 CFA-NS:47 No-Stealing: 48 48 proc time (s) 49 49 1 28.25 … … 87 87 48 1.18 88 88 48 1.16 89 CFA-R:89 Random: 90 90 proc time (s) 91 91 1 28.58 … … 131 131 132 132 matrix 133 CFA-LV:133 Longest-Victim: 134 134 proc time (s) 135 135 1 105.48 … … 173 173 48 2.75 174 174 48 2.96 175 CFA-NS:175 No-Stealing: 176 176 proc time (s) 177 177 1 106.01 … … 215 215 48 2.78 216 216 48 2.92 217 CFA-R:217 Random: 218 218 proc time (s) 219 219 1 105.91 … … 259 259 260 260 repeat 261 CFA-LV:261 Longest-Victim: 262 262 proc time (s) 263 263 1 1.17 … … 301 301 48 13.73 302 302 48 14.55 303 CFA-NS:303 No-Stealing: 304 304 proc time (s) 305 305 1 1.15 … … 343 343 48 13.03 344 344 48 12.83 345 CFA-R:345 Random: 346 346 proc time (s) 347 347 1 1.15 … … 387 387 388 388 balance_one 389 CFA-LV:389 Longest-Victim: 390 390 proc time (s) 391 391 1 20.06 … … 429 429 48 1.11 430 430 48 1.12 431 CFA-NS:431 No-Stealing: 432 432 proc time (s) 433 433 1 20.13 … … 471 471 48 19.95 472 472 48 20.00 473 CFA-R:473 Random: 474 474 proc time (s) 475 475 1 19.92 … … 515 515 516 516 balance_multi 517 CFA-LV:517 Longest-Victim: 518 518 proc time (s) 519 519 1 8.17 … … 557 557 48 5.75 558 558 48 5.68 559 CFA-NS:559 No-Stealing: 560 560 proc time (s) 561 561 1 8.10 … … 599 599 48 9.28 600 600 48 9.26 601 CFA-R:601 Random: 602 602 proc time (s) 603 603 1 8.08 -
doc/theses/colby_parsons_MMAth/benchmarks/actors/data/pyke_CFA.txt
r6e4c44d r3982384 1 1 5 2 2 1 2 4 8 16 24 32 48 3 CFA-LV CFA-NS CFA-R3 Longest-Victim No-Stealing Random 4 4 executor 5 CFA-LV:5 Longest-Victim: 6 6 proc time (s) 7 7 1 29.04 … … 45 45 48 2.58 46 46 48 2.55 47 CFA-NS:47 No-Stealing: 48 48 proc time (s) 49 49 1 28.15 … … 87 87 48 2.59 88 88 48 2.60 89 CFA-R:89 Random: 90 90 proc time (s) 91 91 1 29.06 … … 131 131 132 132 matrix 133 CFA-LV:133 Longest-Victim: 134 134 proc time (s) 135 135 1 127.44 … … 173 173 48 6.83 174 174 48 6.81 175 CFA-NS:175 No-Stealing: 176 176 proc time (s) 177 177 1 127.64 … … 215 215 48 6.77 216 216 48 6.74 217 CFA-R:217 Random: 218 218 proc time (s) 219 219 1 127.26 … … 259 259 260 260 repeat 261 CFA-LV:261 Longest-Victim: 262 262 proc time (s) 263 263 1 1.16 … … 301 301 48 19.75 302 302 48 19.71 303 CFA-NS:303 No-Stealing: 304 304 proc time (s) 305 305 1 1.18 … … 343 343 48 13.88 344 344 48 13.71 345 CFA-R:345 Random: 346 346 proc time (s) 347 347 1 1.18 … … 387 387 388 388 balance_one 389 CFA-LV:389 Longest-Victim: 390 390 proc time (s) 391 391 1 19.46 … … 429 429 48 2.12 430 430 48 2.17 431 CFA-NS:431 No-Stealing: 432 432 proc time (s) 433 433 1 21.00 … … 471 471 48 47.50 472 472 48 47.72 473 CFA-R:473 Random: 474 474 proc time (s) 475 475 1 20.81 … … 515 515 516 516 balance_multi 517 CFA-LV:517 Longest-Victim: 518 518 proc time (s) 519 519 1 7.94 … … 557 557 48 14.38 558 558 48 14.50 559 CFA-NS:559 No-Stealing: 560 560 proc time (s) 561 561 1 8.48 … … 599 599 48 21.50 600 600 48 21.15 601 CFA-R:601 Random: 602 602 proc time (s) 603 603 1 8.49 -
doc/theses/colby_parsons_MMAth/benchmarks/actors/plotData.py
r6e4c44d r3982384 2 2 import sys 3 3 import time 4 import itertools 4 5 import matplotlib.pyplot as plt 5 6 import matplotlib.ticker as ticks … … 17 18 'text.usetex': True, 18 19 'pgf.rcfonts': False, 20 'font.size': 16 19 21 }) 22 marker = itertools.cycle(('o', 's', 'D', 'x', 'p', '^', 'h', '*', 'v' )) 20 23 21 24 readfile = open(sys.argv[1], "r") … … 162 165 plt.xlabel("Cores") 163 166 for idx, arr in enumerate(data): 164 plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker= 'o')167 plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker=next(marker) ) 165 168 if currBench == Bench.Executor or currBench == Bench.Matrix or currBench == Bench.Balance_One or currBench == Bench.Repeat: 166 169 plt.yscale("log") -
doc/theses/colby_parsons_MMAth/benchmarks/channels/plotData.py
r6e4c44d r3982384 2 2 import sys 3 3 import time 4 import itertools 4 5 import matplotlib.pyplot as plt 5 6 import matplotlib.ticker as ticks … … 17 18 'text.usetex': True, 18 19 'pgf.rcfonts': False, 20 'font.size': 16 19 21 }) 22 marker = itertools.cycle(('o', 's', 'D', 'x', 'p', '^', 'h', '*', 'v' )) 20 23 21 24 readfile = open(sys.argv[1], "r") … … 70 73 if currBench == Bench.Unset: 71 74 if line == "contend:": 72 name = "C ontend"75 name = "Channel Contention" 73 76 currBench = Bench.Contend 74 77 elif line == "zero:": … … 126 129 plt.xlabel("Cores") 127 130 for idx, arr in enumerate(data): 128 plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker= 'o')131 plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker=next(marker) ) 129 132 130 133 plt.yscale("log") -
doc/theses/colby_parsons_MMAth/benchmarks/mutex_stmt/plotData.py
r6e4c44d r3982384 2 2 import sys 3 3 import time 4 import itertools 4 5 import matplotlib.pyplot as plt 5 6 import matplotlib.ticker as ticks … … 17 18 'text.usetex': True, 18 19 'pgf.rcfonts': False, 20 'font.size': 16 19 21 }) 22 marker = itertools.cycle(('o', 's', 'D', 'x', 'p', '^', 'h', '*', 'v' )) 20 23 21 24 readfile = open(sys.argv[1], "r") … … 99 102 plt.xlabel("Cores") 100 103 for idx, arr in enumerate(data): 101 plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker= 'o')104 plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker=next(marker) ) 102 105 plt.yscale("log") 103 106 plt.xticks(procs) -
doc/theses/colby_parsons_MMAth/benchmarks/mutex_stmt/run
r6e4c44d r3982384 96 96 97 97 # toggle benchmarks 98 order=${ true}98 order=${false} 99 99 rand=${true} 100 100 baseline=${true} -
doc/theses/colby_parsons_MMAth/code/swap_queues.cfa
r6e4c44d r3982384 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) { 1 // sequential equivalent swap 2 void swap( uint victim_idx, uint my_idx ) { 3 // Step 0: 6 4 work_queue * my_queue = request_queues[my_idx]; 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; 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; 26 12 } 27 13 … … 35 21 36 22 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 queues 37 25 work_queue * my_queue = request_queues[my_idx]; 38 26 work_queue * vic_queue = request_queues[victim_idx]; 39 27 28 // Step 1: 40 29 // If either queue is 0p then they are in the process of being stolen 41 30 // 0p is CForAll's equivalent of C++'s nullptr 42 if ( vic_queue == 0p || my_queue == 0p) return false;31 if ( vic_queue == 0p ) return false; 43 32 44 // Try to set our queue ptr to be 0p. 45 // If this CAS fails someone moved our queue so return false 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 46 36 if ( !CAS( &request_queues[my_idx], &my_queue, 0p ) ) 47 37 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 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 51 42 if ( !CAS( &request_queues[victim_idx], &vic_queue, my_queue ) ) { 52 43 request_queues[my_idx] = my_queue; // reset queue ptr back to prev val … … 54 45 } 55 46 47 // Step 4: 56 48 // Successfully swapped. 57 // Our queue is 0p so no one will touch it so write back without CAS is safe 49 // Thief's ptr is 0p so no one will touch it 50 // Write back without CAS is safe 58 51 request_queues[my_idx] = vic_queue; 59 52 return true; -
doc/theses/colby_parsons_MMAth/figures/nasus_Aggregate_Lock_2.pgf
r6e4c44d r3982384 77 77 \pgfsetstrokecolor{textcolor}% 78 78 \pgfsetfillcolor{textcolor}% 79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 0.000000}{12.000000}\selectfont \(\displaystyle 2\)}%79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 4\)}%104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 8\)}%129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 16\)}%154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 24\)}%179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 32\)}%204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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. 251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}%210 \pgftext[x=3.280000in,y=0.161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}% 211 211 \end{pgfscope}% 212 212 \begin{pgfscope}% … … 233 233 \pgfsetstrokecolor{textcolor}% 234 234 \pgfsetfillcolor{textcolor}% 235 \pgftext[x=0. 501581in,y=1.092918in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{5}\)}%235 \pgftext[x=0.399655in,y=1.057810in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{5}\)}% 236 236 \end{pgfscope}% 237 237 \begin{pgfscope}% … … 258 258 \pgfsetstrokecolor{textcolor}% 259 259 \pgfsetfillcolor{textcolor}% 260 \pgftext[x=0. 501581in,y=2.054062in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{6}\)}%260 \pgftext[x=0.399655in,y=2.018954in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{6}\)}% 261 261 \end{pgfscope}% 262 262 \begin{pgfscope}% … … 283 283 \pgfsetstrokecolor{textcolor}% 284 284 \pgfsetfillcolor{textcolor}% 285 \pgftext[x=0. 501581in,y=3.015207in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{7}\)}%285 \pgftext[x=0.399655in,y=2.980099in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{7}\)}% 286 286 \end{pgfscope}% 287 287 \begin{pgfscope}% … … 308 308 \pgfsetstrokecolor{textcolor}% 309 309 \pgfsetfillcolor{textcolor}% 310 \pgftext[x=0. 501581in,y=3.976351in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{8}\)}%310 \pgftext[x=0.399655in,y=3.941243in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{8}\)}% 311 311 \end{pgfscope}% 312 312 \begin{pgfscope}% … … 903 903 \pgfsetstrokecolor{textcolor}% 904 904 \pgfsetfillcolor{textcolor}% 905 \pgftext[x=0. 446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (entries)}%905 \pgftext[x=0.344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (entries)}% 906 906 \end{pgfscope}% 907 907 \begin{pgfscope}% … … 1492 1492 \end{pgfscope}% 1493 1493 \begin{pgfscope}% 1494 \pgfsys@transformshift{3.129697in}{ 0in}%1494 \pgfsys@transformshift{3.129697in}{-3.129697in}% 1495 1495 \pgfsys@useobject{currentmarker}{}% 1496 1496 \end{pgfscope}% … … 1632 1632 \pgfusepath{clip}% 1633 1633 \pgfsetbuttcap% 1634 \pgfset roundjoin%1634 \pgfsetmiterjoin% 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}% 1639 1935 \pgfsetstrokecolor{currentstroke}% 1640 1936 \pgfsetdash{}{0pt}% … … 1653 1949 }% 1654 1950 \begin{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}% 1951 \pgfsys@transformshift{3.869368in}{2.880475in}% 1952 \pgfsys@useobject{currentmarker}{}% 1953 \end{pgfscope}% 1854 1954 \end{pgfscope}% 1855 1955 \begin{pgfscope}% … … 1857 1957 \pgfsetstrokecolor{textcolor}% 1858 1958 \pgfsetfillcolor{textcolor}% 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}% 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}% 1902 1979 \pgfsetstrokecolor{currentstroke}% 1903 1980 \pgfsetdash{}{0pt}% … … 1908 1985 }% 1909 1986 \begin{pgfscope}% 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}%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}% 1921 1998 \pgfsetstrokecolor{currentstroke}% 1922 1999 \pgfsetdash{}{0pt}% … … 1927 2004 }% 1928 2005 \begin{pgfscope}% 1929 \pgfsys@transformshift{ 4.570184in}{2.749457in}%2006 \pgfsys@transformshift{3.869368in}{2.667126in}% 1930 2007 \pgfsys@useobject{currentmarker}{}% 1931 2008 \end{pgfscope}% … … 1935 2012 \pgfsetroundjoin% 1936 2013 \pgfsetlinewidth{1.505625pt}% 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 \pgfset roundjoin%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}%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 \pgfsetmiterjoin% 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}% 1951 2028 \pgfsetstrokecolor{currentstroke}% 1952 2029 \pgfsetdash{}{0pt}% 1953 2030 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\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}}% 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}}% 1963 2035 \pgfpathclose% 1964 2036 \pgfusepath{stroke,fill}% 1965 2037 }% 1966 2038 \begin{pgfscope}% 1967 \pgfsys@transformshift{ 4.570184in}{2.680012in}%2039 \pgfsys@transformshift{3.869368in}{2.556015in}% 1968 2040 \pgfsys@useobject{currentmarker}{}% 1969 2041 \end{pgfscope}% … … 1973 2045 \pgfsetstrokecolor{textcolor}% 1974 2046 \pgfsetfillcolor{textcolor}% 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}%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}% 1995 2067 \pgfsetstrokecolor{currentstroke}% 1996 2068 \pgfsetdash{}{0pt}% … … 2001 2073 }% 2002 2074 \begin{pgfscope}% 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}%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}% 2014 2086 \pgfsetstrokecolor{currentstroke}% 2015 2087 \pgfsetdash{}{0pt}% … … 2020 2092 }% 2021 2093 \begin{pgfscope}% 2022 \pgfsys@transformshift{ 4.570184in}{2.555784in}%2094 \pgfsys@transformshift{3.869368in}{2.342667in}% 2023 2095 \pgfsys@useobject{currentmarker}{}% 2024 2096 \end{pgfscope}% … … 2028 2100 \pgfsetroundjoin% 2029 2101 \pgfsetlinewidth{1.505625pt}% 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}}% 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}}% 2056 2123 \pgfpathclose% 2057 2124 \pgfusepath{stroke,fill}% 2058 2125 }% 2059 2126 \begin{pgfscope}% 2060 \pgfsys@transformshift{ 4.570184in}{2.486339in}%2127 \pgfsys@transformshift{3.869368in}{2.231556in}% 2061 2128 \pgfsys@useobject{currentmarker}{}% 2062 2129 \end{pgfscope}% … … 2066 2133 \pgfsetstrokecolor{textcolor}% 2067 2134 \pgfsetfillcolor{textcolor}% 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}%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}% 2088 2155 \pgfsetstrokecolor{currentstroke}% 2089 2156 \pgfsetdash{}{0pt}% … … 2094 2161 }% 2095 2162 \begin{pgfscope}% 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}%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}% 2107 2174 \pgfsetstrokecolor{currentstroke}% 2108 2175 \pgfsetdash{}{0pt}% … … 2113 2180 }% 2114 2181 \begin{pgfscope}% 2115 \pgfsys@transformshift{ 4.570184in}{2.362111in}%2182 \pgfsys@transformshift{3.869368in}{2.018207in}% 2116 2183 \pgfsys@useobject{currentmarker}{}% 2117 2184 \end{pgfscope}% … … 2121 2188 \pgfsetroundjoin% 2122 2189 \pgfsetlinewidth{1.505625pt}% 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}%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}% 2137 2204 \pgfsetstrokecolor{currentstroke}% 2138 2205 \pgfsetdash{}{0pt}% 2139 2206 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 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}% 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}% 2154 2215 \pgfsys@useobject{currentmarker}{}% 2155 2216 \end{pgfscope}% … … 2159 2220 \pgfsetstrokecolor{textcolor}% 2160 2221 \pgfsetfillcolor{textcolor}% 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}% 2222 \pgftext[x=4.269368in,y=1.829318in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-rand}% 2255 2223 \end{pgfscope}% 2256 2224 \end{pgfpicture}% -
doc/theses/colby_parsons_MMAth/figures/nasus_Aggregate_Lock_4.pgf
r6e4c44d r3982384 77 77 \pgfsetstrokecolor{textcolor}% 78 78 \pgfsetfillcolor{textcolor}% 79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 0.000000}{12.000000}\selectfont \(\displaystyle 2\)}%79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 4\)}%104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 8\)}%129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 16\)}%154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 24\)}%179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 32\)}%204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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. 251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}%210 \pgftext[x=3.280000in,y=0.161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}% 211 211 \end{pgfscope}% 212 212 \begin{pgfscope}% … … 233 233 \pgfsetstrokecolor{textcolor}% 234 234 \pgfsetfillcolor{textcolor}% 235 \pgftext[x=0. 501581in,y=0.732645in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{3}\)}%235 \pgftext[x=0.399655in,y=0.697537in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{3}\)}% 236 236 \end{pgfscope}% 237 237 \begin{pgfscope}% … … 258 258 \pgfsetstrokecolor{textcolor}% 259 259 \pgfsetfillcolor{textcolor}% 260 \pgftext[x=0. 501581in,y=1.427374in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{4}\)}%260 \pgftext[x=0.399655in,y=1.392266in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{4}\)}% 261 261 \end{pgfscope}% 262 262 \begin{pgfscope}% … … 283 283 \pgfsetstrokecolor{textcolor}% 284 284 \pgfsetfillcolor{textcolor}% 285 \pgftext[x=0. 501581in,y=2.122103in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{5}\)}%285 \pgftext[x=0.399655in,y=2.086994in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{5}\)}% 286 286 \end{pgfscope}% 287 287 \begin{pgfscope}% … … 308 308 \pgfsetstrokecolor{textcolor}% 309 309 \pgfsetfillcolor{textcolor}% 310 \pgftext[x=0. 501581in,y=2.816831in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{6}\)}%310 \pgftext[x=0.399655in,y=2.781723in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{6}\)}% 311 311 \end{pgfscope}% 312 312 \begin{pgfscope}% … … 333 333 \pgfsetstrokecolor{textcolor}% 334 334 \pgfsetfillcolor{textcolor}% 335 \pgftext[x=0. 501581in,y=3.511560in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{7}\)}%335 \pgftext[x=0.399655in,y=3.476452in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{7}\)}% 336 336 \end{pgfscope}% 337 337 \begin{pgfscope}% … … 1194 1194 \pgfsetstrokecolor{textcolor}% 1195 1195 \pgfsetfillcolor{textcolor}% 1196 \pgftext[x=0. 446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (entries)}%1196 \pgftext[x=0.344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (entries)}% 1197 1197 \end{pgfscope}% 1198 1198 \begin{pgfscope}% … … 1857 1857 \pgfusepath{clip}% 1858 1858 \pgfsetbuttcap% 1859 \pgfset roundjoin%1859 \pgfsetmiterjoin% 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.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}}% 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}}% 1876 1872 \pgfpathclose% 1877 1873 \pgfusepath{stroke,fill}% … … 1923 1919 \pgfusepath{clip}% 1924 1920 \pgfsetbuttcap% 1925 \pgfset roundjoin%1921 \pgfsetmiterjoin% 1926 1922 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1927 1923 \pgfsetfillcolor{currentfill}% … … 1931 1927 \pgfsetdash{}{0pt}% 1932 1928 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\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}}% 1929 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 1930 \pgfpathlineto{\pgfqpoint{-0.041667in}{-0.041667in}}% 1931 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}% 1942 1932 \pgfpathclose% 1943 1933 \pgfusepath{stroke,fill}% … … 1989 1979 \pgfusepath{clip}% 1990 1980 \pgfsetbuttcap% 1991 \pgfset roundjoin%1981 \pgfsetmiterjoin% 1992 1982 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 1993 1983 \pgfsetfillcolor{currentfill}% … … 1996 1986 \pgfsetstrokecolor{currentstroke}% 1997 1987 \pgfsetdash{}{0pt}% 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}}% 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}}% 2008 1995 \pgfpathclose% 2009 1996 \pgfusepath{stroke,fill}% … … 2055 2042 \pgfusepath{clip}% 2056 2043 \pgfsetbuttcap% 2057 \pgfset roundjoin%2044 \pgfsetbeveljoin% 2058 2045 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2059 2046 \pgfsetfillcolor{currentfill}% … … 2062 2049 \pgfsetstrokecolor{currentstroke}% 2063 2050 \pgfsetdash{}{0pt}% 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}}% 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}}% 2074 2062 \pgfpathclose% 2075 2063 \pgfusepath{stroke,fill}% … … 2148 2136 \pgfsetstrokecolor{textcolor}% 2149 2137 \pgfsetfillcolor{textcolor}% 2150 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{1 2.000000}{14.400000}\selectfont Aggregate Lock Benchmark: 4 Locks}%2138 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{19.200000}{23.040000}\selectfont Aggregate Lock Benchmark: 4 Locks}% 2151 2139 \end{pgfscope}% 2152 2140 \begin{pgfscope}% … … 2161 2149 \pgfsetstrokeopacity{0.800000}% 2162 2150 \pgfsetdash{}{0pt}% 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}}%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}}% 2172 2160 \pgfpathclose% 2173 2161 \pgfusepath{stroke,fill}% … … 2180 2168 \pgfsetstrokecolor{currentstroke}% 2181 2169 \pgfsetdash{}{0pt}% 2182 \pgfpathmoveto{\pgfqpoint{ 1.063889in}{1.240191in}}%2183 \pgfpathlineto{\pgfqpoint{ 1.063889in}{1.379080in}}%2170 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.769364in}}% 2171 \pgfpathlineto{\pgfqpoint{3.869368in}{2.991586in}}% 2184 2172 \pgfusepath{stroke}% 2185 2173 \end{pgfscope}% … … 2199 2187 }% 2200 2188 \begin{pgfscope}% 2201 \pgfsys@transformshift{ 1.063889in}{1.240191in}%2189 \pgfsys@transformshift{3.869368in}{2.769364in}% 2202 2190 \pgfsys@useobject{currentmarker}{}% 2203 2191 \end{pgfscope}% … … 2218 2206 }% 2219 2207 \begin{pgfscope}% 2220 \pgfsys@transformshift{ 1.063889in}{1.379080in}%2208 \pgfsys@transformshift{3.869368in}{2.991586in}% 2221 2209 \pgfsys@useobject{currentmarker}{}% 2222 2210 \end{pgfscope}% … … 2229 2217 \pgfsetstrokecolor{currentstroke}% 2230 2218 \pgfsetdash{}{0pt}% 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 \pgfset roundjoin%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 \pgfsetmiterjoin% 2238 2226 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 2239 2227 \pgfsetfillcolor{currentfill}% … … 2242 2230 \pgfsetstrokecolor{currentstroke}% 2243 2231 \pgfsetdash{}{0pt}% 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}}% 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}}% 2254 2238 \pgfpathclose% 2255 2239 \pgfusepath{stroke,fill}% 2256 2240 }% 2257 2241 \begin{pgfscope}% 2258 \pgfsys@transformshift{ 1.063889in}{1.309636in}%2242 \pgfsys@transformshift{3.869368in}{2.880475in}% 2259 2243 \pgfsys@useobject{currentmarker}{}% 2260 2244 \end{pgfscope}% … … 2264 2248 \pgfsetstrokecolor{textcolor}% 2265 2249 \pgfsetfillcolor{textcolor}% 2266 \pgftext[x= 1.313889in,y=1.261024in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-baseline}%2250 \pgftext[x=4.269368in,y=2.802697in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-baseline}% 2267 2251 \end{pgfscope}% 2268 2252 \begin{pgfscope}% … … 2273 2257 \pgfsetstrokecolor{currentstroke}% 2274 2258 \pgfsetdash{}{0pt}% 2275 \pgfpathmoveto{\pgfqpoint{ 1.063889in}{1.046518in}}%2276 \pgfpathlineto{\pgfqpoint{ 1.063889in}{1.185407in}}%2259 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.444904in}}% 2260 \pgfpathlineto{\pgfqpoint{3.869368in}{2.667126in}}% 2277 2261 \pgfusepath{stroke}% 2278 2262 \end{pgfscope}% … … 2292 2276 }% 2293 2277 \begin{pgfscope}% 2294 \pgfsys@transformshift{ 1.063889in}{1.046518in}%2278 \pgfsys@transformshift{3.869368in}{2.444904in}% 2295 2279 \pgfsys@useobject{currentmarker}{}% 2296 2280 \end{pgfscope}% … … 2311 2295 }% 2312 2296 \begin{pgfscope}% 2313 \pgfsys@transformshift{ 1.063889in}{1.185407in}%2297 \pgfsys@transformshift{3.869368in}{2.667126in}% 2314 2298 \pgfsys@useobject{currentmarker}{}% 2315 2299 \end{pgfscope}% … … 2322 2306 \pgfsetstrokecolor{currentstroke}% 2323 2307 \pgfsetdash{}{0pt}% 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 \pgfset roundjoin%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 \pgfsetmiterjoin% 2331 2315 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 2332 2316 \pgfsetfillcolor{currentfill}% … … 2336 2320 \pgfsetdash{}{0pt}% 2337 2321 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\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}}% 2322 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 2323 \pgfpathlineto{\pgfqpoint{-0.041667in}{-0.041667in}}% 2324 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}% 2347 2325 \pgfpathclose% 2348 2326 \pgfusepath{stroke,fill}% 2349 2327 }% 2350 2328 \begin{pgfscope}% 2351 \pgfsys@transformshift{ 1.063889in}{1.115963in}%2329 \pgfsys@transformshift{3.869368in}{2.556015in}% 2352 2330 \pgfsys@useobject{currentmarker}{}% 2353 2331 \end{pgfscope}% … … 2357 2335 \pgfsetstrokecolor{textcolor}% 2358 2336 \pgfsetfillcolor{textcolor}% 2359 \pgftext[x= 1.313889in,y=1.067352in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-baseline}%2337 \pgftext[x=4.269368in,y=2.478238in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-baseline}% 2360 2338 \end{pgfscope}% 2361 2339 \begin{pgfscope}% … … 2366 2344 \pgfsetstrokecolor{currentstroke}% 2367 2345 \pgfsetdash{}{0pt}% 2368 \pgfpathmoveto{\pgfqpoint{ 1.063889in}{0.852846in}}%2369 \pgfpathlineto{\pgfqpoint{ 1.063889in}{0.991734in}}%2346 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.120444in}}% 2347 \pgfpathlineto{\pgfqpoint{3.869368in}{2.342667in}}% 2370 2348 \pgfusepath{stroke}% 2371 2349 \end{pgfscope}% … … 2385 2363 }% 2386 2364 \begin{pgfscope}% 2387 \pgfsys@transformshift{ 1.063889in}{0.852846in}%2365 \pgfsys@transformshift{3.869368in}{2.120444in}% 2388 2366 \pgfsys@useobject{currentmarker}{}% 2389 2367 \end{pgfscope}% … … 2404 2382 }% 2405 2383 \begin{pgfscope}% 2406 \pgfsys@transformshift{ 1.063889in}{0.991734in}%2384 \pgfsys@transformshift{3.869368in}{2.342667in}% 2407 2385 \pgfsys@useobject{currentmarker}{}% 2408 2386 \end{pgfscope}% … … 2415 2393 \pgfsetstrokecolor{currentstroke}% 2416 2394 \pgfsetdash{}{0pt}% 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 \pgfset roundjoin%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 \pgfsetmiterjoin% 2424 2402 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2425 2403 \pgfsetfillcolor{currentfill}% … … 2428 2406 \pgfsetstrokecolor{currentstroke}% 2429 2407 \pgfsetdash{}{0pt}% 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}}% 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}}% 2440 2415 \pgfpathclose% 2441 2416 \pgfusepath{stroke,fill}% 2442 2417 }% 2443 2418 \begin{pgfscope}% 2444 \pgfsys@transformshift{ 1.063889in}{0.922290in}%2419 \pgfsys@transformshift{3.869368in}{2.231556in}% 2445 2420 \pgfsys@useobject{currentmarker}{}% 2446 2421 \end{pgfscope}% … … 2450 2425 \pgfsetstrokecolor{textcolor}% 2451 2426 \pgfsetfillcolor{textcolor}% 2452 \pgftext[x= 1.313889in,y=0.873679in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-rand}%2427 \pgftext[x=4.269368in,y=2.153778in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-rand}% 2453 2428 \end{pgfscope}% 2454 2429 \begin{pgfscope}% … … 2459 2434 \pgfsetstrokecolor{currentstroke}% 2460 2435 \pgfsetdash{}{0pt}% 2461 \pgfpathmoveto{\pgfqpoint{ 1.063889in}{0.659173in}}%2462 \pgfpathlineto{\pgfqpoint{ 1.063889in}{0.798062in}}%2436 \pgfpathmoveto{\pgfqpoint{3.869368in}{1.795985in}}% 2437 \pgfpathlineto{\pgfqpoint{3.869368in}{2.018207in}}% 2463 2438 \pgfusepath{stroke}% 2464 2439 \end{pgfscope}% … … 2478 2453 }% 2479 2454 \begin{pgfscope}% 2480 \pgfsys@transformshift{ 1.063889in}{0.659173in}%2455 \pgfsys@transformshift{3.869368in}{1.795985in}% 2481 2456 \pgfsys@useobject{currentmarker}{}% 2482 2457 \end{pgfscope}% … … 2497 2472 }% 2498 2473 \begin{pgfscope}% 2499 \pgfsys@transformshift{ 1.063889in}{0.798062in}%2474 \pgfsys@transformshift{3.869368in}{2.018207in}% 2500 2475 \pgfsys@useobject{currentmarker}{}% 2501 2476 \end{pgfscope}% … … 2508 2483 \pgfsetstrokecolor{currentstroke}% 2509 2484 \pgfsetdash{}{0pt}% 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 \pgfset roundjoin%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 \pgfsetbeveljoin% 2517 2492 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2518 2493 \pgfsetfillcolor{currentfill}% … … 2521 2496 \pgfsetstrokecolor{currentstroke}% 2522 2497 \pgfsetdash{}{0pt}% 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}}% 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}}% 2533 2509 \pgfpathclose% 2534 2510 \pgfusepath{stroke,fill}% 2535 2511 }% 2536 2512 \begin{pgfscope}% 2537 \pgfsys@transformshift{ 1.063889in}{0.728617in}%2513 \pgfsys@transformshift{3.869368in}{1.907096in}% 2538 2514 \pgfsys@useobject{currentmarker}{}% 2539 2515 \end{pgfscope}% … … 2543 2519 \pgfsetstrokecolor{textcolor}% 2544 2520 \pgfsetfillcolor{textcolor}% 2545 \pgftext[x= 1.313889in,y=0.680006in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-rand}%2521 \pgftext[x=4.269368in,y=1.829318in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-rand}% 2546 2522 \end{pgfscope}% 2547 2523 \end{pgfpicture}% -
doc/theses/colby_parsons_MMAth/figures/nasus_Aggregate_Lock_8.pgf
r6e4c44d r3982384 77 77 \pgfsetstrokecolor{textcolor}% 78 78 \pgfsetfillcolor{textcolor}% 79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 0.000000}{12.000000}\selectfont \(\displaystyle 2\)}%79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 4\)}%104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 8\)}%129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 16\)}%154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 24\)}%179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 32\)}%204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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. 251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}%210 \pgftext[x=3.280000in,y=0.161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}% 211 211 \end{pgfscope}% 212 212 \begin{pgfscope}% … … 233 233 \pgfsetstrokecolor{textcolor}% 234 234 \pgfsetfillcolor{textcolor}% 235 \pgftext[x=0. 501581in,y=0.735604in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{3}\)}%235 \pgftext[x=0.399655in,y=0.700496in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{3}\)}% 236 236 \end{pgfscope}% 237 237 \begin{pgfscope}% … … 258 258 \pgfsetstrokecolor{textcolor}% 259 259 \pgfsetfillcolor{textcolor}% 260 \pgftext[x=0. 501581in,y=1.378869in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{4}\)}%260 \pgftext[x=0.399655in,y=1.343761in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{4}\)}% 261 261 \end{pgfscope}% 262 262 \begin{pgfscope}% … … 283 283 \pgfsetstrokecolor{textcolor}% 284 284 \pgfsetfillcolor{textcolor}% 285 \pgftext[x=0. 501581in,y=2.022134in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{5}\)}%285 \pgftext[x=0.399655in,y=1.987026in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{5}\)}% 286 286 \end{pgfscope}% 287 287 \begin{pgfscope}% … … 308 308 \pgfsetstrokecolor{textcolor}% 309 309 \pgfsetfillcolor{textcolor}% 310 \pgftext[x=0. 501581in,y=2.665399in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{6}\)}%310 \pgftext[x=0.399655in,y=2.630291in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{6}\)}% 311 311 \end{pgfscope}% 312 312 \begin{pgfscope}% … … 333 333 \pgfsetstrokecolor{textcolor}% 334 334 \pgfsetfillcolor{textcolor}% 335 \pgftext[x=0. 501581in,y=3.308663in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{7}\)}%335 \pgftext[x=0.399655in,y=3.273555in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{7}\)}% 336 336 \end{pgfscope}% 337 337 \begin{pgfscope}% … … 358 358 \pgfsetstrokecolor{textcolor}% 359 359 \pgfsetfillcolor{textcolor}% 360 \pgftext[x=0. 501581in,y=3.951928in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{8}\)}%360 \pgftext[x=0.399655in,y=3.916820in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{8}\)}% 361 361 \end{pgfscope}% 362 362 \begin{pgfscope}% … … 1238 1238 \pgfsetstrokecolor{textcolor}% 1239 1239 \pgfsetfillcolor{textcolor}% 1240 \pgftext[x=0. 446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (entries)}%1240 \pgftext[x=0.344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (entries)}% 1241 1241 \end{pgfscope}% 1242 1242 \begin{pgfscope}% … … 1901 1901 \pgfusepath{clip}% 1902 1902 \pgfsetbuttcap% 1903 \pgfset roundjoin%1903 \pgfsetmiterjoin% 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}% 1908 1968 \pgfsetstrokecolor{currentstroke}% 1909 1969 \pgfsetdash{}{0pt}% … … 1922 1982 }% 1923 1983 \begin{pgfscope}% 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}%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}% 1945 2005 \pgfsys@useobject{currentmarker}{}% 1946 2006 \end{pgfscope}% … … 1952 2012 \pgfsetroundjoin% 1953 2013 \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}% 1954 2294 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 1955 2295 \pgfsetstrokecolor{currentstroke}% 1956 2296 \pgfsetdash{}{0pt}% 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}% 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}% 1968 2351 \pgfsetbuttcap% 1969 2352 \pgfsetroundjoin% … … 1988 2371 }% 1989 2372 \begin{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}% 2373 \pgfsys@transformshift{3.869368in}{2.556015in}% 2374 \pgfsys@useobject{currentmarker}{}% 2375 \end{pgfscope}% 2189 2376 \end{pgfscope}% 2190 2377 \begin{pgfscope}% … … 2192 2379 \pgfsetstrokecolor{textcolor}% 2193 2380 \pgfsetfillcolor{textcolor}% 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}% 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}% 2202 2399 \pgfsetlinewidth{1.003750pt}% 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}% 2400 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2237 2401 \pgfsetstrokecolor{currentstroke}% 2238 2402 \pgfsetdash{}{0pt}% … … 2243 2407 }% 2244 2408 \begin{pgfscope}% 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.1 21569,0.466667,0.705882}%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.172549,0.627451,0.172549}% 2253 2417 \pgfsetfillcolor{currentfill}% 2254 2418 \pgfsetlinewidth{1.003750pt}% 2255 \definecolor{currentstroke}{rgb}{0.1 21569,0.466667,0.705882}%2419 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2256 2420 \pgfsetstrokecolor{currentstroke}% 2257 2421 \pgfsetdash{}{0pt}% … … 2262 2426 }% 2263 2427 \begin{pgfscope}% 2264 \pgfsys@transformshift{ 4.570184in}{2.749457in}%2428 \pgfsys@transformshift{3.869368in}{2.342667in}% 2265 2429 \pgfsys@useobject{currentmarker}{}% 2266 2430 \end{pgfscope}% … … 2270 2434 \pgfsetroundjoin% 2271 2435 \pgfsetlinewidth{1.505625pt}% 2272 \definecolor{currentstroke}{rgb}{0.1 21569,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 \pgfset roundjoin%2282 \definecolor{currentfill}{rgb}{0.1 21569,0.466667,0.705882}%2436 \definecolor{currentstroke}{rgb}{0.172549,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 \pgfsetmiterjoin% 2446 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2283 2447 \pgfsetfillcolor{currentfill}% 2284 2448 \pgfsetlinewidth{1.003750pt}% 2285 \definecolor{currentstroke}{rgb}{0.1 21569,0.466667,0.705882}%2449 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2286 2450 \pgfsetstrokecolor{currentstroke}% 2287 2451 \pgfsetdash{}{0pt}% 2288 2452 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\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}}% 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}}% 2298 2457 \pgfpathclose% 2299 2458 \pgfusepath{stroke,fill}% 2300 2459 }% 2301 2460 \begin{pgfscope}% 2302 \pgfsys@transformshift{ 4.570184in}{2.680012in}%2461 \pgfsys@transformshift{3.869368in}{2.231556in}% 2303 2462 \pgfsys@useobject{currentmarker}{}% 2304 2463 \end{pgfscope}% … … 2308 2467 \pgfsetstrokecolor{textcolor}% 2309 2468 \pgfsetfillcolor{textcolor}% 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}%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}% 2327 2486 \pgfsetfillcolor{currentfill}% 2328 2487 \pgfsetlinewidth{1.003750pt}% 2329 \definecolor{currentstroke}{rgb}{ 1.000000,0.498039,0.054902}%2488 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2330 2489 \pgfsetstrokecolor{currentstroke}% 2331 2490 \pgfsetdash{}{0pt}% … … 2336 2495 }% 2337 2496 \begin{pgfscope}% 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}%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}% 2346 2505 \pgfsetfillcolor{currentfill}% 2347 2506 \pgfsetlinewidth{1.003750pt}% 2348 \definecolor{currentstroke}{rgb}{ 1.000000,0.498039,0.054902}%2507 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2349 2508 \pgfsetstrokecolor{currentstroke}% 2350 2509 \pgfsetdash{}{0pt}% … … 2355 2514 }% 2356 2515 \begin{pgfscope}% 2357 \pgfsys@transformshift{ 4.570184in}{2.555784in}%2516 \pgfsys@transformshift{3.869368in}{2.018207in}% 2358 2517 \pgfsys@useobject{currentmarker}{}% 2359 2518 \end{pgfscope}% … … 2363 2522 \pgfsetroundjoin% 2364 2523 \pgfsetlinewidth{1.505625pt}% 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 \pgfset roundjoin%2375 \definecolor{currentfill}{rgb}{ 1.000000,0.498039,0.054902}%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 \pgfsetmiterjoin% 2534 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2376 2535 \pgfsetfillcolor{currentfill}% 2377 2536 \pgfsetlinewidth{1.003750pt}% 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}}% 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}}% 2391 2545 \pgfpathclose% 2392 2546 \pgfusepath{stroke,fill}% 2393 2547 }% 2394 2548 \begin{pgfscope}% 2395 \pgfsys@transformshift{ 4.570184in}{2.486339in}%2549 \pgfsys@transformshift{3.869368in}{1.907096in}% 2396 2550 \pgfsys@useobject{currentmarker}{}% 2397 2551 \end{pgfscope}% … … 2401 2555 \pgfsetstrokecolor{textcolor}% 2402 2556 \pgfsetfillcolor{textcolor}% 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}% 2557 \pgftext[x=4.269368in,y=1.829318in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-rand}% 2590 2558 \end{pgfscope}% 2591 2559 \end{pgfpicture}% -
doc/theses/colby_parsons_MMAth/figures/nasus_Channel_Contention.pgf
r6e4c44d r3982384 77 77 \pgfsetstrokecolor{textcolor}% 78 78 \pgfsetfillcolor{textcolor}% 79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 0.000000}{12.000000}\selectfont \(\displaystyle 2\)}%79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 4\)}%104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 8\)}%129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 16\)}%154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 24\)}%179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 32\)}%204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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. 251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}%210 \pgftext[x=3.280000in,y=0.161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}% 211 211 \end{pgfscope}% 212 212 \begin{pgfscope}% … … 233 233 \pgfsetstrokecolor{textcolor}% 234 234 \pgfsetfillcolor{textcolor}% 235 \pgftext[x=0. 501581in,y=2.047723in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{8}\)}%235 \pgftext[x=0.399655in,y=2.012615in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{8}\)}% 236 236 \end{pgfscope}% 237 237 \begin{pgfscope}% … … 467 467 \pgfsetstrokecolor{textcolor}% 468 468 \pgfsetfillcolor{textcolor}% 469 \pgftext[x=0. 446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (channel operations)}%469 \pgftext[x=0.344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (channel operations)}% 470 470 \end{pgfscope}% 471 471 \begin{pgfscope}% … … 876 876 \pgfusepath{clip}% 877 877 \pgfsetbuttcap% 878 \pgfset roundjoin%878 \pgfsetmiterjoin% 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}% 883 1058 \pgfsetstrokecolor{currentstroke}% 884 1059 \pgfsetdash{}{0pt}% … … 897 1072 }% 898 1073 \begin{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}% 1074 \pgfsys@transformshift{4.713959in}{3.935111in}% 1075 \pgfsys@useobject{currentmarker}{}% 1076 \end{pgfscope}% 966 1077 \end{pgfscope}% 967 1078 \begin{pgfscope}% … … 969 1080 \pgfsetstrokecolor{textcolor}% 970 1081 \pgfsetfillcolor{textcolor}% 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}% 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}% 1014 1102 \pgfsetstrokecolor{currentstroke}% 1015 1103 \pgfsetdash{}{0pt}% … … 1020 1108 }% 1021 1109 \begin{pgfscope}% 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}%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}% 1033 1121 \pgfsetstrokecolor{currentstroke}% 1034 1122 \pgfsetdash{}{0pt}% … … 1039 1127 }% 1040 1128 \begin{pgfscope}% 1041 \pgfsys@transformshift{ 5.105293in}{4.119833in}%1129 \pgfsys@transformshift{4.713959in}{3.721763in}% 1042 1130 \pgfsys@useobject{currentmarker}{}% 1043 1131 \end{pgfscope}% … … 1047 1135 \pgfsetroundjoin% 1048 1136 \pgfsetlinewidth{1.505625pt}% 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 \pgfset roundjoin%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}%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 \pgfsetmiterjoin% 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}% 1063 1151 \pgfsetstrokecolor{currentstroke}% 1064 1152 \pgfsetdash{}{0pt}% 1065 1153 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\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}}% 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}}% 1075 1158 \pgfpathclose% 1076 1159 \pgfusepath{stroke,fill}% 1077 1160 }% 1078 1161 \begin{pgfscope}% 1079 \pgfsys@transformshift{ 5.105293in}{4.050389in}%1162 \pgfsys@transformshift{4.713959in}{3.610651in}% 1080 1163 \pgfsys@useobject{currentmarker}{}% 1081 1164 \end{pgfscope}% … … 1085 1168 \pgfsetstrokecolor{textcolor}% 1086 1169 \pgfsetfillcolor{textcolor}% 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}% 1170 \pgftext[x=5.113959in,y=3.532874in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Go}% 1181 1171 \end{pgfscope}% 1182 1172 \end{pgfpicture}% -
doc/theses/colby_parsons_MMAth/figures/pyke_Aggregate_Lock_2.pgf
r6e4c44d r3982384 77 77 \pgfsetstrokecolor{textcolor}% 78 78 \pgfsetfillcolor{textcolor}% 79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 0.000000}{12.000000}\selectfont \(\displaystyle 2\)}%79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 4\)}%104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 8\)}%129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 16\)}%154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 24\)}%179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 32\)}%204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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. 251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}%210 \pgftext[x=3.280000in,y=0.161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}% 211 211 \end{pgfscope}% 212 212 \begin{pgfscope}% … … 233 233 \pgfsetstrokecolor{textcolor}% 234 234 \pgfsetfillcolor{textcolor}% 235 \pgftext[x=0. 501581in,y=0.963915in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{6}\)}%235 \pgftext[x=0.399655in,y=0.928807in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{6}\)}% 236 236 \end{pgfscope}% 237 237 \begin{pgfscope}% … … 258 258 \pgfsetstrokecolor{textcolor}% 259 259 \pgfsetfillcolor{textcolor}% 260 \pgftext[x=0. 501581in,y=2.355276in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{7}\)}%260 \pgftext[x=0.399655in,y=2.320168in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{7}\)}% 261 261 \end{pgfscope}% 262 262 \begin{pgfscope}% … … 283 283 \pgfsetstrokecolor{textcolor}% 284 284 \pgfsetfillcolor{textcolor}% 285 \pgftext[x=0. 501581in,y=3.746636in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{8}\)}%285 \pgftext[x=0.399655in,y=3.711528in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{8}\)}% 286 286 \end{pgfscope}% 287 287 \begin{pgfscope}% … … 707 707 \pgfsetstrokecolor{textcolor}% 708 708 \pgfsetfillcolor{textcolor}% 709 \pgftext[x=0. 446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (entries)}%709 \pgftext[x=0.344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (entries)}% 710 710 \end{pgfscope}% 711 711 \begin{pgfscope}% … … 1436 1436 \pgfusepath{clip}% 1437 1437 \pgfsetbuttcap% 1438 \pgfset roundjoin%1438 \pgfsetmiterjoin% 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}% 1443 1739 \pgfsetstrokecolor{currentstroke}% 1444 1740 \pgfsetdash{}{0pt}% … … 1457 1753 }% 1458 1754 \begin{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}% 1755 \pgfsys@transformshift{1.222222in}{1.825839in}% 1756 \pgfsys@useobject{currentmarker}{}% 1757 \end{pgfscope}% 1658 1758 \end{pgfscope}% 1659 1759 \begin{pgfscope}% … … 1661 1761 \pgfsetstrokecolor{textcolor}% 1662 1762 \pgfsetfillcolor{textcolor}% 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}% 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}% 1706 1783 \pgfsetstrokecolor{currentstroke}% 1707 1784 \pgfsetdash{}{0pt}% … … 1712 1789 }% 1713 1790 \begin{pgfscope}% 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}%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}% 1725 1802 \pgfsetstrokecolor{currentstroke}% 1726 1803 \pgfsetdash{}{0pt}% … … 1731 1808 }% 1732 1809 \begin{pgfscope}% 1733 \pgfsys@transformshift{ 4.570184in}{4.119833in}%1810 \pgfsys@transformshift{1.222222in}{1.612490in}% 1734 1811 \pgfsys@useobject{currentmarker}{}% 1735 1812 \end{pgfscope}% … … 1739 1816 \pgfsetroundjoin% 1740 1817 \pgfsetlinewidth{1.505625pt}% 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 \pgfset roundjoin%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}%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 \pgfsetmiterjoin% 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}% 1755 1832 \pgfsetstrokecolor{currentstroke}% 1756 1833 \pgfsetdash{}{0pt}% 1757 1834 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\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}}% 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}}% 1767 1839 \pgfpathclose% 1768 1840 \pgfusepath{stroke,fill}% 1769 1841 }% 1770 1842 \begin{pgfscope}% 1771 \pgfsys@transformshift{ 4.570184in}{4.050389in}%1843 \pgfsys@transformshift{1.222222in}{1.501379in}% 1772 1844 \pgfsys@useobject{currentmarker}{}% 1773 1845 \end{pgfscope}% … … 1777 1849 \pgfsetstrokecolor{textcolor}% 1778 1850 \pgfsetfillcolor{textcolor}% 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}%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}% 1799 1871 \pgfsetstrokecolor{currentstroke}% 1800 1872 \pgfsetdash{}{0pt}% … … 1805 1877 }% 1806 1878 \begin{pgfscope}% 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}%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}% 1818 1890 \pgfsetstrokecolor{currentstroke}% 1819 1891 \pgfsetdash{}{0pt}% … … 1824 1896 }% 1825 1897 \begin{pgfscope}% 1826 \pgfsys@transformshift{ 4.570184in}{3.926161in}%1898 \pgfsys@transformshift{1.222222in}{1.288031in}% 1827 1899 \pgfsys@useobject{currentmarker}{}% 1828 1900 \end{pgfscope}% … … 1832 1904 \pgfsetroundjoin% 1833 1905 \pgfsetlinewidth{1.505625pt}% 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}}% 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}}% 1860 1927 \pgfpathclose% 1861 1928 \pgfusepath{stroke,fill}% 1862 1929 }% 1863 1930 \begin{pgfscope}% 1864 \pgfsys@transformshift{ 4.570184in}{3.856716in}%1931 \pgfsys@transformshift{1.222222in}{1.176919in}% 1865 1932 \pgfsys@useobject{currentmarker}{}% 1866 1933 \end{pgfscope}% … … 1870 1937 \pgfsetstrokecolor{textcolor}% 1871 1938 \pgfsetfillcolor{textcolor}% 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}%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}% 1892 1959 \pgfsetstrokecolor{currentstroke}% 1893 1960 \pgfsetdash{}{0pt}% … … 1898 1965 }% 1899 1966 \begin{pgfscope}% 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}%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}% 1911 1978 \pgfsetstrokecolor{currentstroke}% 1912 1979 \pgfsetdash{}{0pt}% … … 1917 1984 }% 1918 1985 \begin{pgfscope}% 1919 \pgfsys@transformshift{ 4.570184in}{3.732488in}%1986 \pgfsys@transformshift{1.222222in}{0.963571in}% 1920 1987 \pgfsys@useobject{currentmarker}{}% 1921 1988 \end{pgfscope}% … … 1925 1992 \pgfsetroundjoin% 1926 1993 \pgfsetlinewidth{1.505625pt}% 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}%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}% 1941 2008 \pgfsetstrokecolor{currentstroke}% 1942 2009 \pgfsetdash{}{0pt}% 1943 2010 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{% 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}% 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}% 1958 2019 \pgfsys@useobject{currentmarker}{}% 1959 2020 \end{pgfscope}% … … 1963 2024 \pgfsetstrokecolor{textcolor}% 1964 2025 \pgfsetfillcolor{textcolor}% 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}% 2026 \pgftext[x=1.622222in,y=0.774682in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-rand}% 2059 2027 \end{pgfscope}% 2060 2028 \end{pgfpicture}% -
doc/theses/colby_parsons_MMAth/figures/pyke_Aggregate_Lock_4.pgf
r6e4c44d r3982384 77 77 \pgfsetstrokecolor{textcolor}% 78 78 \pgfsetfillcolor{textcolor}% 79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 0.000000}{12.000000}\selectfont \(\displaystyle 2\)}%79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 4\)}%104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 8\)}%129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 16\)}%154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 24\)}%179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 32\)}%204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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. 251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}%210 \pgftext[x=3.280000in,y=0.161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}% 211 211 \end{pgfscope}% 212 212 \begin{pgfscope}% … … 233 233 \pgfsetstrokecolor{textcolor}% 234 234 \pgfsetfillcolor{textcolor}% 235 \pgftext[x=0. 501581in,y=0.627700in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{3}\)}%235 \pgftext[x=0.399655in,y=0.592592in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{3}\)}% 236 236 \end{pgfscope}% 237 237 \begin{pgfscope}% … … 258 258 \pgfsetstrokecolor{textcolor}% 259 259 \pgfsetfillcolor{textcolor}% 260 \pgftext[x=0. 501581in,y=1.310712in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{4}\)}%260 \pgftext[x=0.399655in,y=1.275604in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{4}\)}% 261 261 \end{pgfscope}% 262 262 \begin{pgfscope}% … … 283 283 \pgfsetstrokecolor{textcolor}% 284 284 \pgfsetfillcolor{textcolor}% 285 \pgftext[x=0. 501581in,y=1.993723in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{5}\)}%285 \pgftext[x=0.399655in,y=1.958615in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{5}\)}% 286 286 \end{pgfscope}% 287 287 \begin{pgfscope}% … … 308 308 \pgfsetstrokecolor{textcolor}% 309 309 \pgfsetfillcolor{textcolor}% 310 \pgftext[x=0. 501581in,y=2.676735in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{6}\)}%310 \pgftext[x=0.399655in,y=2.641627in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{6}\)}% 311 311 \end{pgfscope}% 312 312 \begin{pgfscope}% … … 333 333 \pgfsetstrokecolor{textcolor}% 334 334 \pgfsetfillcolor{textcolor}% 335 \pgftext[x=0. 501581in,y=3.359746in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{7}\)}%335 \pgftext[x=0.399655in,y=3.324638in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{7}\)}% 336 336 \end{pgfscope}% 337 337 \begin{pgfscope}% … … 358 358 \pgfsetstrokecolor{textcolor}% 359 359 \pgfsetfillcolor{textcolor}% 360 \pgftext[x=0. 501581in,y=4.042757in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{8}\)}%360 \pgftext[x=0.399655in,y=4.007649in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{8}\)}% 361 361 \end{pgfscope}% 362 362 \begin{pgfscope}% … … 1181 1181 \pgfsetstrokecolor{textcolor}% 1182 1182 \pgfsetfillcolor{textcolor}% 1183 \pgftext[x=0. 446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (entries)}%1183 \pgftext[x=0.344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (entries)}% 1184 1184 \end{pgfscope}% 1185 1185 \begin{pgfscope}% … … 1844 1844 \pgfusepath{clip}% 1845 1845 \pgfsetbuttcap% 1846 \pgfset roundjoin%1846 \pgfsetmiterjoin% 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.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}}% 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}}% 1863 1859 \pgfpathclose% 1864 1860 \pgfusepath{stroke,fill}% … … 1910 1906 \pgfusepath{clip}% 1911 1907 \pgfsetbuttcap% 1912 \pgfset roundjoin%1908 \pgfsetmiterjoin% 1913 1909 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 1914 1910 \pgfsetfillcolor{currentfill}% … … 1918 1914 \pgfsetdash{}{0pt}% 1919 1915 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\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}}% 1916 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 1917 \pgfpathlineto{\pgfqpoint{-0.041667in}{-0.041667in}}% 1918 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}% 1929 1919 \pgfpathclose% 1930 1920 \pgfusepath{stroke,fill}% … … 1976 1966 \pgfusepath{clip}% 1977 1967 \pgfsetbuttcap% 1978 \pgfset roundjoin%1968 \pgfsetmiterjoin% 1979 1969 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 1980 1970 \pgfsetfillcolor{currentfill}% … … 1983 1973 \pgfsetstrokecolor{currentstroke}% 1984 1974 \pgfsetdash{}{0pt}% 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}}% 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}}% 1995 1982 \pgfpathclose% 1996 1983 \pgfusepath{stroke,fill}% … … 2042 2029 \pgfusepath{clip}% 2043 2030 \pgfsetbuttcap% 2044 \pgfset roundjoin%2031 \pgfsetbeveljoin% 2045 2032 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2046 2033 \pgfsetfillcolor{currentfill}% … … 2049 2036 \pgfsetstrokecolor{currentstroke}% 2050 2037 \pgfsetdash{}{0pt}% 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}}% 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}}% 2061 2049 \pgfpathclose% 2062 2050 \pgfusepath{stroke,fill}% … … 2135 2123 \pgfsetstrokecolor{textcolor}% 2136 2124 \pgfsetfillcolor{textcolor}% 2137 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{1 2.000000}{14.400000}\selectfont Aggregate Lock Benchmark: 4 Locks}%2125 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{19.200000}{23.040000}\selectfont Aggregate Lock Benchmark: 4 Locks}% 2138 2126 \end{pgfscope}% 2139 2127 \begin{pgfscope}% … … 2148 2136 \pgfsetstrokeopacity{0.800000}% 2149 2137 \pgfsetdash{}{0pt}% 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}}%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}}% 2159 2147 \pgfpathclose% 2160 2148 \pgfusepath{stroke,fill}% … … 2167 2155 \pgfsetstrokecolor{currentstroke}% 2168 2156 \pgfsetdash{}{0pt}% 2169 \pgfpathmoveto{\pgfqpoint{ 1.063889in}{1.240191in}}%2170 \pgfpathlineto{\pgfqpoint{ 1.063889in}{1.379080in}}%2157 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.769364in}}% 2158 \pgfpathlineto{\pgfqpoint{3.869368in}{2.991586in}}% 2171 2159 \pgfusepath{stroke}% 2172 2160 \end{pgfscope}% … … 2186 2174 }% 2187 2175 \begin{pgfscope}% 2188 \pgfsys@transformshift{ 1.063889in}{1.240191in}%2176 \pgfsys@transformshift{3.869368in}{2.769364in}% 2189 2177 \pgfsys@useobject{currentmarker}{}% 2190 2178 \end{pgfscope}% … … 2205 2193 }% 2206 2194 \begin{pgfscope}% 2207 \pgfsys@transformshift{ 1.063889in}{1.379080in}%2195 \pgfsys@transformshift{3.869368in}{2.991586in}% 2208 2196 \pgfsys@useobject{currentmarker}{}% 2209 2197 \end{pgfscope}% … … 2216 2204 \pgfsetstrokecolor{currentstroke}% 2217 2205 \pgfsetdash{}{0pt}% 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 \pgfset roundjoin%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 \pgfsetmiterjoin% 2225 2213 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}% 2226 2214 \pgfsetfillcolor{currentfill}% … … 2229 2217 \pgfsetstrokecolor{currentstroke}% 2230 2218 \pgfsetdash{}{0pt}% 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}}% 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}}% 2241 2225 \pgfpathclose% 2242 2226 \pgfusepath{stroke,fill}% 2243 2227 }% 2244 2228 \begin{pgfscope}% 2245 \pgfsys@transformshift{ 1.063889in}{1.309636in}%2229 \pgfsys@transformshift{3.869368in}{2.880475in}% 2246 2230 \pgfsys@useobject{currentmarker}{}% 2247 2231 \end{pgfscope}% … … 2251 2235 \pgfsetstrokecolor{textcolor}% 2252 2236 \pgfsetfillcolor{textcolor}% 2253 \pgftext[x= 1.313889in,y=1.261024in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-baseline}%2237 \pgftext[x=4.269368in,y=2.802697in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-baseline}% 2254 2238 \end{pgfscope}% 2255 2239 \begin{pgfscope}% … … 2260 2244 \pgfsetstrokecolor{currentstroke}% 2261 2245 \pgfsetdash{}{0pt}% 2262 \pgfpathmoveto{\pgfqpoint{ 1.063889in}{1.046518in}}%2263 \pgfpathlineto{\pgfqpoint{ 1.063889in}{1.185407in}}%2246 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.444904in}}% 2247 \pgfpathlineto{\pgfqpoint{3.869368in}{2.667126in}}% 2264 2248 \pgfusepath{stroke}% 2265 2249 \end{pgfscope}% … … 2279 2263 }% 2280 2264 \begin{pgfscope}% 2281 \pgfsys@transformshift{ 1.063889in}{1.046518in}%2265 \pgfsys@transformshift{3.869368in}{2.444904in}% 2282 2266 \pgfsys@useobject{currentmarker}{}% 2283 2267 \end{pgfscope}% … … 2298 2282 }% 2299 2283 \begin{pgfscope}% 2300 \pgfsys@transformshift{ 1.063889in}{1.185407in}%2284 \pgfsys@transformshift{3.869368in}{2.667126in}% 2301 2285 \pgfsys@useobject{currentmarker}{}% 2302 2286 \end{pgfscope}% … … 2309 2293 \pgfsetstrokecolor{currentstroke}% 2310 2294 \pgfsetdash{}{0pt}% 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 \pgfset roundjoin%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 \pgfsetmiterjoin% 2318 2302 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}% 2319 2303 \pgfsetfillcolor{currentfill}% … … 2323 2307 \pgfsetdash{}{0pt}% 2324 2308 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\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}}% 2309 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}% 2310 \pgfpathlineto{\pgfqpoint{-0.041667in}{-0.041667in}}% 2311 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}% 2334 2312 \pgfpathclose% 2335 2313 \pgfusepath{stroke,fill}% 2336 2314 }% 2337 2315 \begin{pgfscope}% 2338 \pgfsys@transformshift{ 1.063889in}{1.115963in}%2316 \pgfsys@transformshift{3.869368in}{2.556015in}% 2339 2317 \pgfsys@useobject{currentmarker}{}% 2340 2318 \end{pgfscope}% … … 2344 2322 \pgfsetstrokecolor{textcolor}% 2345 2323 \pgfsetfillcolor{textcolor}% 2346 \pgftext[x= 1.313889in,y=1.067352in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-baseline}%2324 \pgftext[x=4.269368in,y=2.478238in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-baseline}% 2347 2325 \end{pgfscope}% 2348 2326 \begin{pgfscope}% … … 2353 2331 \pgfsetstrokecolor{currentstroke}% 2354 2332 \pgfsetdash{}{0pt}% 2355 \pgfpathmoveto{\pgfqpoint{ 1.063889in}{0.852846in}}%2356 \pgfpathlineto{\pgfqpoint{ 1.063889in}{0.991734in}}%2333 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.120444in}}% 2334 \pgfpathlineto{\pgfqpoint{3.869368in}{2.342667in}}% 2357 2335 \pgfusepath{stroke}% 2358 2336 \end{pgfscope}% … … 2372 2350 }% 2373 2351 \begin{pgfscope}% 2374 \pgfsys@transformshift{ 1.063889in}{0.852846in}%2352 \pgfsys@transformshift{3.869368in}{2.120444in}% 2375 2353 \pgfsys@useobject{currentmarker}{}% 2376 2354 \end{pgfscope}% … … 2391 2369 }% 2392 2370 \begin{pgfscope}% 2393 \pgfsys@transformshift{ 1.063889in}{0.991734in}%2371 \pgfsys@transformshift{3.869368in}{2.342667in}% 2394 2372 \pgfsys@useobject{currentmarker}{}% 2395 2373 \end{pgfscope}% … … 2402 2380 \pgfsetstrokecolor{currentstroke}% 2403 2381 \pgfsetdash{}{0pt}% 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 \pgfset roundjoin%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 \pgfsetmiterjoin% 2411 2389 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2412 2390 \pgfsetfillcolor{currentfill}% … … 2415 2393 \pgfsetstrokecolor{currentstroke}% 2416 2394 \pgfsetdash{}{0pt}% 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}}% 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}}% 2427 2402 \pgfpathclose% 2428 2403 \pgfusepath{stroke,fill}% 2429 2404 }% 2430 2405 \begin{pgfscope}% 2431 \pgfsys@transformshift{ 1.063889in}{0.922290in}%2406 \pgfsys@transformshift{3.869368in}{2.231556in}% 2432 2407 \pgfsys@useobject{currentmarker}{}% 2433 2408 \end{pgfscope}% … … 2437 2412 \pgfsetstrokecolor{textcolor}% 2438 2413 \pgfsetfillcolor{textcolor}% 2439 \pgftext[x= 1.313889in,y=0.873679in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-rand}%2414 \pgftext[x=4.269368in,y=2.153778in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-rand}% 2440 2415 \end{pgfscope}% 2441 2416 \begin{pgfscope}% … … 2446 2421 \pgfsetstrokecolor{currentstroke}% 2447 2422 \pgfsetdash{}{0pt}% 2448 \pgfpathmoveto{\pgfqpoint{ 1.063889in}{0.659173in}}%2449 \pgfpathlineto{\pgfqpoint{ 1.063889in}{0.798062in}}%2423 \pgfpathmoveto{\pgfqpoint{3.869368in}{1.795985in}}% 2424 \pgfpathlineto{\pgfqpoint{3.869368in}{2.018207in}}% 2450 2425 \pgfusepath{stroke}% 2451 2426 \end{pgfscope}% … … 2465 2440 }% 2466 2441 \begin{pgfscope}% 2467 \pgfsys@transformshift{ 1.063889in}{0.659173in}%2442 \pgfsys@transformshift{3.869368in}{1.795985in}% 2468 2443 \pgfsys@useobject{currentmarker}{}% 2469 2444 \end{pgfscope}% … … 2484 2459 }% 2485 2460 \begin{pgfscope}% 2486 \pgfsys@transformshift{ 1.063889in}{0.798062in}%2461 \pgfsys@transformshift{3.869368in}{2.018207in}% 2487 2462 \pgfsys@useobject{currentmarker}{}% 2488 2463 \end{pgfscope}% … … 2495 2470 \pgfsetstrokecolor{currentstroke}% 2496 2471 \pgfsetdash{}{0pt}% 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 \pgfset roundjoin%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 \pgfsetbeveljoin% 2504 2479 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2505 2480 \pgfsetfillcolor{currentfill}% … … 2508 2483 \pgfsetstrokecolor{currentstroke}% 2509 2484 \pgfsetdash{}{0pt}% 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}}% 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}}% 2520 2496 \pgfpathclose% 2521 2497 \pgfusepath{stroke,fill}% 2522 2498 }% 2523 2499 \begin{pgfscope}% 2524 \pgfsys@transformshift{ 1.063889in}{0.728617in}%2500 \pgfsys@transformshift{3.869368in}{1.907096in}% 2525 2501 \pgfsys@useobject{currentmarker}{}% 2526 2502 \end{pgfscope}% … … 2530 2506 \pgfsetstrokecolor{textcolor}% 2531 2507 \pgfsetfillcolor{textcolor}% 2532 \pgftext[x= 1.313889in,y=0.680006in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-rand}%2508 \pgftext[x=4.269368in,y=1.829318in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-rand}% 2533 2509 \end{pgfscope}% 2534 2510 \end{pgfpicture}% -
doc/theses/colby_parsons_MMAth/figures/pyke_Aggregate_Lock_8.pgf
r6e4c44d r3982384 77 77 \pgfsetstrokecolor{textcolor}% 78 78 \pgfsetfillcolor{textcolor}% 79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 0.000000}{12.000000}\selectfont \(\displaystyle 2\)}%79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 4\)}%104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 8\)}%129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 16\)}%154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 24\)}%179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 32\)}%204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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. 251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}%210 \pgftext[x=3.280000in,y=0.161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}% 211 211 \end{pgfscope}% 212 212 \begin{pgfscope}% … … 233 233 \pgfsetstrokecolor{textcolor}% 234 234 \pgfsetfillcolor{textcolor}% 235 \pgftext[x=0. 501581in,y=0.610874in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{2}\)}%235 \pgftext[x=0.399655in,y=0.575766in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{2}\)}% 236 236 \end{pgfscope}% 237 237 \begin{pgfscope}% … … 258 258 \pgfsetstrokecolor{textcolor}% 259 259 \pgfsetfillcolor{textcolor}% 260 \pgftext[x=0. 501581in,y=1.216962in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{3}\)}%260 \pgftext[x=0.399655in,y=1.181854in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{3}\)}% 261 261 \end{pgfscope}% 262 262 \begin{pgfscope}% … … 283 283 \pgfsetstrokecolor{textcolor}% 284 284 \pgfsetfillcolor{textcolor}% 285 \pgftext[x=0. 501581in,y=1.823050in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{4}\)}%285 \pgftext[x=0.399655in,y=1.787942in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{4}\)}% 286 286 \end{pgfscope}% 287 287 \begin{pgfscope}% … … 308 308 \pgfsetstrokecolor{textcolor}% 309 309 \pgfsetfillcolor{textcolor}% 310 \pgftext[x=0. 501581in,y=2.429138in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{5}\)}%310 \pgftext[x=0.399655in,y=2.394030in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{5}\)}% 311 311 \end{pgfscope}% 312 312 \begin{pgfscope}% … … 333 333 \pgfsetstrokecolor{textcolor}% 334 334 \pgfsetfillcolor{textcolor}% 335 \pgftext[x=0. 501581in,y=3.035227in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{6}\)}%335 \pgftext[x=0.399655in,y=3.000119in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{6}\)}% 336 336 \end{pgfscope}% 337 337 \begin{pgfscope}% … … 358 358 \pgfsetstrokecolor{textcolor}% 359 359 \pgfsetfillcolor{textcolor}% 360 \pgftext[x=0. 501581in,y=3.641315in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{7}\)}%360 \pgftext[x=0.399655in,y=3.606207in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{7}\)}% 361 361 \end{pgfscope}% 362 362 \begin{pgfscope}% … … 1295 1295 \pgfsetstrokecolor{textcolor}% 1296 1296 \pgfsetfillcolor{textcolor}% 1297 \pgftext[x=0. 446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (entries)}%1297 \pgftext[x=0.344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (entries)}% 1298 1298 \end{pgfscope}% 1299 1299 \begin{pgfscope}% … … 1958 1958 \pgfusepath{clip}% 1959 1959 \pgfsetbuttcap% 1960 \pgfset roundjoin%1960 \pgfsetmiterjoin% 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}% 1965 2025 \pgfsetstrokecolor{currentstroke}% 1966 2026 \pgfsetdash{}{0pt}% … … 1979 2039 }% 1980 2040 \begin{pgfscope}% 1981 \pgfsys@transformshift{1.025455in}{ 3.946569in}%1982 \pgfsys@useobject{currentmarker}{}% 1983 \end{pgfscope}% 1984 \begin{pgfscope}% 1985 \pgfsys@transformshift{1.326061in}{3.8 02273in}%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}%2041 \pgfsys@transformshift{1.025455in}{4.038293in}% 2042 \pgfsys@useobject{currentmarker}{}% 2043 \end{pgfscope}% 2044 \begin{pgfscope}% 2045 \pgfsys@transformshift{1.326061in}{3.879198in}% 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}% 2002 2062 \pgfsys@useobject{currentmarker}{}% 2003 2063 \end{pgfscope}% … … 2009 2069 \pgfsetroundjoin% 2010 2070 \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}% 2011 2351 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% 2012 2352 \pgfsetstrokecolor{currentstroke}% 2013 2353 \pgfsetdash{}{0pt}% 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}% 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}% 2025 2408 \pgfsetbuttcap% 2026 2409 \pgfsetroundjoin% … … 2045 2428 }% 2046 2429 \begin{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}% 2430 \pgfsys@transformshift{3.869368in}{2.556015in}% 2431 \pgfsys@useobject{currentmarker}{}% 2432 \end{pgfscope}% 2246 2433 \end{pgfscope}% 2247 2434 \begin{pgfscope}% … … 2249 2436 \pgfsetstrokecolor{textcolor}% 2250 2437 \pgfsetfillcolor{textcolor}% 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}% 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}% 2259 2456 \pgfsetlinewidth{1.003750pt}% 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}% 2457 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2294 2458 \pgfsetstrokecolor{currentstroke}% 2295 2459 \pgfsetdash{}{0pt}% … … 2300 2464 }% 2301 2465 \begin{pgfscope}% 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.1 21569,0.466667,0.705882}%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.172549,0.627451,0.172549}% 2310 2474 \pgfsetfillcolor{currentfill}% 2311 2475 \pgfsetlinewidth{1.003750pt}% 2312 \definecolor{currentstroke}{rgb}{0.1 21569,0.466667,0.705882}%2476 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2313 2477 \pgfsetstrokecolor{currentstroke}% 2314 2478 \pgfsetdash{}{0pt}% … … 2319 2483 }% 2320 2484 \begin{pgfscope}% 2321 \pgfsys@transformshift{ 1.063889in}{1.379080in}%2485 \pgfsys@transformshift{3.869368in}{2.342667in}% 2322 2486 \pgfsys@useobject{currentmarker}{}% 2323 2487 \end{pgfscope}% … … 2327 2491 \pgfsetroundjoin% 2328 2492 \pgfsetlinewidth{1.505625pt}% 2329 \definecolor{currentstroke}{rgb}{0.1 21569,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 \pgfset roundjoin%2339 \definecolor{currentfill}{rgb}{0.1 21569,0.466667,0.705882}%2493 \definecolor{currentstroke}{rgb}{0.172549,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 \pgfsetmiterjoin% 2503 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}% 2340 2504 \pgfsetfillcolor{currentfill}% 2341 2505 \pgfsetlinewidth{1.003750pt}% 2342 \definecolor{currentstroke}{rgb}{0.1 21569,0.466667,0.705882}%2506 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}% 2343 2507 \pgfsetstrokecolor{currentstroke}% 2344 2508 \pgfsetdash{}{0pt}% 2345 2509 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\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}}% 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}}% 2355 2514 \pgfpathclose% 2356 2515 \pgfusepath{stroke,fill}% 2357 2516 }% 2358 2517 \begin{pgfscope}% 2359 \pgfsys@transformshift{ 1.063889in}{1.309636in}%2518 \pgfsys@transformshift{3.869368in}{2.231556in}% 2360 2519 \pgfsys@useobject{currentmarker}{}% 2361 2520 \end{pgfscope}% … … 2365 2524 \pgfsetstrokecolor{textcolor}% 2366 2525 \pgfsetfillcolor{textcolor}% 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}%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}% 2384 2543 \pgfsetfillcolor{currentfill}% 2385 2544 \pgfsetlinewidth{1.003750pt}% 2386 \definecolor{currentstroke}{rgb}{ 1.000000,0.498039,0.054902}%2545 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2387 2546 \pgfsetstrokecolor{currentstroke}% 2388 2547 \pgfsetdash{}{0pt}% … … 2393 2552 }% 2394 2553 \begin{pgfscope}% 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}%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}% 2403 2562 \pgfsetfillcolor{currentfill}% 2404 2563 \pgfsetlinewidth{1.003750pt}% 2405 \definecolor{currentstroke}{rgb}{ 1.000000,0.498039,0.054902}%2564 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}% 2406 2565 \pgfsetstrokecolor{currentstroke}% 2407 2566 \pgfsetdash{}{0pt}% … … 2412 2571 }% 2413 2572 \begin{pgfscope}% 2414 \pgfsys@transformshift{ 1.063889in}{1.185407in}%2573 \pgfsys@transformshift{3.869368in}{2.018207in}% 2415 2574 \pgfsys@useobject{currentmarker}{}% 2416 2575 \end{pgfscope}% … … 2420 2579 \pgfsetroundjoin% 2421 2580 \pgfsetlinewidth{1.505625pt}% 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 \pgfset roundjoin%2432 \definecolor{currentfill}{rgb}{ 1.000000,0.498039,0.054902}%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 \pgfsetmiterjoin% 2591 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}% 2433 2592 \pgfsetfillcolor{currentfill}% 2434 2593 \pgfsetlinewidth{1.003750pt}% 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}}% 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}}% 2448 2602 \pgfpathclose% 2449 2603 \pgfusepath{stroke,fill}% 2450 2604 }% 2451 2605 \begin{pgfscope}% 2452 \pgfsys@transformshift{ 1.063889in}{1.115963in}%2606 \pgfsys@transformshift{3.869368in}{1.907096in}% 2453 2607 \pgfsys@useobject{currentmarker}{}% 2454 2608 \end{pgfscope}% … … 2458 2612 \pgfsetstrokecolor{textcolor}% 2459 2613 \pgfsetfillcolor{textcolor}% 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}% 2614 \pgftext[x=4.269368in,y=1.829318in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-rand}% 2647 2615 \end{pgfscope}% 2648 2616 \end{pgfpicture}% -
doc/theses/colby_parsons_MMAth/figures/pyke_Channel_Contention.pgf
r6e4c44d r3982384 77 77 \pgfsetstrokecolor{textcolor}% 78 78 \pgfsetfillcolor{textcolor}% 79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{1 0.000000}{12.000000}\selectfont \(\displaystyle 2\)}%79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 4\)}%104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 8\)}%129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 16\)}%154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 24\)}%179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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 0.000000}{12.000000}\selectfont \(\displaystyle 32\)}%204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\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. 251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}%210 \pgftext[x=3.280000in,y=0.161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}% 211 211 \end{pgfscope}% 212 212 \begin{pgfscope}% … … 233 233 \pgfsetstrokecolor{textcolor}% 234 234 \pgfsetfillcolor{textcolor}% 235 \pgftext[x=0. 501581in,y=2.276306in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{8}\)}%235 \pgftext[x=0.399655in,y=2.241198in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{8}\)}% 236 236 \end{pgfscope}% 237 237 \begin{pgfscope}% … … 429 429 \pgfsetstrokecolor{textcolor}% 430 430 \pgfsetfillcolor{textcolor}% 431 \pgftext[x=0. 446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (channel operations)}%431 \pgftext[x=0.344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (channel operations)}% 432 432 \end{pgfscope}% 433 433 \begin{pgfscope}% … … 838 838 \pgfusepath{clip}% 839 839 \pgfsetbuttcap% 840 \pgfset roundjoin%840 \pgfsetmiterjoin% 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}% 845 1020 \pgfsetstrokecolor{currentstroke}% 846 1021 \pgfsetdash{}{0pt}% … … 859 1034 }% 860 1035 \begin{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}% 1036 \pgfsys@transformshift{4.713959in}{3.935111in}% 1037 \pgfsys@useobject{currentmarker}{}% 1038 \end{pgfscope}% 928 1039 \end{pgfscope}% 929 1040 \begin{pgfscope}% … … 931 1042 \pgfsetstrokecolor{textcolor}% 932 1043 \pgfsetfillcolor{textcolor}% 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}% 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}% 976 1064 \pgfsetstrokecolor{currentstroke}% 977 1065 \pgfsetdash{}{0pt}% … … 982 1070 }% 983 1071 \begin{pgfscope}% 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}%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}% 995 1083 \pgfsetstrokecolor{currentstroke}% 996 1084 \pgfsetdash{}{0pt}% … … 1001 1089 }% 1002 1090 \begin{pgfscope}% 1003 \pgfsys@transformshift{ 5.105293in}{4.119833in}%1091 \pgfsys@transformshift{4.713959in}{3.721763in}% 1004 1092 \pgfsys@useobject{currentmarker}{}% 1005 1093 \end{pgfscope}% … … 1009 1097 \pgfsetroundjoin% 1010 1098 \pgfsetlinewidth{1.505625pt}% 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 \pgfset roundjoin%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}%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 \pgfsetmiterjoin% 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}% 1025 1113 \pgfsetstrokecolor{currentstroke}% 1026 1114 \pgfsetdash{}{0pt}% 1027 1115 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\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}}% 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}}% 1037 1120 \pgfpathclose% 1038 1121 \pgfusepath{stroke,fill}% 1039 1122 }% 1040 1123 \begin{pgfscope}% 1041 \pgfsys@transformshift{ 5.105293in}{4.050389in}%1124 \pgfsys@transformshift{4.713959in}{3.610651in}% 1042 1125 \pgfsys@useobject{currentmarker}{}% 1043 1126 \end{pgfscope}% … … 1047 1130 \pgfsetstrokecolor{textcolor}% 1048 1131 \pgfsetfillcolor{textcolor}% 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}% 1132 \pgftext[x=5.113959in,y=3.532874in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Go}% 1143 1133 \end{pgfscope}% 1144 1134 \end{pgfpicture}% -
doc/theses/colby_parsons_MMAth/style/style.tex
r6e4c44d r3982384 7 7 8 8 \newcommand{\code}[1]{\lstinline[language=CFA]{#1}} 9 \newcommand{\Go}[1]{\lstinline[language=Go]{#1}} 9 10 \newcommand{\uC}{$\mu$\CC} 10 11 \newcommand{\PAB}[1]{{\color{red}PAB: #1}} 12 \newcommand{\CAP}[1]{{\color{orange}CAP: #1}} 11 13 12 14 \newsavebox{\myboxA} % used with subfigure -
doc/theses/colby_parsons_MMAth/text/CFA_concurrency.tex
r6e4c44d r3982384 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 instancing a @processor@ structure.9 Kernel threads are created by declaring 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 ed, either implicitly at block exit for stack allocation or explicitly at @delete@ for heap allocation.32 A thread is implicitly joined at deallocation, 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
r6e4c44d r3982384 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 containment 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 nominal 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 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 \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. 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{ WithStatement}62 \section{\lstinline{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 nominal inheritance.130 \CFA extends C with generalized overloading polymorphism (see \VRef{s:Overloading}), as well as, parametric polymorphism and limited 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 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 containmentinheritance},label={l:cfa_inherit}]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 nominal 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
r6e4c44d r3982384 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.} 675 676 The performance of \CFA's actor system is tested using a suite of microbenchmarks, and compared with other actor systems. 676 677 Most of the benchmarks are the same as those presented in \ref{}, with a few additions. -
doc/theses/colby_parsons_MMAth/text/channels.tex
r6e4c44d r3982384 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. 7 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). 8 9 This model is an alternative to shared-memory concurrency, where threads can communicate directly by changing shared state. 9 Most modern concurrent programming languages do not subscribe to just one style of communication among threads and provide features that support multiple approaches.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 ... 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 ... 15 Hoare's language restricts channels such that both the sender and receiver need to explicitly name the process that is destination of a channel send or the source of a channel receive. 16 These channel semantics remove the ability to have an anonymous sender or receiver and additionally all channel operations in CSP are synchronous (no buffering). 17 Channels as a programming language feature has been popularized in recent years by the language Go, which encourages the use of channels as its fundamental concurrent feature. 18 Go's restrictions are ... \CAP{The only restrictions in Go but not CFA that I can think of are the closing semantics and the functionality of select vs. waituntil. Is that worth mentioning here or should it be discussed later?} 18 19 \CFA channels do not have these restrictions. 19 20 20 21 \section{Producer-Consumer Problem} 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. 22 A channel is an abstraction for a shared-memory buffer, which turns the implementation of a channel into the producer-consumer problem. 23 The producer-consumer problem, also known as the bounded-buffer problem, was introduced by Dijkstra~\cite[\S~4.1]{Dijkstra65}. 24 In the problem, threads interact with a buffer in two ways: producing threads insert values into the buffer and consuming threads remove values from the buffer. 25 In general, a buffer needs protection to ensure a producer only inserts into a non-full buffer and a consumer only removes from a non-empty buffer (synchronization). 26 As well, a buffer needs protection from concurrent access by multiple producers or consumers attempt to insert or remove simultaneously (MX). 27 28 Channels come in three flavours of buffers: 29 \begin{enumerate} 30 \item 31 Zero sized implies the communication is synchronous, \ie the producer must wait for the consumer to arrive or vice versa for a value to be communicated. 32 \item 33 Fixed sized (bounded) implies the communication is asynchronous, \ie the producer can proceed up to the buffer size and vice versa for the consumer with respect to removal. 34 \item 35 Infinite sized (unbounded) implies the communication is asynchronous, \ie the producer never waits but the consumer waits when the buffer is empty. 36 Since memory is finite, all unbounded buffers are ultimately bounded; 37 this restriction must be part of its implementation. 38 \end{enumerate} 39 40 In general, the order values are processed by the consumer does not affect the correctness of the producer-consumer problem. 41 For example, the buffer can be LIFO, FIFO, or prioritized with respect to insertion and removal. 42 However, like MX, a buffer should ensure every value is eventually removed after some reasonable bounded time (no long-term starvation). 43 The simplest way to prevent starvation is to implement the buffer as a queue, either with a cyclic array or linked nodes. 28 44 29 45 \section{First-Come First-Served} 30 The channel implementations that will be discussed are \gls{fcfs}. 31 This term was defined by Lamport~\cite{Lamport74}. 46 As pointed out, a bounded buffer requires MX among multiple producers or consumers. 47 This MX should be fair among threads, independent of the FIFO buffer being fair among values. 48 Fairness among threads is called \gls{fcfs} and was defined by Lamport~\cite[p.~454]{Lamport74}. 32 49 \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. 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. 50 Given this doorway, a CS is said to be \gls{fcfs}, if threads access the shared resource in the order they proceed through the doorway. 51 A consequence of \gls{fcfs} execution is the elimination of \Newterm{barging}, where barging means a thread arrives at a CS with waiting threads, and the MX protecting the CS allows the arriving thread to enter the CS ahead of one or more of the waiting threads. 52 53 \gls{fcfs} is a fairness property that prevents unequal access to the shared resource and prevents starvation, however it comes at a cost. 54 Implementing an algorithm with \gls{fcfs} can lead to double blocking, where arriving threads block outside the doorway waiting for a thread in the lock entry-protocol and inside the doorway waiting for a thread in the CS. 55 An analogue is boarding an airplane: first you wait to get through security to the departure gates (short term), and then wait again at the departure gate for the airplane (long term). 56 As such, algorithms that are not \gls{fcfs} (barging) can be more performant by skipping the wait for the CS and entering directly; 57 however, this performance gain comes by introducing unfairness with possible starvation for waiting threads. 37 58 38 59 \section{Channel Implementation} 39 The channel implementation in \CFA is a near carbon copy of the Go implementation.40 Experiment ation wasconducted that varied the producer-consumer problem algorithm and lock type used inside the channel.60 Currently, only the Go programming language~\cite{Go} provides user-level threading where the primary communication mechanism is channels. 61 Experiments were conducted that varied the producer-consumer problem algorithm and lock type used inside the channel. 41 62 With the exception of non-\gls{fcfs} algorithms, no algorithm or lock usage in the channel implementation was found to be consistently more performant that Go's choice of algorithm and lock implementation. 63 Therefore, the low-level channel implementation in \CFA is largely copied from the Go implementation, but adapted to the \CFA type and runtime systems. 42 64 As such the research contributions added by \CFA's channel implementation lie in the realm of safety and productivity features. 65 66 \PAB{Discuss the Go channel implementation. Need to tie in FIFO buffer and FCFS locking.} 67 68 In this work, all channels are implemented with bounded buffers, so there is no zero-sized buffering. 69 \CAP{I do have zero size channels implemented, however I don't focus on them since I think they are uninteresting as they are just a thin layer over binary semaphores. Should I mention that I support it but omit discussion or just leave it out?} 43 70 44 71 \section{Safety and Productivity} … … 47 74 48 75 \begin{itemize} 49 \item Toggle-able statistic collection on channel behaviour that count s 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.76 \item Toggle-able statistic collection on channel behaviour that count channel and blocking operations. 77 Tracking blocking operations helps illustrate usage and then tune the channel size, where the aim is to reduce blocking. 51 78 \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 wouldcause a deadlock.53 \item A \code{flush}routine that delivers copies of an element to all waiting consumers, flushing the buffer.79 If threads are blocked inside the channel when it terminates, this case is detected and the user is informed, as this can cause a deadlock. 80 \item A @flush@ routine that delivers copies of an element to all waiting consumers, flushing the buffer. 54 81 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.82 Additionally, the @flush@ routine is more performant then looping around the @insert@ operation since it can deliver the elements without having to reacquire mutual exclusion for each element sent. 56 83 \end{itemize} 57 84 … … 67 94 % C_TODO: add reference to select chapter, add citation to go channels info 68 95 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.96 Channels in Go have a @close@ operation and a \Go{select} statement that both can be used to help threads terminate. 97 The \Go{select} statement will be discussed in \ref{}, where \CFA's @waituntil@ statement will be compared with the Go \Go{select} statement. 98 The @close@ operation on a channel in Go changes the state of the channel. 99 When a channel is closed, sends to the channel will panic and additional calls to @close@ will panic. 73 100 Receives are handled differently where receivers will never block on a closed channel and will continue to remove elements from the channel. 74 101 Once a channel is empty, receivers can continue to remove elements, but will receive the zero-value version of the element type. 75 102 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.103 These design choices for Go channels enforce a specific interaction style with channels during termination, where careful thought is needed to ensure that additional @close@ calls don't occur and that no sends occur after channels are closed. 77 104 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. 78 105 If errors need to occur in Go, return codes are used to pass error information where they are needed. … … 81 108 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. 82 109 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.110 However, in doing so it renders the @close@ operation nearly useless, as the only utilities it provides are the ability to ensure that receivers no longer block on the channel, and will receive zero-valued elements. 111 This can be useful if the zero-typed element is recognized as a sentinel value, but if another sentinel value is preferred, then @close@ only provides its non-blocking feature. 112 To avoid \gls{toctou} issues during shutdown, a busy wait with a \Go{select} statement is often used to add or remove elements from a channel. 86 113 Due to Go's asymmetric approach to channel shutdown, separate synchronization between producers and consumers of a channel has to occur during shutdown. 87 114 … … 91 118 The difference between the exception handling mechanisms arises after the exception is handled. 92 119 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.120 In resumption handling, the control flow returns to the site of the @throw@, allowing the control to continue where it left off. 94 121 Note that in resumption, since control can return to the point of error propagation, the stack is not unwound during resumption propagation. 95 122 In \CFA if a resumption is not handled, it is reraised as a termination. … … 102 129 These termination exceptions allow for non-local transfer that can be used to great effect to eagerly and gracefully shut down a thread. 103 130 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. 104 The resumption exception, \code{channel_closed}, has a couple fields to aid in handling the exception.131 The resumption exception, @channel_closed@, has a couple fields to aid in handling the exception. 105 132 The exception contains a pointer to the channel it was thrown from, and a pointer to an element. 106 133 In exceptions thrown from remove the element pointer will be null. … … 116 143 Both of these examples are implemented using \CFA syntax so that they can be easily compared. 117 144 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.145 In this problem it is infeasible to use the Go @close@ call since all tasks are both potentially producers and consumers, causing panics on close to be unavoidable. 119 146 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 147 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.148 Furthermore, an additional flag @done@ is needed to communicate to threads once they have left the barrier that they are done. 122 149 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. 123 150 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. … … 247 274 248 275 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.276 This program uses resumption in the @Consumer@ thread main to ensure that all elements in the channel are removed before the consumer thread terminates. 277 The producer only has a @catch@ so the moment it receives an exception it terminates, whereas the consumer will continue to remove from the closed channel via handling resumptions until the buffer is empty, which then throws a termination exception. 251 278 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 279 -
doc/theses/colby_parsons_MMAth/text/frontpgs.tex
r6e4c44d r3982384 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. \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. 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. 83 88 84 89 \cleardoublepage -
doc/theses/colby_parsons_MMAth/text/intro.tex
r6e4c44d r3982384 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 This thesis presents a set of concurrent features implemented in the new programming-language \CFA. 10 11 This thesis presents a suite of high-level concurrent-language features implemented in the new programming-language \CFA. 11 12 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. 12 13 The groundwork for concurrent features in \CFA was implemented by Thierry Delisle~\cite{Delisle18}, who contributed the threading system, coroutines, monitors and other tools. 13 14 This thesis builds on top of that foundation by providing a suite of high-level concurrent features. 14 The se features include mutex statements, channels, an actor system and a waituntil statement.15 The features include a @mutex@ statement, channels and a @waituntil@ statement, and an actor system. 15 16 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
r6e4c44d r3982384 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, 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}. 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}. 30 31 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. 31 32 32 33 Figure~\ref{f:AtomicCounter} shows a \CFA and Java monitor implementing an atomic counter. 33 34 A \Newterm{monitor} is a programming technique that implicitly binds mutual exclusion to static function scope by call and return. 34 Lock mutual exclusion, defined by acquire/release calls, is independent of lexical context (analogous to block versus heap storage allocation).35 In contrast, lock mutual exclusion, defined by acquire/release calls, is independent of lexical context (analogous to block versus heap storage allocation). 35 36 Restricting acquire and release points in a monitor eases programming, comprehension, and maintenance, at a slight cost in flexibility and efficiency. 36 37 Ultimately, a monitor is implemented using a combination of basic locks and atomic instructions. … … 110 111 To increase locking flexibility, some languages introduce a mutex statement. 111 112 \VRef[Figure]{f:ReadersWriter} shows the outline of a reader/writer lock written as a \CFA monitor and mutex statements. 112 (The exact lock implement is irrelevant.)113 (The exact lock implementation is irrelevant.) 113 114 The @read@ and @write@ functions are called with a reader/write lock and any arguments to perform reading or writing. 114 115 The @read@ function is not MX because multiple readers can read simultaneously. … … 271 272 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. 272 273 This repeats after selecting a new starting point in a cyclic manner until all locks are acquired successfully. 273 This deadlock avoidance algorithm is shown in Listing~\ref{l:cc_deadlock_avoid}.274 This deadlock avoidance algorithm is shown in Figure~\ref{f:cc_deadlock_avoid}. 274 275 The algorithm is taken directly from the source code of the @<mutex>@ header, with some renaming and comments for clarity. 275 276 276 \begin{cfa}[caption={\CC \lstinline{scoped_lock} deadlock avoidance algorithm},label={l:cc_deadlock_avoid}] 277 \begin{figure} 278 \begin{cfa} 277 279 int first = 0; // first lock to attempt to lock 278 280 do { … … 291 293 } while ( ! locks[first].owns_lock() ); $\C{// is first lock held?}$ 292 294 \end{cfa} 293 294 While the algorithm in \ref{l:cc_deadlock_avoid} successfully avoids deadlock, there is a livelock scenario. 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. 295 300 Assume two threads, $A$ and $B$, create a @scoped_lock@ accessing two locks, $L1$ and $L2$. 296 301 A livelock can form as follows. … … 335 340 \end{cquote} 336 341 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. 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 .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. 338 343 339 344 \section{Performance} … … 345 350 346 351 The benchmark used to evaluate the avoidance algorithms repeatedly acquires a fixed number of locks in a random order and then releases them. 347 The pseudo 352 The pseudocode for the deadlock avoidance benchmark is shown in \VRef[Listing]{l:deadlock_avoid_pseudo}. 348 353 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. 349 354 The benchmarks are run for a fixed duration of 10 seconds and then terminate. … … 352 357 The median is calculated and is plotted alongside the 95\% confidence intervals for each point. 353 358 354 \begin{cfa}[caption={Deadlock avoidance bendchmark pseudo code},label={l:deadlock_avoid_pseudo}] 355 356 357 358 $\PAB{// add pseudo code}$ 359 360 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 } 361 389 362 390 \end{cfa} … … 374 402 375 403 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.}378 404 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. 379 405 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@. … … 383 409 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. 384 410 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. 385 In Figures~\ref{f:mutex_bench8_AMD} and \ref{f:mutex_bench8_Intel} the mutex statement performsbetter 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 th at the improvement in throughput compared to baseline is due to the timespent in the insertion sort, which decreases contention on the locks.411 In Figures~\ref{f:mutex_bench8_AMD} and \ref{f:mutex_bench8_Intel} there is the counter-intuitive result of the mutex statement performing better 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 the increase in throughput compared to baseline is due to the delay spent in the insertion sort, which decreases contention on the locks. 388 414 389 415 \begin{figure} -
libcfa/src/Makefile.am
r6e4c44d r3982384 115 115 concurrency/kernel/fwd.hfa \ 116 116 concurrency/mutex_stmt.hfa \ 117 concurrency/select.hfa \118 117 concurrency/channel.hfa \ 119 118 concurrency/actor.hfa … … 128 127 concurrency/monitor.hfa \ 129 128 concurrency/mutex.hfa \ 129 concurrency/select.hfa \ 130 130 concurrency/thread.hfa 131 131 -
libcfa/src/bits/weakso_locks.cfa
r6e4c44d r3982384 15 15 // Update Count : 16 16 // 17 18 17 #include "bits/weakso_locks.hfa" 19 20 18 #pragma GCC visibility push(default) 21 19 … … 27 25 void unlock( blocking_lock & ) {} 28 26 void on_notify( blocking_lock &, struct thread$ * ) {} 29 size_t on_wait( blocking_lock & ) { return 0; }27 size_t on_wait( blocking_lock &, void (*pp_fn)( void * ), void * pp_datum ) { return 0; } 30 28 void on_wakeup( blocking_lock &, size_t ) {} 31 29 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
r6e4c44d r3982384 23 23 #include "containers/list.hfa" 24 24 25 struct thread$;25 struct select_node; 26 26 27 27 //----------------------------------------------------------------------------- … … 32 32 33 33 // List of blocked threads 34 dlist( thread$) blocked_threads;34 dlist( select_node ) 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 ) OPTIONAL_THREAD;59 size_t on_wait( blocking_lock & this, void (*pp_fn)( void * ), void * pp_datum ) 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; 62 65 63 66 //---------- … … 72 75 static inline bool try_lock ( multiple_acquisition_lock & this ) { return try_lock( (blocking_lock &)this ); } 73 76 static inline void unlock ( multiple_acquisition_lock & this ) { unlock ( (blocking_lock &)this ); } 74 static inline size_t on_wait ( multiple_acquisition_lock & this ) { return on_wait ( (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 ); } 75 78 static inline void on_wakeup( multiple_acquisition_lock & this, size_t v ) { on_wakeup ( (blocking_lock &)this, v ); } 76 79 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
r6e4c44d r3982384 1 // 2 // Cforall Version 1.0.0 Copyright (C) 2021 University of Waterloo 3 // 4 // The contents of this file are covered under the licence agreement in the 5 // file "LICENCE" distributed with Cforall. 6 // 7 // channel.hfa -- LIBCFATHREAD 8 // Runtime locks that used with the runtime thread system. 9 // 10 // Author : Colby Alexander Parsons 11 // Created On : Thu Jan 21 19:46:50 2022 12 // Last Modified By : 13 // Last Modified On : 14 // Update Count : 15 // 16 1 17 #pragma once 2 18 3 19 #include <locks.hfa> 4 20 #include <list.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 } 21 #include "select.hfa" 30 22 31 23 // returns true if woken due to shutdown 32 24 // blocks thread on list and releases passed lock 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);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 ); 36 28 unlock( lock ); 37 29 park(); 38 return w.elem == 0p; 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 ); 39 38 } 40 39 … … 59 58 size_t size, front, back, count; 60 59 T * buffer; 61 dlist( wait_link) prods, cons; // lists of blocked threads62 go_mutex mutex_lock; // MX lock63 bool closed; // indicates channel close/open60 dlist( select_node ) prods, cons; // lists of blocked threads 61 go_mutex mutex_lock; // MX lock 62 bool closed; // indicates channel close/open 64 63 #ifdef CHAN_STATS 65 64 size_t blocks, operations; // counts total ops and ops resulting in a blocked thd … … 70 69 size = _size; 71 70 front = back = count = 0; 72 buffer = aalloc( size );71 if ( size != 0 ) buffer = aalloc( size ); 73 72 prods{}; 74 73 cons{}; … … 87 86 #endif 88 87 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; }88 if ( size != 0 ) delete( buffer ); 89 } 90 static inline size_t get_count( channel(T) & chan ) with(chan) { return __atomic_load_n( &count, __ATOMIC_RELAXED ); } 91 static inline size_t get_size( channel(T) & chan ) with(chan) { return __atomic_load_n( &size, __ATOMIC_RELAXED ); } 93 92 static inline bool has_waiters( channel(T) & chan ) with(chan) { return !cons`isEmpty || !prods`isEmpty; } 94 93 static inline bool has_waiting_consumers( channel(T) & chan ) with(chan) { return !cons`isEmpty; } … … 102 101 // flush waiting consumers and producers 103 102 while ( has_waiting_consumers( chan ) ) { 104 cons`first.elem = 0p; 103 if( !__handle_waituntil_OR( cons ) ) // ensure we only signal special OR case threads when they win the race 104 break; // if __handle_waituntil_OR returns false cons is empty so break 105 cons`first.extra = 0p; 105 106 wake_one( cons ); 106 107 } 107 108 while ( has_waiting_producers( chan ) ) { 108 prods`first.elem = 0p; 109 if( !__handle_waituntil_OR( prods ) ) // ensure we only signal special OR case threads when they win the race 110 break; // if __handle_waituntil_OR returns false prods is empty so break 111 prods`first.extra = 0p; 109 112 wake_one( prods ); 110 113 } … … 114 117 static inline void is_closed( channel(T) & chan ) with(chan) { return closed; } 115 118 119 // used to hand an element to a blocked consumer and signal it 120 static inline void __cons_handoff( channel(T) & chan, T & elem ) with(chan) { 121 memcpy( cons`first.extra, (void *)&elem, sizeof(T) ); // do waiting consumer work 122 wake_one( cons ); 123 } 124 125 // used to hand an element to a blocked producer and signal it 126 static inline void __prods_handoff( channel(T) & chan, T & retval ) with(chan) { 127 memcpy( (void *)&retval, prods`first.extra, sizeof(T) ); 128 wake_one( prods ); 129 } 130 116 131 static inline void flush( channel(T) & chan, T elem ) with(chan) { 117 132 lock( mutex_lock ); 118 133 while ( count == 0 && !cons`isEmpty ) { 119 memcpy(cons`first.elem, (void *)&elem, sizeof(T)); // do waiting consumer work 120 wake_one( cons ); 134 __cons_handoff( chan, elem ); 121 135 } 122 136 unlock( mutex_lock ); … … 125 139 // handles buffer insert 126 140 static inline void __buf_insert( channel(T) & chan, T & elem ) with(chan) { 127 memcpy( (void *)&buffer[back], (void *)&elem, sizeof(T));141 memcpy( (void *)&buffer[back], (void *)&elem, sizeof(T) ); 128 142 count += 1; 129 143 back++; … … 131 145 } 132 146 133 // does the buffer insert or hands elem directly to consumer if one is waiting134 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 work137 wake_one( cons );138 } else __buf_insert( chan, elem );139 }140 141 147 // needed to avoid an extra copy in closed case 142 148 static inline bool __internal_try_insert( channel(T) & chan, T & elem ) with(chan) { … … 145 151 operations++; 146 152 #endif 153 154 ConsEmpty: if ( !cons`isEmpty ) { 155 if ( !__handle_waituntil_OR( cons ) ) break ConsEmpty; 156 __cons_handoff( chan, elem ); 157 unlock( mutex_lock ); 158 return true; 159 } 160 147 161 if ( count == size ) { unlock( mutex_lock ); return false; } 148 __do_insert( chan, elem ); 162 163 __buf_insert( chan, elem ); 149 164 unlock( mutex_lock ); 150 165 return true; … … 157 172 // handles closed case of insert routine 158 173 static inline void __closed_insert( channel(T) & chan, T & elem ) with(chan) { 159 channel_closed except{ &channel_closed_vt, &elem, &chan };174 channel_closed except{ &channel_closed_vt, &elem, &chan }; 160 175 throwResume except; // throw closed resumption 161 176 if ( !__internal_try_insert( chan, elem ) ) throw except; // if try to insert fails (would block), throw termination … … 182 197 } 183 198 184 // have to check for the zero size channel case185 if ( size == 0 &&!cons`isEmpty ) {186 memcpy(cons`first.elem, (void *)&elem, sizeof(T));187 wake_one( cons);188 unlock( mutex_lock ); 189 return true;199 // buffer count must be zero if cons are blocked (also handles zero-size case) 200 ConsEmpty: if ( !cons`isEmpty ) { 201 if ( !__handle_waituntil_OR( cons ) ) break ConsEmpty; 202 __cons_handoff( chan, elem ); 203 unlock( mutex_lock ); 204 return; 190 205 } 191 206 … … 202 217 } // if 203 218 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)); 219 __buf_insert( chan, elem ); 220 unlock( mutex_lock ); 221 } 222 223 // does the buffer remove and potentially does waiting producer work 224 static inline void __do_remove( channel(T) & chan, T & retval ) with(chan) { 225 memcpy( (void *)&retval, (void *)&buffer[front], sizeof(T) ); 216 226 count -= 1; 217 227 front = (front + 1) % size; 218 }219 220 // does the buffer remove and potentially does waiting producer work221 static inline void __do_remove( channel(T) & chan, T & retval ) with(chan) {222 __buf_remove( chan, retval );223 228 if (count == size - 1 && !prods`isEmpty ) { 224 __buf_insert( chan, *(T *)prods`first.elem ); // do waiting producer work 229 if ( !__handle_waituntil_OR( prods ) ) return; 230 __buf_insert( chan, *(T *)prods`first.extra ); // do waiting producer work 225 231 wake_one( prods ); 226 232 } … … 233 239 operations++; 234 240 #endif 241 242 ZeroSize: if ( size == 0 && !prods`isEmpty ) { 243 if ( !__handle_waituntil_OR( prods ) ) break ZeroSize; 244 __prods_handoff( chan, retval ); 245 unlock( mutex_lock ); 246 return true; 247 } 248 235 249 if ( count == 0 ) { unlock( mutex_lock ); return false; } 250 236 251 __do_remove( chan, retval ); 237 252 unlock( mutex_lock ); … … 244 259 static inline [T, bool] try_remove( channel(T) & chan ) { 245 260 T retval; 246 return [ retval, __internal_try_remove( chan, retval ) ]; 247 } 248 249 static inline T try_remove( channel(T) & chan, T elem ) { 261 bool success = __internal_try_remove( chan, retval ); 262 return [ retval, success ]; 263 } 264 265 static inline T try_remove( channel(T) & chan ) { 250 266 T retval; 251 267 __internal_try_remove( chan, retval ); … … 255 271 // handles closed case of insert routine 256 272 static inline void __closed_remove( channel(T) & chan, T & retval ) with(chan) { 257 channel_closed except{ &channel_closed_vt, 0p, &chan };273 channel_closed except{ &channel_closed_vt, 0p, &chan }; 258 274 throwResume except; // throw resumption 259 275 if ( !__internal_try_remove( chan, retval ) ) throw except; // if try to remove fails (would block), throw termination … … 279 295 280 296 // have to check for the zero size channel case 281 if ( size == 0 && !prods`isEmpty ) {282 memcpy((void *)&retval, (void *)prods`first.elem, sizeof(T));283 wake_one( prods);297 ZeroSize: if ( size == 0 && !prods`isEmpty ) { 298 if ( !__handle_waituntil_OR( prods ) ) break ZeroSize; 299 __prods_handoff( chan, retval ); 284 300 unlock( mutex_lock ); 285 301 return retval; … … 287 303 288 304 // wait if buffer is empty, work will be completed by someone else 289 if ( count == 0) {305 if ( count == 0 ) { 290 306 #ifdef CHAN_STATS 291 307 blocks++; … … 299 315 // Remove from buffer 300 316 __do_remove( chan, retval ); 301 302 317 unlock( mutex_lock ); 303 318 return retval; 304 319 } 320 321 /////////////////////////////////////////////////////////////////////////////////////////// 322 // The following is support for waituntil (select) statements 323 /////////////////////////////////////////////////////////////////////////////////////////// 324 static inline bool unregister_chan( channel(T) & chan, select_node & node ) with(chan) { 325 // if ( !node`isListed && !node.park_counter ) return false; // handle special OR case C_TODO: try adding this back 326 lock( mutex_lock ); 327 if ( node`isListed ) { // op wasn't performed 328 #ifdef CHAN_STATS 329 operations--; 330 #endif 331 remove( node ); 332 unlock( mutex_lock ); 333 return false; 334 } 335 unlock( mutex_lock ); 336 337 // only return true when not special OR case, not exceptional calse and status is SAT 338 return ( node.extra == 0p || !node.park_counter ) ? false : *node.clause_status == __SELECT_SAT; 339 } 340 341 // type used by select statement to capture a chan read as the selected operation 342 struct chan_read { 343 T & ret; 344 channel(T) & chan; 345 }; 346 347 static inline void ?{}( chan_read(T) & cr, channel(T) & chan, T & ret ) { 348 &cr.chan = &chan; 349 &cr.ret = &ret; 350 } 351 static inline chan_read(T) ?<<?( T & ret, channel(T) & chan ) { chan_read(T) cr{ chan, ret }; return cr; } 352 353 static inline void __handle_select_closed_read( chan_read(T) & this, select_node & node ) with(this.chan, this) { 354 __closed_remove( chan, ret ); 355 // if we get here then the insert succeeded 356 __make_select_node_available( node ); 357 } 358 359 static inline bool register_select( chan_read(T) & this, select_node & node ) with(this.chan, this) { 360 lock( mutex_lock ); 361 node.extra = &ret; // set .extra so that if it == 0p later in on_selected it is due to channel close 362 363 #ifdef CHAN_STATS 364 if ( !closed ) operations++; 365 #endif 366 367 if ( !node.park_counter ) { 368 // are we special case OR and front of cons is also special case OR 369 if ( !unlikely(closed) && !prods`isEmpty && prods`first.clause_status && !prods`first.park_counter ) { 370 if ( !__make_select_node_pending( node ) ) { 371 unlock( mutex_lock ); 372 return false; 373 } 374 375 if ( __handle_waituntil_OR( prods ) ) { 376 __prods_handoff( chan, ret ); 377 __make_select_node_sat( node ); // need to to mark SAT now that we know operation is done or else threads could get stuck in __mark_select_node 378 unlock( mutex_lock ); 379 return true; 380 } 381 __make_select_node_unsat( node ); 382 } 383 // check if we can complete operation. If so race to establish winner in special OR case 384 if ( count != 0 || !prods`isEmpty || unlikely(closed) ) { 385 if ( !__make_select_node_available( node ) ) { // we didn't win the race so give up on registering 386 unlock( mutex_lock ); 387 return false; 388 } 389 } 390 } 391 392 if ( unlikely(closed) ) { 393 unlock( mutex_lock ); 394 __handle_select_closed_read( this, node ); 395 return true; 396 } 397 398 // have to check for the zero size channel case 399 ZeroSize: if ( size == 0 && !prods`isEmpty ) { 400 if ( !__handle_waituntil_OR( prods ) ) break ZeroSize; 401 __prods_handoff( chan, ret ); 402 __set_avail_then_unlock( node, mutex_lock ); 403 return true; 404 } 405 406 // wait if buffer is empty, work will be completed by someone else 407 if ( count == 0 ) { 408 #ifdef CHAN_STATS 409 blocks++; 410 #endif 411 412 insert_last( cons, node ); 413 unlock( mutex_lock ); 414 return false; 415 } 416 417 // Remove from buffer 418 __do_remove( chan, ret ); 419 __set_avail_then_unlock( node, mutex_lock ); 420 return true; 421 } 422 static inline bool unregister_select( chan_read(T) & this, select_node & node ) { return unregister_chan( this.chan, node ); } 423 static inline bool on_selected( chan_read(T) & this, select_node & node ) with(this) { 424 if ( node.extra == 0p ) // check if woken up due to closed channel 425 __closed_remove( chan, ret ); 426 // This is only reachable if not closed or closed exception was handled 427 return true; 428 } 429 430 // type used by select statement to capture a chan write as the selected operation 431 struct chan_write { 432 T elem; 433 channel(T) & chan; 434 }; 435 436 static inline void ?{}( chan_write(T) & cw, channel(T) & chan, T elem ) { 437 &cw.chan = &chan; 438 memcpy( (void *)&cw.elem, (void *)&elem, sizeof(T) ); 439 } 440 static inline chan_write(T) ?>>?( T elem, channel(T) & chan ) { chan_write(T) cw{ chan, elem }; return cw; } 441 442 static inline void __handle_select_closed_write( chan_write(T) & this, select_node & node ) with(this.chan, this) { 443 __closed_insert( chan, elem ); 444 // if we get here then the insert succeeded 445 __make_select_node_available( node ); 446 } 447 448 static inline bool register_select( chan_write(T) & this, select_node & node ) with(this.chan, this) { 449 lock( mutex_lock ); 450 node.extra = &elem; // set .extra so that if it == 0p later in on_selected it is due to channel close 451 452 #ifdef CHAN_STATS 453 if ( !closed ) operations++; 454 #endif 455 456 // special OR case handling 457 if ( !node.park_counter ) { 458 // are we special case OR and front of cons is also special case OR 459 if ( !unlikely(closed) && !cons`isEmpty && cons`first.clause_status && !cons`first.park_counter ) { 460 if ( !__make_select_node_pending( node ) ) { 461 unlock( mutex_lock ); 462 return false; 463 } 464 465 if ( __handle_waituntil_OR( cons ) ) { 466 __cons_handoff( chan, elem ); 467 __make_select_node_sat( node ); // need to to mark SAT now that we know operation is done or else threads could get stuck in __mark_select_node 468 unlock( mutex_lock ); 469 return true; 470 } 471 __make_select_node_unsat( node ); 472 } 473 // check if we can complete operation. If so race to establish winner in special OR case 474 if ( count != size || !cons`isEmpty || unlikely(closed) ) { 475 if ( !__make_select_node_available( node ) ) { // we didn't win the race so give up on registering 476 unlock( mutex_lock ); 477 return false; 478 } 479 } 480 } 481 482 // if closed handle 483 if ( unlikely(closed) ) { 484 unlock( mutex_lock ); 485 __handle_select_closed_write( this, node ); 486 return true; 487 } 488 489 // handle blocked consumer case via handoff (buffer is implicitly empty) 490 ConsEmpty: if ( !cons`isEmpty ) { 491 if ( !__handle_waituntil_OR( cons ) ) break ConsEmpty; 492 __cons_handoff( chan, elem ); 493 __set_avail_then_unlock( node, mutex_lock ); 494 return true; 495 } 496 497 // insert node in list if buffer is full, work will be completed by someone else 498 if ( count == size ) { 499 #ifdef CHAN_STATS 500 blocks++; 501 #endif 502 503 insert_last( prods, node ); 504 unlock( mutex_lock ); 505 return false; 506 } // if 507 508 // otherwise carry out write either via normal insert 509 __buf_insert( chan, elem ); 510 __set_avail_then_unlock( node, mutex_lock ); 511 return true; 512 } 513 static inline bool unregister_select( chan_write(T) & this, select_node & node ) { return unregister_chan( this.chan, node ); } 514 515 static inline bool on_selected( chan_write(T) & this, select_node & node ) with(this) { 516 if ( node.extra == 0p ) // check if woken up due to closed channel 517 __closed_insert( chan, elem ); 518 519 // This is only reachable if not closed or closed exception was handled 520 return true; 521 } 522 305 523 } // forall( T ) 524 525 -
libcfa/src/concurrency/future.hfa
r6e4c44d r3982384 19 19 #include "monitor.hfa" 20 20 #include "select.hfa" 21 #include "locks.hfa" 21 22 22 23 //---------------------------------------------------------------------------- … … 26 27 // future_t is lockfree and uses atomics which aren't needed given we use locks here 27 28 forall( T ) { 28 // enum (int){ FUTURE_EMPTY = 0, FUTURE_FULFILLED = 1 }; // Enums seem to be broken so feel free to add this back afterwards29 // enum { FUTURE_EMPTY = 0, FUTURE_FULFILLED = 1 }; // Enums seem to be broken so feel free to add this back afterwards 29 30 30 31 // temporary enum replacement … … 44 45 }; 45 46 46 // C_TODO: perhaps allow exceptions to be inserted like uC++?47 48 47 static inline { 49 48 … … 53 52 } 54 53 55 void ?{}( future(T) & this) {54 void ?{}( future(T) & this ) { 56 55 this.waiters{}; 57 56 this.state = FUTURE_EMPTY; … … 60 59 61 60 // Reset future back to original state 62 void reset( future(T) & this) with(this)61 void reset( future(T) & this ) with(this) 63 62 { 64 63 lock( lock ); … … 82 81 void _internal_flush( future(T) & this ) with(this) { 83 82 while( ! waiters`isEmpty ) { 83 if ( !__handle_waituntil_OR( waiters ) ) // handle special waituntil OR case 84 break; // if handle_OR returns false then waiters is empty so break 84 85 select_node &s = try_pop_front( waiters ); 85 86 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; 87 if ( s.clause_status == 0p ) // poke in result so that woken threads do not need to reacquire any locks 89 88 copy_T( result, *(((future_node(T) &)s).my_result) ); 90 else if ( !install_select_winner( s, &this ) ) continue;91 89 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 ); 90 wake_one( waiters, s ); 95 91 } 96 92 } 97 93 98 94 // Fulfil the future, returns whether or not someone was unblocked 99 bool fulfil( future(T) & this, T &val ) with(this) {95 bool fulfil( future(T) & this, T val ) with(this) { 100 96 lock( lock ); 101 97 if( state != FUTURE_EMPTY ) … … 153 149 } 154 150 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 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 159 163 if( state == FUTURE_EMPTY ) { 160 164 insert_last( waiters, s ); 161 165 unlock( lock ); 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) { 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; 177 176 lock( lock ); 178 177 if ( s`isListed ) remove( s ); 179 178 unlock( lock ); 179 return false; 180 180 } 181 181 182 bool on_selected( future(T) & this, select_node & node ) { return true; } 182 183 } 183 184 } … … 186 187 // These futures below do not support select statements so they may not be as useful as 'future' 187 188 // however the 'single_future' is cheap and cheerful and is most likely more performant than 'future' 188 // since it uses raw atomics and no locks afaik189 // since it uses raw atomics and no locks 189 190 // 190 191 // 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
r6e4c44d r3982384 217 217 struct __thread_user_link cltr_link; 218 218 219 // used to point to this thd's current clh node220 volatile bool * clh_node;221 222 219 struct processor * last_proc; 220 221 // ptr used during handover between blocking lists to allow for stack allocation of intrusive nodes 222 // main use case is wait-morphing to allow a different node to be used to block on condvar vs lock 223 void * link_node; 223 224 224 225 PRNG_STATE_T random_state; // fast random numbers -
libcfa/src/concurrency/locks.cfa
r6e4c44d r3982384 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // locks. hfa -- LIBCFATHREAD7 // locks.cfa -- 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 insert_last( blocked_threads, *thrd ); 81 select_node node; 82 insert_last( blocked_threads, node ); 82 83 wait_count++; 83 84 unlock( lock ); 84 85 park( ); 85 } 86 // multi acquisition lock is held by current thread 87 else if ( owner == thrd && multi_acquisition ) { 86 return; 87 } else if ( owner == thrd && multi_acquisition ) { // multi acquisition lock is held by current thread 88 88 recursion_count++; 89 unlock( lock ); 90 } 91 // lock isn't held 92 else { 89 } else { // lock isn't held 93 90 owner = thrd; 94 91 recursion_count = 1; 95 unlock( lock );96 } 92 } 93 unlock( lock ); 97 94 } 98 95 … … 117 114 } 118 115 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 ); 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 } 125 129 } 126 130 … … 134 138 recursion_count--; 135 139 if ( recursion_count == 0 ) { 136 pop_ and_set_new_owner( this );140 pop_node( this ); 137 141 } 138 142 unlock( lock ); … … 147 151 // lock held 148 152 if ( owner != 0p ) { 149 insert_last( blocked_threads, * t);153 insert_last( blocked_threads, *(select_node *)t->link_node ); 150 154 wait_count++; 151 unlock( lock );152 155 } 153 156 // lock not held … … 156 159 recursion_count = 1; 157 160 unpark( t ); 158 unlock( lock );159 } 160 } 161 162 size_t on_wait( blocking_lock & this ) with( this ) {161 } 162 unlock( lock ); 163 } 164 165 size_t on_wait( blocking_lock & this, __cfa_pre_park pp_fn, void * pp_datum ) with( this ) { 163 166 lock( lock __cfaabi_dbg_ctx2 ); 164 167 /* paranoid */ verifyf( owner != 0p, "Attempt to release lock %p that isn't held", &this ); … … 167 170 size_t ret = recursion_count; 168 171 169 pop_and_set_new_owner( this ); 172 pop_node( this ); 173 174 select_node node; 175 active_thread()->link_node = (void *)&node; 170 176 unlock( lock ); 177 178 pre_park_then_park( pp_fn, pp_datum ); 179 171 180 return ret; 172 181 } … … 175 184 recursion_count = recursion; 176 185 } 186 187 // waituntil() support 188 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 thread 193 /* 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 case 196 if ( !__make_select_node_available( node ) ) { // we didn't win the race so give up on registering 197 unlock( lock ); 198 return false; 199 } 200 } 201 202 // lock is held by some other thread 203 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 thread 209 recursion_count++; 210 } else { // lock isn't held 211 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 waiting 232 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; } 177 242 178 243 //----------------------------------------------------------------------------- … … 311 376 int counter( condition_variable(L) & this ) with(this) { return count; } 312 377 313 static size_t queue_and_get_recursion( condition_variable(L) & this, info_thread(L) * i ) with(this) {378 static void enqueue_thread( condition_variable(L) & this, info_thread(L) * i ) with(this) { 314 379 // add info_thread to waiting queue 315 380 insert_last( blocked_threads, *i ); 316 381 count++; 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 } 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 ); } 324 393 325 394 // helper for wait()'s' with no timeout 326 395 static void queue_info_thread( condition_variable(L) & this, info_thread(L) & i ) with(this) { 327 396 lock( lock __cfaabi_dbg_ctx2 ); 328 size_t recursion_count = queue_and_get_recursion(this, &i);397 enqueue_thread( this, &i ); 329 398 unlock( lock ); 330 399 331 400 // blocks here 332 park();401 size_t recursion_count = block_and_get_recursion( i ); 333 402 334 403 // resets recursion count here after waking 335 if ( i.lock) on_wakeup(*i.lock, recursion_count);404 if ( i.lock ) on_wakeup( *i.lock, recursion_count ); 336 405 } 337 406 … … 340 409 queue_info_thread( this, i ); 341 410 411 static void cond_alarm_register( void * node_ptr ) { register_self( (alarm_node_t *)node_ptr ); } 412 342 413 // helper for wait()'s' with a timeout 343 414 static void queue_info_thread_timeout( condition_variable(L) & this, info_thread(L) & info, Duration t, Alarm_Callback callback ) with(this) { 344 415 lock( lock __cfaabi_dbg_ctx2 ); 345 size_t recursion_count = queue_and_get_recursion(this, &info);416 enqueue_thread( this, &info ); 346 417 alarm_node_wrap(L) node_wrap = { t, 0`s, callback, &this, &info }; 347 418 unlock( lock ); 348 419 349 // registers alarm outside cond lock to avoid deadlock 350 register_self( &node_wrap.alarm_node ); 351 352 // blocks here 353 park(); 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(); 354 423 355 424 // unregisters alarm so it doesn't go off if this happens first … … 357 426 358 427 // resets recursion count here after waking 359 if ( info.lock) on_wakeup(*info.lock, recursion_count);428 if ( info.lock ) on_wakeup( *info.lock, recursion_count ); 360 429 } 361 430 … … 417 486 info_thread( L ) i = { active_thread(), info, &l }; 418 487 insert_last( blocked_threads, i ); 419 size_t recursion_count = on_wait( *i.lock );420 park( );488 size_t recursion_count = on_wait( *i.lock, pre_park_noop, 0p ); // blocks here 489 // park( ); 421 490 on_wakeup(*i.lock, recursion_count); 422 491 } … … 459 528 bool empty ( pthread_cond_var(L) & this ) with(this) { return blocked_threads`isEmpty; } 460 529 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 queue463 insert_last( blocked_threads, *i );464 size_t recursion_count = 0;465 recursion_count = on_wait( *i->lock );466 return recursion_count;467 }468 469 530 static void queue_info_thread_timeout( pthread_cond_var(L) & this, info_thread(L) & info, Duration t, Alarm_Callback callback ) with(this) { 470 531 lock( lock __cfaabi_dbg_ctx2 ); 471 size_t recursion_count = queue_and_get_recursion(this, &info);532 insert_last( blocked_threads, info ); 472 533 pthread_alarm_node_wrap(L) node_wrap = { t, 0`s, callback, &this, &info }; 473 534 unlock( lock ); 474 535 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 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 482 540 unregister_self( &node_wrap.alarm_node ); 483 541 484 542 // resets recursion count here after waking 485 if ( info.lock) on_wakeup(*info.lock, recursion_count);543 if ( info.lock ) on_wakeup( *info.lock, recursion_count ); 486 544 } 487 545 … … 493 551 lock( lock __cfaabi_dbg_ctx2 ); 494 552 info_thread( L ) i = { active_thread(), info, &l }; 495 size_t recursion_count = queue_and_get_recursion(this, &i); 496 unlock( lock ); 497 park( ); 498 on_wakeup(*i.lock, recursion_count); 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 ); 499 560 } 500 561 … … 584 645 return thrd != 0p; 585 646 } 647 -
libcfa/src/concurrency/locks.hfa
r6e4c44d r3982384 30 30 #include "time.hfa" 31 31 32 #include "select.hfa" 33 32 34 #include <fstream.hfa> 33 35 … … 37 39 #include <unistd.h> 38 40 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 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 43 85 44 86 //----------------------------------------------------------------------------- … … 67 109 static inline bool try_lock ( single_acquisition_lock & this ) { return try_lock( (blocking_lock &)this ); } 68 110 static inline void unlock ( single_acquisition_lock & this ) { unlock ( (blocking_lock &)this ); } 69 static inline size_t on_wait ( single_acquisition_lock & this ) { return on_wait ( (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 ); } 70 112 static inline void on_wakeup( single_acquisition_lock & this, size_t v ) { on_wakeup ( (blocking_lock &)this, v ); } 71 113 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 ); } 72 117 73 118 //---------- … … 81 126 static inline bool try_lock ( owner_lock & this ) { return try_lock( (blocking_lock &)this ); } 82 127 static inline void unlock ( owner_lock & this ) { unlock ( (blocking_lock &)this ); } 83 static inline size_t on_wait ( owner_lock & this ) { return on_wait ( (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 ); } 84 129 static inline void on_wakeup( owner_lock & this, size_t v ) { on_wakeup ( (blocking_lock &)this, v ); } 85 130 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 ); } 86 134 87 135 //----------------------------------------------------------------------------- … … 156 204 // - Kernel thd blocking alternative to the spinlock 157 205 // - No ownership (will deadlock on reacq) 206 // - no reacq on wakeup 158 207 struct futex_mutex { 159 208 // lock state any state other than UNLOCKED is locked … … 169 218 } 170 219 171 static inline void 172 173 static inline bool internal_try_lock( futex_mutex & this, int & compare_val) with(this) {220 static inline void ?{}( futex_mutex & this ) with(this) { val = 0; } 221 222 static inline bool internal_try_lock( futex_mutex & this, int & compare_val) with(this) { 174 223 return __atomic_compare_exchange_n((int*)&val, (int*)&compare_val, 1, false, __ATOMIC_ACQUIRE, __ATOMIC_ACQUIRE); 175 224 } 176 225 177 static inline int internal_exchange( futex_mutex & this) with(this) {226 static inline int internal_exchange( futex_mutex & this ) with(this) { 178 227 return __atomic_exchange_n((int*)&val, 2, __ATOMIC_ACQUIRE); 179 228 } 180 229 181 230 // if this is called recursively IT WILL DEADLOCK!!!!! 182 static inline void lock( futex_mutex & this) with(this) {231 static inline void lock( futex_mutex & this ) with(this) { 183 232 int state; 184 233 … … 190 239 for (int i = 0; i < spin; i++) Pause(); 191 240 } 192 193 // // no contention try to acquire194 // if (internal_try_lock(this, state)) return;195 241 196 242 // if not in contended state, set to be in contended state … … 212 258 } 213 259 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 ) {} 260 DEFAULT_ON_NOTIFY( futex_mutex ) 261 DEFAULT_ON_WAIT( futex_mutex ) 262 DEFAULT_ON_WAKEUP_NO_REACQ( futex_mutex ) 219 263 220 264 //----------------------------------------------------------------------------- … … 232 276 int val; 233 277 }; 234 235 278 static inline void ?{}( go_mutex & this ) with(this) { val = 0; } 279 // static inline void ?{}( go_mutex & this, go_mutex this2 ) = void; // these don't compile correctly at the moment so they should be omitted 280 // static inline void ?=?( go_mutex & this, go_mutex this2 ) = void; 236 281 237 282 static inline bool internal_try_lock(go_mutex & this, int & compare_val, int new_val ) with(this) { … … 244 289 245 290 // if this is called recursively IT WILL DEADLOCK!!!!! 246 static inline void lock( go_mutex & this) with(this) {291 static inline void lock( go_mutex & this ) with( this ) { 247 292 int state, init_state; 248 293 … … 255 300 while( !val ) { // lock unlocked 256 301 state = 0; 257 if ( internal_try_lock(this, state, init_state)) return;302 if ( internal_try_lock( this, state, init_state ) ) return; 258 303 } 259 304 for (int i = 0; i < 30; i++) Pause(); … … 262 307 while( !val ) { // lock unlocked 263 308 state = 0; 264 if ( internal_try_lock(this, state, init_state)) return;309 if ( internal_try_lock( this, state, init_state ) ) return; 265 310 } 266 311 sched_yield(); 267 312 268 313 // if not in contended state, set to be in contended state 269 state = internal_exchange( this, 2);314 state = internal_exchange( this, 2 ); 270 315 if ( !state ) return; // state == 0 271 316 init_state = 2; 272 futex( (int*)&val, FUTEX_WAIT, 2); // if val is not 2 this returns with EWOULDBLOCK317 futex( (int*)&val, FUTEX_WAIT, 2 ); // if val is not 2 this returns with EWOULDBLOCK 273 318 } 274 319 } … … 276 321 static inline void unlock( go_mutex & this ) with(this) { 277 322 // if uncontended do atomic unlock and then return 278 if ( __atomic_exchange_n(&val, 0, __ATOMIC_RELEASE) == 1) return;323 if ( __atomic_exchange_n(&val, 0, __ATOMIC_RELEASE) == 1 ) return; 279 324 280 325 // otherwise threads are blocked so we must wake one 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); } 326 futex( (int *)&val, FUTEX_WAKE, 1 ); 327 } 328 329 DEFAULT_ON_NOTIFY( go_mutex ) 330 DEFAULT_ON_WAIT( go_mutex ) 331 DEFAULT_ON_WAKEUP_NO_REACQ( go_mutex ) 317 332 318 333 //----------------------------------------------------------------------------- … … 334 349 this.lock_value = 0; 335 350 } 351 static inline void ?{}( exp_backoff_then_block_lock & this, exp_backoff_then_block_lock this2 ) = void; 352 static inline void ?=?( exp_backoff_then_block_lock & this, exp_backoff_then_block_lock this2 ) = void; 336 353 337 354 static inline void ^?{}( exp_backoff_then_block_lock & this ){} 338 355 339 static inline bool internal_try_lock( exp_backoff_then_block_lock & this, size_t & compare_val) with(this) {356 static inline bool internal_try_lock( exp_backoff_then_block_lock & this, size_t & compare_val ) with(this) { 340 357 return __atomic_compare_exchange_n(&lock_value, &compare_val, 1, false, __ATOMIC_ACQUIRE, __ATOMIC_RELAXED); 341 358 } 342 359 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) {360 static inline bool try_lock( exp_backoff_then_block_lock & this ) { size_t compare_val = 0; return internal_try_lock( this, compare_val ); } 361 362 static inline bool try_lock_contention( exp_backoff_then_block_lock & this ) with(this) { 363 return !__atomic_exchange_n( &lock_value, 2, __ATOMIC_ACQUIRE ); 364 } 365 366 static inline bool block( exp_backoff_then_block_lock & this ) with(this) { 350 367 lock( spinlock __cfaabi_dbg_ctx2 ); 351 368 if (__atomic_load_n( &lock_value, __ATOMIC_SEQ_CST) != 2) { … … 359 376 } 360 377 361 static inline void lock( exp_backoff_then_block_lock & this) with(this) {378 static inline void lock( exp_backoff_then_block_lock & this ) with(this) { 362 379 size_t compare_val = 0; 363 380 int spin = 4; … … 378 395 } 379 396 380 static inline void unlock( exp_backoff_then_block_lock & this) with(this) {397 static inline void unlock( exp_backoff_then_block_lock & this ) with(this) { 381 398 if (__atomic_exchange_n(&lock_value, 0, __ATOMIC_RELEASE) == 1) return; 382 399 lock( spinlock __cfaabi_dbg_ctx2 ); … … 386 403 } 387 404 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); } 405 DEFAULT_ON_NOTIFY( exp_backoff_then_block_lock ) 406 DEFAULT_ON_WAIT( exp_backoff_then_block_lock ) 407 DEFAULT_ON_WAKEUP_REACQ( exp_backoff_then_block_lock ) 391 408 392 409 //----------------------------------------------------------------------------- … … 418 435 419 436 // if this is called recursively IT WILL DEADLOCK!!!!! 420 static inline void lock( fast_block_lock & this) with(this) {437 static inline void lock( fast_block_lock & this ) with(this) { 421 438 lock( lock __cfaabi_dbg_ctx2 ); 422 439 if ( held ) { … … 430 447 } 431 448 432 static inline void unlock( fast_block_lock & this) with(this) {449 static inline void unlock( fast_block_lock & this ) with(this) { 433 450 lock( lock __cfaabi_dbg_ctx2 ); 434 451 /* paranoid */ verifyf( held != false, "Attempt to release lock %p that isn't held", &this ); … … 439 456 } 440 457 441 static inline void on_notify( fast_block_lock & this, struct thread$ * t ) with(this) {458 static inline void on_notify( fast_block_lock & this, struct thread$ * t ) with(this) { 442 459 lock( lock __cfaabi_dbg_ctx2 ); 443 460 insert_last( blocked_threads, *t ); 444 461 unlock( lock ); 445 462 } 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 ) { } 463 DEFAULT_ON_WAIT( fast_block_lock ) 464 DEFAULT_ON_WAKEUP_NO_REACQ( fast_block_lock ) 448 465 449 466 //----------------------------------------------------------------------------- … … 456 473 struct simple_owner_lock { 457 474 // List of blocked threads 458 dlist( thread$) blocked_threads;475 dlist( select_node ) blocked_threads; 459 476 460 477 // Spin lock used for mutual exclusion … … 477 494 static inline void ?=?( simple_owner_lock & this, simple_owner_lock this2 ) = void; 478 495 479 static inline void lock( simple_owner_lock & this) with(this) {480 if ( owner == active_thread()) {496 static inline void lock( simple_owner_lock & this ) with(this) { 497 if ( owner == active_thread() ) { 481 498 recursion_count++; 482 499 return; … … 484 501 lock( lock __cfaabi_dbg_ctx2 ); 485 502 486 if (owner != 0p) { 487 insert_last( blocked_threads, *active_thread() ); 503 if ( owner != 0p ) { 504 select_node node; 505 insert_last( blocked_threads, node ); 488 506 unlock( lock ); 489 507 park( ); … … 495 513 } 496 514 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) { 515 static inline void pop_node( simple_owner_lock & this ) with(this) { 516 __handle_waituntil_OR( blocked_threads ); 517 select_node * node = &try_pop_front( blocked_threads ); 518 if ( node ) { 519 owner = node->blocked_thread; 520 recursion_count = 1; 521 // if ( !node->clause_status || __make_select_node_available( *node ) ) unpark( node->blocked_thread ); 522 wake_one( blocked_threads, *node ); 523 } else { 524 owner = 0p; 525 recursion_count = 0; 526 } 527 } 528 529 static inline void unlock( simple_owner_lock & this ) with(this) { 506 530 lock( lock __cfaabi_dbg_ctx2 ); 507 531 /* paranoid */ verifyf( owner != 0p, "Attempt to release lock %p that isn't held", &this ); … … 510 534 recursion_count--; 511 535 if ( recursion_count == 0 ) { 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 ); 536 pop_node( this ); 517 537 } 518 538 unlock( lock ); 519 539 } 520 540 521 static inline void on_notify( simple_owner_lock & this, structthread$ * t ) with(this) {541 static inline void on_notify( simple_owner_lock & this, thread$ * t ) with(this) { 522 542 lock( lock __cfaabi_dbg_ctx2 ); 523 543 // lock held 524 544 if ( owner != 0p ) { 525 insert_last( blocked_threads, * t);545 insert_last( blocked_threads, *(select_node *)t->link_node ); 526 546 } 527 547 // lock not held … … 534 554 } 535 555 536 static inline size_t on_wait( simple_owner_lock & this) with(this) {556 static inline size_t on_wait( simple_owner_lock & this, __cfa_pre_park pp_fn, void * pp_datum ) with(this) { 537 557 lock( lock __cfaabi_dbg_ctx2 ); 538 558 /* paranoid */ verifyf( owner != 0p, "Attempt to release lock %p that isn't held", &this ); … … 541 561 size_t ret = recursion_count; 542 562 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 pop_node( this ); 564 565 select_node node; 566 active_thread()->link_node = (void *)&node; 550 567 unlock( lock ); 568 569 pre_park_then_park( pp_fn, pp_datum ); 570 551 571 return ret; 552 572 } 553 573 554 static inline void on_wakeup(simple_owner_lock & this, size_t recursion ) with(this) { recursion_count = recursion; } 574 static inline void on_wakeup( simple_owner_lock & this, size_t recursion ) with(this) { recursion_count = recursion; } 575 576 // waituntil() support 577 static inline bool register_select( simple_owner_lock & this, select_node & node ) with(this) { 578 lock( lock __cfaabi_dbg_ctx2 ); 579 580 // check if we can complete operation. If so race to establish winner in special OR case 581 if ( !node.park_counter && ( owner == active_thread() || owner == 0p ) ) { 582 if ( !__make_select_node_available( node ) ) { // we didn't win the race so give up on registering 583 unlock( lock ); 584 return false; 585 } 586 } 587 588 if ( owner == active_thread() ) { 589 recursion_count++; 590 if ( node.park_counter ) __make_select_node_available( node ); 591 unlock( lock ); 592 return true; 593 } 594 595 if ( owner != 0p ) { 596 insert_last( blocked_threads, node ); 597 unlock( lock ); 598 return false; 599 } 600 601 owner = active_thread(); 602 recursion_count = 1; 603 604 if ( node.park_counter ) __make_select_node_available( node ); 605 unlock( lock ); 606 return true; 607 } 608 609 static inline bool unregister_select( simple_owner_lock & this, select_node & node ) with(this) { 610 lock( lock __cfaabi_dbg_ctx2 ); 611 if ( node`isListed ) { 612 remove( node ); 613 unlock( lock ); 614 return false; 615 } 616 617 if ( owner == active_thread() ) { 618 recursion_count--; 619 if ( recursion_count == 0 ) { 620 pop_node( this ); 621 } 622 } 623 unlock( lock ); 624 return false; 625 } 626 627 static inline bool on_selected( simple_owner_lock & this, select_node & node ) { return true; } 628 555 629 556 630 //----------------------------------------------------------------------------- … … 578 652 579 653 // if this is called recursively IT WILL DEADLOCK! 580 static inline void lock( spin_queue_lock & this) with(this) {654 static inline void lock( spin_queue_lock & this ) with(this) { 581 655 mcs_spin_node node; 582 656 lock( lock, node ); … … 586 660 } 587 661 588 static inline void unlock( spin_queue_lock & this) with(this) {662 static inline void unlock( spin_queue_lock & this ) with(this) { 589 663 __atomic_store_n(&held, false, __ATOMIC_RELEASE); 590 664 } 591 665 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 666 DEFAULT_ON_NOTIFY( spin_queue_lock ) 667 DEFAULT_ON_WAIT( spin_queue_lock ) 668 DEFAULT_ON_WAKEUP_REACQ( spin_queue_lock ) 598 669 599 670 //----------------------------------------------------------------------------- … … 621 692 622 693 // if this is called recursively IT WILL DEADLOCK!!!!! 623 static inline void lock( mcs_block_spin_lock & this) with(this) {694 static inline void lock( mcs_block_spin_lock & this ) with(this) { 624 695 mcs_node node; 625 696 lock( lock, node ); … … 633 704 } 634 705 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); } 706 DEFAULT_ON_NOTIFY( mcs_block_spin_lock ) 707 DEFAULT_ON_WAIT( mcs_block_spin_lock ) 708 DEFAULT_ON_WAKEUP_REACQ( mcs_block_spin_lock ) 638 709 639 710 //----------------------------------------------------------------------------- … … 661 732 662 733 // if this is called recursively IT WILL DEADLOCK!!!!! 663 static inline void lock( block_spin_lock & this) with(this) {734 static inline void lock( block_spin_lock & this ) with(this) { 664 735 lock( lock ); 665 736 while(__atomic_load_n(&held, __ATOMIC_SEQ_CST)) Pause(); … … 668 739 } 669 740 670 static inline void unlock( block_spin_lock & this) with(this) {741 static inline void unlock( block_spin_lock & this ) with(this) { 671 742 __atomic_store_n(&held, false, __ATOMIC_RELEASE); 672 743 } 673 744 674 static inline void on_notify( block_spin_lock & this, struct thread$ * t ) with(this.lock) {745 static inline void on_notify( block_spin_lock & this, struct thread$ * t ) with(this.lock) { 675 746 // first we acquire internal fast_block_lock 676 747 lock( lock __cfaabi_dbg_ctx2 ); … … 686 757 unpark(t); 687 758 } 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) {759 DEFAULT_ON_WAIT( block_spin_lock ) 760 static inline void on_wakeup( block_spin_lock & this, size_t recursion ) with(this) { 690 761 // now we acquire the entire block_spin_lock upon waking up 691 762 while(__atomic_load_n(&held, __ATOMIC_SEQ_CST)) Pause(); … … 693 764 unlock( lock ); // Now we release the internal fast_spin_lock 694 765 } 695 696 //-----------------------------------------------------------------------------697 // is_blocking_lock698 forall( L & | sized(L) )699 trait is_blocking_lock {700 // For synchronization locks to use when acquiring701 void on_notify( L &, struct thread$ * );702 703 // For synchronization locks to use when releasing704 size_t on_wait( L & );705 706 // to set recursion count after getting signalled;707 void on_wakeup( L &, size_t recursion );708 };709 766 710 767 //----------------------------------------------------------------------------- … … 714 771 forall(L & | is_blocking_lock(L)) { 715 772 struct info_thread; 716 717 // // for use by sequence718 // info_thread(L) *& Back( info_thread(L) * this );719 // info_thread(L) *& Next( info_thread(L) * this );720 773 } 721 774 -
libcfa/src/concurrency/mutex_stmt.hfa
r6e4c44d r3982384 15 15 }; 16 16 17 18 17 struct __mutex_stmt_lock_guard { 19 18 void ** lockarr; … … 30 29 31 30 forall(L & | is_lock(L)) { 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 ); 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 ) {} 53 34 } -
libcfa/src/concurrency/preemption.cfa
r6e4c44d r3982384 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
r6e4c44d r3982384 1 // 2 // Cforall Version 1.0.0 Copyright (C) 2021 University of Waterloo 3 // 4 // The contents of this file are covered under the licence agreement in the 5 // file "LICENCE" distributed with Cforall. 6 // 7 // channel.hfa -- LIBCFATHREAD 8 // Runtime locks that used with the runtime thread system. 9 // 10 // Author : Colby Alexander Parsons 11 // Created On : Thu Jan 21 19:46:50 2023 12 // Last Modified By : 13 // Last Modified On : 14 // Update Count : 15 // 16 1 17 #pragma once 2 18 3 19 #include "containers/list.hfa" 4 #include <stdint.h>5 #include <kernel.hfa>6 #include <locks.hfa>20 #include "alarm.hfa" 21 #include "kernel.hfa" 22 #include "time.hfa" 7 23 24 struct select_node; 25 26 // node status 27 static const unsigned long int __SELECT_UNSAT = 0; 28 static const unsigned long int __SELECT_PENDING = 1; // used only by special OR case 29 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 generation 33 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 synchronization 8 40 struct select_node { 41 int * park_counter; // If this is 0p then the node is in a special OR case waituntil 42 unsigned long int * clause_status; // needs to point at ptr sized location, if this is 0p then node is not part of a waituntil 43 44 void * extra; // used to store arbitrary data needed by some primitives 45 9 46 thread$ * blocked_thread; 10 void ** race_flag;11 47 inline dlink(select_node); 12 48 }; 13 49 P9_EMBEDDED( select_node, dlink(select_node) ) 14 50 15 void ?{}( select_node & this ) { 16 this.blocked_thread = 0p; 17 this.race_flag = 0p; 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; 18 56 } 19 57 20 void ?{}( select_node & this, thread$ * blocked_thread ) {58 static inline void ?{}( select_node & this, thread$ * blocked_thread ) { 21 59 this.blocked_thread = blocked_thread; 22 this.race_flag = 0p; 60 this.clause_status = 0p; 61 this.park_counter = 0p; 62 this.extra = 0p; 23 63 } 24 64 25 void ?{}( select_node & this, thread$ * blocked_thread, void ** race_flag) {65 static inline void ?{}( select_node & this, thread$ * blocked_thread, void * extra ) { 26 66 this.blocked_thread = blocked_thread; 27 this.race_flag = race_flag; 67 this.clause_status = 0p; 68 this.park_counter = 0p; 69 this.extra = extra; 28 70 } 71 static inline void ^?{}( select_node & this ) {} 29 72 30 void ^?{}( select_node & this ) {} 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; } 31 75 76 // this is used inside the compiler to attempt to establish an else clause as a winner in the OR special case race 77 static inline bool __select_node_else_race( select_node & this ) with( this ) { 78 unsigned long int cmp_status = __SELECT_UNSAT; 79 return *clause_status == 0 80 && __atomic_compare_exchange_n( clause_status, &cmp_status, __SELECT_SAT, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST ); 81 } 32 82 33 83 //----------------------------------------------------------------------------- 34 84 // is_selectable 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 & ); 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 & ); 42 90 43 void unregister_select( T &, select_node & ); 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 & ); 44 99 }; 45 100 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 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; 63 116 } 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 thd 131 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 case 139 && __atomic_compare_exchange_n( clause_status, &cmp_status, __SELECT_SAT, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST ) // can maybe just use atomic write 140 && !__atomic_add_fetch( park_counter, 1, __ATOMIC_SEQ_CST); 141 } 142 143 // Handles the special OR case of the waituntil statement 144 // Since only one select node can win in the OR case, we need to race to set the node available BEFORE 145 // performing the operation since if we lose the race the operation should not be performed as it will be lost 146 // Returns true if execution can continue normally and false if the queue has now been drained 147 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 break 152 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 node 155 try_pop_front( queue ); 156 } 157 return false; 158 } 159 return true; 160 } 161 162 // wake one thread from the list 163 static inline void wake_one( dlist( select_node ) & queue, select_node & popped ) { 164 if ( !popped.clause_status // normal case, node is not a select node 165 || ( popped.clause_status && !popped.park_counter ) // If popped link is special case OR selecting unpark but don't call __make_select_node_available 166 || __make_select_node_available( popped ) ) // check if popped link belongs to a selecting thread 167 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( ... ) ) support 179 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 routines 188 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 duration 193 select_timeout_node timeout( Duration duration ); 194 select_timeout_node sleep( Duration duration ); -
libcfa/src/concurrency/thread.cfa
r6e4c44d r3982384 53 53 preferred = ready_queue_new_preferred(); 54 54 last_proc = 0p; 55 link_node = 0p; 55 56 PRNG_SET_SEED( random_state, __global_random_mask ? __global_random_prime : __global_random_prime ^ rdtscl() ); 56 57 #if defined( __CFA_WITH_VERIFY__ ) … … 59 60 #endif 60 61 61 clh_node = malloc( );62 *clh_node = false;63 64 62 doregister(curr_cluster, this); 65 63 monitors{ &self_mon_p, 1, (fptr_t)0 }; … … 70 68 canary = 0xDEADDEADDEADDEADp; 71 69 #endif 72 free(clh_node);73 70 unregister(curr_cluster, this); 74 71 ^self_cor{}; -
src/AST/Convert.cpp
r6e4c44d r3982384 567 567 } 568 568 569 const ast::WhenClause * visit( const ast::WhenClause * node ) override final { 570 // There is no old-AST WhenClause, so this should never be called. 571 assert( !node ); 572 return nullptr; 573 } 574 569 575 const ast::Stmt * visit( const ast::WaitForStmt * node ) override final { 570 576 if ( inCache( node ) ) return nullptr; … … 573 579 for ( auto clause : node->clauses ) { 574 580 stmt->clauses.push_back({{ 575 get<Expression>().accept1( clause->target _func),581 get<Expression>().accept1( clause->target ), 576 582 get<Expression>().acceptL( clause->target_args ), 577 583 }, 578 584 get<Statement>().accept1( clause->stmt ), 579 get<Expression>().accept1( clause-> cond ),585 get<Expression>().accept1( clause->when_cond ), 580 586 }); 581 587 } … … 594 600 const ast::WaitForClause * visit( const ast::WaitForClause * node ) override final { 595 601 // There is no old-AST WaitForClause, so this should never be called. 602 assert( !node ); 603 return nullptr; 604 } 605 606 const ast::Stmt * visit( const ast::WaitUntilStmt * node ) override final { 607 // There is no old-AST WaitUntilStmt, so this should never be called. 596 608 assert( !node ); 597 609 return nullptr; … … 2158 2170 auto clause = new ast::WaitForClause( old->location ); 2159 2171 2160 clause->target _func= GET_ACCEPT_1(clauses[i].target.function, Expr);2172 clause->target = GET_ACCEPT_1(clauses[i].target.function, Expr); 2161 2173 clause->target_args = GET_ACCEPT_V(clauses[i].target.arguments, Expr); 2162 2174 clause->stmt = GET_ACCEPT_1(clauses[i].statement, Stmt); 2163 clause-> cond = GET_ACCEPT_1(clauses[i].condition, Expr);2175 clause->when_cond = GET_ACCEPT_1(clauses[i].condition, Expr); 2164 2176 2165 2177 stmt->clauses.push_back( clause ); -
src/AST/Fwd.hpp
r6e4c44d r3982384 58 58 class FinallyClause; 59 59 class SuspendStmt; 60 class WhenClause; 60 61 class WaitForStmt; 61 62 class WaitForClause; 63 class WaitUntilStmt; 62 64 class WithStmt; 63 65 class DeclStmt; -
src/AST/Node.cpp
r6e4c44d r3982384 174 174 template class ast::ptr_base< ast::FinallyClause, ast::Node::ref_type::weak >; 175 175 template class ast::ptr_base< ast::FinallyClause, ast::Node::ref_type::strong >; 176 template class ast::ptr_base< ast::WhenClause, ast::Node::ref_type::weak >; 177 template class ast::ptr_base< ast::WhenClause, ast::Node::ref_type::strong >; 176 178 template class ast::ptr_base< ast::WaitForStmt, ast::Node::ref_type::weak >; 177 179 template class ast::ptr_base< ast::WaitForStmt, ast::Node::ref_type::strong >; 178 180 template class ast::ptr_base< ast::WaitForClause, ast::Node::ref_type::weak >; 179 181 template class ast::ptr_base< ast::WaitForClause, ast::Node::ref_type::strong >; 182 template class ast::ptr_base< ast::WaitUntilStmt, ast::Node::ref_type::weak >; 183 template class ast::ptr_base< ast::WaitUntilStmt, ast::Node::ref_type::strong >; 180 184 template class ast::ptr_base< ast::WithStmt, ast::Node::ref_type::weak >; 181 185 template class ast::ptr_base< ast::WithStmt, ast::Node::ref_type::strong >; -
src/AST/Pass.hpp
r6e4c44d r3982384 162 162 const ast::FinallyClause * visit( const ast::FinallyClause * ) override final; 163 163 const ast::Stmt * visit( const ast::SuspendStmt * ) override final; 164 const ast::WhenClause * visit( const ast::WhenClause * ) override final; 164 165 const ast::Stmt * visit( const ast::WaitForStmt * ) override final; 165 166 const ast::WaitForClause * visit( const ast::WaitForClause * ) override final; 167 const ast::Stmt * visit( const ast::WaitUntilStmt * ) override final; 166 168 const ast::Decl * visit( const ast::WithStmt * ) override final; 167 169 const ast::NullStmt * visit( const ast::NullStmt * ) override final; -
src/AST/Pass.impl.hpp
r6e4c44d r3982384 22 22 #include "AST/TranslationUnit.hpp" 23 23 #include "AST/TypeSubstitution.hpp" 24 #include "Common/Iterate.hpp"25 24 26 25 #define VISIT_START( node ) \ … … 127 126 } 128 127 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 135 128 template< typename core_t > 136 129 template< typename node_t > … … 234 227 235 228 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;286 229 } 287 230 … … 353 296 354 297 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 values370 // but also contain the new values371 298 } 372 299 … … 1066 993 1067 994 //-------------------------------------------------------------------------- 995 // WhenClause 996 template< typename core_t > 997 const ast::WhenClause * ast::Pass< core_t >::visit( const ast::WhenClause * node ) { 998 VISIT_START( node ); 999 1000 if ( __visit_children() ) { 1001 maybe_accept( node, &WhenClause::target ); 1002 maybe_accept( node, &WhenClause::stmt ); 1003 maybe_accept( node, &WhenClause::when_cond ); 1004 } 1005 1006 VISIT_END( WhenClause, node ); 1007 } 1008 1009 //-------------------------------------------------------------------------- 1068 1010 // WaitForStmt 1069 1011 template< typename core_t > … … 1090 1032 1091 1033 if ( __visit_children() ) { 1092 maybe_accept( node, &WaitForClause::target _func);1034 maybe_accept( node, &WaitForClause::target ); 1093 1035 maybe_accept( node, &WaitForClause::target_args ); 1094 1036 maybe_accept( node, &WaitForClause::stmt ); 1095 maybe_accept( node, &WaitForClause:: cond );1037 maybe_accept( node, &WaitForClause::when_cond ); 1096 1038 } 1097 1039 1098 1040 VISIT_END( WaitForClause, node ); 1041 } 1042 1043 //-------------------------------------------------------------------------- 1044 // WaitUntilStmt 1045 template< typename core_t > 1046 const ast::Stmt * ast::Pass< core_t >::visit( const ast::WaitUntilStmt * node ) { 1047 VISIT_START( node ); 1048 1049 if ( __visit_children() ) { 1050 maybe_accept( node, &WaitUntilStmt::clauses ); 1051 maybe_accept( node, &WaitUntilStmt::timeout_time ); 1052 maybe_accept( node, &WaitUntilStmt::timeout_stmt ); 1053 maybe_accept( node, &WaitUntilStmt::timeout_cond ); 1054 maybe_accept( node, &WaitUntilStmt::else_stmt ); 1055 maybe_accept( node, &WaitUntilStmt::else_cond ); 1056 } 1057 1058 VISIT_END( Stmt, node ); 1099 1059 } 1100 1060 … … 2203 2163 } 2204 2164 2165 #undef __pedantic_pass_assertf 2166 #undef __pedantic_pass_assert 2205 2167 #undef VISIT_START 2206 2168 #undef VISIT_END -
src/AST/Pass.proto.hpp
r6e4c44d r3982384 17 17 // IWYU pragma: private, include "Pass.hpp" 18 18 19 #include "Common/Iterate.hpp" 19 20 #include "Common/Stats/Heap.h" 20 21 namespace ast { … … 24 25 template<typename node_t> node_t * deepCopy( const node_t * ); 25 26 } 27 28 #ifdef PEDANTIC_PASS_ASSERT 29 #define __pedantic_pass_assert(...) assert (__VA_ARGS__) 30 #define __pedantic_pass_assertf(...) assertf(__VA_ARGS__) 31 #else 32 #define __pedantic_pass_assert(...) 33 #define __pedantic_pass_assertf(...) 34 #endif 26 35 27 36 namespace ast::__pass { … … 130 139 131 140 template< typename object_t, typename super_t, typename field_t > 132 void apply( object_t *, field_t super_t::* field ); 141 void apply( object_t * object, field_t super_t::* field ) { 142 object->*field = value; 143 } 133 144 }; 134 145 … … 150 161 151 162 template< typename object_t, typename super_t, typename field_t > 152 void apply( object_t *, field_t super_t::* field ); 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 } 153 182 154 183 template< template<class...> class incontainer_t > 155 void take_all( incontainer_t<ptr<Stmt>> * stmts ); 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 } 156 194 157 195 template< template<class...> class incontainer_t > 158 void take_all( incontainer_t<ptr<Decl>> * decls ); 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 } 159 207 }; 160 208 … … 166 214 167 215 template< typename object_t, typename super_t, typename field_t > 168 void apply( object_t *, field_t super_t::* field ); 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 } 169 228 }; 170 229 … … 517 576 518 577 } // namespace ast::__pass 578 579 #undef __pedantic_pass_assertf 580 #undef __pedantic_pass_assert -
src/AST/Print.cpp
r6e4c44d r3982384 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 210 237 void preprint( const ast::NamedTypeDecl * node ) { 211 238 if ( ! node->name.empty() ) { … … 756 783 } 757 784 785 virtual const ast::WhenClause * visit( const ast::WhenClause * node ) override final { 786 os << indent-1 << "target: "; 787 safe_print( node->target ); 788 789 if ( node->stmt ) { 790 os << indent-1 << "... with statment:" << endl; 791 node->stmt->accept( *this ); 792 } 793 794 if ( node->when_cond ) { 795 os << indent-1 << "... with when condition:" << endl; 796 node->when_cond->accept( *this ); 797 } 798 799 return node; 800 } 801 758 802 virtual const ast::Stmt * visit( const ast::WaitForStmt * node ) override final { 759 803 os << "Waitfor Statement" << endl; … … 793 837 virtual const ast::WaitForClause * visit( const ast::WaitForClause * node ) override final { 794 838 os << indent-1 << "target function: "; 795 safe_print( node->target _func);839 safe_print( node->target ); 796 840 797 841 if ( !node->target_args.empty() ) { … … 807 851 } 808 852 809 if ( node-> cond ) {853 if ( node->when_cond ) { 810 854 os << indent-1 << "... with condition:" << endl; 811 node->cond->accept( *this ); 812 } 813 855 node->when_cond->accept( *this ); 856 } 857 858 return node; 859 } 860 861 virtual const ast::Stmt * visit( const ast::WaitUntilStmt * node ) override final { 862 os << "Waituntil Statement" << endl; 863 indent += 2; 864 for( const auto & clause : node->clauses ) { 865 clause->accept( *this ); 866 } 867 print(node); // calls print( const ast::WaitStmt * node ) 814 868 return node; 815 869 } -
src/AST/Stmt.hpp
r6e4c44d r3982384 378 378 }; 379 379 380 // Waitfor statement: when (...) waitfor (... , ...) ... timeout(...) ... else ...381 class WaitForStmt final : public Stmt { 382 public: 383 std::vector<ptr<WaitForClause>> clauses; 384 380 // Base class of WaitFor/WaitUntil statements 381 // form: KEYWORD(...) ... timeout(...) ... else ... 382 class WaitStmt : public Stmt { 383 public: 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 = {} ) 391 : Stmt(loc, std::move(labels)) {} 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; 403 ptr<Stmt> stmt; 404 ptr<Expr> when_cond; 405 406 WhenClause( const CodeLocation & loc ) 407 : StmtClause( loc ) {} 408 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_FRIEND 413 }; 414 415 // Waitfor statement: when (...) waitfor (... , ...) ... timeout(...) ... else ... 416 class WaitForStmt final : public WaitStmt { 417 public: 418 std::vector<ptr<WaitForClause>> clauses; 419 390 420 WaitForStmt( const CodeLocation & loc, const std::vector<Label> && labels = {} ) 391 : Stmt(loc, std::move(labels)) {}421 : WaitStmt(loc, std::move(labels)) {} 392 422 393 423 const Stmt * accept( Visitor & v ) const override { return v.visit( this ); } … … 398 428 399 429 // Clause in a waitfor statement: waitfor (..., ...) ... 400 class WaitForClause final : public StmtClause { 401 public: 402 ptr<Expr> target_func; 430 class WaitForClause final : public WhenClause { 431 public: 403 432 std::vector<ptr<Expr>> target_args; 404 ptr<Stmt> stmt;405 ptr<Expr> cond;406 433 407 434 WaitForClause( const CodeLocation & loc ) 408 : StmtClause( loc ) {}435 : WhenClause( loc ) {} 409 436 410 437 const WaitForClause * accept( Visitor & v ) const override { return v.visit( this ); } 411 438 private: 412 439 WaitForClause * clone() const override { return new WaitForClause{ *this }; } 440 MUTATE_FRIEND 441 }; 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 predicates 447 // and set initial status values for clauses 448 // Used to create a tree corresponding to the structure of the clauses in a WaitUntil 449 struct ClauseNode { 450 enum Op { AND, OR, LEFT_OR, LEAF, ELSE, TIMEOUT } op; // operation/type tag 451 // LEFT_OR used with TIMEOUT/ELSE to indicate that we ignore right hand side after parsing 452 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() clauses 458 bool whenState; // used to track if when_cond is toggled on or off for generating init values 459 bool childOfAnd; // true on leaf nodes that are children of AND, false otherwise 460 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 }; } 413 486 MUTATE_FRIEND 414 487 }; -
src/AST/Visitor.hpp
r6e4c44d r3982384 50 50 virtual const ast::FinallyClause * visit( const ast::FinallyClause * ) = 0; 51 51 virtual const ast::Stmt * visit( const ast::SuspendStmt * ) = 0; 52 virtual const ast::WhenClause * visit( const ast::WhenClause * ) = 0; 52 53 virtual const ast::Stmt * visit( const ast::WaitForStmt * ) = 0; 53 54 virtual const ast::WaitForClause * visit( const ast::WaitForClause * ) = 0; 55 virtual const ast::Stmt * visit( const ast::WaitUntilStmt * ) = 0; 54 56 virtual const ast::Decl * visit( const ast::WithStmt * ) = 0; 55 57 virtual const ast::NullStmt * visit( const ast::NullStmt * ) = 0; -
src/Common/CodeLocationTools.cpp
r6e4c44d r3982384 128 128 macro(FinallyClause, FinallyClause) \ 129 129 macro(SuspendStmt, Stmt) \ 130 macro(WhenClause, WhenClause) \ 130 131 macro(WaitForStmt, Stmt) \ 131 132 macro(WaitForClause, WaitForClause) \ 133 macro(WaitUntilStmt, Stmt) \ 132 134 macro(WithStmt, Decl) \ 133 135 macro(NullStmt, NullStmt) \ -
src/Concurrency/WaitforNew.cpp
r6e4c44d r3982384 305 305 306 306 const ast::VariableExpr * variableExpr = 307 clause->target _func.as<ast::VariableExpr>();307 clause->target.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 _func,312 clause->target, 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-> cond.get(), {327 out->push_back( maybeCond( location, clause->when_cond.get(), { 328 328 makeAccStmt( location, acceptables, index, "is_dtor", 329 detectIsDtor( location, clause->target _func), context ),329 detectIsDtor( location, clause->target ), context ), 330 330 makeAccStmt( location, acceptables, index, "func", 331 331 funcExpr, context ), -
src/Concurrency/module.mk
r6e4c44d r3982384 23 23 Concurrency/WaitforNew.cpp \ 24 24 Concurrency/Waitfor.cc \ 25 Concurrency/Waitfor.h 25 Concurrency/Waitfor.h \ 26 Concurrency/Waituntil.cpp \ 27 Concurrency/Waituntil.hpp -
src/Parser/StatementNode.cc
r6e4c44d r3982384 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 _func= maybeBuild( targetExpr );330 clause->target = maybeBuild( targetExpr ); 331 331 clause->stmt = maybeMoveBuild( stmt ); 332 clause-> cond = notZeroExpr( maybeMoveBuild( when ) );332 clause->when_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 traversal 388 std::vector<ast::WaitUntilStmt::ClauseNode *> nodeStack; // stack needed for iterative traversal 389 ast::WaitUntilStmt::ClauseNode * currNode = nullptr; 390 ast::WaitUntilStmt::ClauseNode * lastInternalNode = nullptr; 391 ast::WaitUntilStmt::ClauseNode * cleanup = nullptr; // used to cleanup removed else/timeout 392 nodeStack.push_back(root); 393 394 do { 395 currNode = nodeStack.back(); 396 nodeStack.pop_back(); // remove node since it will be processed 397 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->stmt 404 ? ast::deepCopy( currNode->leaf->stmt ) 405 : nullptr; 406 407 retStmt->else_cond = currNode->leaf->when_cond 408 ? 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->target 415 ? ast::deepCopy( currNode->leaf->target ) 416 : nullptr; 417 retStmt->timeout_stmt = currNode->leaf->stmt 418 ? ast::deepCopy( currNode->leaf->stmt ) 419 : nullptr; 420 retStmt->timeout_cond = currNode->leaf->when_cond 421 ? 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 left 428 nodeStack.push_back( currNode->left ); 429 430 // Cut else/timeout out of the tree 431 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_OR 435 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 } 361 450 362 451 ast::Stmt * build_with( const CodeLocation & location, ExpressionNode * exprs, StatementNode * stmt ) { -
src/Parser/StatementNode.h
r6e4c44d r3982384 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 ); 102 106 ast::Stmt * build_with( const CodeLocation &, ExpressionNode * exprs, StatementNode * stmt ); 103 107 ast::Stmt * build_mutex( const CodeLocation &, ExpressionNode * exprs, StatementNode * stmt ); -
src/Parser/lex.ll
r6e4c44d r3982384 10 10 * Created On : Sat Sep 22 08:58:10 2001 11 11 * Last Modified By : Peter A. Buhr 12 * Last Modified On : Sat Mar 25 08:09:03202313 * Update Count : 76 812 * Last Modified On : Tue May 2 08:45:21 2023 13 * Update Count : 769 14 14 */ 15 15 … … 258 258 enable { KEYWORD_RETURN(ENABLE); } // CFA 259 259 enum { KEYWORD_RETURN(ENUM); } 260 exception { KEYWORD_RETURN(EXCEPTION); } // CFA 260 261 __extension__ { KEYWORD_RETURN(EXTENSION); } // GCC 261 exception { KEYWORD_RETURN(EXCEPTION); } // CFA262 262 extern { KEYWORD_RETURN(EXTERN); } 263 263 fallthrough { KEYWORD_RETURN(FALLTHROUGH); } // CFA -
src/Parser/parser.yy
r6e4c44d r3982384 307 307 ClauseNode * clause; 308 308 ast::WaitForStmt * wfs; 309 ast::WaitUntilStmt::ClauseNode * wucn; 309 310 CondCtl * ifctl; 310 311 ForCtrl * forctl; … … 427 428 %type<expr> when_clause when_clause_opt waitfor waituntil timeout 428 429 %type<stmt> waitfor_statement waituntil_statement 429 %type<wfs> wor_waitfor_clause waituntil_clause wand_waituntil_clause wor_waituntil_clause 430 %type<wfs> wor_waitfor_clause 431 %type<wucn> waituntil_clause wand_waituntil_clause wor_waituntil_clause 430 432 431 433 // declarations … … 1685 1687 waituntil_clause: 1686 1688 when_clause_opt waituntil statement 1687 { printf( "waituntil_clause 1\n" ); $$ = nullptr; }1689 { $$ = build_waituntil_clause( yylloc, $1, $2, maybe_build_compound( yylloc, $3 ) ); } 1688 1690 | '(' wor_waituntil_clause ')' 1689 { printf( "waituntil_clause 2\n" ); $$ = nullptr; }1691 { $$ = $2; } 1690 1692 ; 1691 1693 1692 1694 wand_waituntil_clause: 1693 1695 waituntil_clause %prec THEN 1694 { printf( "wand_waituntil_clause 1\n" ); $$ = nullptr; }1696 { $$ = $1; } 1695 1697 | waituntil_clause wand wand_waituntil_clause 1696 { printf( "wand_waituntil_clause 2\n" ); $$ = nullptr; }1698 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::AND, $1, $3 ); } 1697 1699 ; 1698 1700 1699 1701 wor_waituntil_clause: 1700 1702 wand_waituntil_clause 1701 { printf( "wor_waituntil_clause 1\n" ); $$ = nullptr; }1703 { $$ = $1; } 1702 1704 | wor_waituntil_clause wor wand_waituntil_clause 1703 { printf( "wor_waituntil_clause 2\n" ); $$ = nullptr; }1705 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::OR, $1, $3 ); } 1704 1706 | wor_waituntil_clause wor when_clause_opt ELSE statement 1705 { printf( "wor_waituntil_clause 3\n" ); $$ = nullptr; }1707 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::LEFT_OR, $1, build_waituntil_else( yylloc, $3, maybe_build_compound( yylloc, $5 ) ) ); } 1706 1708 | wor_waituntil_clause wor when_clause_opt timeout statement %prec THEN 1707 { printf( "wor_waituntil_clause 4\n" ); $$ = nullptr; }1709 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::LEFT_OR, $1, build_waituntil_timeout( yylloc, $3, $4, maybe_build_compound( yylloc, $5 ) ) ); } 1708 1710 // "else" must be conditional after timeout or timeout is never triggered (i.e., it is meaningless) 1709 1711 | wor_waituntil_clause wor when_clause_opt timeout statement wor ELSE statement // syntax error 1710 1712 { SemanticError( yylloc, "else clause must be conditional after timeout or timeout never triggered." ); $$ = nullptr; } 1711 1713 | wor_waituntil_clause wor when_clause_opt timeout statement wor when_clause ELSE statement 1712 { printf( "wor_waituntil_clause 6\n" ); $$ = nullptr; } 1714 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::LEFT_OR, $1, 1715 new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::OR, 1716 build_waituntil_timeout( yylloc, $3, $4, maybe_build_compound( yylloc, $5 ) ), 1717 build_waituntil_else( yylloc, $7, maybe_build_compound( yylloc, $9 ) ) ) ); } 1713 1718 ; 1714 1719 … … 1716 1721 wor_waituntil_clause %prec THEN 1717 1722 // SKULLDUGGERY: create an empty compound statement to test parsing of waituntil statement. 1718 { $$ = new StatementNode( build_compound( yylloc, nullptr ) ); } 1723 { 1724 $$ = new StatementNode( build_waituntil_stmt( yylloc, $1 ) ); 1725 // $$ = new StatementNode( build_compound( yylloc, nullptr ) ); 1726 } 1719 1727 ; 1720 1728 -
src/ResolvExpr/Resolver.cc
r6e4c44d r3982384 1730 1730 1731 1731 // Find all candidates for a function in canonical form 1732 funcFinder.find( clause.target _func, ResolvMode::withAdjustment() );1732 funcFinder.find( clause.target, 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 _func.strict_as< ast::NameExpr >()->name;1737 ss << clause.target.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 _func= funcCandidates.front()->expr;1924 clause2->target = 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-> cond = findSingleExpression( clause.cond, context );1947 clause2->when_cond = findSingleExpression( clause.when_cond, context ); 1948 1948 clause2->stmt = clause.stmt->accept( *visitor ); 1949 1949 -
src/main.cc
r6e4c44d r3982384 48 48 #include "Concurrency/Keywords.h" // for implementMutex, implement... 49 49 #include "Concurrency/Waitfor.h" // for generateWaitfor 50 #include "Concurrency/Waituntil.hpp" // for generateWaitUntil 50 51 #include "ControlStruct/ExceptDecl.h" // for translateExcept 51 52 #include "ControlStruct/ExceptTranslate.h" // for translateThrows, translat... … … 340 341 PASS( "Implement Concurrent Keywords", Concurrency::implementKeywords, transUnit ); 341 342 PASS( "Forall Pointer Decay", Validate::decayForallPointers, transUnit ); 343 PASS( "Implement Waituntil", Concurrency::generateWaitUntil, transUnit ); 342 344 PASS( "Hoist Control Declarations", ControlStruct::hoistControlDecls, transUnit ); 343 345 -
tests/Makefile.am
r6e4c44d r3982384 11 11 ## Created On : Sun May 31 09:08:15 2015 12 12 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Mon Apr 10 23:24:02202314 ## Update Count : 9613 ## Last Modified On : Fri May 12 18:03:57 2023 14 ## Update Count : 176 15 15 ############################################################################### 16 16 … … 22 22 DEFAULT_INCLUDES = -I${abs_srcdir} 23 23 24 debug=yes 25 installed=no 24 debug ?= yes 25 installed ?= no 26 ARCH=${if ${arch},"--arch=${arch}"} 26 27 archiveerrors= 27 28 … … 37 38 # applies to both programs 38 39 # since automake doesn't have support for CFA we have to 39 AM_CFLAGS = $ (if $(test), 2> $(test), )\40 -fdebug-prefix-map=$ (abspath ${abs_srcdir})= \40 AM_CFLAGS = ${if ${test}, 2> ${test}, } \ 41 -fdebug-prefix-map=${abspath ${abs_srcdir}}= \ 41 42 -fdebug-prefix-map=/tmp= \ 42 43 -fno-diagnostics-show-caret \ … … 51 52 52 53 # get the desired cfa to test 53 TARGET_CFA = $ (if $(filter $(installed),yes), @CFACC_INSTALL@, @CFACC@)54 TARGET_CFA = ${if ${filter ${installed},yes}, @CFACC_INSTALL@, @CFACC@} 54 55 55 56 # adjust CC to current flags 56 CC = LC_ALL=C $ (if $(DISTCC_CFA_PATH),distcc $(DISTCC_CFA_PATH) ${ARCH_FLAGS} ,$(TARGET_CFA) ${DEBUG_FLAGS} ${ARCH_FLAGS})57 CFACC = $ (CC)57 CC = LC_ALL=C ${if ${DISTCC_CFA_PATH},distcc ${DISTCC_CFA_PATH} ${ARCH_FLAGS} ,${TARGET_CFA} ${DEBUG_FLAGS} ${ARCH_FLAGS}} 58 CFACC = ${CC} 58 59 59 60 # get local binary for depedencies … … 61 62 62 63 # adjusted CC but without the actual distcc call 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_makeflags69 .INTERMEDIATE : .validate .validate.cfa .test_makeflags64 CFACCLOCAL = ${if ${DISTCC_CFA_PATH},${DISTCC_CFA_PATH} ${ARCH_FLAGS} ,${TARGET_CFA} ${DEBUG_FLAGS} ${ARCH_FLAGS}} 65 CFACCLINK = ${CFACCLOCAL} -quiet ${if ${test}, 2> ${test}, } ${${shell echo "${@}_FLAGSLD" | sed 's/-\|\//_/g'}} 66 67 PRETTY_PATH=mkdir -p ${dir ${abspath ${@}}} && cd ${srcdir} && 68 69 .PHONY : list .validate .test_makeflags 70 .INTERMEDIATE : .validate .validate.cfa .test_makeflags 70 71 EXTRA_PROGRAMS = avl_test linkonce linking/mangling/anon .dummy_hack # build but do not install 71 72 EXTRA_DIST = test.py \ … … 95 96 for file in `${TEST_PY} --list-dist`; do \ 96 97 if test -f ${srcdir}/$${file}; then \ 97 $ (MKDIR_P)$$(dirname ${distdir}/$${file}); \98 ${MKDIR_P} $$(dirname ${distdir}/$${file}); \ 98 99 cp -df ${srcdir}/$${file} ${distdir}/$${file}; \ 99 100 fi; \ … … 107 108 108 109 #---------------------------------------------------------------------------------------------------------------- 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 110 111 all-local : # This name is important to automake and implies the default build target. 112 @+${TEST_PY} --debug=${debug} --install=${installed} --invariant --archive-errors=${archiveerrors} ${concurrent} ${timeouts} ${ARCH} --all # '@' => do not echo command (SILENT), '+' => allows recursive make from within python program 113 114 install : all-local # PAB only 115 116 tests : all-local 117 118 quick : 119 @+${TEST_PY} --debug=${debug} --install=${installed} --archive-errors=${archiveerrors} ${concurrent} ${timeouts} ${ARCH} ${quick_test} 120 121 concurrency : 122 @+${TEST_PY} --debug=${debug} --install=${installed} ${ARCH} -Iconcurrent 123 124 list : 125 @+${TEST_PY} --list ${concurrent} 126 127 help : 128 @echo "user targets:" 129 @echo " Run the complete test suite." 130 @echo " $$ make (null) / tests [debug=yes/no] [installed=yes/no] [arch=x86/x64/arm]" 131 @echo "" 132 @echo " Run the short (quick) test suite." 133 @echo " $$ make quick [debug=yes/no] [installed=yes/no] [arch=x86/x64/arm]" 134 @echo "" 135 @echo " Run the concurrent test suite." 136 @echo " $$ make concurrency [debug=yes/no] [installed=yes/no] [arch=x86/x64/arm]" 137 @echo "" 138 @echo " List all tests in the test suite." 139 @echo " $$ make list" 114 140 115 141 mostlyclean-local : … … 123 149 find ${builddir} -path '*.Po' -delete 124 150 125 list :126 @+${TEST_PY} --list ${concurrent}127 128 151 .test_makeflags: 129 152 @echo "${MAKEFLAGS}" 130 153 131 154 .validate: .validate.cfa 132 $ (CFACOMPILE).validate.cfa -fsyntax-only -Wall -Wextra -Werror155 ${CFACOMPILE} .validate.cfa -fsyntax-only -Wall -Wextra -Werror 133 156 134 157 .validate.cfa: … … 142 165 @echo "int bar() { return 0; }" > ${@} 143 166 144 concurrency :145 @+${TEST_PY} --debug=${debug} --install=${installed} -Iconcurrent146 147 167 #---------------------------------------------------------------------------------------------------------------- 148 168 149 169 # Use for all tests, make sure the path are correct and all flags are added 150 CFACOMPILETEST=$ (PRETTY_PATH) $(CFACOMPILE) $(shell realpath --relative-to=${srcdir} ${<}) $($(shell echo "${@}_FLAGSCFA" | sed 's/-\|\//_/g'))170 CFACOMPILETEST=${PRETTY_PATH} ${CFACOMPILE} ${shell realpath --relative-to=${srcdir} ${<}} ${${shell echo "${@}_FLAGSCFA" | sed 's/-\|\//_/g'}} 151 171 152 172 #---------------------------------------------------------------------------------------------------------------- … … 155 175 # split into two steps to support compiling remotely using distcc 156 176 # don't use distcc to do the linking because distcc doesn't do linking 157 % : %.cfa $ (CFACCBIN)158 $ (CFACOMPILETEST) -c -o $(abspath ${@}).o -DIN_DIR="$(abspath $(dir ${<}))/.in/"159 $ (CFACCLINK) ${@}.o -o $(abspath ${@})160 rm $ (abspath ${@}).o177 % : %.cfa ${CFACCBIN} 178 ${CFACOMPILETEST} -c -o ${abspath ${@}}.o -DIN_DIR="${abspath ${dir ${<}}}/.in/" 179 ${CFACCLINK} ${@}.o -o ${abspath ${@}} 180 rm ${abspath ${@}}.o 161 181 162 182 # implicit rule for c++ test 163 183 # convient for testing the testsuite itself but not actuall used 164 184 % : %.cpp 165 $ (PRETTY_PATH) $(CXXCOMPILE) $(shell realpath --relative-to=${srcdir} ${<}) -o $(abspath ${@})185 ${PRETTY_PATH} ${CXXCOMPILE} ${shell realpath --relative-to=${srcdir} ${<}} -o ${abspath ${@}} 166 186 167 187 #------------------------------------------------------------------------------ … … 174 194 # Generated code 175 195 GENERATED_CODE = declarationSpecifier gccExtensions extension attributes functions KRfunctions 176 $ (GENERATED_CODE): % : %.cfa $(CFACCBIN)177 $ (CFACOMPILETEST) -CFA -XCFA -p -c -fsyntax-only -o $(abspath ${@})196 ${GENERATED_CODE} : % : %.cfa ${CFACCBIN} 197 ${CFACOMPILETEST} -CFA -XCFA -p -c -fsyntax-only -o ${abspath ${@}} 178 198 179 199 #------------------------------------------------------------------------------ … … 181 201 #------------------------------------------------------------------------------ 182 202 # tests that just validate syntax and compiler output should be compared to stderr 183 CFACOMPILE_SYNTAX = $ (CFACOMPILETEST) -Wno-unused-variable -Wno-unused-label -c -fsyntax-only -o $(abspath ${@})203 CFACOMPILE_SYNTAX = ${CFACOMPILETEST} -Wno-unused-variable -Wno-unused-label -c -fsyntax-only -o ${abspath ${@}} 184 204 185 205 SYNTAX_ONLY_CODE = expression typedefRedef variableDeclarator switch numericConstants identFuncDeclarator \ 186 206 init1 limits nested-types cast labelledExit array quasiKeyword include/stdincludes include/includes builtins/sync warnings/self-assignment concurrent/waitfor/parse 187 $ (SYNTAX_ONLY_CODE): % : %.cfa $(CFACCBIN)188 $ (CFACOMPILE_SYNTAX)189 $ (if $(test), cp $(test) $(abspath ${@}), )207 ${SYNTAX_ONLY_CODE} : % : %.cfa ${CFACCBIN} 208 ${CFACOMPILE_SYNTAX} 209 ${if ${test}, cp ${test} ${abspath ${@}}, } 190 210 191 211 # expected failures 192 212 # use custom target since they require a custom define *and* have a name that doesn't match the file 193 alloc-ERROR : alloc.cfa $ (CFACCBIN)194 $ (CFACOMPILE_SYNTAX)-DERR1195 -cp $ (test) $(abspath ${@})196 197 init1-ERROR : init1.cfa $ (CFACCBIN)198 $ (CFACOMPILE_SYNTAX)-DERR1199 -cp $ (test) $(abspath ${@})200 201 typedefRedef-ERR1 : typedefRedef.cfa $ (CFACCBIN)202 $ (CFACOMPILE_SYNTAX)-DERR1203 -cp $ (test) $(abspath ${@})204 205 nested-types-ERR1 : nested-types.cfa $ (CFACCBIN)206 $ (CFACOMPILE_SYNTAX)-DERR1207 -cp $ (test) $(abspath ${@})208 209 nested-types-ERR2 : nested-types.cfa $ (CFACCBIN)210 $ (CFACOMPILE_SYNTAX)-DERR2211 -cp $ (test) $(abspath ${@})212 213 raii/memberCtors-ERR1 : raii/memberCtors.cfa $ (CFACCBIN)214 $ (CFACOMPILE_SYNTAX)-DERR1215 -cp $ (test) $(abspath ${@})216 217 raii/ctor-autogen-ERR1 : raii/ctor-autogen.cfa $ (CFACCBIN)218 $ (CFACOMPILE_SYNTAX)-DERR1219 -cp $ (test) $(abspath ${@})220 221 raii/dtor-early-exit-ERR1 : raii/dtor-early-exit.cfa $ (CFACCBIN)222 $ (CFACOMPILE_SYNTAX)-DERR1223 -cp $ (test) $(abspath ${@})224 225 raii/dtor-early-exit-ERR2 : raii/dtor-early-exit.cfa $ (CFACCBIN)226 $ (CFACOMPILE_SYNTAX)-DERR2227 -cp $ (test) $(abspath ${@})213 alloc-ERROR : alloc.cfa ${CFACCBIN} 214 ${CFACOMPILE_SYNTAX} -DERR1 215 -cp ${test} ${abspath ${@}} 216 217 init1-ERROR : init1.cfa ${CFACCBIN} 218 ${CFACOMPILE_SYNTAX} -DERR1 219 -cp ${test} ${abspath ${@}} 220 221 typedefRedef-ERR1 : typedefRedef.cfa ${CFACCBIN} 222 ${CFACOMPILE_SYNTAX} -DERR1 223 -cp ${test} ${abspath ${@}} 224 225 nested-types-ERR1 : nested-types.cfa ${CFACCBIN} 226 ${CFACOMPILE_SYNTAX} -DERR1 227 -cp ${test} ${abspath ${@}} 228 229 nested-types-ERR2 : nested-types.cfa ${CFACCBIN} 230 ${CFACOMPILE_SYNTAX} -DERR2 231 -cp ${test} ${abspath ${@}} 232 233 raii/memberCtors-ERR1 : raii/memberCtors.cfa ${CFACCBIN} 234 ${CFACOMPILE_SYNTAX} -DERR1 235 -cp ${test} ${abspath ${@}} 236 237 raii/ctor-autogen-ERR1 : raii/ctor-autogen.cfa ${CFACCBIN} 238 ${CFACOMPILE_SYNTAX} -DERR1 239 -cp ${test} ${abspath ${@}} 240 241 raii/dtor-early-exit-ERR1 : raii/dtor-early-exit.cfa ${CFACCBIN} 242 ${CFACOMPILE_SYNTAX} -DERR1 243 -cp ${test} ${abspath ${@}} 244 245 raii/dtor-early-exit-ERR2 : raii/dtor-early-exit.cfa ${CFACCBIN} 246 ${CFACOMPILE_SYNTAX} -DERR2 247 -cp ${test} ${abspath ${@}} 228 248 229 249 # Exception Tests 230 250 # Test with libcfathread; it changes how storage works. 231 251 232 exceptions/%-threads : exceptions/%.cfa $ (CFACCBIN)233 $ (CFACOMPILETEST) -include exceptions/with-threads.hfa -c -o $(abspath ${@}).o234 $ (CFACCLOCAL) $($(shell echo "${@}_FLAGSLD" | sed 's/-\|\//_/g')) $(abspath ${@}).o -o $(abspath ${@})252 exceptions/%-threads : exceptions/%.cfa ${CFACCBIN} 253 ${CFACOMPILETEST} -include exceptions/with-threads.hfa -c -o ${abspath ${@}}.o 254 ${CFACCLOCAL} ${${shell echo "${@}_FLAGSLD" | sed 's/-\|\//_/g'}} ${abspath ${@}}.o -o ${abspath ${@}} 235 255 236 256 # Linking tests 237 257 # Meta tests to make sure we see linking errors (can't compile with -O2 since it may multiply number of calls) 238 linking/linkerror : linking/linkerror.cfa $ (CFACCBIN)239 $ (CFACOMPILETEST) -O0 -c -o $(abspath ${@}).o240 $ (CFACCLINK) -O0 ${@}.o -o $(abspath ${@})241 rm $ (abspath ${@}).o258 linking/linkerror : linking/linkerror.cfa ${CFACCBIN} 259 ${CFACOMPILETEST} -O0 -c -o ${abspath ${@}}.o 260 ${CFACCLINK} -O0 ${@}.o -o ${abspath ${@}} 261 rm ${abspath ${@}}.o 242 262 243 263 #------------------------------------------------------------------------------ -
tests/concurrent/futures/select_future.cfa
r6e4c44d r3982384 196 196 delete( shared_future ); 197 197 printf( "done 3\n" ); 198 199 // C_TODO: add test for select statement once it is implemented200 198 }
Note:
See TracChangeset
for help on using the changeset viewer.