Changes in / [6e4c44d:3982384]


Ignore:
Files:
305 added
8 deleted
62 edited

Legend:

Unmodified
Added
Removed
  • Jenkins/FullBuild

    r6e4c44d r3982384  
    2020                                        gcc_08_x86_new: { trigger_build( 'gcc-10',  'x86', false ) },
    2121                                        gcc_07_x86_new: { trigger_build( 'gcc-9',   'x86', false ) },
     22                                        gcc_11_x64_new: { trigger_build( 'gcc-11',  'x64', false ) },
    2223                                        gcc_10_x64_new: { trigger_build( 'gcc-10',  'x64', false ) },
    2324                                        gcc_09_x64_new: { trigger_build( 'gcc-9',   'x64', false ) },
    2425                                        gcc_08_x64_new: { trigger_build( 'gcc-8',   'x64', false ) },
    2526                                        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 ) },
    2728                                        clang_x64_new:  { trigger_build( 'clang',   'x64', true  ) },
    2829                                )
     
    4142        }
    4243
    43         //If an exception is caught we need to change the status and remember to
    44         //attach the build log to the email
     44        // If an exception is caught we need to change the status and remember to
     45        // attach the build log to the email
    4546        catch (Exception caughtError) {
    4647                echo('error caught')
     
    7374        // Run the build
    7475        // 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',                       \
    7677                parameters: [                                           \
    7778                        [$class: 'StringParameterValue',                \
     
    8384                        [$class: 'BooleanParameterValue',               \
    8485                          name: 'NewAST',                               \
    85                           value: true],                                         \
     86                          value: true],                                 \
    8687                        [$class: 'BooleanParameterValue',               \
    8788                          name: 'RunAllTests',                          \
    88                           value: true],                                         \
     89                          value: true],                                 \
    8990                        [$class: 'BooleanParameterValue',               \
    9091                          name: 'RunBenchmark',                         \
    91                           value: true],                                         \
     92                          value: true],                                 \
    9293                        [$class: 'BooleanParameterValue',               \
    93                           name: 'BuildDocumentation',           \
     94                          name: 'BuildDocumentation',                   \
    9495                          value: doc],                                  \
    9596                        [$class: 'BooleanParameterValue',               \
    9697                          name: 'Publish',                              \
    97                           value: true],                                         \
     98                          value: true],                                 \
    9899                        [$class: 'BooleanParameterValue',               \
    99100                          name: 'Silent',                               \
    100                           value: true],                                         \
    101                 ],                                                              \
     101                          value: true],                                 \
     102                ],                                                      \
    102103                propagate: false
    103104
     
    111112
    112113def trigger_dist(String commitId, String buildNum) {
    113         def result = build job: 'Cforall_Distribute_Ref',       \
     114        def result = build job: 'Cforall_Distribute_Ref',               \
    114115                parameters: [                                           \
    115116                        string(name: 'GitRef', value: commitId),        \
    116                         string(name: 'Build' , value: buildNum) \
    117                 ],                                                              \
     117                        string(name: 'Build' , value: buildNum)         \
     118                ],                                                      \
    118119                propagate: false
    119120
  • Jenkinsfile

    r6e4c44d r3982384  
    155155                        dir (BuildDir) {
    156156                                //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"""
    158158                        }
    159159                }
     
    162162                        dir (BuildDir) {
    163163                                //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=no archiveerrors=${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"""
    165165                        }
    166166                }
     
    305305                                this.Compiler = new CC_Desc('gcc-7', 'g++-7', 'gcc-7', '-flto=auto')
    306306                        break
    307                         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
     307                        // 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
    316316                        case 'clang':
    317317                                this.Compiler = new CC_Desc('clang', 'clang++-10', 'gcc-10', '-flto=thin -flto-jobs=0')
     
    359359def prepare_build() {
    360360        // 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\ngcc-6\ngcc-5\ngcc-4.9\nclang',   \
    374                                         defaultValue: 'gcc-8',                                                          \
    375                                 ],                                                                                              \
    376                                 [$class: 'ChoiceParameterDefinition',                                           \
    377                                         description: 'The target architecture',                                 \
    378                                         name: 'Architecture',                                                           \
    379                                         choices: 'x64\nx86',                                                            \
    380                                         defaultValue: 'x64',                                                            \
    381                                 ],                                                                                              \
    382                                 [$class: 'BooleanParameterDefinition',                                                  \
     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',                          \
    383383                                        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                                ],                                                              \
    407407                        ],
    408408                ]])
     409                                        // choices: 'gcc-11\ngcc-10\ngcc-9\ngcc-8\ngcc-7\ngcc-6\ngcc-5\ngcc-4.9\nclang',
     410                                        // defaultValue: 'gcc-8',
    409411
    410412        // It's unfortunate but it looks like we need to checkout the entire repo just to get
  • Makefile.am

    r6e4c44d r3982384  
    1111## Created On       : Sun May 31 22:14:18 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Sat Feb  2 16:54:42 2019
    14 ## Update Count     : 21
     13## Last Modified On : Fri May 12 18:30:01 2023
     14## Update Count     : 42
    1515###############################################################################
    1616
     
    2424DIST_SUBDIRS = driver src . libcfa tests
    2525
    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)
     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}
    3232
    3333noinst_DATA = @LIBCFA_TARGET_MAKEFILES@
     
    3737EXTRA_DIST = LICENSE doc/man/cfa.1 libcfa/configure libcfa/Makefile.dist.am libcfa/Makefile.dist.in tools/build/distcc_hash tools/build/push2dist.sh
    3838
    39 debug=yes
    40 check:
    41         $(MAKE) -C tests all-tests installed=no debug=${debug}
     39debug ?= yes
     40installed ?= no
     41ARCH = ${if ${arch},"arch=${arch}"}
    4242
    43 installcheck:
    44         $(MAKE) -C tests all-tests installed=yes debug=${debug}
     43check :
     44        ${MAKE} -C tests tests installed=${installed} debug=${debug} ${ARCH}
    4545
    46 configure-libcfa: @LIBCFA_TARGET_MAKEFILES@
     46tests : check # synonym
     47
     48installcheck :
     49        ${MAKE} -C tests tests installed=yes debug=${debug} ${ARCH}
     50
     51installtest : installcheck # synonym
     52
     53help :
     54        @echo "user targets:"
     55        @echo "    Compile compiler/runtime and run test suite."
     56        @echo "    $$ make check / tests [debug=yes/no] [installed=yes/no] [arch=x86/x64/arm]"
     57        @echo ""
     58        @echo "    Compile compiler/runtime, run test suite, and install."
     59        @echo "    $$ make installcheck / installtests [debug=yes/no] installed=yes [arch=x86/x64/arm]"
     60
     61configure-libcfa : @LIBCFA_TARGET_MAKEFILES@
    4762        @true
    4863
    49 status: @LIBCFA_TARGET_MAKEFILES@
     64status : @LIBCFA_TARGET_MAKEFILES@
    5065        @echo -ne "translator\n\t"
    5166        @./config.status --config | sed "s/ /\n\t/g; s/\t'/\t/g; s/'\n/\n/g; s/^'//g; s/'$$//g"
    5267        @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"
    5368
    54 @LIBCFA_TARGET_DIRS@::
    55         $(MAKE) -C $@ $(MAKECMDGOALS)
     69@LIBCFA_TARGET_DIRS@ ::
     70        ${MAKE} -C ${@} ${MAKECMDGOALS}
    5671
    57 mostlyclean clean distclean maintainer-clean: @LIBCFA_TARGET_DIRS@
     72mostlyclean clean distclean maintainer-clean : @LIBCFA_TARGET_DIRS@
  • doc/LaTeXmacros/lstlang.sty

    r6e4c44d r3982384  
    88%% Created On       : Sat May 13 16:34:42 2017
    99%% Last Modified By : Peter A. Buhr
    10 %% Last Modified On : Mon May 31 08:20:41 2021
    11 %% Update Count     : 28
     10%% Last Modified On : Tue May  2 08:52:35 2023
     11%% Update Count     : 30
    1212%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1313
     
    112112\lstdefinelanguage{CFA}[ANSI]{C}{
    113113        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,
    122123    },
    123124        moredirectives={defined,include_next}%
  • doc/bibliography/pl.bib

    r6e4c44d r3982384  
    198198}
    199199
     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
    200215@misc{ActorBenchmarks,
    201     keywords    = {Actors, microbenchmarks, uC++. CAF, AkkaC, AkkaT, ProtoActor},
     216    keywords    = {Actors, microbenchmarks, uC++. CAF, ProtoActor, AkkaC, AkkaT},
    202217    contributer = {pabuhr@plg},
    203218    key         = {ActorBenchmarks},
     
    215230    publisher   = {MIT Press, Cambridge},
    216231    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},
    217254}
    218255
     
    303340
    304341@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},
    306343    author      = {Agrawal, Kunal and Leiserson, Charles E. and He, Yuxiong and Hsu, Wen Jing},
    307344    title       = {Adaptive Work-stealing with Parallelism Feedback},
     
    435472    month       = sep,
    436473    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,
    438484}
    439485
     
    443489    title       = {Akka Futures},
    444490    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}},
    446501    year        = 2022,
    447502}
     
    11181173@inproceedings{CAF,
    11191174    keywords    = {performance measurement, actor model, c++, message-oriented middleware, distributed debugging},
     1175    contributer = {pabuhr@plg},
    11201176    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},
    11221178    publisher   = {ACM},
    11231179    address     = {New York, NY, USA},
    11241180    organization= {Proceedings of the 4th International Workshop on Programming Based on Actors Agents \& Decentralized Control},
    11251181    pages       = {15-28},
    1126     numpages    = {14},
     1182    numpages    = 14,
    11271183    location    = {Portland, Oregon, USA},
    11281184    series      = {AGERE'14},
    1129     year        = {2014},
     1185    year        = 2014,
    11301186}
    11311187
     
    31023158    year        = 2016,
    31033159    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}},
    31043170}
    31053171
     
    53365402}
    53375403
     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
    53385414@article{multilisp,
    53395415    keywords    = {futures, scheme},
     
    66186694}
    66196695
     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
    66206712@book{PowerPC,
    66216713    key         = {PowerPC processor},
     
    66796771    title       = {Programming Languages -- {C}},
    66806772    organization= {International Standard ISO/IEC 9899:1999 (E)},
    6681     publisher   = {American National Standards Institute},
     6773    publisher   = {American National Standards Institute},
    66826774    address     = {www.ansi.org},
    66836775    year        = 1999,
     
    66906782    title       = {{C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Programming Language ISO/IEC 14882:1998},
    66916783    edition     = {1st},
    6692     organization  = {International Standard Organization},
     6784    organization= {International Standard Organization},
    66936785    address     = {Geneva, Switzerland},
    66946786    year        = 1998,
     
    69817073}
    69827074
     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
    69837084@misc{Pthreads,
    69847085    keywords    = {pthreads, C concurrency},
     
    74587559    title       = {The Semantics of a Simple Language for Parallel Programming},
    74597560    author      = {Gilles Kahn},
    7460     booktitle   = {IFIP Congress},
     7561    organization= {IFIP Congress},
    74617562    year        = 1974,
    74627563}
     
    81738274
    81748275@article{SysVABI,
    8175     keywords    =  {System V ABI},
    8176     contributer =  {a3moss@uwaterloo.ca},
     8276    keywords    = {System V ABI},
     8277    contributer = {a3moss@uwaterloo.ca},
    81778278    title       = {System {V} application binary interface},
    81788279    author      = {Matz, Michael and Hubicka, Jan and Jaeger, Andreas and Mitchell, Mark},
     
    81808281    volume      = {99},
    81818282    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}
    81828295}
    81838296
     
    82068319    journal     = jcss,
    82078320    year        = 1978,
    8208     volume      = 17, pages = {348-375}
     8321    volume      = 17,
     8322    pages       = {348-375},
    82098323}
    82108324
  • doc/theses/colby_parsons_MMAth/Makefile

    r6e4c44d r3982384  
    1313## Define the text source files.
    1414
    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                           \
     15SOURCES = ${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 \
    2324}
    2425
    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  \
     26FIGURES = ${addsuffix .pgf, \
     27        figures/pykeExecutor \
     28        figures/pykeCFAExecutor \
     29        figures/nasusExecutor \
     30        figures/nasusCFAExecutor \
     31        figures/pykeMatrix \
     32        figures/pykeCFAMatrix \
     33        figures/nasusMatrix \
     34        figures/nasusCFAMatrix \
     35        figures/pykeRepeat \
     36        figures/pykeCFARepeat \
     37        figures/nasusRepeat \
     38        figures/nasusCFARepeat \
     39        figures/pykeCFABalance-One \
     40        figures/nasusCFABalance-One\
     41        figures/pykeCFABalance-Multi \
     42        figures/nasusCFABalance-Multi \
     43        figures/pyke_Aggregate_Lock_2 \
     44        figures/pyke_Aggregate_Lock_4 \
     45        figures/pyke_Aggregate_Lock_8 \
     46        figures/nasus_Aggregate_Lock_2 \
     47        figures/nasus_Aggregate_Lock_4 \
     48        figures/nasus_Aggregate_Lock_8 \
    4849        figures/nasus_Channel_Contention \
    4950        figures/pyke_Channel_Contention \
    5051}
    5152
    52 DATA =  data/pykeSendStatic             \
    53                 data/pykeSendDynamic    \
    54                 data/pykeExecutorMem    \
    55                 data/nasusSendStatic    \
    56                 data/nasusSendDynamic   \
    57                 data/pykeExecutorMem    \
     53DATA =  data/pykeSendStatic \
     54        data/pykeSendDynamic\
     55        data/pykeExecutorMem\
     56        data/nasusSendStatic\
     57        data/nasusSendDynamic\
     58        data/pykeExecutorMem\
    5859
    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            \
     60PICTURES = ${addsuffix .tikz, \
     61        diagrams/standard_actor \
     62        diagrams/inverted_actor \
     63        diagrams/gulp \
     64        diagrams/chain_swap \
     65        diagrams/M_to_one_swap \
     66        diagrams/acyclic_swap \
     67        diagrams/cyclic_swap \
    6768}
    6869
     
    105106        # Make index from *.aux entries and input index at end of document
    106107        makeglossaries -q -s ${Build}/${basename $@}.ist ${Build}/${basename $@}
    107         -version.sh
    108108        # Run again to finish citations
    109109        ${LaTeX} ${basename $@}.tex
    110        
    111110
    112111## Define the default recipes.
  • doc/theses/colby_parsons_MMAth/benchmarks/actors/data/nasus_CFA.txt

    r6e4c44d r3982384  
    115
    221 2 4 8 16 24 32 48
    3 CFA-LV CFA-NS CFA-R
     3Longest-Victim No-Stealing Random
    44executor
    5 CFA-LV:
     5Longest-Victim:
    66proc    time (s)
    771       29.22
     
    454548      1.20
    464648      1.20
    47 CFA-NS:
     47No-Stealing:
    4848proc    time (s)
    49491       28.25
     
    878748      1.18
    888848      1.16
    89 CFA-R:
     89Random:
    9090proc    time (s)
    91911       28.58
     
    131131
    132132matrix
    133 CFA-LV:
     133Longest-Victim:
    134134proc    time (s)
    1351351       105.48
     
    17317348      2.75
    17417448      2.96
    175 CFA-NS:
     175No-Stealing:
    176176proc    time (s)
    1771771       106.01
     
    21521548      2.78
    21621648      2.92
    217 CFA-R:
     217Random:
    218218proc    time (s)
    2192191       105.91
     
    259259
    260260repeat
    261 CFA-LV:
     261Longest-Victim:
    262262proc    time (s)
    2632631       1.17
     
    30130148      13.73
    30230248      14.55
    303 CFA-NS:
     303No-Stealing:
    304304proc    time (s)
    3053051       1.15
     
    34334348      13.03
    34434448      12.83
    345 CFA-R:
     345Random:
    346346proc    time (s)
    3473471       1.15
     
    387387
    388388balance_one
    389 CFA-LV:
     389Longest-Victim:
    390390proc    time (s)
    3913911       20.06
     
    42942948      1.11
    43043048      1.12
    431 CFA-NS:
     431No-Stealing:
    432432proc    time (s)
    4334331       20.13
     
    47147148      19.95
    47247248      20.00
    473 CFA-R:
     473Random:
    474474proc    time (s)
    4754751       19.92
     
    515515
    516516balance_multi
    517 CFA-LV:
     517Longest-Victim:
    518518proc    time (s)
    5195191       8.17
     
    55755748      5.75
    55855848      5.68
    559 CFA-NS:
     559No-Stealing:
    560560proc    time (s)
    5615611       8.10
     
    59959948      9.28
    60060048      9.26
    601 CFA-R:
     601Random:
    602602proc    time (s)
    6036031       8.08
  • doc/theses/colby_parsons_MMAth/benchmarks/actors/data/pyke_CFA.txt

    r6e4c44d r3982384  
    115
    221 2 4 8 16 24 32 48
    3 CFA-LV CFA-NS CFA-R
     3Longest-Victim No-Stealing Random
    44executor
    5 CFA-LV:
     5Longest-Victim:
    66proc    time (s)
    771       29.04
     
    454548      2.58
    464648      2.55
    47 CFA-NS:
     47No-Stealing:
    4848proc    time (s)
    49491       28.15
     
    878748      2.59
    888848      2.60
    89 CFA-R:
     89Random:
    9090proc    time (s)
    91911       29.06
     
    131131
    132132matrix
    133 CFA-LV:
     133Longest-Victim:
    134134proc    time (s)
    1351351       127.44
     
    17317348      6.83
    17417448      6.81
    175 CFA-NS:
     175No-Stealing:
    176176proc    time (s)
    1771771       127.64
     
    21521548      6.77
    21621648      6.74
    217 CFA-R:
     217Random:
    218218proc    time (s)
    2192191       127.26
     
    259259
    260260repeat
    261 CFA-LV:
     261Longest-Victim:
    262262proc    time (s)
    2632631       1.16
     
    30130148      19.75
    30230248      19.71
    303 CFA-NS:
     303No-Stealing:
    304304proc    time (s)
    3053051       1.18
     
    34334348      13.88
    34434448      13.71
    345 CFA-R:
     345Random:
    346346proc    time (s)
    3473471       1.18
     
    387387
    388388balance_one
    389 CFA-LV:
     389Longest-Victim:
    390390proc    time (s)
    3913911       19.46
     
    42942948      2.12
    43043048      2.17
    431 CFA-NS:
     431No-Stealing:
    432432proc    time (s)
    4334331       21.00
     
    47147148      47.50
    47247248      47.72
    473 CFA-R:
     473Random:
    474474proc    time (s)
    4754751       20.81
     
    515515
    516516balance_multi
    517 CFA-LV:
     517Longest-Victim:
    518518proc    time (s)
    5195191       7.94
     
    55755748      14.38
    55855848      14.50
    559 CFA-NS:
     559No-Stealing:
    560560proc    time (s)
    5615611       8.48
     
    59959948      21.50
    60060048      21.15
    601 CFA-R:
     601Random:
    602602proc    time (s)
    6036031       8.49
  • doc/theses/colby_parsons_MMAth/benchmarks/actors/plotData.py

    r6e4c44d r3982384  
    22import sys
    33import time
     4import itertools
    45import matplotlib.pyplot as plt
    56import matplotlib.ticker as ticks
     
    1718    'text.usetex': True,
    1819    'pgf.rcfonts': False,
     20    'font.size': 16
    1921})
     22marker = itertools.cycle(('o', 's', 'D', 'x', 'p', '^', 'h', '*', 'v' ))
    2023
    2124readfile = open(sys.argv[1], "r")
     
    162165                    plt.xlabel("Cores")
    163166                    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) )
    165168                    if currBench == Bench.Executor or currBench == Bench.Matrix or currBench == Bench.Balance_One or currBench == Bench.Repeat:
    166169                        plt.yscale("log")
  • doc/theses/colby_parsons_MMAth/benchmarks/channels/plotData.py

    r6e4c44d r3982384  
    22import sys
    33import time
     4import itertools
    45import matplotlib.pyplot as plt
    56import matplotlib.ticker as ticks
     
    1718    'text.usetex': True,
    1819    'pgf.rcfonts': False,
     20    'font.size': 16
    1921})
     22marker = itertools.cycle(('o', 's', 'D', 'x', 'p', '^', 'h', '*', 'v' ))
    2023
    2124readfile = open(sys.argv[1], "r")
     
    7073    if currBench == Bench.Unset:
    7174        if line == "contend:":
    72             name = "Contend"
     75            name = "Channel Contention"
    7376            currBench = Bench.Contend
    7477        elif line == "zero:":
     
    126129                plt.xlabel("Cores")
    127130                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) )
    129132               
    130133                plt.yscale("log")
  • doc/theses/colby_parsons_MMAth/benchmarks/mutex_stmt/plotData.py

    r6e4c44d r3982384  
    22import sys
    33import time
     4import itertools
    45import matplotlib.pyplot as plt
    56import matplotlib.ticker as ticks
     
    1718    'text.usetex': True,
    1819    'pgf.rcfonts': False,
     20    'font.size': 16
    1921})
     22marker = itertools.cycle(('o', 's', 'D', 'x', 'p', '^', 'h', '*', 'v' ))
    2023
    2124readfile = open(sys.argv[1], "r")
     
    99102                plt.xlabel("Cores")
    100103                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) )
    102105                plt.yscale("log")
    103106                plt.xticks(procs)
  • doc/theses/colby_parsons_MMAth/benchmarks/mutex_stmt/run

    r6e4c44d r3982384  
    9696
    9797# toggle benchmarks
    98 order=${true}
     98order=${false}
    9999rand=${true}
    100100baseline=${true}
  • doc/theses/colby_parsons_MMAth/code/swap_queues.cfa

    r6e4c44d r3982384  
    1 // this is a code stub and will not compile
    2 
    3 // tries to atomically swap two queues and returns 0p if the swap failed
    4 // returns ptr to newly owned queue if swap succeeds
    5 static inline work_queue * try_swap_queues( worker & this, unsigned int victim_idx, unsigned int my_idx ) with(this) {
     1// sequential equivalent swap
     2void swap( uint victim_idx, uint my_idx  ) {
     3    // Step 0:
    64    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;
    2612}
    2713
     
    3521
    3622bool 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
    3725    work_queue * my_queue = request_queues[my_idx];
    3826    work_queue * vic_queue = request_queues[victim_idx];
    3927
     28    // Step 1:
    4029    // If either queue is 0p then they are in the process of being stolen
    4130    // 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;
    4332
    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
    4636    if ( !CAS( &request_queues[my_idx], &my_queue, 0p ) )
    4737        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
    5142    if ( !CAS( &request_queues[victim_idx], &vic_queue, my_queue ) ) {
    5243        request_queues[my_idx] = my_queue; // reset queue ptr back to prev val
     
    5445    }
    5546
     47    // Step 4:
    5648    // 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
    5851    request_queues[my_idx] = vic_queue;
    5952    return true;
  • doc/theses/colby_parsons_MMAth/figures/nasus_Aggregate_Lock_2.pgf

    r6e4c44d r3982384  
    7777\pgfsetstrokecolor{textcolor}%
    7878\pgfsetfillcolor{textcolor}%
    79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    8080\end{pgfscope}%
    8181\begin{pgfscope}%
     
    102102\pgfsetstrokecolor{textcolor}%
    103103\pgfsetfillcolor{textcolor}%
    104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    105105\end{pgfscope}%
    106106\begin{pgfscope}%
     
    127127\pgfsetstrokecolor{textcolor}%
    128128\pgfsetfillcolor{textcolor}%
    129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    130130\end{pgfscope}%
    131131\begin{pgfscope}%
     
    152152\pgfsetstrokecolor{textcolor}%
    153153\pgfsetfillcolor{textcolor}%
    154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    155155\end{pgfscope}%
    156156\begin{pgfscope}%
     
    177177\pgfsetstrokecolor{textcolor}%
    178178\pgfsetfillcolor{textcolor}%
    179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    180180\end{pgfscope}%
    181181\begin{pgfscope}%
     
    202202\pgfsetstrokecolor{textcolor}%
    203203\pgfsetfillcolor{textcolor}%
    204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    205205\end{pgfscope}%
    206206\begin{pgfscope}%
     
    208208\pgfsetstrokecolor{textcolor}%
    209209\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}%
    211211\end{pgfscope}%
    212212\begin{pgfscope}%
     
    233233\pgfsetstrokecolor{textcolor}%
    234234\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}\)}%
    236236\end{pgfscope}%
    237237\begin{pgfscope}%
     
    258258\pgfsetstrokecolor{textcolor}%
    259259\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}\)}%
    261261\end{pgfscope}%
    262262\begin{pgfscope}%
     
    283283\pgfsetstrokecolor{textcolor}%
    284284\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}\)}%
    286286\end{pgfscope}%
    287287\begin{pgfscope}%
     
    308308\pgfsetstrokecolor{textcolor}%
    309309\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}\)}%
    311311\end{pgfscope}%
    312312\begin{pgfscope}%
     
    903903\pgfsetstrokecolor{textcolor}%
    904904\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)}%
    906906\end{pgfscope}%
    907907\begin{pgfscope}%
     
    14921492\end{pgfscope}%
    14931493\begin{pgfscope}%
    1494 \pgfsys@transformshift{3.129697in}{0in}%
     1494\pgfsys@transformshift{3.129697in}{-3.129697in}%
    14951495\pgfsys@useobject{currentmarker}{}%
    14961496\end{pgfscope}%
     
    16321632\pgfusepath{clip}%
    16331633\pgfsetbuttcap%
    1634 \pgfsetroundjoin%
     1634\pgfsetmiterjoin%
    16351635\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    16361636\pgfsetfillcolor{currentfill}%
    16371637\pgfsetlinewidth{1.003750pt}%
    16381638\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}%
    16391935\pgfsetstrokecolor{currentstroke}%
    16401936\pgfsetdash{}{0pt}%
     
    16531949}%
    16541950\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}%
    18541954\end{pgfscope}%
    18551955\begin{pgfscope}%
     
    18571957\pgfsetstrokecolor{textcolor}%
    18581958\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}%
    19021979\pgfsetstrokecolor{currentstroke}%
    19031980\pgfsetdash{}{0pt}%
     
    19081985}%
    19091986\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}%
    19211998\pgfsetstrokecolor{currentstroke}%
    19221999\pgfsetdash{}{0pt}%
     
    19272004}%
    19282005\begin{pgfscope}%
    1929 \pgfsys@transformshift{4.570184in}{2.749457in}%
     2006\pgfsys@transformshift{3.869368in}{2.667126in}%
    19302007\pgfsys@useobject{currentmarker}{}%
    19312008\end{pgfscope}%
     
    19352012\pgfsetroundjoin%
    19362013\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 \pgfsetroundjoin%
    1947 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
    1948 \pgfsetfillcolor{currentfill}%
    1949 \pgfsetlinewidth{1.003750pt}%
    1950 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
     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}%
    19512028\pgfsetstrokecolor{currentstroke}%
    19522029\pgfsetdash{}{0pt}%
    19532030\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}}%
    19632035\pgfpathclose%
    19642036\pgfusepath{stroke,fill}%
    19652037}%
    19662038\begin{pgfscope}%
    1967 \pgfsys@transformshift{4.570184in}{2.680012in}%
     2039\pgfsys@transformshift{3.869368in}{2.556015in}%
    19682040\pgfsys@useobject{currentmarker}{}%
    19692041\end{pgfscope}%
     
    19732045\pgfsetstrokecolor{textcolor}%
    19742046\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}%
    19952067\pgfsetstrokecolor{currentstroke}%
    19962068\pgfsetdash{}{0pt}%
     
    20012073}%
    20022074\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}%
    20142086\pgfsetstrokecolor{currentstroke}%
    20152087\pgfsetdash{}{0pt}%
     
    20202092}%
    20212093\begin{pgfscope}%
    2022 \pgfsys@transformshift{4.570184in}{2.555784in}%
     2094\pgfsys@transformshift{3.869368in}{2.342667in}%
    20232095\pgfsys@useobject{currentmarker}{}%
    20242096\end{pgfscope}%
     
    20282100\pgfsetroundjoin%
    20292101\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}}%
    20562123\pgfpathclose%
    20572124\pgfusepath{stroke,fill}%
    20582125}%
    20592126\begin{pgfscope}%
    2060 \pgfsys@transformshift{4.570184in}{2.486339in}%
     2127\pgfsys@transformshift{3.869368in}{2.231556in}%
    20612128\pgfsys@useobject{currentmarker}{}%
    20622129\end{pgfscope}%
     
    20662133\pgfsetstrokecolor{textcolor}%
    20672134\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}%
    20882155\pgfsetstrokecolor{currentstroke}%
    20892156\pgfsetdash{}{0pt}%
     
    20942161}%
    20952162\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}%
    21072174\pgfsetstrokecolor{currentstroke}%
    21082175\pgfsetdash{}{0pt}%
     
    21132180}%
    21142181\begin{pgfscope}%
    2115 \pgfsys@transformshift{4.570184in}{2.362111in}%
     2182\pgfsys@transformshift{3.869368in}{2.018207in}%
    21162183\pgfsys@useobject{currentmarker}{}%
    21172184\end{pgfscope}%
     
    21212188\pgfsetroundjoin%
    21222189\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}%
    21372204\pgfsetstrokecolor{currentstroke}%
    21382205\pgfsetdash{}{0pt}%
    21392206\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}%
    21542215\pgfsys@useobject{currentmarker}{}%
    21552216\end{pgfscope}%
     
    21592220\pgfsetstrokecolor{textcolor}%
    21602221\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}%
    22552223\end{pgfscope}%
    22562224\end{pgfpicture}%
  • doc/theses/colby_parsons_MMAth/figures/nasus_Aggregate_Lock_4.pgf

    r6e4c44d r3982384  
    7777\pgfsetstrokecolor{textcolor}%
    7878\pgfsetfillcolor{textcolor}%
    79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    8080\end{pgfscope}%
    8181\begin{pgfscope}%
     
    102102\pgfsetstrokecolor{textcolor}%
    103103\pgfsetfillcolor{textcolor}%
    104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    105105\end{pgfscope}%
    106106\begin{pgfscope}%
     
    127127\pgfsetstrokecolor{textcolor}%
    128128\pgfsetfillcolor{textcolor}%
    129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    130130\end{pgfscope}%
    131131\begin{pgfscope}%
     
    152152\pgfsetstrokecolor{textcolor}%
    153153\pgfsetfillcolor{textcolor}%
    154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    155155\end{pgfscope}%
    156156\begin{pgfscope}%
     
    177177\pgfsetstrokecolor{textcolor}%
    178178\pgfsetfillcolor{textcolor}%
    179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    180180\end{pgfscope}%
    181181\begin{pgfscope}%
     
    202202\pgfsetstrokecolor{textcolor}%
    203203\pgfsetfillcolor{textcolor}%
    204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    205205\end{pgfscope}%
    206206\begin{pgfscope}%
     
    208208\pgfsetstrokecolor{textcolor}%
    209209\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}%
    211211\end{pgfscope}%
    212212\begin{pgfscope}%
     
    233233\pgfsetstrokecolor{textcolor}%
    234234\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}\)}%
    236236\end{pgfscope}%
    237237\begin{pgfscope}%
     
    258258\pgfsetstrokecolor{textcolor}%
    259259\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}\)}%
    261261\end{pgfscope}%
    262262\begin{pgfscope}%
     
    283283\pgfsetstrokecolor{textcolor}%
    284284\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}\)}%
    286286\end{pgfscope}%
    287287\begin{pgfscope}%
     
    308308\pgfsetstrokecolor{textcolor}%
    309309\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}\)}%
    311311\end{pgfscope}%
    312312\begin{pgfscope}%
     
    333333\pgfsetstrokecolor{textcolor}%
    334334\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}\)}%
    336336\end{pgfscope}%
    337337\begin{pgfscope}%
     
    11941194\pgfsetstrokecolor{textcolor}%
    11951195\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)}%
    11971197\end{pgfscope}%
    11981198\begin{pgfscope}%
     
    18571857\pgfusepath{clip}%
    18581858\pgfsetbuttcap%
    1859 \pgfsetroundjoin%
     1859\pgfsetmiterjoin%
    18601860\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
    18611861\pgfsetfillcolor{currentfill}%
     
    18641864\pgfsetstrokecolor{currentstroke}%
    18651865\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}}%
    18761872\pgfpathclose%
    18771873\pgfusepath{stroke,fill}%
     
    19231919\pgfusepath{clip}%
    19241920\pgfsetbuttcap%
    1925 \pgfsetroundjoin%
     1921\pgfsetmiterjoin%
    19261922\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    19271923\pgfsetfillcolor{currentfill}%
     
    19311927\pgfsetdash{}{0pt}%
    19321928\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}}%
    19421932\pgfpathclose%
    19431933\pgfusepath{stroke,fill}%
     
    19891979\pgfusepath{clip}%
    19901980\pgfsetbuttcap%
    1991 \pgfsetroundjoin%
     1981\pgfsetmiterjoin%
    19921982\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
    19931983\pgfsetfillcolor{currentfill}%
     
    19961986\pgfsetstrokecolor{currentstroke}%
    19971987\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}}%
    20081995\pgfpathclose%
    20091996\pgfusepath{stroke,fill}%
     
    20552042\pgfusepath{clip}%
    20562043\pgfsetbuttcap%
    2057 \pgfsetroundjoin%
     2044\pgfsetbeveljoin%
    20582045\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
    20592046\pgfsetfillcolor{currentfill}%
     
    20622049\pgfsetstrokecolor{currentstroke}%
    20632050\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}}%
    20742062\pgfpathclose%
    20752063\pgfusepath{stroke,fill}%
     
    21482136\pgfsetstrokecolor{textcolor}%
    21492137\pgfsetfillcolor{textcolor}%
    2150 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{12.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}%
    21512139\end{pgfscope}%
    21522140\begin{pgfscope}%
     
    21612149\pgfsetstrokeopacity{0.800000}%
    21622150\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}}%
    21722160\pgfpathclose%
    21732161\pgfusepath{stroke,fill}%
     
    21802168\pgfsetstrokecolor{currentstroke}%
    21812169\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}}%
    21842172\pgfusepath{stroke}%
    21852173\end{pgfscope}%
     
    21992187}%
    22002188\begin{pgfscope}%
    2201 \pgfsys@transformshift{1.063889in}{1.240191in}%
     2189\pgfsys@transformshift{3.869368in}{2.769364in}%
    22022190\pgfsys@useobject{currentmarker}{}%
    22032191\end{pgfscope}%
     
    22182206}%
    22192207\begin{pgfscope}%
    2220 \pgfsys@transformshift{1.063889in}{1.379080in}%
     2208\pgfsys@transformshift{3.869368in}{2.991586in}%
    22212209\pgfsys@useobject{currentmarker}{}%
    22222210\end{pgfscope}%
     
    22292217\pgfsetstrokecolor{currentstroke}%
    22302218\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 \pgfsetroundjoin%
     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%
    22382226\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
    22392227\pgfsetfillcolor{currentfill}%
     
    22422230\pgfsetstrokecolor{currentstroke}%
    22432231\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}}%
    22542238\pgfpathclose%
    22552239\pgfusepath{stroke,fill}%
    22562240}%
    22572241\begin{pgfscope}%
    2258 \pgfsys@transformshift{1.063889in}{1.309636in}%
     2242\pgfsys@transformshift{3.869368in}{2.880475in}%
    22592243\pgfsys@useobject{currentmarker}{}%
    22602244\end{pgfscope}%
     
    22642248\pgfsetstrokecolor{textcolor}%
    22652249\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}%
    22672251\end{pgfscope}%
    22682252\begin{pgfscope}%
     
    22732257\pgfsetstrokecolor{currentstroke}%
    22742258\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}}%
    22772261\pgfusepath{stroke}%
    22782262\end{pgfscope}%
     
    22922276}%
    22932277\begin{pgfscope}%
    2294 \pgfsys@transformshift{1.063889in}{1.046518in}%
     2278\pgfsys@transformshift{3.869368in}{2.444904in}%
    22952279\pgfsys@useobject{currentmarker}{}%
    22962280\end{pgfscope}%
     
    23112295}%
    23122296\begin{pgfscope}%
    2313 \pgfsys@transformshift{1.063889in}{1.185407in}%
     2297\pgfsys@transformshift{3.869368in}{2.667126in}%
    23142298\pgfsys@useobject{currentmarker}{}%
    23152299\end{pgfscope}%
     
    23222306\pgfsetstrokecolor{currentstroke}%
    23232307\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 \pgfsetroundjoin%
     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%
    23312315\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    23322316\pgfsetfillcolor{currentfill}%
     
    23362320\pgfsetdash{}{0pt}%
    23372321\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}}%
    23472325\pgfpathclose%
    23482326\pgfusepath{stroke,fill}%
    23492327}%
    23502328\begin{pgfscope}%
    2351 \pgfsys@transformshift{1.063889in}{1.115963in}%
     2329\pgfsys@transformshift{3.869368in}{2.556015in}%
    23522330\pgfsys@useobject{currentmarker}{}%
    23532331\end{pgfscope}%
     
    23572335\pgfsetstrokecolor{textcolor}%
    23582336\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}%
    23602338\end{pgfscope}%
    23612339\begin{pgfscope}%
     
    23662344\pgfsetstrokecolor{currentstroke}%
    23672345\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}}%
    23702348\pgfusepath{stroke}%
    23712349\end{pgfscope}%
     
    23852363}%
    23862364\begin{pgfscope}%
    2387 \pgfsys@transformshift{1.063889in}{0.852846in}%
     2365\pgfsys@transformshift{3.869368in}{2.120444in}%
    23882366\pgfsys@useobject{currentmarker}{}%
    23892367\end{pgfscope}%
     
    24042382}%
    24052383\begin{pgfscope}%
    2406 \pgfsys@transformshift{1.063889in}{0.991734in}%
     2384\pgfsys@transformshift{3.869368in}{2.342667in}%
    24072385\pgfsys@useobject{currentmarker}{}%
    24082386\end{pgfscope}%
     
    24152393\pgfsetstrokecolor{currentstroke}%
    24162394\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 \pgfsetroundjoin%
     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%
    24242402\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
    24252403\pgfsetfillcolor{currentfill}%
     
    24282406\pgfsetstrokecolor{currentstroke}%
    24292407\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}}%
    24402415\pgfpathclose%
    24412416\pgfusepath{stroke,fill}%
    24422417}%
    24432418\begin{pgfscope}%
    2444 \pgfsys@transformshift{1.063889in}{0.922290in}%
     2419\pgfsys@transformshift{3.869368in}{2.231556in}%
    24452420\pgfsys@useobject{currentmarker}{}%
    24462421\end{pgfscope}%
     
    24502425\pgfsetstrokecolor{textcolor}%
    24512426\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}%
    24532428\end{pgfscope}%
    24542429\begin{pgfscope}%
     
    24592434\pgfsetstrokecolor{currentstroke}%
    24602435\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}}%
    24632438\pgfusepath{stroke}%
    24642439\end{pgfscope}%
     
    24782453}%
    24792454\begin{pgfscope}%
    2480 \pgfsys@transformshift{1.063889in}{0.659173in}%
     2455\pgfsys@transformshift{3.869368in}{1.795985in}%
    24812456\pgfsys@useobject{currentmarker}{}%
    24822457\end{pgfscope}%
     
    24972472}%
    24982473\begin{pgfscope}%
    2499 \pgfsys@transformshift{1.063889in}{0.798062in}%
     2474\pgfsys@transformshift{3.869368in}{2.018207in}%
    25002475\pgfsys@useobject{currentmarker}{}%
    25012476\end{pgfscope}%
     
    25082483\pgfsetstrokecolor{currentstroke}%
    25092484\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 \pgfsetroundjoin%
     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%
    25172492\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
    25182493\pgfsetfillcolor{currentfill}%
     
    25212496\pgfsetstrokecolor{currentstroke}%
    25222497\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}}%
    25332509\pgfpathclose%
    25342510\pgfusepath{stroke,fill}%
    25352511}%
    25362512\begin{pgfscope}%
    2537 \pgfsys@transformshift{1.063889in}{0.728617in}%
     2513\pgfsys@transformshift{3.869368in}{1.907096in}%
    25382514\pgfsys@useobject{currentmarker}{}%
    25392515\end{pgfscope}%
     
    25432519\pgfsetstrokecolor{textcolor}%
    25442520\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}%
    25462522\end{pgfscope}%
    25472523\end{pgfpicture}%
  • doc/theses/colby_parsons_MMAth/figures/nasus_Aggregate_Lock_8.pgf

    r6e4c44d r3982384  
    7777\pgfsetstrokecolor{textcolor}%
    7878\pgfsetfillcolor{textcolor}%
    79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    8080\end{pgfscope}%
    8181\begin{pgfscope}%
     
    102102\pgfsetstrokecolor{textcolor}%
    103103\pgfsetfillcolor{textcolor}%
    104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    105105\end{pgfscope}%
    106106\begin{pgfscope}%
     
    127127\pgfsetstrokecolor{textcolor}%
    128128\pgfsetfillcolor{textcolor}%
    129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    130130\end{pgfscope}%
    131131\begin{pgfscope}%
     
    152152\pgfsetstrokecolor{textcolor}%
    153153\pgfsetfillcolor{textcolor}%
    154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    155155\end{pgfscope}%
    156156\begin{pgfscope}%
     
    177177\pgfsetstrokecolor{textcolor}%
    178178\pgfsetfillcolor{textcolor}%
    179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    180180\end{pgfscope}%
    181181\begin{pgfscope}%
     
    202202\pgfsetstrokecolor{textcolor}%
    203203\pgfsetfillcolor{textcolor}%
    204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    205205\end{pgfscope}%
    206206\begin{pgfscope}%
     
    208208\pgfsetstrokecolor{textcolor}%
    209209\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}%
    211211\end{pgfscope}%
    212212\begin{pgfscope}%
     
    233233\pgfsetstrokecolor{textcolor}%
    234234\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}\)}%
    236236\end{pgfscope}%
    237237\begin{pgfscope}%
     
    258258\pgfsetstrokecolor{textcolor}%
    259259\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}\)}%
    261261\end{pgfscope}%
    262262\begin{pgfscope}%
     
    283283\pgfsetstrokecolor{textcolor}%
    284284\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}\)}%
    286286\end{pgfscope}%
    287287\begin{pgfscope}%
     
    308308\pgfsetstrokecolor{textcolor}%
    309309\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}\)}%
    311311\end{pgfscope}%
    312312\begin{pgfscope}%
     
    333333\pgfsetstrokecolor{textcolor}%
    334334\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}\)}%
    336336\end{pgfscope}%
    337337\begin{pgfscope}%
     
    358358\pgfsetstrokecolor{textcolor}%
    359359\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}\)}%
    361361\end{pgfscope}%
    362362\begin{pgfscope}%
     
    12381238\pgfsetstrokecolor{textcolor}%
    12391239\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)}%
    12411241\end{pgfscope}%
    12421242\begin{pgfscope}%
     
    19011901\pgfusepath{clip}%
    19021902\pgfsetbuttcap%
    1903 \pgfsetroundjoin%
     1903\pgfsetmiterjoin%
    19041904\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
    19051905\pgfsetfillcolor{currentfill}%
    19061906\pgfsetlinewidth{1.003750pt}%
    19071907\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}%
    19081968\pgfsetstrokecolor{currentstroke}%
    19091969\pgfsetdash{}{0pt}%
     
    19221982}%
    19231983\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}%
    19452005\pgfsys@useobject{currentmarker}{}%
    19462006\end{pgfscope}%
     
    19522012\pgfsetroundjoin%
    19532013\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}%
    19542294\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    19552295\pgfsetstrokecolor{currentstroke}%
    19562296\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}%
    19682351\pgfsetbuttcap%
    19692352\pgfsetroundjoin%
     
    19882371}%
    19892372\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}%
    21892376\end{pgfscope}%
    21902377\begin{pgfscope}%
     
    21922379\pgfsetstrokecolor{textcolor}%
    21932380\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}%
    22022399\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}%
    22372401\pgfsetstrokecolor{currentstroke}%
    22382402\pgfsetdash{}{0pt}%
     
    22432407}%
    22442408\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.121569,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}%
    22532417\pgfsetfillcolor{currentfill}%
    22542418\pgfsetlinewidth{1.003750pt}%
    2255 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
     2419\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
    22562420\pgfsetstrokecolor{currentstroke}%
    22572421\pgfsetdash{}{0pt}%
     
    22622426}%
    22632427\begin{pgfscope}%
    2264 \pgfsys@transformshift{4.570184in}{2.749457in}%
     2428\pgfsys@transformshift{3.869368in}{2.342667in}%
    22652429\pgfsys@useobject{currentmarker}{}%
    22662430\end{pgfscope}%
     
    22702434\pgfsetroundjoin%
    22712435\pgfsetlinewidth{1.505625pt}%
    2272 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
    2273 \pgfsetstrokecolor{currentstroke}%
    2274 \pgfsetdash{}{0pt}%
    2275 \pgfpathmoveto{\pgfqpoint{4.431295in}{2.680012in}}%
    2276 \pgfpathlineto{\pgfqpoint{4.709073in}{2.680012in}}%
    2277 \pgfusepath{stroke}%
    2278 \end{pgfscope}%
    2279 \begin{pgfscope}%
    2280 \pgfsetbuttcap%
    2281 \pgfsetroundjoin%
    2282 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
     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}%
    22832447\pgfsetfillcolor{currentfill}%
    22842448\pgfsetlinewidth{1.003750pt}%
    2285 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
     2449\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
    22862450\pgfsetstrokecolor{currentstroke}%
    22872451\pgfsetdash{}{0pt}%
    22882452\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}}%
    22982457\pgfpathclose%
    22992458\pgfusepath{stroke,fill}%
    23002459}%
    23012460\begin{pgfscope}%
    2302 \pgfsys@transformshift{4.570184in}{2.680012in}%
     2461\pgfsys@transformshift{3.869368in}{2.231556in}%
    23032462\pgfsys@useobject{currentmarker}{}%
    23042463\end{pgfscope}%
     
    23082467\pgfsetstrokecolor{textcolor}%
    23092468\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}%
    23272486\pgfsetfillcolor{currentfill}%
    23282487\pgfsetlinewidth{1.003750pt}%
    2329 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     2488\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
    23302489\pgfsetstrokecolor{currentstroke}%
    23312490\pgfsetdash{}{0pt}%
     
    23362495}%
    23372496\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}%
    23462505\pgfsetfillcolor{currentfill}%
    23472506\pgfsetlinewidth{1.003750pt}%
    2348 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     2507\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
    23492508\pgfsetstrokecolor{currentstroke}%
    23502509\pgfsetdash{}{0pt}%
     
    23552514}%
    23562515\begin{pgfscope}%
    2357 \pgfsys@transformshift{4.570184in}{2.555784in}%
     2516\pgfsys@transformshift{3.869368in}{2.018207in}%
    23582517\pgfsys@useobject{currentmarker}{}%
    23592518\end{pgfscope}%
     
    23632522\pgfsetroundjoin%
    23642523\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 \pgfsetroundjoin%
    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}%
    23762535\pgfsetfillcolor{currentfill}%
    23772536\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}}%
    23912545\pgfpathclose%
    23922546\pgfusepath{stroke,fill}%
    23932547}%
    23942548\begin{pgfscope}%
    2395 \pgfsys@transformshift{4.570184in}{2.486339in}%
     2549\pgfsys@transformshift{3.869368in}{1.907096in}%
    23962550\pgfsys@useobject{currentmarker}{}%
    23972551\end{pgfscope}%
     
    24012555\pgfsetstrokecolor{textcolor}%
    24022556\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}%
    25902558\end{pgfscope}%
    25912559\end{pgfpicture}%
  • doc/theses/colby_parsons_MMAth/figures/nasus_Channel_Contention.pgf

    r6e4c44d r3982384  
    7777\pgfsetstrokecolor{textcolor}%
    7878\pgfsetfillcolor{textcolor}%
    79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    8080\end{pgfscope}%
    8181\begin{pgfscope}%
     
    102102\pgfsetstrokecolor{textcolor}%
    103103\pgfsetfillcolor{textcolor}%
    104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    105105\end{pgfscope}%
    106106\begin{pgfscope}%
     
    127127\pgfsetstrokecolor{textcolor}%
    128128\pgfsetfillcolor{textcolor}%
    129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    130130\end{pgfscope}%
    131131\begin{pgfscope}%
     
    152152\pgfsetstrokecolor{textcolor}%
    153153\pgfsetfillcolor{textcolor}%
    154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    155155\end{pgfscope}%
    156156\begin{pgfscope}%
     
    177177\pgfsetstrokecolor{textcolor}%
    178178\pgfsetfillcolor{textcolor}%
    179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    180180\end{pgfscope}%
    181181\begin{pgfscope}%
     
    202202\pgfsetstrokecolor{textcolor}%
    203203\pgfsetfillcolor{textcolor}%
    204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    205205\end{pgfscope}%
    206206\begin{pgfscope}%
     
    208208\pgfsetstrokecolor{textcolor}%
    209209\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}%
    211211\end{pgfscope}%
    212212\begin{pgfscope}%
     
    233233\pgfsetstrokecolor{textcolor}%
    234234\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}\)}%
    236236\end{pgfscope}%
    237237\begin{pgfscope}%
     
    467467\pgfsetstrokecolor{textcolor}%
    468468\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)}%
    470470\end{pgfscope}%
    471471\begin{pgfscope}%
     
    876876\pgfusepath{clip}%
    877877\pgfsetbuttcap%
    878 \pgfsetroundjoin%
     878\pgfsetmiterjoin%
    879879\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    880880\pgfsetfillcolor{currentfill}%
    881881\pgfsetlinewidth{1.003750pt}%
    882882\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}%
    8831058\pgfsetstrokecolor{currentstroke}%
    8841059\pgfsetdash{}{0pt}%
     
    8971072}%
    8981073\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}%
    9661077\end{pgfscope}%
    9671078\begin{pgfscope}%
     
    9691080\pgfsetstrokecolor{textcolor}%
    9701081\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}%
    10141102\pgfsetstrokecolor{currentstroke}%
    10151103\pgfsetdash{}{0pt}%
     
    10201108}%
    10211109\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}%
    10331121\pgfsetstrokecolor{currentstroke}%
    10341122\pgfsetdash{}{0pt}%
     
    10391127}%
    10401128\begin{pgfscope}%
    1041 \pgfsys@transformshift{5.105293in}{4.119833in}%
     1129\pgfsys@transformshift{4.713959in}{3.721763in}%
    10421130\pgfsys@useobject{currentmarker}{}%
    10431131\end{pgfscope}%
     
    10471135\pgfsetroundjoin%
    10481136\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 \pgfsetroundjoin%
    1059 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
    1060 \pgfsetfillcolor{currentfill}%
    1061 \pgfsetlinewidth{1.003750pt}%
    1062 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
     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}%
    10631151\pgfsetstrokecolor{currentstroke}%
    10641152\pgfsetdash{}{0pt}%
    10651153\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}}%
    10751158\pgfpathclose%
    10761159\pgfusepath{stroke,fill}%
    10771160}%
    10781161\begin{pgfscope}%
    1079 \pgfsys@transformshift{5.105293in}{4.050389in}%
     1162\pgfsys@transformshift{4.713959in}{3.610651in}%
    10801163\pgfsys@useobject{currentmarker}{}%
    10811164\end{pgfscope}%
     
    10851168\pgfsetstrokecolor{textcolor}%
    10861169\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}%
    11811171\end{pgfscope}%
    11821172\end{pgfpicture}%
  • doc/theses/colby_parsons_MMAth/figures/pyke_Aggregate_Lock_2.pgf

    r6e4c44d r3982384  
    7777\pgfsetstrokecolor{textcolor}%
    7878\pgfsetfillcolor{textcolor}%
    79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    8080\end{pgfscope}%
    8181\begin{pgfscope}%
     
    102102\pgfsetstrokecolor{textcolor}%
    103103\pgfsetfillcolor{textcolor}%
    104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    105105\end{pgfscope}%
    106106\begin{pgfscope}%
     
    127127\pgfsetstrokecolor{textcolor}%
    128128\pgfsetfillcolor{textcolor}%
    129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    130130\end{pgfscope}%
    131131\begin{pgfscope}%
     
    152152\pgfsetstrokecolor{textcolor}%
    153153\pgfsetfillcolor{textcolor}%
    154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    155155\end{pgfscope}%
    156156\begin{pgfscope}%
     
    177177\pgfsetstrokecolor{textcolor}%
    178178\pgfsetfillcolor{textcolor}%
    179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    180180\end{pgfscope}%
    181181\begin{pgfscope}%
     
    202202\pgfsetstrokecolor{textcolor}%
    203203\pgfsetfillcolor{textcolor}%
    204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    205205\end{pgfscope}%
    206206\begin{pgfscope}%
     
    208208\pgfsetstrokecolor{textcolor}%
    209209\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}%
    211211\end{pgfscope}%
    212212\begin{pgfscope}%
     
    233233\pgfsetstrokecolor{textcolor}%
    234234\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}\)}%
    236236\end{pgfscope}%
    237237\begin{pgfscope}%
     
    258258\pgfsetstrokecolor{textcolor}%
    259259\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}\)}%
    261261\end{pgfscope}%
    262262\begin{pgfscope}%
     
    283283\pgfsetstrokecolor{textcolor}%
    284284\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}\)}%
    286286\end{pgfscope}%
    287287\begin{pgfscope}%
     
    707707\pgfsetstrokecolor{textcolor}%
    708708\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)}%
    710710\end{pgfscope}%
    711711\begin{pgfscope}%
     
    14361436\pgfusepath{clip}%
    14371437\pgfsetbuttcap%
    1438 \pgfsetroundjoin%
     1438\pgfsetmiterjoin%
    14391439\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    14401440\pgfsetfillcolor{currentfill}%
    14411441\pgfsetlinewidth{1.003750pt}%
    14421442\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}%
    14431739\pgfsetstrokecolor{currentstroke}%
    14441740\pgfsetdash{}{0pt}%
     
    14571753}%
    14581754\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}%
    16581758\end{pgfscope}%
    16591759\begin{pgfscope}%
     
    16611761\pgfsetstrokecolor{textcolor}%
    16621762\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}%
    17061783\pgfsetstrokecolor{currentstroke}%
    17071784\pgfsetdash{}{0pt}%
     
    17121789}%
    17131790\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}%
    17251802\pgfsetstrokecolor{currentstroke}%
    17261803\pgfsetdash{}{0pt}%
     
    17311808}%
    17321809\begin{pgfscope}%
    1733 \pgfsys@transformshift{4.570184in}{4.119833in}%
     1810\pgfsys@transformshift{1.222222in}{1.612490in}%
    17341811\pgfsys@useobject{currentmarker}{}%
    17351812\end{pgfscope}%
     
    17391816\pgfsetroundjoin%
    17401817\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 \pgfsetroundjoin%
    1751 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
    1752 \pgfsetfillcolor{currentfill}%
    1753 \pgfsetlinewidth{1.003750pt}%
    1754 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
     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}%
    17551832\pgfsetstrokecolor{currentstroke}%
    17561833\pgfsetdash{}{0pt}%
    17571834\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}}%
    17671839\pgfpathclose%
    17681840\pgfusepath{stroke,fill}%
    17691841}%
    17701842\begin{pgfscope}%
    1771 \pgfsys@transformshift{4.570184in}{4.050389in}%
     1843\pgfsys@transformshift{1.222222in}{1.501379in}%
    17721844\pgfsys@useobject{currentmarker}{}%
    17731845\end{pgfscope}%
     
    17771849\pgfsetstrokecolor{textcolor}%
    17781850\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}%
    17991871\pgfsetstrokecolor{currentstroke}%
    18001872\pgfsetdash{}{0pt}%
     
    18051877}%
    18061878\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}%
    18181890\pgfsetstrokecolor{currentstroke}%
    18191891\pgfsetdash{}{0pt}%
     
    18241896}%
    18251897\begin{pgfscope}%
    1826 \pgfsys@transformshift{4.570184in}{3.926161in}%
     1898\pgfsys@transformshift{1.222222in}{1.288031in}%
    18271899\pgfsys@useobject{currentmarker}{}%
    18281900\end{pgfscope}%
     
    18321904\pgfsetroundjoin%
    18331905\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}}%
    18601927\pgfpathclose%
    18611928\pgfusepath{stroke,fill}%
    18621929}%
    18631930\begin{pgfscope}%
    1864 \pgfsys@transformshift{4.570184in}{3.856716in}%
     1931\pgfsys@transformshift{1.222222in}{1.176919in}%
    18651932\pgfsys@useobject{currentmarker}{}%
    18661933\end{pgfscope}%
     
    18701937\pgfsetstrokecolor{textcolor}%
    18711938\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}%
    18921959\pgfsetstrokecolor{currentstroke}%
    18931960\pgfsetdash{}{0pt}%
     
    18981965}%
    18991966\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}%
    19111978\pgfsetstrokecolor{currentstroke}%
    19121979\pgfsetdash{}{0pt}%
     
    19171984}%
    19181985\begin{pgfscope}%
    1919 \pgfsys@transformshift{4.570184in}{3.732488in}%
     1986\pgfsys@transformshift{1.222222in}{0.963571in}%
    19201987\pgfsys@useobject{currentmarker}{}%
    19211988\end{pgfscope}%
     
    19251992\pgfsetroundjoin%
    19261993\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}%
    19412008\pgfsetstrokecolor{currentstroke}%
    19422009\pgfsetdash{}{0pt}%
    19432010\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}%
    19582019\pgfsys@useobject{currentmarker}{}%
    19592020\end{pgfscope}%
     
    19632024\pgfsetstrokecolor{textcolor}%
    19642025\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}%
    20592027\end{pgfscope}%
    20602028\end{pgfpicture}%
  • doc/theses/colby_parsons_MMAth/figures/pyke_Aggregate_Lock_4.pgf

    r6e4c44d r3982384  
    7777\pgfsetstrokecolor{textcolor}%
    7878\pgfsetfillcolor{textcolor}%
    79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    8080\end{pgfscope}%
    8181\begin{pgfscope}%
     
    102102\pgfsetstrokecolor{textcolor}%
    103103\pgfsetfillcolor{textcolor}%
    104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    105105\end{pgfscope}%
    106106\begin{pgfscope}%
     
    127127\pgfsetstrokecolor{textcolor}%
    128128\pgfsetfillcolor{textcolor}%
    129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    130130\end{pgfscope}%
    131131\begin{pgfscope}%
     
    152152\pgfsetstrokecolor{textcolor}%
    153153\pgfsetfillcolor{textcolor}%
    154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    155155\end{pgfscope}%
    156156\begin{pgfscope}%
     
    177177\pgfsetstrokecolor{textcolor}%
    178178\pgfsetfillcolor{textcolor}%
    179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    180180\end{pgfscope}%
    181181\begin{pgfscope}%
     
    202202\pgfsetstrokecolor{textcolor}%
    203203\pgfsetfillcolor{textcolor}%
    204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    205205\end{pgfscope}%
    206206\begin{pgfscope}%
     
    208208\pgfsetstrokecolor{textcolor}%
    209209\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}%
    211211\end{pgfscope}%
    212212\begin{pgfscope}%
     
    233233\pgfsetstrokecolor{textcolor}%
    234234\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}\)}%
    236236\end{pgfscope}%
    237237\begin{pgfscope}%
     
    258258\pgfsetstrokecolor{textcolor}%
    259259\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}\)}%
    261261\end{pgfscope}%
    262262\begin{pgfscope}%
     
    283283\pgfsetstrokecolor{textcolor}%
    284284\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}\)}%
    286286\end{pgfscope}%
    287287\begin{pgfscope}%
     
    308308\pgfsetstrokecolor{textcolor}%
    309309\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}\)}%
    311311\end{pgfscope}%
    312312\begin{pgfscope}%
     
    333333\pgfsetstrokecolor{textcolor}%
    334334\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}\)}%
    336336\end{pgfscope}%
    337337\begin{pgfscope}%
     
    358358\pgfsetstrokecolor{textcolor}%
    359359\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}\)}%
    361361\end{pgfscope}%
    362362\begin{pgfscope}%
     
    11811181\pgfsetstrokecolor{textcolor}%
    11821182\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)}%
    11841184\end{pgfscope}%
    11851185\begin{pgfscope}%
     
    18441844\pgfusepath{clip}%
    18451845\pgfsetbuttcap%
    1846 \pgfsetroundjoin%
     1846\pgfsetmiterjoin%
    18471847\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
    18481848\pgfsetfillcolor{currentfill}%
     
    18511851\pgfsetstrokecolor{currentstroke}%
    18521852\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}}%
    18631859\pgfpathclose%
    18641860\pgfusepath{stroke,fill}%
     
    19101906\pgfusepath{clip}%
    19111907\pgfsetbuttcap%
    1912 \pgfsetroundjoin%
     1908\pgfsetmiterjoin%
    19131909\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    19141910\pgfsetfillcolor{currentfill}%
     
    19181914\pgfsetdash{}{0pt}%
    19191915\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}}%
    19291919\pgfpathclose%
    19301920\pgfusepath{stroke,fill}%
     
    19761966\pgfusepath{clip}%
    19771967\pgfsetbuttcap%
    1978 \pgfsetroundjoin%
     1968\pgfsetmiterjoin%
    19791969\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
    19801970\pgfsetfillcolor{currentfill}%
     
    19831973\pgfsetstrokecolor{currentstroke}%
    19841974\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}}%
    19951982\pgfpathclose%
    19961983\pgfusepath{stroke,fill}%
     
    20422029\pgfusepath{clip}%
    20432030\pgfsetbuttcap%
    2044 \pgfsetroundjoin%
     2031\pgfsetbeveljoin%
    20452032\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
    20462033\pgfsetfillcolor{currentfill}%
     
    20492036\pgfsetstrokecolor{currentstroke}%
    20502037\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}}%
    20612049\pgfpathclose%
    20622050\pgfusepath{stroke,fill}%
     
    21352123\pgfsetstrokecolor{textcolor}%
    21362124\pgfsetfillcolor{textcolor}%
    2137 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{12.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}%
    21382126\end{pgfscope}%
    21392127\begin{pgfscope}%
     
    21482136\pgfsetstrokeopacity{0.800000}%
    21492137\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}}%
    21592147\pgfpathclose%
    21602148\pgfusepath{stroke,fill}%
     
    21672155\pgfsetstrokecolor{currentstroke}%
    21682156\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}}%
    21712159\pgfusepath{stroke}%
    21722160\end{pgfscope}%
     
    21862174}%
    21872175\begin{pgfscope}%
    2188 \pgfsys@transformshift{1.063889in}{1.240191in}%
     2176\pgfsys@transformshift{3.869368in}{2.769364in}%
    21892177\pgfsys@useobject{currentmarker}{}%
    21902178\end{pgfscope}%
     
    22052193}%
    22062194\begin{pgfscope}%
    2207 \pgfsys@transformshift{1.063889in}{1.379080in}%
     2195\pgfsys@transformshift{3.869368in}{2.991586in}%
    22082196\pgfsys@useobject{currentmarker}{}%
    22092197\end{pgfscope}%
     
    22162204\pgfsetstrokecolor{currentstroke}%
    22172205\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 \pgfsetroundjoin%
     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%
    22252213\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
    22262214\pgfsetfillcolor{currentfill}%
     
    22292217\pgfsetstrokecolor{currentstroke}%
    22302218\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}}%
    22412225\pgfpathclose%
    22422226\pgfusepath{stroke,fill}%
    22432227}%
    22442228\begin{pgfscope}%
    2245 \pgfsys@transformshift{1.063889in}{1.309636in}%
     2229\pgfsys@transformshift{3.869368in}{2.880475in}%
    22462230\pgfsys@useobject{currentmarker}{}%
    22472231\end{pgfscope}%
     
    22512235\pgfsetstrokecolor{textcolor}%
    22522236\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}%
    22542238\end{pgfscope}%
    22552239\begin{pgfscope}%
     
    22602244\pgfsetstrokecolor{currentstroke}%
    22612245\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}}%
    22642248\pgfusepath{stroke}%
    22652249\end{pgfscope}%
     
    22792263}%
    22802264\begin{pgfscope}%
    2281 \pgfsys@transformshift{1.063889in}{1.046518in}%
     2265\pgfsys@transformshift{3.869368in}{2.444904in}%
    22822266\pgfsys@useobject{currentmarker}{}%
    22832267\end{pgfscope}%
     
    22982282}%
    22992283\begin{pgfscope}%
    2300 \pgfsys@transformshift{1.063889in}{1.185407in}%
     2284\pgfsys@transformshift{3.869368in}{2.667126in}%
    23012285\pgfsys@useobject{currentmarker}{}%
    23022286\end{pgfscope}%
     
    23092293\pgfsetstrokecolor{currentstroke}%
    23102294\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 \pgfsetroundjoin%
     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%
    23182302\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    23192303\pgfsetfillcolor{currentfill}%
     
    23232307\pgfsetdash{}{0pt}%
    23242308\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}}%
    23342312\pgfpathclose%
    23352313\pgfusepath{stroke,fill}%
    23362314}%
    23372315\begin{pgfscope}%
    2338 \pgfsys@transformshift{1.063889in}{1.115963in}%
     2316\pgfsys@transformshift{3.869368in}{2.556015in}%
    23392317\pgfsys@useobject{currentmarker}{}%
    23402318\end{pgfscope}%
     
    23442322\pgfsetstrokecolor{textcolor}%
    23452323\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}%
    23472325\end{pgfscope}%
    23482326\begin{pgfscope}%
     
    23532331\pgfsetstrokecolor{currentstroke}%
    23542332\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}}%
    23572335\pgfusepath{stroke}%
    23582336\end{pgfscope}%
     
    23722350}%
    23732351\begin{pgfscope}%
    2374 \pgfsys@transformshift{1.063889in}{0.852846in}%
     2352\pgfsys@transformshift{3.869368in}{2.120444in}%
    23752353\pgfsys@useobject{currentmarker}{}%
    23762354\end{pgfscope}%
     
    23912369}%
    23922370\begin{pgfscope}%
    2393 \pgfsys@transformshift{1.063889in}{0.991734in}%
     2371\pgfsys@transformshift{3.869368in}{2.342667in}%
    23942372\pgfsys@useobject{currentmarker}{}%
    23952373\end{pgfscope}%
     
    24022380\pgfsetstrokecolor{currentstroke}%
    24032381\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 \pgfsetroundjoin%
     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%
    24112389\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
    24122390\pgfsetfillcolor{currentfill}%
     
    24152393\pgfsetstrokecolor{currentstroke}%
    24162394\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}}%
    24272402\pgfpathclose%
    24282403\pgfusepath{stroke,fill}%
    24292404}%
    24302405\begin{pgfscope}%
    2431 \pgfsys@transformshift{1.063889in}{0.922290in}%
     2406\pgfsys@transformshift{3.869368in}{2.231556in}%
    24322407\pgfsys@useobject{currentmarker}{}%
    24332408\end{pgfscope}%
     
    24372412\pgfsetstrokecolor{textcolor}%
    24382413\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}%
    24402415\end{pgfscope}%
    24412416\begin{pgfscope}%
     
    24462421\pgfsetstrokecolor{currentstroke}%
    24472422\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}}%
    24502425\pgfusepath{stroke}%
    24512426\end{pgfscope}%
     
    24652440}%
    24662441\begin{pgfscope}%
    2467 \pgfsys@transformshift{1.063889in}{0.659173in}%
     2442\pgfsys@transformshift{3.869368in}{1.795985in}%
    24682443\pgfsys@useobject{currentmarker}{}%
    24692444\end{pgfscope}%
     
    24842459}%
    24852460\begin{pgfscope}%
    2486 \pgfsys@transformshift{1.063889in}{0.798062in}%
     2461\pgfsys@transformshift{3.869368in}{2.018207in}%
    24872462\pgfsys@useobject{currentmarker}{}%
    24882463\end{pgfscope}%
     
    24952470\pgfsetstrokecolor{currentstroke}%
    24962471\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 \pgfsetroundjoin%
     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%
    25042479\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
    25052480\pgfsetfillcolor{currentfill}%
     
    25082483\pgfsetstrokecolor{currentstroke}%
    25092484\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}}%
    25202496\pgfpathclose%
    25212497\pgfusepath{stroke,fill}%
    25222498}%
    25232499\begin{pgfscope}%
    2524 \pgfsys@transformshift{1.063889in}{0.728617in}%
     2500\pgfsys@transformshift{3.869368in}{1.907096in}%
    25252501\pgfsys@useobject{currentmarker}{}%
    25262502\end{pgfscope}%
     
    25302506\pgfsetstrokecolor{textcolor}%
    25312507\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}%
    25332509\end{pgfscope}%
    25342510\end{pgfpicture}%
  • doc/theses/colby_parsons_MMAth/figures/pyke_Aggregate_Lock_8.pgf

    r6e4c44d r3982384  
    7777\pgfsetstrokecolor{textcolor}%
    7878\pgfsetfillcolor{textcolor}%
    79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    8080\end{pgfscope}%
    8181\begin{pgfscope}%
     
    102102\pgfsetstrokecolor{textcolor}%
    103103\pgfsetfillcolor{textcolor}%
    104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    105105\end{pgfscope}%
    106106\begin{pgfscope}%
     
    127127\pgfsetstrokecolor{textcolor}%
    128128\pgfsetfillcolor{textcolor}%
    129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    130130\end{pgfscope}%
    131131\begin{pgfscope}%
     
    152152\pgfsetstrokecolor{textcolor}%
    153153\pgfsetfillcolor{textcolor}%
    154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    155155\end{pgfscope}%
    156156\begin{pgfscope}%
     
    177177\pgfsetstrokecolor{textcolor}%
    178178\pgfsetfillcolor{textcolor}%
    179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    180180\end{pgfscope}%
    181181\begin{pgfscope}%
     
    202202\pgfsetstrokecolor{textcolor}%
    203203\pgfsetfillcolor{textcolor}%
    204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    205205\end{pgfscope}%
    206206\begin{pgfscope}%
     
    208208\pgfsetstrokecolor{textcolor}%
    209209\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}%
    211211\end{pgfscope}%
    212212\begin{pgfscope}%
     
    233233\pgfsetstrokecolor{textcolor}%
    234234\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}\)}%
    236236\end{pgfscope}%
    237237\begin{pgfscope}%
     
    258258\pgfsetstrokecolor{textcolor}%
    259259\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}\)}%
    261261\end{pgfscope}%
    262262\begin{pgfscope}%
     
    283283\pgfsetstrokecolor{textcolor}%
    284284\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}\)}%
    286286\end{pgfscope}%
    287287\begin{pgfscope}%
     
    308308\pgfsetstrokecolor{textcolor}%
    309309\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}\)}%
    311311\end{pgfscope}%
    312312\begin{pgfscope}%
     
    333333\pgfsetstrokecolor{textcolor}%
    334334\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}\)}%
    336336\end{pgfscope}%
    337337\begin{pgfscope}%
     
    358358\pgfsetstrokecolor{textcolor}%
    359359\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}\)}%
    361361\end{pgfscope}%
    362362\begin{pgfscope}%
     
    12951295\pgfsetstrokecolor{textcolor}%
    12961296\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)}%
    12981298\end{pgfscope}%
    12991299\begin{pgfscope}%
     
    19581958\pgfusepath{clip}%
    19591959\pgfsetbuttcap%
    1960 \pgfsetroundjoin%
     1960\pgfsetmiterjoin%
    19611961\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
    19621962\pgfsetfillcolor{currentfill}%
    19631963\pgfsetlinewidth{1.003750pt}%
    19641964\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}%
    19652025\pgfsetstrokecolor{currentstroke}%
    19662026\pgfsetdash{}{0pt}%
     
    19792039}%
    19802040\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.802273in}%
    1986 \pgfsys@useobject{currentmarker}{}%
    1987 \end{pgfscope}%
    1988 \begin{pgfscope}%
    1989 \pgfsys@transformshift{1.927273in}{3.677930in}%
    1990 \pgfsys@useobject{currentmarker}{}%
    1991 \end{pgfscope}%
    1992 \begin{pgfscope}%
    1993 \pgfsys@transformshift{3.129697in}{3.534576in}%
    1994 \pgfsys@useobject{currentmarker}{}%
    1995 \end{pgfscope}%
    1996 \begin{pgfscope}%
    1997 \pgfsys@transformshift{4.332121in}{3.431799in}%
    1998 \pgfsys@useobject{currentmarker}{}%
    1999 \end{pgfscope}%
    2000 \begin{pgfscope}%
    2001 \pgfsys@transformshift{5.534545in}{3.440731in}%
     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}%
    20022062\pgfsys@useobject{currentmarker}{}%
    20032063\end{pgfscope}%
     
    20092069\pgfsetroundjoin%
    20102070\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}%
    20112351\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    20122352\pgfsetstrokecolor{currentstroke}%
    20132353\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}%
    20252408\pgfsetbuttcap%
    20262409\pgfsetroundjoin%
     
    20452428}%
    20462429\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}%
    22462433\end{pgfscope}%
    22472434\begin{pgfscope}%
     
    22492436\pgfsetstrokecolor{textcolor}%
    22502437\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}%
    22592456\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}%
    22942458\pgfsetstrokecolor{currentstroke}%
    22952459\pgfsetdash{}{0pt}%
     
    23002464}%
    23012465\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.121569,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}%
    23102474\pgfsetfillcolor{currentfill}%
    23112475\pgfsetlinewidth{1.003750pt}%
    2312 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
     2476\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
    23132477\pgfsetstrokecolor{currentstroke}%
    23142478\pgfsetdash{}{0pt}%
     
    23192483}%
    23202484\begin{pgfscope}%
    2321 \pgfsys@transformshift{1.063889in}{1.379080in}%
     2485\pgfsys@transformshift{3.869368in}{2.342667in}%
    23222486\pgfsys@useobject{currentmarker}{}%
    23232487\end{pgfscope}%
     
    23272491\pgfsetroundjoin%
    23282492\pgfsetlinewidth{1.505625pt}%
    2329 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
    2330 \pgfsetstrokecolor{currentstroke}%
    2331 \pgfsetdash{}{0pt}%
    2332 \pgfpathmoveto{\pgfqpoint{0.925000in}{1.309636in}}%
    2333 \pgfpathlineto{\pgfqpoint{1.202778in}{1.309636in}}%
    2334 \pgfusepath{stroke}%
    2335 \end{pgfscope}%
    2336 \begin{pgfscope}%
    2337 \pgfsetbuttcap%
    2338 \pgfsetroundjoin%
    2339 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
     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}%
    23402504\pgfsetfillcolor{currentfill}%
    23412505\pgfsetlinewidth{1.003750pt}%
    2342 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
     2506\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
    23432507\pgfsetstrokecolor{currentstroke}%
    23442508\pgfsetdash{}{0pt}%
    23452509\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}}%
    23552514\pgfpathclose%
    23562515\pgfusepath{stroke,fill}%
    23572516}%
    23582517\begin{pgfscope}%
    2359 \pgfsys@transformshift{1.063889in}{1.309636in}%
     2518\pgfsys@transformshift{3.869368in}{2.231556in}%
    23602519\pgfsys@useobject{currentmarker}{}%
    23612520\end{pgfscope}%
     
    23652524\pgfsetstrokecolor{textcolor}%
    23662525\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}%
    23842543\pgfsetfillcolor{currentfill}%
    23852544\pgfsetlinewidth{1.003750pt}%
    2386 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     2545\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
    23872546\pgfsetstrokecolor{currentstroke}%
    23882547\pgfsetdash{}{0pt}%
     
    23932552}%
    23942553\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}%
    24032562\pgfsetfillcolor{currentfill}%
    24042563\pgfsetlinewidth{1.003750pt}%
    2405 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     2564\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
    24062565\pgfsetstrokecolor{currentstroke}%
    24072566\pgfsetdash{}{0pt}%
     
    24122571}%
    24132572\begin{pgfscope}%
    2414 \pgfsys@transformshift{1.063889in}{1.185407in}%
     2573\pgfsys@transformshift{3.869368in}{2.018207in}%
    24152574\pgfsys@useobject{currentmarker}{}%
    24162575\end{pgfscope}%
     
    24202579\pgfsetroundjoin%
    24212580\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 \pgfsetroundjoin%
    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}%
    24332592\pgfsetfillcolor{currentfill}%
    24342593\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}}%
    24482602\pgfpathclose%
    24492603\pgfusepath{stroke,fill}%
    24502604}%
    24512605\begin{pgfscope}%
    2452 \pgfsys@transformshift{1.063889in}{1.115963in}%
     2606\pgfsys@transformshift{3.869368in}{1.907096in}%
    24532607\pgfsys@useobject{currentmarker}{}%
    24542608\end{pgfscope}%
     
    24582612\pgfsetstrokecolor{textcolor}%
    24592613\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}%
    26472615\end{pgfscope}%
    26482616\end{pgfpicture}%
  • doc/theses/colby_parsons_MMAth/figures/pyke_Channel_Contention.pgf

    r6e4c44d r3982384  
    7777\pgfsetstrokecolor{textcolor}%
    7878\pgfsetfillcolor{textcolor}%
    79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    8080\end{pgfscope}%
    8181\begin{pgfscope}%
     
    102102\pgfsetstrokecolor{textcolor}%
    103103\pgfsetfillcolor{textcolor}%
    104 \pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    105105\end{pgfscope}%
    106106\begin{pgfscope}%
     
    127127\pgfsetstrokecolor{textcolor}%
    128128\pgfsetfillcolor{textcolor}%
    129 \pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    130130\end{pgfscope}%
    131131\begin{pgfscope}%
     
    152152\pgfsetstrokecolor{textcolor}%
    153153\pgfsetfillcolor{textcolor}%
    154 \pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    155155\end{pgfscope}%
    156156\begin{pgfscope}%
     
    177177\pgfsetstrokecolor{textcolor}%
    178178\pgfsetfillcolor{textcolor}%
    179 \pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    180180\end{pgfscope}%
    181181\begin{pgfscope}%
     
    202202\pgfsetstrokecolor{textcolor}%
    203203\pgfsetfillcolor{textcolor}%
    204 \pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.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\)}%
    205205\end{pgfscope}%
    206206\begin{pgfscope}%
     
    208208\pgfsetstrokecolor{textcolor}%
    209209\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}%
    211211\end{pgfscope}%
    212212\begin{pgfscope}%
     
    233233\pgfsetstrokecolor{textcolor}%
    234234\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}\)}%
    236236\end{pgfscope}%
    237237\begin{pgfscope}%
     
    429429\pgfsetstrokecolor{textcolor}%
    430430\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)}%
    432432\end{pgfscope}%
    433433\begin{pgfscope}%
     
    838838\pgfusepath{clip}%
    839839\pgfsetbuttcap%
    840 \pgfsetroundjoin%
     840\pgfsetmiterjoin%
    841841\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    842842\pgfsetfillcolor{currentfill}%
    843843\pgfsetlinewidth{1.003750pt}%
    844844\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}%
    8451020\pgfsetstrokecolor{currentstroke}%
    8461021\pgfsetdash{}{0pt}%
     
    8591034}%
    8601035\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}%
    9281039\end{pgfscope}%
    9291040\begin{pgfscope}%
     
    9311042\pgfsetstrokecolor{textcolor}%
    9321043\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}%
    9761064\pgfsetstrokecolor{currentstroke}%
    9771065\pgfsetdash{}{0pt}%
     
    9821070}%
    9831071\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}%
    9951083\pgfsetstrokecolor{currentstroke}%
    9961084\pgfsetdash{}{0pt}%
     
    10011089}%
    10021090\begin{pgfscope}%
    1003 \pgfsys@transformshift{5.105293in}{4.119833in}%
     1091\pgfsys@transformshift{4.713959in}{3.721763in}%
    10041092\pgfsys@useobject{currentmarker}{}%
    10051093\end{pgfscope}%
     
    10091097\pgfsetroundjoin%
    10101098\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 \pgfsetroundjoin%
    1021 \definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
    1022 \pgfsetfillcolor{currentfill}%
    1023 \pgfsetlinewidth{1.003750pt}%
    1024 \definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
     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}%
    10251113\pgfsetstrokecolor{currentstroke}%
    10261114\pgfsetdash{}{0pt}%
    10271115\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}}%
    10371120\pgfpathclose%
    10381121\pgfusepath{stroke,fill}%
    10391122}%
    10401123\begin{pgfscope}%
    1041 \pgfsys@transformshift{5.105293in}{4.050389in}%
     1124\pgfsys@transformshift{4.713959in}{3.610651in}%
    10421125\pgfsys@useobject{currentmarker}{}%
    10431126\end{pgfscope}%
     
    10471130\pgfsetstrokecolor{textcolor}%
    10481131\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}%
    11431133\end{pgfscope}%
    11441134\end{pgfpicture}%
  • doc/theses/colby_parsons_MMAth/style/style.tex

    r6e4c44d r3982384  
    77
    88\newcommand{\code}[1]{\lstinline[language=CFA]{#1}}
     9\newcommand{\Go}[1]{\lstinline[language=Go]{#1}}
    910\newcommand{\uC}{$\mu$\CC}
    1011\newcommand{\PAB}[1]{{\color{red}PAB: #1}}
     12\newcommand{\CAP}[1]{{\color{orange}CAP: #1}}
    1113
    1214\newsavebox{\myboxA}                                    % used with subfigure
  • doc/theses/colby_parsons_MMAth/text/CFA_concurrency.tex

    r6e4c44d r3982384  
    77\section{Threading Model}\label{s:threading}
    88\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.
     9Kernel threads are created by declaring a @processor@ structure.
    1010User-thread types are defined by creating a @thread@ aggregate-type, \ie replace @struct@ with @thread@.
    1111For each thread type a corresponding @main@ routine must be defined, which is where the thread starts running once it is created.
     
    3030When processors are added, they are added alongside the existing processor given to each program.
    3131Thus, for $N$ processors, allocate $N-1$ processors.
    32 A thread is implicitly joined at deallocated, either implicitly at block exit for stack allocation or explicitly at @delete@ for heap allocation.
     32A thread is implicitly joined at deallocation, either implicitly at block exit for stack allocation or explicitly at @delete@ for heap allocation.
    3333The thread performing the deallocation must wait for the thread to terminate before the deallocation can occur.
    3434A thread terminates by returning from the main routine where it starts.
  • doc/theses/colby_parsons_MMAth/text/CFA_intro.tex

    r6e4c44d r3982384  
    66
    77\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.
     8The 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.
     10Beyond C, it adds productivity features, extended libraries, an advanced type-system, and many control-flow/concurrency constructions.
     11However, \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.
    1313While \CFA is rich with interesting features, only the subset pertinent to this work is discussed.
    1414
    1515\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. 
     16References in \CFA are similar to references in \CC; however \CFA references are \emph{rebindable}, and support multi-level referencing.
     17References in \CFA are a layer of syntactic sugar over pointers to reduce the number of ref/deref operations needed with pointer usage.
    1818Another 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}. 
     19Examples of references are shown in \VRef[Listing]{l:cfa_ref}.
    2020
    2121\begin{cfa}[caption={Example of \CFA references},label={l:cfa_ref}]
     
    3737
    3838\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}.
     40Variables can also be overloaded on type, meaning that two variables can have the same name so long as they have different types.
    4141A 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}. 
     42A cast is used to disambiguate any conflicting usage.
     43Examples of overloading are shown in \VRef[Listing]{l:cfa_overload}.
    4444
    4545\begin{cfa}[caption={Example of \CFA overloading},label={l:cfa_overload}]
     
    6060
    6161
    62 \section{With Statement}
     62\section{\lstinline{with} Statement}
    6363The \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}. 
     64This feature is also implemented in Pascal~\cite{Pascal}.
     65It can exist as a stand-alone statement or wrap a routine body to expose aggregate fields.
     66Examples of the @with@ statement are shown in \VRef[Listing]{l:cfa_with}.
    6767
    6868\begin{cfa}[caption={Example of \CFA \lstinline{with} statement},label={l:cfa_with}]
     
    8383
    8484\section{Operators}
    85 Operators can be overloaded in \CFA with operator routines. 
     85Operators can be overloaded in \CFA with operator routines.
    8686Operators 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}. 
     87Examples of \CFA operators are shown in \VRef[Listing]{l:cfa_operate}.
    8888
    8989\begin{cfa}[caption={Example of \CFA operators},label={l:cfa_operate}]
     
    102102
    103103\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}. 
     104Constructors and destructors in \CFA are special operator routines used for creation and destruction of objects.
     105The default constructor and destructor for a type are called implicitly upon creation and deletion, respectively.
     106Examples of \CFA constructors and destructors are shown in \VRef[Listing]{l:cfa_ctor}.
    107107
    108108\begin{cfa}[caption={Example of \CFA constructors and destructors},label={l:cfa_ctor}]
     
    128128\section{Polymorphism}\label{s:poly}
    129129C 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.
    131131
    132132\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.
     134A @forall@ takes in a set of types and a list of constraints.
     135The declarations that follow the @forall@ are parameterized over the types listed that satisfy the constraints.
     136A list of @forall@ constraints can be refactored into a named @trait@ and reused in @forall@s.
     137Examples of \CFA parametric polymorphism are shown in \VRef[Listing]{l:cfa_poly}.
    138138
    139139\begin{cfa}[caption={Example of \CFA parametric polymorphism},label={l:cfa_poly}]
     
    180180
    181181\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 containment inheritance},label={l:cfa_inherit}]
     182Inheritance in \CFA is taken from Plan-9 C's nominal inheritance.
     183In \CFA, @struct@s can @inline@ another struct type to gain its fields and masquerade as that type.
     184Examples 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}]
    187187struct one_d { double x; };
    188 struct two_d { 
     188struct two_d {
    189189        @inline@ one_d;
    190190        double y;
    191191};
    192 struct three_d { 
     192struct three_d {
    193193        @inline@ two_d;
    194194        double z;
  • doc/theses/colby_parsons_MMAth/text/actors.tex

    r6e4c44d r3982384  
    673673
    674674\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.}
    675676The performance of \CFA's actor system is tested using a suite of microbenchmarks, and compared with other actor systems.
    676677Most of the benchmarks are the same as those presented in \ref{}, with a few additions.
  • doc/theses/colby_parsons_MMAth/text/channels.tex

    r6e4c44d r3982384  
    55% ======================================================================
    66
    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.
     7Most modern concurrent programming languages do not subscribe to just one style of communication among threads and provide features that support multiple approaches.
     8Channels 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).
    89This model is an alternative to shared-memory concurrency, where threads can communicate directly by changing shared state.
    9 Most modern concurrent programming languages do not subscribe to just one style of communication among threads and provide features that support multiple approaches.
    1010
    1111Channels were first introduced by Kahn~\cite{Kahn74} and extended by Hoare~\cite{Hoare78} (CSP).
     
    1313Both languages are highly restrictive.
    1414Kahn'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 ...
     15Hoare's language restricts channels such that both the sender and receiver need to explicitly name the process that is destination of a channel send or the source of a channel receive.
     16These channel semantics remove the ability to have an anonymous sender or receiver and additionally all channel operations in CSP are synchronous (no buffering).
     17Channels as a programming language feature has been popularized in recent years by the language Go, which encourages the use of channels as its fundamental concurrent feature.
     18Go's restrictions are ... \CAP{The only restrictions in Go but not CFA that I can think of are the closing semantics and the functionality of select vs. waituntil. Is that worth mentioning here or should it be discussed later?}
    1819\CFA channels do not have these restrictions.
    1920
    2021\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.
     22A channel is an abstraction for a shared-memory buffer, which turns the implementation of a channel into the producer-consumer problem.
     23The producer-consumer problem, also known as the bounded-buffer problem, was introduced by Dijkstra~\cite[\S~4.1]{Dijkstra65}.
     24In 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.
     25In 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).
     26As well, a buffer needs protection from concurrent access by multiple producers or consumers attempt to insert or remove simultaneously (MX).
     27
     28Channels come in three flavours of buffers:
     29\begin{enumerate}
     30\item
     31Zero sized implies the communication is synchronous, \ie the producer must wait for the consumer to arrive or vice versa for a value to be communicated.
     32\item
     33Fixed sized (bounded) implies the communication is asynchronous, \ie the producer can proceed up to the buffer size and vice versa for the consumer with respect to removal.
     34\item
     35Infinite sized (unbounded) implies the communication is asynchronous, \ie the producer never waits but the consumer waits when the buffer is empty.
     36Since memory is finite, all unbounded buffers are ultimately bounded;
     37this restriction must be part of its implementation.
     38\end{enumerate}
     39
     40In general, the order values are processed by the consumer does not affect the correctness of the producer-consumer problem.
     41For example, the buffer can be LIFO, FIFO, or prioritized with respect to insertion and removal.
     42However, like MX, a buffer should ensure every value is eventually removed after some reasonable bounded time (no long-term starvation).
     43The simplest way to prevent starvation is to implement the buffer as a queue, either with a cyclic array or linked nodes.
    2844
    2945\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}.
     46As pointed out, a bounded buffer requires MX among multiple producers or consumers.
     47This MX should be fair among threads, independent of the FIFO buffer being fair among values.
     48Fairness among threads is called \gls{fcfs} and was defined by Lamport~\cite[p.~454]{Lamport74}.
    3249\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.
     50Given this doorway, a CS is said to be \gls{fcfs}, if threads access the shared resource in the order they proceed through the doorway.
     51A consequence of \gls{fcfs} execution is the elimination of \Newterm{barging}, where barging means a thread arrives at a CS with waiting threads, and the MX protecting the CS allows the arriving thread to enter the CS ahead of one or more of the waiting threads.
     52
     53\gls{fcfs} is a fairness property that prevents unequal access to the shared resource and prevents starvation, however it comes at a cost.
     54Implementing an algorithm with \gls{fcfs} can lead to double blocking, where arriving threads block outside the doorway waiting for a thread in the lock entry-protocol and inside the doorway waiting for a thread in the CS.
     55An 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).
     56As such, algorithms that are not \gls{fcfs} (barging) can be more performant by skipping the wait for the CS and entering directly;
     57however, this performance gain comes by introducing unfairness with possible starvation for waiting threads.
    3758
    3859\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.
     60Currently, only the Go programming language~\cite{Go} provides user-level threading where the primary communication mechanism is channels.
     61Experiments were conducted that varied the producer-consumer problem algorithm and lock type used inside the channel.
    4162With 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.
     63Therefore, the low-level channel implementation in \CFA is largely copied from the Go implementation, but adapted to the \CFA type and runtime systems.
    4264As such the research contributions added by \CFA's channel implementation lie in the realm of safety and productivity features.
     65
     66\PAB{Discuss the Go channel implementation. Need to tie in FIFO buffer and FCFS locking.}
     67
     68In this work, all channels are implemented with bounded buffers, so there is no zero-sized buffering.
     69\CAP{I do have zero size channels implemented, however I don't focus on them since I think they are uninteresting as they are just a thin layer over binary semaphores. Should I mention that I support it but omit discussion or just leave it out?}
    4370
    4471\section{Safety and Productivity}
     
    4774
    4875\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.
     76\item Toggle-able statistic collection on channel behaviour that count channel and blocking operations.
     77Tracking blocking operations helps illustrate usage and then tune the channel size, where the aim is to reduce blocking.
    5178\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.
     79If threads are blocked inside the channel when it terminates, this case is detected and the user is informed, as this can cause a deadlock.
     80\item A @flush@ routine that delivers copies of an element to all waiting consumers, flushing the buffer.
    5481Programmers 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.
     82Additionally, 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.
    5683\end{itemize}
    5784
     
    6794% C_TODO: add reference to select chapter, add citation to go channels info
    6895Go 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.
     96Channels in Go have a @close@ operation and a \Go{select} statement that both can be used to help threads terminate.
     97The \Go{select} statement will be discussed in \ref{}, where \CFA's @waituntil@ statement will be compared with the Go \Go{select} statement.
     98The @close@ operation on a channel in Go changes the state of the channel.
     99When a channel is closed, sends to the channel will panic and additional calls to @close@ will panic.
    73100Receives are handled differently where receivers will never block on a closed channel and will continue to remove elements from the channel.
    74101Once a channel is empty, receivers can continue to remove elements, but will receive the zero-value version of the element type.
    75102To 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.
     103These design choices for Go channels enforce a specific interaction style with channels during termination, where careful thought is needed to ensure that additional @close@ calls don't occur and that no sends occur after channels are closed.
    77104These 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.
    78105If errors need to occur in Go, return codes are used to pass error information where they are needed.
     
    81108While 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.
    82109Since both closing and sending panic, once a channel is closed, a user often has to synchronize the senders to a channel before the channel can be closed to avoid panics.
    83 However, in doing so it renders the \code{close} operation nearly useless, as the only utilities it provides are the ability to ensure that receivers no longer block on the channel, and will receive zero-valued elements.
    84 This can be useful if the zero-typed element is recognized as a sentinel value, but if another sentinel value is preferred, then \code{close} only provides its non-blocking feature.
    85 To avoid \gls{toctou} issues during shutdown, a busy wait with a \code{select} statement is often used to add or remove elements from a channel.
     110However, in doing so it renders the @close@ operation nearly useless, as the only utilities it provides are the ability to ensure that receivers no longer block on the channel, and will receive zero-valued elements.
     111This can be useful if the zero-typed element is recognized as a sentinel value, but if another sentinel value is preferred, then @close@ only provides its non-blocking feature.
     112To 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.
    86113Due to Go's asymmetric approach to channel shutdown, separate synchronization between producers and consumers of a channel has to occur during shutdown.
    87114
     
    91118The difference between the exception handling mechanisms arises after the exception is handled.
    92119In 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.
     120In resumption handling, the control flow returns to the site of the @throw@, allowing the control to continue where it left off.
    94121Note that in resumption, since control can return to the point of error propagation, the stack is not unwound during resumption propagation.
    95122In \CFA if a resumption is not handled, it is reraised as a termination.
     
    102129These termination exceptions allow for non-local transfer that can be used to great effect to eagerly and gracefully shut down a thread.
    103130When 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.
     131The resumption exception, @channel_closed@, has a couple fields to aid in handling the exception.
    105132The exception contains a pointer to the channel it was thrown from, and a pointer to an element.
    106133In exceptions thrown from remove the element pointer will be null.
     
    116143Both of these examples are implemented using \CFA syntax so that they can be easily compared.
    117144Listing~\ref{l:go_chan_bar} uses go-style channel close semantics and Listing~\ref{l:cfa_chan_bar} uses \CFA close semantics.
    118 In this problem it is infeasible to use the Go \code{close} call since all tasks are both potentially producers and consumers, causing panics on close to be unavoidable.
     145In this problem it is infeasible to use the Go @close@ call since all tasks are both potentially producers and consumers, causing panics on close to be unavoidable.
    119146As 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.
    120147This 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.
     148Furthermore, an additional flag @done@ is needed to communicate to threads once they have left the barrier that they are done.
    122149This 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.
    123150In 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.
     
    247274
    248275In 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.
     276This program uses resumption in the @Consumer@ thread main to ensure that all elements in the channel are removed before the consumer thread terminates.
     277The producer only has a @catch@ so the moment it receives an exception it terminates, whereas the consumer will continue to remove from the closed channel via handling resumptions until the buffer is empty, which then throws a termination exception.
    251278If 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.
    252279
  • doc/theses/colby_parsons_MMAth/text/frontpgs.tex

    r6e4c44d r3982384  
    8080Concurrent 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.
    8181
    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.
     82This 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.
     84The foundation for concurrency in \CFA was laid by Thierry Delisle~\cite{Delisle18}, who implemented coroutines, user-level threads, and monitors.
     85This thesis builds upon that work and introduces a suite of new concurrent features as its main contribution.
     86The 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.
     87The root ideas behind these features are not new, but the \CFA implementations extends the original ideas in performance, productivity, and safety.
    8388
    8489\cleardoublepage
  • doc/theses/colby_parsons_MMAth/text/intro.tex

    r6e4c44d r3982384  
    88To seize the reins and write performant and safe concurrent code, high-level concurrent-language features are needed.
    99Like 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
     11This thesis presents a suite of high-level concurrent-language features implemented in the new programming-language \CFA.
    1112These 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.
    1213The groundwork for concurrent features in \CFA was implemented by Thierry Delisle~\cite{Delisle18}, who contributed the threading system, coroutines, monitors and other tools.
    1314This thesis builds on top of that foundation by providing a suite of high-level concurrent features.
    14 These features include mutex statements, channels, an actor system and a waituntil statement.
     15The features include a @mutex@ statement, channels and a @waituntil@ statement, and an actor system.
    1516All of these features exist in other programming in some shape or form, however this thesis extends the original ideas by improving performance, productivity, and safety.
  • doc/theses/colby_parsons_MMAth/text/mutex_stmt.tex

    r6e4c44d r3982384  
    55% ======================================================================
    66
    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.
     7The mutual exclusion problem was introduced by Dijkstra in 1965~\cite{Dijkstra65,Dijkstra65a}:
     8there are several concurrent processes or threads that communicate by shared variables and from time to time need exclusive access to shared resources.
    99A shared resource and code manipulating it form a pairing called a \Newterm{critical section (CS)}, which is a many-to-one relationship;
    1010\eg if multiple files are being written to by multiple threads, only the pairings of simultaneous writes to the same files are CSs.
     
    2626
    2727\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.
     29First proposed by Brinch Hansen~\cite{Hansen73} and later described and extended by C.A.R.~Hoare~\cite{Hoare74}.
     30Several 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}.
    3031In 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.
    3132
    3233Figure~\ref{f:AtomicCounter} shows a \CFA and Java monitor implementing an atomic counter.
    3334A \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).
     35In contrast, lock mutual exclusion, defined by acquire/release calls, is independent of lexical context (analogous to block versus heap storage allocation).
    3536Restricting acquire and release points in a monitor eases programming, comprehension, and maintenance, at a slight cost in flexibility and efficiency.
    3637Ultimately, a monitor is implemented using a combination of basic locks and atomic instructions.
     
    110111To increase locking flexibility, some languages introduce a mutex statement.
    111112\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.)
    113114The @read@ and @write@ functions are called with a reader/write lock and any arguments to perform reading or writing.
    114115The @read@ function is not MX because multiple readers can read simultaneously.
     
    271272The @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.
    272273This 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}.
     274This deadlock avoidance algorithm is shown in Figure~\ref{f:cc_deadlock_avoid}.
    274275The algorithm is taken directly from the source code of the @<mutex>@ header, with some renaming and comments for clarity.
    275276
    276 \begin{cfa}[caption={\CC \lstinline{scoped_lock} deadlock avoidance algorithm},label={l:cc_deadlock_avoid}]
     277\begin{figure}
     278\begin{cfa}
    277279int first = 0;  // first lock to attempt to lock
    278280do {
     
    291293} while ( ! locks[first].owns_lock() );  $\C{// is first lock held?}$
    292294\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
     299While this algorithm successfully avoids deadlock, there is a livelock scenario.
    295300Assume two threads, $A$ and $B$, create a @scoped_lock@ accessing two locks, $L1$ and $L2$.
    296301A livelock can form as follows.
     
    335340\end{cquote}
    336341Comparatively, 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.
     342The 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.
    338343
    339344\section{Performance}
     
    345350
    346351The 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 code for the deadlock avoidance benchmark is shown in \VRef[Listing]{l:deadlock_avoid_pseudo}.
     352The pseudocode for the deadlock avoidance benchmark is shown in \VRef[Listing]{l:deadlock_avoid_pseudo}.
    348353To 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.
    349354The benchmarks are run for a fixed duration of 10 seconds and then terminate.
     
    352357The median is calculated and is plotted alongside the 95\% confidence intervals for each point.
    353358
    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
     361size_t n_locks; $\C{// number of locks}$
     362size_t n_thds; $\C{// number of threads}$
     363size_t n_gens; $\C{// number of random orderings (default 100)}$
     364size_t total = 0; $\C{// global throughput aggregator}$
     365volatile bool done = false; $\C{// termination flag}$
     366
     367test_spinlock locks[n_locks];
     368size_t rands[n_thds][n_locks * n_gens]; $\C{// random ordering per thread}$
     369
     370void 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
     380int 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}
    361389
    362390\end{cfa}
     
    374402
    375403Figure~\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.}
    378404The 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.
    379405The avoidance result for both languages is significantly different, where \CFA's mutex statement achieves throughput that is magnitudes higher than \CC's @scoped_lock@.
     
    383409For 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.
    384410It 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 performs better than the baseline.
    386 At 7 locks and above the mutex statement switches from a hard coded sort to insertion sort.
    387 It is likely that the improvement in throughput compared to baseline is due to the time spent in the insertion sort, which decreases contention on the locks.
     411In 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.
     412At 7 locks and above the mutex statement switches from a hard coded sort to insertion sort, which should decrease performance.
     413It 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.
    388414
    389415\begin{figure}
  • libcfa/src/Makefile.am

    r6e4c44d r3982384  
    115115        concurrency/kernel/fwd.hfa \
    116116        concurrency/mutex_stmt.hfa \
    117     concurrency/select.hfa \
    118117    concurrency/channel.hfa \
    119118    concurrency/actor.hfa
     
    128127        concurrency/monitor.hfa \
    129128        concurrency/mutex.hfa \
     129    concurrency/select.hfa \
    130130        concurrency/thread.hfa
    131131
  • libcfa/src/bits/weakso_locks.cfa

    r6e4c44d r3982384  
    1515// Update Count     :
    1616//
    17 
    1817#include "bits/weakso_locks.hfa"
    19 
    2018#pragma GCC visibility push(default)
    2119
     
    2725void unlock( blocking_lock & ) {}
    2826void on_notify( blocking_lock &, struct thread$ * ) {}
    29 size_t on_wait( blocking_lock & ) { return 0; }
     27size_t on_wait( blocking_lock &, void (*pp_fn)( void * ), void * pp_datum ) { return 0; }
    3028void on_wakeup( blocking_lock &, size_t ) {}
    3129size_t wait_count( blocking_lock & ) { return 0; }
     30bool register_select( blocking_lock & this, select_node & node ) { return false; }
     31bool unregister_select( blocking_lock & this, select_node & node ) { return false; }
     32bool on_selected( blocking_lock & this, select_node & node ) { return true; }
     33
  • libcfa/src/bits/weakso_locks.hfa

    r6e4c44d r3982384  
    2323#include "containers/list.hfa"
    2424
    25 struct thread$;
     25struct select_node;
    2626
    2727//-----------------------------------------------------------------------------
     
    3232
    3333        // List of blocked threads
    34         dlist( thread$ ) blocked_threads;
     34        dlist( select_node ) blocked_threads;
    3535
    3636        // Count of current blocked threads
     
    5757void unlock( blocking_lock & this ) OPTIONAL_THREAD;
    5858void on_notify( blocking_lock & this, struct thread$ * t ) OPTIONAL_THREAD;
    59 size_t on_wait( blocking_lock & this ) OPTIONAL_THREAD;
     59size_t on_wait( blocking_lock & this, void (*pp_fn)( void * ), void * pp_datum ) OPTIONAL_THREAD;
    6060void on_wakeup( blocking_lock & this, size_t ) OPTIONAL_THREAD;
    6161size_t wait_count( blocking_lock & this ) OPTIONAL_THREAD;
     62bool register_select( blocking_lock & this, select_node & node ) OPTIONAL_THREAD;
     63bool unregister_select( blocking_lock & this, select_node & node ) OPTIONAL_THREAD;
     64bool on_selected( blocking_lock & this, select_node & node ) OPTIONAL_THREAD;
    6265
    6366//----------
     
    7275static inline bool   try_lock ( multiple_acquisition_lock & this ) { return try_lock( (blocking_lock &)this ); }
    7376static 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 ); }
     77static 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 ); }
    7578static inline void   on_wakeup( multiple_acquisition_lock & this, size_t v ) { on_wakeup ( (blocking_lock &)this, v ); }
    7679static inline void   on_notify( multiple_acquisition_lock & this, struct thread$ * t ){ on_notify( (blocking_lock &)this, t ); }
     80static inline bool   register_select( multiple_acquisition_lock & this, select_node & node ) { return register_select( (blocking_lock &)this, node ); }
     81static inline bool   unregister_select( multiple_acquisition_lock & this, select_node & node ) { return unregister_select( (blocking_lock &)this, node ); }
     82static inline bool   on_selected( multiple_acquisition_lock & this, select_node & node ) { return on_selected( (blocking_lock &)this, node ); }
  • libcfa/src/concurrency/channel.hfa

    r6e4c44d r3982384  
     1//
     2// Cforall Version 1.0.0 Copyright (C) 2021 University of Waterloo
     3//
     4// The contents of this file are covered under the licence agreement in the
     5// file "LICENCE" distributed with Cforall.
     6//
     7// channel.hfa -- LIBCFATHREAD
     8// Runtime locks that used with the runtime thread system.
     9//
     10// Author           : Colby Alexander Parsons
     11// Created On       : Thu Jan 21 19:46:50 2022
     12// Last Modified By :
     13// Last Modified On :
     14// Update Count     :
     15//
     16
    117#pragma once
    218
    319#include <locks.hfa>
    420#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"
    3022
    3123// returns true if woken due to shutdown
    3224// 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 );
     25static 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 );
    3628    unlock( lock );
    3729    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
     35static 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 );
    3938}
    4039
     
    5958    size_t size, front, back, count;
    6059    T * buffer;
    61     dlist( wait_link ) prods, cons; // lists of blocked threads
    62     go_mutex mutex_lock;            // MX lock
    63     bool closed;                    // indicates channel close/open
     60    dlist( select_node ) prods, cons; // lists of blocked threads
     61    go_mutex mutex_lock;              // MX lock
     62    bool closed;                      // indicates channel close/open
    6463    #ifdef CHAN_STATS
    6564    size_t blocks, operations;      // counts total ops and ops resulting in a blocked thd
     
    7069    size = _size;
    7170    front = back = count = 0;
    72     buffer = aalloc( size );
     71    if ( size != 0 ) buffer = aalloc( size );
    7372    prods{};
    7473    cons{};
     
    8786    #endif
    8887    verifyf( cons`isEmpty && prods`isEmpty, "Attempted to delete channel with waiting threads (Deadlock).\n" );
    89     delete( buffer );
    90 }
    91 static inline size_t get_count( channel(T) & chan ) with(chan) { return count; }
    92 static inline size_t get_size( channel(T) & chan ) with(chan) { return size; }
     88    if ( size != 0 ) delete( buffer );
     89}
     90static inline size_t get_count( channel(T) & chan ) with(chan) { return __atomic_load_n( &count, __ATOMIC_RELAXED ); }
     91static inline size_t get_size( channel(T) & chan ) with(chan) { return __atomic_load_n( &size, __ATOMIC_RELAXED ); }
    9392static inline bool has_waiters( channel(T) & chan ) with(chan) { return !cons`isEmpty || !prods`isEmpty; }
    9493static inline bool has_waiting_consumers( channel(T) & chan ) with(chan) { return !cons`isEmpty; }
     
    102101    // flush waiting consumers and producers
    103102    while ( has_waiting_consumers( chan ) ) {
    104         cons`first.elem = 0p;
     103        if( !__handle_waituntil_OR( cons ) ) // ensure we only signal special OR case threads when they win the race
     104            break;  // if __handle_waituntil_OR returns false cons is empty so break
     105        cons`first.extra = 0p;
    105106        wake_one( cons );
    106107    }
    107108    while ( has_waiting_producers( chan ) ) {
    108         prods`first.elem = 0p;
     109        if( !__handle_waituntil_OR( prods ) ) // ensure we only signal special OR case threads when they win the race
     110            break;  // if __handle_waituntil_OR returns false prods is empty so break
     111        prods`first.extra = 0p;
    109112        wake_one( prods );
    110113    }
     
    114117static inline void is_closed( channel(T) & chan ) with(chan) { return closed; }
    115118
     119// used to hand an element to a blocked consumer and signal it
     120static inline void __cons_handoff( channel(T) & chan, T & elem ) with(chan) {
     121    memcpy( cons`first.extra, (void *)&elem, sizeof(T) ); // do waiting consumer work
     122    wake_one( cons );
     123}
     124
     125// used to hand an element to a blocked producer and signal it
     126static inline void __prods_handoff( channel(T) & chan, T & retval ) with(chan) {
     127    memcpy( (void *)&retval, prods`first.extra, sizeof(T) );
     128    wake_one( prods );
     129}
     130
    116131static inline void flush( channel(T) & chan, T elem ) with(chan) {
    117132    lock( mutex_lock );
    118133    while ( count == 0 && !cons`isEmpty ) {
    119         memcpy(cons`first.elem, (void *)&elem, sizeof(T)); // do waiting consumer work
    120         wake_one( cons );
     134        __cons_handoff( chan, elem );
    121135    }
    122136    unlock( mutex_lock );
     
    125139// handles buffer insert
    126140static inline void __buf_insert( channel(T) & chan, T & elem ) with(chan) {
    127     memcpy((void *)&buffer[back], (void *)&elem, sizeof(T));
     141    memcpy( (void *)&buffer[back], (void *)&elem, sizeof(T) );
    128142    count += 1;
    129143    back++;
     
    131145}
    132146
    133 // does the buffer insert or hands elem directly to consumer if one is waiting
    134 static inline void __do_insert( channel(T) & chan, T & elem ) with(chan) {
    135     if ( count == 0 && !cons`isEmpty ) {
    136         memcpy(cons`first.elem, (void *)&elem, sizeof(T)); // do waiting consumer work
    137         wake_one( cons );
    138     } else __buf_insert( chan, elem );
    139 }
    140 
    141147// needed to avoid an extra copy in closed case
    142148static inline bool __internal_try_insert( channel(T) & chan, T & elem ) with(chan) {
     
    145151    operations++;
    146152    #endif
     153
     154    ConsEmpty: if ( !cons`isEmpty ) {
     155        if ( !__handle_waituntil_OR( cons ) ) break ConsEmpty;
     156        __cons_handoff( chan, elem );
     157        unlock( mutex_lock );
     158        return true;
     159    }
     160
    147161    if ( count == size ) { unlock( mutex_lock ); return false; }
    148     __do_insert( chan, elem );
     162
     163    __buf_insert( chan, elem );
    149164    unlock( mutex_lock );
    150165    return true;
     
    157172// handles closed case of insert routine
    158173static inline void __closed_insert( channel(T) & chan, T & elem ) with(chan) {
    159     channel_closed except{&channel_closed_vt, &elem, &chan };
     174    channel_closed except{ &channel_closed_vt, &elem, &chan };
    160175    throwResume except; // throw closed resumption
    161176    if ( !__internal_try_insert( chan, elem ) ) throw except; // if try to insert fails (would block), throw termination
     
    182197    }
    183198
    184     // have to check for the zero size channel case
    185     if ( size == 0 && !cons`isEmpty ) {
    186         memcpy(cons`first.elem, (void *)&elem, sizeof(T));
    187         wake_one( cons );
    188         unlock( mutex_lock );
    189         return true;
     199    // buffer count must be zero if cons are blocked (also handles zero-size case)
     200    ConsEmpty: if ( !cons`isEmpty ) {
     201        if ( !__handle_waituntil_OR( cons ) ) break ConsEmpty;
     202        __cons_handoff( chan, elem );
     203        unlock( mutex_lock );
     204        return;
    190205    }
    191206
     
    202217    } // if
    203218
    204     if ( count == 0 && !cons`isEmpty ) {
    205         memcpy(cons`first.elem, (void *)&elem, sizeof(T)); // do waiting consumer work
    206         wake_one( cons );
    207     } else __buf_insert( chan, elem );
    208    
    209     unlock( mutex_lock );
    210     return;
    211 }
    212 
    213 // handles buffer remove
    214 static inline void __buf_remove( channel(T) & chan, T & retval ) with(chan) {
    215     memcpy((void *)&retval, (void *)&buffer[front], sizeof(T));
     219    __buf_insert( chan, elem );
     220    unlock( mutex_lock );
     221}
     222
     223// does the buffer remove and potentially does waiting producer work
     224static inline void __do_remove( channel(T) & chan, T & retval ) with(chan) {
     225    memcpy( (void *)&retval, (void *)&buffer[front], sizeof(T) );
    216226    count -= 1;
    217227    front = (front + 1) % size;
    218 }
    219 
    220 // does the buffer remove and potentially does waiting producer work
    221 static inline void __do_remove( channel(T) & chan, T & retval ) with(chan) {
    222     __buf_remove( chan, retval );
    223228    if (count == size - 1 && !prods`isEmpty ) {
    224         __buf_insert( chan, *(T *)prods`first.elem );  // do waiting producer work
     229        if ( !__handle_waituntil_OR( prods ) ) return;
     230        __buf_insert( chan, *(T *)prods`first.extra );  // do waiting producer work
    225231        wake_one( prods );
    226232    }
     
    233239    operations++;
    234240    #endif
     241
     242    ZeroSize: if ( size == 0 && !prods`isEmpty ) {
     243        if ( !__handle_waituntil_OR( prods ) ) break ZeroSize;
     244        __prods_handoff( chan, retval );
     245        unlock( mutex_lock );
     246        return true;
     247    }
     248
    235249    if ( count == 0 ) { unlock( mutex_lock ); return false; }
     250
    236251    __do_remove( chan, retval );
    237252    unlock( mutex_lock );
     
    244259static inline [T, bool] try_remove( channel(T) & chan ) {
    245260    T retval;
    246     return [ retval, __internal_try_remove( chan, retval ) ];
    247 }
    248 
    249 static inline T try_remove( channel(T) & chan, T elem ) {
     261    bool success = __internal_try_remove( chan, retval );
     262    return [ retval, success ];
     263}
     264
     265static inline T try_remove( channel(T) & chan ) {
    250266    T retval;
    251267    __internal_try_remove( chan, retval );
     
    255271// handles closed case of insert routine
    256272static inline void __closed_remove( channel(T) & chan, T & retval ) with(chan) {
    257     channel_closed except{&channel_closed_vt, 0p, &chan };
     273    channel_closed except{ &channel_closed_vt, 0p, &chan };
    258274    throwResume except; // throw resumption
    259275    if ( !__internal_try_remove( chan, retval ) ) throw except; // if try to remove fails (would block), throw termination
     
    279295
    280296    // have to check for the zero size channel case
    281     if ( size == 0 && !prods`isEmpty ) {
    282         memcpy((void *)&retval, (void *)prods`first.elem, sizeof(T));
    283         wake_one( prods );
     297    ZeroSize: if ( size == 0 && !prods`isEmpty ) {
     298        if ( !__handle_waituntil_OR( prods ) ) break ZeroSize;
     299        __prods_handoff( chan, retval );
    284300        unlock( mutex_lock );
    285301        return retval;
     
    287303
    288304    // wait if buffer is empty, work will be completed by someone else
    289     if (count == 0) {
     305    if ( count == 0 ) {
    290306        #ifdef CHAN_STATS
    291307        blocks++;
     
    299315    // Remove from buffer
    300316    __do_remove( chan, retval );
    301 
    302317    unlock( mutex_lock );
    303318    return retval;
    304319}
     320
     321///////////////////////////////////////////////////////////////////////////////////////////
     322// The following is support for waituntil (select) statements
     323///////////////////////////////////////////////////////////////////////////////////////////
     324static inline bool unregister_chan( channel(T) & chan, select_node & node ) with(chan) {
     325    // if ( !node`isListed && !node.park_counter ) return false; // handle special OR case C_TODO: try adding this back
     326    lock( mutex_lock );
     327    if ( node`isListed ) { // op wasn't performed
     328        #ifdef CHAN_STATS
     329        operations--;
     330        #endif
     331        remove( node );
     332        unlock( mutex_lock );
     333        return false;
     334    }
     335    unlock( mutex_lock );
     336
     337    // only return true when not special OR case, not exceptional calse and status is SAT
     338    return ( node.extra == 0p || !node.park_counter ) ? false : *node.clause_status == __SELECT_SAT;
     339}
     340
     341// type used by select statement to capture a chan read as the selected operation
     342struct chan_read {
     343    T & ret;
     344    channel(T) & chan;
     345};
     346
     347static inline void ?{}( chan_read(T) & cr, channel(T) & chan, T & ret ) {
     348    &cr.chan = &chan;
     349    &cr.ret = &ret;
     350}
     351static inline chan_read(T) ?<<?( T & ret, channel(T) & chan ) { chan_read(T) cr{ chan, ret }; return cr; }
     352
     353static inline void __handle_select_closed_read( chan_read(T) & this, select_node & node ) with(this.chan, this) {
     354    __closed_remove( chan, ret );
     355    // if we get here then the insert succeeded
     356    __make_select_node_available( node );
     357}
     358
     359static inline bool register_select( chan_read(T) & this, select_node & node ) with(this.chan, this) {
     360    lock( mutex_lock );
     361    node.extra = &ret; // set .extra so that if it == 0p later in on_selected it is due to channel close
     362
     363    #ifdef CHAN_STATS
     364    if ( !closed ) operations++;
     365    #endif
     366
     367    if ( !node.park_counter ) {
     368        // are we special case OR and front of cons is also special case OR
     369        if ( !unlikely(closed) && !prods`isEmpty && prods`first.clause_status && !prods`first.park_counter ) {
     370            if ( !__make_select_node_pending( node ) ) {
     371                unlock( mutex_lock );
     372                return false;
     373            }
     374           
     375            if ( __handle_waituntil_OR( prods ) ) {
     376                __prods_handoff( chan, ret );
     377                __make_select_node_sat( node ); // need to to mark SAT now that we know operation is done or else threads could get stuck in __mark_select_node
     378                unlock( mutex_lock );
     379                return true;
     380            }
     381            __make_select_node_unsat( node );
     382        }
     383        // check if we can complete operation. If so race to establish winner in special OR case
     384        if ( count != 0 || !prods`isEmpty || unlikely(closed) ) {
     385            if ( !__make_select_node_available( node ) ) { // we didn't win the race so give up on registering
     386                unlock( mutex_lock );
     387                return false;
     388            }
     389        }
     390    }
     391
     392    if ( unlikely(closed) ) {
     393        unlock( mutex_lock );
     394        __handle_select_closed_read( this, node );
     395        return true;
     396    }
     397
     398    // have to check for the zero size channel case
     399    ZeroSize: if ( size == 0 && !prods`isEmpty ) {
     400        if ( !__handle_waituntil_OR( prods ) ) break ZeroSize;
     401        __prods_handoff( chan, ret );
     402        __set_avail_then_unlock( node, mutex_lock );
     403        return true;
     404    }
     405
     406    // wait if buffer is empty, work will be completed by someone else
     407    if ( count == 0 ) {
     408        #ifdef CHAN_STATS
     409        blocks++;
     410        #endif
     411       
     412        insert_last( cons, node );
     413        unlock( mutex_lock );
     414        return false;
     415    }
     416
     417    // Remove from buffer
     418    __do_remove( chan, ret );
     419    __set_avail_then_unlock( node, mutex_lock );
     420    return true;
     421}
     422static inline bool unregister_select( chan_read(T) & this, select_node & node ) { return unregister_chan( this.chan, node ); }
     423static inline bool on_selected( chan_read(T) & this, select_node & node ) with(this) {
     424    if ( node.extra == 0p ) // check if woken up due to closed channel
     425        __closed_remove( chan, ret );
     426    // This is only reachable if not closed or closed exception was handled
     427    return true;
     428}
     429
     430// type used by select statement to capture a chan write as the selected operation
     431struct chan_write {
     432    T elem;
     433    channel(T) & chan;
     434};
     435
     436static inline void ?{}( chan_write(T) & cw, channel(T) & chan, T elem ) {
     437    &cw.chan = &chan;
     438    memcpy( (void *)&cw.elem, (void *)&elem, sizeof(T) );
     439}
     440static inline chan_write(T) ?>>?( T elem, channel(T) & chan ) { chan_write(T) cw{ chan, elem }; return cw; }
     441
     442static inline void __handle_select_closed_write( chan_write(T) & this, select_node & node ) with(this.chan, this) {
     443    __closed_insert( chan, elem );
     444    // if we get here then the insert succeeded
     445    __make_select_node_available( node );
     446}
     447
     448static inline bool register_select( chan_write(T) & this, select_node & node ) with(this.chan, this) {
     449    lock( mutex_lock );
     450    node.extra = &elem; // set .extra so that if it == 0p later in on_selected it is due to channel close
     451
     452    #ifdef CHAN_STATS
     453    if ( !closed ) operations++;
     454    #endif
     455
     456    // special OR case handling
     457    if ( !node.park_counter ) {
     458        // are we special case OR and front of cons is also special case OR
     459        if ( !unlikely(closed) && !cons`isEmpty && cons`first.clause_status && !cons`first.park_counter ) {
     460            if ( !__make_select_node_pending( node ) ) {
     461                unlock( mutex_lock );
     462                return false;
     463            }
     464           
     465            if ( __handle_waituntil_OR( cons ) ) {
     466                __cons_handoff( chan, elem );
     467                __make_select_node_sat( node ); // need to to mark SAT now that we know operation is done or else threads could get stuck in __mark_select_node
     468                unlock( mutex_lock );
     469                return true;
     470            }
     471            __make_select_node_unsat( node );
     472        }
     473        // check if we can complete operation. If so race to establish winner in special OR case
     474        if ( count != size || !cons`isEmpty || unlikely(closed) ) {
     475            if ( !__make_select_node_available( node ) ) { // we didn't win the race so give up on registering
     476                unlock( mutex_lock );
     477                return false;
     478            }
     479        }
     480    }
     481
     482    // if closed handle
     483    if ( unlikely(closed) ) {
     484        unlock( mutex_lock );
     485        __handle_select_closed_write( this, node );
     486        return true;
     487    }
     488
     489    // handle blocked consumer case via handoff (buffer is implicitly empty)
     490    ConsEmpty: if ( !cons`isEmpty ) {
     491        if ( !__handle_waituntil_OR( cons ) ) break ConsEmpty;
     492        __cons_handoff( chan, elem );
     493        __set_avail_then_unlock( node, mutex_lock );
     494        return true;
     495    }
     496
     497    // insert node in list if buffer is full, work will be completed by someone else
     498    if ( count == size ) {
     499        #ifdef CHAN_STATS
     500        blocks++;
     501        #endif
     502
     503        insert_last( prods, node );
     504        unlock( mutex_lock );
     505        return false;
     506    } // if
     507
     508    // otherwise carry out write either via normal insert
     509    __buf_insert( chan, elem );
     510    __set_avail_then_unlock( node, mutex_lock );
     511    return true;
     512}
     513static inline bool unregister_select( chan_write(T) & this, select_node & node ) { return unregister_chan( this.chan, node ); }
     514
     515static inline bool on_selected( chan_write(T) & this, select_node & node ) with(this) {
     516    if ( node.extra == 0p ) // check if woken up due to closed channel
     517        __closed_insert( chan, elem );
     518
     519    // This is only reachable if not closed or closed exception was handled
     520    return true;
     521}
     522
    305523} // forall( T )
     524
     525
  • libcfa/src/concurrency/future.hfa

    r6e4c44d r3982384  
    1919#include "monitor.hfa"
    2020#include "select.hfa"
     21#include "locks.hfa"
    2122
    2223//----------------------------------------------------------------------------
     
    2627//  future_t is lockfree and uses atomics which aren't needed given we use locks here
    2728forall( T ) {
    28     // enum(int) { FUTURE_EMPTY = 0, FUTURE_FULFILLED = 1 }; // Enums seem to be broken so feel free to add this back afterwards
     29    // enum { FUTURE_EMPTY = 0, FUTURE_FULFILLED = 1 }; // Enums seem to be broken so feel free to add this back afterwards
    2930
    3031    // temporary enum replacement
     
    4445    };
    4546
    46     // C_TODO: perhaps allow exceptions to be inserted like uC++?
    47 
    4847        static inline {
    4948
     
    5352        }
    5453
    55         void ?{}(future(T) & this) {
     54        void ?{}( future(T) & this ) {
    5655                        this.waiters{};
    5756            this.state = FUTURE_EMPTY;
     
    6059
    6160                // Reset future back to original state
    62                 void reset(future(T) & this) with(this)
     61                void reset( future(T) & this ) with(this)
    6362        {
    6463            lock( lock );
     
    8281        void _internal_flush( future(T) & this ) with(this) {
    8382            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
    8485                select_node &s = try_pop_front( waiters );
    8586
    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
    8988                    copy_T( result, *(((future_node(T) &)s).my_result) );
    90                 else if ( !install_select_winner( s, &this ) ) continue;
    9189               
    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 );
    9591            }
    9692        }
    9793
    9894                // 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) {
    10096            lock( lock );
    10197            if( state != FUTURE_EMPTY )
     
    153149        }
    154150
    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
    159163            if( state == FUTURE_EMPTY ) {
    160164                insert_last( waiters, s );
    161165                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;
    177176            lock( lock );
    178177            if ( s`isListed ) remove( s );
    179178            unlock( lock );
     179            return false;
    180180        }
    181181               
     182        bool on_selected( future(T) & this, select_node & node ) { return true; }
    182183        }
    183184}
     
    186187// These futures below do not support select statements so they may not be as useful as 'future'
    187188//  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 afaik
     189//  since it uses raw atomics and no locks
    189190//
    190191// As far as 'multi_future' goes I can't see many use cases as it will be less performant than 'future'
  • libcfa/src/concurrency/invoke.h

    r6e4c44d r3982384  
    217217                struct __thread_user_link cltr_link;
    218218
    219                 // used to point to this thd's current clh node
    220                 volatile bool * clh_node;
    221 
    222219                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;
    223224
    224225                PRNG_STATE_T random_state;                                              // fast random numbers
  • libcfa/src/concurrency/locks.cfa

    r6e4c44d r3982384  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // locks.hfa -- LIBCFATHREAD
     7// locks.cfa -- LIBCFATHREAD
    88// Runtime locks that used with the runtime thread system.
    99//
     
    7979        // lock is held by some other thread
    8080        if ( owner != 0p && owner != thrd ) {
    81                 insert_last( blocked_threads, *thrd );
     81        select_node node;
     82                insert_last( blocked_threads, node );
    8283                wait_count++;
    8384                unlock( lock );
    8485                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
    8888                recursion_count++;
    89                 unlock( lock );
    90         }
    91         // lock isn't held
    92         else {
     89        } else {  // lock isn't held
    9390                owner = thrd;
    9491                recursion_count = 1;
    95                 unlock( lock );
    96         }
     92        }
     93    unlock( lock );
    9794}
    9895
     
    117114}
    118115
    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 );
     116static 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    }
    125129}
    126130
     
    134138        recursion_count--;
    135139        if ( recursion_count == 0 ) {
    136                 pop_and_set_new_owner( this );
     140                pop_node( this );
    137141        }
    138142        unlock( lock );
     
    147151        // lock held
    148152        if ( owner != 0p ) {
    149                 insert_last( blocked_threads, *t );
     153                insert_last( blocked_threads, *(select_node *)t->link_node );
    150154                wait_count++;
    151                 unlock( lock );
    152155        }
    153156        // lock not held
     
    156159                recursion_count = 1;
    157160                unpark( t );
    158                 unlock( lock );
    159         }
    160 }
    161 
    162 size_t on_wait( blocking_lock & this ) with( this ) {
     161        }
     162    unlock( lock );
     163}
     164
     165size_t on_wait( blocking_lock & this, __cfa_pre_park pp_fn, void * pp_datum ) with( this ) {
    163166        lock( lock __cfaabi_dbg_ctx2 );
    164167        /* paranoid */ verifyf( owner != 0p, "Attempt to release lock %p that isn't held", &this );
     
    167170        size_t ret = recursion_count;
    168171
    169         pop_and_set_new_owner( this );
     172        pop_node( this );
     173
     174    select_node node;
     175    active_thread()->link_node = (void *)&node;
    170176        unlock( lock );
     177
     178    pre_park_then_park( pp_fn, pp_datum );
     179
    171180        return ret;
    172181}
     
    175184        recursion_count = recursion;
    176185}
     186
     187// waituntil() support
     188bool 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
     220bool 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
     241bool on_selected( blocking_lock & this, select_node & node ) { return true; }
    177242
    178243//-----------------------------------------------------------------------------
     
    311376        int counter( condition_variable(L) & this ) with(this) { return count; }
    312377
    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) {
    314379                // add info_thread to waiting queue
    315380                insert_last( blocked_threads, *i );
    316381                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 ); }
    324393
    325394        // helper for wait()'s' with no timeout
    326395        static void queue_info_thread( condition_variable(L) & this, info_thread(L) & i ) with(this) {
    327396                lock( lock __cfaabi_dbg_ctx2 );
    328                 size_t recursion_count = queue_and_get_recursion(this, &i);
     397        enqueue_thread( this, &i );
    329398                unlock( lock );
    330399
    331400                // blocks here
    332                 park( );
     401        size_t recursion_count = block_and_get_recursion( i );
    333402
    334403                // 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 );
    336405        }
    337406
     
    340409                queue_info_thread( this, i );
    341410
     411    static void cond_alarm_register( void * node_ptr ) { register_self( (alarm_node_t *)node_ptr ); }
     412
    342413        // helper for wait()'s' with a timeout
    343414        static void queue_info_thread_timeout( condition_variable(L) & this, info_thread(L) & info, Duration t, Alarm_Callback callback ) with(this) {
    344415                lock( lock __cfaabi_dbg_ctx2 );
    345                 size_t recursion_count = queue_and_get_recursion(this, &info);
     416        enqueue_thread( this, &info );
    346417                alarm_node_wrap(L) node_wrap = { t, 0`s, callback, &this, &info };
    347418                unlock( lock );
    348419
    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();
    354423
    355424                // unregisters alarm so it doesn't go off if this happens first
     
    357426
    358427                // 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 );
    360429        }
    361430
     
    417486                info_thread( L ) i = { active_thread(), info, &l };
    418487                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( );
    421490                on_wakeup(*i.lock, recursion_count);
    422491        }
     
    459528        bool empty ( pthread_cond_var(L) & this ) with(this) { return blocked_threads`isEmpty; }
    460529
    461         static size_t queue_and_get_recursion( pthread_cond_var(L) & this, info_thread(L) * i ) with(this) {
    462                 // add info_thread to waiting queue
    463                 insert_last( blocked_threads, *i );
    464                 size_t recursion_count = 0;
    465                 recursion_count = on_wait( *i->lock );
    466                 return recursion_count;
    467         }
    468        
    469530        static void queue_info_thread_timeout( pthread_cond_var(L) & this, info_thread(L) & info, Duration t, Alarm_Callback callback ) with(this) {
    470531                lock( lock __cfaabi_dbg_ctx2 );
    471                 size_t recursion_count = queue_and_get_recursion(this, &info);
     532        insert_last( blocked_threads, info );
    472533                pthread_alarm_node_wrap(L) node_wrap = { t, 0`s, callback, &this, &info };
    473534                unlock( lock );
    474535
    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
    482540                unregister_self( &node_wrap.alarm_node );
    483541
    484542                // 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 );
    486544        }
    487545
     
    493551                lock( lock __cfaabi_dbg_ctx2 );
    494552                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 );
    499560        }
    500561
     
    584645        return thrd != 0p;
    585646}
     647
  • libcfa/src/concurrency/locks.hfa

    r6e4c44d r3982384  
    3030#include "time.hfa"
    3131
     32#include "select.hfa"
     33
    3234#include <fstream.hfa>
    3335
     
    3739#include <unistd.h>
    3840
    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
     41typedef void (*__cfa_pre_park)( void * );
     42
     43static inline void pre_park_noop( void * ) {}
     44
     45//-----------------------------------------------------------------------------
     46// is_blocking_lock
     47forall( L & | sized(L) )
     48trait 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
     59static 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
    4385
    4486//-----------------------------------------------------------------------------
     
    67109static inline bool   try_lock ( single_acquisition_lock & this ) { return try_lock( (blocking_lock &)this ); }
    68110static 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 ); }
     111static 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 ); }
    70112static inline void   on_wakeup( single_acquisition_lock & this, size_t v ) { on_wakeup ( (blocking_lock &)this, v ); }
    71113static inline void   on_notify( single_acquisition_lock & this, struct thread$ * t ) { on_notify( (blocking_lock &)this, t ); }
     114static inline bool   register_select( single_acquisition_lock & this, select_node & node ) { return register_select( (blocking_lock &)this, node ); }
     115static inline bool   unregister_select( single_acquisition_lock & this, select_node & node ) { return unregister_select( (blocking_lock &)this, node ); }
     116static inline bool   on_selected( single_acquisition_lock & this, select_node & node ) { return on_selected( (blocking_lock &)this, node ); }
    72117
    73118//----------
     
    81126static inline bool   try_lock ( owner_lock & this ) { return try_lock( (blocking_lock &)this ); }
    82127static 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 ); }
     128static 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 ); }
    84129static inline void   on_wakeup( owner_lock & this, size_t v ) { on_wakeup ( (blocking_lock &)this, v ); }
    85130static inline void   on_notify( owner_lock & this, struct thread$ * t ) { on_notify( (blocking_lock &)this, t ); }
     131static inline bool   register_select( owner_lock & this, select_node & node ) { return register_select( (blocking_lock &)this, node ); }
     132static inline bool   unregister_select( owner_lock & this, select_node & node ) { return unregister_select( (blocking_lock &)this, node ); }
     133static inline bool   on_selected( owner_lock & this, select_node & node ) { return on_selected( (blocking_lock &)this, node ); }
    86134
    87135//-----------------------------------------------------------------------------
     
    156204// - Kernel thd blocking alternative to the spinlock
    157205// - No ownership (will deadlock on reacq)
     206// - no reacq on wakeup
    158207struct futex_mutex {
    159208        // lock state any state other than UNLOCKED is locked
     
    169218}
    170219
    171 static inline void  ?{}( futex_mutex & this ) with(this) { val = 0; }
    172 
    173 static inline bool internal_try_lock(futex_mutex & this, int & compare_val) with(this) {
     220static inline void ?{}( futex_mutex & this ) with(this) { val = 0; }
     221
     222static inline bool internal_try_lock( futex_mutex & this, int & compare_val) with(this) {
    174223        return __atomic_compare_exchange_n((int*)&val, (int*)&compare_val, 1, false, __ATOMIC_ACQUIRE, __ATOMIC_ACQUIRE);
    175224}
    176225
    177 static inline int internal_exchange(futex_mutex & this) with(this) {
     226static inline int internal_exchange( futex_mutex & this ) with(this) {
    178227        return __atomic_exchange_n((int*)&val, 2, __ATOMIC_ACQUIRE);
    179228}
    180229
    181230// if this is called recursively IT WILL DEADLOCK!!!!!
    182 static inline void lock(futex_mutex & this) with(this) {
     231static inline void lock( futex_mutex & this ) with(this) {
    183232        int state;
    184233
     
    190239                for (int i = 0; i < spin; i++) Pause();
    191240        }
    192 
    193         // // no contention try to acquire
    194         // if (internal_try_lock(this, state)) return;
    195241       
    196242        // if not in contended state, set to be in contended state
     
    212258}
    213259
    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 ) {}
     260DEFAULT_ON_NOTIFY( futex_mutex )
     261DEFAULT_ON_WAIT( futex_mutex )
     262DEFAULT_ON_WAKEUP_NO_REACQ( futex_mutex )
    219263
    220264//-----------------------------------------------------------------------------
     
    232276        int val;
    233277};
    234 
    235278static inline void  ?{}( go_mutex & this ) with(this) { val = 0; }
     279// static inline void ?{}( go_mutex & this, go_mutex this2 ) = void; // these don't compile correctly at the moment so they should be omitted
     280// static inline void ?=?( go_mutex & this, go_mutex this2 ) = void;
    236281
    237282static inline bool internal_try_lock(go_mutex & this, int & compare_val, int new_val ) with(this) {
     
    244289
    245290// if this is called recursively IT WILL DEADLOCK!!!!!
    246 static inline void lock(go_mutex & this) with(this) {
     291static inline void lock( go_mutex & this ) with( this ) {
    247292        int state, init_state;
    248293
     
    255300            while( !val ) { // lock unlocked
    256301                state = 0;
    257                 if (internal_try_lock(this, state, init_state)) return;
     302                if ( internal_try_lock( this, state, init_state ) ) return;
    258303            }
    259304            for (int i = 0; i < 30; i++) Pause();
     
    262307        while( !val ) { // lock unlocked
    263308            state = 0;
    264             if (internal_try_lock(this, state, init_state)) return;
     309            if ( internal_try_lock( this, state, init_state ) ) return;
    265310        }
    266311        sched_yield();
    267312       
    268313        // if not in contended state, set to be in contended state
    269         state = internal_exchange(this, 2);
     314        state = internal_exchange( this, 2 );
    270315        if ( !state ) return; // state == 0
    271316        init_state = 2;
    272         futex((int*)&val, FUTEX_WAIT, 2); // if val is not 2 this returns with EWOULDBLOCK
     317        futex( (int*)&val, FUTEX_WAIT, 2 ); // if val is not 2 this returns with EWOULDBLOCK
    273318    }
    274319}
     
    276321static inline void unlock( go_mutex & this ) with(this) {
    277322        // if uncontended do atomic unlock and then return
    278     if (__atomic_exchange_n(&val, 0, __ATOMIC_RELEASE) == 1) return;
     323    if ( __atomic_exchange_n(&val, 0, __ATOMIC_RELEASE) == 1 ) return;
    279324       
    280325        // otherwise threads are blocked so we must wake one
    281         futex((int *)&val, FUTEX_WAKE, 1);
    282 }
    283 
    284 static inline void on_notify( go_mutex & f, thread$ * t){ unpark(t); }
    285 static inline size_t on_wait( go_mutex & f ) {unlock(f); return 0;}
    286 static inline void on_wakeup( go_mutex & f, size_t recursion ) {}
    287 
    288 //-----------------------------------------------------------------------------
    289 // CLH Spinlock
    290 // - No recursive acquisition
    291 // - Needs to be released by owner
    292 
    293 struct clh_lock {
    294         volatile bool * volatile tail;
    295     volatile bool * volatile head;
    296 };
    297 
    298 static inline void  ?{}( clh_lock & this ) { this.tail = malloc(); *this.tail = true; }
    299 static inline void ^?{}( clh_lock & this ) { free(this.tail); }
    300 
    301 static inline void lock(clh_lock & l) {
    302         thread$ * curr_thd = active_thread();
    303         *(curr_thd->clh_node) = false;
    304         volatile bool * prev = __atomic_exchange_n((bool **)(&l.tail), (bool *)(curr_thd->clh_node), __ATOMIC_SEQ_CST);
    305         while(!__atomic_load_n(prev, __ATOMIC_SEQ_CST)) Pause();
    306     __atomic_store_n((bool **)(&l.head), (bool *)curr_thd->clh_node, __ATOMIC_SEQ_CST);
    307     curr_thd->clh_node = prev;
    308 }
    309 
    310 static inline void unlock(clh_lock & l) {
    311         __atomic_store_n((bool *)(l.head), true, __ATOMIC_SEQ_CST);
    312 }
    313 
    314 static inline void on_notify(clh_lock & this, struct thread$ * t ) { unpark(t); }
    315 static inline size_t on_wait(clh_lock & this) { unlock(this); return 0; }
    316 static inline void on_wakeup(clh_lock & this, size_t recursion ) { lock(this); }
     326        futex( (int *)&val, FUTEX_WAKE, 1 );
     327}
     328
     329DEFAULT_ON_NOTIFY( go_mutex )
     330DEFAULT_ON_WAIT( go_mutex )
     331DEFAULT_ON_WAKEUP_NO_REACQ( go_mutex )
    317332
    318333//-----------------------------------------------------------------------------
     
    334349        this.lock_value = 0;
    335350}
     351static inline void ?{}( exp_backoff_then_block_lock & this, exp_backoff_then_block_lock this2 ) = void;
     352static inline void ?=?( exp_backoff_then_block_lock & this, exp_backoff_then_block_lock this2 ) = void;
    336353
    337354static inline void  ^?{}( exp_backoff_then_block_lock & this ){}
    338355
    339 static inline bool internal_try_lock(exp_backoff_then_block_lock & this, size_t & compare_val) with(this) {
     356static inline bool internal_try_lock( exp_backoff_then_block_lock & this, size_t & compare_val ) with(this) {
    340357        return __atomic_compare_exchange_n(&lock_value, &compare_val, 1, false, __ATOMIC_ACQUIRE, __ATOMIC_RELAXED);
    341358}
    342359
    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) {
     360static inline bool try_lock( exp_backoff_then_block_lock & this ) { size_t compare_val = 0; return internal_try_lock( this, compare_val ); }
     361
     362static inline bool try_lock_contention( exp_backoff_then_block_lock & this ) with(this) {
     363        return !__atomic_exchange_n( &lock_value, 2, __ATOMIC_ACQUIRE );
     364}
     365
     366static inline bool block( exp_backoff_then_block_lock & this ) with(this) {
    350367    lock( spinlock __cfaabi_dbg_ctx2 );
    351368    if (__atomic_load_n( &lock_value, __ATOMIC_SEQ_CST) != 2) {
     
    359376}
    360377
    361 static inline void lock(exp_backoff_then_block_lock & this) with(this) {
     378static inline void lock( exp_backoff_then_block_lock & this ) with(this) {
    362379        size_t compare_val = 0;
    363380        int spin = 4;
     
    378395}
    379396
    380 static inline void unlock(exp_backoff_then_block_lock & this) with(this) {
     397static inline void unlock( exp_backoff_then_block_lock & this ) with(this) {
    381398    if (__atomic_exchange_n(&lock_value, 0, __ATOMIC_RELEASE) == 1) return;
    382399    lock( spinlock __cfaabi_dbg_ctx2 );
     
    386403}
    387404
    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); }
     405DEFAULT_ON_NOTIFY( exp_backoff_then_block_lock )
     406DEFAULT_ON_WAIT( exp_backoff_then_block_lock )
     407DEFAULT_ON_WAKEUP_REACQ( exp_backoff_then_block_lock )
    391408
    392409//-----------------------------------------------------------------------------
     
    418435
    419436// if this is called recursively IT WILL DEADLOCK!!!!!
    420 static inline void lock(fast_block_lock & this) with(this) {
     437static inline void lock( fast_block_lock & this ) with(this) {
    421438        lock( lock __cfaabi_dbg_ctx2 );
    422439        if ( held ) {
     
    430447}
    431448
    432 static inline void unlock(fast_block_lock & this) with(this) {
     449static inline void unlock( fast_block_lock & this ) with(this) {
    433450        lock( lock __cfaabi_dbg_ctx2 );
    434451        /* paranoid */ verifyf( held != false, "Attempt to release lock %p that isn't held", &this );
     
    439456}
    440457
    441 static inline void on_notify(fast_block_lock & this, struct thread$ * t ) with(this) {
     458static inline void on_notify( fast_block_lock & this, struct thread$ * t ) with(this) {
    442459    lock( lock __cfaabi_dbg_ctx2 );
    443460    insert_last( blocked_threads, *t );
    444461    unlock( lock );
    445462}
    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 ) { }
     463DEFAULT_ON_WAIT( fast_block_lock )
     464DEFAULT_ON_WAKEUP_NO_REACQ( fast_block_lock )
    448465
    449466//-----------------------------------------------------------------------------
     
    456473struct simple_owner_lock {
    457474        // List of blocked threads
    458         dlist( thread$ ) blocked_threads;
     475        dlist( select_node ) blocked_threads;
    459476
    460477        // Spin lock used for mutual exclusion
     
    477494static inline void ?=?( simple_owner_lock & this, simple_owner_lock this2 ) = void;
    478495
    479 static inline void lock(simple_owner_lock & this) with(this) {
    480         if (owner == active_thread()) {
     496static inline void lock( simple_owner_lock & this ) with(this) {
     497        if ( owner == active_thread() ) {
    481498                recursion_count++;
    482499                return;
     
    484501        lock( lock __cfaabi_dbg_ctx2 );
    485502
    486         if (owner != 0p) {
    487                 insert_last( blocked_threads, *active_thread() );
     503        if ( owner != 0p ) {
     504        select_node node;
     505                insert_last( blocked_threads, node );
    488506                unlock( lock );
    489507                park( );
     
    495513}
    496514
    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) {
     515static inline void pop_node( simple_owner_lock & this ) with(this) {
     516    __handle_waituntil_OR( blocked_threads );
     517    select_node * node = &try_pop_front( blocked_threads );
     518    if ( node ) {
     519        owner = node->blocked_thread;
     520        recursion_count = 1;
     521        // if ( !node->clause_status || __make_select_node_available( *node ) ) unpark( node->blocked_thread );
     522        wake_one( blocked_threads, *node );
     523    } else {
     524        owner = 0p;
     525        recursion_count = 0;
     526    }
     527}
     528
     529static inline void unlock( simple_owner_lock & this ) with(this) {
    506530        lock( lock __cfaabi_dbg_ctx2 );
    507531        /* paranoid */ verifyf( owner != 0p, "Attempt to release lock %p that isn't held", &this );
     
    510534        recursion_count--;
    511535        if ( recursion_count == 0 ) {
    512                 // pop_and_set_new_owner( this );
    513                 thread$ * t = &try_pop_front( blocked_threads );
    514                 owner = t;
    515                 recursion_count = ( t ? 1 : 0 );
    516                 unpark( t );
     536                pop_node( this );
    517537        }
    518538        unlock( lock );
    519539}
    520540
    521 static inline void on_notify(simple_owner_lock & this, struct thread$ * t ) with(this) {
     541static inline void on_notify( simple_owner_lock & this, thread$ * t ) with(this) {
    522542        lock( lock __cfaabi_dbg_ctx2 );
    523543        // lock held
    524544        if ( owner != 0p ) {
    525                 insert_last( blocked_threads, *t );
     545                insert_last( blocked_threads, *(select_node *)t->link_node );
    526546        }
    527547        // lock not held
     
    534554}
    535555
    536 static inline size_t on_wait(simple_owner_lock & this) with(this) {
     556static inline size_t on_wait( simple_owner_lock & this, __cfa_pre_park pp_fn, void * pp_datum ) with(this) {
    537557        lock( lock __cfaabi_dbg_ctx2 );
    538558        /* paranoid */ verifyf( owner != 0p, "Attempt to release lock %p that isn't held", &this );
     
    541561        size_t ret = recursion_count;
    542562
    543         // pop_and_set_new_owner( this );
    544 
    545         thread$ * t = &try_pop_front( blocked_threads );
    546         owner = t;
    547         recursion_count = ( t ? 1 : 0 );
    548         unpark( t );
    549 
     563        pop_node( this );
     564
     565    select_node node;
     566    active_thread()->link_node = (void *)&node;
    550567        unlock( lock );
     568
     569    pre_park_then_park( pp_fn, pp_datum );
     570
    551571        return ret;
    552572}
    553573
    554 static inline void on_wakeup(simple_owner_lock & this, size_t recursion ) with(this) { recursion_count = recursion; }
     574static inline void on_wakeup( simple_owner_lock & this, size_t recursion ) with(this) { recursion_count = recursion; }
     575
     576// waituntil() support
     577static inline bool register_select( simple_owner_lock & this, select_node & node ) with(this) {
     578    lock( lock __cfaabi_dbg_ctx2 );
     579
     580    // check if we can complete operation. If so race to establish winner in special OR case
     581    if ( !node.park_counter && ( owner == active_thread() || owner == 0p ) ) {
     582        if ( !__make_select_node_available( node ) ) { // we didn't win the race so give up on registering
     583           unlock( lock );
     584           return false;
     585        }
     586    }
     587
     588    if ( owner == active_thread() ) {
     589                recursion_count++;
     590        if ( node.park_counter ) __make_select_node_available( node );
     591        unlock( lock );
     592                return true;
     593        }
     594
     595    if ( owner != 0p ) {
     596                insert_last( blocked_threads, node );
     597                unlock( lock );
     598                return false;
     599        }
     600   
     601        owner = active_thread();
     602        recursion_count = 1;
     603
     604    if ( node.park_counter ) __make_select_node_available( node );
     605    unlock( lock );
     606    return true;
     607}
     608
     609static inline bool unregister_select( simple_owner_lock & this, select_node & node ) with(this) {
     610    lock( lock __cfaabi_dbg_ctx2 );
     611    if ( node`isListed ) {
     612        remove( node );
     613        unlock( lock );
     614        return false;
     615    }
     616
     617    if ( owner == active_thread() ) {
     618        recursion_count--;
     619        if ( recursion_count == 0 ) {
     620            pop_node( this );
     621        }
     622    }
     623    unlock( lock );
     624    return false;
     625}
     626
     627static inline bool on_selected( simple_owner_lock & this, select_node & node ) { return true; }
     628
    555629
    556630//-----------------------------------------------------------------------------
     
    578652
    579653// if this is called recursively IT WILL DEADLOCK!
    580 static inline void lock(spin_queue_lock & this) with(this) {
     654static inline void lock( spin_queue_lock & this ) with(this) {
    581655        mcs_spin_node node;
    582656        lock( lock, node );
     
    586660}
    587661
    588 static inline void unlock(spin_queue_lock & this) with(this) {
     662static inline void unlock( spin_queue_lock & this ) with(this) {
    589663        __atomic_store_n(&held, false, __ATOMIC_RELEASE);
    590664}
    591665
    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 
     666DEFAULT_ON_NOTIFY( spin_queue_lock )
     667DEFAULT_ON_WAIT( spin_queue_lock )
     668DEFAULT_ON_WAKEUP_REACQ( spin_queue_lock )
    598669
    599670//-----------------------------------------------------------------------------
     
    621692
    622693// if this is called recursively IT WILL DEADLOCK!!!!!
    623 static inline void lock(mcs_block_spin_lock & this) with(this) {
     694static inline void lock( mcs_block_spin_lock & this ) with(this) {
    624695        mcs_node node;
    625696        lock( lock, node );
     
    633704}
    634705
    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); }
     706DEFAULT_ON_NOTIFY( mcs_block_spin_lock )
     707DEFAULT_ON_WAIT( mcs_block_spin_lock )
     708DEFAULT_ON_WAKEUP_REACQ( mcs_block_spin_lock )
    638709
    639710//-----------------------------------------------------------------------------
     
    661732
    662733// if this is called recursively IT WILL DEADLOCK!!!!!
    663 static inline void lock(block_spin_lock & this) with(this) {
     734static inline void lock( block_spin_lock & this ) with(this) {
    664735        lock( lock );
    665736        while(__atomic_load_n(&held, __ATOMIC_SEQ_CST)) Pause();
     
    668739}
    669740
    670 static inline void unlock(block_spin_lock & this) with(this) {
     741static inline void unlock( block_spin_lock & this ) with(this) {
    671742        __atomic_store_n(&held, false, __ATOMIC_RELEASE);
    672743}
    673744
    674 static inline void on_notify(block_spin_lock & this, struct thread$ * t ) with(this.lock) {
     745static inline void on_notify( block_spin_lock & this, struct thread$ * t ) with(this.lock) {
    675746        // first we acquire internal fast_block_lock
    676747        lock( lock __cfaabi_dbg_ctx2 );
     
    686757        unpark(t);
    687758}
    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) {
     759DEFAULT_ON_WAIT( block_spin_lock )
     760static inline void on_wakeup( block_spin_lock & this, size_t recursion ) with(this) {
    690761        // now we acquire the entire block_spin_lock upon waking up
    691762        while(__atomic_load_n(&held, __ATOMIC_SEQ_CST)) Pause();
     
    693764        unlock( lock ); // Now we release the internal fast_spin_lock
    694765}
    695 
    696 //-----------------------------------------------------------------------------
    697 // is_blocking_lock
    698 forall( L & | sized(L) )
    699 trait is_blocking_lock {
    700         // For synchronization locks to use when acquiring
    701         void on_notify( L &, struct thread$ * );
    702 
    703         // For synchronization locks to use when releasing
    704         size_t on_wait( L & );
    705 
    706         // to set recursion count after getting signalled;
    707         void on_wakeup( L &, size_t recursion );
    708 };
    709766
    710767//-----------------------------------------------------------------------------
     
    714771forall(L & | is_blocking_lock(L)) {
    715772        struct info_thread;
    716 
    717         // // for use by sequence
    718         // info_thread(L) *& Back( info_thread(L) * this );
    719         // info_thread(L) *& Next( info_thread(L) * this );
    720773}
    721774
  • libcfa/src/concurrency/mutex_stmt.hfa

    r6e4c44d r3982384  
    1515};
    1616
    17 
    1817struct __mutex_stmt_lock_guard {
    1918    void ** lockarr;
     
    3029
    3130forall(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 ) {}
    5334}
  • libcfa/src/concurrency/preemption.cfa

    r6e4c44d r3982384  
    117117                __cfadbg_print_buffer_decl( preemption, " KERNEL: preemption tick %lu\n", currtime.tn);
    118118                Duration period = node->period;
    119                 if( period == 0) {
     119                if( period == 0 ) {
    120120                        node->set = false;                  // Node is one-shot, just mark it as not pending
    121121                }
  • libcfa/src/concurrency/select.hfa

    r6e4c44d r3982384  
     1//
     2// Cforall Version 1.0.0 Copyright (C) 2021 University of Waterloo
     3//
     4// The contents of this file are covered under the licence agreement in the
     5// file "LICENCE" distributed with Cforall.
     6//
     7// channel.hfa -- LIBCFATHREAD
     8// Runtime locks that used with the runtime thread system.
     9//
     10// Author           : Colby Alexander Parsons
     11// Created On       : Thu Jan 21 19:46:50 2023
     12// Last Modified By :
     13// Last Modified On :
     14// Update Count     :
     15//
     16
    117#pragma once
    218
    319#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"
    723
     24struct select_node;
     25
     26// node status
     27static const unsigned long int __SELECT_UNSAT = 0;
     28static const unsigned long int __SELECT_PENDING = 1; // used only by special OR case
     29static const unsigned long int __SELECT_SAT = 2;
     30static const unsigned long int __SELECT_RUN = 3;
     31
     32// these are used inside the compiler to aid in code generation
     33static inline bool __CFA_has_clause_run( unsigned long int status ) { return status == __SELECT_RUN; }
     34static 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
    840struct 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
    946    thread$ * blocked_thread;
    10     void ** race_flag;
    1147    inline dlink(select_node);
    1248};
    1349P9_EMBEDDED( select_node, dlink(select_node) )
    1450
    15 void ?{}( select_node & this ) {
    16     this.blocked_thread = 0p;
    17     this.race_flag = 0p;
     51static 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;
    1856}
    1957
    20 void ?{}( select_node & this, thread$ * blocked_thread ) {
     58static inline void ?{}( select_node & this, thread$ * blocked_thread ) {
    2159    this.blocked_thread = blocked_thread;
    22     this.race_flag = 0p;
     60    this.clause_status = 0p;
     61    this.park_counter = 0p;
     62    this.extra = 0p;
    2363}
    2464
    25 void ?{}( select_node & this, thread$ * blocked_thread, void ** race_flag ) {
     65static inline void ?{}( select_node & this, thread$ * blocked_thread, void * extra ) {
    2666    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;
    2870}
     71static inline void ^?{}( select_node & this ) {}
    2972
    30 void ^?{}( select_node & this ) {}
     73// this is used inside the compiler to aid in code generation
     74static inline unsigned long int * __get_clause_status( select_node & s ) { return s.clause_status; }
    3175
     76// this is used inside the compiler to attempt to establish an else clause as a winner in the OR special case race
     77static 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}
    3282
    3383//-----------------------------------------------------------------------------
    3484// 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 & );
     85forall(T & | sized(T))
     86trait 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 & );
    4290
    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 & );
    4499};
    45100
    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
     106static 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;
    63116}
     117
     118static inline void __make_select_node_unsat( select_node & this ) with( this ) {
     119    __atomic_store_n( clause_status, __SELECT_UNSAT, __ATOMIC_SEQ_CST );
     120}
     121static inline void __make_select_node_sat( select_node & this ) with( this ) {
     122    __atomic_store_n( clause_status, __SELECT_SAT, __ATOMIC_SEQ_CST );
     123}
     124
     125static 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
     131static 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
     147static 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
     163static 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
     170static inline void wake_one( dlist( select_node ) & queue ) { wake_one( queue, try_pop_front( queue ) ); }
     171
     172static 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
     179struct select_timeout_node {
     180    alarm_node_t a_node;
     181    select_node * s_node;
     182};
     183void ?{}( select_timeout_node & this, Duration duration, Alarm_Callback callback );
     184void ^?{}( select_timeout_node & this );
     185void timeout_handler_select_cast( alarm_node_t & node );
     186
     187// Selectable trait routines
     188bool register_select( select_timeout_node & this, select_node & node );
     189bool unregister_select( select_timeout_node & this, select_node & node );
     190bool on_selected( select_timeout_node & this, select_node & node );
     191
     192// Gateway routines to waituntil on duration
     193select_timeout_node timeout( Duration duration );
     194select_timeout_node sleep( Duration duration );
  • libcfa/src/concurrency/thread.cfa

    r6e4c44d r3982384  
    5353        preferred = ready_queue_new_preferred();
    5454        last_proc = 0p;
     55    link_node = 0p;
    5556        PRNG_SET_SEED( random_state, __global_random_mask ? __global_random_prime : __global_random_prime ^ rdtscl() );
    5657        #if defined( __CFA_WITH_VERIFY__ )
     
    5960        #endif
    6061
    61         clh_node = malloc( );
    62         *clh_node = false;
    63 
    6462        doregister(curr_cluster, this);
    6563        monitors{ &self_mon_p, 1, (fptr_t)0 };
     
    7068                canary = 0xDEADDEADDEADDEADp;
    7169        #endif
    72         free(clh_node);
    7370        unregister(curr_cluster, this);
    7471        ^self_cor{};
  • src/AST/Convert.cpp

    r6e4c44d r3982384  
    567567        }
    568568
     569    const ast::WhenClause * visit( const ast::WhenClause * node ) override final {
     570                // There is no old-AST WhenClause, so this should never be called.
     571                assert( !node );
     572                return nullptr;
     573        }
     574
    569575        const ast::Stmt * visit( const ast::WaitForStmt * node ) override final {
    570576                if ( inCache( node ) ) return nullptr;
     
    573579                for ( auto clause : node->clauses ) {
    574580                        stmt->clauses.push_back({{
    575                                         get<Expression>().accept1( clause->target_func ),
     581                                        get<Expression>().accept1( clause->target ),
    576582                                        get<Expression>().acceptL( clause->target_args ),
    577583                                },
    578584                                get<Statement>().accept1( clause->stmt ),
    579                                 get<Expression>().accept1( clause->cond ),
     585                                get<Expression>().accept1( clause->when_cond ),
    580586                        });
    581587                }
     
    594600        const ast::WaitForClause * visit( const ast::WaitForClause * node ) override final {
    595601                // There is no old-AST WaitForClause, so this should never be called.
     602                assert( !node );
     603                return nullptr;
     604        }
     605
     606    const ast::Stmt * visit( const ast::WaitUntilStmt * node ) override final {
     607        // There is no old-AST WaitUntilStmt, so this should never be called.
    596608                assert( !node );
    597609                return nullptr;
     
    21582170                        auto clause = new ast::WaitForClause( old->location );
    21592171
    2160                         clause->target_func = GET_ACCEPT_1(clauses[i].target.function, Expr);
     2172                        clause->target = GET_ACCEPT_1(clauses[i].target.function, Expr);
    21612173                        clause->target_args = GET_ACCEPT_V(clauses[i].target.arguments, Expr);
    21622174                        clause->stmt = GET_ACCEPT_1(clauses[i].statement, Stmt);
    2163                         clause->cond = GET_ACCEPT_1(clauses[i].condition, Expr);
     2175                        clause->when_cond = GET_ACCEPT_1(clauses[i].condition, Expr);
    21642176
    21652177                        stmt->clauses.push_back( clause );
  • src/AST/Fwd.hpp

    r6e4c44d r3982384  
    5858class FinallyClause;
    5959class SuspendStmt;
     60class WhenClause;
    6061class WaitForStmt;
    6162class WaitForClause;
     63class WaitUntilStmt;
    6264class WithStmt;
    6365class DeclStmt;
  • src/AST/Node.cpp

    r6e4c44d r3982384  
    174174template class ast::ptr_base< ast::FinallyClause, ast::Node::ref_type::weak >;
    175175template class ast::ptr_base< ast::FinallyClause, ast::Node::ref_type::strong >;
     176template class ast::ptr_base< ast::WhenClause, ast::Node::ref_type::weak >;
     177template class ast::ptr_base< ast::WhenClause, ast::Node::ref_type::strong >;
    176178template class ast::ptr_base< ast::WaitForStmt, ast::Node::ref_type::weak >;
    177179template class ast::ptr_base< ast::WaitForStmt, ast::Node::ref_type::strong >;
    178180template class ast::ptr_base< ast::WaitForClause, ast::Node::ref_type::weak >;
    179181template class ast::ptr_base< ast::WaitForClause, ast::Node::ref_type::strong >;
     182template class ast::ptr_base< ast::WaitUntilStmt, ast::Node::ref_type::weak >;
     183template class ast::ptr_base< ast::WaitUntilStmt, ast::Node::ref_type::strong >;
    180184template class ast::ptr_base< ast::WithStmt, ast::Node::ref_type::weak >;
    181185template class ast::ptr_base< ast::WithStmt, ast::Node::ref_type::strong >;
  • src/AST/Pass.hpp

    r6e4c44d r3982384  
    162162        const ast::FinallyClause *    visit( const ast::FinallyClause        * ) override final;
    163163        const ast::Stmt *             visit( const ast::SuspendStmt          * ) override final;
     164    const ast::WhenClause *       visit( const ast::WhenClause           * ) override final;
    164165        const ast::Stmt *             visit( const ast::WaitForStmt          * ) override final;
    165166        const ast::WaitForClause *    visit( const ast::WaitForClause        * ) override final;
     167    const ast::Stmt *             visit( const ast::WaitUntilStmt        * ) override final;
    166168        const ast::Decl *             visit( const ast::WithStmt             * ) override final;
    167169        const ast::NullStmt *         visit( const ast::NullStmt             * ) override final;
  • src/AST/Pass.impl.hpp

    r6e4c44d r3982384  
    2222#include "AST/TranslationUnit.hpp"
    2323#include "AST/TypeSubstitution.hpp"
    24 #include "Common/Iterate.hpp"
    2524
    2625#define VISIT_START( node ) \
     
    127126        }
    128127
    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 
    135128        template< typename core_t >
    136129        template< typename node_t >
     
    234227
    235228                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;
    286229        }
    287230
     
    353296
    354297                return new_kids;
    355         }
    356 
    357         template< template <class...> class container_t, typename node_t >
    358         template< typename object_t, typename super_t, typename field_t >
    359         void __pass::resultN<container_t, node_t>::apply(object_t * object, field_t super_t::* field) {
    360                 auto & container = object->*field;
    361                 __pedantic_pass_assert( container.size() == values.size() );
    362 
    363                 for(size_t i = 0; i < container.size(); i++) {
    364                         // Take all the elements that are different in 'values'
    365                         // and swap them into 'container'
    366                         if( values[i] != nullptr ) swap(container[i], values[i]);
    367                 }
    368 
    369                 // Now the original containers should still have the unchanged values
    370                 // but also contain the new values
    371298        }
    372299
     
    1066993
    1067994//--------------------------------------------------------------------------
     995// WhenClause
     996template< typename core_t >
     997const ast::WhenClause * ast::Pass< core_t >::visit( const ast::WhenClause * node ) {
     998        VISIT_START( node );
     999
     1000        if ( __visit_children() ) {
     1001                maybe_accept( node, &WhenClause::target );
     1002                maybe_accept( node, &WhenClause::stmt );
     1003                maybe_accept( node, &WhenClause::when_cond );
     1004        }
     1005
     1006        VISIT_END( WhenClause, node );
     1007}
     1008
     1009//--------------------------------------------------------------------------
    10681010// WaitForStmt
    10691011template< typename core_t >
     
    10901032
    10911033        if ( __visit_children() ) {
    1092                 maybe_accept( node, &WaitForClause::target_func );
     1034                maybe_accept( node, &WaitForClause::target );
    10931035                maybe_accept( node, &WaitForClause::target_args );
    10941036                maybe_accept( node, &WaitForClause::stmt );
    1095                 maybe_accept( node, &WaitForClause::cond );
     1037                maybe_accept( node, &WaitForClause::when_cond );
    10961038        }
    10971039
    10981040        VISIT_END( WaitForClause, node );
     1041}
     1042
     1043//--------------------------------------------------------------------------
     1044// WaitUntilStmt
     1045template< typename core_t >
     1046const ast::Stmt * ast::Pass< core_t >::visit( const ast::WaitUntilStmt * node ) {
     1047        VISIT_START( node );
     1048
     1049        if ( __visit_children() ) {
     1050                maybe_accept( node, &WaitUntilStmt::clauses );
     1051                maybe_accept( node, &WaitUntilStmt::timeout_time );
     1052                maybe_accept( node, &WaitUntilStmt::timeout_stmt );
     1053                maybe_accept( node, &WaitUntilStmt::timeout_cond );
     1054                maybe_accept( node, &WaitUntilStmt::else_stmt );
     1055                maybe_accept( node, &WaitUntilStmt::else_cond );
     1056        }
     1057
     1058        VISIT_END( Stmt, node );
    10991059}
    11001060
     
    22032163}
    22042164
     2165#undef __pedantic_pass_assertf
     2166#undef __pedantic_pass_assert
    22052167#undef VISIT_START
    22062168#undef VISIT_END
  • src/AST/Pass.proto.hpp

    r6e4c44d r3982384  
    1717// IWYU pragma: private, include "Pass.hpp"
    1818
     19#include "Common/Iterate.hpp"
    1920#include "Common/Stats/Heap.h"
    2021namespace ast {
     
    2425        template<typename node_t> node_t * deepCopy( const node_t * );
    2526}
     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
    2635
    2736namespace ast::__pass {
     
    130139
    131140        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        }
    133144};
    134145
     
    150161
    151162        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        }
    153182
    154183        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        }
    156194
    157195        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        }
    159207};
    160208
     
    166214
    167215        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        }
    169228};
    170229
     
    517576
    518577} // namespace ast::__pass
     578
     579#undef __pedantic_pass_assertf
     580#undef __pedantic_pass_assert
  • src/AST/Print.cpp

    r6e4c44d r3982384  
    208208        }
    209209
     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
    210237        void preprint( const ast::NamedTypeDecl * node ) {
    211238                if ( ! node->name.empty() ) {
     
    756783        }
    757784
     785        virtual const ast::WhenClause * visit( const ast::WhenClause * node ) override final {
     786                os << indent-1 << "target: ";
     787                safe_print( node->target );
     788
     789                if ( node->stmt ) {
     790                        os << indent-1 << "... with statment:" << endl;
     791                        node->stmt->accept( *this );
     792                }
     793
     794                if ( node->when_cond ) {
     795                        os << indent-1 << "... with when condition:" << endl;
     796                        node->when_cond->accept( *this );
     797                }
     798
     799                return node;
     800        }
     801
    758802        virtual const ast::Stmt * visit( const ast::WaitForStmt * node ) override final {
    759803                os << "Waitfor Statement" << endl;
     
    793837        virtual const ast::WaitForClause * visit( const ast::WaitForClause * node ) override final {
    794838                os << indent-1 << "target function: ";
    795                 safe_print( node->target_func );
     839                safe_print( node->target );
    796840
    797841                if ( !node->target_args.empty() ) {
     
    807851                }
    808852
    809                 if ( node->cond ) {
     853                if ( node->when_cond ) {
    810854                        os << indent-1 << "... with condition:" << endl;
    811                         node->cond->accept( *this );
    812                 }
    813 
     855                        node->when_cond->accept( *this );
     856                }
     857
     858                return node;
     859        }
     860
     861    virtual const ast::Stmt * visit( const ast::WaitUntilStmt * node ) override final {
     862                os << "Waituntil Statement" << endl;
     863                indent += 2;
     864                for( const auto & clause : node->clauses ) {
     865                        clause->accept( *this );
     866                }
     867        print(node);    // calls print( const ast::WaitStmt * node )
    814868                return node;
    815869        }
  • src/AST/Stmt.hpp

    r6e4c44d r3982384  
    378378};
    379379
    380 // Waitfor statement: when (...) waitfor (... , ...) ... timeout(...) ... else ...
    381 class WaitForStmt final : public Stmt {
    382   public:
    383         std::vector<ptr<WaitForClause>> clauses;
    384         ptr<Expr> timeout_time;
     380// Base class of WaitFor/WaitUntil statements
     381// form: KEYWORD(...) ... timeout(...) ... else ...
     382class WaitStmt : public Stmt {
     383  public:
     384    ptr<Expr> timeout_time;
    385385        ptr<Stmt> timeout_stmt;
    386386        ptr<Expr> timeout_cond;
     
    388388        ptr<Expr> else_cond;
    389389
     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
     400class 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 ...
     416class WaitForStmt final : public WaitStmt {
     417  public:
     418        std::vector<ptr<WaitForClause>> clauses;
     419
    390420        WaitForStmt( const CodeLocation & loc, const std::vector<Label> && labels = {} )
    391                 : Stmt(loc, std::move(labels)) {}
     421                : WaitStmt(loc, std::move(labels)) {}
    392422
    393423        const Stmt * accept( Visitor & v ) const override { return v.visit( this ); }
     
    398428
    399429// Clause in a waitfor statement: waitfor (..., ...) ...
    400 class WaitForClause final : public StmtClause {
    401   public:
    402         ptr<Expr> target_func;
     430class WaitForClause final : public WhenClause {
     431  public:
    403432        std::vector<ptr<Expr>> target_args;
    404         ptr<Stmt> stmt;
    405         ptr<Expr> cond;
    406433
    407434        WaitForClause( const CodeLocation & loc )
    408                 : StmtClause( loc ) {}
     435                : WhenClause( loc ) {}
    409436
    410437        const WaitForClause * accept( Visitor & v ) const override { return v.visit( this ); }
    411438  private:
    412439        WaitForClause * clone() const override { return new WaitForClause{ *this }; }
     440        MUTATE_FRIEND
     441};
     442
     443// waituntil statement: when (...) waituntil (...) ... timeout(...) ... else ...
     444class 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 }; }
    413486        MUTATE_FRIEND
    414487};
  • src/AST/Visitor.hpp

    r6e4c44d r3982384  
    5050    virtual const ast::FinallyClause *    visit( const ast::FinallyClause        * ) = 0;
    5151    virtual const ast::Stmt *             visit( const ast::SuspendStmt          * ) = 0;
     52    virtual const ast::WhenClause *       visit( const ast::WhenClause           * ) = 0;
    5253    virtual const ast::Stmt *             visit( const ast::WaitForStmt          * ) = 0;
    5354    virtual const ast::WaitForClause *    visit( const ast::WaitForClause        * ) = 0;
     55    virtual const ast::Stmt *             visit( const ast::WaitUntilStmt        * ) = 0;
    5456    virtual const ast::Decl *             visit( const ast::WithStmt             * ) = 0;
    5557    virtual const ast::NullStmt *         visit( const ast::NullStmt             * ) = 0;
  • src/Common/CodeLocationTools.cpp

    r6e4c44d r3982384  
    128128    macro(FinallyClause, FinallyClause) \
    129129    macro(SuspendStmt, Stmt) \
     130    macro(WhenClause, WhenClause) \
    130131    macro(WaitForStmt, Stmt) \
    131132    macro(WaitForClause, WaitForClause) \
     133    macro(WaitUntilStmt, Stmt) \
    132134    macro(WithStmt, Decl) \
    133135    macro(NullStmt, NullStmt) \
  • src/Concurrency/WaitforNew.cpp

    r6e4c44d r3982384  
    305305
    306306        const ast::VariableExpr * variableExpr =
    307                 clause->target_func.as<ast::VariableExpr>();
     307                clause->target.as<ast::VariableExpr>();
    308308        ast::Expr * castExpr = new ast::CastExpr(
    309309                location,
    310310                new ast::CastExpr(
    311311                        location,
    312                         clause->target_func,
     312                        clause->target,
    313313                        ast::deepCopy( variableExpr->result.get() ),
    314314                        ast::GeneratedCast ),
     
    325325
    326326        ResolveContext context{ symtab, transUnit().global };
    327         out->push_back( maybeCond( location, clause->cond.get(), {
     327        out->push_back( maybeCond( location, clause->when_cond.get(), {
    328328                makeAccStmt( location, acceptables, index, "is_dtor",
    329                         detectIsDtor( location, clause->target_func ), context ),
     329                        detectIsDtor( location, clause->target ), context ),
    330330                makeAccStmt( location, acceptables, index, "func",
    331331                        funcExpr, context ),
  • src/Concurrency/module.mk

    r6e4c44d r3982384  
    2323        Concurrency/WaitforNew.cpp \
    2424        Concurrency/Waitfor.cc \
    25         Concurrency/Waitfor.h
     25        Concurrency/Waitfor.h \
     26        Concurrency/Waituntil.cpp \
     27        Concurrency/Waituntil.hpp
  • src/Parser/StatementNode.cc

    r6e4c44d r3982384  
    328328ast::WaitForStmt * build_waitfor( const CodeLocation & location, ast::WaitForStmt * existing, ExpressionNode * when, ExpressionNode * targetExpr, StatementNode * stmt ) {
    329329        auto clause = new ast::WaitForClause( location );
    330         clause->target_func = maybeBuild( targetExpr );
     330        clause->target = maybeBuild( targetExpr );
    331331        clause->stmt = maybeMoveBuild( stmt );
    332         clause->cond = notZeroExpr( maybeMoveBuild( when ) );
     332        clause->when_cond = notZeroExpr( maybeMoveBuild( when ) );
    333333
    334334        ExpressionNode * next = dynamic_cast<ExpressionNode *>( targetExpr->get_next() );
     
    359359        return existing;
    360360} // build_waitfor_timeout
     361
     362ast::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}
     369ast::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}
     375ast::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
     383ast::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}
    361450
    362451ast::Stmt * build_with( const CodeLocation & location, ExpressionNode * exprs, StatementNode * stmt ) {
  • src/Parser/StatementNode.h

    r6e4c44d r3982384  
    100100ast::WaitForStmt * build_waitfor_else( const CodeLocation &, ast::WaitForStmt * existing, ExpressionNode * when, StatementNode * stmt );
    101101ast::WaitForStmt * build_waitfor_timeout( const CodeLocation &, ast::WaitForStmt * existing, ExpressionNode * when, ExpressionNode * timeout, StatementNode * stmt );
     102ast::WaitUntilStmt::ClauseNode * build_waituntil_clause( const CodeLocation &, ExpressionNode * when, ExpressionNode * targetExpr, StatementNode * stmt );
     103ast::WaitUntilStmt::ClauseNode * build_waituntil_else( const CodeLocation &, ExpressionNode * when, StatementNode * stmt );
     104ast::WaitUntilStmt::ClauseNode * build_waituntil_timeout( const CodeLocation &, ExpressionNode * when, ExpressionNode * timeout, StatementNode * stmt );
     105ast::WaitUntilStmt * build_waituntil_stmt( const CodeLocation &, ast::WaitUntilStmt::ClauseNode * root );
    102106ast::Stmt * build_with( const CodeLocation &, ExpressionNode * exprs, StatementNode * stmt );
    103107ast::Stmt * build_mutex( const CodeLocation &, ExpressionNode * exprs, StatementNode * stmt );
  • src/Parser/lex.ll

    r6e4c44d r3982384  
    1010 * Created On       : Sat Sep 22 08:58:10 2001
    1111 * Last Modified By : Peter A. Buhr
    12  * Last Modified On : Sat Mar 25 08:09:03 2023
    13  * Update Count     : 768
     12 * Last Modified On : Tue May  2 08:45:21 2023
     13 * Update Count     : 769
    1414 */
    1515
     
    258258enable                  { KEYWORD_RETURN(ENABLE); }                             // CFA
    259259enum                    { KEYWORD_RETURN(ENUM); }
     260exception               { KEYWORD_RETURN(EXCEPTION); }                  // CFA
    260261__extension__   { KEYWORD_RETURN(EXTENSION); }                  // GCC
    261 exception               { KEYWORD_RETURN(EXCEPTION); }                  // CFA
    262262extern                  { KEYWORD_RETURN(EXTERN); }
    263263fallthrough             { KEYWORD_RETURN(FALLTHROUGH); }                // CFA
  • src/Parser/parser.yy

    r6e4c44d r3982384  
    307307        ClauseNode * clause;
    308308        ast::WaitForStmt * wfs;
     309    ast::WaitUntilStmt::ClauseNode * wucn;
    309310        CondCtl * ifctl;
    310311        ForCtrl * forctl;
     
    427428%type<expr> when_clause                                 when_clause_opt                         waitfor         waituntil               timeout
    428429%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
    430432
    431433// declarations
     
    16851687waituntil_clause:
    16861688        when_clause_opt waituntil statement
    1687                 { printf( "waituntil_clause 1\n" ); $$ = nullptr; }
     1689                { $$ = build_waituntil_clause( yylloc, $1, $2, maybe_build_compound( yylloc, $3 ) ); }
    16881690        | '(' wor_waituntil_clause ')'
    1689                 { printf( "waituntil_clause 2\n" ); $$ = nullptr; }
     1691                { $$ = $2; }
    16901692        ;
    16911693
    16921694wand_waituntil_clause:
    16931695        waituntil_clause                                                                        %prec THEN
    1694                 { printf( "wand_waituntil_clause 1\n" ); $$ = nullptr; }
     1696                { $$ = $1; }
    16951697        | waituntil_clause wand wand_waituntil_clause
    1696                 { printf( "wand_waituntil_clause 2\n" ); $$ = nullptr; }
     1698                { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::AND, $1, $3 ); }
    16971699        ;
    16981700
    16991701wor_waituntil_clause:
    17001702        wand_waituntil_clause
    1701                 { printf( "wor_waituntil_clause 1\n" ); $$ = nullptr; }
     1703                { $$ = $1; }
    17021704        | wor_waituntil_clause wor wand_waituntil_clause
    1703                 { printf( "wor_waituntil_clause 2\n" ); $$ = nullptr; }
     1705                { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::OR, $1, $3 ); }
    17041706        | wor_waituntil_clause wor when_clause_opt ELSE statement
    1705                 { printf( "wor_waituntil_clause 3\n" ); $$ = nullptr; }
     1707                { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::LEFT_OR, $1, build_waituntil_else( yylloc, $3, maybe_build_compound( yylloc, $5 ) ) ); }
    17061708        | wor_waituntil_clause wor when_clause_opt timeout statement    %prec THEN
    1707                 { printf( "wor_waituntil_clause 4\n" ); $$ = nullptr; }
     1709                { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::LEFT_OR, $1, build_waituntil_timeout( yylloc, $3, $4, maybe_build_compound( yylloc, $5 ) ) ); }
    17081710        // "else" must be conditional after timeout or timeout is never triggered (i.e., it is meaningless)
    17091711        | wor_waituntil_clause wor when_clause_opt timeout statement wor ELSE statement // syntax error
    17101712                { SemanticError( yylloc, "else clause must be conditional after timeout or timeout never triggered." ); $$ = nullptr; }
    17111713        | wor_waituntil_clause wor when_clause_opt timeout statement wor when_clause ELSE statement
    1712                 { printf( "wor_waituntil_clause 6\n" ); $$ = nullptr; }
     1714                { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::LEFT_OR, $1,
     1715                new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::OR,
     1716                    build_waituntil_timeout( yylloc, $3, $4, maybe_build_compound( yylloc, $5 ) ),
     1717                    build_waituntil_else( yylloc, $7, maybe_build_compound( yylloc, $9 ) ) ) ); }
    17131718        ;
    17141719
     
    17161721        wor_waituntil_clause                                                            %prec THEN
    17171722                // SKULLDUGGERY: create an empty compound statement to test parsing of waituntil statement.
    1718                 { $$ = new StatementNode( build_compound( yylloc, nullptr ) ); }
     1723                {
     1724            $$ = new StatementNode( build_waituntil_stmt( yylloc, $1 ) );
     1725            // $$ = new StatementNode( build_compound( yylloc, nullptr ) );
     1726        }
    17191727        ;
    17201728
  • src/ResolvExpr/Resolver.cc

    r6e4c44d r3982384  
    17301730
    17311731                        // Find all candidates for a function in canonical form
    1732                         funcFinder.find( clause.target_func, ResolvMode::withAdjustment() );
     1732                        funcFinder.find( clause.target, ResolvMode::withAdjustment() );
    17331733
    17341734                        if ( funcFinder.candidates.empty() ) {
    17351735                                stringstream ss;
    17361736                                ss << "Use of undeclared indentifier '";
    1737                                 ss << clause.target_func.strict_as< ast::NameExpr >()->name;
     1737                                ss << clause.target.strict_as< ast::NameExpr >()->name;
    17381738                                ss << "' in call to waitfor";
    17391739                                SemanticError( stmt->location, ss.str() );
     
    19221922                        auto clause2 = new ast::WaitForClause( clause.location );
    19231923
    1924                         clause2->target_func = funcCandidates.front()->expr;
     1924                        clause2->target = funcCandidates.front()->expr;
    19251925
    19261926                        clause2->target_args.reserve( clause.target_args.size() );
     
    19451945
    19461946                        // 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 );
    19481948                        clause2->stmt = clause.stmt->accept( *visitor );
    19491949
  • src/main.cc

    r6e4c44d r3982384  
    4848#include "Concurrency/Keywords.h"           // for implementMutex, implement...
    4949#include "Concurrency/Waitfor.h"            // for generateWaitfor
     50#include "Concurrency/Waituntil.hpp"        // for generateWaitUntil
    5051#include "ControlStruct/ExceptDecl.h"       // for translateExcept
    5152#include "ControlStruct/ExceptTranslate.h"  // for translateThrows, translat...
     
    340341                PASS( "Implement Concurrent Keywords", Concurrency::implementKeywords, transUnit );
    341342                PASS( "Forall Pointer Decay", Validate::decayForallPointers, transUnit );
     343        PASS( "Implement Waituntil", Concurrency::generateWaitUntil, transUnit  );
    342344                PASS( "Hoist Control Declarations", ControlStruct::hoistControlDecls, transUnit );
    343345
  • tests/Makefile.am

    r6e4c44d r3982384  
    1111## Created On       : Sun May 31 09:08:15 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Mon Apr 10 23:24:02 2023
    14 ## Update Count     : 96
     13## Last Modified On : Fri May 12 18:03:57 2023
     14## Update Count     : 176
    1515###############################################################################
    1616
     
    2222DEFAULT_INCLUDES = -I${abs_srcdir}
    2323
    24 debug=yes
    25 installed=no
     24debug ?= yes
     25installed ?= no
     26ARCH=${if ${arch},"--arch=${arch}"}
    2627archiveerrors=
    2728
     
    3738# applies to both programs
    3839# 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})= \
     40AM_CFLAGS = ${if ${test}, 2> ${test}, } \
     41        -fdebug-prefix-map=${abspath ${abs_srcdir}}= \
    4142        -fdebug-prefix-map=/tmp= \
    4243        -fno-diagnostics-show-caret \
     
    5152
    5253# get the desired cfa to test
    53 TARGET_CFA = $(if $(filter $(installed),yes), @CFACC_INSTALL@, @CFACC@)
     54TARGET_CFA = ${if ${filter ${installed},yes}, @CFACC_INSTALL@, @CFACC@}
    5455
    5556# 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)
     57CC = LC_ALL=C ${if ${DISTCC_CFA_PATH},distcc ${DISTCC_CFA_PATH} ${ARCH_FLAGS} ,${TARGET_CFA} ${DEBUG_FLAGS} ${ARCH_FLAGS}}
     58CFACC = ${CC}
    5859
    5960# get local binary for depedencies
     
    6162
    6263# 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_makeflags
    69 .INTERMEDIATE: .validate .validate.cfa .test_makeflags
     64CFACCLOCAL = ${if ${DISTCC_CFA_PATH},${DISTCC_CFA_PATH} ${ARCH_FLAGS} ,${TARGET_CFA} ${DEBUG_FLAGS} ${ARCH_FLAGS}}
     65CFACCLINK = ${CFACCLOCAL} -quiet ${if ${test}, 2> ${test}, } ${${shell echo "${@}_FLAGSLD" | sed 's/-\|\//_/g'}}
     66
     67PRETTY_PATH=mkdir -p ${dir ${abspath ${@}}} && cd ${srcdir} &&
     68
     69.PHONY : list .validate .test_makeflags
     70.INTERMEDIATE : .validate .validate.cfa .test_makeflags
    7071EXTRA_PROGRAMS = avl_test linkonce linking/mangling/anon .dummy_hack # build but do not install
    7172EXTRA_DIST = test.py \
     
    9596        for file in `${TEST_PY} --list-dist`; do \
    9697                if test -f ${srcdir}/$${file}; then \
    97                         $(MKDIR_P) $$(dirname ${distdir}/$${file}); \
     98                        ${MKDIR_P} $$(dirname ${distdir}/$${file}); \
    9899                        cp -df ${srcdir}/$${file} ${distdir}/$${file}; \
    99100                fi; \
     
    107108
    108109#----------------------------------------------------------------------------------------------------------------
    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
     111all-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
     114install : all-local # PAB only
     115
     116tests : all-local
     117
     118quick :
     119        @+${TEST_PY} --debug=${debug} --install=${installed} --archive-errors=${archiveerrors} ${concurrent} ${timeouts} ${ARCH} ${quick_test}
     120
     121concurrency :
     122        @+${TEST_PY} --debug=${debug} --install=${installed} ${ARCH} -Iconcurrent
     123
     124list :
     125        @+${TEST_PY} --list ${concurrent}
     126
     127help :
     128        @echo "user targets:"
     129        @echo "    Run the complete test suite."
     130        @echo "    $$ make (null) / tests [debug=yes/no] [installed=yes/no] [arch=x86/x64/arm]"
     131        @echo ""
     132        @echo "    Run the short (quick) test suite."
     133        @echo "    $$ make quick [debug=yes/no] [installed=yes/no] [arch=x86/x64/arm]"
     134        @echo ""
     135        @echo "    Run the concurrent test suite."
     136        @echo "    $$ make concurrency [debug=yes/no] [installed=yes/no] [arch=x86/x64/arm]"
     137        @echo ""
     138        @echo "    List all tests in the test suite."
     139        @echo "    $$ make list"
    114140
    115141mostlyclean-local :
     
    123149        find ${builddir} -path '*.Po' -delete
    124150
    125 list :
    126         @+${TEST_PY} --list ${concurrent}
    127 
    128151.test_makeflags:
    129152        @echo "${MAKEFLAGS}"
    130153
    131154.validate: .validate.cfa
    132         $(CFACOMPILE) .validate.cfa -fsyntax-only -Wall -Wextra -Werror
     155        ${CFACOMPILE} .validate.cfa -fsyntax-only -Wall -Wextra -Werror
    133156
    134157.validate.cfa:
     
    142165        @echo "int bar() { return 0; }" > ${@}
    143166
    144 concurrency :
    145         @+${TEST_PY} --debug=${debug}  --install=${installed} -Iconcurrent
    146 
    147167#----------------------------------------------------------------------------------------------------------------
    148168
    149169# 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'))
     170CFACOMPILETEST=${PRETTY_PATH} ${CFACOMPILE} ${shell realpath --relative-to=${srcdir} ${<}} ${${shell echo "${@}_FLAGSCFA" | sed 's/-\|\//_/g'}}
    151171
    152172#----------------------------------------------------------------------------------------------------------------
     
    155175# split into two steps to support compiling remotely using distcc
    156176# 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 ${@}).o
     177% : %.cfa ${CFACCBIN}
     178        ${CFACOMPILETEST} -c -o ${abspath ${@}}.o -DIN_DIR="${abspath ${dir ${<}}}/.in/"
     179        ${CFACCLINK} ${@}.o -o ${abspath ${@}}
     180        rm ${abspath ${@}}.o
    161181
    162182# implicit rule for c++ test
    163183# convient for testing the testsuite itself but not actuall used
    164184% : %.cpp
    165         $(PRETTY_PATH) $(CXXCOMPILE) $(shell realpath --relative-to=${srcdir} ${<}) -o $(abspath ${@})
     185        ${PRETTY_PATH} ${CXXCOMPILE} ${shell realpath --relative-to=${srcdir} ${<}} -o ${abspath ${@}}
    166186
    167187#------------------------------------------------------------------------------
     
    174194# Generated code
    175195GENERATED_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 ${@}}
    178198
    179199#------------------------------------------------------------------------------
     
    181201#------------------------------------------------------------------------------
    182202# 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 ${@})
     203CFACOMPILE_SYNTAX = ${CFACOMPILETEST} -Wno-unused-variable -Wno-unused-label -c -fsyntax-only -o ${abspath ${@}}
    184204
    185205SYNTAX_ONLY_CODE = expression typedefRedef variableDeclarator switch numericConstants identFuncDeclarator \
    186206        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 ${@}}, }
    190210
    191211# expected failures
    192212# 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) -DERR1
    195         -cp $(test) $(abspath ${@})
    196 
    197 init1-ERROR : init1.cfa $(CFACCBIN)
    198         $(CFACOMPILE_SYNTAX) -DERR1
    199         -cp $(test) $(abspath ${@})
    200 
    201 typedefRedef-ERR1 : typedefRedef.cfa $(CFACCBIN)
    202         $(CFACOMPILE_SYNTAX) -DERR1
    203         -cp $(test) $(abspath ${@})
    204 
    205 nested-types-ERR1 : nested-types.cfa $(CFACCBIN)
    206         $(CFACOMPILE_SYNTAX) -DERR1
    207         -cp $(test) $(abspath ${@})
    208 
    209 nested-types-ERR2 : nested-types.cfa $(CFACCBIN)
    210         $(CFACOMPILE_SYNTAX) -DERR2
    211         -cp $(test) $(abspath ${@})
    212 
    213 raii/memberCtors-ERR1 : raii/memberCtors.cfa $(CFACCBIN)
    214         $(CFACOMPILE_SYNTAX) -DERR1
    215         -cp $(test) $(abspath ${@})
    216 
    217 raii/ctor-autogen-ERR1 : raii/ctor-autogen.cfa $(CFACCBIN)
    218         $(CFACOMPILE_SYNTAX) -DERR1
    219         -cp $(test) $(abspath ${@})
    220 
    221 raii/dtor-early-exit-ERR1 : raii/dtor-early-exit.cfa $(CFACCBIN)
    222         $(CFACOMPILE_SYNTAX) -DERR1
    223         -cp $(test) $(abspath ${@})
    224 
    225 raii/dtor-early-exit-ERR2 : raii/dtor-early-exit.cfa $(CFACCBIN)
    226         $(CFACOMPILE_SYNTAX) -DERR2
    227         -cp $(test) $(abspath ${@})
     213alloc-ERROR : alloc.cfa ${CFACCBIN}
     214        ${CFACOMPILE_SYNTAX} -DERR1
     215        -cp ${test} ${abspath ${@}}
     216
     217init1-ERROR : init1.cfa ${CFACCBIN}
     218        ${CFACOMPILE_SYNTAX} -DERR1
     219        -cp ${test} ${abspath ${@}}
     220
     221typedefRedef-ERR1 : typedefRedef.cfa ${CFACCBIN}
     222        ${CFACOMPILE_SYNTAX} -DERR1
     223        -cp ${test} ${abspath ${@}}
     224
     225nested-types-ERR1 : nested-types.cfa ${CFACCBIN}
     226        ${CFACOMPILE_SYNTAX} -DERR1
     227        -cp ${test} ${abspath ${@}}
     228
     229nested-types-ERR2 : nested-types.cfa ${CFACCBIN}
     230        ${CFACOMPILE_SYNTAX} -DERR2
     231        -cp ${test} ${abspath ${@}}
     232
     233raii/memberCtors-ERR1 : raii/memberCtors.cfa ${CFACCBIN}
     234        ${CFACOMPILE_SYNTAX} -DERR1
     235        -cp ${test} ${abspath ${@}}
     236
     237raii/ctor-autogen-ERR1 : raii/ctor-autogen.cfa ${CFACCBIN}
     238        ${CFACOMPILE_SYNTAX} -DERR1
     239        -cp ${test} ${abspath ${@}}
     240
     241raii/dtor-early-exit-ERR1 : raii/dtor-early-exit.cfa ${CFACCBIN}
     242        ${CFACOMPILE_SYNTAX} -DERR1
     243        -cp ${test} ${abspath ${@}}
     244
     245raii/dtor-early-exit-ERR2 : raii/dtor-early-exit.cfa ${CFACCBIN}
     246        ${CFACOMPILE_SYNTAX} -DERR2
     247        -cp ${test} ${abspath ${@}}
    228248
    229249# Exception Tests
    230250# Test with libcfathread; it changes how storage works.
    231251
    232 exceptions/%-threads : exceptions/%.cfa $(CFACCBIN)
    233         $(CFACOMPILETEST) -include exceptions/with-threads.hfa -c -o $(abspath ${@}).o
    234         $(CFACCLOCAL) $($(shell echo "${@}_FLAGSLD" | sed 's/-\|\//_/g')) $(abspath ${@}).o -o $(abspath ${@})
     252exceptions/%-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 ${@}}
    235255
    236256# Linking tests
    237257# 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 ${@}).o
    240         $(CFACCLINK)  -O0 ${@}.o -o $(abspath ${@})
    241         rm $(abspath ${@}).o
     258linking/linkerror : linking/linkerror.cfa ${CFACCBIN}
     259        ${CFACOMPILETEST} -O0 -c -o ${abspath ${@}}.o
     260        ${CFACCLINK}  -O0 ${@}.o -o ${abspath ${@}}
     261        rm ${abspath ${@}}.o
    242262
    243263#------------------------------------------------------------------------------
  • tests/concurrent/futures/select_future.cfa

    r6e4c44d r3982384  
    196196    delete( shared_future );
    197197        printf( "done 3\n" );
    198 
    199     // C_TODO: add test for select statement once it is implemented
    200198}
Note: See TracChangeset for help on using the changeset viewer.