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