Changes in / [3982384:6e4c44d]


Ignore:
Files:
8 added
305 deleted
62 edited

Legend:

Unmodified
Added
Removed
  • Jenkins/FullBuild

    r3982384 r6e4c44d  
    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 ) },
    2322                                        gcc_10_x64_new: { trigger_build( 'gcc-10',  'x64', false ) },
    2423                                        gcc_09_x64_new: { trigger_build( 'gcc-9',   'x64', false ) },
    2524                                        gcc_08_x64_new: { trigger_build( 'gcc-8',   'x64', false ) },
    2625                                        gcc_07_x64_new: { trigger_build( 'gcc-7',   'x64', false ) },
    27                                         // gcc_06_x64_new: { trigger_build( 'gcc-6',   'x64', false ) },
     26                                        gcc_06_x64_new: { trigger_build( 'gcc-6',   'x64', false ) },
    2827                                        clang_x64_new:  { trigger_build( 'clang',   'x64', true  ) },
    2928                                )
     
    4241        }
    4342
    44         // If an exception is caught we need to change the status and remember to
    45         // attach the build log to the email
     43        //If an exception is caught we need to change the status and remember to
     44        //attach the build log to the email
    4645        catch (Exception caughtError) {
    4746                echo('error caught')
     
    7473        // Run the build
    7574        // Don't propagate, it doesn't play nice with our email setup
    76         def result = build job: 'Cforall/master',                       \
     75        def result = build job: 'Cforall/master',               \
    7776                parameters: [                                           \
    7877                        [$class: 'StringParameterValue',                \
     
    8483                        [$class: 'BooleanParameterValue',               \
    8584                          name: 'NewAST',                               \
    86                           value: true],                                 \
     85                          value: true],                                         \
    8786                        [$class: 'BooleanParameterValue',               \
    8887                          name: 'RunAllTests',                          \
    89                           value: true],                                 \
     88                          value: true],                                         \
    9089                        [$class: 'BooleanParameterValue',               \
    9190                          name: 'RunBenchmark',                         \
    92                           value: true],                                 \
     91                          value: true],                                         \
    9392                        [$class: 'BooleanParameterValue',               \
    94                           name: 'BuildDocumentation',                   \
     93                          name: 'BuildDocumentation',           \
    9594                          value: doc],                                  \
    9695                        [$class: 'BooleanParameterValue',               \
    9796                          name: 'Publish',                              \
    98                           value: true],                                 \
     97                          value: true],                                         \
    9998                        [$class: 'BooleanParameterValue',               \
    10099                          name: 'Silent',                               \
    101                           value: true],                                 \
    102                 ],                                                      \
     100                          value: true],                                         \
     101                ],                                                              \
    103102                propagate: false
    104103
     
    112111
    113112def trigger_dist(String commitId, String buildNum) {
    114         def result = build job: 'Cforall_Distribute_Ref',               \
     113        def result = build job: 'Cforall_Distribute_Ref',       \
    115114                parameters: [                                           \
    116115                        string(name: 'GitRef', value: commitId),        \
    117                         string(name: 'Build' , value: buildNum)         \
    118                 ],                                                      \
     116                        string(name: 'Build' , value: buildNum) \
     117                ],                                                              \
    119118                propagate: false
    120119
  • Jenkinsfile

    r3982384 r6e4c44d  
    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" tests debug=yes archiveerrors=${BuildDir}/tests/crashes/full-debug"""
     157                                sh """make ${jopt} --no-print-directory -C tests timeouts="--timeout=600 --global-timeout=14400" all-tests debug=yes archiveerrors=${BuildDir}/tests/crashes/full-debug"""
    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" tests debug=no archiveerrors=${BuildDir}/tests/crashes/full-nodebug"""
     164                                sh """make ${jopt} --no-print-directory -C tests timeouts="--timeout=600 --global-timeout=14400" all-tests debug=no archiveerrors=${BuildDir}/tests/crashes/full-nodebug"""
    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\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',                          \
     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',                                                  \
    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',
    411409
    412410        // It's unfortunate but it looks like we need to checkout the entire repo just to get
  • Makefile.am

    r3982384 r6e4c44d  
    1111## Created On       : Sun May 31 22:14:18 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Fri May 12 18:30:01 2023
    14 ## Update Count     : 42
     13## Last Modified On : Sat Feb  2 16:54:42 2019
     14## Update Count     : 21
    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 installed ?= no
    41 ARCH = ${if ${arch},"arch=${arch}"}
     39debug=yes
     40check:
     41        $(MAKE) -C tests all-tests installed=no debug=${debug}
    4242
    43 check :
    44         ${MAKE} -C tests tests installed=${installed} debug=${debug} ${ARCH}
     43installcheck:
     44        $(MAKE) -C tests all-tests installed=yes debug=${debug}
    4545
    46 tests : check # synonym
    47 
    48 installcheck :
    49         ${MAKE} -C tests tests installed=yes debug=${debug} ${ARCH}
    50 
    51 installtest : installcheck # synonym
    52 
    53 help :
    54         @echo "user targets:"
    55         @echo "    Compile compiler/runtime and run test suite."
    56         @echo "    $$ make check / tests [debug=yes/no] [installed=yes/no] [arch=x86/x64/arm]"
    57         @echo ""
    58         @echo "    Compile compiler/runtime, run test suite, and install."
    59         @echo "    $$ make installcheck / installtests [debug=yes/no] installed=yes [arch=x86/x64/arm]"
    60 
    61 configure-libcfa : @LIBCFA_TARGET_MAKEFILES@
     46configure-libcfa: @LIBCFA_TARGET_MAKEFILES@
    6247        @true
    6348
    64 status : @LIBCFA_TARGET_MAKEFILES@
     49status: @LIBCFA_TARGET_MAKEFILES@
    6550        @echo -ne "translator\n\t"
    6651        @./config.status --config | sed "s/ /\n\t/g; s/\t'/\t/g; s/'\n/\n/g; s/^'//g; s/'$$//g"
    6752        @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"
    6853
    69 @LIBCFA_TARGET_DIRS@ ::
    70         ${MAKE} -C ${@} ${MAKECMDGOALS}
     54@LIBCFA_TARGET_DIRS@::
     55        $(MAKE) -C $@ $(MAKECMDGOALS)
    7156
    72 mostlyclean clean distclean maintainer-clean : @LIBCFA_TARGET_DIRS@
     57mostlyclean clean distclean maintainer-clean: @LIBCFA_TARGET_DIRS@
  • doc/LaTeXmacros/lstlang.sty

    r3982384 r6e4c44d  
    88%% Created On       : Sat May 13 16:34:42 2017
    99%% Last Modified By : Peter A. Buhr
    10 %% Last Modified On : Tue May  2 08:52:35 2023
    11 %% Update Count     : 30
     10%% Last Modified On : Mon May 31 08:20:41 2021
     11%% Update Count     : 28
    1212%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1313
     
    112112\lstdefinelanguage{CFA}[ANSI]{C}{
    113113        morekeywords={
    114                 _Alignas, _Alignof, __alignof, __alignof__, and, asm, __asm, __asm__, _Atomic, __attribute, __attribute__,
    115                 __auto_type, basetypeof, _Bool, catch, catchResume, choose, coerce, _Complex, __complex, __complex__, __const, __const__,
    116                 coroutine, _Decimal32, _Decimal64, _Decimal128, disable, enable, exception, __extension__, fallthrough, fallthru, finally, fixup,
    117                 __float80, float80, __float128, float128, _Float16, _Float32, _Float32x, _Float64, _Float64x, _Float128, _Float128x,
    118                 forall, fortran, generator, _Generic, _Imaginary, __imag, __imag__, inline, __inline, __inline__, int128, __int128, __int128_t,
    119                 __label__, monitor, mutex, _Noreturn, __builtin_offsetof, one_t, or, recover, report, restrict, __restrict, __restrict__,
    120                 __signed, __signed__, _Static_assert, suspend, thread, __thread, _Thread_local, throw, throwResume, timeout, trait, try,
    121                 typeof, __typeof, __typeof__, typeid, __uint128_t, __builtin_va_arg, __builtin_va_list, virtual, __volatile, __volatile__,
    122                 vtable, waitfor, waituntil, when, with, zero_t,
     114                _Alignas, _Alignof, __alignof, __alignof__, asm, __asm, __asm__, __attribute, __attribute__,
     115                auto, basetypeof, _Bool, catch, catchResume, choose, _Complex, __complex, __complex__, __const, __const__,
     116                coroutine, disable, dtype, enable, exception, __extension__, fallthrough, fallthru, finally, fixup,
     117                __float80, float80, __float128, float128, forall, ftype, generator, _Generic, _Imaginary, __imag, __imag__,
     118                inline, __inline, __inline__, __int128, int128, __label__, monitor, mutex, _Noreturn, one_t, or,
     119                otype, restrict, __restrict, __restrict__, recover, report, __signed, __signed__, _Static_assert, suspend,
     120                thread, __thread, _Thread_local, throw, throwResume, timeout, trait, try, ttype, typeof, __typeof, __typeof__,
     121                virtual, __volatile, __volatile__, waitfor, when, with, zero_t,
    123122    },
    124123        moredirectives={defined,include_next}%
  • doc/bibliography/pl.bib

    r3982384 r6e4c44d  
    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 
    215200@misc{ActorBenchmarks,
    216     keywords    = {Actors, microbenchmarks, uC++. CAF, ProtoActor, AkkaC, AkkaT},
     201    keywords    = {Actors, microbenchmarks, uC++. CAF, AkkaC, AkkaT, ProtoActor},
    217202    contributer = {pabuhr@plg},
    218203    key         = {ActorBenchmarks},
     
    230215    publisher   = {MIT Press, Cambridge},
    231216    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},
    254217}
    255218
     
    340303
    341304@article{Agrawal08,
    342     keywords    = {Adaptive scheduling, multiprocessing, processor allocation, randomized algorithm, space sharing, thread scheduling, two-level scheduling, work-stealing},
     305    keywords    = {Adaptive scheduling, adversary, instantaneous parallelism, job scheduling, multiprocessing, multiprogramming, parallel computation, parallelism feedback, processor allocation, randomized algorithm, space sharing, span, thread scheduling, trim analysis, two-level scheduling, work, work-stealing},
    343306    author      = {Agrawal, Kunal and Leiserson, Charles E. and He, Yuxiong and Hsu, Wen Jing},
    344307    title       = {Adaptive Work-stealing with Parallelism Feedback},
     
    472435    month       = sep,
    473436    year        = 2016,
    474     note        = {\url{http://doc.akka.io/docs/akka/2.4/AkkaScala.pdf}},
    475 }
    476 
    477 @misc{AkkaClassic,
    478     contributer = {pabuhr@plg},
    479     key         = {AkkaClassic},
    480     title       = {Akka Classic Actors},
    481     author      = {{Lightbend}},
    482     howpublished= {\url{https://doc.akka.io/docs/akka/current/index-classic.html}},
    483     year        = 2023,
     437    note        = {\href{http://doc.akka.io/docs/akka/2.4/AkkaScala.pdf}{http://\-doc.akka.io/\-docs/\-akka/\-2.4/\-AkkaScala.pdf}},
    484438}
    485439
     
    489443    title       = {Akka Futures},
    490444    author      = {{Lightbend}},
    491     howpublished= {\url{https://doc.akka.io/docs/akka/2.5/futures.html}},
    492     year        = 2022,
    493 }
    494 
    495 @misc{AkkaTyped,
    496     contributer = {pabuhr@plg},
    497     key         = {AkkaTyped},
    498     title       = {Akka Typed Actors},
    499     author      = {{Lightbend}},
    500     howpublished= {\url{https://doc.akka.io/docs/akka/2.5/typed-actors.html}},
     445    howpublished= {\href{https://doc.akka.io/docs/akka/2.5/futures.html}{https://\-doc.akka.io/\-docs/\-akka/\-2.5/\-futures.html}},
    501446    year        = 2022,
    502447}
     
    11731118@inproceedings{CAF,
    11741119    keywords    = {performance measurement, actor model, c++, message-oriented middleware, distributed debugging},
    1175     contributer = {pabuhr@plg},
    11761120    author      = {Charousset, Dominik and Hiesgen, Raphael and Schmidt, Thomas C.},
    1177     title       = {{CAF} -- the {C}++ Actor Framework for Scalable and Resource-Efficient Applications},
     1121    title       = {{CAF} - the {C}++ Actor Framework for Scalable and Resource-Efficient Applications},
    11781122    publisher   = {ACM},
    11791123    address     = {New York, NY, USA},
    11801124    organization= {Proceedings of the 4th International Workshop on Programming Based on Actors Agents \& Decentralized Control},
    11811125    pages       = {15-28},
    1182     numpages    = 14,
     1126    numpages    = {14},
    11831127    location    = {Portland, Oregon, USA},
    11841128    series      = {AGERE'14},
    1185     year        = 2014,
     1129    year        = {2014},
    11861130}
    11871131
     
    31583102    year        = 2016,
    31593103    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}},
    31703104}
    31713105
     
    54025336}
    54035337
    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 
    54145338@article{multilisp,
    54155339    keywords    = {futures, scheme},
     
    66946618}
    66956619
    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 
    67126620@book{PowerPC,
    67136621    key         = {PowerPC processor},
     
    67716679    title       = {Programming Languages -- {C}},
    67726680    organization= {International Standard ISO/IEC 9899:1999 (E)},
    6773     publisher   = {American National Standards Institute},
     6681    publisher   = {American National Standards Institute},
    67746682    address     = {www.ansi.org},
    67756683    year        = 1999,
     
    67826690    title       = {{C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Programming Language ISO/IEC 14882:1998},
    67836691    edition     = {1st},
    6784     organization= {International Standard Organization},
     6692    organization  = {International Standard Organization},
    67856693    address     = {Geneva, Switzerland},
    67866694    year        = 1998,
     
    70736981}
    70746982
    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 
    70846983@misc{Pthreads,
    70856984    keywords    = {pthreads, C concurrency},
     
    75597458    title       = {The Semantics of a Simple Language for Parallel Programming},
    75607459    author      = {Gilles Kahn},
    7561     organization= {IFIP Congress},
     7460    booktitle   = {IFIP Congress},
    75627461    year        = 1974,
    75637462}
     
    82748173
    82758174@article{SysVABI,
    8276     keywords    = {System V ABI},
    8277     contributer = {a3moss@uwaterloo.ca},
     8175    keywords    =  {System V ABI},
     8176    contributer =  {a3moss@uwaterloo.ca},
    82788177    title       = {System {V} application binary interface},
    82798178    author      = {Matz, Michael and Hubicka, Jan and Jaeger, Andreas and Mitchell, Mark},
     
    82818180    volume      = {99},
    82828181    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}
    82958182}
    82968183
     
    83198206    journal     = jcss,
    83208207    year        = 1978,
    8321     volume      = 17,
    8322     pages       = {348-375},
     8208    volume      = 17, pages = {348-375}
    83238209}
    83248210
  • doc/theses/colby_parsons_MMAth/Makefile

    r3982384 r6e4c44d  
    1313## Define the text source files.
    1414
    15 SOURCES = ${addsuffix .tex, \
    16         text/intro \
    17         text/CFA_intro \
    18         text/actors \
    19         text/frontpgs \
    20         text/CFA_concurrency \
    21         thesis \
    22         text/mutex_stmt \
    23         text/channels \
     15SOURCES = ${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                           \
    2423}
    2524
    26 FIGURES = ${addsuffix .pgf, \
    27         figures/pykeExecutor \
    28         figures/pykeCFAExecutor \
    29         figures/nasusExecutor \
    30         figures/nasusCFAExecutor \
    31         figures/pykeMatrix \
    32         figures/pykeCFAMatrix \
    33         figures/nasusMatrix \
    34         figures/nasusCFAMatrix \
    35         figures/pykeRepeat \
    36         figures/pykeCFARepeat \
    37         figures/nasusRepeat \
    38         figures/nasusCFARepeat \
    39         figures/pykeCFABalance-One \
    40         figures/nasusCFABalance-One\
    41         figures/pykeCFABalance-Multi \
    42         figures/nasusCFABalance-Multi \
    43         figures/pyke_Aggregate_Lock_2 \
    44         figures/pyke_Aggregate_Lock_4 \
    45         figures/pyke_Aggregate_Lock_8 \
    46         figures/nasus_Aggregate_Lock_2 \
    47         figures/nasus_Aggregate_Lock_4 \
    48         figures/nasus_Aggregate_Lock_8 \
     25FIGURES = ${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  \
    4948        figures/nasus_Channel_Contention \
    5049        figures/pyke_Channel_Contention \
    5150}
    5251
    53 DATA =  data/pykeSendStatic \
    54         data/pykeSendDynamic\
    55         data/pykeExecutorMem\
    56         data/nasusSendStatic\
    57         data/nasusSendDynamic\
    58         data/pykeExecutorMem\
     52DATA =  data/pykeSendStatic             \
     53                data/pykeSendDynamic    \
     54                data/pykeExecutorMem    \
     55                data/nasusSendStatic    \
     56                data/nasusSendDynamic   \
     57                data/pykeExecutorMem    \
    5958
    60 PICTURES = ${addsuffix .tikz, \
    61         diagrams/standard_actor \
    62         diagrams/inverted_actor \
    63         diagrams/gulp \
    64         diagrams/chain_swap \
    65         diagrams/M_to_one_swap \
    66         diagrams/acyclic_swap \
    67         diagrams/cyclic_swap \
     59PICTURES = ${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            \
    6867}
    6968
     
    106105        # Make index from *.aux entries and input index at end of document
    107106        makeglossaries -q -s ${Build}/${basename $@}.ist ${Build}/${basename $@}
     107        -version.sh
    108108        # Run again to finish citations
    109109        ${LaTeX} ${basename $@}.tex
     110       
    110111
    111112## Define the default recipes.
  • doc/theses/colby_parsons_MMAth/benchmarks/actors/data/nasus_CFA.txt

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

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

    r3982384 r6e4c44d  
    22import sys
    33import time
    4 import itertools
    54import matplotlib.pyplot as plt
    65import matplotlib.ticker as ticks
     
    1817    'text.usetex': True,
    1918    'pgf.rcfonts': False,
    20     'font.size': 16
    2119})
    22 marker = itertools.cycle(('o', 's', 'D', 'x', 'p', '^', 'h', '*', 'v' ))
    2320
    2421readfile = open(sys.argv[1], "r")
     
    165162                    plt.xlabel("Cores")
    166163                    for idx, arr in enumerate(data):
    167                         plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker=next(marker) )
     164                        plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker='o' )
    168165                    if currBench == Bench.Executor or currBench == Bench.Matrix or currBench == Bench.Balance_One or currBench == Bench.Repeat:
    169166                        plt.yscale("log")
  • doc/theses/colby_parsons_MMAth/benchmarks/channels/plotData.py

    r3982384 r6e4c44d  
    22import sys
    33import time
    4 import itertools
    54import matplotlib.pyplot as plt
    65import matplotlib.ticker as ticks
     
    1817    'text.usetex': True,
    1918    'pgf.rcfonts': False,
    20     'font.size': 16
    2119})
    22 marker = itertools.cycle(('o', 's', 'D', 'x', 'p', '^', 'h', '*', 'v' ))
    2320
    2421readfile = open(sys.argv[1], "r")
     
    7370    if currBench == Bench.Unset:
    7471        if line == "contend:":
    75             name = "Channel Contention"
     72            name = "Contend"
    7673            currBench = Bench.Contend
    7774        elif line == "zero:":
     
    129126                plt.xlabel("Cores")
    130127                for idx, arr in enumerate(data):
    131                     plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker=next(marker) )
     128                    plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker='o' )
    132129               
    133130                plt.yscale("log")
  • doc/theses/colby_parsons_MMAth/benchmarks/mutex_stmt/plotData.py

    r3982384 r6e4c44d  
    22import sys
    33import time
    4 import itertools
    54import matplotlib.pyplot as plt
    65import matplotlib.ticker as ticks
     
    1817    'text.usetex': True,
    1918    'pgf.rcfonts': False,
    20     'font.size': 16
    2119})
    22 marker = itertools.cycle(('o', 's', 'D', 'x', 'p', '^', 'h', '*', 'v' ))
    2320
    2421readfile = open(sys.argv[1], "r")
     
    10299                plt.xlabel("Cores")
    103100                for idx, arr in enumerate(data):
    104                     plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker=next(marker) )
     101                    plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker='o' )
    105102                plt.yscale("log")
    106103                plt.xticks(procs)
  • doc/theses/colby_parsons_MMAth/benchmarks/mutex_stmt/run

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

    r3982384 r6e4c44d  
    1 // sequential equivalent swap
    2 void swap( uint victim_idx, uint my_idx  ) {
    3     // Step 0:
     1// this is a code stub and will not compile
     2
     3// tries to atomically swap two queues and returns 0p if the swap failed
     4// returns ptr to newly owned queue if swap succeeds
     5static inline work_queue * try_swap_queues( worker & this, unsigned int victim_idx, unsigned int my_idx ) with(this) {
    46    work_queue * my_queue = request_queues[my_idx];
    5     work_queue * vic_queue = request_queues[victim_idx];
    6     // Step 2:
    7     request_queues[my_idx] = 0p;
    8     // Step 3:
    9     request_queues[victim_idx] = my_queue;
    10     // Step 4:
    11     request_queues[my_idx] = vic_queue;
     7    work_queue * other_queue = request_queues[victim_idx];
     8
     9    // if either queue is 0p then they are in the process of being stolen
     10    if ( other_queue == 0p || my_queue == 0p ) return 0p;
     11
     12    // try to set our queue ptr to be 0p. If it fails someone moved our queue so return false
     13    if ( !__atomic_compare_exchange_n( &request_queues[my_idx], &my_queue, 0p, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST ) )
     14        return 0p;
     15
     16    // try to set other queue ptr to be our queue ptr. If it fails someone moved the other queue so fix up then return false
     17    if ( !__atomic_compare_exchange_n( &request_queues[victim_idx], &other_queue, my_queue, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST ) ) {
     18        /* paranoid */ verify( request_queues[my_idx] == 0p );
     19        request_queues[my_idx] = my_queue; // reset my queue ptr back to appropriate val
     20        return 0p;
     21    }
     22
     23    // we have successfully swapped and since our queue is 0p no one will touch it so write back new queue ptr non atomically
     24    request_queues[my_idx] = other_queue; // last write does not need to be atomic
     25    return other_queue;
    1226}
    1327
     
    2135
    2236bool 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
    2537    work_queue * my_queue = request_queues[my_idx];
    2638    work_queue * vic_queue = request_queues[victim_idx];
    2739
    28     // Step 1:
    2940    // If either queue is 0p then they are in the process of being stolen
    3041    // 0p is CForAll's equivalent of C++'s nullptr
    31     if ( vic_queue == 0p ) return false;
     42    if ( vic_queue == 0p || my_queue == 0p ) return false;
    3243
    33     // Step 2:
    34     // Try to set thief's queue ptr to be 0p.
    35     // If this CAS fails someone stole thief's queue so return false
     44    // Try to set our queue ptr to be 0p.
     45    // If this CAS fails someone moved our queue so return false
    3646    if ( !CAS( &request_queues[my_idx], &my_queue, 0p ) )
    3747        return false;
    38    
    39     // Step 3:
    40     // Try to set victim queue ptr to be thief's queue ptr.
    41     // If it fails someone stole the other queue, so fix up then return false
     48
     49    // Try to set other queue ptr to be our queue ptr.
     50    // If it fails someone moved the other queue, so fix up then return false
    4251    if ( !CAS( &request_queues[victim_idx], &vic_queue, my_queue ) ) {
    4352        request_queues[my_idx] = my_queue; // reset queue ptr back to prev val
     
    4554    }
    4655
    47     // Step 4:
    4856    // Successfully swapped.
    49     // Thief's ptr is 0p so no one will touch it
    50     // Write back without CAS is safe
     57    // Our queue is 0p so no one will touch it so write back without CAS is safe
    5158    request_queues[my_idx] = vic_queue;
    5259    return true;
  • doc/theses/colby_parsons_MMAth/figures/nasus_Aggregate_Lock_2.pgf

    r3982384 r6e4c44d  
    7777\pgfsetstrokecolor{textcolor}%
    7878\pgfsetfillcolor{textcolor}%
    79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 2\)}%
     79\pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 2\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 4\)}%
     104\pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 4\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 8\)}%
     129\pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 8\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 16\)}%
     154\pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 16\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 24\)}%
     179\pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 24\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 32\)}%
     204\pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 32\)}%
    205205\end{pgfscope}%
    206206\begin{pgfscope}%
     
    208208\pgfsetstrokecolor{textcolor}%
    209209\pgfsetfillcolor{textcolor}%
    210 \pgftext[x=3.280000in,y=0.161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}%
     210\pgftext[x=3.280000in,y=0.251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}%
    211211\end{pgfscope}%
    212212\begin{pgfscope}%
     
    233233\pgfsetstrokecolor{textcolor}%
    234234\pgfsetfillcolor{textcolor}%
    235 \pgftext[x=0.399655in,y=1.057810in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{5}\)}%
     235\pgftext[x=0.501581in,y=1.092918in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{5}\)}%
    236236\end{pgfscope}%
    237237\begin{pgfscope}%
     
    258258\pgfsetstrokecolor{textcolor}%
    259259\pgfsetfillcolor{textcolor}%
    260 \pgftext[x=0.399655in,y=2.018954in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{6}\)}%
     260\pgftext[x=0.501581in,y=2.054062in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{6}\)}%
    261261\end{pgfscope}%
    262262\begin{pgfscope}%
     
    283283\pgfsetstrokecolor{textcolor}%
    284284\pgfsetfillcolor{textcolor}%
    285 \pgftext[x=0.399655in,y=2.980099in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{7}\)}%
     285\pgftext[x=0.501581in,y=3.015207in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{7}\)}%
    286286\end{pgfscope}%
    287287\begin{pgfscope}%
     
    308308\pgfsetstrokecolor{textcolor}%
    309309\pgfsetfillcolor{textcolor}%
    310 \pgftext[x=0.399655in,y=3.941243in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{8}\)}%
     310\pgftext[x=0.501581in,y=3.976351in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{8}\)}%
    311311\end{pgfscope}%
    312312\begin{pgfscope}%
     
    903903\pgfsetstrokecolor{textcolor}%
    904904\pgfsetfillcolor{textcolor}%
    905 \pgftext[x=0.344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (entries)}%
     905\pgftext[x=0.446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (entries)}%
    906906\end{pgfscope}%
    907907\begin{pgfscope}%
     
    14921492\end{pgfscope}%
    14931493\begin{pgfscope}%
    1494 \pgfsys@transformshift{3.129697in}{-3.129697in}%
     1494\pgfsys@transformshift{3.129697in}{0in}%
    14951495\pgfsys@useobject{currentmarker}{}%
    14961496\end{pgfscope}%
     
    16321632\pgfusepath{clip}%
    16331633\pgfsetbuttcap%
    1634 \pgfsetmiterjoin%
     1634\pgfsetroundjoin%
    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}%
    19351639\pgfsetstrokecolor{currentstroke}%
    19361640\pgfsetdash{}{0pt}%
     
    19491653}%
    19501654\begin{pgfscope}%
    1951 \pgfsys@transformshift{3.869368in}{2.880475in}%
    1952 \pgfsys@useobject{currentmarker}{}%
    1953 \end{pgfscope}%
     1655\pgfsys@transformshift{1.025455in}{3.944983in}%
     1656\pgfsys@useobject{currentmarker}{}%
     1657\end{pgfscope}%
     1658\begin{pgfscope}%
     1659\pgfsys@transformshift{1.326061in}{3.977510in}%
     1660\pgfsys@useobject{currentmarker}{}%
     1661\end{pgfscope}%
     1662\begin{pgfscope}%
     1663\pgfsys@transformshift{1.927273in}{3.512430in}%
     1664\pgfsys@useobject{currentmarker}{}%
     1665\end{pgfscope}%
     1666\begin{pgfscope}%
     1667\pgfsys@transformshift{3.129697in}{3.352962in}%
     1668\pgfsys@useobject{currentmarker}{}%
     1669\end{pgfscope}%
     1670\begin{pgfscope}%
     1671\pgfsys@transformshift{4.332121in}{3.334197in}%
     1672\pgfsys@useobject{currentmarker}{}%
     1673\end{pgfscope}%
     1674\begin{pgfscope}%
     1675\pgfsys@transformshift{5.534545in}{3.317793in}%
     1676\pgfsys@useobject{currentmarker}{}%
     1677\end{pgfscope}%
     1678\end{pgfscope}%
     1679\begin{pgfscope}%
     1680\pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%
     1681\pgfusepath{clip}%
     1682\pgfsetrectcap%
     1683\pgfsetroundjoin%
     1684\pgfsetlinewidth{1.505625pt}%
     1685\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     1686\pgfsetstrokecolor{currentstroke}%
     1687\pgfsetdash{}{0pt}%
     1688\pgfpathmoveto{\pgfqpoint{1.025455in}{3.858276in}}%
     1689\pgfpathlineto{\pgfqpoint{1.326061in}{3.706065in}}%
     1690\pgfpathlineto{\pgfqpoint{1.927273in}{3.410611in}}%
     1691\pgfpathlineto{\pgfqpoint{3.129697in}{3.314183in}}%
     1692\pgfpathlineto{\pgfqpoint{4.332121in}{3.289120in}}%
     1693\pgfpathlineto{\pgfqpoint{5.534545in}{3.271348in}}%
     1694\pgfusepath{stroke}%
     1695\end{pgfscope}%
     1696\begin{pgfscope}%
     1697\pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%
     1698\pgfusepath{clip}%
     1699\pgfsetbuttcap%
     1700\pgfsetroundjoin%
     1701\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
     1702\pgfsetfillcolor{currentfill}%
     1703\pgfsetlinewidth{1.003750pt}%
     1704\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     1705\pgfsetstrokecolor{currentstroke}%
     1706\pgfsetdash{}{0pt}%
     1707\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     1708\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     1709\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     1710\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     1711\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     1712\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     1713\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     1714\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     1715\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     1716\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
     1717\pgfpathclose%
     1718\pgfusepath{stroke,fill}%
     1719}%
     1720\begin{pgfscope}%
     1721\pgfsys@transformshift{1.025455in}{3.858276in}%
     1722\pgfsys@useobject{currentmarker}{}%
     1723\end{pgfscope}%
     1724\begin{pgfscope}%
     1725\pgfsys@transformshift{1.326061in}{3.706065in}%
     1726\pgfsys@useobject{currentmarker}{}%
     1727\end{pgfscope}%
     1728\begin{pgfscope}%
     1729\pgfsys@transformshift{1.927273in}{3.410611in}%
     1730\pgfsys@useobject{currentmarker}{}%
     1731\end{pgfscope}%
     1732\begin{pgfscope}%
     1733\pgfsys@transformshift{3.129697in}{3.314183in}%
     1734\pgfsys@useobject{currentmarker}{}%
     1735\end{pgfscope}%
     1736\begin{pgfscope}%
     1737\pgfsys@transformshift{4.332121in}{3.289120in}%
     1738\pgfsys@useobject{currentmarker}{}%
     1739\end{pgfscope}%
     1740\begin{pgfscope}%
     1741\pgfsys@transformshift{5.534545in}{3.271348in}%
     1742\pgfsys@useobject{currentmarker}{}%
     1743\end{pgfscope}%
     1744\end{pgfscope}%
     1745\begin{pgfscope}%
     1746\pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%
     1747\pgfusepath{clip}%
     1748\pgfsetrectcap%
     1749\pgfsetroundjoin%
     1750\pgfsetlinewidth{1.505625pt}%
     1751\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     1752\pgfsetstrokecolor{currentstroke}%
     1753\pgfsetdash{}{0pt}%
     1754\pgfpathmoveto{\pgfqpoint{1.025455in}{4.050730in}}%
     1755\pgfpathlineto{\pgfqpoint{1.326061in}{2.770511in}}%
     1756\pgfpathlineto{\pgfqpoint{1.927273in}{2.067529in}}%
     1757\pgfpathlineto{\pgfqpoint{3.129697in}{0.864067in}}%
     1758\pgfpathlineto{\pgfqpoint{4.332121in}{0.696000in}}%
     1759\pgfpathlineto{\pgfqpoint{5.534545in}{1.325424in}}%
     1760\pgfusepath{stroke}%
     1761\end{pgfscope}%
     1762\begin{pgfscope}%
     1763\pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%
     1764\pgfusepath{clip}%
     1765\pgfsetbuttcap%
     1766\pgfsetroundjoin%
     1767\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     1768\pgfsetfillcolor{currentfill}%
     1769\pgfsetlinewidth{1.003750pt}%
     1770\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     1771\pgfsetstrokecolor{currentstroke}%
     1772\pgfsetdash{}{0pt}%
     1773\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     1774\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     1775\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     1776\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     1777\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     1778\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     1779\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     1780\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     1781\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     1782\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
     1783\pgfpathclose%
     1784\pgfusepath{stroke,fill}%
     1785}%
     1786\begin{pgfscope}%
     1787\pgfsys@transformshift{1.025455in}{4.050730in}%
     1788\pgfsys@useobject{currentmarker}{}%
     1789\end{pgfscope}%
     1790\begin{pgfscope}%
     1791\pgfsys@transformshift{1.326061in}{2.770511in}%
     1792\pgfsys@useobject{currentmarker}{}%
     1793\end{pgfscope}%
     1794\begin{pgfscope}%
     1795\pgfsys@transformshift{1.927273in}{2.067529in}%
     1796\pgfsys@useobject{currentmarker}{}%
     1797\end{pgfscope}%
     1798\begin{pgfscope}%
     1799\pgfsys@transformshift{3.129697in}{0.864067in}%
     1800\pgfsys@useobject{currentmarker}{}%
     1801\end{pgfscope}%
     1802\begin{pgfscope}%
     1803\pgfsys@transformshift{4.332121in}{0.696000in}%
     1804\pgfsys@useobject{currentmarker}{}%
     1805\end{pgfscope}%
     1806\begin{pgfscope}%
     1807\pgfsys@transformshift{5.534545in}{1.325424in}%
     1808\pgfsys@useobject{currentmarker}{}%
     1809\end{pgfscope}%
     1810\end{pgfscope}%
     1811\begin{pgfscope}%
     1812\pgfsetrectcap%
     1813\pgfsetmiterjoin%
     1814\pgfsetlinewidth{0.803000pt}%
     1815\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     1816\pgfsetstrokecolor{currentstroke}%
     1817\pgfsetdash{}{0pt}%
     1818\pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%
     1819\pgfpathlineto{\pgfqpoint{0.800000in}{4.224000in}}%
     1820\pgfusepath{stroke}%
     1821\end{pgfscope}%
     1822\begin{pgfscope}%
     1823\pgfsetrectcap%
     1824\pgfsetmiterjoin%
     1825\pgfsetlinewidth{0.803000pt}%
     1826\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     1827\pgfsetstrokecolor{currentstroke}%
     1828\pgfsetdash{}{0pt}%
     1829\pgfpathmoveto{\pgfqpoint{5.760000in}{0.528000in}}%
     1830\pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%
     1831\pgfusepath{stroke}%
     1832\end{pgfscope}%
     1833\begin{pgfscope}%
     1834\pgfsetrectcap%
     1835\pgfsetmiterjoin%
     1836\pgfsetlinewidth{0.803000pt}%
     1837\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     1838\pgfsetstrokecolor{currentstroke}%
     1839\pgfsetdash{}{0pt}%
     1840\pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%
     1841\pgfpathlineto{\pgfqpoint{5.760000in}{0.528000in}}%
     1842\pgfusepath{stroke}%
     1843\end{pgfscope}%
     1844\begin{pgfscope}%
     1845\pgfsetrectcap%
     1846\pgfsetmiterjoin%
     1847\pgfsetlinewidth{0.803000pt}%
     1848\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     1849\pgfsetstrokecolor{currentstroke}%
     1850\pgfsetdash{}{0pt}%
     1851\pgfpathmoveto{\pgfqpoint{0.800000in}{4.224000in}}%
     1852\pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%
     1853\pgfusepath{stroke}%
    19541854\end{pgfscope}%
    19551855\begin{pgfscope}%
     
    19571857\pgfsetstrokecolor{textcolor}%
    19581858\pgfsetfillcolor{textcolor}%
    1959 \pgftext[x=4.269368in,y=2.802697in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-baseline}%
    1960 \end{pgfscope}%
    1961 \begin{pgfscope}%
    1962 \pgfsetbuttcap%
    1963 \pgfsetroundjoin%
    1964 \pgfsetlinewidth{1.505625pt}%
    1965 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    1966 \pgfsetstrokecolor{currentstroke}%
    1967 \pgfsetdash{}{0pt}%
    1968 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.444904in}}%
    1969 \pgfpathlineto{\pgfqpoint{3.869368in}{2.667126in}}%
    1970 \pgfusepath{stroke}%
    1971 \end{pgfscope}%
    1972 \begin{pgfscope}%
    1973 \pgfsetbuttcap%
    1974 \pgfsetroundjoin%
    1975 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    1976 \pgfsetfillcolor{currentfill}%
    1977 \pgfsetlinewidth{1.003750pt}%
    1978 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     1859\pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{12.000000}{14.400000}\selectfont Aggregate Lock Benchmark: 2 Locks}%
     1860\end{pgfscope}%
     1861\begin{pgfscope}%
     1862\pgfsetbuttcap%
     1863\pgfsetmiterjoin%
     1864\definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}%
     1865\pgfsetfillcolor{currentfill}%
     1866\pgfsetfillopacity{0.800000}%
     1867\pgfsetlinewidth{1.003750pt}%
     1868\definecolor{currentstroke}{rgb}{0.800000,0.800000,0.800000}%
     1869\pgfsetstrokecolor{currentstroke}%
     1870\pgfsetstrokeopacity{0.800000}%
     1871\pgfsetdash{}{0pt}%
     1872\pgfpathmoveto{\pgfqpoint{4.403517in}{1.967821in}}%
     1873\pgfpathlineto{\pgfqpoint{5.662778in}{1.967821in}}%
     1874\pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{1.967821in}}{\pgfqpoint{5.690556in}{1.995599in}}%
     1875\pgfpathlineto{\pgfqpoint{5.690556in}{2.756401in}}%
     1876\pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{2.784179in}}{\pgfqpoint{5.662778in}{2.784179in}}%
     1877\pgfpathlineto{\pgfqpoint{4.403517in}{2.784179in}}%
     1878\pgfpathquadraticcurveto{\pgfqpoint{4.375739in}{2.784179in}}{\pgfqpoint{4.375739in}{2.756401in}}%
     1879\pgfpathlineto{\pgfqpoint{4.375739in}{1.995599in}}%
     1880\pgfpathquadraticcurveto{\pgfqpoint{4.375739in}{1.967821in}}{\pgfqpoint{4.403517in}{1.967821in}}%
     1881\pgfpathclose%
     1882\pgfusepath{stroke,fill}%
     1883\end{pgfscope}%
     1884\begin{pgfscope}%
     1885\pgfsetbuttcap%
     1886\pgfsetroundjoin%
     1887\pgfsetlinewidth{1.505625pt}%
     1888\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
     1889\pgfsetstrokecolor{currentstroke}%
     1890\pgfsetdash{}{0pt}%
     1891\pgfpathmoveto{\pgfqpoint{4.570184in}{2.610568in}}%
     1892\pgfpathlineto{\pgfqpoint{4.570184in}{2.749457in}}%
     1893\pgfusepath{stroke}%
     1894\end{pgfscope}%
     1895\begin{pgfscope}%
     1896\pgfsetbuttcap%
     1897\pgfsetroundjoin%
     1898\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
     1899\pgfsetfillcolor{currentfill}%
     1900\pgfsetlinewidth{1.003750pt}%
     1901\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
    19791902\pgfsetstrokecolor{currentstroke}%
    19801903\pgfsetdash{}{0pt}%
     
    19851908}%
    19861909\begin{pgfscope}%
    1987 \pgfsys@transformshift{3.869368in}{2.444904in}%
    1988 \pgfsys@useobject{currentmarker}{}%
    1989 \end{pgfscope}%
    1990 \end{pgfscope}%
    1991 \begin{pgfscope}%
    1992 \pgfsetbuttcap%
    1993 \pgfsetroundjoin%
    1994 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    1995 \pgfsetfillcolor{currentfill}%
    1996 \pgfsetlinewidth{1.003750pt}%
    1997 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     1910\pgfsys@transformshift{4.570184in}{2.610568in}%
     1911\pgfsys@useobject{currentmarker}{}%
     1912\end{pgfscope}%
     1913\end{pgfscope}%
     1914\begin{pgfscope}%
     1915\pgfsetbuttcap%
     1916\pgfsetroundjoin%
     1917\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
     1918\pgfsetfillcolor{currentfill}%
     1919\pgfsetlinewidth{1.003750pt}%
     1920\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
    19981921\pgfsetstrokecolor{currentstroke}%
    19991922\pgfsetdash{}{0pt}%
     
    20041927}%
    20051928\begin{pgfscope}%
    2006 \pgfsys@transformshift{3.869368in}{2.667126in}%
     1929\pgfsys@transformshift{4.570184in}{2.749457in}%
    20071930\pgfsys@useobject{currentmarker}{}%
    20081931\end{pgfscope}%
     
    20121935\pgfsetroundjoin%
    20131936\pgfsetlinewidth{1.505625pt}%
    2014 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    2015 \pgfsetstrokecolor{currentstroke}%
    2016 \pgfsetdash{}{0pt}%
    2017 \pgfpathmoveto{\pgfqpoint{3.647146in}{2.556015in}}%
    2018 \pgfpathlineto{\pgfqpoint{4.091591in}{2.556015in}}%
    2019 \pgfusepath{stroke}%
    2020 \end{pgfscope}%
    2021 \begin{pgfscope}%
    2022 \pgfsetbuttcap%
    2023 \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}%
     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}%
    20281951\pgfsetstrokecolor{currentstroke}%
    20291952\pgfsetdash{}{0pt}%
    20301953\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
    2031 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}%
    2032 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%
    2033 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%
    2034 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}%
     1954\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     1955\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     1956\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     1957\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     1958\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     1959\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     1960\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     1961\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     1962\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    20351963\pgfpathclose%
    20361964\pgfusepath{stroke,fill}%
    20371965}%
    20381966\begin{pgfscope}%
    2039 \pgfsys@transformshift{3.869368in}{2.556015in}%
     1967\pgfsys@transformshift{4.570184in}{2.680012in}%
    20401968\pgfsys@useobject{currentmarker}{}%
    20411969\end{pgfscope}%
     
    20451973\pgfsetstrokecolor{textcolor}%
    20461974\pgfsetfillcolor{textcolor}%
    2047 \pgftext[x=4.269368in,y=2.478238in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-baseline}%
    2048 \end{pgfscope}%
    2049 \begin{pgfscope}%
    2050 \pgfsetbuttcap%
    2051 \pgfsetroundjoin%
    2052 \pgfsetlinewidth{1.505625pt}%
    2053 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
    2054 \pgfsetstrokecolor{currentstroke}%
    2055 \pgfsetdash{}{0pt}%
    2056 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.120444in}}%
    2057 \pgfpathlineto{\pgfqpoint{3.869368in}{2.342667in}}%
    2058 \pgfusepath{stroke}%
    2059 \end{pgfscope}%
    2060 \begin{pgfscope}%
    2061 \pgfsetbuttcap%
    2062 \pgfsetroundjoin%
    2063 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
    2064 \pgfsetfillcolor{currentfill}%
    2065 \pgfsetlinewidth{1.003750pt}%
    2066 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     1975\pgftext[x=4.820184in,y=2.631401in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-baseline}%
     1976\end{pgfscope}%
     1977\begin{pgfscope}%
     1978\pgfsetbuttcap%
     1979\pgfsetroundjoin%
     1980\pgfsetlinewidth{1.505625pt}%
     1981\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     1982\pgfsetstrokecolor{currentstroke}%
     1983\pgfsetdash{}{0pt}%
     1984\pgfpathmoveto{\pgfqpoint{4.570184in}{2.416895in}}%
     1985\pgfpathlineto{\pgfqpoint{4.570184in}{2.555784in}}%
     1986\pgfusepath{stroke}%
     1987\end{pgfscope}%
     1988\begin{pgfscope}%
     1989\pgfsetbuttcap%
     1990\pgfsetroundjoin%
     1991\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
     1992\pgfsetfillcolor{currentfill}%
     1993\pgfsetlinewidth{1.003750pt}%
     1994\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    20671995\pgfsetstrokecolor{currentstroke}%
    20681996\pgfsetdash{}{0pt}%
     
    20732001}%
    20742002\begin{pgfscope}%
    2075 \pgfsys@transformshift{3.869368in}{2.120444in}%
    2076 \pgfsys@useobject{currentmarker}{}%
    2077 \end{pgfscope}%
    2078 \end{pgfscope}%
    2079 \begin{pgfscope}%
    2080 \pgfsetbuttcap%
    2081 \pgfsetroundjoin%
    2082 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
    2083 \pgfsetfillcolor{currentfill}%
    2084 \pgfsetlinewidth{1.003750pt}%
    2085 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2003\pgfsys@transformshift{4.570184in}{2.416895in}%
     2004\pgfsys@useobject{currentmarker}{}%
     2005\end{pgfscope}%
     2006\end{pgfscope}%
     2007\begin{pgfscope}%
     2008\pgfsetbuttcap%
     2009\pgfsetroundjoin%
     2010\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
     2011\pgfsetfillcolor{currentfill}%
     2012\pgfsetlinewidth{1.003750pt}%
     2013\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    20862014\pgfsetstrokecolor{currentstroke}%
    20872015\pgfsetdash{}{0pt}%
     
    20922020}%
    20932021\begin{pgfscope}%
    2094 \pgfsys@transformshift{3.869368in}{2.342667in}%
     2022\pgfsys@transformshift{4.570184in}{2.555784in}%
    20952023\pgfsys@useobject{currentmarker}{}%
    20962024\end{pgfscope}%
     
    21002028\pgfsetroundjoin%
    21012029\pgfsetlinewidth{1.505625pt}%
    2102 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
    2103 \pgfsetstrokecolor{currentstroke}%
    2104 \pgfsetdash{}{0pt}%
    2105 \pgfpathmoveto{\pgfqpoint{3.647146in}{2.231556in}}%
    2106 \pgfpathlineto{\pgfqpoint{4.091591in}{2.231556in}}%
    2107 \pgfusepath{stroke}%
    2108 \end{pgfscope}%
    2109 \begin{pgfscope}%
    2110 \pgfsetbuttcap%
    2111 \pgfsetmiterjoin%
    2112 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
    2113 \pgfsetfillcolor{currentfill}%
    2114 \pgfsetlinewidth{1.003750pt}%
    2115 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
    2116 \pgfsetstrokecolor{currentstroke}%
    2117 \pgfsetdash{}{0pt}%
    2118 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.058926in}{-0.058926in}}{\pgfqpoint{0.058926in}{0.058926in}}{%
    2119 \pgfpathmoveto{\pgfqpoint{-0.000000in}{-0.058926in}}%
    2120 \pgfpathlineto{\pgfqpoint{0.058926in}{0.000000in}}%
    2121 \pgfpathlineto{\pgfqpoint{0.000000in}{0.058926in}}%
    2122 \pgfpathlineto{\pgfqpoint{-0.058926in}{0.000000in}}%
     2030\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     2031\pgfsetstrokecolor{currentstroke}%
     2032\pgfsetdash{}{0pt}%
     2033\pgfpathmoveto{\pgfqpoint{4.431295in}{2.486339in}}%
     2034\pgfpathlineto{\pgfqpoint{4.709073in}{2.486339in}}%
     2035\pgfusepath{stroke}%
     2036\end{pgfscope}%
     2037\begin{pgfscope}%
     2038\pgfsetbuttcap%
     2039\pgfsetroundjoin%
     2040\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
     2041\pgfsetfillcolor{currentfill}%
     2042\pgfsetlinewidth{1.003750pt}%
     2043\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     2044\pgfsetstrokecolor{currentstroke}%
     2045\pgfsetdash{}{0pt}%
     2046\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2047\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2048\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2049\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2050\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2051\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2052\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2053\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2054\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2055\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    21232056\pgfpathclose%
    21242057\pgfusepath{stroke,fill}%
    21252058}%
    21262059\begin{pgfscope}%
    2127 \pgfsys@transformshift{3.869368in}{2.231556in}%
     2060\pgfsys@transformshift{4.570184in}{2.486339in}%
    21282061\pgfsys@useobject{currentmarker}{}%
    21292062\end{pgfscope}%
     
    21332066\pgfsetstrokecolor{textcolor}%
    21342067\pgfsetfillcolor{textcolor}%
    2135 \pgftext[x=4.269368in,y=2.153778in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-rand}%
    2136 \end{pgfscope}%
    2137 \begin{pgfscope}%
    2138 \pgfsetbuttcap%
    2139 \pgfsetroundjoin%
    2140 \pgfsetlinewidth{1.505625pt}%
    2141 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
    2142 \pgfsetstrokecolor{currentstroke}%
    2143 \pgfsetdash{}{0pt}%
    2144 \pgfpathmoveto{\pgfqpoint{3.869368in}{1.795985in}}%
    2145 \pgfpathlineto{\pgfqpoint{3.869368in}{2.018207in}}%
    2146 \pgfusepath{stroke}%
    2147 \end{pgfscope}%
    2148 \begin{pgfscope}%
    2149 \pgfsetbuttcap%
    2150 \pgfsetroundjoin%
    2151 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
    2152 \pgfsetfillcolor{currentfill}%
    2153 \pgfsetlinewidth{1.003750pt}%
    2154 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2068\pgftext[x=4.820184in,y=2.437728in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-baseline}%
     2069\end{pgfscope}%
     2070\begin{pgfscope}%
     2071\pgfsetbuttcap%
     2072\pgfsetroundjoin%
     2073\pgfsetlinewidth{1.505625pt}%
     2074\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2075\pgfsetstrokecolor{currentstroke}%
     2076\pgfsetdash{}{0pt}%
     2077\pgfpathmoveto{\pgfqpoint{4.570184in}{2.223222in}}%
     2078\pgfpathlineto{\pgfqpoint{4.570184in}{2.362111in}}%
     2079\pgfusepath{stroke}%
     2080\end{pgfscope}%
     2081\begin{pgfscope}%
     2082\pgfsetbuttcap%
     2083\pgfsetroundjoin%
     2084\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
     2085\pgfsetfillcolor{currentfill}%
     2086\pgfsetlinewidth{1.003750pt}%
     2087\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
    21552088\pgfsetstrokecolor{currentstroke}%
    21562089\pgfsetdash{}{0pt}%
     
    21612094}%
    21622095\begin{pgfscope}%
    2163 \pgfsys@transformshift{3.869368in}{1.795985in}%
    2164 \pgfsys@useobject{currentmarker}{}%
    2165 \end{pgfscope}%
    2166 \end{pgfscope}%
    2167 \begin{pgfscope}%
    2168 \pgfsetbuttcap%
    2169 \pgfsetroundjoin%
    2170 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
    2171 \pgfsetfillcolor{currentfill}%
    2172 \pgfsetlinewidth{1.003750pt}%
    2173 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2096\pgfsys@transformshift{4.570184in}{2.223222in}%
     2097\pgfsys@useobject{currentmarker}{}%
     2098\end{pgfscope}%
     2099\end{pgfscope}%
     2100\begin{pgfscope}%
     2101\pgfsetbuttcap%
     2102\pgfsetroundjoin%
     2103\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
     2104\pgfsetfillcolor{currentfill}%
     2105\pgfsetlinewidth{1.003750pt}%
     2106\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
    21742107\pgfsetstrokecolor{currentstroke}%
    21752108\pgfsetdash{}{0pt}%
     
    21802113}%
    21812114\begin{pgfscope}%
    2182 \pgfsys@transformshift{3.869368in}{2.018207in}%
     2115\pgfsys@transformshift{4.570184in}{2.362111in}%
    21832116\pgfsys@useobject{currentmarker}{}%
    21842117\end{pgfscope}%
     
    21882121\pgfsetroundjoin%
    21892122\pgfsetlinewidth{1.505625pt}%
    2190 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
    2191 \pgfsetstrokecolor{currentstroke}%
    2192 \pgfsetdash{}{0pt}%
    2193 \pgfpathmoveto{\pgfqpoint{3.647146in}{1.907096in}}%
    2194 \pgfpathlineto{\pgfqpoint{4.091591in}{1.907096in}}%
    2195 \pgfusepath{stroke}%
    2196 \end{pgfscope}%
    2197 \begin{pgfscope}%
    2198 \pgfsetbuttcap%
    2199 \pgfsetroundjoin%
    2200 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
    2201 \pgfsetfillcolor{currentfill}%
    2202 \pgfsetlinewidth{1.003750pt}%
    2203 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2123\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2124\pgfsetstrokecolor{currentstroke}%
     2125\pgfsetdash{}{0pt}%
     2126\pgfpathmoveto{\pgfqpoint{4.431295in}{2.292667in}}%
     2127\pgfpathlineto{\pgfqpoint{4.709073in}{2.292667in}}%
     2128\pgfusepath{stroke}%
     2129\end{pgfscope}%
     2130\begin{pgfscope}%
     2131\pgfsetbuttcap%
     2132\pgfsetroundjoin%
     2133\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
     2134\pgfsetfillcolor{currentfill}%
     2135\pgfsetlinewidth{1.003750pt}%
     2136\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
    22042137\pgfsetstrokecolor{currentstroke}%
    22052138\pgfsetdash{}{0pt}%
    22062139\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
    2207 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}%
    2208 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%
    2209 \pgfpathmoveto{\pgfqpoint{-0.041667in}{0.041667in}}%
    2210 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%
    2211 \pgfusepath{stroke,fill}%
    2212 }%
    2213 \begin{pgfscope}%
    2214 \pgfsys@transformshift{3.869368in}{1.907096in}%
     2140\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2141\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2142\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2143\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2144\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2145\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2146\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2147\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2148\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
     2149\pgfpathclose%
     2150\pgfusepath{stroke,fill}%
     2151}%
     2152\begin{pgfscope}%
     2153\pgfsys@transformshift{4.570184in}{2.292667in}%
    22152154\pgfsys@useobject{currentmarker}{}%
    22162155\end{pgfscope}%
     
    22202159\pgfsetstrokecolor{textcolor}%
    22212160\pgfsetfillcolor{textcolor}%
    2222 \pgftext[x=4.269368in,y=1.829318in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-rand}%
     2161\pgftext[x=4.820184in,y=2.244056in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-rand}%
     2162\end{pgfscope}%
     2163\begin{pgfscope}%
     2164\pgfsetbuttcap%
     2165\pgfsetroundjoin%
     2166\pgfsetlinewidth{1.505625pt}%
     2167\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2168\pgfsetstrokecolor{currentstroke}%
     2169\pgfsetdash{}{0pt}%
     2170\pgfpathmoveto{\pgfqpoint{4.570184in}{2.029549in}}%
     2171\pgfpathlineto{\pgfqpoint{4.570184in}{2.168438in}}%
     2172\pgfusepath{stroke}%
     2173\end{pgfscope}%
     2174\begin{pgfscope}%
     2175\pgfsetbuttcap%
     2176\pgfsetroundjoin%
     2177\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     2178\pgfsetfillcolor{currentfill}%
     2179\pgfsetlinewidth{1.003750pt}%
     2180\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2181\pgfsetstrokecolor{currentstroke}%
     2182\pgfsetdash{}{0pt}%
     2183\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
     2184\pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
     2185\pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
     2186\pgfusepath{stroke,fill}%
     2187}%
     2188\begin{pgfscope}%
     2189\pgfsys@transformshift{4.570184in}{2.029549in}%
     2190\pgfsys@useobject{currentmarker}{}%
     2191\end{pgfscope}%
     2192\end{pgfscope}%
     2193\begin{pgfscope}%
     2194\pgfsetbuttcap%
     2195\pgfsetroundjoin%
     2196\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     2197\pgfsetfillcolor{currentfill}%
     2198\pgfsetlinewidth{1.003750pt}%
     2199\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2200\pgfsetstrokecolor{currentstroke}%
     2201\pgfsetdash{}{0pt}%
     2202\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
     2203\pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
     2204\pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
     2205\pgfusepath{stroke,fill}%
     2206}%
     2207\begin{pgfscope}%
     2208\pgfsys@transformshift{4.570184in}{2.168438in}%
     2209\pgfsys@useobject{currentmarker}{}%
     2210\end{pgfscope}%
     2211\end{pgfscope}%
     2212\begin{pgfscope}%
     2213\pgfsetrectcap%
     2214\pgfsetroundjoin%
     2215\pgfsetlinewidth{1.505625pt}%
     2216\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2217\pgfsetstrokecolor{currentstroke}%
     2218\pgfsetdash{}{0pt}%
     2219\pgfpathmoveto{\pgfqpoint{4.431295in}{2.098994in}}%
     2220\pgfpathlineto{\pgfqpoint{4.709073in}{2.098994in}}%
     2221\pgfusepath{stroke}%
     2222\end{pgfscope}%
     2223\begin{pgfscope}%
     2224\pgfsetbuttcap%
     2225\pgfsetroundjoin%
     2226\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     2227\pgfsetfillcolor{currentfill}%
     2228\pgfsetlinewidth{1.003750pt}%
     2229\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2230\pgfsetstrokecolor{currentstroke}%
     2231\pgfsetdash{}{0pt}%
     2232\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2233\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2234\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2235\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2236\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2237\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2238\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2239\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2240\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2241\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
     2242\pgfpathclose%
     2243\pgfusepath{stroke,fill}%
     2244}%
     2245\begin{pgfscope}%
     2246\pgfsys@transformshift{4.570184in}{2.098994in}%
     2247\pgfsys@useobject{currentmarker}{}%
     2248\end{pgfscope}%
     2249\end{pgfscope}%
     2250\begin{pgfscope}%
     2251\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
     2252\pgfsetstrokecolor{textcolor}%
     2253\pgfsetfillcolor{textcolor}%
     2254\pgftext[x=4.820184in,y=2.050383in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-rand}%
    22232255\end{pgfscope}%
    22242256\end{pgfpicture}%
  • doc/theses/colby_parsons_MMAth/figures/nasus_Aggregate_Lock_4.pgf

    r3982384 r6e4c44d  
    7777\pgfsetstrokecolor{textcolor}%
    7878\pgfsetfillcolor{textcolor}%
    79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 2\)}%
     79\pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 2\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 4\)}%
     104\pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 4\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 8\)}%
     129\pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 8\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 16\)}%
     154\pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 16\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 24\)}%
     179\pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 24\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 32\)}%
     204\pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 32\)}%
    205205\end{pgfscope}%
    206206\begin{pgfscope}%
     
    208208\pgfsetstrokecolor{textcolor}%
    209209\pgfsetfillcolor{textcolor}%
    210 \pgftext[x=3.280000in,y=0.161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}%
     210\pgftext[x=3.280000in,y=0.251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}%
    211211\end{pgfscope}%
    212212\begin{pgfscope}%
     
    233233\pgfsetstrokecolor{textcolor}%
    234234\pgfsetfillcolor{textcolor}%
    235 \pgftext[x=0.399655in,y=0.697537in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{3}\)}%
     235\pgftext[x=0.501581in,y=0.732645in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{3}\)}%
    236236\end{pgfscope}%
    237237\begin{pgfscope}%
     
    258258\pgfsetstrokecolor{textcolor}%
    259259\pgfsetfillcolor{textcolor}%
    260 \pgftext[x=0.399655in,y=1.392266in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{4}\)}%
     260\pgftext[x=0.501581in,y=1.427374in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{4}\)}%
    261261\end{pgfscope}%
    262262\begin{pgfscope}%
     
    283283\pgfsetstrokecolor{textcolor}%
    284284\pgfsetfillcolor{textcolor}%
    285 \pgftext[x=0.399655in,y=2.086994in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{5}\)}%
     285\pgftext[x=0.501581in,y=2.122103in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{5}\)}%
    286286\end{pgfscope}%
    287287\begin{pgfscope}%
     
    308308\pgfsetstrokecolor{textcolor}%
    309309\pgfsetfillcolor{textcolor}%
    310 \pgftext[x=0.399655in,y=2.781723in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{6}\)}%
     310\pgftext[x=0.501581in,y=2.816831in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{6}\)}%
    311311\end{pgfscope}%
    312312\begin{pgfscope}%
     
    333333\pgfsetstrokecolor{textcolor}%
    334334\pgfsetfillcolor{textcolor}%
    335 \pgftext[x=0.399655in,y=3.476452in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{7}\)}%
     335\pgftext[x=0.501581in,y=3.511560in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{7}\)}%
    336336\end{pgfscope}%
    337337\begin{pgfscope}%
     
    11941194\pgfsetstrokecolor{textcolor}%
    11951195\pgfsetfillcolor{textcolor}%
    1196 \pgftext[x=0.344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (entries)}%
     1196\pgftext[x=0.446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (entries)}%
    11971197\end{pgfscope}%
    11981198\begin{pgfscope}%
     
    18571857\pgfusepath{clip}%
    18581858\pgfsetbuttcap%
    1859 \pgfsetmiterjoin%
     1859\pgfsetroundjoin%
    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.039627in}{-0.033709in}}{\pgfqpoint{0.039627in}{0.041667in}}{%
    1867 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}%
    1868 \pgfpathlineto{\pgfqpoint{-0.039627in}{0.012876in}}%
    1869 \pgfpathlineto{\pgfqpoint{-0.024491in}{-0.033709in}}%
    1870 \pgfpathlineto{\pgfqpoint{0.024491in}{-0.033709in}}%
    1871 \pgfpathlineto{\pgfqpoint{0.039627in}{0.012876in}}%
     1866\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     1867\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     1868\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     1869\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     1870\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     1871\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     1872\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     1873\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     1874\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     1875\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    18721876\pgfpathclose%
    18731877\pgfusepath{stroke,fill}%
     
    19191923\pgfusepath{clip}%
    19201924\pgfsetbuttcap%
    1921 \pgfsetmiterjoin%
     1925\pgfsetroundjoin%
    19221926\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    19231927\pgfsetfillcolor{currentfill}%
     
    19271931\pgfsetdash{}{0pt}%
    19281932\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
    1929 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}%
    1930 \pgfpathlineto{\pgfqpoint{-0.041667in}{-0.041667in}}%
    1931 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%
     1933\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     1934\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     1935\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     1936\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     1937\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     1938\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     1939\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     1940\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     1941\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    19321942\pgfpathclose%
    19331943\pgfusepath{stroke,fill}%
     
    19791989\pgfusepath{clip}%
    19801990\pgfsetbuttcap%
    1981 \pgfsetmiterjoin%
     1991\pgfsetroundjoin%
    19821992\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
    19831993\pgfsetfillcolor{currentfill}%
     
    19861996\pgfsetstrokecolor{currentstroke}%
    19871997\pgfsetdash{}{0pt}%
    1988 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.036084in}{-0.041667in}}{\pgfqpoint{0.036084in}{0.041667in}}{%
    1989 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}%
    1990 \pgfpathlineto{\pgfqpoint{-0.036084in}{0.020833in}}%
    1991 \pgfpathlineto{\pgfqpoint{-0.036084in}{-0.020833in}}%
    1992 \pgfpathlineto{\pgfqpoint{-0.000000in}{-0.041667in}}%
    1993 \pgfpathlineto{\pgfqpoint{0.036084in}{-0.020833in}}%
    1994 \pgfpathlineto{\pgfqpoint{0.036084in}{0.020833in}}%
     1998\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     1999\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2000\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2001\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2002\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2003\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2004\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2005\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2006\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2007\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    19952008\pgfpathclose%
    19962009\pgfusepath{stroke,fill}%
     
    20422055\pgfusepath{clip}%
    20432056\pgfsetbuttcap%
    2044 \pgfsetbeveljoin%
     2057\pgfsetroundjoin%
    20452058\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
    20462059\pgfsetfillcolor{currentfill}%
     
    20492062\pgfsetstrokecolor{currentstroke}%
    20502063\pgfsetdash{}{0pt}%
    2051 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.039627in}{-0.033709in}}{\pgfqpoint{0.039627in}{0.041667in}}{%
    2052 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}%
    2053 \pgfpathlineto{\pgfqpoint{-0.009355in}{0.012876in}}%
    2054 \pgfpathlineto{\pgfqpoint{-0.039627in}{0.012876in}}%
    2055 \pgfpathlineto{\pgfqpoint{-0.015136in}{-0.004918in}}%
    2056 \pgfpathlineto{\pgfqpoint{-0.024491in}{-0.033709in}}%
    2057 \pgfpathlineto{\pgfqpoint{-0.000000in}{-0.015915in}}%
    2058 \pgfpathlineto{\pgfqpoint{0.024491in}{-0.033709in}}%
    2059 \pgfpathlineto{\pgfqpoint{0.015136in}{-0.004918in}}%
    2060 \pgfpathlineto{\pgfqpoint{0.039627in}{0.012876in}}%
    2061 \pgfpathlineto{\pgfqpoint{0.009355in}{0.012876in}}%
     2064\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2065\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2066\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2067\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2068\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2069\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2070\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2071\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2072\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2073\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    20622074\pgfpathclose%
    20632075\pgfusepath{stroke,fill}%
     
    21362148\pgfsetstrokecolor{textcolor}%
    21372149\pgfsetfillcolor{textcolor}%
    2138 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{19.200000}{23.040000}\selectfont Aggregate Lock Benchmark: 4 Locks}%
     2150\pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{12.000000}{14.400000}\selectfont Aggregate Lock Benchmark: 4 Locks}%
    21392151\end{pgfscope}%
    21402152\begin{pgfscope}%
     
    21492161\pgfsetstrokeopacity{0.800000}%
    21502162\pgfsetdash{}{0pt}%
    2151 \pgfpathmoveto{\pgfqpoint{3.602702in}{1.693747in}}%
    2152 \pgfpathlineto{\pgfqpoint{5.604444in}{1.693747in}}%
    2153 \pgfpathquadraticcurveto{\pgfqpoint{5.648889in}{1.693747in}}{\pgfqpoint{5.648889in}{1.738192in}}%
    2154 \pgfpathlineto{\pgfqpoint{5.648889in}{3.013808in}}%
    2155 \pgfpathquadraticcurveto{\pgfqpoint{5.648889in}{3.058253in}}{\pgfqpoint{5.604444in}{3.058253in}}%
    2156 \pgfpathlineto{\pgfqpoint{3.602702in}{3.058253in}}%
    2157 \pgfpathquadraticcurveto{\pgfqpoint{3.558257in}{3.058253in}}{\pgfqpoint{3.558257in}{3.013808in}}%
    2158 \pgfpathlineto{\pgfqpoint{3.558257in}{1.738192in}}%
    2159 \pgfpathquadraticcurveto{\pgfqpoint{3.558257in}{1.693747in}}{\pgfqpoint{3.602702in}{1.693747in}}%
     2163\pgfpathmoveto{\pgfqpoint{0.897222in}{0.597444in}}%
     2164\pgfpathlineto{\pgfqpoint{2.156483in}{0.597444in}}%
     2165\pgfpathquadraticcurveto{\pgfqpoint{2.184261in}{0.597444in}}{\pgfqpoint{2.184261in}{0.625222in}}%
     2166\pgfpathlineto{\pgfqpoint{2.184261in}{1.386024in}}%
     2167\pgfpathquadraticcurveto{\pgfqpoint{2.184261in}{1.413802in}}{\pgfqpoint{2.156483in}{1.413802in}}%
     2168\pgfpathlineto{\pgfqpoint{0.897222in}{1.413802in}}%
     2169\pgfpathquadraticcurveto{\pgfqpoint{0.869444in}{1.413802in}}{\pgfqpoint{0.869444in}{1.386024in}}%
     2170\pgfpathlineto{\pgfqpoint{0.869444in}{0.625222in}}%
     2171\pgfpathquadraticcurveto{\pgfqpoint{0.869444in}{0.597444in}}{\pgfqpoint{0.897222in}{0.597444in}}%
    21602172\pgfpathclose%
    21612173\pgfusepath{stroke,fill}%
     
    21682180\pgfsetstrokecolor{currentstroke}%
    21692181\pgfsetdash{}{0pt}%
    2170 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.769364in}}%
    2171 \pgfpathlineto{\pgfqpoint{3.869368in}{2.991586in}}%
     2182\pgfpathmoveto{\pgfqpoint{1.063889in}{1.240191in}}%
     2183\pgfpathlineto{\pgfqpoint{1.063889in}{1.379080in}}%
    21722184\pgfusepath{stroke}%
    21732185\end{pgfscope}%
     
    21872199}%
    21882200\begin{pgfscope}%
    2189 \pgfsys@transformshift{3.869368in}{2.769364in}%
     2201\pgfsys@transformshift{1.063889in}{1.240191in}%
    21902202\pgfsys@useobject{currentmarker}{}%
    21912203\end{pgfscope}%
     
    22062218}%
    22072219\begin{pgfscope}%
    2208 \pgfsys@transformshift{3.869368in}{2.991586in}%
     2220\pgfsys@transformshift{1.063889in}{1.379080in}%
    22092221\pgfsys@useobject{currentmarker}{}%
    22102222\end{pgfscope}%
     
    22172229\pgfsetstrokecolor{currentstroke}%
    22182230\pgfsetdash{}{0pt}%
    2219 \pgfpathmoveto{\pgfqpoint{3.647146in}{2.880475in}}%
    2220 \pgfpathlineto{\pgfqpoint{4.091591in}{2.880475in}}%
    2221 \pgfusepath{stroke}%
    2222 \end{pgfscope}%
    2223 \begin{pgfscope}%
    2224 \pgfsetbuttcap%
    2225 \pgfsetmiterjoin%
     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%
    22262238\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
    22272239\pgfsetfillcolor{currentfill}%
     
    22302242\pgfsetstrokecolor{currentstroke}%
    22312243\pgfsetdash{}{0pt}%
    2232 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.039627in}{-0.033709in}}{\pgfqpoint{0.039627in}{0.041667in}}{%
    2233 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}%
    2234 \pgfpathlineto{\pgfqpoint{-0.039627in}{0.012876in}}%
    2235 \pgfpathlineto{\pgfqpoint{-0.024491in}{-0.033709in}}%
    2236 \pgfpathlineto{\pgfqpoint{0.024491in}{-0.033709in}}%
    2237 \pgfpathlineto{\pgfqpoint{0.039627in}{0.012876in}}%
     2244\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2245\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2246\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2247\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2248\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2249\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2250\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2251\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2252\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2253\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    22382254\pgfpathclose%
    22392255\pgfusepath{stroke,fill}%
    22402256}%
    22412257\begin{pgfscope}%
    2242 \pgfsys@transformshift{3.869368in}{2.880475in}%
     2258\pgfsys@transformshift{1.063889in}{1.309636in}%
    22432259\pgfsys@useobject{currentmarker}{}%
    22442260\end{pgfscope}%
     
    22482264\pgfsetstrokecolor{textcolor}%
    22492265\pgfsetfillcolor{textcolor}%
    2250 \pgftext[x=4.269368in,y=2.802697in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-baseline}%
     2266\pgftext[x=1.313889in,y=1.261024in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-baseline}%
    22512267\end{pgfscope}%
    22522268\begin{pgfscope}%
     
    22572273\pgfsetstrokecolor{currentstroke}%
    22582274\pgfsetdash{}{0pt}%
    2259 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.444904in}}%
    2260 \pgfpathlineto{\pgfqpoint{3.869368in}{2.667126in}}%
     2275\pgfpathmoveto{\pgfqpoint{1.063889in}{1.046518in}}%
     2276\pgfpathlineto{\pgfqpoint{1.063889in}{1.185407in}}%
    22612277\pgfusepath{stroke}%
    22622278\end{pgfscope}%
     
    22762292}%
    22772293\begin{pgfscope}%
    2278 \pgfsys@transformshift{3.869368in}{2.444904in}%
     2294\pgfsys@transformshift{1.063889in}{1.046518in}%
    22792295\pgfsys@useobject{currentmarker}{}%
    22802296\end{pgfscope}%
     
    22952311}%
    22962312\begin{pgfscope}%
    2297 \pgfsys@transformshift{3.869368in}{2.667126in}%
     2313\pgfsys@transformshift{1.063889in}{1.185407in}%
    22982314\pgfsys@useobject{currentmarker}{}%
    22992315\end{pgfscope}%
     
    23062322\pgfsetstrokecolor{currentstroke}%
    23072323\pgfsetdash{}{0pt}%
    2308 \pgfpathmoveto{\pgfqpoint{3.647146in}{2.556015in}}%
    2309 \pgfpathlineto{\pgfqpoint{4.091591in}{2.556015in}}%
    2310 \pgfusepath{stroke}%
    2311 \end{pgfscope}%
    2312 \begin{pgfscope}%
    2313 \pgfsetbuttcap%
    2314 \pgfsetmiterjoin%
     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%
    23152331\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    23162332\pgfsetfillcolor{currentfill}%
     
    23202336\pgfsetdash{}{0pt}%
    23212337\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
    2322 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}%
    2323 \pgfpathlineto{\pgfqpoint{-0.041667in}{-0.041667in}}%
    2324 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%
     2338\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2339\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2340\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2341\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2342\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2343\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2344\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2345\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2346\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    23252347\pgfpathclose%
    23262348\pgfusepath{stroke,fill}%
    23272349}%
    23282350\begin{pgfscope}%
    2329 \pgfsys@transformshift{3.869368in}{2.556015in}%
     2351\pgfsys@transformshift{1.063889in}{1.115963in}%
    23302352\pgfsys@useobject{currentmarker}{}%
    23312353\end{pgfscope}%
     
    23352357\pgfsetstrokecolor{textcolor}%
    23362358\pgfsetfillcolor{textcolor}%
    2337 \pgftext[x=4.269368in,y=2.478238in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-baseline}%
     2359\pgftext[x=1.313889in,y=1.067352in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-baseline}%
    23382360\end{pgfscope}%
    23392361\begin{pgfscope}%
     
    23442366\pgfsetstrokecolor{currentstroke}%
    23452367\pgfsetdash{}{0pt}%
    2346 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.120444in}}%
    2347 \pgfpathlineto{\pgfqpoint{3.869368in}{2.342667in}}%
     2368\pgfpathmoveto{\pgfqpoint{1.063889in}{0.852846in}}%
     2369\pgfpathlineto{\pgfqpoint{1.063889in}{0.991734in}}%
    23482370\pgfusepath{stroke}%
    23492371\end{pgfscope}%
     
    23632385}%
    23642386\begin{pgfscope}%
    2365 \pgfsys@transformshift{3.869368in}{2.120444in}%
     2387\pgfsys@transformshift{1.063889in}{0.852846in}%
    23662388\pgfsys@useobject{currentmarker}{}%
    23672389\end{pgfscope}%
     
    23822404}%
    23832405\begin{pgfscope}%
    2384 \pgfsys@transformshift{3.869368in}{2.342667in}%
     2406\pgfsys@transformshift{1.063889in}{0.991734in}%
    23852407\pgfsys@useobject{currentmarker}{}%
    23862408\end{pgfscope}%
     
    23932415\pgfsetstrokecolor{currentstroke}%
    23942416\pgfsetdash{}{0pt}%
    2395 \pgfpathmoveto{\pgfqpoint{3.647146in}{2.231556in}}%
    2396 \pgfpathlineto{\pgfqpoint{4.091591in}{2.231556in}}%
    2397 \pgfusepath{stroke}%
    2398 \end{pgfscope}%
    2399 \begin{pgfscope}%
    2400 \pgfsetbuttcap%
    2401 \pgfsetmiterjoin%
     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%
    24022424\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
    24032425\pgfsetfillcolor{currentfill}%
     
    24062428\pgfsetstrokecolor{currentstroke}%
    24072429\pgfsetdash{}{0pt}%
    2408 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.036084in}{-0.041667in}}{\pgfqpoint{0.036084in}{0.041667in}}{%
    2409 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}%
    2410 \pgfpathlineto{\pgfqpoint{-0.036084in}{0.020833in}}%
    2411 \pgfpathlineto{\pgfqpoint{-0.036084in}{-0.020833in}}%
    2412 \pgfpathlineto{\pgfqpoint{-0.000000in}{-0.041667in}}%
    2413 \pgfpathlineto{\pgfqpoint{0.036084in}{-0.020833in}}%
    2414 \pgfpathlineto{\pgfqpoint{0.036084in}{0.020833in}}%
     2430\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2431\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2432\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2433\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2434\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2435\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2436\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2437\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2438\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2439\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    24152440\pgfpathclose%
    24162441\pgfusepath{stroke,fill}%
    24172442}%
    24182443\begin{pgfscope}%
    2419 \pgfsys@transformshift{3.869368in}{2.231556in}%
     2444\pgfsys@transformshift{1.063889in}{0.922290in}%
    24202445\pgfsys@useobject{currentmarker}{}%
    24212446\end{pgfscope}%
     
    24252450\pgfsetstrokecolor{textcolor}%
    24262451\pgfsetfillcolor{textcolor}%
    2427 \pgftext[x=4.269368in,y=2.153778in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-rand}%
     2452\pgftext[x=1.313889in,y=0.873679in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-rand}%
    24282453\end{pgfscope}%
    24292454\begin{pgfscope}%
     
    24342459\pgfsetstrokecolor{currentstroke}%
    24352460\pgfsetdash{}{0pt}%
    2436 \pgfpathmoveto{\pgfqpoint{3.869368in}{1.795985in}}%
    2437 \pgfpathlineto{\pgfqpoint{3.869368in}{2.018207in}}%
     2461\pgfpathmoveto{\pgfqpoint{1.063889in}{0.659173in}}%
     2462\pgfpathlineto{\pgfqpoint{1.063889in}{0.798062in}}%
    24382463\pgfusepath{stroke}%
    24392464\end{pgfscope}%
     
    24532478}%
    24542479\begin{pgfscope}%
    2455 \pgfsys@transformshift{3.869368in}{1.795985in}%
     2480\pgfsys@transformshift{1.063889in}{0.659173in}%
    24562481\pgfsys@useobject{currentmarker}{}%
    24572482\end{pgfscope}%
     
    24722497}%
    24732498\begin{pgfscope}%
    2474 \pgfsys@transformshift{3.869368in}{2.018207in}%
     2499\pgfsys@transformshift{1.063889in}{0.798062in}%
    24752500\pgfsys@useobject{currentmarker}{}%
    24762501\end{pgfscope}%
     
    24832508\pgfsetstrokecolor{currentstroke}%
    24842509\pgfsetdash{}{0pt}%
    2485 \pgfpathmoveto{\pgfqpoint{3.647146in}{1.907096in}}%
    2486 \pgfpathlineto{\pgfqpoint{4.091591in}{1.907096in}}%
    2487 \pgfusepath{stroke}%
    2488 \end{pgfscope}%
    2489 \begin{pgfscope}%
    2490 \pgfsetbuttcap%
    2491 \pgfsetbeveljoin%
     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%
    24922517\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
    24932518\pgfsetfillcolor{currentfill}%
     
    24962521\pgfsetstrokecolor{currentstroke}%
    24972522\pgfsetdash{}{0pt}%
    2498 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.039627in}{-0.033709in}}{\pgfqpoint{0.039627in}{0.041667in}}{%
    2499 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}%
    2500 \pgfpathlineto{\pgfqpoint{-0.009355in}{0.012876in}}%
    2501 \pgfpathlineto{\pgfqpoint{-0.039627in}{0.012876in}}%
    2502 \pgfpathlineto{\pgfqpoint{-0.015136in}{-0.004918in}}%
    2503 \pgfpathlineto{\pgfqpoint{-0.024491in}{-0.033709in}}%
    2504 \pgfpathlineto{\pgfqpoint{-0.000000in}{-0.015915in}}%
    2505 \pgfpathlineto{\pgfqpoint{0.024491in}{-0.033709in}}%
    2506 \pgfpathlineto{\pgfqpoint{0.015136in}{-0.004918in}}%
    2507 \pgfpathlineto{\pgfqpoint{0.039627in}{0.012876in}}%
    2508 \pgfpathlineto{\pgfqpoint{0.009355in}{0.012876in}}%
     2523\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2524\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2525\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2526\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2527\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2528\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2529\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2530\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2531\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2532\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    25092533\pgfpathclose%
    25102534\pgfusepath{stroke,fill}%
    25112535}%
    25122536\begin{pgfscope}%
    2513 \pgfsys@transformshift{3.869368in}{1.907096in}%
     2537\pgfsys@transformshift{1.063889in}{0.728617in}%
    25142538\pgfsys@useobject{currentmarker}{}%
    25152539\end{pgfscope}%
     
    25192543\pgfsetstrokecolor{textcolor}%
    25202544\pgfsetfillcolor{textcolor}%
    2521 \pgftext[x=4.269368in,y=1.829318in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-rand}%
     2545\pgftext[x=1.313889in,y=0.680006in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-rand}%
    25222546\end{pgfscope}%
    25232547\end{pgfpicture}%
  • doc/theses/colby_parsons_MMAth/figures/nasus_Aggregate_Lock_8.pgf

    r3982384 r6e4c44d  
    7777\pgfsetstrokecolor{textcolor}%
    7878\pgfsetfillcolor{textcolor}%
    79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 2\)}%
     79\pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 2\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 4\)}%
     104\pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 4\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 8\)}%
     129\pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 8\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 16\)}%
     154\pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 16\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 24\)}%
     179\pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 24\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 32\)}%
     204\pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 32\)}%
    205205\end{pgfscope}%
    206206\begin{pgfscope}%
     
    208208\pgfsetstrokecolor{textcolor}%
    209209\pgfsetfillcolor{textcolor}%
    210 \pgftext[x=3.280000in,y=0.161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}%
     210\pgftext[x=3.280000in,y=0.251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}%
    211211\end{pgfscope}%
    212212\begin{pgfscope}%
     
    233233\pgfsetstrokecolor{textcolor}%
    234234\pgfsetfillcolor{textcolor}%
    235 \pgftext[x=0.399655in,y=0.700496in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{3}\)}%
     235\pgftext[x=0.501581in,y=0.735604in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{3}\)}%
    236236\end{pgfscope}%
    237237\begin{pgfscope}%
     
    258258\pgfsetstrokecolor{textcolor}%
    259259\pgfsetfillcolor{textcolor}%
    260 \pgftext[x=0.399655in,y=1.343761in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{4}\)}%
     260\pgftext[x=0.501581in,y=1.378869in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{4}\)}%
    261261\end{pgfscope}%
    262262\begin{pgfscope}%
     
    283283\pgfsetstrokecolor{textcolor}%
    284284\pgfsetfillcolor{textcolor}%
    285 \pgftext[x=0.399655in,y=1.987026in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{5}\)}%
     285\pgftext[x=0.501581in,y=2.022134in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{5}\)}%
    286286\end{pgfscope}%
    287287\begin{pgfscope}%
     
    308308\pgfsetstrokecolor{textcolor}%
    309309\pgfsetfillcolor{textcolor}%
    310 \pgftext[x=0.399655in,y=2.630291in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{6}\)}%
     310\pgftext[x=0.501581in,y=2.665399in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{6}\)}%
    311311\end{pgfscope}%
    312312\begin{pgfscope}%
     
    333333\pgfsetstrokecolor{textcolor}%
    334334\pgfsetfillcolor{textcolor}%
    335 \pgftext[x=0.399655in,y=3.273555in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{7}\)}%
     335\pgftext[x=0.501581in,y=3.308663in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{7}\)}%
    336336\end{pgfscope}%
    337337\begin{pgfscope}%
     
    358358\pgfsetstrokecolor{textcolor}%
    359359\pgfsetfillcolor{textcolor}%
    360 \pgftext[x=0.399655in,y=3.916820in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{8}\)}%
     360\pgftext[x=0.501581in,y=3.951928in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{8}\)}%
    361361\end{pgfscope}%
    362362\begin{pgfscope}%
     
    12381238\pgfsetstrokecolor{textcolor}%
    12391239\pgfsetfillcolor{textcolor}%
    1240 \pgftext[x=0.344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (entries)}%
     1240\pgftext[x=0.446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (entries)}%
    12411241\end{pgfscope}%
    12421242\begin{pgfscope}%
     
    19011901\pgfusepath{clip}%
    19021902\pgfsetbuttcap%
    1903 \pgfsetmiterjoin%
     1903\pgfsetroundjoin%
    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}%
    19681908\pgfsetstrokecolor{currentstroke}%
    19691909\pgfsetdash{}{0pt}%
     
    19821922}%
    19831923\begin{pgfscope}%
    1984 \pgfsys@transformshift{1.025455in}{4.055876in}%
    1985 \pgfsys@useobject{currentmarker}{}%
    1986 \end{pgfscope}%
    1987 \begin{pgfscope}%
    1988 \pgfsys@transformshift{1.326061in}{3.957809in}%
    1989 \pgfsys@useobject{currentmarker}{}%
    1990 \end{pgfscope}%
    1991 \begin{pgfscope}%
    1992 \pgfsys@transformshift{1.927273in}{3.719959in}%
    1993 \pgfsys@useobject{currentmarker}{}%
    1994 \end{pgfscope}%
    1995 \begin{pgfscope}%
    1996 \pgfsys@transformshift{3.129697in}{3.604550in}%
    1997 \pgfsys@useobject{currentmarker}{}%
    1998 \end{pgfscope}%
    1999 \begin{pgfscope}%
    2000 \pgfsys@transformshift{4.332121in}{3.597915in}%
    2001 \pgfsys@useobject{currentmarker}{}%
    2002 \end{pgfscope}%
    2003 \begin{pgfscope}%
    2004 \pgfsys@transformshift{5.534545in}{3.583182in}%
     1924\pgfsys@transformshift{1.025455in}{3.772496in}%
     1925\pgfsys@useobject{currentmarker}{}%
     1926\end{pgfscope}%
     1927\begin{pgfscope}%
     1928\pgfsys@transformshift{1.326061in}{3.656800in}%
     1929\pgfsys@useobject{currentmarker}{}%
     1930\end{pgfscope}%
     1931\begin{pgfscope}%
     1932\pgfsys@transformshift{1.927273in}{3.464610in}%
     1933\pgfsys@useobject{currentmarker}{}%
     1934\end{pgfscope}%
     1935\begin{pgfscope}%
     1936\pgfsys@transformshift{3.129697in}{3.364807in}%
     1937\pgfsys@useobject{currentmarker}{}%
     1938\end{pgfscope}%
     1939\begin{pgfscope}%
     1940\pgfsys@transformshift{4.332121in}{3.378536in}%
     1941\pgfsys@useobject{currentmarker}{}%
     1942\end{pgfscope}%
     1943\begin{pgfscope}%
     1944\pgfsys@transformshift{5.534545in}{3.364296in}%
    20051945\pgfsys@useobject{currentmarker}{}%
    20061946\end{pgfscope}%
     
    20121952\pgfsetroundjoin%
    20131953\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}%
    22941954\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    22951955\pgfsetstrokecolor{currentstroke}%
    22961956\pgfsetdash{}{0pt}%
    2297 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.444904in}}%
    2298 \pgfpathlineto{\pgfqpoint{3.869368in}{2.667126in}}%
    2299 \pgfusepath{stroke}%
    2300 \end{pgfscope}%
    2301 \begin{pgfscope}%
    2302 \pgfsetbuttcap%
    2303 \pgfsetroundjoin%
    2304 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    2305 \pgfsetfillcolor{currentfill}%
    2306 \pgfsetlinewidth{1.003750pt}%
    2307 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    2308 \pgfsetstrokecolor{currentstroke}%
    2309 \pgfsetdash{}{0pt}%
    2310 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
    2311 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
    2312 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
    2313 \pgfusepath{stroke,fill}%
    2314 }%
    2315 \begin{pgfscope}%
    2316 \pgfsys@transformshift{3.869368in}{2.444904in}%
    2317 \pgfsys@useobject{currentmarker}{}%
    2318 \end{pgfscope}%
    2319 \end{pgfscope}%
    2320 \begin{pgfscope}%
    2321 \pgfsetbuttcap%
    2322 \pgfsetroundjoin%
    2323 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    2324 \pgfsetfillcolor{currentfill}%
    2325 \pgfsetlinewidth{1.003750pt}%
    2326 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    2327 \pgfsetstrokecolor{currentstroke}%
    2328 \pgfsetdash{}{0pt}%
    2329 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
    2330 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
    2331 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
    2332 \pgfusepath{stroke,fill}%
    2333 }%
    2334 \begin{pgfscope}%
    2335 \pgfsys@transformshift{3.869368in}{2.667126in}%
    2336 \pgfsys@useobject{currentmarker}{}%
    2337 \end{pgfscope}%
    2338 \end{pgfscope}%
    2339 \begin{pgfscope}%
    2340 \pgfsetrectcap%
    2341 \pgfsetroundjoin%
    2342 \pgfsetlinewidth{1.505625pt}%
    2343 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    2344 \pgfsetstrokecolor{currentstroke}%
    2345 \pgfsetdash{}{0pt}%
    2346 \pgfpathmoveto{\pgfqpoint{3.647146in}{2.556015in}}%
    2347 \pgfpathlineto{\pgfqpoint{4.091591in}{2.556015in}}%
    2348 \pgfusepath{stroke}%
    2349 \end{pgfscope}%
    2350 \begin{pgfscope}%
     1957\pgfpathmoveto{\pgfqpoint{1.025455in}{4.055876in}}%
     1958\pgfpathlineto{\pgfqpoint{1.326061in}{3.957809in}}%
     1959\pgfpathlineto{\pgfqpoint{1.927273in}{3.719959in}}%
     1960\pgfpathlineto{\pgfqpoint{3.129697in}{3.604550in}}%
     1961\pgfpathlineto{\pgfqpoint{4.332121in}{3.597915in}}%
     1962\pgfpathlineto{\pgfqpoint{5.534545in}{3.583182in}}%
     1963\pgfusepath{stroke}%
     1964\end{pgfscope}%
     1965\begin{pgfscope}%
     1966\pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%
     1967\pgfusepath{clip}%
    23511968\pgfsetbuttcap%
    23521969\pgfsetroundjoin%
     
    23711988}%
    23721989\begin{pgfscope}%
    2373 \pgfsys@transformshift{3.869368in}{2.556015in}%
    2374 \pgfsys@useobject{currentmarker}{}%
    2375 \end{pgfscope}%
     1990\pgfsys@transformshift{1.025455in}{4.055876in}%
     1991\pgfsys@useobject{currentmarker}{}%
     1992\end{pgfscope}%
     1993\begin{pgfscope}%
     1994\pgfsys@transformshift{1.326061in}{3.957809in}%
     1995\pgfsys@useobject{currentmarker}{}%
     1996\end{pgfscope}%
     1997\begin{pgfscope}%
     1998\pgfsys@transformshift{1.927273in}{3.719959in}%
     1999\pgfsys@useobject{currentmarker}{}%
     2000\end{pgfscope}%
     2001\begin{pgfscope}%
     2002\pgfsys@transformshift{3.129697in}{3.604550in}%
     2003\pgfsys@useobject{currentmarker}{}%
     2004\end{pgfscope}%
     2005\begin{pgfscope}%
     2006\pgfsys@transformshift{4.332121in}{3.597915in}%
     2007\pgfsys@useobject{currentmarker}{}%
     2008\end{pgfscope}%
     2009\begin{pgfscope}%
     2010\pgfsys@transformshift{5.534545in}{3.583182in}%
     2011\pgfsys@useobject{currentmarker}{}%
     2012\end{pgfscope}%
     2013\end{pgfscope}%
     2014\begin{pgfscope}%
     2015\pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%
     2016\pgfusepath{clip}%
     2017\pgfsetrectcap%
     2018\pgfsetroundjoin%
     2019\pgfsetlinewidth{1.505625pt}%
     2020\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2021\pgfsetstrokecolor{currentstroke}%
     2022\pgfsetdash{}{0pt}%
     2023\pgfpathmoveto{\pgfqpoint{1.025455in}{3.973113in}}%
     2024\pgfpathlineto{\pgfqpoint{1.326061in}{3.935736in}}%
     2025\pgfpathlineto{\pgfqpoint{1.927273in}{3.735517in}}%
     2026\pgfpathlineto{\pgfqpoint{3.129697in}{3.665369in}}%
     2027\pgfpathlineto{\pgfqpoint{4.332121in}{3.655510in}}%
     2028\pgfpathlineto{\pgfqpoint{5.534545in}{3.646498in}}%
     2029\pgfusepath{stroke}%
     2030\end{pgfscope}%
     2031\begin{pgfscope}%
     2032\pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%
     2033\pgfusepath{clip}%
     2034\pgfsetbuttcap%
     2035\pgfsetroundjoin%
     2036\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
     2037\pgfsetfillcolor{currentfill}%
     2038\pgfsetlinewidth{1.003750pt}%
     2039\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2040\pgfsetstrokecolor{currentstroke}%
     2041\pgfsetdash{}{0pt}%
     2042\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2043\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2044\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2045\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2046\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2047\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2048\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2049\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2050\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2051\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
     2052\pgfpathclose%
     2053\pgfusepath{stroke,fill}%
     2054}%
     2055\begin{pgfscope}%
     2056\pgfsys@transformshift{1.025455in}{3.973113in}%
     2057\pgfsys@useobject{currentmarker}{}%
     2058\end{pgfscope}%
     2059\begin{pgfscope}%
     2060\pgfsys@transformshift{1.326061in}{3.935736in}%
     2061\pgfsys@useobject{currentmarker}{}%
     2062\end{pgfscope}%
     2063\begin{pgfscope}%
     2064\pgfsys@transformshift{1.927273in}{3.735517in}%
     2065\pgfsys@useobject{currentmarker}{}%
     2066\end{pgfscope}%
     2067\begin{pgfscope}%
     2068\pgfsys@transformshift{3.129697in}{3.665369in}%
     2069\pgfsys@useobject{currentmarker}{}%
     2070\end{pgfscope}%
     2071\begin{pgfscope}%
     2072\pgfsys@transformshift{4.332121in}{3.655510in}%
     2073\pgfsys@useobject{currentmarker}{}%
     2074\end{pgfscope}%
     2075\begin{pgfscope}%
     2076\pgfsys@transformshift{5.534545in}{3.646498in}%
     2077\pgfsys@useobject{currentmarker}{}%
     2078\end{pgfscope}%
     2079\end{pgfscope}%
     2080\begin{pgfscope}%
     2081\pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%
     2082\pgfusepath{clip}%
     2083\pgfsetrectcap%
     2084\pgfsetroundjoin%
     2085\pgfsetlinewidth{1.505625pt}%
     2086\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2087\pgfsetstrokecolor{currentstroke}%
     2088\pgfsetdash{}{0pt}%
     2089\pgfpathmoveto{\pgfqpoint{1.025455in}{2.771065in}}%
     2090\pgfpathlineto{\pgfqpoint{1.326061in}{1.232613in}}%
     2091\pgfpathlineto{\pgfqpoint{1.927273in}{1.221115in}}%
     2092\pgfpathlineto{\pgfqpoint{3.129697in}{0.810456in}}%
     2093\pgfpathlineto{\pgfqpoint{4.332121in}{0.758096in}}%
     2094\pgfpathlineto{\pgfqpoint{5.534545in}{0.796927in}}%
     2095\pgfusepath{stroke}%
     2096\end{pgfscope}%
     2097\begin{pgfscope}%
     2098\pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%
     2099\pgfusepath{clip}%
     2100\pgfsetbuttcap%
     2101\pgfsetroundjoin%
     2102\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     2103\pgfsetfillcolor{currentfill}%
     2104\pgfsetlinewidth{1.003750pt}%
     2105\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2106\pgfsetstrokecolor{currentstroke}%
     2107\pgfsetdash{}{0pt}%
     2108\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2109\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2110\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2111\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2112\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2113\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2114\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2115\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2116\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2117\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
     2118\pgfpathclose%
     2119\pgfusepath{stroke,fill}%
     2120}%
     2121\begin{pgfscope}%
     2122\pgfsys@transformshift{1.025455in}{2.771065in}%
     2123\pgfsys@useobject{currentmarker}{}%
     2124\end{pgfscope}%
     2125\begin{pgfscope}%
     2126\pgfsys@transformshift{1.326061in}{1.232613in}%
     2127\pgfsys@useobject{currentmarker}{}%
     2128\end{pgfscope}%
     2129\begin{pgfscope}%
     2130\pgfsys@transformshift{1.927273in}{1.221115in}%
     2131\pgfsys@useobject{currentmarker}{}%
     2132\end{pgfscope}%
     2133\begin{pgfscope}%
     2134\pgfsys@transformshift{3.129697in}{0.810456in}%
     2135\pgfsys@useobject{currentmarker}{}%
     2136\end{pgfscope}%
     2137\begin{pgfscope}%
     2138\pgfsys@transformshift{4.332121in}{0.758096in}%
     2139\pgfsys@useobject{currentmarker}{}%
     2140\end{pgfscope}%
     2141\begin{pgfscope}%
     2142\pgfsys@transformshift{5.534545in}{0.796927in}%
     2143\pgfsys@useobject{currentmarker}{}%
     2144\end{pgfscope}%
     2145\end{pgfscope}%
     2146\begin{pgfscope}%
     2147\pgfsetrectcap%
     2148\pgfsetmiterjoin%
     2149\pgfsetlinewidth{0.803000pt}%
     2150\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     2151\pgfsetstrokecolor{currentstroke}%
     2152\pgfsetdash{}{0pt}%
     2153\pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%
     2154\pgfpathlineto{\pgfqpoint{0.800000in}{4.224000in}}%
     2155\pgfusepath{stroke}%
     2156\end{pgfscope}%
     2157\begin{pgfscope}%
     2158\pgfsetrectcap%
     2159\pgfsetmiterjoin%
     2160\pgfsetlinewidth{0.803000pt}%
     2161\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     2162\pgfsetstrokecolor{currentstroke}%
     2163\pgfsetdash{}{0pt}%
     2164\pgfpathmoveto{\pgfqpoint{5.760000in}{0.528000in}}%
     2165\pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%
     2166\pgfusepath{stroke}%
     2167\end{pgfscope}%
     2168\begin{pgfscope}%
     2169\pgfsetrectcap%
     2170\pgfsetmiterjoin%
     2171\pgfsetlinewidth{0.803000pt}%
     2172\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     2173\pgfsetstrokecolor{currentstroke}%
     2174\pgfsetdash{}{0pt}%
     2175\pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%
     2176\pgfpathlineto{\pgfqpoint{5.760000in}{0.528000in}}%
     2177\pgfusepath{stroke}%
     2178\end{pgfscope}%
     2179\begin{pgfscope}%
     2180\pgfsetrectcap%
     2181\pgfsetmiterjoin%
     2182\pgfsetlinewidth{0.803000pt}%
     2183\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     2184\pgfsetstrokecolor{currentstroke}%
     2185\pgfsetdash{}{0pt}%
     2186\pgfpathmoveto{\pgfqpoint{0.800000in}{4.224000in}}%
     2187\pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%
     2188\pgfusepath{stroke}%
    23762189\end{pgfscope}%
    23772190\begin{pgfscope}%
     
    23792192\pgfsetstrokecolor{textcolor}%
    23802193\pgfsetfillcolor{textcolor}%
    2381 \pgftext[x=4.269368in,y=2.478238in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-baseline}%
    2382 \end{pgfscope}%
    2383 \begin{pgfscope}%
    2384 \pgfsetbuttcap%
    2385 \pgfsetroundjoin%
    2386 \pgfsetlinewidth{1.505625pt}%
    2387 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
    2388 \pgfsetstrokecolor{currentstroke}%
    2389 \pgfsetdash{}{0pt}%
    2390 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.120444in}}%
    2391 \pgfpathlineto{\pgfqpoint{3.869368in}{2.342667in}}%
    2392 \pgfusepath{stroke}%
    2393 \end{pgfscope}%
    2394 \begin{pgfscope}%
    2395 \pgfsetbuttcap%
    2396 \pgfsetroundjoin%
    2397 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
    2398 \pgfsetfillcolor{currentfill}%
     2194\pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{12.000000}{14.400000}\selectfont Aggregate Lock Benchmark: 8 Locks}%
     2195\end{pgfscope}%
     2196\begin{pgfscope}%
     2197\pgfsetbuttcap%
     2198\pgfsetmiterjoin%
     2199\definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}%
     2200\pgfsetfillcolor{currentfill}%
     2201\pgfsetfillopacity{0.800000}%
    23992202\pgfsetlinewidth{1.003750pt}%
    2400 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2203\definecolor{currentstroke}{rgb}{0.800000,0.800000,0.800000}%
     2204\pgfsetstrokecolor{currentstroke}%
     2205\pgfsetstrokeopacity{0.800000}%
     2206\pgfsetdash{}{0pt}%
     2207\pgfpathmoveto{\pgfqpoint{4.403517in}{1.967821in}}%
     2208\pgfpathlineto{\pgfqpoint{5.662778in}{1.967821in}}%
     2209\pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{1.967821in}}{\pgfqpoint{5.690556in}{1.995599in}}%
     2210\pgfpathlineto{\pgfqpoint{5.690556in}{2.756401in}}%
     2211\pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{2.784179in}}{\pgfqpoint{5.662778in}{2.784179in}}%
     2212\pgfpathlineto{\pgfqpoint{4.403517in}{2.784179in}}%
     2213\pgfpathquadraticcurveto{\pgfqpoint{4.375739in}{2.784179in}}{\pgfqpoint{4.375739in}{2.756401in}}%
     2214\pgfpathlineto{\pgfqpoint{4.375739in}{1.995599in}}%
     2215\pgfpathquadraticcurveto{\pgfqpoint{4.375739in}{1.967821in}}{\pgfqpoint{4.403517in}{1.967821in}}%
     2216\pgfpathclose%
     2217\pgfusepath{stroke,fill}%
     2218\end{pgfscope}%
     2219\begin{pgfscope}%
     2220\pgfsetbuttcap%
     2221\pgfsetroundjoin%
     2222\pgfsetlinewidth{1.505625pt}%
     2223\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
     2224\pgfsetstrokecolor{currentstroke}%
     2225\pgfsetdash{}{0pt}%
     2226\pgfpathmoveto{\pgfqpoint{4.570184in}{2.610568in}}%
     2227\pgfpathlineto{\pgfqpoint{4.570184in}{2.749457in}}%
     2228\pgfusepath{stroke}%
     2229\end{pgfscope}%
     2230\begin{pgfscope}%
     2231\pgfsetbuttcap%
     2232\pgfsetroundjoin%
     2233\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
     2234\pgfsetfillcolor{currentfill}%
     2235\pgfsetlinewidth{1.003750pt}%
     2236\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
    24012237\pgfsetstrokecolor{currentstroke}%
    24022238\pgfsetdash{}{0pt}%
     
    24072243}%
    24082244\begin{pgfscope}%
    2409 \pgfsys@transformshift{3.869368in}{2.120444in}%
    2410 \pgfsys@useobject{currentmarker}{}%
    2411 \end{pgfscope}%
    2412 \end{pgfscope}%
    2413 \begin{pgfscope}%
    2414 \pgfsetbuttcap%
    2415 \pgfsetroundjoin%
    2416 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
     2245\pgfsys@transformshift{4.570184in}{2.610568in}%
     2246\pgfsys@useobject{currentmarker}{}%
     2247\end{pgfscope}%
     2248\end{pgfscope}%
     2249\begin{pgfscope}%
     2250\pgfsetbuttcap%
     2251\pgfsetroundjoin%
     2252\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
    24172253\pgfsetfillcolor{currentfill}%
    24182254\pgfsetlinewidth{1.003750pt}%
    2419 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2255\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
    24202256\pgfsetstrokecolor{currentstroke}%
    24212257\pgfsetdash{}{0pt}%
     
    24262262}%
    24272263\begin{pgfscope}%
    2428 \pgfsys@transformshift{3.869368in}{2.342667in}%
     2264\pgfsys@transformshift{4.570184in}{2.749457in}%
    24292265\pgfsys@useobject{currentmarker}{}%
    24302266\end{pgfscope}%
     
    24342270\pgfsetroundjoin%
    24352271\pgfsetlinewidth{1.505625pt}%
    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}%
     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}%
    24472283\pgfsetfillcolor{currentfill}%
    24482284\pgfsetlinewidth{1.003750pt}%
    2449 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2285\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
    24502286\pgfsetstrokecolor{currentstroke}%
    24512287\pgfsetdash{}{0pt}%
    24522288\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
    2453 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}%
    2454 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%
    2455 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%
    2456 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}%
     2289\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2290\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2291\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2292\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2293\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2294\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2295\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2296\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2297\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    24572298\pgfpathclose%
    24582299\pgfusepath{stroke,fill}%
    24592300}%
    24602301\begin{pgfscope}%
    2461 \pgfsys@transformshift{3.869368in}{2.231556in}%
     2302\pgfsys@transformshift{4.570184in}{2.680012in}%
    24622303\pgfsys@useobject{currentmarker}{}%
    24632304\end{pgfscope}%
     
    24672308\pgfsetstrokecolor{textcolor}%
    24682309\pgfsetfillcolor{textcolor}%
    2469 \pgftext[x=4.269368in,y=2.153778in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-rand}%
    2470 \end{pgfscope}%
    2471 \begin{pgfscope}%
    2472 \pgfsetbuttcap%
    2473 \pgfsetroundjoin%
    2474 \pgfsetlinewidth{1.505625pt}%
    2475 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
    2476 \pgfsetstrokecolor{currentstroke}%
    2477 \pgfsetdash{}{0pt}%
    2478 \pgfpathmoveto{\pgfqpoint{3.869368in}{1.795985in}}%
    2479 \pgfpathlineto{\pgfqpoint{3.869368in}{2.018207in}}%
    2480 \pgfusepath{stroke}%
    2481 \end{pgfscope}%
    2482 \begin{pgfscope}%
    2483 \pgfsetbuttcap%
    2484 \pgfsetroundjoin%
    2485 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     2310\pgftext[x=4.820184in,y=2.631401in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-baseline}%
     2311\end{pgfscope}%
     2312\begin{pgfscope}%
     2313\pgfsetbuttcap%
     2314\pgfsetroundjoin%
     2315\pgfsetlinewidth{1.505625pt}%
     2316\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     2317\pgfsetstrokecolor{currentstroke}%
     2318\pgfsetdash{}{0pt}%
     2319\pgfpathmoveto{\pgfqpoint{4.570184in}{2.416895in}}%
     2320\pgfpathlineto{\pgfqpoint{4.570184in}{2.555784in}}%
     2321\pgfusepath{stroke}%
     2322\end{pgfscope}%
     2323\begin{pgfscope}%
     2324\pgfsetbuttcap%
     2325\pgfsetroundjoin%
     2326\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    24862327\pgfsetfillcolor{currentfill}%
    24872328\pgfsetlinewidth{1.003750pt}%
    2488 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2329\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    24892330\pgfsetstrokecolor{currentstroke}%
    24902331\pgfsetdash{}{0pt}%
     
    24952336}%
    24962337\begin{pgfscope}%
    2497 \pgfsys@transformshift{3.869368in}{1.795985in}%
    2498 \pgfsys@useobject{currentmarker}{}%
    2499 \end{pgfscope}%
    2500 \end{pgfscope}%
    2501 \begin{pgfscope}%
    2502 \pgfsetbuttcap%
    2503 \pgfsetroundjoin%
    2504 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     2338\pgfsys@transformshift{4.570184in}{2.416895in}%
     2339\pgfsys@useobject{currentmarker}{}%
     2340\end{pgfscope}%
     2341\end{pgfscope}%
     2342\begin{pgfscope}%
     2343\pgfsetbuttcap%
     2344\pgfsetroundjoin%
     2345\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    25052346\pgfsetfillcolor{currentfill}%
    25062347\pgfsetlinewidth{1.003750pt}%
    2507 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2348\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    25082349\pgfsetstrokecolor{currentstroke}%
    25092350\pgfsetdash{}{0pt}%
     
    25142355}%
    25152356\begin{pgfscope}%
    2516 \pgfsys@transformshift{3.869368in}{2.018207in}%
     2357\pgfsys@transformshift{4.570184in}{2.555784in}%
    25172358\pgfsys@useobject{currentmarker}{}%
    25182359\end{pgfscope}%
     
    25222363\pgfsetroundjoin%
    25232364\pgfsetlinewidth{1.505625pt}%
    2524 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
    2525 \pgfsetstrokecolor{currentstroke}%
    2526 \pgfsetdash{}{0pt}%
    2527 \pgfpathmoveto{\pgfqpoint{3.647146in}{1.907096in}}%
    2528 \pgfpathlineto{\pgfqpoint{4.091591in}{1.907096in}}%
    2529 \pgfusepath{stroke}%
    2530 \end{pgfscope}%
    2531 \begin{pgfscope}%
    2532 \pgfsetbuttcap%
    2533 \pgfsetmiterjoin%
    2534 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     2365\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     2366\pgfsetstrokecolor{currentstroke}%
     2367\pgfsetdash{}{0pt}%
     2368\pgfpathmoveto{\pgfqpoint{4.431295in}{2.486339in}}%
     2369\pgfpathlineto{\pgfqpoint{4.709073in}{2.486339in}}%
     2370\pgfusepath{stroke}%
     2371\end{pgfscope}%
     2372\begin{pgfscope}%
     2373\pgfsetbuttcap%
     2374\pgfsetroundjoin%
     2375\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    25352376\pgfsetfillcolor{currentfill}%
    25362377\pgfsetlinewidth{1.003750pt}%
    2537 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
    2538 \pgfsetstrokecolor{currentstroke}%
    2539 \pgfsetdash{}{0pt}%
    2540 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.058926in}{-0.058926in}}{\pgfqpoint{0.058926in}{0.058926in}}{%
    2541 \pgfpathmoveto{\pgfqpoint{-0.000000in}{-0.058926in}}%
    2542 \pgfpathlineto{\pgfqpoint{0.058926in}{0.000000in}}%
    2543 \pgfpathlineto{\pgfqpoint{0.000000in}{0.058926in}}%
    2544 \pgfpathlineto{\pgfqpoint{-0.058926in}{0.000000in}}%
     2378\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     2379\pgfsetstrokecolor{currentstroke}%
     2380\pgfsetdash{}{0pt}%
     2381\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2382\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2383\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2384\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2385\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2386\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2387\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2388\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2389\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2390\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    25452391\pgfpathclose%
    25462392\pgfusepath{stroke,fill}%
    25472393}%
    25482394\begin{pgfscope}%
    2549 \pgfsys@transformshift{3.869368in}{1.907096in}%
     2395\pgfsys@transformshift{4.570184in}{2.486339in}%
    25502396\pgfsys@useobject{currentmarker}{}%
    25512397\end{pgfscope}%
     
    25552401\pgfsetstrokecolor{textcolor}%
    25562402\pgfsetfillcolor{textcolor}%
    2557 \pgftext[x=4.269368in,y=1.829318in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-rand}%
     2403\pgftext[x=4.820184in,y=2.437728in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-baseline}%
     2404\end{pgfscope}%
     2405\begin{pgfscope}%
     2406\pgfsetbuttcap%
     2407\pgfsetroundjoin%
     2408\pgfsetlinewidth{1.505625pt}%
     2409\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2410\pgfsetstrokecolor{currentstroke}%
     2411\pgfsetdash{}{0pt}%
     2412\pgfpathmoveto{\pgfqpoint{4.570184in}{2.223222in}}%
     2413\pgfpathlineto{\pgfqpoint{4.570184in}{2.362111in}}%
     2414\pgfusepath{stroke}%
     2415\end{pgfscope}%
     2416\begin{pgfscope}%
     2417\pgfsetbuttcap%
     2418\pgfsetroundjoin%
     2419\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
     2420\pgfsetfillcolor{currentfill}%
     2421\pgfsetlinewidth{1.003750pt}%
     2422\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2423\pgfsetstrokecolor{currentstroke}%
     2424\pgfsetdash{}{0pt}%
     2425\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
     2426\pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
     2427\pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
     2428\pgfusepath{stroke,fill}%
     2429}%
     2430\begin{pgfscope}%
     2431\pgfsys@transformshift{4.570184in}{2.223222in}%
     2432\pgfsys@useobject{currentmarker}{}%
     2433\end{pgfscope}%
     2434\end{pgfscope}%
     2435\begin{pgfscope}%
     2436\pgfsetbuttcap%
     2437\pgfsetroundjoin%
     2438\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
     2439\pgfsetfillcolor{currentfill}%
     2440\pgfsetlinewidth{1.003750pt}%
     2441\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2442\pgfsetstrokecolor{currentstroke}%
     2443\pgfsetdash{}{0pt}%
     2444\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
     2445\pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
     2446\pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
     2447\pgfusepath{stroke,fill}%
     2448}%
     2449\begin{pgfscope}%
     2450\pgfsys@transformshift{4.570184in}{2.362111in}%
     2451\pgfsys@useobject{currentmarker}{}%
     2452\end{pgfscope}%
     2453\end{pgfscope}%
     2454\begin{pgfscope}%
     2455\pgfsetrectcap%
     2456\pgfsetroundjoin%
     2457\pgfsetlinewidth{1.505625pt}%
     2458\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2459\pgfsetstrokecolor{currentstroke}%
     2460\pgfsetdash{}{0pt}%
     2461\pgfpathmoveto{\pgfqpoint{4.431295in}{2.292667in}}%
     2462\pgfpathlineto{\pgfqpoint{4.709073in}{2.292667in}}%
     2463\pgfusepath{stroke}%
     2464\end{pgfscope}%
     2465\begin{pgfscope}%
     2466\pgfsetbuttcap%
     2467\pgfsetroundjoin%
     2468\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
     2469\pgfsetfillcolor{currentfill}%
     2470\pgfsetlinewidth{1.003750pt}%
     2471\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2472\pgfsetstrokecolor{currentstroke}%
     2473\pgfsetdash{}{0pt}%
     2474\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2475\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2476\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2477\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2478\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2479\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2480\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2481\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2482\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2483\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
     2484\pgfpathclose%
     2485\pgfusepath{stroke,fill}%
     2486}%
     2487\begin{pgfscope}%
     2488\pgfsys@transformshift{4.570184in}{2.292667in}%
     2489\pgfsys@useobject{currentmarker}{}%
     2490\end{pgfscope}%
     2491\end{pgfscope}%
     2492\begin{pgfscope}%
     2493\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
     2494\pgfsetstrokecolor{textcolor}%
     2495\pgfsetfillcolor{textcolor}%
     2496\pgftext[x=4.820184in,y=2.244056in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-rand}%
     2497\end{pgfscope}%
     2498\begin{pgfscope}%
     2499\pgfsetbuttcap%
     2500\pgfsetroundjoin%
     2501\pgfsetlinewidth{1.505625pt}%
     2502\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2503\pgfsetstrokecolor{currentstroke}%
     2504\pgfsetdash{}{0pt}%
     2505\pgfpathmoveto{\pgfqpoint{4.570184in}{2.029549in}}%
     2506\pgfpathlineto{\pgfqpoint{4.570184in}{2.168438in}}%
     2507\pgfusepath{stroke}%
     2508\end{pgfscope}%
     2509\begin{pgfscope}%
     2510\pgfsetbuttcap%
     2511\pgfsetroundjoin%
     2512\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     2513\pgfsetfillcolor{currentfill}%
     2514\pgfsetlinewidth{1.003750pt}%
     2515\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2516\pgfsetstrokecolor{currentstroke}%
     2517\pgfsetdash{}{0pt}%
     2518\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
     2519\pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
     2520\pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
     2521\pgfusepath{stroke,fill}%
     2522}%
     2523\begin{pgfscope}%
     2524\pgfsys@transformshift{4.570184in}{2.029549in}%
     2525\pgfsys@useobject{currentmarker}{}%
     2526\end{pgfscope}%
     2527\end{pgfscope}%
     2528\begin{pgfscope}%
     2529\pgfsetbuttcap%
     2530\pgfsetroundjoin%
     2531\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     2532\pgfsetfillcolor{currentfill}%
     2533\pgfsetlinewidth{1.003750pt}%
     2534\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2535\pgfsetstrokecolor{currentstroke}%
     2536\pgfsetdash{}{0pt}%
     2537\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
     2538\pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
     2539\pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
     2540\pgfusepath{stroke,fill}%
     2541}%
     2542\begin{pgfscope}%
     2543\pgfsys@transformshift{4.570184in}{2.168438in}%
     2544\pgfsys@useobject{currentmarker}{}%
     2545\end{pgfscope}%
     2546\end{pgfscope}%
     2547\begin{pgfscope}%
     2548\pgfsetrectcap%
     2549\pgfsetroundjoin%
     2550\pgfsetlinewidth{1.505625pt}%
     2551\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2552\pgfsetstrokecolor{currentstroke}%
     2553\pgfsetdash{}{0pt}%
     2554\pgfpathmoveto{\pgfqpoint{4.431295in}{2.098994in}}%
     2555\pgfpathlineto{\pgfqpoint{4.709073in}{2.098994in}}%
     2556\pgfusepath{stroke}%
     2557\end{pgfscope}%
     2558\begin{pgfscope}%
     2559\pgfsetbuttcap%
     2560\pgfsetroundjoin%
     2561\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     2562\pgfsetfillcolor{currentfill}%
     2563\pgfsetlinewidth{1.003750pt}%
     2564\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2565\pgfsetstrokecolor{currentstroke}%
     2566\pgfsetdash{}{0pt}%
     2567\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2568\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2569\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2570\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2571\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2572\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2573\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2574\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2575\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2576\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
     2577\pgfpathclose%
     2578\pgfusepath{stroke,fill}%
     2579}%
     2580\begin{pgfscope}%
     2581\pgfsys@transformshift{4.570184in}{2.098994in}%
     2582\pgfsys@useobject{currentmarker}{}%
     2583\end{pgfscope}%
     2584\end{pgfscope}%
     2585\begin{pgfscope}%
     2586\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
     2587\pgfsetstrokecolor{textcolor}%
     2588\pgfsetfillcolor{textcolor}%
     2589\pgftext[x=4.820184in,y=2.050383in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-rand}%
    25582590\end{pgfscope}%
    25592591\end{pgfpicture}%
  • doc/theses/colby_parsons_MMAth/figures/nasus_Channel_Contention.pgf

    r3982384 r6e4c44d  
    7777\pgfsetstrokecolor{textcolor}%
    7878\pgfsetfillcolor{textcolor}%
    79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 2\)}%
     79\pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 2\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 4\)}%
     104\pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 4\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 8\)}%
     129\pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 8\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 16\)}%
     154\pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 16\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 24\)}%
     179\pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 24\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 32\)}%
     204\pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 32\)}%
    205205\end{pgfscope}%
    206206\begin{pgfscope}%
     
    208208\pgfsetstrokecolor{textcolor}%
    209209\pgfsetfillcolor{textcolor}%
    210 \pgftext[x=3.280000in,y=0.161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}%
     210\pgftext[x=3.280000in,y=0.251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}%
    211211\end{pgfscope}%
    212212\begin{pgfscope}%
     
    233233\pgfsetstrokecolor{textcolor}%
    234234\pgfsetfillcolor{textcolor}%
    235 \pgftext[x=0.399655in,y=2.012615in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{8}\)}%
     235\pgftext[x=0.501581in,y=2.047723in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{8}\)}%
    236236\end{pgfscope}%
    237237\begin{pgfscope}%
     
    467467\pgfsetstrokecolor{textcolor}%
    468468\pgfsetfillcolor{textcolor}%
    469 \pgftext[x=0.344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (channel operations)}%
     469\pgftext[x=0.446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (channel operations)}%
    470470\end{pgfscope}%
    471471\begin{pgfscope}%
     
    876876\pgfusepath{clip}%
    877877\pgfsetbuttcap%
    878 \pgfsetmiterjoin%
     878\pgfsetroundjoin%
    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}%
    1058883\pgfsetstrokecolor{currentstroke}%
    1059884\pgfsetdash{}{0pt}%
     
    1072897}%
    1073898\begin{pgfscope}%
    1074 \pgfsys@transformshift{4.713959in}{3.935111in}%
    1075 \pgfsys@useobject{currentmarker}{}%
    1076 \end{pgfscope}%
     899\pgfsys@transformshift{1.025455in}{3.406486in}%
     900\pgfsys@useobject{currentmarker}{}%
     901\end{pgfscope}%
     902\begin{pgfscope}%
     903\pgfsys@transformshift{1.326061in}{3.091073in}%
     904\pgfsys@useobject{currentmarker}{}%
     905\end{pgfscope}%
     906\begin{pgfscope}%
     907\pgfsys@transformshift{1.927273in}{2.246470in}%
     908\pgfsys@useobject{currentmarker}{}%
     909\end{pgfscope}%
     910\begin{pgfscope}%
     911\pgfsys@transformshift{3.129697in}{1.072038in}%
     912\pgfsys@useobject{currentmarker}{}%
     913\end{pgfscope}%
     914\begin{pgfscope}%
     915\pgfsys@transformshift{4.332121in}{0.890889in}%
     916\pgfsys@useobject{currentmarker}{}%
     917\end{pgfscope}%
     918\begin{pgfscope}%
     919\pgfsys@transformshift{5.534545in}{1.106104in}%
     920\pgfsys@useobject{currentmarker}{}%
     921\end{pgfscope}%
     922\end{pgfscope}%
     923\begin{pgfscope}%
     924\pgfsetrectcap%
     925\pgfsetmiterjoin%
     926\pgfsetlinewidth{0.803000pt}%
     927\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     928\pgfsetstrokecolor{currentstroke}%
     929\pgfsetdash{}{0pt}%
     930\pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%
     931\pgfpathlineto{\pgfqpoint{0.800000in}{4.224000in}}%
     932\pgfusepath{stroke}%
     933\end{pgfscope}%
     934\begin{pgfscope}%
     935\pgfsetrectcap%
     936\pgfsetmiterjoin%
     937\pgfsetlinewidth{0.803000pt}%
     938\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     939\pgfsetstrokecolor{currentstroke}%
     940\pgfsetdash{}{0pt}%
     941\pgfpathmoveto{\pgfqpoint{5.760000in}{0.528000in}}%
     942\pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%
     943\pgfusepath{stroke}%
     944\end{pgfscope}%
     945\begin{pgfscope}%
     946\pgfsetrectcap%
     947\pgfsetmiterjoin%
     948\pgfsetlinewidth{0.803000pt}%
     949\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     950\pgfsetstrokecolor{currentstroke}%
     951\pgfsetdash{}{0pt}%
     952\pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%
     953\pgfpathlineto{\pgfqpoint{5.760000in}{0.528000in}}%
     954\pgfusepath{stroke}%
     955\end{pgfscope}%
     956\begin{pgfscope}%
     957\pgfsetrectcap%
     958\pgfsetmiterjoin%
     959\pgfsetlinewidth{0.803000pt}%
     960\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     961\pgfsetstrokecolor{currentstroke}%
     962\pgfsetdash{}{0pt}%
     963\pgfpathmoveto{\pgfqpoint{0.800000in}{4.224000in}}%
     964\pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%
     965\pgfusepath{stroke}%
    1077966\end{pgfscope}%
    1078967\begin{pgfscope}%
     
    1080969\pgfsetstrokecolor{textcolor}%
    1081970\pgfsetfillcolor{textcolor}%
    1082 \pgftext[x=5.113959in,y=3.857333in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA}%
    1083 \end{pgfscope}%
    1084 \begin{pgfscope}%
    1085 \pgfsetbuttcap%
    1086 \pgfsetroundjoin%
    1087 \pgfsetlinewidth{1.505625pt}%
    1088 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    1089 \pgfsetstrokecolor{currentstroke}%
    1090 \pgfsetdash{}{0pt}%
    1091 \pgfpathmoveto{\pgfqpoint{4.713959in}{3.499540in}}%
    1092 \pgfpathlineto{\pgfqpoint{4.713959in}{3.721763in}}%
    1093 \pgfusepath{stroke}%
    1094 \end{pgfscope}%
    1095 \begin{pgfscope}%
    1096 \pgfsetbuttcap%
    1097 \pgfsetroundjoin%
    1098 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    1099 \pgfsetfillcolor{currentfill}%
    1100 \pgfsetlinewidth{1.003750pt}%
    1101 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     971\pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{12.000000}{14.400000}\selectfont Channel Contention Benchmark}%
     972\end{pgfscope}%
     973\begin{pgfscope}%
     974\pgfsetbuttcap%
     975\pgfsetmiterjoin%
     976\definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}%
     977\pgfsetfillcolor{currentfill}%
     978\pgfsetfillopacity{0.800000}%
     979\pgfsetlinewidth{1.003750pt}%
     980\definecolor{currentstroke}{rgb}{0.800000,0.800000,0.800000}%
     981\pgfsetstrokecolor{currentstroke}%
     982\pgfsetstrokeopacity{0.800000}%
     983\pgfsetdash{}{0pt}%
     984\pgfpathmoveto{\pgfqpoint{4.938626in}{3.725543in}}%
     985\pgfpathlineto{\pgfqpoint{5.662778in}{3.725543in}}%
     986\pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{3.725543in}}{\pgfqpoint{5.690556in}{3.753321in}}%
     987\pgfpathlineto{\pgfqpoint{5.690556in}{4.126778in}}%
     988\pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{4.154556in}}{\pgfqpoint{5.662778in}{4.154556in}}%
     989\pgfpathlineto{\pgfqpoint{4.938626in}{4.154556in}}%
     990\pgfpathquadraticcurveto{\pgfqpoint{4.910848in}{4.154556in}}{\pgfqpoint{4.910848in}{4.126778in}}%
     991\pgfpathlineto{\pgfqpoint{4.910848in}{3.753321in}}%
     992\pgfpathquadraticcurveto{\pgfqpoint{4.910848in}{3.725543in}}{\pgfqpoint{4.938626in}{3.725543in}}%
     993\pgfpathclose%
     994\pgfusepath{stroke,fill}%
     995\end{pgfscope}%
     996\begin{pgfscope}%
     997\pgfsetbuttcap%
     998\pgfsetroundjoin%
     999\pgfsetlinewidth{1.505625pt}%
     1000\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
     1001\pgfsetstrokecolor{currentstroke}%
     1002\pgfsetdash{}{0pt}%
     1003\pgfpathmoveto{\pgfqpoint{5.105293in}{3.980944in}}%
     1004\pgfpathlineto{\pgfqpoint{5.105293in}{4.119833in}}%
     1005\pgfusepath{stroke}%
     1006\end{pgfscope}%
     1007\begin{pgfscope}%
     1008\pgfsetbuttcap%
     1009\pgfsetroundjoin%
     1010\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
     1011\pgfsetfillcolor{currentfill}%
     1012\pgfsetlinewidth{1.003750pt}%
     1013\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
    11021014\pgfsetstrokecolor{currentstroke}%
    11031015\pgfsetdash{}{0pt}%
     
    11081020}%
    11091021\begin{pgfscope}%
    1110 \pgfsys@transformshift{4.713959in}{3.499540in}%
    1111 \pgfsys@useobject{currentmarker}{}%
    1112 \end{pgfscope}%
    1113 \end{pgfscope}%
    1114 \begin{pgfscope}%
    1115 \pgfsetbuttcap%
    1116 \pgfsetroundjoin%
    1117 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    1118 \pgfsetfillcolor{currentfill}%
    1119 \pgfsetlinewidth{1.003750pt}%
    1120 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     1022\pgfsys@transformshift{5.105293in}{3.980944in}%
     1023\pgfsys@useobject{currentmarker}{}%
     1024\end{pgfscope}%
     1025\end{pgfscope}%
     1026\begin{pgfscope}%
     1027\pgfsetbuttcap%
     1028\pgfsetroundjoin%
     1029\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
     1030\pgfsetfillcolor{currentfill}%
     1031\pgfsetlinewidth{1.003750pt}%
     1032\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
    11211033\pgfsetstrokecolor{currentstroke}%
    11221034\pgfsetdash{}{0pt}%
     
    11271039}%
    11281040\begin{pgfscope}%
    1129 \pgfsys@transformshift{4.713959in}{3.721763in}%
     1041\pgfsys@transformshift{5.105293in}{4.119833in}%
    11301042\pgfsys@useobject{currentmarker}{}%
    11311043\end{pgfscope}%
     
    11351047\pgfsetroundjoin%
    11361048\pgfsetlinewidth{1.505625pt}%
    1137 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    1138 \pgfsetstrokecolor{currentstroke}%
    1139 \pgfsetdash{}{0pt}%
    1140 \pgfpathmoveto{\pgfqpoint{4.491737in}{3.610651in}}%
    1141 \pgfpathlineto{\pgfqpoint{4.936181in}{3.610651in}}%
    1142 \pgfusepath{stroke}%
    1143 \end{pgfscope}%
    1144 \begin{pgfscope}%
    1145 \pgfsetbuttcap%
    1146 \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}%
     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}%
    11511063\pgfsetstrokecolor{currentstroke}%
    11521064\pgfsetdash{}{0pt}%
    11531065\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
    1154 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}%
    1155 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%
    1156 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%
    1157 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}%
     1066\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     1067\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     1068\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     1069\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     1070\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     1071\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     1072\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     1073\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     1074\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    11581075\pgfpathclose%
    11591076\pgfusepath{stroke,fill}%
    11601077}%
    11611078\begin{pgfscope}%
    1162 \pgfsys@transformshift{4.713959in}{3.610651in}%
     1079\pgfsys@transformshift{5.105293in}{4.050389in}%
    11631080\pgfsys@useobject{currentmarker}{}%
    11641081\end{pgfscope}%
     
    11681085\pgfsetstrokecolor{textcolor}%
    11691086\pgfsetfillcolor{textcolor}%
    1170 \pgftext[x=5.113959in,y=3.532874in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Go}%
     1087\pgftext[x=5.355293in,y=4.001778in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA}%
     1088\end{pgfscope}%
     1089\begin{pgfscope}%
     1090\pgfsetbuttcap%
     1091\pgfsetroundjoin%
     1092\pgfsetlinewidth{1.505625pt}%
     1093\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     1094\pgfsetstrokecolor{currentstroke}%
     1095\pgfsetdash{}{0pt}%
     1096\pgfpathmoveto{\pgfqpoint{5.105293in}{3.787272in}}%
     1097\pgfpathlineto{\pgfqpoint{5.105293in}{3.926161in}}%
     1098\pgfusepath{stroke}%
     1099\end{pgfscope}%
     1100\begin{pgfscope}%
     1101\pgfsetbuttcap%
     1102\pgfsetroundjoin%
     1103\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
     1104\pgfsetfillcolor{currentfill}%
     1105\pgfsetlinewidth{1.003750pt}%
     1106\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     1107\pgfsetstrokecolor{currentstroke}%
     1108\pgfsetdash{}{0pt}%
     1109\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
     1110\pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
     1111\pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
     1112\pgfusepath{stroke,fill}%
     1113}%
     1114\begin{pgfscope}%
     1115\pgfsys@transformshift{5.105293in}{3.787272in}%
     1116\pgfsys@useobject{currentmarker}{}%
     1117\end{pgfscope}%
     1118\end{pgfscope}%
     1119\begin{pgfscope}%
     1120\pgfsetbuttcap%
     1121\pgfsetroundjoin%
     1122\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
     1123\pgfsetfillcolor{currentfill}%
     1124\pgfsetlinewidth{1.003750pt}%
     1125\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     1126\pgfsetstrokecolor{currentstroke}%
     1127\pgfsetdash{}{0pt}%
     1128\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
     1129\pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
     1130\pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
     1131\pgfusepath{stroke,fill}%
     1132}%
     1133\begin{pgfscope}%
     1134\pgfsys@transformshift{5.105293in}{3.926161in}%
     1135\pgfsys@useobject{currentmarker}{}%
     1136\end{pgfscope}%
     1137\end{pgfscope}%
     1138\begin{pgfscope}%
     1139\pgfsetrectcap%
     1140\pgfsetroundjoin%
     1141\pgfsetlinewidth{1.505625pt}%
     1142\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     1143\pgfsetstrokecolor{currentstroke}%
     1144\pgfsetdash{}{0pt}%
     1145\pgfpathmoveto{\pgfqpoint{4.966404in}{3.856716in}}%
     1146\pgfpathlineto{\pgfqpoint{5.244182in}{3.856716in}}%
     1147\pgfusepath{stroke}%
     1148\end{pgfscope}%
     1149\begin{pgfscope}%
     1150\pgfsetbuttcap%
     1151\pgfsetroundjoin%
     1152\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
     1153\pgfsetfillcolor{currentfill}%
     1154\pgfsetlinewidth{1.003750pt}%
     1155\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     1156\pgfsetstrokecolor{currentstroke}%
     1157\pgfsetdash{}{0pt}%
     1158\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     1159\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     1160\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     1161\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     1162\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     1163\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     1164\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     1165\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     1166\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     1167\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
     1168\pgfpathclose%
     1169\pgfusepath{stroke,fill}%
     1170}%
     1171\begin{pgfscope}%
     1172\pgfsys@transformshift{5.105293in}{3.856716in}%
     1173\pgfsys@useobject{currentmarker}{}%
     1174\end{pgfscope}%
     1175\end{pgfscope}%
     1176\begin{pgfscope}%
     1177\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
     1178\pgfsetstrokecolor{textcolor}%
     1179\pgfsetfillcolor{textcolor}%
     1180\pgftext[x=5.355293in,y=3.808105in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Go}%
    11711181\end{pgfscope}%
    11721182\end{pgfpicture}%
  • doc/theses/colby_parsons_MMAth/figures/pyke_Aggregate_Lock_2.pgf

    r3982384 r6e4c44d  
    7777\pgfsetstrokecolor{textcolor}%
    7878\pgfsetfillcolor{textcolor}%
    79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 2\)}%
     79\pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 2\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 4\)}%
     104\pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 4\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 8\)}%
     129\pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 8\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 16\)}%
     154\pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 16\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 24\)}%
     179\pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 24\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 32\)}%
     204\pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 32\)}%
    205205\end{pgfscope}%
    206206\begin{pgfscope}%
     
    208208\pgfsetstrokecolor{textcolor}%
    209209\pgfsetfillcolor{textcolor}%
    210 \pgftext[x=3.280000in,y=0.161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}%
     210\pgftext[x=3.280000in,y=0.251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}%
    211211\end{pgfscope}%
    212212\begin{pgfscope}%
     
    233233\pgfsetstrokecolor{textcolor}%
    234234\pgfsetfillcolor{textcolor}%
    235 \pgftext[x=0.399655in,y=0.928807in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{6}\)}%
     235\pgftext[x=0.501581in,y=0.963915in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{6}\)}%
    236236\end{pgfscope}%
    237237\begin{pgfscope}%
     
    258258\pgfsetstrokecolor{textcolor}%
    259259\pgfsetfillcolor{textcolor}%
    260 \pgftext[x=0.399655in,y=2.320168in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{7}\)}%
     260\pgftext[x=0.501581in,y=2.355276in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{7}\)}%
    261261\end{pgfscope}%
    262262\begin{pgfscope}%
     
    283283\pgfsetstrokecolor{textcolor}%
    284284\pgfsetfillcolor{textcolor}%
    285 \pgftext[x=0.399655in,y=3.711528in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{8}\)}%
     285\pgftext[x=0.501581in,y=3.746636in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{8}\)}%
    286286\end{pgfscope}%
    287287\begin{pgfscope}%
     
    707707\pgfsetstrokecolor{textcolor}%
    708708\pgfsetfillcolor{textcolor}%
    709 \pgftext[x=0.344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (entries)}%
     709\pgftext[x=0.446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (entries)}%
    710710\end{pgfscope}%
    711711\begin{pgfscope}%
     
    14361436\pgfusepath{clip}%
    14371437\pgfsetbuttcap%
    1438 \pgfsetmiterjoin%
     1438\pgfsetroundjoin%
    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}%
    17391443\pgfsetstrokecolor{currentstroke}%
    17401444\pgfsetdash{}{0pt}%
     
    17531457}%
    17541458\begin{pgfscope}%
    1755 \pgfsys@transformshift{1.222222in}{1.825839in}%
    1756 \pgfsys@useobject{currentmarker}{}%
    1757 \end{pgfscope}%
     1459\pgfsys@transformshift{1.025455in}{4.014803in}%
     1460\pgfsys@useobject{currentmarker}{}%
     1461\end{pgfscope}%
     1462\begin{pgfscope}%
     1463\pgfsys@transformshift{1.326061in}{3.745922in}%
     1464\pgfsys@useobject{currentmarker}{}%
     1465\end{pgfscope}%
     1466\begin{pgfscope}%
     1467\pgfsys@transformshift{1.927273in}{3.503889in}%
     1468\pgfsys@useobject{currentmarker}{}%
     1469\end{pgfscope}%
     1470\begin{pgfscope}%
     1471\pgfsys@transformshift{3.129697in}{3.173273in}%
     1472\pgfsys@useobject{currentmarker}{}%
     1473\end{pgfscope}%
     1474\begin{pgfscope}%
     1475\pgfsys@transformshift{4.332121in}{2.828641in}%
     1476\pgfsys@useobject{currentmarker}{}%
     1477\end{pgfscope}%
     1478\begin{pgfscope}%
     1479\pgfsys@transformshift{5.534545in}{2.787501in}%
     1480\pgfsys@useobject{currentmarker}{}%
     1481\end{pgfscope}%
     1482\end{pgfscope}%
     1483\begin{pgfscope}%
     1484\pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%
     1485\pgfusepath{clip}%
     1486\pgfsetrectcap%
     1487\pgfsetroundjoin%
     1488\pgfsetlinewidth{1.505625pt}%
     1489\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     1490\pgfsetstrokecolor{currentstroke}%
     1491\pgfsetdash{}{0pt}%
     1492\pgfpathmoveto{\pgfqpoint{1.025455in}{3.845372in}}%
     1493\pgfpathlineto{\pgfqpoint{1.326061in}{3.591512in}}%
     1494\pgfpathlineto{\pgfqpoint{1.927273in}{3.353860in}}%
     1495\pgfpathlineto{\pgfqpoint{3.129697in}{2.972783in}}%
     1496\pgfpathlineto{\pgfqpoint{4.332121in}{2.504321in}}%
     1497\pgfpathlineto{\pgfqpoint{5.534545in}{2.425566in}}%
     1498\pgfusepath{stroke}%
     1499\end{pgfscope}%
     1500\begin{pgfscope}%
     1501\pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%
     1502\pgfusepath{clip}%
     1503\pgfsetbuttcap%
     1504\pgfsetroundjoin%
     1505\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
     1506\pgfsetfillcolor{currentfill}%
     1507\pgfsetlinewidth{1.003750pt}%
     1508\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     1509\pgfsetstrokecolor{currentstroke}%
     1510\pgfsetdash{}{0pt}%
     1511\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     1512\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     1513\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     1514\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     1515\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     1516\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     1517\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     1518\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     1519\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     1520\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
     1521\pgfpathclose%
     1522\pgfusepath{stroke,fill}%
     1523}%
     1524\begin{pgfscope}%
     1525\pgfsys@transformshift{1.025455in}{3.845372in}%
     1526\pgfsys@useobject{currentmarker}{}%
     1527\end{pgfscope}%
     1528\begin{pgfscope}%
     1529\pgfsys@transformshift{1.326061in}{3.591512in}%
     1530\pgfsys@useobject{currentmarker}{}%
     1531\end{pgfscope}%
     1532\begin{pgfscope}%
     1533\pgfsys@transformshift{1.927273in}{3.353860in}%
     1534\pgfsys@useobject{currentmarker}{}%
     1535\end{pgfscope}%
     1536\begin{pgfscope}%
     1537\pgfsys@transformshift{3.129697in}{2.972783in}%
     1538\pgfsys@useobject{currentmarker}{}%
     1539\end{pgfscope}%
     1540\begin{pgfscope}%
     1541\pgfsys@transformshift{4.332121in}{2.504321in}%
     1542\pgfsys@useobject{currentmarker}{}%
     1543\end{pgfscope}%
     1544\begin{pgfscope}%
     1545\pgfsys@transformshift{5.534545in}{2.425566in}%
     1546\pgfsys@useobject{currentmarker}{}%
     1547\end{pgfscope}%
     1548\end{pgfscope}%
     1549\begin{pgfscope}%
     1550\pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%
     1551\pgfusepath{clip}%
     1552\pgfsetrectcap%
     1553\pgfsetroundjoin%
     1554\pgfsetlinewidth{1.505625pt}%
     1555\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     1556\pgfsetstrokecolor{currentstroke}%
     1557\pgfsetdash{}{0pt}%
     1558\pgfpathmoveto{\pgfqpoint{1.025455in}{3.748153in}}%
     1559\pgfpathlineto{\pgfqpoint{1.326061in}{3.100576in}}%
     1560\pgfpathlineto{\pgfqpoint{1.927273in}{2.500046in}}%
     1561\pgfpathlineto{\pgfqpoint{3.129697in}{1.740526in}}%
     1562\pgfpathlineto{\pgfqpoint{4.332121in}{1.218298in}}%
     1563\pgfpathlineto{\pgfqpoint{5.534545in}{0.734521in}}%
     1564\pgfusepath{stroke}%
     1565\end{pgfscope}%
     1566\begin{pgfscope}%
     1567\pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%
     1568\pgfusepath{clip}%
     1569\pgfsetbuttcap%
     1570\pgfsetroundjoin%
     1571\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     1572\pgfsetfillcolor{currentfill}%
     1573\pgfsetlinewidth{1.003750pt}%
     1574\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     1575\pgfsetstrokecolor{currentstroke}%
     1576\pgfsetdash{}{0pt}%
     1577\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     1578\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     1579\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     1580\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     1581\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     1582\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     1583\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     1584\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     1585\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     1586\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
     1587\pgfpathclose%
     1588\pgfusepath{stroke,fill}%
     1589}%
     1590\begin{pgfscope}%
     1591\pgfsys@transformshift{1.025455in}{3.748153in}%
     1592\pgfsys@useobject{currentmarker}{}%
     1593\end{pgfscope}%
     1594\begin{pgfscope}%
     1595\pgfsys@transformshift{1.326061in}{3.100576in}%
     1596\pgfsys@useobject{currentmarker}{}%
     1597\end{pgfscope}%
     1598\begin{pgfscope}%
     1599\pgfsys@transformshift{1.927273in}{2.500046in}%
     1600\pgfsys@useobject{currentmarker}{}%
     1601\end{pgfscope}%
     1602\begin{pgfscope}%
     1603\pgfsys@transformshift{3.129697in}{1.740526in}%
     1604\pgfsys@useobject{currentmarker}{}%
     1605\end{pgfscope}%
     1606\begin{pgfscope}%
     1607\pgfsys@transformshift{4.332121in}{1.218298in}%
     1608\pgfsys@useobject{currentmarker}{}%
     1609\end{pgfscope}%
     1610\begin{pgfscope}%
     1611\pgfsys@transformshift{5.534545in}{0.734521in}%
     1612\pgfsys@useobject{currentmarker}{}%
     1613\end{pgfscope}%
     1614\end{pgfscope}%
     1615\begin{pgfscope}%
     1616\pgfsetrectcap%
     1617\pgfsetmiterjoin%
     1618\pgfsetlinewidth{0.803000pt}%
     1619\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     1620\pgfsetstrokecolor{currentstroke}%
     1621\pgfsetdash{}{0pt}%
     1622\pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%
     1623\pgfpathlineto{\pgfqpoint{0.800000in}{4.224000in}}%
     1624\pgfusepath{stroke}%
     1625\end{pgfscope}%
     1626\begin{pgfscope}%
     1627\pgfsetrectcap%
     1628\pgfsetmiterjoin%
     1629\pgfsetlinewidth{0.803000pt}%
     1630\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     1631\pgfsetstrokecolor{currentstroke}%
     1632\pgfsetdash{}{0pt}%
     1633\pgfpathmoveto{\pgfqpoint{5.760000in}{0.528000in}}%
     1634\pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%
     1635\pgfusepath{stroke}%
     1636\end{pgfscope}%
     1637\begin{pgfscope}%
     1638\pgfsetrectcap%
     1639\pgfsetmiterjoin%
     1640\pgfsetlinewidth{0.803000pt}%
     1641\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     1642\pgfsetstrokecolor{currentstroke}%
     1643\pgfsetdash{}{0pt}%
     1644\pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%
     1645\pgfpathlineto{\pgfqpoint{5.760000in}{0.528000in}}%
     1646\pgfusepath{stroke}%
     1647\end{pgfscope}%
     1648\begin{pgfscope}%
     1649\pgfsetrectcap%
     1650\pgfsetmiterjoin%
     1651\pgfsetlinewidth{0.803000pt}%
     1652\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     1653\pgfsetstrokecolor{currentstroke}%
     1654\pgfsetdash{}{0pt}%
     1655\pgfpathmoveto{\pgfqpoint{0.800000in}{4.224000in}}%
     1656\pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%
     1657\pgfusepath{stroke}%
    17581658\end{pgfscope}%
    17591659\begin{pgfscope}%
     
    17611661\pgfsetstrokecolor{textcolor}%
    17621662\pgfsetfillcolor{textcolor}%
    1763 \pgftext[x=1.622222in,y=1.748061in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-baseline}%
    1764 \end{pgfscope}%
    1765 \begin{pgfscope}%
    1766 \pgfsetbuttcap%
    1767 \pgfsetroundjoin%
    1768 \pgfsetlinewidth{1.505625pt}%
    1769 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    1770 \pgfsetstrokecolor{currentstroke}%
    1771 \pgfsetdash{}{0pt}%
    1772 \pgfpathmoveto{\pgfqpoint{1.222222in}{1.390268in}}%
    1773 \pgfpathlineto{\pgfqpoint{1.222222in}{1.612490in}}%
    1774 \pgfusepath{stroke}%
    1775 \end{pgfscope}%
    1776 \begin{pgfscope}%
    1777 \pgfsetbuttcap%
    1778 \pgfsetroundjoin%
    1779 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    1780 \pgfsetfillcolor{currentfill}%
    1781 \pgfsetlinewidth{1.003750pt}%
    1782 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     1663\pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{12.000000}{14.400000}\selectfont Aggregate Lock Benchmark: 2 Locks}%
     1664\end{pgfscope}%
     1665\begin{pgfscope}%
     1666\pgfsetbuttcap%
     1667\pgfsetmiterjoin%
     1668\definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}%
     1669\pgfsetfillcolor{currentfill}%
     1670\pgfsetfillopacity{0.800000}%
     1671\pgfsetlinewidth{1.003750pt}%
     1672\definecolor{currentstroke}{rgb}{0.800000,0.800000,0.800000}%
     1673\pgfsetstrokecolor{currentstroke}%
     1674\pgfsetstrokeopacity{0.800000}%
     1675\pgfsetdash{}{0pt}%
     1676\pgfpathmoveto{\pgfqpoint{4.403517in}{3.338198in}}%
     1677\pgfpathlineto{\pgfqpoint{5.662778in}{3.338198in}}%
     1678\pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{3.338198in}}{\pgfqpoint{5.690556in}{3.365976in}}%
     1679\pgfpathlineto{\pgfqpoint{5.690556in}{4.126778in}}%
     1680\pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{4.154556in}}{\pgfqpoint{5.662778in}{4.154556in}}%
     1681\pgfpathlineto{\pgfqpoint{4.403517in}{4.154556in}}%
     1682\pgfpathquadraticcurveto{\pgfqpoint{4.375739in}{4.154556in}}{\pgfqpoint{4.375739in}{4.126778in}}%
     1683\pgfpathlineto{\pgfqpoint{4.375739in}{3.365976in}}%
     1684\pgfpathquadraticcurveto{\pgfqpoint{4.375739in}{3.338198in}}{\pgfqpoint{4.403517in}{3.338198in}}%
     1685\pgfpathclose%
     1686\pgfusepath{stroke,fill}%
     1687\end{pgfscope}%
     1688\begin{pgfscope}%
     1689\pgfsetbuttcap%
     1690\pgfsetroundjoin%
     1691\pgfsetlinewidth{1.505625pt}%
     1692\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
     1693\pgfsetstrokecolor{currentstroke}%
     1694\pgfsetdash{}{0pt}%
     1695\pgfpathmoveto{\pgfqpoint{4.570184in}{3.980944in}}%
     1696\pgfpathlineto{\pgfqpoint{4.570184in}{4.119833in}}%
     1697\pgfusepath{stroke}%
     1698\end{pgfscope}%
     1699\begin{pgfscope}%
     1700\pgfsetbuttcap%
     1701\pgfsetroundjoin%
     1702\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
     1703\pgfsetfillcolor{currentfill}%
     1704\pgfsetlinewidth{1.003750pt}%
     1705\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
    17831706\pgfsetstrokecolor{currentstroke}%
    17841707\pgfsetdash{}{0pt}%
     
    17891712}%
    17901713\begin{pgfscope}%
    1791 \pgfsys@transformshift{1.222222in}{1.390268in}%
    1792 \pgfsys@useobject{currentmarker}{}%
    1793 \end{pgfscope}%
    1794 \end{pgfscope}%
    1795 \begin{pgfscope}%
    1796 \pgfsetbuttcap%
    1797 \pgfsetroundjoin%
    1798 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    1799 \pgfsetfillcolor{currentfill}%
    1800 \pgfsetlinewidth{1.003750pt}%
    1801 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     1714\pgfsys@transformshift{4.570184in}{3.980944in}%
     1715\pgfsys@useobject{currentmarker}{}%
     1716\end{pgfscope}%
     1717\end{pgfscope}%
     1718\begin{pgfscope}%
     1719\pgfsetbuttcap%
     1720\pgfsetroundjoin%
     1721\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
     1722\pgfsetfillcolor{currentfill}%
     1723\pgfsetlinewidth{1.003750pt}%
     1724\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
    18021725\pgfsetstrokecolor{currentstroke}%
    18031726\pgfsetdash{}{0pt}%
     
    18081731}%
    18091732\begin{pgfscope}%
    1810 \pgfsys@transformshift{1.222222in}{1.612490in}%
     1733\pgfsys@transformshift{4.570184in}{4.119833in}%
    18111734\pgfsys@useobject{currentmarker}{}%
    18121735\end{pgfscope}%
     
    18161739\pgfsetroundjoin%
    18171740\pgfsetlinewidth{1.505625pt}%
    1818 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    1819 \pgfsetstrokecolor{currentstroke}%
    1820 \pgfsetdash{}{0pt}%
    1821 \pgfpathmoveto{\pgfqpoint{1.000000in}{1.501379in}}%
    1822 \pgfpathlineto{\pgfqpoint{1.444444in}{1.501379in}}%
    1823 \pgfusepath{stroke}%
    1824 \end{pgfscope}%
    1825 \begin{pgfscope}%
    1826 \pgfsetbuttcap%
    1827 \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}%
     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}%
    18321755\pgfsetstrokecolor{currentstroke}%
    18331756\pgfsetdash{}{0pt}%
    18341757\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
    1835 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}%
    1836 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%
    1837 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%
    1838 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}%
     1758\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     1759\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     1760\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     1761\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     1762\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     1763\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     1764\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     1765\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     1766\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    18391767\pgfpathclose%
    18401768\pgfusepath{stroke,fill}%
    18411769}%
    18421770\begin{pgfscope}%
    1843 \pgfsys@transformshift{1.222222in}{1.501379in}%
     1771\pgfsys@transformshift{4.570184in}{4.050389in}%
    18441772\pgfsys@useobject{currentmarker}{}%
    18451773\end{pgfscope}%
     
    18491777\pgfsetstrokecolor{textcolor}%
    18501778\pgfsetfillcolor{textcolor}%
    1851 \pgftext[x=1.622222in,y=1.423601in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-baseline}%
    1852 \end{pgfscope}%
    1853 \begin{pgfscope}%
    1854 \pgfsetbuttcap%
    1855 \pgfsetroundjoin%
    1856 \pgfsetlinewidth{1.505625pt}%
    1857 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
    1858 \pgfsetstrokecolor{currentstroke}%
    1859 \pgfsetdash{}{0pt}%
    1860 \pgfpathmoveto{\pgfqpoint{1.222222in}{1.065808in}}%
    1861 \pgfpathlineto{\pgfqpoint{1.222222in}{1.288031in}}%
    1862 \pgfusepath{stroke}%
    1863 \end{pgfscope}%
    1864 \begin{pgfscope}%
    1865 \pgfsetbuttcap%
    1866 \pgfsetroundjoin%
    1867 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
    1868 \pgfsetfillcolor{currentfill}%
    1869 \pgfsetlinewidth{1.003750pt}%
    1870 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     1779\pgftext[x=4.820184in,y=4.001778in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-baseline}%
     1780\end{pgfscope}%
     1781\begin{pgfscope}%
     1782\pgfsetbuttcap%
     1783\pgfsetroundjoin%
     1784\pgfsetlinewidth{1.505625pt}%
     1785\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     1786\pgfsetstrokecolor{currentstroke}%
     1787\pgfsetdash{}{0pt}%
     1788\pgfpathmoveto{\pgfqpoint{4.570184in}{3.787272in}}%
     1789\pgfpathlineto{\pgfqpoint{4.570184in}{3.926161in}}%
     1790\pgfusepath{stroke}%
     1791\end{pgfscope}%
     1792\begin{pgfscope}%
     1793\pgfsetbuttcap%
     1794\pgfsetroundjoin%
     1795\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
     1796\pgfsetfillcolor{currentfill}%
     1797\pgfsetlinewidth{1.003750pt}%
     1798\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    18711799\pgfsetstrokecolor{currentstroke}%
    18721800\pgfsetdash{}{0pt}%
     
    18771805}%
    18781806\begin{pgfscope}%
    1879 \pgfsys@transformshift{1.222222in}{1.065808in}%
    1880 \pgfsys@useobject{currentmarker}{}%
    1881 \end{pgfscope}%
    1882 \end{pgfscope}%
    1883 \begin{pgfscope}%
    1884 \pgfsetbuttcap%
    1885 \pgfsetroundjoin%
    1886 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
    1887 \pgfsetfillcolor{currentfill}%
    1888 \pgfsetlinewidth{1.003750pt}%
    1889 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     1807\pgfsys@transformshift{4.570184in}{3.787272in}%
     1808\pgfsys@useobject{currentmarker}{}%
     1809\end{pgfscope}%
     1810\end{pgfscope}%
     1811\begin{pgfscope}%
     1812\pgfsetbuttcap%
     1813\pgfsetroundjoin%
     1814\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
     1815\pgfsetfillcolor{currentfill}%
     1816\pgfsetlinewidth{1.003750pt}%
     1817\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    18901818\pgfsetstrokecolor{currentstroke}%
    18911819\pgfsetdash{}{0pt}%
     
    18961824}%
    18971825\begin{pgfscope}%
    1898 \pgfsys@transformshift{1.222222in}{1.288031in}%
     1826\pgfsys@transformshift{4.570184in}{3.926161in}%
    18991827\pgfsys@useobject{currentmarker}{}%
    19001828\end{pgfscope}%
     
    19041832\pgfsetroundjoin%
    19051833\pgfsetlinewidth{1.505625pt}%
    1906 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
    1907 \pgfsetstrokecolor{currentstroke}%
    1908 \pgfsetdash{}{0pt}%
    1909 \pgfpathmoveto{\pgfqpoint{1.000000in}{1.176919in}}%
    1910 \pgfpathlineto{\pgfqpoint{1.444444in}{1.176919in}}%
    1911 \pgfusepath{stroke}%
    1912 \end{pgfscope}%
    1913 \begin{pgfscope}%
    1914 \pgfsetbuttcap%
    1915 \pgfsetmiterjoin%
    1916 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
    1917 \pgfsetfillcolor{currentfill}%
    1918 \pgfsetlinewidth{1.003750pt}%
    1919 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
    1920 \pgfsetstrokecolor{currentstroke}%
    1921 \pgfsetdash{}{0pt}%
    1922 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.058926in}{-0.058926in}}{\pgfqpoint{0.058926in}{0.058926in}}{%
    1923 \pgfpathmoveto{\pgfqpoint{-0.000000in}{-0.058926in}}%
    1924 \pgfpathlineto{\pgfqpoint{0.058926in}{0.000000in}}%
    1925 \pgfpathlineto{\pgfqpoint{0.000000in}{0.058926in}}%
    1926 \pgfpathlineto{\pgfqpoint{-0.058926in}{0.000000in}}%
     1834\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     1835\pgfsetstrokecolor{currentstroke}%
     1836\pgfsetdash{}{0pt}%
     1837\pgfpathmoveto{\pgfqpoint{4.431295in}{3.856716in}}%
     1838\pgfpathlineto{\pgfqpoint{4.709073in}{3.856716in}}%
     1839\pgfusepath{stroke}%
     1840\end{pgfscope}%
     1841\begin{pgfscope}%
     1842\pgfsetbuttcap%
     1843\pgfsetroundjoin%
     1844\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
     1845\pgfsetfillcolor{currentfill}%
     1846\pgfsetlinewidth{1.003750pt}%
     1847\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     1848\pgfsetstrokecolor{currentstroke}%
     1849\pgfsetdash{}{0pt}%
     1850\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     1851\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     1852\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     1853\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     1854\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     1855\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     1856\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     1857\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     1858\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     1859\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    19271860\pgfpathclose%
    19281861\pgfusepath{stroke,fill}%
    19291862}%
    19301863\begin{pgfscope}%
    1931 \pgfsys@transformshift{1.222222in}{1.176919in}%
     1864\pgfsys@transformshift{4.570184in}{3.856716in}%
    19321865\pgfsys@useobject{currentmarker}{}%
    19331866\end{pgfscope}%
     
    19371870\pgfsetstrokecolor{textcolor}%
    19381871\pgfsetfillcolor{textcolor}%
    1939 \pgftext[x=1.622222in,y=1.099142in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-rand}%
    1940 \end{pgfscope}%
    1941 \begin{pgfscope}%
    1942 \pgfsetbuttcap%
    1943 \pgfsetroundjoin%
    1944 \pgfsetlinewidth{1.505625pt}%
    1945 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
    1946 \pgfsetstrokecolor{currentstroke}%
    1947 \pgfsetdash{}{0pt}%
    1948 \pgfpathmoveto{\pgfqpoint{1.222222in}{0.741349in}}%
    1949 \pgfpathlineto{\pgfqpoint{1.222222in}{0.963571in}}%
    1950 \pgfusepath{stroke}%
    1951 \end{pgfscope}%
    1952 \begin{pgfscope}%
    1953 \pgfsetbuttcap%
    1954 \pgfsetroundjoin%
    1955 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
    1956 \pgfsetfillcolor{currentfill}%
    1957 \pgfsetlinewidth{1.003750pt}%
    1958 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     1872\pgftext[x=4.820184in,y=3.808105in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-baseline}%
     1873\end{pgfscope}%
     1874\begin{pgfscope}%
     1875\pgfsetbuttcap%
     1876\pgfsetroundjoin%
     1877\pgfsetlinewidth{1.505625pt}%
     1878\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     1879\pgfsetstrokecolor{currentstroke}%
     1880\pgfsetdash{}{0pt}%
     1881\pgfpathmoveto{\pgfqpoint{4.570184in}{3.593599in}}%
     1882\pgfpathlineto{\pgfqpoint{4.570184in}{3.732488in}}%
     1883\pgfusepath{stroke}%
     1884\end{pgfscope}%
     1885\begin{pgfscope}%
     1886\pgfsetbuttcap%
     1887\pgfsetroundjoin%
     1888\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
     1889\pgfsetfillcolor{currentfill}%
     1890\pgfsetlinewidth{1.003750pt}%
     1891\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
    19591892\pgfsetstrokecolor{currentstroke}%
    19601893\pgfsetdash{}{0pt}%
     
    19651898}%
    19661899\begin{pgfscope}%
    1967 \pgfsys@transformshift{1.222222in}{0.741349in}%
    1968 \pgfsys@useobject{currentmarker}{}%
    1969 \end{pgfscope}%
    1970 \end{pgfscope}%
    1971 \begin{pgfscope}%
    1972 \pgfsetbuttcap%
    1973 \pgfsetroundjoin%
    1974 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
    1975 \pgfsetfillcolor{currentfill}%
    1976 \pgfsetlinewidth{1.003750pt}%
    1977 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     1900\pgfsys@transformshift{4.570184in}{3.593599in}%
     1901\pgfsys@useobject{currentmarker}{}%
     1902\end{pgfscope}%
     1903\end{pgfscope}%
     1904\begin{pgfscope}%
     1905\pgfsetbuttcap%
     1906\pgfsetroundjoin%
     1907\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
     1908\pgfsetfillcolor{currentfill}%
     1909\pgfsetlinewidth{1.003750pt}%
     1910\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
    19781911\pgfsetstrokecolor{currentstroke}%
    19791912\pgfsetdash{}{0pt}%
     
    19841917}%
    19851918\begin{pgfscope}%
    1986 \pgfsys@transformshift{1.222222in}{0.963571in}%
     1919\pgfsys@transformshift{4.570184in}{3.732488in}%
    19871920\pgfsys@useobject{currentmarker}{}%
    19881921\end{pgfscope}%
     
    19921925\pgfsetroundjoin%
    19931926\pgfsetlinewidth{1.505625pt}%
    1994 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
    1995 \pgfsetstrokecolor{currentstroke}%
    1996 \pgfsetdash{}{0pt}%
    1997 \pgfpathmoveto{\pgfqpoint{1.000000in}{0.852460in}}%
    1998 \pgfpathlineto{\pgfqpoint{1.444444in}{0.852460in}}%
    1999 \pgfusepath{stroke}%
    2000 \end{pgfscope}%
    2001 \begin{pgfscope}%
    2002 \pgfsetbuttcap%
    2003 \pgfsetroundjoin%
    2004 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
    2005 \pgfsetfillcolor{currentfill}%
    2006 \pgfsetlinewidth{1.003750pt}%
    2007 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     1927\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     1928\pgfsetstrokecolor{currentstroke}%
     1929\pgfsetdash{}{0pt}%
     1930\pgfpathmoveto{\pgfqpoint{4.431295in}{3.663043in}}%
     1931\pgfpathlineto{\pgfqpoint{4.709073in}{3.663043in}}%
     1932\pgfusepath{stroke}%
     1933\end{pgfscope}%
     1934\begin{pgfscope}%
     1935\pgfsetbuttcap%
     1936\pgfsetroundjoin%
     1937\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
     1938\pgfsetfillcolor{currentfill}%
     1939\pgfsetlinewidth{1.003750pt}%
     1940\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
    20081941\pgfsetstrokecolor{currentstroke}%
    20091942\pgfsetdash{}{0pt}%
    20101943\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
    2011 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}%
    2012 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%
    2013 \pgfpathmoveto{\pgfqpoint{-0.041667in}{0.041667in}}%
    2014 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%
    2015 \pgfusepath{stroke,fill}%
    2016 }%
    2017 \begin{pgfscope}%
    2018 \pgfsys@transformshift{1.222222in}{0.852460in}%
     1944\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     1945\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     1946\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     1947\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     1948\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     1949\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     1950\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     1951\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     1952\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
     1953\pgfpathclose%
     1954\pgfusepath{stroke,fill}%
     1955}%
     1956\begin{pgfscope}%
     1957\pgfsys@transformshift{4.570184in}{3.663043in}%
    20191958\pgfsys@useobject{currentmarker}{}%
    20201959\end{pgfscope}%
     
    20241963\pgfsetstrokecolor{textcolor}%
    20251964\pgfsetfillcolor{textcolor}%
    2026 \pgftext[x=1.622222in,y=0.774682in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-rand}%
     1965\pgftext[x=4.820184in,y=3.614432in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-rand}%
     1966\end{pgfscope}%
     1967\begin{pgfscope}%
     1968\pgfsetbuttcap%
     1969\pgfsetroundjoin%
     1970\pgfsetlinewidth{1.505625pt}%
     1971\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     1972\pgfsetstrokecolor{currentstroke}%
     1973\pgfsetdash{}{0pt}%
     1974\pgfpathmoveto{\pgfqpoint{4.570184in}{3.399926in}}%
     1975\pgfpathlineto{\pgfqpoint{4.570184in}{3.538815in}}%
     1976\pgfusepath{stroke}%
     1977\end{pgfscope}%
     1978\begin{pgfscope}%
     1979\pgfsetbuttcap%
     1980\pgfsetroundjoin%
     1981\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     1982\pgfsetfillcolor{currentfill}%
     1983\pgfsetlinewidth{1.003750pt}%
     1984\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     1985\pgfsetstrokecolor{currentstroke}%
     1986\pgfsetdash{}{0pt}%
     1987\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
     1988\pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
     1989\pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
     1990\pgfusepath{stroke,fill}%
     1991}%
     1992\begin{pgfscope}%
     1993\pgfsys@transformshift{4.570184in}{3.399926in}%
     1994\pgfsys@useobject{currentmarker}{}%
     1995\end{pgfscope}%
     1996\end{pgfscope}%
     1997\begin{pgfscope}%
     1998\pgfsetbuttcap%
     1999\pgfsetroundjoin%
     2000\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     2001\pgfsetfillcolor{currentfill}%
     2002\pgfsetlinewidth{1.003750pt}%
     2003\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2004\pgfsetstrokecolor{currentstroke}%
     2005\pgfsetdash{}{0pt}%
     2006\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
     2007\pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
     2008\pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
     2009\pgfusepath{stroke,fill}%
     2010}%
     2011\begin{pgfscope}%
     2012\pgfsys@transformshift{4.570184in}{3.538815in}%
     2013\pgfsys@useobject{currentmarker}{}%
     2014\end{pgfscope}%
     2015\end{pgfscope}%
     2016\begin{pgfscope}%
     2017\pgfsetrectcap%
     2018\pgfsetroundjoin%
     2019\pgfsetlinewidth{1.505625pt}%
     2020\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2021\pgfsetstrokecolor{currentstroke}%
     2022\pgfsetdash{}{0pt}%
     2023\pgfpathmoveto{\pgfqpoint{4.431295in}{3.469371in}}%
     2024\pgfpathlineto{\pgfqpoint{4.709073in}{3.469371in}}%
     2025\pgfusepath{stroke}%
     2026\end{pgfscope}%
     2027\begin{pgfscope}%
     2028\pgfsetbuttcap%
     2029\pgfsetroundjoin%
     2030\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     2031\pgfsetfillcolor{currentfill}%
     2032\pgfsetlinewidth{1.003750pt}%
     2033\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2034\pgfsetstrokecolor{currentstroke}%
     2035\pgfsetdash{}{0pt}%
     2036\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2037\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2038\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2039\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2040\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2041\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2042\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2043\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2044\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2045\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
     2046\pgfpathclose%
     2047\pgfusepath{stroke,fill}%
     2048}%
     2049\begin{pgfscope}%
     2050\pgfsys@transformshift{4.570184in}{3.469371in}%
     2051\pgfsys@useobject{currentmarker}{}%
     2052\end{pgfscope}%
     2053\end{pgfscope}%
     2054\begin{pgfscope}%
     2055\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
     2056\pgfsetstrokecolor{textcolor}%
     2057\pgfsetfillcolor{textcolor}%
     2058\pgftext[x=4.820184in,y=3.420759in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-rand}%
    20272059\end{pgfscope}%
    20282060\end{pgfpicture}%
  • doc/theses/colby_parsons_MMAth/figures/pyke_Aggregate_Lock_4.pgf

    r3982384 r6e4c44d  
    7777\pgfsetstrokecolor{textcolor}%
    7878\pgfsetfillcolor{textcolor}%
    79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 2\)}%
     79\pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 2\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 4\)}%
     104\pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 4\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 8\)}%
     129\pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 8\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 16\)}%
     154\pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 16\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 24\)}%
     179\pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 24\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 32\)}%
     204\pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 32\)}%
    205205\end{pgfscope}%
    206206\begin{pgfscope}%
     
    208208\pgfsetstrokecolor{textcolor}%
    209209\pgfsetfillcolor{textcolor}%
    210 \pgftext[x=3.280000in,y=0.161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}%
     210\pgftext[x=3.280000in,y=0.251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}%
    211211\end{pgfscope}%
    212212\begin{pgfscope}%
     
    233233\pgfsetstrokecolor{textcolor}%
    234234\pgfsetfillcolor{textcolor}%
    235 \pgftext[x=0.399655in,y=0.592592in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{3}\)}%
     235\pgftext[x=0.501581in,y=0.627700in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{3}\)}%
    236236\end{pgfscope}%
    237237\begin{pgfscope}%
     
    258258\pgfsetstrokecolor{textcolor}%
    259259\pgfsetfillcolor{textcolor}%
    260 \pgftext[x=0.399655in,y=1.275604in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{4}\)}%
     260\pgftext[x=0.501581in,y=1.310712in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{4}\)}%
    261261\end{pgfscope}%
    262262\begin{pgfscope}%
     
    283283\pgfsetstrokecolor{textcolor}%
    284284\pgfsetfillcolor{textcolor}%
    285 \pgftext[x=0.399655in,y=1.958615in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{5}\)}%
     285\pgftext[x=0.501581in,y=1.993723in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{5}\)}%
    286286\end{pgfscope}%
    287287\begin{pgfscope}%
     
    308308\pgfsetstrokecolor{textcolor}%
    309309\pgfsetfillcolor{textcolor}%
    310 \pgftext[x=0.399655in,y=2.641627in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{6}\)}%
     310\pgftext[x=0.501581in,y=2.676735in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{6}\)}%
    311311\end{pgfscope}%
    312312\begin{pgfscope}%
     
    333333\pgfsetstrokecolor{textcolor}%
    334334\pgfsetfillcolor{textcolor}%
    335 \pgftext[x=0.399655in,y=3.324638in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{7}\)}%
     335\pgftext[x=0.501581in,y=3.359746in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{7}\)}%
    336336\end{pgfscope}%
    337337\begin{pgfscope}%
     
    358358\pgfsetstrokecolor{textcolor}%
    359359\pgfsetfillcolor{textcolor}%
    360 \pgftext[x=0.399655in,y=4.007649in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{8}\)}%
     360\pgftext[x=0.501581in,y=4.042757in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{8}\)}%
    361361\end{pgfscope}%
    362362\begin{pgfscope}%
     
    11811181\pgfsetstrokecolor{textcolor}%
    11821182\pgfsetfillcolor{textcolor}%
    1183 \pgftext[x=0.344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (entries)}%
     1183\pgftext[x=0.446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (entries)}%
    11841184\end{pgfscope}%
    11851185\begin{pgfscope}%
     
    18441844\pgfusepath{clip}%
    18451845\pgfsetbuttcap%
    1846 \pgfsetmiterjoin%
     1846\pgfsetroundjoin%
    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.039627in}{-0.033709in}}{\pgfqpoint{0.039627in}{0.041667in}}{%
    1854 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}%
    1855 \pgfpathlineto{\pgfqpoint{-0.039627in}{0.012876in}}%
    1856 \pgfpathlineto{\pgfqpoint{-0.024491in}{-0.033709in}}%
    1857 \pgfpathlineto{\pgfqpoint{0.024491in}{-0.033709in}}%
    1858 \pgfpathlineto{\pgfqpoint{0.039627in}{0.012876in}}%
     1853\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     1854\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     1855\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     1856\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     1857\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     1858\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     1859\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     1860\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     1861\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     1862\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    18591863\pgfpathclose%
    18601864\pgfusepath{stroke,fill}%
     
    19061910\pgfusepath{clip}%
    19071911\pgfsetbuttcap%
    1908 \pgfsetmiterjoin%
     1912\pgfsetroundjoin%
    19091913\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    19101914\pgfsetfillcolor{currentfill}%
     
    19141918\pgfsetdash{}{0pt}%
    19151919\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
    1916 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}%
    1917 \pgfpathlineto{\pgfqpoint{-0.041667in}{-0.041667in}}%
    1918 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%
     1920\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     1921\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     1922\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     1923\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     1924\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     1925\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     1926\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     1927\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     1928\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    19191929\pgfpathclose%
    19201930\pgfusepath{stroke,fill}%
     
    19661976\pgfusepath{clip}%
    19671977\pgfsetbuttcap%
    1968 \pgfsetmiterjoin%
     1978\pgfsetroundjoin%
    19691979\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
    19701980\pgfsetfillcolor{currentfill}%
     
    19731983\pgfsetstrokecolor{currentstroke}%
    19741984\pgfsetdash{}{0pt}%
    1975 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.036084in}{-0.041667in}}{\pgfqpoint{0.036084in}{0.041667in}}{%
    1976 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}%
    1977 \pgfpathlineto{\pgfqpoint{-0.036084in}{0.020833in}}%
    1978 \pgfpathlineto{\pgfqpoint{-0.036084in}{-0.020833in}}%
    1979 \pgfpathlineto{\pgfqpoint{-0.000000in}{-0.041667in}}%
    1980 \pgfpathlineto{\pgfqpoint{0.036084in}{-0.020833in}}%
    1981 \pgfpathlineto{\pgfqpoint{0.036084in}{0.020833in}}%
     1985\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     1986\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     1987\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     1988\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     1989\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     1990\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     1991\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     1992\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     1993\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     1994\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    19821995\pgfpathclose%
    19831996\pgfusepath{stroke,fill}%
     
    20292042\pgfusepath{clip}%
    20302043\pgfsetbuttcap%
    2031 \pgfsetbeveljoin%
     2044\pgfsetroundjoin%
    20322045\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
    20332046\pgfsetfillcolor{currentfill}%
     
    20362049\pgfsetstrokecolor{currentstroke}%
    20372050\pgfsetdash{}{0pt}%
    2038 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.039627in}{-0.033709in}}{\pgfqpoint{0.039627in}{0.041667in}}{%
    2039 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}%
    2040 \pgfpathlineto{\pgfqpoint{-0.009355in}{0.012876in}}%
    2041 \pgfpathlineto{\pgfqpoint{-0.039627in}{0.012876in}}%
    2042 \pgfpathlineto{\pgfqpoint{-0.015136in}{-0.004918in}}%
    2043 \pgfpathlineto{\pgfqpoint{-0.024491in}{-0.033709in}}%
    2044 \pgfpathlineto{\pgfqpoint{-0.000000in}{-0.015915in}}%
    2045 \pgfpathlineto{\pgfqpoint{0.024491in}{-0.033709in}}%
    2046 \pgfpathlineto{\pgfqpoint{0.015136in}{-0.004918in}}%
    2047 \pgfpathlineto{\pgfqpoint{0.039627in}{0.012876in}}%
    2048 \pgfpathlineto{\pgfqpoint{0.009355in}{0.012876in}}%
     2051\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2052\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2053\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2054\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2055\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2056\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2057\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2058\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2059\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2060\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    20492061\pgfpathclose%
    20502062\pgfusepath{stroke,fill}%
     
    21232135\pgfsetstrokecolor{textcolor}%
    21242136\pgfsetfillcolor{textcolor}%
    2125 \pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{19.200000}{23.040000}\selectfont Aggregate Lock Benchmark: 4 Locks}%
     2137\pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{12.000000}{14.400000}\selectfont Aggregate Lock Benchmark: 4 Locks}%
    21262138\end{pgfscope}%
    21272139\begin{pgfscope}%
     
    21362148\pgfsetstrokeopacity{0.800000}%
    21372149\pgfsetdash{}{0pt}%
    2138 \pgfpathmoveto{\pgfqpoint{3.602702in}{1.693747in}}%
    2139 \pgfpathlineto{\pgfqpoint{5.604444in}{1.693747in}}%
    2140 \pgfpathquadraticcurveto{\pgfqpoint{5.648889in}{1.693747in}}{\pgfqpoint{5.648889in}{1.738192in}}%
    2141 \pgfpathlineto{\pgfqpoint{5.648889in}{3.013808in}}%
    2142 \pgfpathquadraticcurveto{\pgfqpoint{5.648889in}{3.058253in}}{\pgfqpoint{5.604444in}{3.058253in}}%
    2143 \pgfpathlineto{\pgfqpoint{3.602702in}{3.058253in}}%
    2144 \pgfpathquadraticcurveto{\pgfqpoint{3.558257in}{3.058253in}}{\pgfqpoint{3.558257in}{3.013808in}}%
    2145 \pgfpathlineto{\pgfqpoint{3.558257in}{1.738192in}}%
    2146 \pgfpathquadraticcurveto{\pgfqpoint{3.558257in}{1.693747in}}{\pgfqpoint{3.602702in}{1.693747in}}%
     2150\pgfpathmoveto{\pgfqpoint{0.897222in}{0.597444in}}%
     2151\pgfpathlineto{\pgfqpoint{2.156483in}{0.597444in}}%
     2152\pgfpathquadraticcurveto{\pgfqpoint{2.184261in}{0.597444in}}{\pgfqpoint{2.184261in}{0.625222in}}%
     2153\pgfpathlineto{\pgfqpoint{2.184261in}{1.386024in}}%
     2154\pgfpathquadraticcurveto{\pgfqpoint{2.184261in}{1.413802in}}{\pgfqpoint{2.156483in}{1.413802in}}%
     2155\pgfpathlineto{\pgfqpoint{0.897222in}{1.413802in}}%
     2156\pgfpathquadraticcurveto{\pgfqpoint{0.869444in}{1.413802in}}{\pgfqpoint{0.869444in}{1.386024in}}%
     2157\pgfpathlineto{\pgfqpoint{0.869444in}{0.625222in}}%
     2158\pgfpathquadraticcurveto{\pgfqpoint{0.869444in}{0.597444in}}{\pgfqpoint{0.897222in}{0.597444in}}%
    21472159\pgfpathclose%
    21482160\pgfusepath{stroke,fill}%
     
    21552167\pgfsetstrokecolor{currentstroke}%
    21562168\pgfsetdash{}{0pt}%
    2157 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.769364in}}%
    2158 \pgfpathlineto{\pgfqpoint{3.869368in}{2.991586in}}%
     2169\pgfpathmoveto{\pgfqpoint{1.063889in}{1.240191in}}%
     2170\pgfpathlineto{\pgfqpoint{1.063889in}{1.379080in}}%
    21592171\pgfusepath{stroke}%
    21602172\end{pgfscope}%
     
    21742186}%
    21752187\begin{pgfscope}%
    2176 \pgfsys@transformshift{3.869368in}{2.769364in}%
     2188\pgfsys@transformshift{1.063889in}{1.240191in}%
    21772189\pgfsys@useobject{currentmarker}{}%
    21782190\end{pgfscope}%
     
    21932205}%
    21942206\begin{pgfscope}%
    2195 \pgfsys@transformshift{3.869368in}{2.991586in}%
     2207\pgfsys@transformshift{1.063889in}{1.379080in}%
    21962208\pgfsys@useobject{currentmarker}{}%
    21972209\end{pgfscope}%
     
    22042216\pgfsetstrokecolor{currentstroke}%
    22052217\pgfsetdash{}{0pt}%
    2206 \pgfpathmoveto{\pgfqpoint{3.647146in}{2.880475in}}%
    2207 \pgfpathlineto{\pgfqpoint{4.091591in}{2.880475in}}%
    2208 \pgfusepath{stroke}%
    2209 \end{pgfscope}%
    2210 \begin{pgfscope}%
    2211 \pgfsetbuttcap%
    2212 \pgfsetmiterjoin%
     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%
    22132225\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
    22142226\pgfsetfillcolor{currentfill}%
     
    22172229\pgfsetstrokecolor{currentstroke}%
    22182230\pgfsetdash{}{0pt}%
    2219 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.039627in}{-0.033709in}}{\pgfqpoint{0.039627in}{0.041667in}}{%
    2220 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}%
    2221 \pgfpathlineto{\pgfqpoint{-0.039627in}{0.012876in}}%
    2222 \pgfpathlineto{\pgfqpoint{-0.024491in}{-0.033709in}}%
    2223 \pgfpathlineto{\pgfqpoint{0.024491in}{-0.033709in}}%
    2224 \pgfpathlineto{\pgfqpoint{0.039627in}{0.012876in}}%
     2231\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2232\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2233\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2234\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2235\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2236\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2237\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2238\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2239\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2240\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    22252241\pgfpathclose%
    22262242\pgfusepath{stroke,fill}%
    22272243}%
    22282244\begin{pgfscope}%
    2229 \pgfsys@transformshift{3.869368in}{2.880475in}%
     2245\pgfsys@transformshift{1.063889in}{1.309636in}%
    22302246\pgfsys@useobject{currentmarker}{}%
    22312247\end{pgfscope}%
     
    22352251\pgfsetstrokecolor{textcolor}%
    22362252\pgfsetfillcolor{textcolor}%
    2237 \pgftext[x=4.269368in,y=2.802697in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-baseline}%
     2253\pgftext[x=1.313889in,y=1.261024in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-baseline}%
    22382254\end{pgfscope}%
    22392255\begin{pgfscope}%
     
    22442260\pgfsetstrokecolor{currentstroke}%
    22452261\pgfsetdash{}{0pt}%
    2246 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.444904in}}%
    2247 \pgfpathlineto{\pgfqpoint{3.869368in}{2.667126in}}%
     2262\pgfpathmoveto{\pgfqpoint{1.063889in}{1.046518in}}%
     2263\pgfpathlineto{\pgfqpoint{1.063889in}{1.185407in}}%
    22482264\pgfusepath{stroke}%
    22492265\end{pgfscope}%
     
    22632279}%
    22642280\begin{pgfscope}%
    2265 \pgfsys@transformshift{3.869368in}{2.444904in}%
     2281\pgfsys@transformshift{1.063889in}{1.046518in}%
    22662282\pgfsys@useobject{currentmarker}{}%
    22672283\end{pgfscope}%
     
    22822298}%
    22832299\begin{pgfscope}%
    2284 \pgfsys@transformshift{3.869368in}{2.667126in}%
     2300\pgfsys@transformshift{1.063889in}{1.185407in}%
    22852301\pgfsys@useobject{currentmarker}{}%
    22862302\end{pgfscope}%
     
    22932309\pgfsetstrokecolor{currentstroke}%
    22942310\pgfsetdash{}{0pt}%
    2295 \pgfpathmoveto{\pgfqpoint{3.647146in}{2.556015in}}%
    2296 \pgfpathlineto{\pgfqpoint{4.091591in}{2.556015in}}%
    2297 \pgfusepath{stroke}%
    2298 \end{pgfscope}%
    2299 \begin{pgfscope}%
    2300 \pgfsetbuttcap%
    2301 \pgfsetmiterjoin%
     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%
    23022318\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    23032319\pgfsetfillcolor{currentfill}%
     
    23072323\pgfsetdash{}{0pt}%
    23082324\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
    2309 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}%
    2310 \pgfpathlineto{\pgfqpoint{-0.041667in}{-0.041667in}}%
    2311 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%
     2325\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2326\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2327\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2328\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2329\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2330\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2331\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2332\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2333\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    23122334\pgfpathclose%
    23132335\pgfusepath{stroke,fill}%
    23142336}%
    23152337\begin{pgfscope}%
    2316 \pgfsys@transformshift{3.869368in}{2.556015in}%
     2338\pgfsys@transformshift{1.063889in}{1.115963in}%
    23172339\pgfsys@useobject{currentmarker}{}%
    23182340\end{pgfscope}%
     
    23222344\pgfsetstrokecolor{textcolor}%
    23232345\pgfsetfillcolor{textcolor}%
    2324 \pgftext[x=4.269368in,y=2.478238in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-baseline}%
     2346\pgftext[x=1.313889in,y=1.067352in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-baseline}%
    23252347\end{pgfscope}%
    23262348\begin{pgfscope}%
     
    23312353\pgfsetstrokecolor{currentstroke}%
    23322354\pgfsetdash{}{0pt}%
    2333 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.120444in}}%
    2334 \pgfpathlineto{\pgfqpoint{3.869368in}{2.342667in}}%
     2355\pgfpathmoveto{\pgfqpoint{1.063889in}{0.852846in}}%
     2356\pgfpathlineto{\pgfqpoint{1.063889in}{0.991734in}}%
    23352357\pgfusepath{stroke}%
    23362358\end{pgfscope}%
     
    23502372}%
    23512373\begin{pgfscope}%
    2352 \pgfsys@transformshift{3.869368in}{2.120444in}%
     2374\pgfsys@transformshift{1.063889in}{0.852846in}%
    23532375\pgfsys@useobject{currentmarker}{}%
    23542376\end{pgfscope}%
     
    23692391}%
    23702392\begin{pgfscope}%
    2371 \pgfsys@transformshift{3.869368in}{2.342667in}%
     2393\pgfsys@transformshift{1.063889in}{0.991734in}%
    23722394\pgfsys@useobject{currentmarker}{}%
    23732395\end{pgfscope}%
     
    23802402\pgfsetstrokecolor{currentstroke}%
    23812403\pgfsetdash{}{0pt}%
    2382 \pgfpathmoveto{\pgfqpoint{3.647146in}{2.231556in}}%
    2383 \pgfpathlineto{\pgfqpoint{4.091591in}{2.231556in}}%
    2384 \pgfusepath{stroke}%
    2385 \end{pgfscope}%
    2386 \begin{pgfscope}%
    2387 \pgfsetbuttcap%
    2388 \pgfsetmiterjoin%
     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%
    23892411\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
    23902412\pgfsetfillcolor{currentfill}%
     
    23932415\pgfsetstrokecolor{currentstroke}%
    23942416\pgfsetdash{}{0pt}%
    2395 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.036084in}{-0.041667in}}{\pgfqpoint{0.036084in}{0.041667in}}{%
    2396 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}%
    2397 \pgfpathlineto{\pgfqpoint{-0.036084in}{0.020833in}}%
    2398 \pgfpathlineto{\pgfqpoint{-0.036084in}{-0.020833in}}%
    2399 \pgfpathlineto{\pgfqpoint{-0.000000in}{-0.041667in}}%
    2400 \pgfpathlineto{\pgfqpoint{0.036084in}{-0.020833in}}%
    2401 \pgfpathlineto{\pgfqpoint{0.036084in}{0.020833in}}%
     2417\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2418\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2419\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2420\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2421\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2422\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2423\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2424\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2425\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2426\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    24022427\pgfpathclose%
    24032428\pgfusepath{stroke,fill}%
    24042429}%
    24052430\begin{pgfscope}%
    2406 \pgfsys@transformshift{3.869368in}{2.231556in}%
     2431\pgfsys@transformshift{1.063889in}{0.922290in}%
    24072432\pgfsys@useobject{currentmarker}{}%
    24082433\end{pgfscope}%
     
    24122437\pgfsetstrokecolor{textcolor}%
    24132438\pgfsetfillcolor{textcolor}%
    2414 \pgftext[x=4.269368in,y=2.153778in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-rand}%
     2439\pgftext[x=1.313889in,y=0.873679in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-rand}%
    24152440\end{pgfscope}%
    24162441\begin{pgfscope}%
     
    24212446\pgfsetstrokecolor{currentstroke}%
    24222447\pgfsetdash{}{0pt}%
    2423 \pgfpathmoveto{\pgfqpoint{3.869368in}{1.795985in}}%
    2424 \pgfpathlineto{\pgfqpoint{3.869368in}{2.018207in}}%
     2448\pgfpathmoveto{\pgfqpoint{1.063889in}{0.659173in}}%
     2449\pgfpathlineto{\pgfqpoint{1.063889in}{0.798062in}}%
    24252450\pgfusepath{stroke}%
    24262451\end{pgfscope}%
     
    24402465}%
    24412466\begin{pgfscope}%
    2442 \pgfsys@transformshift{3.869368in}{1.795985in}%
     2467\pgfsys@transformshift{1.063889in}{0.659173in}%
    24432468\pgfsys@useobject{currentmarker}{}%
    24442469\end{pgfscope}%
     
    24592484}%
    24602485\begin{pgfscope}%
    2461 \pgfsys@transformshift{3.869368in}{2.018207in}%
     2486\pgfsys@transformshift{1.063889in}{0.798062in}%
    24622487\pgfsys@useobject{currentmarker}{}%
    24632488\end{pgfscope}%
     
    24702495\pgfsetstrokecolor{currentstroke}%
    24712496\pgfsetdash{}{0pt}%
    2472 \pgfpathmoveto{\pgfqpoint{3.647146in}{1.907096in}}%
    2473 \pgfpathlineto{\pgfqpoint{4.091591in}{1.907096in}}%
    2474 \pgfusepath{stroke}%
    2475 \end{pgfscope}%
    2476 \begin{pgfscope}%
    2477 \pgfsetbuttcap%
    2478 \pgfsetbeveljoin%
     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%
    24792504\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
    24802505\pgfsetfillcolor{currentfill}%
     
    24832508\pgfsetstrokecolor{currentstroke}%
    24842509\pgfsetdash{}{0pt}%
    2485 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.039627in}{-0.033709in}}{\pgfqpoint{0.039627in}{0.041667in}}{%
    2486 \pgfpathmoveto{\pgfqpoint{0.000000in}{0.041667in}}%
    2487 \pgfpathlineto{\pgfqpoint{-0.009355in}{0.012876in}}%
    2488 \pgfpathlineto{\pgfqpoint{-0.039627in}{0.012876in}}%
    2489 \pgfpathlineto{\pgfqpoint{-0.015136in}{-0.004918in}}%
    2490 \pgfpathlineto{\pgfqpoint{-0.024491in}{-0.033709in}}%
    2491 \pgfpathlineto{\pgfqpoint{-0.000000in}{-0.015915in}}%
    2492 \pgfpathlineto{\pgfqpoint{0.024491in}{-0.033709in}}%
    2493 \pgfpathlineto{\pgfqpoint{0.015136in}{-0.004918in}}%
    2494 \pgfpathlineto{\pgfqpoint{0.039627in}{0.012876in}}%
    2495 \pgfpathlineto{\pgfqpoint{0.009355in}{0.012876in}}%
     2510\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2511\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2512\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2513\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2514\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2515\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2516\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2517\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2518\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2519\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    24962520\pgfpathclose%
    24972521\pgfusepath{stroke,fill}%
    24982522}%
    24992523\begin{pgfscope}%
    2500 \pgfsys@transformshift{3.869368in}{1.907096in}%
     2524\pgfsys@transformshift{1.063889in}{0.728617in}%
    25012525\pgfsys@useobject{currentmarker}{}%
    25022526\end{pgfscope}%
     
    25062530\pgfsetstrokecolor{textcolor}%
    25072531\pgfsetfillcolor{textcolor}%
    2508 \pgftext[x=4.269368in,y=1.829318in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-rand}%
     2532\pgftext[x=1.313889in,y=0.680006in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-rand}%
    25092533\end{pgfscope}%
    25102534\end{pgfpicture}%
  • doc/theses/colby_parsons_MMAth/figures/pyke_Aggregate_Lock_8.pgf

    r3982384 r6e4c44d  
    7777\pgfsetstrokecolor{textcolor}%
    7878\pgfsetfillcolor{textcolor}%
    79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 2\)}%
     79\pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 2\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 4\)}%
     104\pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 4\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 8\)}%
     129\pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 8\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 16\)}%
     154\pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 16\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 24\)}%
     179\pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 24\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 32\)}%
     204\pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 32\)}%
    205205\end{pgfscope}%
    206206\begin{pgfscope}%
     
    208208\pgfsetstrokecolor{textcolor}%
    209209\pgfsetfillcolor{textcolor}%
    210 \pgftext[x=3.280000in,y=0.161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}%
     210\pgftext[x=3.280000in,y=0.251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}%
    211211\end{pgfscope}%
    212212\begin{pgfscope}%
     
    233233\pgfsetstrokecolor{textcolor}%
    234234\pgfsetfillcolor{textcolor}%
    235 \pgftext[x=0.399655in,y=0.575766in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{2}\)}%
     235\pgftext[x=0.501581in,y=0.610874in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{2}\)}%
    236236\end{pgfscope}%
    237237\begin{pgfscope}%
     
    258258\pgfsetstrokecolor{textcolor}%
    259259\pgfsetfillcolor{textcolor}%
    260 \pgftext[x=0.399655in,y=1.181854in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{3}\)}%
     260\pgftext[x=0.501581in,y=1.216962in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{3}\)}%
    261261\end{pgfscope}%
    262262\begin{pgfscope}%
     
    283283\pgfsetstrokecolor{textcolor}%
    284284\pgfsetfillcolor{textcolor}%
    285 \pgftext[x=0.399655in,y=1.787942in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{4}\)}%
     285\pgftext[x=0.501581in,y=1.823050in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{4}\)}%
    286286\end{pgfscope}%
    287287\begin{pgfscope}%
     
    308308\pgfsetstrokecolor{textcolor}%
    309309\pgfsetfillcolor{textcolor}%
    310 \pgftext[x=0.399655in,y=2.394030in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{5}\)}%
     310\pgftext[x=0.501581in,y=2.429138in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{5}\)}%
    311311\end{pgfscope}%
    312312\begin{pgfscope}%
     
    333333\pgfsetstrokecolor{textcolor}%
    334334\pgfsetfillcolor{textcolor}%
    335 \pgftext[x=0.399655in,y=3.000119in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{6}\)}%
     335\pgftext[x=0.501581in,y=3.035227in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{6}\)}%
    336336\end{pgfscope}%
    337337\begin{pgfscope}%
     
    358358\pgfsetstrokecolor{textcolor}%
    359359\pgfsetfillcolor{textcolor}%
    360 \pgftext[x=0.399655in,y=3.606207in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{7}\)}%
     360\pgftext[x=0.501581in,y=3.641315in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{7}\)}%
    361361\end{pgfscope}%
    362362\begin{pgfscope}%
     
    12951295\pgfsetstrokecolor{textcolor}%
    12961296\pgfsetfillcolor{textcolor}%
    1297 \pgftext[x=0.344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (entries)}%
     1297\pgftext[x=0.446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (entries)}%
    12981298\end{pgfscope}%
    12991299\begin{pgfscope}%
     
    19581958\pgfusepath{clip}%
    19591959\pgfsetbuttcap%
    1960 \pgfsetmiterjoin%
     1960\pgfsetroundjoin%
    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}%
    20251965\pgfsetstrokecolor{currentstroke}%
    20261966\pgfsetdash{}{0pt}%
     
    20391979}%
    20401980\begin{pgfscope}%
    2041 \pgfsys@transformshift{1.025455in}{4.038293in}%
    2042 \pgfsys@useobject{currentmarker}{}%
    2043 \end{pgfscope}%
    2044 \begin{pgfscope}%
    2045 \pgfsys@transformshift{1.326061in}{3.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}%
     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}%
    20622002\pgfsys@useobject{currentmarker}{}%
    20632003\end{pgfscope}%
     
    20692009\pgfsetroundjoin%
    20702010\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}%
    23512011\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    23522012\pgfsetstrokecolor{currentstroke}%
    23532013\pgfsetdash{}{0pt}%
    2354 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.444904in}}%
    2355 \pgfpathlineto{\pgfqpoint{3.869368in}{2.667126in}}%
    2356 \pgfusepath{stroke}%
    2357 \end{pgfscope}%
    2358 \begin{pgfscope}%
    2359 \pgfsetbuttcap%
    2360 \pgfsetroundjoin%
    2361 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    2362 \pgfsetfillcolor{currentfill}%
    2363 \pgfsetlinewidth{1.003750pt}%
    2364 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    2365 \pgfsetstrokecolor{currentstroke}%
    2366 \pgfsetdash{}{0pt}%
    2367 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
    2368 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
    2369 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
    2370 \pgfusepath{stroke,fill}%
    2371 }%
    2372 \begin{pgfscope}%
    2373 \pgfsys@transformshift{3.869368in}{2.444904in}%
    2374 \pgfsys@useobject{currentmarker}{}%
    2375 \end{pgfscope}%
    2376 \end{pgfscope}%
    2377 \begin{pgfscope}%
    2378 \pgfsetbuttcap%
    2379 \pgfsetroundjoin%
    2380 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    2381 \pgfsetfillcolor{currentfill}%
    2382 \pgfsetlinewidth{1.003750pt}%
    2383 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    2384 \pgfsetstrokecolor{currentstroke}%
    2385 \pgfsetdash{}{0pt}%
    2386 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
    2387 \pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
    2388 \pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
    2389 \pgfusepath{stroke,fill}%
    2390 }%
    2391 \begin{pgfscope}%
    2392 \pgfsys@transformshift{3.869368in}{2.667126in}%
    2393 \pgfsys@useobject{currentmarker}{}%
    2394 \end{pgfscope}%
    2395 \end{pgfscope}%
    2396 \begin{pgfscope}%
    2397 \pgfsetrectcap%
    2398 \pgfsetroundjoin%
    2399 \pgfsetlinewidth{1.505625pt}%
    2400 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    2401 \pgfsetstrokecolor{currentstroke}%
    2402 \pgfsetdash{}{0pt}%
    2403 \pgfpathmoveto{\pgfqpoint{3.647146in}{2.556015in}}%
    2404 \pgfpathlineto{\pgfqpoint{4.091591in}{2.556015in}}%
    2405 \pgfusepath{stroke}%
    2406 \end{pgfscope}%
    2407 \begin{pgfscope}%
     2014\pgfpathmoveto{\pgfqpoint{1.025455in}{4.038293in}}%
     2015\pgfpathlineto{\pgfqpoint{1.326061in}{3.879198in}}%
     2016\pgfpathlineto{\pgfqpoint{1.927273in}{3.775409in}}%
     2017\pgfpathlineto{\pgfqpoint{3.129697in}{3.635703in}}%
     2018\pgfpathlineto{\pgfqpoint{4.332121in}{3.543668in}}%
     2019\pgfpathlineto{\pgfqpoint{5.534545in}{3.552229in}}%
     2020\pgfusepath{stroke}%
     2021\end{pgfscope}%
     2022\begin{pgfscope}%
     2023\pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%
     2024\pgfusepath{clip}%
    24082025\pgfsetbuttcap%
    24092026\pgfsetroundjoin%
     
    24282045}%
    24292046\begin{pgfscope}%
    2430 \pgfsys@transformshift{3.869368in}{2.556015in}%
    2431 \pgfsys@useobject{currentmarker}{}%
    2432 \end{pgfscope}%
     2047\pgfsys@transformshift{1.025455in}{4.038293in}%
     2048\pgfsys@useobject{currentmarker}{}%
     2049\end{pgfscope}%
     2050\begin{pgfscope}%
     2051\pgfsys@transformshift{1.326061in}{3.879198in}%
     2052\pgfsys@useobject{currentmarker}{}%
     2053\end{pgfscope}%
     2054\begin{pgfscope}%
     2055\pgfsys@transformshift{1.927273in}{3.775409in}%
     2056\pgfsys@useobject{currentmarker}{}%
     2057\end{pgfscope}%
     2058\begin{pgfscope}%
     2059\pgfsys@transformshift{3.129697in}{3.635703in}%
     2060\pgfsys@useobject{currentmarker}{}%
     2061\end{pgfscope}%
     2062\begin{pgfscope}%
     2063\pgfsys@transformshift{4.332121in}{3.543668in}%
     2064\pgfsys@useobject{currentmarker}{}%
     2065\end{pgfscope}%
     2066\begin{pgfscope}%
     2067\pgfsys@transformshift{5.534545in}{3.552229in}%
     2068\pgfsys@useobject{currentmarker}{}%
     2069\end{pgfscope}%
     2070\end{pgfscope}%
     2071\begin{pgfscope}%
     2072\pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%
     2073\pgfusepath{clip}%
     2074\pgfsetrectcap%
     2075\pgfsetroundjoin%
     2076\pgfsetlinewidth{1.505625pt}%
     2077\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2078\pgfsetstrokecolor{currentstroke}%
     2079\pgfsetdash{}{0pt}%
     2080\pgfpathmoveto{\pgfqpoint{1.025455in}{3.986946in}}%
     2081\pgfpathlineto{\pgfqpoint{1.326061in}{3.894328in}}%
     2082\pgfpathlineto{\pgfqpoint{1.927273in}{3.799708in}}%
     2083\pgfpathlineto{\pgfqpoint{3.129697in}{3.659501in}}%
     2084\pgfpathlineto{\pgfqpoint{4.332121in}{3.551737in}}%
     2085\pgfpathlineto{\pgfqpoint{5.534545in}{3.536503in}}%
     2086\pgfusepath{stroke}%
     2087\end{pgfscope}%
     2088\begin{pgfscope}%
     2089\pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%
     2090\pgfusepath{clip}%
     2091\pgfsetbuttcap%
     2092\pgfsetroundjoin%
     2093\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
     2094\pgfsetfillcolor{currentfill}%
     2095\pgfsetlinewidth{1.003750pt}%
     2096\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2097\pgfsetstrokecolor{currentstroke}%
     2098\pgfsetdash{}{0pt}%
     2099\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2100\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2101\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2102\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2103\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2104\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2105\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2106\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2107\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2108\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
     2109\pgfpathclose%
     2110\pgfusepath{stroke,fill}%
     2111}%
     2112\begin{pgfscope}%
     2113\pgfsys@transformshift{1.025455in}{3.986946in}%
     2114\pgfsys@useobject{currentmarker}{}%
     2115\end{pgfscope}%
     2116\begin{pgfscope}%
     2117\pgfsys@transformshift{1.326061in}{3.894328in}%
     2118\pgfsys@useobject{currentmarker}{}%
     2119\end{pgfscope}%
     2120\begin{pgfscope}%
     2121\pgfsys@transformshift{1.927273in}{3.799708in}%
     2122\pgfsys@useobject{currentmarker}{}%
     2123\end{pgfscope}%
     2124\begin{pgfscope}%
     2125\pgfsys@transformshift{3.129697in}{3.659501in}%
     2126\pgfsys@useobject{currentmarker}{}%
     2127\end{pgfscope}%
     2128\begin{pgfscope}%
     2129\pgfsys@transformshift{4.332121in}{3.551737in}%
     2130\pgfsys@useobject{currentmarker}{}%
     2131\end{pgfscope}%
     2132\begin{pgfscope}%
     2133\pgfsys@transformshift{5.534545in}{3.536503in}%
     2134\pgfsys@useobject{currentmarker}{}%
     2135\end{pgfscope}%
     2136\end{pgfscope}%
     2137\begin{pgfscope}%
     2138\pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%
     2139\pgfusepath{clip}%
     2140\pgfsetrectcap%
     2141\pgfsetroundjoin%
     2142\pgfsetlinewidth{1.505625pt}%
     2143\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2144\pgfsetstrokecolor{currentstroke}%
     2145\pgfsetdash{}{0pt}%
     2146\pgfpathmoveto{\pgfqpoint{1.025455in}{3.616719in}}%
     2147\pgfpathlineto{\pgfqpoint{1.326061in}{2.880579in}}%
     2148\pgfpathlineto{\pgfqpoint{1.927273in}{1.983335in}}%
     2149\pgfpathlineto{\pgfqpoint{3.129697in}{1.145651in}}%
     2150\pgfpathlineto{\pgfqpoint{4.332121in}{0.876039in}}%
     2151\pgfpathlineto{\pgfqpoint{5.534545in}{0.885117in}}%
     2152\pgfusepath{stroke}%
     2153\end{pgfscope}%
     2154\begin{pgfscope}%
     2155\pgfpathrectangle{\pgfqpoint{0.800000in}{0.528000in}}{\pgfqpoint{4.960000in}{3.696000in}}%
     2156\pgfusepath{clip}%
     2157\pgfsetbuttcap%
     2158\pgfsetroundjoin%
     2159\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     2160\pgfsetfillcolor{currentfill}%
     2161\pgfsetlinewidth{1.003750pt}%
     2162\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2163\pgfsetstrokecolor{currentstroke}%
     2164\pgfsetdash{}{0pt}%
     2165\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2166\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2167\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2168\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2169\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2170\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2171\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2172\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2173\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2174\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
     2175\pgfpathclose%
     2176\pgfusepath{stroke,fill}%
     2177}%
     2178\begin{pgfscope}%
     2179\pgfsys@transformshift{1.025455in}{3.616719in}%
     2180\pgfsys@useobject{currentmarker}{}%
     2181\end{pgfscope}%
     2182\begin{pgfscope}%
     2183\pgfsys@transformshift{1.326061in}{2.880579in}%
     2184\pgfsys@useobject{currentmarker}{}%
     2185\end{pgfscope}%
     2186\begin{pgfscope}%
     2187\pgfsys@transformshift{1.927273in}{1.983335in}%
     2188\pgfsys@useobject{currentmarker}{}%
     2189\end{pgfscope}%
     2190\begin{pgfscope}%
     2191\pgfsys@transformshift{3.129697in}{1.145651in}%
     2192\pgfsys@useobject{currentmarker}{}%
     2193\end{pgfscope}%
     2194\begin{pgfscope}%
     2195\pgfsys@transformshift{4.332121in}{0.876039in}%
     2196\pgfsys@useobject{currentmarker}{}%
     2197\end{pgfscope}%
     2198\begin{pgfscope}%
     2199\pgfsys@transformshift{5.534545in}{0.885117in}%
     2200\pgfsys@useobject{currentmarker}{}%
     2201\end{pgfscope}%
     2202\end{pgfscope}%
     2203\begin{pgfscope}%
     2204\pgfsetrectcap%
     2205\pgfsetmiterjoin%
     2206\pgfsetlinewidth{0.803000pt}%
     2207\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     2208\pgfsetstrokecolor{currentstroke}%
     2209\pgfsetdash{}{0pt}%
     2210\pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%
     2211\pgfpathlineto{\pgfqpoint{0.800000in}{4.224000in}}%
     2212\pgfusepath{stroke}%
     2213\end{pgfscope}%
     2214\begin{pgfscope}%
     2215\pgfsetrectcap%
     2216\pgfsetmiterjoin%
     2217\pgfsetlinewidth{0.803000pt}%
     2218\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     2219\pgfsetstrokecolor{currentstroke}%
     2220\pgfsetdash{}{0pt}%
     2221\pgfpathmoveto{\pgfqpoint{5.760000in}{0.528000in}}%
     2222\pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%
     2223\pgfusepath{stroke}%
     2224\end{pgfscope}%
     2225\begin{pgfscope}%
     2226\pgfsetrectcap%
     2227\pgfsetmiterjoin%
     2228\pgfsetlinewidth{0.803000pt}%
     2229\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     2230\pgfsetstrokecolor{currentstroke}%
     2231\pgfsetdash{}{0pt}%
     2232\pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%
     2233\pgfpathlineto{\pgfqpoint{5.760000in}{0.528000in}}%
     2234\pgfusepath{stroke}%
     2235\end{pgfscope}%
     2236\begin{pgfscope}%
     2237\pgfsetrectcap%
     2238\pgfsetmiterjoin%
     2239\pgfsetlinewidth{0.803000pt}%
     2240\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     2241\pgfsetstrokecolor{currentstroke}%
     2242\pgfsetdash{}{0pt}%
     2243\pgfpathmoveto{\pgfqpoint{0.800000in}{4.224000in}}%
     2244\pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%
     2245\pgfusepath{stroke}%
    24332246\end{pgfscope}%
    24342247\begin{pgfscope}%
     
    24362249\pgfsetstrokecolor{textcolor}%
    24372250\pgfsetfillcolor{textcolor}%
    2438 \pgftext[x=4.269368in,y=2.478238in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-baseline}%
    2439 \end{pgfscope}%
    2440 \begin{pgfscope}%
    2441 \pgfsetbuttcap%
    2442 \pgfsetroundjoin%
    2443 \pgfsetlinewidth{1.505625pt}%
    2444 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
    2445 \pgfsetstrokecolor{currentstroke}%
    2446 \pgfsetdash{}{0pt}%
    2447 \pgfpathmoveto{\pgfqpoint{3.869368in}{2.120444in}}%
    2448 \pgfpathlineto{\pgfqpoint{3.869368in}{2.342667in}}%
    2449 \pgfusepath{stroke}%
    2450 \end{pgfscope}%
    2451 \begin{pgfscope}%
    2452 \pgfsetbuttcap%
    2453 \pgfsetroundjoin%
    2454 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
    2455 \pgfsetfillcolor{currentfill}%
     2251\pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{12.000000}{14.400000}\selectfont Aggregate Lock Benchmark: 8 Locks}%
     2252\end{pgfscope}%
     2253\begin{pgfscope}%
     2254\pgfsetbuttcap%
     2255\pgfsetmiterjoin%
     2256\definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}%
     2257\pgfsetfillcolor{currentfill}%
     2258\pgfsetfillopacity{0.800000}%
    24562259\pgfsetlinewidth{1.003750pt}%
    2457 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2260\definecolor{currentstroke}{rgb}{0.800000,0.800000,0.800000}%
     2261\pgfsetstrokecolor{currentstroke}%
     2262\pgfsetstrokeopacity{0.800000}%
     2263\pgfsetdash{}{0pt}%
     2264\pgfpathmoveto{\pgfqpoint{0.897222in}{0.597444in}}%
     2265\pgfpathlineto{\pgfqpoint{2.156483in}{0.597444in}}%
     2266\pgfpathquadraticcurveto{\pgfqpoint{2.184261in}{0.597444in}}{\pgfqpoint{2.184261in}{0.625222in}}%
     2267\pgfpathlineto{\pgfqpoint{2.184261in}{1.386024in}}%
     2268\pgfpathquadraticcurveto{\pgfqpoint{2.184261in}{1.413802in}}{\pgfqpoint{2.156483in}{1.413802in}}%
     2269\pgfpathlineto{\pgfqpoint{0.897222in}{1.413802in}}%
     2270\pgfpathquadraticcurveto{\pgfqpoint{0.869444in}{1.413802in}}{\pgfqpoint{0.869444in}{1.386024in}}%
     2271\pgfpathlineto{\pgfqpoint{0.869444in}{0.625222in}}%
     2272\pgfpathquadraticcurveto{\pgfqpoint{0.869444in}{0.597444in}}{\pgfqpoint{0.897222in}{0.597444in}}%
     2273\pgfpathclose%
     2274\pgfusepath{stroke,fill}%
     2275\end{pgfscope}%
     2276\begin{pgfscope}%
     2277\pgfsetbuttcap%
     2278\pgfsetroundjoin%
     2279\pgfsetlinewidth{1.505625pt}%
     2280\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
     2281\pgfsetstrokecolor{currentstroke}%
     2282\pgfsetdash{}{0pt}%
     2283\pgfpathmoveto{\pgfqpoint{1.063889in}{1.240191in}}%
     2284\pgfpathlineto{\pgfqpoint{1.063889in}{1.379080in}}%
     2285\pgfusepath{stroke}%
     2286\end{pgfscope}%
     2287\begin{pgfscope}%
     2288\pgfsetbuttcap%
     2289\pgfsetroundjoin%
     2290\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
     2291\pgfsetfillcolor{currentfill}%
     2292\pgfsetlinewidth{1.003750pt}%
     2293\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
    24582294\pgfsetstrokecolor{currentstroke}%
    24592295\pgfsetdash{}{0pt}%
     
    24642300}%
    24652301\begin{pgfscope}%
    2466 \pgfsys@transformshift{3.869368in}{2.120444in}%
    2467 \pgfsys@useobject{currentmarker}{}%
    2468 \end{pgfscope}%
    2469 \end{pgfscope}%
    2470 \begin{pgfscope}%
    2471 \pgfsetbuttcap%
    2472 \pgfsetroundjoin%
    2473 \definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
     2302\pgfsys@transformshift{1.063889in}{1.240191in}%
     2303\pgfsys@useobject{currentmarker}{}%
     2304\end{pgfscope}%
     2305\end{pgfscope}%
     2306\begin{pgfscope}%
     2307\pgfsetbuttcap%
     2308\pgfsetroundjoin%
     2309\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
    24742310\pgfsetfillcolor{currentfill}%
    24752311\pgfsetlinewidth{1.003750pt}%
    2476 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2312\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
    24772313\pgfsetstrokecolor{currentstroke}%
    24782314\pgfsetdash{}{0pt}%
     
    24832319}%
    24842320\begin{pgfscope}%
    2485 \pgfsys@transformshift{3.869368in}{2.342667in}%
     2321\pgfsys@transformshift{1.063889in}{1.379080in}%
    24862322\pgfsys@useobject{currentmarker}{}%
    24872323\end{pgfscope}%
     
    24912327\pgfsetroundjoin%
    24922328\pgfsetlinewidth{1.505625pt}%
    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}%
     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}%
    25042340\pgfsetfillcolor{currentfill}%
    25052341\pgfsetlinewidth{1.003750pt}%
    2506 \definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2342\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
    25072343\pgfsetstrokecolor{currentstroke}%
    25082344\pgfsetdash{}{0pt}%
    25092345\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
    2510 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}%
    2511 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%
    2512 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%
    2513 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}%
     2346\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2347\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2348\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2349\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2350\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2351\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2352\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2353\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2354\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    25142355\pgfpathclose%
    25152356\pgfusepath{stroke,fill}%
    25162357}%
    25172358\begin{pgfscope}%
    2518 \pgfsys@transformshift{3.869368in}{2.231556in}%
     2359\pgfsys@transformshift{1.063889in}{1.309636in}%
    25192360\pgfsys@useobject{currentmarker}{}%
    25202361\end{pgfscope}%
     
    25242365\pgfsetstrokecolor{textcolor}%
    25252366\pgfsetfillcolor{textcolor}%
    2526 \pgftext[x=4.269368in,y=2.153778in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA-rand}%
    2527 \end{pgfscope}%
    2528 \begin{pgfscope}%
    2529 \pgfsetbuttcap%
    2530 \pgfsetroundjoin%
    2531 \pgfsetlinewidth{1.505625pt}%
    2532 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
    2533 \pgfsetstrokecolor{currentstroke}%
    2534 \pgfsetdash{}{0pt}%
    2535 \pgfpathmoveto{\pgfqpoint{3.869368in}{1.795985in}}%
    2536 \pgfpathlineto{\pgfqpoint{3.869368in}{2.018207in}}%
    2537 \pgfusepath{stroke}%
    2538 \end{pgfscope}%
    2539 \begin{pgfscope}%
    2540 \pgfsetbuttcap%
    2541 \pgfsetroundjoin%
    2542 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     2367\pgftext[x=1.313889in,y=1.261024in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-baseline}%
     2368\end{pgfscope}%
     2369\begin{pgfscope}%
     2370\pgfsetbuttcap%
     2371\pgfsetroundjoin%
     2372\pgfsetlinewidth{1.505625pt}%
     2373\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     2374\pgfsetstrokecolor{currentstroke}%
     2375\pgfsetdash{}{0pt}%
     2376\pgfpathmoveto{\pgfqpoint{1.063889in}{1.046518in}}%
     2377\pgfpathlineto{\pgfqpoint{1.063889in}{1.185407in}}%
     2378\pgfusepath{stroke}%
     2379\end{pgfscope}%
     2380\begin{pgfscope}%
     2381\pgfsetbuttcap%
     2382\pgfsetroundjoin%
     2383\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    25432384\pgfsetfillcolor{currentfill}%
    25442385\pgfsetlinewidth{1.003750pt}%
    2545 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2386\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    25462387\pgfsetstrokecolor{currentstroke}%
    25472388\pgfsetdash{}{0pt}%
     
    25522393}%
    25532394\begin{pgfscope}%
    2554 \pgfsys@transformshift{3.869368in}{1.795985in}%
    2555 \pgfsys@useobject{currentmarker}{}%
    2556 \end{pgfscope}%
    2557 \end{pgfscope}%
    2558 \begin{pgfscope}%
    2559 \pgfsetbuttcap%
    2560 \pgfsetroundjoin%
    2561 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     2395\pgfsys@transformshift{1.063889in}{1.046518in}%
     2396\pgfsys@useobject{currentmarker}{}%
     2397\end{pgfscope}%
     2398\end{pgfscope}%
     2399\begin{pgfscope}%
     2400\pgfsetbuttcap%
     2401\pgfsetroundjoin%
     2402\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    25622403\pgfsetfillcolor{currentfill}%
    25632404\pgfsetlinewidth{1.003750pt}%
    2564 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2405\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    25652406\pgfsetstrokecolor{currentstroke}%
    25662407\pgfsetdash{}{0pt}%
     
    25712412}%
    25722413\begin{pgfscope}%
    2573 \pgfsys@transformshift{3.869368in}{2.018207in}%
     2414\pgfsys@transformshift{1.063889in}{1.185407in}%
    25742415\pgfsys@useobject{currentmarker}{}%
    25752416\end{pgfscope}%
     
    25792420\pgfsetroundjoin%
    25802421\pgfsetlinewidth{1.505625pt}%
    2581 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
    2582 \pgfsetstrokecolor{currentstroke}%
    2583 \pgfsetdash{}{0pt}%
    2584 \pgfpathmoveto{\pgfqpoint{3.647146in}{1.907096in}}%
    2585 \pgfpathlineto{\pgfqpoint{4.091591in}{1.907096in}}%
    2586 \pgfusepath{stroke}%
    2587 \end{pgfscope}%
    2588 \begin{pgfscope}%
    2589 \pgfsetbuttcap%
    2590 \pgfsetmiterjoin%
    2591 \definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     2422\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     2423\pgfsetstrokecolor{currentstroke}%
     2424\pgfsetdash{}{0pt}%
     2425\pgfpathmoveto{\pgfqpoint{0.925000in}{1.115963in}}%
     2426\pgfpathlineto{\pgfqpoint{1.202778in}{1.115963in}}%
     2427\pgfusepath{stroke}%
     2428\end{pgfscope}%
     2429\begin{pgfscope}%
     2430\pgfsetbuttcap%
     2431\pgfsetroundjoin%
     2432\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    25922433\pgfsetfillcolor{currentfill}%
    25932434\pgfsetlinewidth{1.003750pt}%
    2594 \definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
    2595 \pgfsetstrokecolor{currentstroke}%
    2596 \pgfsetdash{}{0pt}%
    2597 \pgfsys@defobject{currentmarker}{\pgfqpoint{-0.058926in}{-0.058926in}}{\pgfqpoint{0.058926in}{0.058926in}}{%
    2598 \pgfpathmoveto{\pgfqpoint{-0.000000in}{-0.058926in}}%
    2599 \pgfpathlineto{\pgfqpoint{0.058926in}{0.000000in}}%
    2600 \pgfpathlineto{\pgfqpoint{0.000000in}{0.058926in}}%
    2601 \pgfpathlineto{\pgfqpoint{-0.058926in}{0.000000in}}%
     2435\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     2436\pgfsetstrokecolor{currentstroke}%
     2437\pgfsetdash{}{0pt}%
     2438\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2439\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2440\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2441\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2442\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2443\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2444\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2445\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2446\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2447\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    26022448\pgfpathclose%
    26032449\pgfusepath{stroke,fill}%
    26042450}%
    26052451\begin{pgfscope}%
    2606 \pgfsys@transformshift{3.869368in}{1.907096in}%
     2452\pgfsys@transformshift{1.063889in}{1.115963in}%
    26072453\pgfsys@useobject{currentmarker}{}%
    26082454\end{pgfscope}%
     
    26122458\pgfsetstrokecolor{textcolor}%
    26132459\pgfsetfillcolor{textcolor}%
    2614 \pgftext[x=4.269368in,y=1.829318in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CPP-rand}%
     2460\pgftext[x=1.313889in,y=1.067352in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-baseline}%
     2461\end{pgfscope}%
     2462\begin{pgfscope}%
     2463\pgfsetbuttcap%
     2464\pgfsetroundjoin%
     2465\pgfsetlinewidth{1.505625pt}%
     2466\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2467\pgfsetstrokecolor{currentstroke}%
     2468\pgfsetdash{}{0pt}%
     2469\pgfpathmoveto{\pgfqpoint{1.063889in}{0.852846in}}%
     2470\pgfpathlineto{\pgfqpoint{1.063889in}{0.991734in}}%
     2471\pgfusepath{stroke}%
     2472\end{pgfscope}%
     2473\begin{pgfscope}%
     2474\pgfsetbuttcap%
     2475\pgfsetroundjoin%
     2476\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
     2477\pgfsetfillcolor{currentfill}%
     2478\pgfsetlinewidth{1.003750pt}%
     2479\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2480\pgfsetstrokecolor{currentstroke}%
     2481\pgfsetdash{}{0pt}%
     2482\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
     2483\pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
     2484\pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
     2485\pgfusepath{stroke,fill}%
     2486}%
     2487\begin{pgfscope}%
     2488\pgfsys@transformshift{1.063889in}{0.852846in}%
     2489\pgfsys@useobject{currentmarker}{}%
     2490\end{pgfscope}%
     2491\end{pgfscope}%
     2492\begin{pgfscope}%
     2493\pgfsetbuttcap%
     2494\pgfsetroundjoin%
     2495\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
     2496\pgfsetfillcolor{currentfill}%
     2497\pgfsetlinewidth{1.003750pt}%
     2498\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2499\pgfsetstrokecolor{currentstroke}%
     2500\pgfsetdash{}{0pt}%
     2501\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
     2502\pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
     2503\pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
     2504\pgfusepath{stroke,fill}%
     2505}%
     2506\begin{pgfscope}%
     2507\pgfsys@transformshift{1.063889in}{0.991734in}%
     2508\pgfsys@useobject{currentmarker}{}%
     2509\end{pgfscope}%
     2510\end{pgfscope}%
     2511\begin{pgfscope}%
     2512\pgfsetrectcap%
     2513\pgfsetroundjoin%
     2514\pgfsetlinewidth{1.505625pt}%
     2515\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2516\pgfsetstrokecolor{currentstroke}%
     2517\pgfsetdash{}{0pt}%
     2518\pgfpathmoveto{\pgfqpoint{0.925000in}{0.922290in}}%
     2519\pgfpathlineto{\pgfqpoint{1.202778in}{0.922290in}}%
     2520\pgfusepath{stroke}%
     2521\end{pgfscope}%
     2522\begin{pgfscope}%
     2523\pgfsetbuttcap%
     2524\pgfsetroundjoin%
     2525\definecolor{currentfill}{rgb}{0.172549,0.627451,0.172549}%
     2526\pgfsetfillcolor{currentfill}%
     2527\pgfsetlinewidth{1.003750pt}%
     2528\definecolor{currentstroke}{rgb}{0.172549,0.627451,0.172549}%
     2529\pgfsetstrokecolor{currentstroke}%
     2530\pgfsetdash{}{0pt}%
     2531\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2532\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2533\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2534\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2535\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2536\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2537\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2538\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2539\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2540\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
     2541\pgfpathclose%
     2542\pgfusepath{stroke,fill}%
     2543}%
     2544\begin{pgfscope}%
     2545\pgfsys@transformshift{1.063889in}{0.922290in}%
     2546\pgfsys@useobject{currentmarker}{}%
     2547\end{pgfscope}%
     2548\end{pgfscope}%
     2549\begin{pgfscope}%
     2550\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
     2551\pgfsetstrokecolor{textcolor}%
     2552\pgfsetfillcolor{textcolor}%
     2553\pgftext[x=1.313889in,y=0.873679in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA-rand}%
     2554\end{pgfscope}%
     2555\begin{pgfscope}%
     2556\pgfsetbuttcap%
     2557\pgfsetroundjoin%
     2558\pgfsetlinewidth{1.505625pt}%
     2559\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2560\pgfsetstrokecolor{currentstroke}%
     2561\pgfsetdash{}{0pt}%
     2562\pgfpathmoveto{\pgfqpoint{1.063889in}{0.659173in}}%
     2563\pgfpathlineto{\pgfqpoint{1.063889in}{0.798062in}}%
     2564\pgfusepath{stroke}%
     2565\end{pgfscope}%
     2566\begin{pgfscope}%
     2567\pgfsetbuttcap%
     2568\pgfsetroundjoin%
     2569\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     2570\pgfsetfillcolor{currentfill}%
     2571\pgfsetlinewidth{1.003750pt}%
     2572\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2573\pgfsetstrokecolor{currentstroke}%
     2574\pgfsetdash{}{0pt}%
     2575\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
     2576\pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
     2577\pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
     2578\pgfusepath{stroke,fill}%
     2579}%
     2580\begin{pgfscope}%
     2581\pgfsys@transformshift{1.063889in}{0.659173in}%
     2582\pgfsys@useobject{currentmarker}{}%
     2583\end{pgfscope}%
     2584\end{pgfscope}%
     2585\begin{pgfscope}%
     2586\pgfsetbuttcap%
     2587\pgfsetroundjoin%
     2588\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     2589\pgfsetfillcolor{currentfill}%
     2590\pgfsetlinewidth{1.003750pt}%
     2591\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2592\pgfsetstrokecolor{currentstroke}%
     2593\pgfsetdash{}{0pt}%
     2594\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
     2595\pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
     2596\pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
     2597\pgfusepath{stroke,fill}%
     2598}%
     2599\begin{pgfscope}%
     2600\pgfsys@transformshift{1.063889in}{0.798062in}%
     2601\pgfsys@useobject{currentmarker}{}%
     2602\end{pgfscope}%
     2603\end{pgfscope}%
     2604\begin{pgfscope}%
     2605\pgfsetrectcap%
     2606\pgfsetroundjoin%
     2607\pgfsetlinewidth{1.505625pt}%
     2608\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2609\pgfsetstrokecolor{currentstroke}%
     2610\pgfsetdash{}{0pt}%
     2611\pgfpathmoveto{\pgfqpoint{0.925000in}{0.728617in}}%
     2612\pgfpathlineto{\pgfqpoint{1.202778in}{0.728617in}}%
     2613\pgfusepath{stroke}%
     2614\end{pgfscope}%
     2615\begin{pgfscope}%
     2616\pgfsetbuttcap%
     2617\pgfsetroundjoin%
     2618\definecolor{currentfill}{rgb}{0.839216,0.152941,0.156863}%
     2619\pgfsetfillcolor{currentfill}%
     2620\pgfsetlinewidth{1.003750pt}%
     2621\definecolor{currentstroke}{rgb}{0.839216,0.152941,0.156863}%
     2622\pgfsetstrokecolor{currentstroke}%
     2623\pgfsetdash{}{0pt}%
     2624\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     2625\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     2626\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     2627\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     2628\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     2629\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     2630\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     2631\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     2632\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     2633\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
     2634\pgfpathclose%
     2635\pgfusepath{stroke,fill}%
     2636}%
     2637\begin{pgfscope}%
     2638\pgfsys@transformshift{1.063889in}{0.728617in}%
     2639\pgfsys@useobject{currentmarker}{}%
     2640\end{pgfscope}%
     2641\end{pgfscope}%
     2642\begin{pgfscope}%
     2643\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
     2644\pgfsetstrokecolor{textcolor}%
     2645\pgfsetfillcolor{textcolor}%
     2646\pgftext[x=1.313889in,y=0.680006in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CPP-rand}%
    26152647\end{pgfscope}%
    26162648\end{pgfpicture}%
  • doc/theses/colby_parsons_MMAth/figures/pyke_Channel_Contention.pgf

    r3982384 r6e4c44d  
    7777\pgfsetstrokecolor{textcolor}%
    7878\pgfsetfillcolor{textcolor}%
    79 \pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 2\)}%
     79\pgftext[x=1.025455in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 2\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 4\)}%
     104\pgftext[x=1.326061in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 4\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 8\)}%
     129\pgftext[x=1.927273in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 8\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 16\)}%
     154\pgftext[x=3.129697in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 16\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 24\)}%
     179\pgftext[x=4.332121in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 24\)}%
    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{16.000000}{19.200000}\selectfont \(\displaystyle 32\)}%
     204\pgftext[x=5.534545in,y=0.430778in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 32\)}%
    205205\end{pgfscope}%
    206206\begin{pgfscope}%
     
    208208\pgfsetstrokecolor{textcolor}%
    209209\pgfsetfillcolor{textcolor}%
    210 \pgftext[x=3.280000in,y=0.161874in,,top]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Cores}%
     210\pgftext[x=3.280000in,y=0.251766in,,top]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Cores}%
    211211\end{pgfscope}%
    212212\begin{pgfscope}%
     
    233233\pgfsetstrokecolor{textcolor}%
    234234\pgfsetfillcolor{textcolor}%
    235 \pgftext[x=0.399655in,y=2.241198in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont \(\displaystyle 10^{8}\)}%
     235\pgftext[x=0.501581in,y=2.276306in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont \(\displaystyle 10^{8}\)}%
    236236\end{pgfscope}%
    237237\begin{pgfscope}%
     
    429429\pgfsetstrokecolor{textcolor}%
    430430\pgfsetfillcolor{textcolor}%
    431 \pgftext[x=0.344100in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Throughput (channel operations)}%
     431\pgftext[x=0.446026in,y=2.376000in,,bottom,rotate=90.000000]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Throughput (channel operations)}%
    432432\end{pgfscope}%
    433433\begin{pgfscope}%
     
    838838\pgfusepath{clip}%
    839839\pgfsetbuttcap%
    840 \pgfsetmiterjoin%
     840\pgfsetroundjoin%
    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}%
    1020845\pgfsetstrokecolor{currentstroke}%
    1021846\pgfsetdash{}{0pt}%
     
    1034859}%
    1035860\begin{pgfscope}%
    1036 \pgfsys@transformshift{4.713959in}{3.935111in}%
    1037 \pgfsys@useobject{currentmarker}{}%
    1038 \end{pgfscope}%
     861\pgfsys@transformshift{1.025455in}{3.619140in}%
     862\pgfsys@useobject{currentmarker}{}%
     863\end{pgfscope}%
     864\begin{pgfscope}%
     865\pgfsys@transformshift{1.326061in}{3.242405in}%
     866\pgfsys@useobject{currentmarker}{}%
     867\end{pgfscope}%
     868\begin{pgfscope}%
     869\pgfsys@transformshift{1.927273in}{2.083323in}%
     870\pgfsys@useobject{currentmarker}{}%
     871\end{pgfscope}%
     872\begin{pgfscope}%
     873\pgfsys@transformshift{3.129697in}{0.987727in}%
     874\pgfsys@useobject{currentmarker}{}%
     875\end{pgfscope}%
     876\begin{pgfscope}%
     877\pgfsys@transformshift{4.332121in}{0.742138in}%
     878\pgfsys@useobject{currentmarker}{}%
     879\end{pgfscope}%
     880\begin{pgfscope}%
     881\pgfsys@transformshift{5.534545in}{0.704967in}%
     882\pgfsys@useobject{currentmarker}{}%
     883\end{pgfscope}%
     884\end{pgfscope}%
     885\begin{pgfscope}%
     886\pgfsetrectcap%
     887\pgfsetmiterjoin%
     888\pgfsetlinewidth{0.803000pt}%
     889\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     890\pgfsetstrokecolor{currentstroke}%
     891\pgfsetdash{}{0pt}%
     892\pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%
     893\pgfpathlineto{\pgfqpoint{0.800000in}{4.224000in}}%
     894\pgfusepath{stroke}%
     895\end{pgfscope}%
     896\begin{pgfscope}%
     897\pgfsetrectcap%
     898\pgfsetmiterjoin%
     899\pgfsetlinewidth{0.803000pt}%
     900\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     901\pgfsetstrokecolor{currentstroke}%
     902\pgfsetdash{}{0pt}%
     903\pgfpathmoveto{\pgfqpoint{5.760000in}{0.528000in}}%
     904\pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%
     905\pgfusepath{stroke}%
     906\end{pgfscope}%
     907\begin{pgfscope}%
     908\pgfsetrectcap%
     909\pgfsetmiterjoin%
     910\pgfsetlinewidth{0.803000pt}%
     911\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     912\pgfsetstrokecolor{currentstroke}%
     913\pgfsetdash{}{0pt}%
     914\pgfpathmoveto{\pgfqpoint{0.800000in}{0.528000in}}%
     915\pgfpathlineto{\pgfqpoint{5.760000in}{0.528000in}}%
     916\pgfusepath{stroke}%
     917\end{pgfscope}%
     918\begin{pgfscope}%
     919\pgfsetrectcap%
     920\pgfsetmiterjoin%
     921\pgfsetlinewidth{0.803000pt}%
     922\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}%
     923\pgfsetstrokecolor{currentstroke}%
     924\pgfsetdash{}{0pt}%
     925\pgfpathmoveto{\pgfqpoint{0.800000in}{4.224000in}}%
     926\pgfpathlineto{\pgfqpoint{5.760000in}{4.224000in}}%
     927\pgfusepath{stroke}%
    1039928\end{pgfscope}%
    1040929\begin{pgfscope}%
     
    1042931\pgfsetstrokecolor{textcolor}%
    1043932\pgfsetfillcolor{textcolor}%
    1044 \pgftext[x=5.113959in,y=3.857333in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont CFA}%
    1045 \end{pgfscope}%
    1046 \begin{pgfscope}%
    1047 \pgfsetbuttcap%
    1048 \pgfsetroundjoin%
    1049 \pgfsetlinewidth{1.505625pt}%
    1050 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    1051 \pgfsetstrokecolor{currentstroke}%
    1052 \pgfsetdash{}{0pt}%
    1053 \pgfpathmoveto{\pgfqpoint{4.713959in}{3.499540in}}%
    1054 \pgfpathlineto{\pgfqpoint{4.713959in}{3.721763in}}%
    1055 \pgfusepath{stroke}%
    1056 \end{pgfscope}%
    1057 \begin{pgfscope}%
    1058 \pgfsetbuttcap%
    1059 \pgfsetroundjoin%
    1060 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    1061 \pgfsetfillcolor{currentfill}%
    1062 \pgfsetlinewidth{1.003750pt}%
    1063 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     933\pgftext[x=3.280000in,y=4.307333in,,base]{\color{textcolor}\rmfamily\fontsize{12.000000}{14.400000}\selectfont Channel Contention Benchmark}%
     934\end{pgfscope}%
     935\begin{pgfscope}%
     936\pgfsetbuttcap%
     937\pgfsetmiterjoin%
     938\definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}%
     939\pgfsetfillcolor{currentfill}%
     940\pgfsetfillopacity{0.800000}%
     941\pgfsetlinewidth{1.003750pt}%
     942\definecolor{currentstroke}{rgb}{0.800000,0.800000,0.800000}%
     943\pgfsetstrokecolor{currentstroke}%
     944\pgfsetstrokeopacity{0.800000}%
     945\pgfsetdash{}{0pt}%
     946\pgfpathmoveto{\pgfqpoint{4.938626in}{3.725543in}}%
     947\pgfpathlineto{\pgfqpoint{5.662778in}{3.725543in}}%
     948\pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{3.725543in}}{\pgfqpoint{5.690556in}{3.753321in}}%
     949\pgfpathlineto{\pgfqpoint{5.690556in}{4.126778in}}%
     950\pgfpathquadraticcurveto{\pgfqpoint{5.690556in}{4.154556in}}{\pgfqpoint{5.662778in}{4.154556in}}%
     951\pgfpathlineto{\pgfqpoint{4.938626in}{4.154556in}}%
     952\pgfpathquadraticcurveto{\pgfqpoint{4.910848in}{4.154556in}}{\pgfqpoint{4.910848in}{4.126778in}}%
     953\pgfpathlineto{\pgfqpoint{4.910848in}{3.753321in}}%
     954\pgfpathquadraticcurveto{\pgfqpoint{4.910848in}{3.725543in}}{\pgfqpoint{4.938626in}{3.725543in}}%
     955\pgfpathclose%
     956\pgfusepath{stroke,fill}%
     957\end{pgfscope}%
     958\begin{pgfscope}%
     959\pgfsetbuttcap%
     960\pgfsetroundjoin%
     961\pgfsetlinewidth{1.505625pt}%
     962\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
     963\pgfsetstrokecolor{currentstroke}%
     964\pgfsetdash{}{0pt}%
     965\pgfpathmoveto{\pgfqpoint{5.105293in}{3.980944in}}%
     966\pgfpathlineto{\pgfqpoint{5.105293in}{4.119833in}}%
     967\pgfusepath{stroke}%
     968\end{pgfscope}%
     969\begin{pgfscope}%
     970\pgfsetbuttcap%
     971\pgfsetroundjoin%
     972\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
     973\pgfsetfillcolor{currentfill}%
     974\pgfsetlinewidth{1.003750pt}%
     975\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
    1064976\pgfsetstrokecolor{currentstroke}%
    1065977\pgfsetdash{}{0pt}%
     
    1070982}%
    1071983\begin{pgfscope}%
    1072 \pgfsys@transformshift{4.713959in}{3.499540in}%
    1073 \pgfsys@useobject{currentmarker}{}%
    1074 \end{pgfscope}%
    1075 \end{pgfscope}%
    1076 \begin{pgfscope}%
    1077 \pgfsetbuttcap%
    1078 \pgfsetroundjoin%
    1079 \definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
    1080 \pgfsetfillcolor{currentfill}%
    1081 \pgfsetlinewidth{1.003750pt}%
    1082 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     984\pgfsys@transformshift{5.105293in}{3.980944in}%
     985\pgfsys@useobject{currentmarker}{}%
     986\end{pgfscope}%
     987\end{pgfscope}%
     988\begin{pgfscope}%
     989\pgfsetbuttcap%
     990\pgfsetroundjoin%
     991\definecolor{currentfill}{rgb}{0.121569,0.466667,0.705882}%
     992\pgfsetfillcolor{currentfill}%
     993\pgfsetlinewidth{1.003750pt}%
     994\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}%
    1083995\pgfsetstrokecolor{currentstroke}%
    1084996\pgfsetdash{}{0pt}%
     
    10891001}%
    10901002\begin{pgfscope}%
    1091 \pgfsys@transformshift{4.713959in}{3.721763in}%
     1003\pgfsys@transformshift{5.105293in}{4.119833in}%
    10921004\pgfsys@useobject{currentmarker}{}%
    10931005\end{pgfscope}%
     
    10971009\pgfsetroundjoin%
    10981010\pgfsetlinewidth{1.505625pt}%
    1099 \definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
    1100 \pgfsetstrokecolor{currentstroke}%
    1101 \pgfsetdash{}{0pt}%
    1102 \pgfpathmoveto{\pgfqpoint{4.491737in}{3.610651in}}%
    1103 \pgfpathlineto{\pgfqpoint{4.936181in}{3.610651in}}%
    1104 \pgfusepath{stroke}%
    1105 \end{pgfscope}%
    1106 \begin{pgfscope}%
    1107 \pgfsetbuttcap%
    1108 \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}%
     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}%
    11131025\pgfsetstrokecolor{currentstroke}%
    11141026\pgfsetdash{}{0pt}%
    11151027\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
    1116 \pgfpathmoveto{\pgfqpoint{-0.041667in}{-0.041667in}}%
    1117 \pgfpathlineto{\pgfqpoint{0.041667in}{-0.041667in}}%
    1118 \pgfpathlineto{\pgfqpoint{0.041667in}{0.041667in}}%
    1119 \pgfpathlineto{\pgfqpoint{-0.041667in}{0.041667in}}%
     1028\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     1029\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     1030\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     1031\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     1032\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     1033\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     1034\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     1035\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     1036\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
    11201037\pgfpathclose%
    11211038\pgfusepath{stroke,fill}%
    11221039}%
    11231040\begin{pgfscope}%
    1124 \pgfsys@transformshift{4.713959in}{3.610651in}%
     1041\pgfsys@transformshift{5.105293in}{4.050389in}%
    11251042\pgfsys@useobject{currentmarker}{}%
    11261043\end{pgfscope}%
     
    11301047\pgfsetstrokecolor{textcolor}%
    11311048\pgfsetfillcolor{textcolor}%
    1132 \pgftext[x=5.113959in,y=3.532874in,left,base]{\color{textcolor}\rmfamily\fontsize{16.000000}{19.200000}\selectfont Go}%
     1049\pgftext[x=5.355293in,y=4.001778in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont CFA}%
     1050\end{pgfscope}%
     1051\begin{pgfscope}%
     1052\pgfsetbuttcap%
     1053\pgfsetroundjoin%
     1054\pgfsetlinewidth{1.505625pt}%
     1055\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     1056\pgfsetstrokecolor{currentstroke}%
     1057\pgfsetdash{}{0pt}%
     1058\pgfpathmoveto{\pgfqpoint{5.105293in}{3.787272in}}%
     1059\pgfpathlineto{\pgfqpoint{5.105293in}{3.926161in}}%
     1060\pgfusepath{stroke}%
     1061\end{pgfscope}%
     1062\begin{pgfscope}%
     1063\pgfsetbuttcap%
     1064\pgfsetroundjoin%
     1065\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
     1066\pgfsetfillcolor{currentfill}%
     1067\pgfsetlinewidth{1.003750pt}%
     1068\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     1069\pgfsetstrokecolor{currentstroke}%
     1070\pgfsetdash{}{0pt}%
     1071\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
     1072\pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
     1073\pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
     1074\pgfusepath{stroke,fill}%
     1075}%
     1076\begin{pgfscope}%
     1077\pgfsys@transformshift{5.105293in}{3.787272in}%
     1078\pgfsys@useobject{currentmarker}{}%
     1079\end{pgfscope}%
     1080\end{pgfscope}%
     1081\begin{pgfscope}%
     1082\pgfsetbuttcap%
     1083\pgfsetroundjoin%
     1084\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
     1085\pgfsetfillcolor{currentfill}%
     1086\pgfsetlinewidth{1.003750pt}%
     1087\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     1088\pgfsetstrokecolor{currentstroke}%
     1089\pgfsetdash{}{0pt}%
     1090\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.027778in}{-0.000000in}}{\pgfqpoint{0.027778in}{0.000000in}}{%
     1091\pgfpathmoveto{\pgfqpoint{0.027778in}{-0.000000in}}%
     1092\pgfpathlineto{\pgfqpoint{-0.027778in}{0.000000in}}%
     1093\pgfusepath{stroke,fill}%
     1094}%
     1095\begin{pgfscope}%
     1096\pgfsys@transformshift{5.105293in}{3.926161in}%
     1097\pgfsys@useobject{currentmarker}{}%
     1098\end{pgfscope}%
     1099\end{pgfscope}%
     1100\begin{pgfscope}%
     1101\pgfsetrectcap%
     1102\pgfsetroundjoin%
     1103\pgfsetlinewidth{1.505625pt}%
     1104\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     1105\pgfsetstrokecolor{currentstroke}%
     1106\pgfsetdash{}{0pt}%
     1107\pgfpathmoveto{\pgfqpoint{4.966404in}{3.856716in}}%
     1108\pgfpathlineto{\pgfqpoint{5.244182in}{3.856716in}}%
     1109\pgfusepath{stroke}%
     1110\end{pgfscope}%
     1111\begin{pgfscope}%
     1112\pgfsetbuttcap%
     1113\pgfsetroundjoin%
     1114\definecolor{currentfill}{rgb}{1.000000,0.498039,0.054902}%
     1115\pgfsetfillcolor{currentfill}%
     1116\pgfsetlinewidth{1.003750pt}%
     1117\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}%
     1118\pgfsetstrokecolor{currentstroke}%
     1119\pgfsetdash{}{0pt}%
     1120\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.041667in}{-0.041667in}}{\pgfqpoint{0.041667in}{0.041667in}}{%
     1121\pgfpathmoveto{\pgfqpoint{0.000000in}{-0.041667in}}%
     1122\pgfpathcurveto{\pgfqpoint{0.011050in}{-0.041667in}}{\pgfqpoint{0.021649in}{-0.037276in}}{\pgfqpoint{0.029463in}{-0.029463in}}%
     1123\pgfpathcurveto{\pgfqpoint{0.037276in}{-0.021649in}}{\pgfqpoint{0.041667in}{-0.011050in}}{\pgfqpoint{0.041667in}{0.000000in}}%
     1124\pgfpathcurveto{\pgfqpoint{0.041667in}{0.011050in}}{\pgfqpoint{0.037276in}{0.021649in}}{\pgfqpoint{0.029463in}{0.029463in}}%
     1125\pgfpathcurveto{\pgfqpoint{0.021649in}{0.037276in}}{\pgfqpoint{0.011050in}{0.041667in}}{\pgfqpoint{0.000000in}{0.041667in}}%
     1126\pgfpathcurveto{\pgfqpoint{-0.011050in}{0.041667in}}{\pgfqpoint{-0.021649in}{0.037276in}}{\pgfqpoint{-0.029463in}{0.029463in}}%
     1127\pgfpathcurveto{\pgfqpoint{-0.037276in}{0.021649in}}{\pgfqpoint{-0.041667in}{0.011050in}}{\pgfqpoint{-0.041667in}{0.000000in}}%
     1128\pgfpathcurveto{\pgfqpoint{-0.041667in}{-0.011050in}}{\pgfqpoint{-0.037276in}{-0.021649in}}{\pgfqpoint{-0.029463in}{-0.029463in}}%
     1129\pgfpathcurveto{\pgfqpoint{-0.021649in}{-0.037276in}}{\pgfqpoint{-0.011050in}{-0.041667in}}{\pgfqpoint{0.000000in}{-0.041667in}}%
     1130\pgfpathclose%
     1131\pgfusepath{stroke,fill}%
     1132}%
     1133\begin{pgfscope}%
     1134\pgfsys@transformshift{5.105293in}{3.856716in}%
     1135\pgfsys@useobject{currentmarker}{}%
     1136\end{pgfscope}%
     1137\end{pgfscope}%
     1138\begin{pgfscope}%
     1139\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}%
     1140\pgfsetstrokecolor{textcolor}%
     1141\pgfsetfillcolor{textcolor}%
     1142\pgftext[x=5.355293in,y=3.808105in,left,base]{\color{textcolor}\rmfamily\fontsize{10.000000}{12.000000}\selectfont Go}%
    11331143\end{pgfscope}%
    11341144\end{pgfpicture}%
  • doc/theses/colby_parsons_MMAth/style/style.tex

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

    r3982384 r6e4c44d  
    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 declaring a @processor@ structure.
     9Kernel threads are created by instancing 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 deallocation, either implicitly at block exit for stack allocation or explicitly at @delete@ for heap allocation.
     32A thread is implicitly joined at deallocated, 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

    r3982384 r6e4c44d  
    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 nominal 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 containment 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 \emph{rebindable}, and support multi-level referencing.
    17 References in \CFA are a layer of syntactic sugar over pointers to reduce the number of ref/deref operations needed with pointer usage.
     16References in \CFA are similar to references in \CC; however \CFA references are 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{\lstinline{with} Statement}
     62\section{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 limited nominal inheritance.
     130\CFA extends C with generalized overloading polymorphism (see \VRef{s:Overloading}), as well as, parametric polymorphism and 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 nominal inheritance.
    183 In \CFA, @struct@s can @inline@ another struct type to gain its fields and masquerade as that type.
    184 Examples of \CFA nominal inheritance are shown in \VRef[Listing]{l:cfa_inherit}.
    185 
    186 \begin{cfa}[caption={Example of \CFA nominal inheritance},label={l:cfa_inherit}]
     182Inheritance in \CFA is taken from Plan-9 C's containment inheritance.
     183In \CFA, @struct@s can @inline@ another struct type to gain its fields and masquerade as that type. 
     184Examples 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}]
    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

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

    r3982384 r6e4c44d  
    55% ======================================================================
    66
     7Channels 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.
     8This model is an alternative to shared-memory concurrency, where threads can communicate directly by changing shared state.
    79Most modern concurrent programming languages do not subscribe to just one style of communication among threads and provide features that support multiple approaches.
    8 Channels are a concurrent-language feature used to perform \Newterm{message-passing concurrency}: a model of concurrency where threads communicate by sending data as messages (mostly non\-blocking) and synchronizing by receiving sent messages (blocking).
    9 This model is an alternative to shared-memory concurrency, where threads can communicate directly by changing shared state.
    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 channels such that both the sender and receiver need to explicitly name the process that is destination of a channel send or the source of a channel receive.
    16 These channel semantics remove the ability to have an anonymous sender or receiver and additionally all channel operations in CSP are synchronous (no buffering).
    17 Channels as a programming language feature has been popularized in recent years by the language Go, which encourages the use of channels as its fundamental concurrent feature.
    18 Go's restrictions are ... \CAP{The only restrictions in Go but not CFA that I can think of are the closing semantics and the functionality of select vs. waituntil. Is that worth mentioning here or should it be discussed later?}
     15Hoare's language restricts ...
     16Channels 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.
     17Go's restrictions are ...
    1918\CFA channels do not have these restrictions.
    2019
    2120\section{Producer-Consumer Problem}
    22 A channel is an abstraction for a shared-memory buffer, which turns the implementation of a channel into the producer-consumer problem.
    23 The producer-consumer problem, also known as the bounded-buffer problem, was introduced by Dijkstra~\cite[\S~4.1]{Dijkstra65}.
    24 In the problem, threads interact with a buffer in two ways: producing threads insert values into the buffer and consuming threads remove values from the buffer.
    25 In general, a buffer needs protection to ensure a producer only inserts into a non-full buffer and a consumer only removes from a non-empty buffer (synchronization).
    26 As well, a buffer needs protection from concurrent access by multiple producers or consumers attempt to insert or remove simultaneously (MX).
    27 
    28 Channels come in three flavours of buffers:
    29 \begin{enumerate}
    30 \item
    31 Zero sized implies the communication is synchronous, \ie the producer must wait for the consumer to arrive or vice versa for a value to be communicated.
    32 \item
    33 Fixed sized (bounded) implies the communication is asynchronous, \ie the producer can proceed up to the buffer size and vice versa for the consumer with respect to removal.
    34 \item
    35 Infinite sized (unbounded) implies the communication is asynchronous, \ie the producer never waits but the consumer waits when the buffer is empty.
    36 Since memory is finite, all unbounded buffers are ultimately bounded;
    37 this restriction must be part of its implementation.
    38 \end{enumerate}
    39 
    40 In general, the order values are processed by the consumer does not affect the correctness of the producer-consumer problem.
    41 For example, the buffer can be LIFO, FIFO, or prioritized with respect to insertion and removal.
    42 However, like MX, a buffer should ensure every value is eventually removed after some reasonable bounded time (no long-term starvation).
    43 The simplest way to prevent starvation is to implement the buffer as a queue, either with a cyclic array or linked nodes.
     21Most channels in modern programming languages are built on top of a shared memory buffer.
     22While 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.
     23This turns the implementation of a channel into the producer-consumer problem.
     24The producer-consumer problem, also known as the bounded buffer problem, was introduced by Dijkstra in his book Cooperating Sequential Processes\cite{Dijkstra65}.
     25In 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.
     26The buffer needs to be protected from concurrent access since each item in the buffer should only be produced and consumed once.
     27Additionally, a consumer can only remove from a non-empty buffer and a producer can only insert into a non-full buffer.
    4428
    4529\section{First-Come First-Served}
    46 As pointed out, a bounded buffer requires MX among multiple producers or consumers.
    47 This MX should be fair among threads, independent of the FIFO buffer being fair among values.
    48 Fairness among threads is called \gls{fcfs} and was defined by Lamport~\cite[p.~454]{Lamport74}.
     30The channel implementations that will be discussed are \gls{fcfs}.
     31This term was defined by Lamport~\cite{Lamport74}.
    4932\gls{fcfs} is defined in relation to a doorway~\cite[p.~330]{Lamport86II}, which is the point at which an ordering among threads can be established.
    50 Given this doorway, a CS is said to be \gls{fcfs}, if threads access the shared resource in the order they proceed through the doorway.
    51 A consequence of \gls{fcfs} execution is the elimination of \Newterm{barging}, where barging means a thread arrives at a CS with waiting threads, and the MX protecting the CS allows the arriving thread to enter the CS ahead of one or more of the waiting threads.
    52 
    53 \gls{fcfs} is a fairness property that prevents unequal access to the shared resource and prevents starvation, however it comes at a cost.
    54 Implementing an algorithm with \gls{fcfs} can lead to double blocking, where arriving threads block outside the doorway waiting for a thread in the lock entry-protocol and inside the doorway waiting for a thread in the CS.
    55 An analogue is boarding an airplane: first you wait to get through security to the departure gates (short term), and then wait again at the departure gate for the airplane (long term).
    56 As such, algorithms that are not \gls{fcfs} (barging) can be more performant by skipping the wait for the CS and entering directly;
    57 however, this performance gain comes by introducing unfairness with possible starvation for waiting threads.
     33Given 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.
     35Implementing 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.
     36As such algorithms that are not \gls{fcfs} may be more performant but that performance comes with the downside of likely introducing starvation and unfairness.
    5837
    5938\section{Channel Implementation}
    60 Currently, only the Go programming language~\cite{Go} provides user-level threading where the primary communication mechanism is channels.
    61 Experiments were conducted that varied the producer-consumer problem algorithm and lock type used inside the channel.
     39The channel implementation in \CFA is a near carbon copy of the Go implementation.
     40Experimentation was conducted that varied the producer-consumer problem algorithm and lock type used inside the channel.
    6241With the exception of non-\gls{fcfs} algorithms, no algorithm or lock usage in the channel implementation was found to be consistently more performant that Go's choice of algorithm and lock implementation.
    63 Therefore, the low-level channel implementation in \CFA is largely copied from the Go implementation, but adapted to the \CFA type and runtime systems.
    6442As such the research contributions added by \CFA's channel implementation lie in the realm of safety and productivity features.
    65 
    66 \PAB{Discuss the Go channel implementation. Need to tie in FIFO buffer and FCFS locking.}
    67 
    68 In this work, all channels are implemented with bounded buffers, so there is no zero-sized buffering.
    69 \CAP{I do have zero size channels implemented, however I don't focus on them since I think they are uninteresting as they are just a thin layer over binary semaphores. Should I mention that I support it but omit discussion or just leave it out?}
    7043
    7144\section{Safety and Productivity}
     
    7447
    7548\begin{itemize}
    76 \item Toggle-able statistic collection on channel behaviour that count channel and blocking operations.
    77 Tracking blocking operations helps illustrate usage and then tune the channel size, where the aim is to reduce blocking.
     49\item Toggle-able statistic collection on channel behaviour that counts channel operations, and the number of the operations that block.
     50Tracking 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.
    7851\item Deadlock detection on deallocation of the channel.
    79 If threads are blocked inside the channel when it terminates, this case is detected and the user is informed, as this can cause a deadlock.
    80 \item A @flush@ routine that delivers copies of an element to all waiting consumers, flushing the buffer.
     52If 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.
    8154Programmers can use this to easily to broadcast data to multiple consumers.
    82 Additionally, the @flush@ routine is more performant then looping around the @insert@ operation since it can deliver the elements without having to reacquire mutual exclusion for each element sent.
     55Additionally, 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.
    8356\end{itemize}
    8457
     
    9467% C_TODO: add reference to select chapter, add citation to go channels info
    9568Go channels provide a set of tools to help with concurrent shutdown.
    96 Channels in Go have a @close@ operation and a \Go{select} statement that both can be used to help threads terminate.
    97 The \Go{select} statement will be discussed in \ref{}, where \CFA's @waituntil@ statement will be compared with the Go \Go{select} statement.
    98 The @close@ operation on a channel in Go changes the state of the channel.
    99 When a channel is closed, sends to the channel will panic and additional calls to @close@ will panic.
     69Channels in Go have a \code{close} operation and a \code{select} statement that both can be used to help threads terminate.
     70The \code{select} statement will be discussed in \ref{}, where \CFA's \code{waituntil} statement will be compared with the Go \code{select} statement.
     71The \code{close} operation on a channel in Go changes the state of the channel.
     72When a channel is closed, sends to the channel will panic and additional calls to \code{close} will panic.
    10073Receives are handled differently where receivers will never block on a closed channel and will continue to remove elements from the channel.
    10174Once a channel is empty, receivers can continue to remove elements, but will receive the zero-value version of the element type.
    10275To aid in avoiding unwanted zero-value elements, Go provides the ability to iterate over a closed channel to remove the remaining elements.
    103 These design choices for Go channels enforce a specific interaction style with channels during termination, where careful thought is needed to ensure that additional @close@ calls don't occur and that no sends occur after channels are closed.
     76These 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.
    10477These 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.
    10578If errors need to occur in Go, return codes are used to pass error information where they are needed.
     
    10881While 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.
    10982Since both closing and sending panic, once a channel is closed, a user often has to synchronize the senders to a channel before the channel can be closed to avoid panics.
    110 However, in doing so it renders the @close@ operation nearly useless, as the only utilities it provides are the ability to ensure that receivers no longer block on the channel, and will receive zero-valued elements.
    111 This can be useful if the zero-typed element is recognized as a sentinel value, but if another sentinel value is preferred, then @close@ only provides its non-blocking feature.
    112 To avoid \gls{toctou} issues during shutdown, a busy wait with a \Go{select} statement is often used to add or remove elements from a channel.
     83However, 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.
     84This 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.
     85To 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.
    11386Due to Go's asymmetric approach to channel shutdown, separate synchronization between producers and consumers of a channel has to occur during shutdown.
    11487
     
    11891The difference between the exception handling mechanisms arises after the exception is handled.
    11992In termination handling, the control flow continues into the code following the catch after the exception is handled.
    120 In resumption handling, the control flow returns to the site of the @throw@, allowing the control to continue where it left off.
     93In resumption handling, the control flow returns to the site of the \code{throw}, allowing the control to continue where it left off.
    12194Note that in resumption, since control can return to the point of error propagation, the stack is not unwound during resumption propagation.
    12295In \CFA if a resumption is not handled, it is reraised as a termination.
     
    129102These termination exceptions allow for non-local transfer that can be used to great effect to eagerly and gracefully shut down a thread.
    130103When a channel is closed, if there are any blocked producers or consumers inside the channel, they are woken up and also have a resumption thrown at them.
    131 The resumption exception, @channel_closed@, has a couple fields to aid in handling the exception.
     104The resumption exception, \code{channel_closed}, has a couple fields to aid in handling the exception.
    132105The exception contains a pointer to the channel it was thrown from, and a pointer to an element.
    133106In exceptions thrown from remove the element pointer will be null.
     
    143116Both of these examples are implemented using \CFA syntax so that they can be easily compared.
    144117Listing~\ref{l:go_chan_bar} uses go-style channel close semantics and Listing~\ref{l:cfa_chan_bar} uses \CFA close semantics.
    145 In this problem it is infeasible to use the Go @close@ call since all tasks are both potentially producers and consumers, causing panics on close to be unavoidable.
     118In 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.
    146119As 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.
    147120This sentinel value has to be checked at two points.
    148 Furthermore, an additional flag @done@ is needed to communicate to threads once they have left the barrier that they are done.
     121Furthermore, an additional flag \code{done} is needed to communicate to threads once they have left the barrier that they are done.
    149122This 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.
    150123In 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.
     
    274247
    275248In Listing~\ref{l:cfa_resume} an example of channel closing with resumption is used.
    276 This program uses resumption in the @Consumer@ thread main to ensure that all elements in the channel are removed before the consumer thread terminates.
    277 The producer only has a @catch@ so the moment it receives an exception it terminates, whereas the consumer will continue to remove from the closed channel via handling resumptions until the buffer is empty, which then throws a termination exception.
     249This program uses resumption in the \code{Consumer} thread main to ensure that all elements in the channel are removed before the consumer thread terminates.
     250The 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.
    278251If 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.
    279252
  • doc/theses/colby_parsons_MMAth/text/frontpgs.tex

    r3982384 r6e4c44d  
    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.
    83 \CFA is a non-object-oriented programming language that extends C.
    84 The foundation for concurrency in \CFA was laid by Thierry Delisle~\cite{Delisle18}, who implemented coroutines, user-level threads, and monitors.
    85 This thesis builds upon that work and introduces a suite of new concurrent features as its main contribution.
    86 The features include a @mutex@ statement (similar to a \CC scoped lock or Java \lstinline[language=Java]{synchronized} statement), Go-like channels and \lstinline[language=Go]{select} statement, and an actor system.
    87 The root ideas behind these features are not new, but the \CFA implementations extends the original ideas in performance, productivity, and safety.
     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. \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.
    8883
    8984\cleardoublepage
  • doc/theses/colby_parsons_MMAth/text/intro.tex

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

    r3982384 r6e4c44d  
    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 and efficient abstraction for providing mutual exclusion and synchronization for shared-memory systems.
    29 First proposed by Brinch Hansen~\cite{Hansen73} and later described and extended by C.A.R.~Hoare~\cite{Hoare74}.
    30 Several concurrent programming languages provide monitors as an explicit language construct: \eg Concurrent Pascal~\cite{ConcurrentPascal}, Mesa~\cite{Mesa}, Turing~\cite{Turing:old}, Modula-3~\cite{Modula-3}, \uC~\cite{Buhr92a} and Java~\cite{Java}.
     28\CFA provides a high-level locking object, called a \Newterm{monitor}, an elegant, efficient, high-level mechanisms for mutual exclusion and synchronization for shared-memory systems.
     29First 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}.
    3130In 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.
    3231
    3332Figure~\ref{f:AtomicCounter} shows a \CFA and Java monitor implementing an atomic counter.
    3433A \Newterm{monitor} is a programming technique that implicitly binds mutual exclusion to static function scope by call and return.
    35 In contrast, lock mutual exclusion, defined by acquire/release calls, is independent of lexical context (analogous to block versus heap storage allocation).
     34Lock mutual exclusion, defined by acquire/release calls, is independent of lexical context (analogous to block versus heap storage allocation).
    3635Restricting acquire and release points in a monitor eases programming, comprehension, and maintenance, at a slight cost in flexibility and efficiency.
    3736Ultimately, a monitor is implemented using a combination of basic locks and atomic instructions.
     
    111110To increase locking flexibility, some languages introduce a mutex statement.
    112111\VRef[Figure]{f:ReadersWriter} shows the outline of a reader/writer lock written as a \CFA monitor and mutex statements.
    113 (The exact lock implementation is irrelevant.)
     112(The exact lock implement is irrelevant.)
    114113The @read@ and @write@ functions are called with a reader/write lock and any arguments to perform reading or writing.
    115114The @read@ function is not MX because multiple readers can read simultaneously.
     
    272271The @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.
    273272This repeats after selecting a new starting point in a cyclic manner until all locks are acquired successfully.
    274 This deadlock avoidance algorithm is shown in Figure~\ref{f:cc_deadlock_avoid}.
     273This deadlock avoidance algorithm is shown in Listing~\ref{l:cc_deadlock_avoid}.
    275274The algorithm is taken directly from the source code of the @<mutex>@ header, with some renaming and comments for clarity.
    276275
    277 \begin{figure}
    278 \begin{cfa}
     276\begin{cfa}[caption={\CC \lstinline{scoped_lock} deadlock avoidance algorithm},label={l:cc_deadlock_avoid}]
    279277int first = 0;  // first lock to attempt to lock
    280278do {
     
    293291} while ( ! locks[first].owns_lock() );  $\C{// is first lock held?}$
    294292\end{cfa}
    295 \caption{\CC \lstinline{scoped_lock} deadlock avoidance algorithm}
    296 \label{f:cc_deadlock_avoid}
    297 \end{figure}
    298 
    299 While this algorithm successfully avoids deadlock, there is a livelock scenario.
     293
     294While the algorithm in \ref{l:cc_deadlock_avoid} successfully avoids deadlock, there is a livelock scenario.
    300295Assume two threads, $A$ and $B$, create a @scoped_lock@ accessing two locks, $L1$ and $L2$.
    301296A livelock can form as follows.
     
    340335\end{cquote}
    341336Comparatively, if the @scoped_lock@ is used and the same locks are acquired elsewhere, there is no concern of the @scoped_lock@ deadlocking, due to its avoidance scheme, but it may livelock.
    342 The convenience and safety of the @mutex@ statement, \eg guaranteed lock release with exceptions, should encourage programmers to always use it for locking, mitigating any deadlock scenario versus combining manual locking with the mutex statement.
     337The 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.
    343338
    344339\section{Performance}
     
    350345
    351346The benchmark used to evaluate the avoidance algorithms repeatedly acquires a fixed number of locks in a random order and then releases them.
    352 The pseudocode for the deadlock avoidance benchmark is shown in \VRef[Listing]{l:deadlock_avoid_pseudo}.
     347The pseudo code for the deadlock avoidance benchmark is shown in \VRef[Listing]{l:deadlock_avoid_pseudo}.
    353348To 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.
    354349The benchmarks are run for a fixed duration of 10 seconds and then terminate.
     
    357352The median is calculated and is plotted alongside the 95\% confidence intervals for each point.
    358353
    359 \begin{cfa}[caption={Deadlock avoidance benchmark pseudocode},label={l:deadlock_avoid_pseudo}]
    360 
    361 size_t n_locks; $\C{// number of locks}$
    362 size_t n_thds; $\C{// number of threads}$
    363 size_t n_gens; $\C{// number of random orderings (default 100)}$
    364 size_t total = 0; $\C{// global throughput aggregator}$
    365 volatile bool done = false; $\C{// termination flag}$
    366 
    367 test_spinlock locks[n_locks];
    368 size_t rands[n_thds][n_locks * n_gens]; $\C{// random ordering per thread}$
    369 
    370 void main( worker & w ) with(w) { $\C{// thread main}$
    371     size_t count = 0, idx = 0;
    372     while ( !done ) {
    373         idx = (count % n_locks * n_gens) * n_locks; $\C{// get start of next sequence}$
    374         mutex(locks[rands[0]], ..., locks[rands[n_locks - 1]]){} $\C{// lock sequence of locks}$
    375         count++;
    376     }
    377     __atomic_add_fetch(&total, count, __ATOMIC_SEQ_CST); $\C{// atomically add to total}$
    378 }
    379 
    380 int main( int argc, char * argv[] ) {
    381     gen_orders(); $\C{// generate random orderings}$
    382     {
    383         worker w[n_thds];
    384         sleep( 10`s );
    385         done = true;
    386     }
    387     printf( "%lu\n", total );
    388 }
     354\begin{cfa}[caption={Deadlock avoidance bendchmark pseudo code},label={l:deadlock_avoid_pseudo}]
     355
     356
     357
     358$\PAB{// add pseudo code}$
     359
     360
    389361
    390362\end{cfa}
     
    402374
    403375Figure~\ref{f:mutex_bench} shows the results of the benchmark experiments.
     376\PAB{Make the points in the graphs for each line different.
     377Also, make the text in the graphs larger.}
    404378The 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.
    405379The avoidance result for both languages is significantly different, where \CFA's mutex statement achieves throughput that is magnitudes higher than \CC's @scoped_lock@.
     
    409383For 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.
    410384It is likely that shorter bouts of livelock occurred in many of the experiments, which would explain large confidence intervals for some of the data points in the \CC data.
    411 In Figures~\ref{f:mutex_bench8_AMD} and \ref{f:mutex_bench8_Intel} there is the counter-intuitive result of the mutex statement performing better than the baseline.
    412 At 7 locks and above the mutex statement switches from a hard coded sort to insertion sort, which should decrease performance.
    413 It is likely the increase in throughput compared to baseline is due to the delay spent in the insertion sort, which decreases contention on the locks.
     385In Figures~\ref{f:mutex_bench8_AMD} and \ref{f:mutex_bench8_Intel} the mutex statement performs better than the baseline.
     386At 7 locks and above the mutex statement switches from a hard coded sort to insertion sort.
     387It 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.
    414388
    415389\begin{figure}
  • libcfa/src/Makefile.am

    r3982384 r6e4c44d  
    115115        concurrency/kernel/fwd.hfa \
    116116        concurrency/mutex_stmt.hfa \
     117    concurrency/select.hfa \
    117118    concurrency/channel.hfa \
    118119    concurrency/actor.hfa
     
    127128        concurrency/monitor.hfa \
    128129        concurrency/mutex.hfa \
    129     concurrency/select.hfa \
    130130        concurrency/thread.hfa
    131131
  • libcfa/src/bits/weakso_locks.cfa

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

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

    r3982384 r6e4c44d  
    1 //
    2 // Cforall Version 1.0.0 Copyright (C) 2021 University of 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 
    171#pragma once
    182
    193#include <locks.hfa>
    204#include <list.hfa>
    21 #include "select.hfa"
     5#include <mutex_stmt.hfa>
     6
     7// link field used for threads waiting on channel
     8struct 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};
     18P9_EMBEDDED( wait_link, dlink(wait_link) )
     19
     20static 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
     26static inline void wake_one( dlist( wait_link ) & queue ) {
     27    wait_link & popped = try_pop_front( queue );
     28    unpark( popped.t );
     29}
    2230
    2331// returns true if woken due to shutdown
    2432// blocks thread on list and releases passed lock
    25 static inline bool block( dlist( select_node ) & queue, void * elem_ptr, go_mutex & lock ) {
    26     select_node sn{ active_thread(), elem_ptr };
    27     insert_last( queue, sn );
     33static 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 );
    2836    unlock( lock );
    2937    park();
    30     return sn.extra == 0p;
    31 }
    32 
    33 // Waituntil support (un)register_select helper routine
    34 // Sets select node avail if not special OR case and then unlocks
    35 static inline void __set_avail_then_unlock( select_node & node, go_mutex & mutex_lock ) {
    36     if ( node.park_counter ) __make_select_node_available( node );
    37     unlock( mutex_lock );
     38    return w.elem == 0p;
    3839}
    3940
     
    5859    size_t size, front, back, count;
    5960    T * buffer;
    60     dlist( select_node ) prods, cons; // lists of blocked threads
    61     go_mutex mutex_lock;              // MX lock
    62     bool closed;                      // indicates channel close/open
     61    dlist( wait_link ) prods, cons; // lists of blocked threads
     62    go_mutex mutex_lock;            // MX lock
     63    bool closed;                    // indicates channel close/open
    6364    #ifdef CHAN_STATS
    6465    size_t blocks, operations;      // counts total ops and ops resulting in a blocked thd
     
    6970    size = _size;
    7071    front = back = count = 0;
    71     if ( size != 0 ) buffer = aalloc( size );
     72    buffer = aalloc( size );
    7273    prods{};
    7374    cons{};
     
    8687    #endif
    8788    verifyf( cons`isEmpty && prods`isEmpty, "Attempted to delete channel with waiting threads (Deadlock).\n" );
    88     if ( size != 0 ) delete( buffer );
    89 }
    90 static inline size_t get_count( channel(T) & chan ) with(chan) { return __atomic_load_n( &count, __ATOMIC_RELAXED ); }
    91 static inline size_t get_size( channel(T) & chan ) with(chan) { return __atomic_load_n( &size, __ATOMIC_RELAXED ); }
     89    delete( buffer );
     90}
     91static inline size_t get_count( channel(T) & chan ) with(chan) { return count; }
     92static inline size_t get_size( channel(T) & chan ) with(chan) { return size; }
    9293static inline bool has_waiters( channel(T) & chan ) with(chan) { return !cons`isEmpty || !prods`isEmpty; }
    9394static inline bool has_waiting_consumers( channel(T) & chan ) with(chan) { return !cons`isEmpty; }
     
    101102    // flush waiting consumers and producers
    102103    while ( has_waiting_consumers( chan ) ) {
    103         if( !__handle_waituntil_OR( cons ) ) // ensure we only signal special OR case threads when they win the race
    104             break;  // if __handle_waituntil_OR returns false cons is empty so break
    105         cons`first.extra = 0p;
     104        cons`first.elem = 0p;
    106105        wake_one( cons );
    107106    }
    108107    while ( has_waiting_producers( chan ) ) {
    109         if( !__handle_waituntil_OR( prods ) ) // ensure we only signal special OR case threads when they win the race
    110             break;  // if __handle_waituntil_OR returns false prods is empty so break
    111         prods`first.extra = 0p;
     108        prods`first.elem = 0p;
    112109        wake_one( prods );
    113110    }
     
    117114static inline void is_closed( channel(T) & chan ) with(chan) { return closed; }
    118115
    119 // used to hand an element to a blocked consumer and signal it
    120 static inline void __cons_handoff( channel(T) & chan, T & elem ) with(chan) {
    121     memcpy( cons`first.extra, (void *)&elem, sizeof(T) ); // do waiting consumer work
    122     wake_one( cons );
    123 }
    124 
    125 // used to hand an element to a blocked producer and signal it
    126 static inline void __prods_handoff( channel(T) & chan, T & retval ) with(chan) {
    127     memcpy( (void *)&retval, prods`first.extra, sizeof(T) );
    128     wake_one( prods );
    129 }
    130 
    131116static inline void flush( channel(T) & chan, T elem ) with(chan) {
    132117    lock( mutex_lock );
    133118    while ( count == 0 && !cons`isEmpty ) {
    134         __cons_handoff( chan, elem );
     119        memcpy(cons`first.elem, (void *)&elem, sizeof(T)); // do waiting consumer work
     120        wake_one( cons );
    135121    }
    136122    unlock( mutex_lock );
     
    139125// handles buffer insert
    140126static inline void __buf_insert( channel(T) & chan, T & elem ) with(chan) {
    141     memcpy( (void *)&buffer[back], (void *)&elem, sizeof(T) );
     127    memcpy((void *)&buffer[back], (void *)&elem, sizeof(T));
    142128    count += 1;
    143129    back++;
     
    145131}
    146132
     133// does the buffer insert or hands elem directly to consumer if one is waiting
     134static 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
    147141// needed to avoid an extra copy in closed case
    148142static inline bool __internal_try_insert( channel(T) & chan, T & elem ) with(chan) {
     
    151145    operations++;
    152146    #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 
    161147    if ( count == size ) { unlock( mutex_lock ); return false; }
    162 
    163     __buf_insert( chan, elem );
     148    __do_insert( chan, elem );
    164149    unlock( mutex_lock );
    165150    return true;
     
    172157// handles closed case of insert routine
    173158static inline void __closed_insert( channel(T) & chan, T & elem ) with(chan) {
    174     channel_closed except{ &channel_closed_vt, &elem, &chan };
     159    channel_closed except{&channel_closed_vt, &elem, &chan };
    175160    throwResume except; // throw closed resumption
    176161    if ( !__internal_try_insert( chan, elem ) ) throw except; // if try to insert fails (would block), throw termination
     
    197182    }
    198183
    199     // buffer count must be zero if cons are blocked (also handles zero-size case)
    200     ConsEmpty: if ( !cons`isEmpty ) {
    201         if ( !__handle_waituntil_OR( cons ) ) break ConsEmpty;
    202         __cons_handoff( chan, elem );
     184    // have to check for the zero size channel case
     185    if ( size == 0 && !cons`isEmpty ) {
     186        memcpy(cons`first.elem, (void *)&elem, sizeof(T));
     187        wake_one( cons );
    203188        unlock( mutex_lock );
    204         return;
     189        return true;
    205190    }
    206191
     
    217202    } // if
    218203
    219     __buf_insert( chan, elem );
    220     unlock( mutex_lock );
     204    if ( count == 0 && !cons`isEmpty ) {
     205        memcpy(cons`first.elem, (void *)&elem, sizeof(T)); // do waiting consumer work
     206        wake_one( cons );
     207    } else __buf_insert( chan, elem );
     208   
     209    unlock( mutex_lock );
     210    return;
     211}
     212
     213// handles buffer remove
     214static inline void __buf_remove( channel(T) & chan, T & retval ) with(chan) {
     215    memcpy((void *)&retval, (void *)&buffer[front], sizeof(T));
     216    count -= 1;
     217    front = (front + 1) % size;
    221218}
    222219
    223220// does the buffer remove and potentially does waiting producer work
    224221static inline void __do_remove( channel(T) & chan, T & retval ) with(chan) {
    225     memcpy( (void *)&retval, (void *)&buffer[front], sizeof(T) );
    226     count -= 1;
    227     front = (front + 1) % size;
     222    __buf_remove( chan, retval );
    228223    if (count == size - 1 && !prods`isEmpty ) {
    229         if ( !__handle_waituntil_OR( prods ) ) return;
    230         __buf_insert( chan, *(T *)prods`first.extra );  // do waiting producer work
     224        __buf_insert( chan, *(T *)prods`first.elem );  // do waiting producer work
    231225        wake_one( prods );
    232226    }
     
    239233    operations++;
    240234    #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 
    249235    if ( count == 0 ) { unlock( mutex_lock ); return false; }
    250 
    251236    __do_remove( chan, retval );
    252237    unlock( mutex_lock );
     
    259244static inline [T, bool] try_remove( channel(T) & chan ) {
    260245    T retval;
    261     bool success = __internal_try_remove( chan, retval );
    262     return [ retval, success ];
    263 }
    264 
    265 static inline T try_remove( channel(T) & chan ) {
     246    return [ retval, __internal_try_remove( chan, retval ) ];
     247}
     248
     249static inline T try_remove( channel(T) & chan, T elem ) {
    266250    T retval;
    267251    __internal_try_remove( chan, retval );
     
    271255// handles closed case of insert routine
    272256static inline void __closed_remove( channel(T) & chan, T & retval ) with(chan) {
    273     channel_closed except{ &channel_closed_vt, 0p, &chan };
     257    channel_closed except{&channel_closed_vt, 0p, &chan };
    274258    throwResume except; // throw resumption
    275259    if ( !__internal_try_remove( chan, retval ) ) throw except; // if try to remove fails (would block), throw termination
     
    295279
    296280    // have to check for the zero size channel case
    297     ZeroSize: if ( size == 0 && !prods`isEmpty ) {
    298         if ( !__handle_waituntil_OR( prods ) ) break ZeroSize;
    299         __prods_handoff( chan, retval );
     281    if ( size == 0 && !prods`isEmpty ) {
     282        memcpy((void *)&retval, (void *)prods`first.elem, sizeof(T));
     283        wake_one( prods );
    300284        unlock( mutex_lock );
    301285        return retval;
     
    303287
    304288    // wait if buffer is empty, work will be completed by someone else
    305     if ( count == 0 ) {
     289    if (count == 0) {
    306290        #ifdef CHAN_STATS
    307291        blocks++;
     
    315299    // Remove from buffer
    316300    __do_remove( chan, retval );
     301
    317302    unlock( mutex_lock );
    318303    return retval;
    319304}
    320 
    321 ///////////////////////////////////////////////////////////////////////////////////////////
    322 // The following is support for waituntil (select) statements
    323 ///////////////////////////////////////////////////////////////////////////////////////////
    324 static inline bool unregister_chan( channel(T) & chan, select_node & node ) with(chan) {
    325     // if ( !node`isListed && !node.park_counter ) return false; // handle special OR case C_TODO: try adding this back
    326     lock( mutex_lock );
    327     if ( node`isListed ) { // op wasn't performed
    328         #ifdef CHAN_STATS
    329         operations--;
    330         #endif
    331         remove( node );
    332         unlock( mutex_lock );
    333         return false;
    334     }
    335     unlock( mutex_lock );
    336 
    337     // only return true when not special OR case, not exceptional calse and status is SAT
    338     return ( node.extra == 0p || !node.park_counter ) ? false : *node.clause_status == __SELECT_SAT;
    339 }
    340 
    341 // type used by select statement to capture a chan read as the selected operation
    342 struct chan_read {
    343     T & ret;
    344     channel(T) & chan;
    345 };
    346 
    347 static inline void ?{}( chan_read(T) & cr, channel(T) & chan, T & ret ) {
    348     &cr.chan = &chan;
    349     &cr.ret = &ret;
    350 }
    351 static inline chan_read(T) ?<<?( T & ret, channel(T) & chan ) { chan_read(T) cr{ chan, ret }; return cr; }
    352 
    353 static inline void __handle_select_closed_read( chan_read(T) & this, select_node & node ) with(this.chan, this) {
    354     __closed_remove( chan, ret );
    355     // if we get here then the insert succeeded
    356     __make_select_node_available( node );
    357 }
    358 
    359 static inline bool register_select( chan_read(T) & this, select_node & node ) with(this.chan, this) {
    360     lock( mutex_lock );
    361     node.extra = &ret; // set .extra so that if it == 0p later in on_selected it is due to channel close
    362 
    363     #ifdef CHAN_STATS
    364     if ( !closed ) operations++;
    365     #endif
    366 
    367     if ( !node.park_counter ) {
    368         // are we special case OR and front of cons is also special case OR
    369         if ( !unlikely(closed) && !prods`isEmpty && prods`first.clause_status && !prods`first.park_counter ) {
    370             if ( !__make_select_node_pending( node ) ) {
    371                 unlock( mutex_lock );
    372                 return false;
    373             }
    374            
    375             if ( __handle_waituntil_OR( prods ) ) {
    376                 __prods_handoff( chan, ret );
    377                 __make_select_node_sat( node ); // need to to mark SAT now that we know operation is done or else threads could get stuck in __mark_select_node
    378                 unlock( mutex_lock );
    379                 return true;
    380             }
    381             __make_select_node_unsat( node );
    382         }
    383         // check if we can complete operation. If so race to establish winner in special OR case
    384         if ( count != 0 || !prods`isEmpty || unlikely(closed) ) {
    385             if ( !__make_select_node_available( node ) ) { // we didn't win the race so give up on registering
    386                 unlock( mutex_lock );
    387                 return false;
    388             }
    389         }
    390     }
    391 
    392     if ( unlikely(closed) ) {
    393         unlock( mutex_lock );
    394         __handle_select_closed_read( this, node );
    395         return true;
    396     }
    397 
    398     // have to check for the zero size channel case
    399     ZeroSize: if ( size == 0 && !prods`isEmpty ) {
    400         if ( !__handle_waituntil_OR( prods ) ) break ZeroSize;
    401         __prods_handoff( chan, ret );
    402         __set_avail_then_unlock( node, mutex_lock );
    403         return true;
    404     }
    405 
    406     // wait if buffer is empty, work will be completed by someone else
    407     if ( count == 0 ) {
    408         #ifdef CHAN_STATS
    409         blocks++;
    410         #endif
    411        
    412         insert_last( cons, node );
    413         unlock( mutex_lock );
    414         return false;
    415     }
    416 
    417     // Remove from buffer
    418     __do_remove( chan, ret );
    419     __set_avail_then_unlock( node, mutex_lock );
    420     return true;
    421 }
    422 static inline bool unregister_select( chan_read(T) & this, select_node & node ) { return unregister_chan( this.chan, node ); }
    423 static inline bool on_selected( chan_read(T) & this, select_node & node ) with(this) {
    424     if ( node.extra == 0p ) // check if woken up due to closed channel
    425         __closed_remove( chan, ret );
    426     // This is only reachable if not closed or closed exception was handled
    427     return true;
    428 }
    429 
    430 // type used by select statement to capture a chan write as the selected operation
    431 struct chan_write {
    432     T elem;
    433     channel(T) & chan;
    434 };
    435 
    436 static inline void ?{}( chan_write(T) & cw, channel(T) & chan, T elem ) {
    437     &cw.chan = &chan;
    438     memcpy( (void *)&cw.elem, (void *)&elem, sizeof(T) );
    439 }
    440 static inline chan_write(T) ?>>?( T elem, channel(T) & chan ) { chan_write(T) cw{ chan, elem }; return cw; }
    441 
    442 static inline void __handle_select_closed_write( chan_write(T) & this, select_node & node ) with(this.chan, this) {
    443     __closed_insert( chan, elem );
    444     // if we get here then the insert succeeded
    445     __make_select_node_available( node );
    446 }
    447 
    448 static inline bool register_select( chan_write(T) & this, select_node & node ) with(this.chan, this) {
    449     lock( mutex_lock );
    450     node.extra = &elem; // set .extra so that if it == 0p later in on_selected it is due to channel close
    451 
    452     #ifdef CHAN_STATS
    453     if ( !closed ) operations++;
    454     #endif
    455 
    456     // special OR case handling
    457     if ( !node.park_counter ) {
    458         // are we special case OR and front of cons is also special case OR
    459         if ( !unlikely(closed) && !cons`isEmpty && cons`first.clause_status && !cons`first.park_counter ) {
    460             if ( !__make_select_node_pending( node ) ) {
    461                 unlock( mutex_lock );
    462                 return false;
    463             }
    464            
    465             if ( __handle_waituntil_OR( cons ) ) {
    466                 __cons_handoff( chan, elem );
    467                 __make_select_node_sat( node ); // need to to mark SAT now that we know operation is done or else threads could get stuck in __mark_select_node
    468                 unlock( mutex_lock );
    469                 return true;
    470             }
    471             __make_select_node_unsat( node );
    472         }
    473         // check if we can complete operation. If so race to establish winner in special OR case
    474         if ( count != size || !cons`isEmpty || unlikely(closed) ) {
    475             if ( !__make_select_node_available( node ) ) { // we didn't win the race so give up on registering
    476                 unlock( mutex_lock );
    477                 return false;
    478             }
    479         }
    480     }
    481 
    482     // if closed handle
    483     if ( unlikely(closed) ) {
    484         unlock( mutex_lock );
    485         __handle_select_closed_write( this, node );
    486         return true;
    487     }
    488 
    489     // handle blocked consumer case via handoff (buffer is implicitly empty)
    490     ConsEmpty: if ( !cons`isEmpty ) {
    491         if ( !__handle_waituntil_OR( cons ) ) break ConsEmpty;
    492         __cons_handoff( chan, elem );
    493         __set_avail_then_unlock( node, mutex_lock );
    494         return true;
    495     }
    496 
    497     // insert node in list if buffer is full, work will be completed by someone else
    498     if ( count == size ) {
    499         #ifdef CHAN_STATS
    500         blocks++;
    501         #endif
    502 
    503         insert_last( prods, node );
    504         unlock( mutex_lock );
    505         return false;
    506     } // if
    507 
    508     // otherwise carry out write either via normal insert
    509     __buf_insert( chan, elem );
    510     __set_avail_then_unlock( node, mutex_lock );
    511     return true;
    512 }
    513 static inline bool unregister_select( chan_write(T) & this, select_node & node ) { return unregister_chan( this.chan, node ); }
    514 
    515 static inline bool on_selected( chan_write(T) & this, select_node & node ) with(this) {
    516     if ( node.extra == 0p ) // check if woken up due to closed channel
    517         __closed_insert( chan, elem );
    518 
    519     // This is only reachable if not closed or closed exception was handled
    520     return true;
    521 }
    522 
    523305} // forall( T )
    524 
    525 
  • libcfa/src/concurrency/future.hfa

    r3982384 r6e4c44d  
    1919#include "monitor.hfa"
    2020#include "select.hfa"
    21 #include "locks.hfa"
    2221
    2322//----------------------------------------------------------------------------
     
    2726//  future_t is lockfree and uses atomics which aren't needed given we use locks here
    2827forall( T ) {
    29     // enum { FUTURE_EMPTY = 0, FUTURE_FULFILLED = 1 }; // Enums seem to be broken so feel free to add this back afterwards
     28    // enum(int) { FUTURE_EMPTY = 0, FUTURE_FULFILLED = 1 }; // Enums seem to be broken so feel free to add this back afterwards
    3029
    3130    // temporary enum replacement
     
    4544    };
    4645
     46    // C_TODO: perhaps allow exceptions to be inserted like uC++?
     47
    4748        static inline {
    4849
     
    5253        }
    5354
    54         void ?{}( future(T) & this ) {
     55        void ?{}(future(T) & this) {
    5556                        this.waiters{};
    5657            this.state = FUTURE_EMPTY;
     
    5960
    6061                // Reset future back to original state
    61                 void reset( future(T) & this ) with(this)
     62                void reset(future(T) & this) with(this)
    6263        {
    6364            lock( lock );
     
    8182        void _internal_flush( future(T) & this ) with(this) {
    8283            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
    8584                select_node &s = try_pop_front( waiters );
    8685
    87                 if ( s.clause_status == 0p ) // poke in result so that woken threads do not need to reacquire any locks
     86                if ( s.race_flag == 0p )
     87                    // poke in result so that woken threads do not need to reacquire any locks
     88                    // *(((future_node(T) &)s).my_result) = result;
    8889                    copy_T( result, *(((future_node(T) &)s).my_result) );
     90                else if ( !install_select_winner( s, &this ) ) continue;
    8991               
    90                 wake_one( waiters, s );
     92                // only unpark if future is not selected
     93                // or if it is selected we only unpark if we win the race
     94                unpark( s.blocked_thread );
    9195            }
    9296        }
    9397
    9498                // Fulfil the future, returns whether or not someone was unblocked
    95                 bool fulfil( future(T) & this, T val ) with(this) {
     99                bool fulfil( future(T) & this, T & val ) with(this) {
    96100            lock( lock );
    97101            if( state != FUTURE_EMPTY )
     
    149153        }
    150154
    151         bool register_select( future(T) & this, select_node & s ) with(this) {
    152             lock( lock );
    153 
    154             // check if we can complete operation. If so race to establish winner in special OR case
    155             if ( !s.park_counter && state != FUTURE_EMPTY ) {
    156                 if ( !__make_select_node_available( s ) ) { // we didn't win the race so give up on registering
    157                     unlock( lock );
    158                     return false;
    159                 }
    160             }
    161 
    162             // future not ready -> insert select node and return
     155        void * register_select( future(T) & this, select_node & s ) with(this) {
     156            lock( lock );
     157
     158            // future not ready -> insert select node and return 0p
    163159            if( state == FUTURE_EMPTY ) {
    164160                insert_last( waiters, s );
    165161                unlock( lock );
    166                 return false;
    167             }
    168 
    169             __make_select_node_available( s );
    170             unlock( lock );
    171             return true;
    172         }
    173 
    174         bool unregister_select( future(T) & this, select_node & s ) with(this) {
    175             if ( ! s`isListed ) return false;
     162                return 0p;
     163            }
     164
     165            // future ready and we won race to install it as the select winner return 1p
     166            if ( install_select_winner( s, &this ) ) {
     167                unlock( lock );
     168                return 1p;
     169            }
     170
     171            unlock( lock );
     172            // future ready and we lost race to install it as the select winner
     173            return 2p;
     174        }
     175
     176        void unregister_select( future(T) & this, select_node & s ) with(this) {
    176177            lock( lock );
    177178            if ( s`isListed ) remove( s );
    178179            unlock( lock );
    179             return false;
    180180        }
    181181               
    182         bool on_selected( future(T) & this, select_node & node ) { return true; }
    183182        }
    184183}
     
    187186// These futures below do not support select statements so they may not be as useful as 'future'
    188187//  however the 'single_future' is cheap and cheerful and is most likely more performant than 'future'
    189 //  since it uses raw atomics and no locks
     188//  since it uses raw atomics and no locks afaik
    190189//
    191190// As far as 'multi_future' goes I can't see many use cases as it will be less performant than 'future'
  • libcfa/src/concurrency/invoke.h

    r3982384 r6e4c44d  
    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
    219222                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;
    224223
    225224                PRNG_STATE_T random_state;                                              // fast random numbers
  • libcfa/src/concurrency/locks.cfa

    r3982384 r6e4c44d  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // locks.cfa -- LIBCFATHREAD
     7// locks.hfa -- 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         select_node node;
    82                 insert_last( blocked_threads, node );
     81                insert_last( blocked_threads, *thrd );
    8382                wait_count++;
    8483                unlock( lock );
    8584                park( );
    86         return;
    87         } else if ( owner == thrd && multi_acquisition ) { // multi acquisition lock is held by current thread
     85        }
     86        // multi acquisition lock is held by current thread
     87        else if ( owner == thrd && multi_acquisition ) {
    8888                recursion_count++;
    89         } else {  // lock isn't held
     89                unlock( lock );
     90        }
     91        // lock isn't held
     92        else {
    9093                owner = thrd;
    9194                recursion_count = 1;
    92         }
    93     unlock( lock );
     95                unlock( lock );
     96        }
    9497}
    9598
     
    114117}
    115118
    116 static inline void pop_node( blocking_lock & this ) with( this ) {
    117     __handle_waituntil_OR( blocked_threads );
    118     select_node * node = &try_pop_front( blocked_threads );
    119     if ( node ) {
    120         wait_count--;
    121         owner = node->blocked_thread;
    122         recursion_count = 1;
    123         // if ( !node->clause_status || __make_select_node_available( *node ) ) unpark( node->blocked_thread );
    124         wake_one( blocked_threads, *node );
    125     } else {
    126         owner = 0p;
    127         recursion_count = 0;
    128     }
     119static 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 );
    129125}
    130126
     
    138134        recursion_count--;
    139135        if ( recursion_count == 0 ) {
    140                 pop_node( this );
     136                pop_and_set_new_owner( this );
    141137        }
    142138        unlock( lock );
     
    151147        // lock held
    152148        if ( owner != 0p ) {
    153                 insert_last( blocked_threads, *(select_node *)t->link_node );
     149                insert_last( blocked_threads, *t );
    154150                wait_count++;
     151                unlock( lock );
    155152        }
    156153        // lock not held
     
    159156                recursion_count = 1;
    160157                unpark( t );
    161         }
    162     unlock( lock );
    163 }
    164 
    165 size_t on_wait( blocking_lock & this, __cfa_pre_park pp_fn, void * pp_datum ) with( this ) {
     158                unlock( lock );
     159        }
     160}
     161
     162size_t on_wait( blocking_lock & this ) with( this ) {
    166163        lock( lock __cfaabi_dbg_ctx2 );
    167164        /* paranoid */ verifyf( owner != 0p, "Attempt to release lock %p that isn't held", &this );
     
    170167        size_t ret = recursion_count;
    171168
    172         pop_node( this );
    173 
    174     select_node node;
    175     active_thread()->link_node = (void *)&node;
     169        pop_and_set_new_owner( this );
    176170        unlock( lock );
    177 
    178     pre_park_then_park( pp_fn, pp_datum );
    179 
    180171        return ret;
    181172}
     
    184175        recursion_count = recursion;
    185176}
    186 
    187 // waituntil() support
    188 bool register_select( blocking_lock & this, select_node & node ) with(this) {
    189     lock( lock __cfaabi_dbg_ctx2 );
    190         thread$ * thrd = active_thread();
    191 
    192         // single acquisition lock is held by current thread
    193         /* paranoid */ verifyf( owner != thrd || multi_acquisition, "Single acquisition lock holder (%p) attempted to reacquire the lock %p resulting in a deadlock.", owner, &this );
    194 
    195     if ( !node.park_counter && ( (owner == thrd && multi_acquisition) || owner == 0p ) ) { // OR special case
    196         if ( !__make_select_node_available( node ) ) { // we didn't win the race so give up on registering
    197            unlock( lock );
    198            return false;
    199         }
    200     }
    201 
    202         // lock is held by some other thread
    203         if ( owner != 0p && owner != thrd ) {
    204                 insert_last( blocked_threads, node );
    205                 wait_count++;
    206                 unlock( lock );
    207         return false;
    208         } else if ( owner == thrd && multi_acquisition ) { // multi acquisition lock is held by current thread
    209                 recursion_count++;
    210         } else {  // lock isn't held
    211                 owner = thrd;
    212                 recursion_count = 1;
    213         }
    214 
    215     if ( node.park_counter ) __make_select_node_available( node );
    216     unlock( lock );
    217     return true;
    218 }
    219 
    220 bool unregister_select( blocking_lock & this, select_node & node ) with(this) {
    221     lock( lock __cfaabi_dbg_ctx2 );
    222     if ( node`isListed ) {
    223         remove( node );
    224         wait_count--;
    225         unlock( lock );
    226         return false;
    227     }
    228    
    229     if ( owner == active_thread() ) {
    230         /* paranoid */ verifyf( recursion_count == 1 || multi_acquisition, "Thread %p attempted to unlock owner lock %p in waituntil unregister, which is not recursive but has a recursive count of %zu", active_thread(), &this, recursion_count );
    231         // if recursion count is zero release lock and set new owner if one is waiting
    232         recursion_count--;
    233         if ( recursion_count == 0 ) {
    234             pop_node( this );
    235         }
    236     }
    237         unlock( lock );
    238     return false;
    239 }
    240 
    241 bool on_selected( blocking_lock & this, select_node & node ) { return true; }
    242177
    243178//-----------------------------------------------------------------------------
     
    376311        int counter( condition_variable(L) & this ) with(this) { return count; }
    377312
    378         static void enqueue_thread( condition_variable(L) & this, info_thread(L) * i ) with(this) {
     313        static size_t queue_and_get_recursion( condition_variable(L) & this, info_thread(L) * i ) with(this) {
    379314                // add info_thread to waiting queue
    380315                insert_last( blocked_threads, *i );
    381316                count++;
    382         }
    383 
    384     static size_t block_and_get_recursion( info_thread(L) & i, __cfa_pre_park pp_fn, void * pp_datum ) {
    385         size_t recursion_count = 0;
    386                 if ( i.lock ) // if lock was passed get recursion count to reset to after waking thread
    387                         recursion_count = on_wait( *i.lock, pp_fn, pp_datum ); // this call blocks
    388                 else
    389             pre_park_then_park( pp_fn, pp_datum );
    390         return recursion_count;
    391     }
    392     static size_t block_and_get_recursion( info_thread(L) & i ) { return block_and_get_recursion( i, pre_park_noop, 0p ); }
     317                size_t recursion_count = 0;
     318                if (i->lock) {
     319                        // if lock was passed get recursion count to reset to after waking thread
     320                        recursion_count = on_wait( *i->lock );
     321                }
     322                return recursion_count;
     323        }
    393324
    394325        // helper for wait()'s' with no timeout
    395326        static void queue_info_thread( condition_variable(L) & this, info_thread(L) & i ) with(this) {
    396327                lock( lock __cfaabi_dbg_ctx2 );
    397         enqueue_thread( this, &i );
     328                size_t recursion_count = queue_and_get_recursion(this, &i);
    398329                unlock( lock );
    399330
    400331                // blocks here
    401         size_t recursion_count = block_and_get_recursion( i );
     332                park( );
    402333
    403334                // resets recursion count here after waking
    404                 if ( i.lock ) on_wakeup( *i.lock, recursion_count );
     335                if (i.lock) on_wakeup(*i.lock, recursion_count);
    405336        }
    406337
     
    409340                queue_info_thread( this, i );
    410341
    411     static void cond_alarm_register( void * node_ptr ) { register_self( (alarm_node_t *)node_ptr ); }
    412 
    413342        // helper for wait()'s' with a timeout
    414343        static void queue_info_thread_timeout( condition_variable(L) & this, info_thread(L) & info, Duration t, Alarm_Callback callback ) with(this) {
    415344                lock( lock __cfaabi_dbg_ctx2 );
    416         enqueue_thread( this, &info );
     345                size_t recursion_count = queue_and_get_recursion(this, &info);
    417346                alarm_node_wrap(L) node_wrap = { t, 0`s, callback, &this, &info };
    418347                unlock( lock );
    419348
    420                 // blocks here and registers alarm node before blocking after releasing locks to avoid deadlock
    421         size_t recursion_count = block_and_get_recursion( info, cond_alarm_register, (void *)(&node_wrap.alarm_node) );
    422                 // park();
     349                // registers alarm outside cond lock to avoid deadlock
     350                register_self( &node_wrap.alarm_node );
     351
     352                // blocks here
     353                park();
    423354
    424355                // unregisters alarm so it doesn't go off if this happens first
     
    426357
    427358                // resets recursion count here after waking
    428                 if ( info.lock ) on_wakeup( *info.lock, recursion_count );
     359                if (info.lock) on_wakeup(*info.lock, recursion_count);
    429360        }
    430361
     
    486417                info_thread( L ) i = { active_thread(), info, &l };
    487418                insert_last( blocked_threads, i );
    488                 size_t recursion_count = on_wait( *i.lock, pre_park_noop, 0p ); // blocks here
    489                 // park( );
     419                size_t recursion_count = on_wait( *i.lock );
     420                park( );
    490421                on_wakeup(*i.lock, recursion_count);
    491422        }
     
    528459        bool empty ( pthread_cond_var(L) & this ) with(this) { return blocked_threads`isEmpty; }
    529460
     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       
    530469        static void queue_info_thread_timeout( pthread_cond_var(L) & this, info_thread(L) & info, Duration t, Alarm_Callback callback ) with(this) {
    531470                lock( lock __cfaabi_dbg_ctx2 );
    532         insert_last( blocked_threads, info );
     471                size_t recursion_count = queue_and_get_recursion(this, &info);
    533472                pthread_alarm_node_wrap(L) node_wrap = { t, 0`s, callback, &this, &info };
    534473                unlock( lock );
    535474
    536                 // blocks here and registers alarm node before blocking after releasing locks to avoid deadlock
    537         size_t recursion_count = block_and_get_recursion( info, cond_alarm_register, (void *)(&node_wrap.alarm_node) );
    538 
    539                 // unregisters alarm so it doesn't go off if signal happens first
     475                // registers alarm outside cond lock to avoid deadlock
     476                register_self( &node_wrap.alarm_node );
     477
     478                // blocks here
     479                park();
     480
     481                // unregisters alarm so it doesn't go off if this happens first
    540482                unregister_self( &node_wrap.alarm_node );
    541483
    542484                // resets recursion count here after waking
    543                 if ( info.lock ) on_wakeup( *info.lock, recursion_count );
     485                if (info.lock) on_wakeup(*info.lock, recursion_count);
    544486        }
    545487
     
    551493                lock( lock __cfaabi_dbg_ctx2 );
    552494                info_thread( L ) i = { active_thread(), info, &l };
    553         insert_last( blocked_threads, i );
    554                 unlock( lock );
    555 
    556         // blocks here
    557                 size_t recursion_count = block_and_get_recursion( i );
    558 
    559                 on_wakeup( *i.lock, recursion_count );
     495                size_t recursion_count = queue_and_get_recursion(this, &i);
     496                unlock( lock );
     497                park( );
     498                on_wakeup(*i.lock, recursion_count);
    560499        }
    561500
     
    645584        return thrd != 0p;
    646585}
    647 
  • libcfa/src/concurrency/locks.hfa

    r3982384 r6e4c44d  
    3030#include "time.hfa"
    3131
    32 #include "select.hfa"
    33 
    3432#include <fstream.hfa>
    3533
     
    3937#include <unistd.h>
    4038
    41 typedef void (*__cfa_pre_park)( void * );
    42 
    43 static inline void pre_park_noop( void * ) {}
    44 
    45 //-----------------------------------------------------------------------------
    46 // is_blocking_lock
    47 forall( L & | sized(L) )
    48 trait is_blocking_lock {
    49         // For synchronization locks to use when acquiring
    50         void on_notify( L &, struct thread$ * );
    51 
    52         // For synchronization locks to use when releasing
    53         size_t on_wait( L &, __cfa_pre_park pp_fn, void * pp_datum );
    54 
    55         // to set recursion count after getting signalled;
    56         void on_wakeup( L &, size_t recursion );
    57 };
    58 
    59 static inline void pre_park_then_park( __cfa_pre_park pp_fn, void * pp_datum ) {
    60     pp_fn( pp_datum );
    61     park();
    62 }
    63 
    64 // macros for default routine impls for is_blocking_lock trait that do not wait-morph
    65 
    66 #define DEFAULT_ON_NOTIFY( lock_type ) \
    67     static inline void on_notify( lock_type & this, thread$ * t ){ unpark(t); }
    68 
    69 #define DEFAULT_ON_WAIT( lock_type ) \
    70     static inline size_t on_wait( lock_type & this, __cfa_pre_park pp_fn, void * pp_datum ) { \
    71         unlock( this ); \
    72         pre_park_then_park( pp_fn, pp_datum ); \
    73         return 0; \
    74     }
    75 
    76 // on_wakeup impl if lock should be reacquired after waking up
    77 #define DEFAULT_ON_WAKEUP_REACQ( lock_type ) \
    78     static inline void on_wakeup( lock_type & this, size_t recursion ) { lock( this ); }
    79 
    80 // on_wakeup impl if lock will not be reacquired after waking up
    81 #define DEFAULT_ON_WAKEUP_NO_REACQ( lock_type ) \
    82     static inline void on_wakeup( lock_type & this, size_t recursion ) {}
    83 
    84 
     39// C_TODO: cleanup this and locks.cfa
     40// - appropriate separation of interface and impl
     41// - clean up unused/unneeded locks
     42// - change messy big blocking lock from inheritance to composition to remove need for flags
    8543
    8644//-----------------------------------------------------------------------------
     
    10967static inline bool   try_lock ( single_acquisition_lock & this ) { return try_lock( (blocking_lock &)this ); }
    11068static inline void   unlock   ( single_acquisition_lock & this ) { unlock  ( (blocking_lock &)this ); }
    111 static inline size_t on_wait  ( single_acquisition_lock & this, __cfa_pre_park pp_fn, void * pp_datum ) { return on_wait ( (blocking_lock &)this, pp_fn, pp_datum ); }
     69static inline size_t on_wait  ( single_acquisition_lock & this ) { return on_wait ( (blocking_lock &)this ); }
    11270static inline void   on_wakeup( single_acquisition_lock & this, size_t v ) { on_wakeup ( (blocking_lock &)this, v ); }
    11371static inline void   on_notify( single_acquisition_lock & this, struct thread$ * t ) { on_notify( (blocking_lock &)this, t ); }
    114 static inline bool   register_select( single_acquisition_lock & this, select_node & node ) { return register_select( (blocking_lock &)this, node ); }
    115 static inline bool   unregister_select( single_acquisition_lock & this, select_node & node ) { return unregister_select( (blocking_lock &)this, node ); }
    116 static inline bool   on_selected( single_acquisition_lock & this, select_node & node ) { return on_selected( (blocking_lock &)this, node ); }
    11772
    11873//----------
     
    12681static inline bool   try_lock ( owner_lock & this ) { return try_lock( (blocking_lock &)this ); }
    12782static inline void   unlock   ( owner_lock & this ) { unlock  ( (blocking_lock &)this ); }
    128 static inline size_t on_wait  ( owner_lock & this, __cfa_pre_park pp_fn, void * pp_datum ) { return on_wait ( (blocking_lock &)this, pp_fn, pp_datum ); }
     83static inline size_t on_wait  ( owner_lock & this ) { return on_wait ( (blocking_lock &)this ); }
    12984static inline void   on_wakeup( owner_lock & this, size_t v ) { on_wakeup ( (blocking_lock &)this, v ); }
    13085static inline void   on_notify( owner_lock & this, struct thread$ * t ) { on_notify( (blocking_lock &)this, t ); }
    131 static inline bool   register_select( owner_lock & this, select_node & node ) { return register_select( (blocking_lock &)this, node ); }
    132 static inline bool   unregister_select( owner_lock & this, select_node & node ) { return unregister_select( (blocking_lock &)this, node ); }
    133 static inline bool   on_selected( owner_lock & this, select_node & node ) { return on_selected( (blocking_lock &)this, node ); }
    13486
    13587//-----------------------------------------------------------------------------
     
    204156// - Kernel thd blocking alternative to the spinlock
    205157// - No ownership (will deadlock on reacq)
    206 // - no reacq on wakeup
    207158struct futex_mutex {
    208159        // lock state any state other than UNLOCKED is locked
     
    218169}
    219170
    220 static inline void ?{}( futex_mutex & this ) with(this) { val = 0; }
    221 
    222 static inline bool internal_try_lock( futex_mutex & this, int & compare_val) with(this) {
     171static inline void  ?{}( futex_mutex & this ) with(this) { val = 0; }
     172
     173static inline bool internal_try_lock(futex_mutex & this, int & compare_val) with(this) {
    223174        return __atomic_compare_exchange_n((int*)&val, (int*)&compare_val, 1, false, __ATOMIC_ACQUIRE, __ATOMIC_ACQUIRE);
    224175}
    225176
    226 static inline int internal_exchange( futex_mutex & this ) with(this) {
     177static inline int internal_exchange(futex_mutex & this) with(this) {
    227178        return __atomic_exchange_n((int*)&val, 2, __ATOMIC_ACQUIRE);
    228179}
    229180
    230181// if this is called recursively IT WILL DEADLOCK!!!!!
    231 static inline void lock( futex_mutex & this ) with(this) {
     182static inline void lock(futex_mutex & this) with(this) {
    232183        int state;
    233184
     
    239190                for (int i = 0; i < spin; i++) Pause();
    240191        }
     192
     193        // // no contention try to acquire
     194        // if (internal_try_lock(this, state)) return;
    241195       
    242196        // if not in contended state, set to be in contended state
     
    258212}
    259213
    260 DEFAULT_ON_NOTIFY( futex_mutex )
    261 DEFAULT_ON_WAIT( futex_mutex )
    262 DEFAULT_ON_WAKEUP_NO_REACQ( futex_mutex )
     214static inline void on_notify( futex_mutex & f, thread$ * t){ unpark(t); }
     215static inline size_t on_wait( futex_mutex & f ) {unlock(f); return 0;}
     216
     217// to set recursion count after getting signalled;
     218static inline void on_wakeup( futex_mutex & f, size_t recursion ) {}
    263219
    264220//-----------------------------------------------------------------------------
     
    276232        int val;
    277233};
     234
    278235static 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;
    281236
    282237static inline bool internal_try_lock(go_mutex & this, int & compare_val, int new_val ) with(this) {
     
    289244
    290245// if this is called recursively IT WILL DEADLOCK!!!!!
    291 static inline void lock( go_mutex & this ) with( this ) {
     246static inline void lock(go_mutex & this) with(this) {
    292247        int state, init_state;
    293248
     
    300255            while( !val ) { // lock unlocked
    301256                state = 0;
    302                 if ( internal_try_lock( this, state, init_state ) ) return;
     257                if (internal_try_lock(this, state, init_state)) return;
    303258            }
    304259            for (int i = 0; i < 30; i++) Pause();
     
    307262        while( !val ) { // lock unlocked
    308263            state = 0;
    309             if ( internal_try_lock( this, state, init_state ) ) return;
     264            if (internal_try_lock(this, state, init_state)) return;
    310265        }
    311266        sched_yield();
    312267       
    313268        // if not in contended state, set to be in contended state
    314         state = internal_exchange( this, 2 );
     269        state = internal_exchange(this, 2);
    315270        if ( !state ) return; // state == 0
    316271        init_state = 2;
    317         futex( (int*)&val, FUTEX_WAIT, 2 ); // if val is not 2 this returns with EWOULDBLOCK
     272        futex((int*)&val, FUTEX_WAIT, 2); // if val is not 2 this returns with EWOULDBLOCK
    318273    }
    319274}
     
    321276static inline void unlock( go_mutex & this ) with(this) {
    322277        // if uncontended do atomic unlock and then return
    323     if ( __atomic_exchange_n(&val, 0, __ATOMIC_RELEASE) == 1 ) return;
     278    if (__atomic_exchange_n(&val, 0, __ATOMIC_RELEASE) == 1) return;
    324279       
    325280        // otherwise threads are blocked so we must wake one
    326         futex( (int *)&val, FUTEX_WAKE, 1 );
    327 }
    328 
    329 DEFAULT_ON_NOTIFY( go_mutex )
    330 DEFAULT_ON_WAIT( go_mutex )
    331 DEFAULT_ON_WAKEUP_NO_REACQ( go_mutex )
     281        futex((int *)&val, FUTEX_WAKE, 1);
     282}
     283
     284static inline void on_notify( go_mutex & f, thread$ * t){ unpark(t); }
     285static inline size_t on_wait( go_mutex & f ) {unlock(f); return 0;}
     286static 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
     293struct clh_lock {
     294        volatile bool * volatile tail;
     295    volatile bool * volatile head;
     296};
     297
     298static inline void  ?{}( clh_lock & this ) { this.tail = malloc(); *this.tail = true; }
     299static inline void ^?{}( clh_lock & this ) { free(this.tail); }
     300
     301static 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
     310static inline void unlock(clh_lock & l) {
     311        __atomic_store_n((bool *)(l.head), true, __ATOMIC_SEQ_CST);
     312}
     313
     314static inline void on_notify(clh_lock & this, struct thread$ * t ) { unpark(t); }
     315static inline size_t on_wait(clh_lock & this) { unlock(this); return 0; }
     316static inline void on_wakeup(clh_lock & this, size_t recursion ) { lock(this); }
    332317
    333318//-----------------------------------------------------------------------------
     
    349334        this.lock_value = 0;
    350335}
    351 static inline void ?{}( exp_backoff_then_block_lock & this, exp_backoff_then_block_lock this2 ) = void;
    352 static inline void ?=?( exp_backoff_then_block_lock & this, exp_backoff_then_block_lock this2 ) = void;
    353336
    354337static inline void  ^?{}( exp_backoff_then_block_lock & this ){}
    355338
    356 static inline bool internal_try_lock( exp_backoff_then_block_lock & this, size_t & compare_val ) with(this) {
     339static inline bool internal_try_lock(exp_backoff_then_block_lock & this, size_t & compare_val) with(this) {
    357340        return __atomic_compare_exchange_n(&lock_value, &compare_val, 1, false, __ATOMIC_ACQUIRE, __ATOMIC_RELAXED);
    358341}
    359342
    360 static inline bool try_lock( exp_backoff_then_block_lock & this ) { size_t compare_val = 0; return internal_try_lock( this, compare_val ); }
    361 
    362 static inline bool try_lock_contention( exp_backoff_then_block_lock & this ) with(this) {
    363         return !__atomic_exchange_n( &lock_value, 2, __ATOMIC_ACQUIRE );
    364 }
    365 
    366 static inline bool block( exp_backoff_then_block_lock & this ) with(this) {
     343static inline bool try_lock(exp_backoff_then_block_lock & this) { size_t compare_val = 0; return internal_try_lock(this, compare_val); }
     344
     345static 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
     349static inline bool block(exp_backoff_then_block_lock & this) with(this) {
    367350    lock( spinlock __cfaabi_dbg_ctx2 );
    368351    if (__atomic_load_n( &lock_value, __ATOMIC_SEQ_CST) != 2) {
     
    376359}
    377360
    378 static inline void lock( exp_backoff_then_block_lock & this ) with(this) {
     361static inline void lock(exp_backoff_then_block_lock & this) with(this) {
    379362        size_t compare_val = 0;
    380363        int spin = 4;
     
    395378}
    396379
    397 static inline void unlock( exp_backoff_then_block_lock & this ) with(this) {
     380static inline void unlock(exp_backoff_then_block_lock & this) with(this) {
    398381    if (__atomic_exchange_n(&lock_value, 0, __ATOMIC_RELEASE) == 1) return;
    399382    lock( spinlock __cfaabi_dbg_ctx2 );
     
    403386}
    404387
    405 DEFAULT_ON_NOTIFY( exp_backoff_then_block_lock )
    406 DEFAULT_ON_WAIT( exp_backoff_then_block_lock )
    407 DEFAULT_ON_WAKEUP_REACQ( exp_backoff_then_block_lock )
     388static inline void on_notify(exp_backoff_then_block_lock & this, struct thread$ * t ) { unpark(t); }
     389static inline size_t on_wait(exp_backoff_then_block_lock & this) { unlock(this); return 0; }
     390static inline void on_wakeup(exp_backoff_then_block_lock & this, size_t recursion ) { lock(this); }
    408391
    409392//-----------------------------------------------------------------------------
     
    435418
    436419// if this is called recursively IT WILL DEADLOCK!!!!!
    437 static inline void lock( fast_block_lock & this ) with(this) {
     420static inline void lock(fast_block_lock & this) with(this) {
    438421        lock( lock __cfaabi_dbg_ctx2 );
    439422        if ( held ) {
     
    447430}
    448431
    449 static inline void unlock( fast_block_lock & this ) with(this) {
     432static inline void unlock(fast_block_lock & this) with(this) {
    450433        lock( lock __cfaabi_dbg_ctx2 );
    451434        /* paranoid */ verifyf( held != false, "Attempt to release lock %p that isn't held", &this );
     
    456439}
    457440
    458 static inline void on_notify( fast_block_lock & this, struct thread$ * t ) with(this) {
     441static inline void on_notify(fast_block_lock & this, struct thread$ * t ) with(this) {
    459442    lock( lock __cfaabi_dbg_ctx2 );
    460443    insert_last( blocked_threads, *t );
    461444    unlock( lock );
    462445}
    463 DEFAULT_ON_WAIT( fast_block_lock )
    464 DEFAULT_ON_WAKEUP_NO_REACQ( fast_block_lock )
     446static inline size_t on_wait(fast_block_lock & this) { unlock(this); return 0; }
     447static inline void on_wakeup(fast_block_lock & this, size_t recursion ) { }
    465448
    466449//-----------------------------------------------------------------------------
     
    473456struct simple_owner_lock {
    474457        // List of blocked threads
    475         dlist( select_node ) blocked_threads;
     458        dlist( thread$ ) blocked_threads;
    476459
    477460        // Spin lock used for mutual exclusion
     
    494477static inline void ?=?( simple_owner_lock & this, simple_owner_lock this2 ) = void;
    495478
    496 static inline void lock( simple_owner_lock & this ) with(this) {
    497         if ( owner == active_thread() ) {
     479static inline void lock(simple_owner_lock & this) with(this) {
     480        if (owner == active_thread()) {
    498481                recursion_count++;
    499482                return;
     
    501484        lock( lock __cfaabi_dbg_ctx2 );
    502485
    503         if ( owner != 0p ) {
    504         select_node node;
    505                 insert_last( blocked_threads, node );
     486        if (owner != 0p) {
     487                insert_last( blocked_threads, *active_thread() );
    506488                unlock( lock );
    507489                park( );
     
    513495}
    514496
    515 static inline void pop_node( simple_owner_lock & this ) with(this) {
    516     __handle_waituntil_OR( blocked_threads );
    517     select_node * node = &try_pop_front( blocked_threads );
    518     if ( node ) {
    519         owner = node->blocked_thread;
    520         recursion_count = 1;
    521         // if ( !node->clause_status || __make_select_node_available( *node ) ) unpark( node->blocked_thread );
    522         wake_one( blocked_threads, *node );
    523     } else {
    524         owner = 0p;
    525         recursion_count = 0;
    526     }
    527 }
    528 
    529 static inline void unlock( simple_owner_lock & this ) with(this) {
     497// TODO: fix duplicate def issue and bring this back
     498// void pop_and_set_new_owner( simple_owner_lock & this ) with( this ) {
     499        // thread$ * t = &try_pop_front( blocked_threads );
     500        // owner = t;
     501        // recursion_count = ( t ? 1 : 0 );
     502        // unpark( t );
     503// }
     504
     505static inline void unlock(simple_owner_lock & this) with(this) {
    530506        lock( lock __cfaabi_dbg_ctx2 );
    531507        /* paranoid */ verifyf( owner != 0p, "Attempt to release lock %p that isn't held", &this );
     
    534510        recursion_count--;
    535511        if ( recursion_count == 0 ) {
    536                 pop_node( this );
     512                // pop_and_set_new_owner( this );
     513                thread$ * t = &try_pop_front( blocked_threads );
     514                owner = t;
     515                recursion_count = ( t ? 1 : 0 );
     516                unpark( t );
    537517        }
    538518        unlock( lock );
    539519}
    540520
    541 static inline void on_notify( simple_owner_lock & this, thread$ * t ) with(this) {
     521static inline void on_notify(simple_owner_lock & this, struct thread$ * t ) with(this) {
    542522        lock( lock __cfaabi_dbg_ctx2 );
    543523        // lock held
    544524        if ( owner != 0p ) {
    545                 insert_last( blocked_threads, *(select_node *)t->link_node );
     525                insert_last( blocked_threads, *t );
    546526        }
    547527        // lock not held
     
    554534}
    555535
    556 static inline size_t on_wait( simple_owner_lock & this, __cfa_pre_park pp_fn, void * pp_datum ) with(this) {
     536static inline size_t on_wait(simple_owner_lock & this) with(this) {
    557537        lock( lock __cfaabi_dbg_ctx2 );
    558538        /* paranoid */ verifyf( owner != 0p, "Attempt to release lock %p that isn't held", &this );
     
    561541        size_t ret = recursion_count;
    562542
    563         pop_node( this );
    564 
    565     select_node node;
    566     active_thread()->link_node = (void *)&node;
     543        // pop_and_set_new_owner( this );
     544
     545        thread$ * t = &try_pop_front( blocked_threads );
     546        owner = t;
     547        recursion_count = ( t ? 1 : 0 );
     548        unpark( t );
     549
    567550        unlock( lock );
    568 
    569     pre_park_then_park( pp_fn, pp_datum );
    570 
    571551        return ret;
    572552}
    573553
    574 static inline void on_wakeup( simple_owner_lock & this, size_t recursion ) with(this) { recursion_count = recursion; }
    575 
    576 // waituntil() support
    577 static inline bool register_select( simple_owner_lock & this, select_node & node ) with(this) {
    578     lock( lock __cfaabi_dbg_ctx2 );
    579 
    580     // check if we can complete operation. If so race to establish winner in special OR case
    581     if ( !node.park_counter && ( owner == active_thread() || owner == 0p ) ) {
    582         if ( !__make_select_node_available( node ) ) { // we didn't win the race so give up on registering
    583            unlock( lock );
    584            return false;
    585         }
    586     }
    587 
    588     if ( owner == active_thread() ) {
    589                 recursion_count++;
    590         if ( node.park_counter ) __make_select_node_available( node );
    591         unlock( lock );
    592                 return true;
    593         }
    594 
    595     if ( owner != 0p ) {
    596                 insert_last( blocked_threads, node );
    597                 unlock( lock );
    598                 return false;
    599         }
    600    
    601         owner = active_thread();
    602         recursion_count = 1;
    603 
    604     if ( node.park_counter ) __make_select_node_available( node );
    605     unlock( lock );
    606     return true;
    607 }
    608 
    609 static inline bool unregister_select( simple_owner_lock & this, select_node & node ) with(this) {
    610     lock( lock __cfaabi_dbg_ctx2 );
    611     if ( node`isListed ) {
    612         remove( node );
    613         unlock( lock );
    614         return false;
    615     }
    616 
    617     if ( owner == active_thread() ) {
    618         recursion_count--;
    619         if ( recursion_count == 0 ) {
    620             pop_node( this );
    621         }
    622     }
    623     unlock( lock );
    624     return false;
    625 }
    626 
    627 static inline bool on_selected( simple_owner_lock & this, select_node & node ) { return true; }
    628 
     554static inline void on_wakeup(simple_owner_lock & this, size_t recursion ) with(this) { recursion_count = recursion; }
    629555
    630556//-----------------------------------------------------------------------------
     
    652578
    653579// if this is called recursively IT WILL DEADLOCK!
    654 static inline void lock( spin_queue_lock & this ) with(this) {
     580static inline void lock(spin_queue_lock & this) with(this) {
    655581        mcs_spin_node node;
    656582        lock( lock, node );
     
    660586}
    661587
    662 static inline void unlock( spin_queue_lock & this ) with(this) {
     588static inline void unlock(spin_queue_lock & this) with(this) {
    663589        __atomic_store_n(&held, false, __ATOMIC_RELEASE);
    664590}
    665591
    666 DEFAULT_ON_NOTIFY( spin_queue_lock )
    667 DEFAULT_ON_WAIT( spin_queue_lock )
    668 DEFAULT_ON_WAKEUP_REACQ( spin_queue_lock )
     592static inline void on_notify(spin_queue_lock & this, struct thread$ * t ) {
     593        unpark(t);
     594}
     595static inline size_t on_wait(spin_queue_lock & this) { unlock(this); return 0; }
     596static inline void on_wakeup(spin_queue_lock & this, size_t recursion ) { lock(this); }
     597
    669598
    670599//-----------------------------------------------------------------------------
     
    692621
    693622// if this is called recursively IT WILL DEADLOCK!!!!!
    694 static inline void lock( mcs_block_spin_lock & this ) with(this) {
     623static inline void lock(mcs_block_spin_lock & this) with(this) {
    695624        mcs_node node;
    696625        lock( lock, node );
     
    704633}
    705634
    706 DEFAULT_ON_NOTIFY( mcs_block_spin_lock )
    707 DEFAULT_ON_WAIT( mcs_block_spin_lock )
    708 DEFAULT_ON_WAKEUP_REACQ( mcs_block_spin_lock )
     635static inline void on_notify(mcs_block_spin_lock & this, struct thread$ * t ) { unpark(t); }
     636static inline size_t on_wait(mcs_block_spin_lock & this) { unlock(this); return 0; }
     637static inline void on_wakeup(mcs_block_spin_lock & this, size_t recursion ) {lock(this); }
    709638
    710639//-----------------------------------------------------------------------------
     
    732661
    733662// if this is called recursively IT WILL DEADLOCK!!!!!
    734 static inline void lock( block_spin_lock & this ) with(this) {
     663static inline void lock(block_spin_lock & this) with(this) {
    735664        lock( lock );
    736665        while(__atomic_load_n(&held, __ATOMIC_SEQ_CST)) Pause();
     
    739668}
    740669
    741 static inline void unlock( block_spin_lock & this ) with(this) {
     670static inline void unlock(block_spin_lock & this) with(this) {
    742671        __atomic_store_n(&held, false, __ATOMIC_RELEASE);
    743672}
    744673
    745 static inline void on_notify( block_spin_lock & this, struct thread$ * t ) with(this.lock) {
     674static inline void on_notify(block_spin_lock & this, struct thread$ * t ) with(this.lock) {
    746675        // first we acquire internal fast_block_lock
    747676        lock( lock __cfaabi_dbg_ctx2 );
     
    757686        unpark(t);
    758687}
    759 DEFAULT_ON_WAIT( block_spin_lock )
    760 static inline void on_wakeup( block_spin_lock & this, size_t recursion ) with(this) {
     688static inline size_t on_wait(block_spin_lock & this) { unlock(this); return 0; }
     689static inline void on_wakeup(block_spin_lock & this, size_t recursion ) with(this) {
    761690        // now we acquire the entire block_spin_lock upon waking up
    762691        while(__atomic_load_n(&held, __ATOMIC_SEQ_CST)) Pause();
     
    764693        unlock( lock ); // Now we release the internal fast_spin_lock
    765694}
     695
     696//-----------------------------------------------------------------------------
     697// is_blocking_lock
     698forall( L & | sized(L) )
     699trait 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};
    766709
    767710//-----------------------------------------------------------------------------
     
    771714forall(L & | is_blocking_lock(L)) {
    772715        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 );
    773720}
    774721
  • libcfa/src/concurrency/mutex_stmt.hfa

    r3982384 r6e4c44d  
    1515};
    1616
     17
    1718struct __mutex_stmt_lock_guard {
    1819    void ** lockarr;
     
    2930
    3031forall(L & | is_lock(L)) {
    31     static inline void * __get_mutexstmt_lock_ptr( L & this ) { return &this; }
    32     static inline L __get_mutexstmt_lock_type( L & this ) {}
    33     static inline L __get_mutexstmt_lock_type( L * this ) {}
     32
     33    struct scoped_lock {
     34        L * internal_lock;
     35    };
     36
     37    static inline void ?{}( scoped_lock(L) & this, L & internal_lock ) {
     38        this.internal_lock = &internal_lock;
     39        lock(internal_lock);
     40    }
     41   
     42    static inline void ^?{}( scoped_lock(L) & this ) with(this) {
     43        unlock(*internal_lock);
     44    }
     45
     46    static inline void * __get_mutexstmt_lock_ptr( L & this ) {
     47        return &this;
     48    }
     49
     50    static inline L __get_mutexstmt_lock_type( L & this );
     51
     52    static inline L __get_mutexstmt_lock_type( L * this );
    3453}
  • libcfa/src/concurrency/preemption.cfa

    r3982384 r6e4c44d  
    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

    r3982384 r6e4c44d  
    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 
    171#pragma once
    182
    193#include "containers/list.hfa"
    20 #include "alarm.hfa"
    21 #include "kernel.hfa"
    22 #include "time.hfa"
     4#include <stdint.h>
     5#include <kernel.hfa>
     6#include <locks.hfa>
    237
    24 struct select_node;
    25 
    26 // node status
    27 static const unsigned long int __SELECT_UNSAT = 0;
    28 static const unsigned long int __SELECT_PENDING = 1; // used only by special OR case
    29 static const unsigned long int __SELECT_SAT = 2;
    30 static const unsigned long int __SELECT_RUN = 3;
    31 
    32 // these are used inside the compiler to aid in code generation
    33 static inline bool __CFA_has_clause_run( unsigned long int status ) { return status == __SELECT_RUN; }
    34 static inline void __CFA_maybe_park( int * park_counter ) {
    35     if ( __atomic_sub_fetch( park_counter, 1, __ATOMIC_SEQ_CST) < 0 )
    36         park();
    37 }
    38 
    39 // node used for coordinating waituntil synchronization
    408struct 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 
    469    thread$ * blocked_thread;
     10    void ** race_flag;
    4711    inline dlink(select_node);
    4812};
    4913P9_EMBEDDED( select_node, dlink(select_node) )
    5014
    51 static inline void ?{}( select_node & this ) {
    52     this.blocked_thread = active_thread();
    53     this.clause_status = 0p;
    54     this.park_counter = 0p;
    55     this.extra = 0p;
     15void ?{}( select_node & this ) {
     16    this.blocked_thread = 0p;
     17    this.race_flag = 0p;
    5618}
    5719
    58 static inline void ?{}( select_node & this, thread$ * blocked_thread ) {
     20void ?{}( select_node & this, thread$ * blocked_thread ) {
    5921    this.blocked_thread = blocked_thread;
    60     this.clause_status = 0p;
    61     this.park_counter = 0p;
    62     this.extra = 0p;
     22    this.race_flag = 0p;
    6323}
    6424
    65 static inline void ?{}( select_node & this, thread$ * blocked_thread, void * extra ) {
     25void ?{}( select_node & this, thread$ * blocked_thread, void ** race_flag ) {
    6626    this.blocked_thread = blocked_thread;
    67     this.clause_status = 0p;
    68     this.park_counter = 0p;
    69     this.extra = extra;
     27    this.race_flag = race_flag;
    7028}
    71 static inline void ^?{}( select_node & this ) {}
    7229
    73 // this is used inside the compiler to aid in code generation
    74 static inline unsigned long int * __get_clause_status( select_node & s ) { return s.clause_status; }
     30void ^?{}( select_node & this ) {}
    7531
    76 // this is used inside the compiler to attempt to establish an else clause as a winner in the OR special case race
    77 static inline bool __select_node_else_race( select_node & this ) with( this ) {
    78     unsigned long int cmp_status = __SELECT_UNSAT;
    79     return *clause_status == 0
    80             && __atomic_compare_exchange_n( clause_status, &cmp_status, __SELECT_SAT, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST );
    81 }
    8232
    8333//-----------------------------------------------------------------------------
    8434// is_selectable
    85 forall(T & | sized(T))
    86 trait is_selectable {
    87     // For registering a select stmt on a selectable concurrency primitive
    88     // Returns bool that indicates if operation is already SAT
    89     bool register_select( T &, select_node & );
     35trait 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 & );
    9042
    91     // For unregistering a select stmt on a selectable concurrency primitive
    92     // If true is returned then the corresponding code block is run (only in non-special OR case and only if node status is not RUN)
    93     bool unregister_select( T &, select_node &  );
    94 
    95     // This routine is run on the selecting thread prior to executing the statement corresponding to the select_node
    96     //    passed as an arg to this routine
    97     // If on_selected returns false, the statement is not run, if it returns true it is run.
    98     bool on_selected( T &, select_node & );
     43    void unregister_select( T &, select_node &  );
    9944};
    10045
    101 //=============================================================================================
    102 // Waituntil Helpers
    103 //=============================================================================================
    104 
    105 // used for the 2-stage avail needed by the special OR case
    106 static inline bool __mark_select_node( select_node & this, unsigned long int val ) with( this ) {
    107     /* paranoid */ verify( park_counter == 0p );
    108     /* paranoid */ verify( clause_status != 0p );
    109 
    110     unsigned long int cmp_status = __SELECT_UNSAT;
    111     while( !__atomic_compare_exchange_n( clause_status, &cmp_status, val, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST ) ) {
    112         if ( cmp_status != __SELECT_PENDING ) return false;
    113         cmp_status = __SELECT_UNSAT;
    114     }
    115     return true;
     46static 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
    11663}
    117 
    118 static inline void __make_select_node_unsat( select_node & this ) with( this ) {
    119     __atomic_store_n( clause_status, __SELECT_UNSAT, __ATOMIC_SEQ_CST );
    120 }
    121 static inline void __make_select_node_sat( select_node & this ) with( this ) {
    122     __atomic_store_n( clause_status, __SELECT_SAT, __ATOMIC_SEQ_CST );
    123 }
    124 
    125 static inline bool __make_select_node_pending( select_node & this ) with( this ) {
    126     return __mark_select_node( this, __SELECT_PENDING );
    127 }
    128 
    129 // when a primitive becomes available it calls the following routine on it's node to update the select state:
    130 // return true if we want to unpark the thd
    131 static inline bool __make_select_node_available( select_node & this ) with( this ) {
    132     /* paranoid */ verify( clause_status != 0p );
    133     if( !park_counter )
    134         return __mark_select_node( this, (unsigned long int)&this );
    135 
    136     unsigned long int cmp_status = __SELECT_UNSAT;
    137 
    138     return *clause_status == 0 // C_TODO might not need a cmp_xchg in non special OR case
    139         && __atomic_compare_exchange_n( clause_status, &cmp_status, __SELECT_SAT, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST ) // can maybe just use atomic write
    140         && !__atomic_add_fetch( park_counter, 1, __ATOMIC_SEQ_CST);
    141 }
    142 
    143 // Handles the special OR case of the waituntil statement
    144 // Since only one select node can win in the OR case, we need to race to set the node available BEFORE
    145 //    performing the operation since if we lose the race the operation should not be performed as it will be lost
    146 // Returns true if execution can continue normally and false if the queue has now been drained
    147 static inline bool __handle_waituntil_OR( dlist( select_node ) & queue ) {
    148     if ( queue`isEmpty ) return false;
    149     if ( queue`first.clause_status && !queue`first.park_counter ) {
    150         while ( !queue`isEmpty ) {
    151             // if node not a special OR case or if we win the special OR case race break
    152             if ( !queue`first.clause_status || queue`first.park_counter || __make_select_node_available( queue`first ) )
    153                 return true;
    154             // otherwise we lost the special OR race so discard node
    155             try_pop_front( queue );
    156         }
    157         return false;
    158     }
    159     return true;
    160 }
    161 
    162 // wake one thread from the list
    163 static inline void wake_one( dlist( select_node ) & queue, select_node & popped ) {
    164     if ( !popped.clause_status                              // normal case, node is not a select node
    165         || ( popped.clause_status && !popped.park_counter ) // If popped link is special case OR selecting unpark but don't call __make_select_node_available
    166         || __make_select_node_available( popped ) )         // check if popped link belongs to a selecting thread
    167         unpark( popped.blocked_thread );
    168 }
    169 
    170 static inline void wake_one( dlist( select_node ) & queue ) { wake_one( queue, try_pop_front( queue ) ); }
    171 
    172 static inline void setup_clause( select_node & this, unsigned long int * clause_status, int * park_counter ) {
    173     this.blocked_thread = active_thread();
    174     this.clause_status = clause_status;
    175     this.park_counter = park_counter;
    176 }
    177 
    178 // waituntil ( timeout( ... ) ) support
    179 struct select_timeout_node {
    180     alarm_node_t a_node;
    181     select_node * s_node;
    182 };
    183 void ?{}( select_timeout_node & this, Duration duration, Alarm_Callback callback );
    184 void ^?{}( select_timeout_node & this );
    185 void timeout_handler_select_cast( alarm_node_t & node );
    186 
    187 // Selectable trait routines
    188 bool register_select( select_timeout_node & this, select_node & node );
    189 bool unregister_select( select_timeout_node & this, select_node & node );
    190 bool on_selected( select_timeout_node & this, select_node & node );
    191 
    192 // Gateway routines to waituntil on duration
    193 select_timeout_node timeout( Duration duration );
    194 select_timeout_node sleep( Duration duration );
  • libcfa/src/concurrency/thread.cfa

    r3982384 r6e4c44d  
    5353        preferred = ready_queue_new_preferred();
    5454        last_proc = 0p;
    55     link_node = 0p;
    5655        PRNG_SET_SEED( random_state, __global_random_mask ? __global_random_prime : __global_random_prime ^ rdtscl() );
    5756        #if defined( __CFA_WITH_VERIFY__ )
     
    6059        #endif
    6160
     61        clh_node = malloc( );
     62        *clh_node = false;
     63
    6264        doregister(curr_cluster, this);
    6365        monitors{ &self_mon_p, 1, (fptr_t)0 };
     
    6870                canary = 0xDEADDEADDEADDEADp;
    6971        #endif
     72        free(clh_node);
    7073        unregister(curr_cluster, this);
    7174        ^self_cor{};
  • src/AST/Convert.cpp

    r3982384 r6e4c44d  
    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 
    575569        const ast::Stmt * visit( const ast::WaitForStmt * node ) override final {
    576570                if ( inCache( node ) ) return nullptr;
     
    579573                for ( auto clause : node->clauses ) {
    580574                        stmt->clauses.push_back({{
    581                                         get<Expression>().accept1( clause->target ),
     575                                        get<Expression>().accept1( clause->target_func ),
    582576                                        get<Expression>().acceptL( clause->target_args ),
    583577                                },
    584578                                get<Statement>().accept1( clause->stmt ),
    585                                 get<Expression>().accept1( clause->when_cond ),
     579                                get<Expression>().accept1( clause->cond ),
    586580                        });
    587581                }
     
    600594        const ast::WaitForClause * visit( const ast::WaitForClause * node ) override final {
    601595                // 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.
    608596                assert( !node );
    609597                return nullptr;
     
    21702158                        auto clause = new ast::WaitForClause( old->location );
    21712159
    2172                         clause->target = GET_ACCEPT_1(clauses[i].target.function, Expr);
     2160                        clause->target_func = GET_ACCEPT_1(clauses[i].target.function, Expr);
    21732161                        clause->target_args = GET_ACCEPT_V(clauses[i].target.arguments, Expr);
    21742162                        clause->stmt = GET_ACCEPT_1(clauses[i].statement, Stmt);
    2175                         clause->when_cond = GET_ACCEPT_1(clauses[i].condition, Expr);
     2163                        clause->cond = GET_ACCEPT_1(clauses[i].condition, Expr);
    21762164
    21772165                        stmt->clauses.push_back( clause );
  • src/AST/Fwd.hpp

    r3982384 r6e4c44d  
    5858class FinallyClause;
    5959class SuspendStmt;
    60 class WhenClause;
    6160class WaitForStmt;
    6261class WaitForClause;
    63 class WaitUntilStmt;
    6462class WithStmt;
    6563class DeclStmt;
  • src/AST/Node.cpp

    r3982384 r6e4c44d  
    174174template class ast::ptr_base< ast::FinallyClause, ast::Node::ref_type::weak >;
    175175template class ast::ptr_base< ast::FinallyClause, ast::Node::ref_type::strong >;
    176 template class ast::ptr_base< ast::WhenClause, ast::Node::ref_type::weak >;
    177 template class ast::ptr_base< ast::WhenClause, ast::Node::ref_type::strong >;
    178176template class ast::ptr_base< ast::WaitForStmt, ast::Node::ref_type::weak >;
    179177template class ast::ptr_base< ast::WaitForStmt, ast::Node::ref_type::strong >;
    180178template class ast::ptr_base< ast::WaitForClause, ast::Node::ref_type::weak >;
    181179template class ast::ptr_base< ast::WaitForClause, ast::Node::ref_type::strong >;
    182 template class ast::ptr_base< ast::WaitUntilStmt, ast::Node::ref_type::weak >;
    183 template class ast::ptr_base< ast::WaitUntilStmt, ast::Node::ref_type::strong >;
    184180template class ast::ptr_base< ast::WithStmt, ast::Node::ref_type::weak >;
    185181template class ast::ptr_base< ast::WithStmt, ast::Node::ref_type::strong >;
  • src/AST/Pass.hpp

    r3982384 r6e4c44d  
    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;
    165164        const ast::Stmt *             visit( const ast::WaitForStmt          * ) override final;
    166165        const ast::WaitForClause *    visit( const ast::WaitForClause        * ) override final;
    167     const ast::Stmt *             visit( const ast::WaitUntilStmt        * ) override final;
    168166        const ast::Decl *             visit( const ast::WithStmt             * ) override final;
    169167        const ast::NullStmt *         visit( const ast::NullStmt             * ) override final;
  • src/AST/Pass.impl.hpp

    r3982384 r6e4c44d  
    2222#include "AST/TranslationUnit.hpp"
    2323#include "AST/TypeSubstitution.hpp"
     24#include "Common/Iterate.hpp"
    2425
    2526#define VISIT_START( node ) \
     
    126127        }
    127128
     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
    128135        template< typename core_t >
    129136        template< typename node_t >
     
    227234
    228235                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;
    229286        }
    230287
     
    296353
    297354                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
    298371        }
    299372
     
    9931066
    9941067//--------------------------------------------------------------------------
    995 // WhenClause
    996 template< typename core_t >
    997 const ast::WhenClause * ast::Pass< core_t >::visit( const ast::WhenClause * node ) {
    998         VISIT_START( node );
    999 
    1000         if ( __visit_children() ) {
    1001                 maybe_accept( node, &WhenClause::target );
    1002                 maybe_accept( node, &WhenClause::stmt );
    1003                 maybe_accept( node, &WhenClause::when_cond );
    1004         }
    1005 
    1006         VISIT_END( WhenClause, node );
    1007 }
    1008 
    1009 //--------------------------------------------------------------------------
    10101068// WaitForStmt
    10111069template< typename core_t >
     
    10321090
    10331091        if ( __visit_children() ) {
    1034                 maybe_accept( node, &WaitForClause::target );
     1092                maybe_accept( node, &WaitForClause::target_func );
    10351093                maybe_accept( node, &WaitForClause::target_args );
    10361094                maybe_accept( node, &WaitForClause::stmt );
    1037                 maybe_accept( node, &WaitForClause::when_cond );
     1095                maybe_accept( node, &WaitForClause::cond );
    10381096        }
    10391097
    10401098        VISIT_END( WaitForClause, node );
    1041 }
    1042 
    1043 //--------------------------------------------------------------------------
    1044 // WaitUntilStmt
    1045 template< typename core_t >
    1046 const ast::Stmt * ast::Pass< core_t >::visit( const ast::WaitUntilStmt * node ) {
    1047         VISIT_START( node );
    1048 
    1049         if ( __visit_children() ) {
    1050                 maybe_accept( node, &WaitUntilStmt::clauses );
    1051                 maybe_accept( node, &WaitUntilStmt::timeout_time );
    1052                 maybe_accept( node, &WaitUntilStmt::timeout_stmt );
    1053                 maybe_accept( node, &WaitUntilStmt::timeout_cond );
    1054                 maybe_accept( node, &WaitUntilStmt::else_stmt );
    1055                 maybe_accept( node, &WaitUntilStmt::else_cond );
    1056         }
    1057 
    1058         VISIT_END( Stmt, node );
    10591099}
    10601100
     
    21632203}
    21642204
    2165 #undef __pedantic_pass_assertf
    2166 #undef __pedantic_pass_assert
    21672205#undef VISIT_START
    21682206#undef VISIT_END
  • src/AST/Pass.proto.hpp

    r3982384 r6e4c44d  
    1717// IWYU pragma: private, include "Pass.hpp"
    1818
    19 #include "Common/Iterate.hpp"
    2019#include "Common/Stats/Heap.h"
    2120namespace ast {
     
    2524        template<typename node_t> node_t * deepCopy( const node_t * );
    2625}
    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
    3526
    3627namespace ast::__pass {
     
    139130
    140131        template< typename object_t, typename super_t, typename field_t >
    141         void apply( object_t * object, field_t super_t::* field ) {
    142                 object->*field = value;
    143         }
     132        void apply( object_t *, field_t super_t::* field );
    144133};
    145134
     
    161150
    162151        template< typename object_t, typename super_t, typename field_t >
    163         void apply( object_t * object, field_t super_t::* field ) {
    164                 field_t & container = object->*field;
    165                 __pedantic_pass_assert( container.size() <= values.size() );
    166 
    167                 auto cit = enumerate(container).begin();
    168 
    169                 container_t<ptr<Stmt>> nvals;
    170                 for ( delta & d : values ) {
    171                         if ( d.is_old ) {
    172                                 __pedantic_pass_assert( cit.idx <= d.old_idx );
    173                                 std::advance( cit, d.old_idx - cit.idx );
    174                                 nvals.push_back( std::move( (*cit).val ) );
    175                         } else {
    176                                 nvals.push_back( std::move( d.new_val ) );
    177                         }
    178                 }
    179 
    180                 container = std::move(nvals);
    181         }
     152        void apply( object_t *, field_t super_t::* field );
    182153
    183154        template< template<class...> class incontainer_t >
    184         void take_all( incontainer_t<ptr<Stmt>> * stmts ) {
    185                 if ( !stmts || stmts->empty() ) return;
    186 
    187                 std::transform( stmts->begin(), stmts->end(), std::back_inserter( values ),
    188                         [](ast::ptr<ast::Stmt>& stmt) -> delta {
    189                                 return delta( stmt.release(), -1, false );
    190                         });
    191                 stmts->clear();
    192                 differs = true;
    193         }
     155        void take_all( incontainer_t<ptr<Stmt>> * stmts );
    194156
    195157        template< template<class...> class incontainer_t >
    196         void take_all( incontainer_t<ptr<Decl>> * decls ) {
    197                 if ( !decls || decls->empty() ) return;
    198 
    199                 std::transform( decls->begin(), decls->end(), std::back_inserter( values ),
    200                         [](ast::ptr<ast::Decl>& decl) -> delta {
    201                                 ast::Decl const * d = decl.release();
    202                                 return delta( new DeclStmt( d->location, d ), -1, false );
    203                         });
    204                 decls->clear();
    205                 differs = true;
    206         }
     158        void take_all( incontainer_t<ptr<Decl>> * decls );
    207159};
    208160
     
    214166
    215167        template< typename object_t, typename super_t, typename field_t >
    216         void apply( object_t * object, field_t super_t::* field ) {
    217                 field_t & container = object->*field;
    218                 __pedantic_pass_assert( container.size() == values.size() );
    219 
    220                 for ( size_t i = 0; i < container.size(); ++i ) {
    221                         // Take all the elements that are different in 'values'
    222                         // and swap them into 'container'
    223                         if ( values[i] != nullptr ) swap(container[i], values[i]);
    224                 }
    225                 // Now the original containers should still have the unchanged values
    226                 // but also contain the new values.
    227         }
     168        void apply( object_t *, field_t super_t::* field );
    228169};
    229170
     
    576517
    577518} // namespace ast::__pass
    578 
    579 #undef __pedantic_pass_assertf
    580 #undef __pedantic_pass_assert
  • src/AST/Print.cpp

    r3982384 r6e4c44d  
    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 
    237210        void preprint( const ast::NamedTypeDecl * node ) {
    238211                if ( ! node->name.empty() ) {
     
    783756        }
    784757
    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 
    802758        virtual const ast::Stmt * visit( const ast::WaitForStmt * node ) override final {
    803759                os << "Waitfor Statement" << endl;
     
    837793        virtual const ast::WaitForClause * visit( const ast::WaitForClause * node ) override final {
    838794                os << indent-1 << "target function: ";
    839                 safe_print( node->target );
     795                safe_print( node->target_func );
    840796
    841797                if ( !node->target_args.empty() ) {
     
    851807                }
    852808
    853                 if ( node->when_cond ) {
     809                if ( node->cond ) {
    854810                        os << indent-1 << "... with condition:" << endl;
    855                         node->when_cond->accept( *this );
    856                 }
    857 
    858                 return node;
    859         }
    860 
    861     virtual const ast::Stmt * visit( const ast::WaitUntilStmt * node ) override final {
    862                 os << "Waituntil Statement" << endl;
    863                 indent += 2;
    864                 for( const auto & clause : node->clauses ) {
    865                         clause->accept( *this );
    866                 }
    867         print(node);    // calls print( const ast::WaitStmt * node )
     811                        node->cond->accept( *this );
     812                }
     813
    868814                return node;
    869815        }
  • src/AST/Stmt.hpp

    r3982384 r6e4c44d  
    378378};
    379379
    380 // Base class of WaitFor/WaitUntil statements
    381 // form: KEYWORD(...) ... timeout(...) ... else ...
    382 class WaitStmt : public Stmt {
    383   public:
    384     ptr<Expr> timeout_time;
     380// Waitfor statement: when (...) waitfor (... , ...) ... timeout(...) ... else ...
     381class WaitForStmt final : public Stmt {
     382  public:
     383        std::vector<ptr<WaitForClause>> clauses;
     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 = {} )
     390        WaitForStmt( const CodeLocation & loc, const std::vector<Label> && labels = {} )
    391391                : Stmt(loc, std::move(labels)) {}
    392392
    393   private:
    394     WaitStmt * clone() const override = 0;
    395         MUTATE_FRIEND
    396 };
    397 
    398 // Base class for WaitFor/WaitUntil clauses
    399 // form: when( when_cond ) KEYWORD( target ) stmt
    400 class WhenClause : public StmtClause {
    401   public:
    402         ptr<Expr> target;
     393        const Stmt * accept( Visitor & v ) const override { return v.visit( this ); }
     394  private:
     395        WaitForStmt * clone() const override { return new WaitForStmt{ *this }; }
     396        MUTATE_FRIEND
     397};
     398
     399// Clause in a waitfor statement: waitfor (..., ...) ...
     400class WaitForClause final : public StmtClause {
     401  public:
     402        ptr<Expr> target_func;
     403        std::vector<ptr<Expr>> target_args;
    403404        ptr<Stmt> stmt;
    404         ptr<Expr> when_cond;
    405 
    406         WhenClause( const CodeLocation & loc )
     405        ptr<Expr> cond;
     406
     407        WaitForClause( const CodeLocation & loc )
    407408                : StmtClause( loc ) {}
    408409
    409         const WhenClause * accept( Visitor & v ) const override { return v.visit( this ); }
    410   private:
    411         WhenClause * clone() const override { return new WhenClause{ *this }; }
    412         MUTATE_FRIEND
    413 };
    414 
    415 // Waitfor statement: when (...) waitfor (... , ...) ... timeout(...) ... else ...
    416 class WaitForStmt final : public WaitStmt {
    417   public:
    418         std::vector<ptr<WaitForClause>> clauses;
    419 
    420         WaitForStmt( const CodeLocation & loc, const std::vector<Label> && labels = {} )
    421                 : WaitStmt(loc, std::move(labels)) {}
    422 
    423         const Stmt * accept( Visitor & v ) const override { return v.visit( this ); }
    424   private:
    425         WaitForStmt * clone() const override { return new WaitForStmt{ *this }; }
    426         MUTATE_FRIEND
    427 };
    428 
    429 // Clause in a waitfor statement: waitfor (..., ...) ...
    430 class WaitForClause final : public WhenClause {
    431   public:
    432         std::vector<ptr<Expr>> target_args;
    433 
    434         WaitForClause( const CodeLocation & loc )
    435                 : WhenClause( loc ) {}
    436 
    437410        const WaitForClause * accept( Visitor & v ) const override { return v.visit( this ); }
    438411  private:
    439412        WaitForClause * clone() const override { return new WaitForClause{ *this }; }
    440         MUTATE_FRIEND
    441 };
    442 
    443 // waituntil statement: when (...) waituntil (...) ... timeout(...) ... else ...
    444 class WaitUntilStmt final : public WaitStmt {
    445   public:
    446     // Non-ast node used during compilation to store data needed to generate predicates
    447     //    and set initial status values for clauses
    448     // Used to create a tree corresponding to the structure of the clauses in a WaitUntil
    449     struct ClauseNode {
    450         enum Op { AND, OR, LEFT_OR, LEAF, ELSE, TIMEOUT } op; // operation/type tag
    451         // LEFT_OR used with TIMEOUT/ELSE to indicate that we ignore right hand side after parsing
    452 
    453         ClauseNode * left;
    454         ClauseNode * right;
    455         WhenClause * leaf;  // only set if this node is a leaf (points into vector of clauses)
    456 
    457         bool ambiguousWhen; // used to paint nodes of predicate tree based on when() clauses
    458         bool whenState;     // used to track if when_cond is toggled on or off for generating init values
    459         bool childOfAnd;      // true on leaf nodes that are children of AND, false otherwise
    460 
    461         ClauseNode( Op op, ClauseNode * left, ClauseNode * right )
    462             : op(op), left(left), right(right), leaf(nullptr),
    463             ambiguousWhen(false), whenState(true), childOfAnd(false) {}
    464         ClauseNode( Op op, WhenClause * leaf )
    465             : op(op), left(nullptr), right(nullptr), leaf(leaf),
    466             ambiguousWhen(false), whenState(true), childOfAnd(false) {}
    467         ClauseNode( WhenClause * leaf ) : ClauseNode(LEAF, leaf) {}
    468        
    469         ~ClauseNode() {
    470             if ( left ) delete left;
    471             if ( right ) delete right;
    472         }
    473     };
    474 
    475         std::vector<ptr<WhenClause>> clauses;
    476     ClauseNode * predicateTree;
    477 
    478         WaitUntilStmt( const CodeLocation & loc, const std::vector<Label> && labels = {} )
    479                 : WaitStmt(loc, std::move(labels)) {}
    480 
    481     ~WaitUntilStmt() { delete predicateTree; }
    482 
    483         const Stmt * accept( Visitor & v ) const override { return v.visit( this ); }
    484   private:
    485         WaitUntilStmt * clone() const override { return new WaitUntilStmt{ *this }; }
    486413        MUTATE_FRIEND
    487414};
  • src/AST/Visitor.hpp

    r3982384 r6e4c44d  
    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;
    5352    virtual const ast::Stmt *             visit( const ast::WaitForStmt          * ) = 0;
    5453    virtual const ast::WaitForClause *    visit( const ast::WaitForClause        * ) = 0;
    55     virtual const ast::Stmt *             visit( const ast::WaitUntilStmt        * ) = 0;
    5654    virtual const ast::Decl *             visit( const ast::WithStmt             * ) = 0;
    5755    virtual const ast::NullStmt *         visit( const ast::NullStmt             * ) = 0;
  • src/Common/CodeLocationTools.cpp

    r3982384 r6e4c44d  
    128128    macro(FinallyClause, FinallyClause) \
    129129    macro(SuspendStmt, Stmt) \
    130     macro(WhenClause, WhenClause) \
    131130    macro(WaitForStmt, Stmt) \
    132131    macro(WaitForClause, WaitForClause) \
    133     macro(WaitUntilStmt, Stmt) \
    134132    macro(WithStmt, Decl) \
    135133    macro(NullStmt, NullStmt) \
  • src/Concurrency/WaitforNew.cpp

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

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

    r3982384 r6e4c44d  
    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 = maybeBuild( targetExpr );
     330        clause->target_func = maybeBuild( targetExpr );
    331331        clause->stmt = maybeMoveBuild( stmt );
    332         clause->when_cond = notZeroExpr( maybeMoveBuild( when ) );
     332        clause->cond = notZeroExpr( maybeMoveBuild( when ) );
    333333
    334334        ExpressionNode * next = dynamic_cast<ExpressionNode *>( targetExpr->get_next() );
     
    359359        return existing;
    360360} // build_waitfor_timeout
    361 
    362 ast::WaitUntilStmt::ClauseNode * build_waituntil_clause( const CodeLocation & loc, ExpressionNode * when, ExpressionNode * targetExpr, StatementNode * stmt ) {
    363     ast::WhenClause * clause = new ast::WhenClause( loc );
    364     clause->when_cond = notZeroExpr( maybeMoveBuild( when ) );
    365     clause->stmt = maybeMoveBuild( stmt );
    366     clause->target = maybeMoveBuild( targetExpr );
    367     return new ast::WaitUntilStmt::ClauseNode( clause );
    368 }
    369 ast::WaitUntilStmt::ClauseNode * build_waituntil_else( const CodeLocation & loc, ExpressionNode * when, StatementNode * stmt ) {
    370     ast::WhenClause * clause = new ast::WhenClause( loc );
    371     clause->when_cond = notZeroExpr( maybeMoveBuild( when ) );
    372     clause->stmt = maybeMoveBuild( stmt );
    373     return new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::ELSE, clause );
    374 }
    375 ast::WaitUntilStmt::ClauseNode * build_waituntil_timeout( const CodeLocation & loc, ExpressionNode * when, ExpressionNode * timeout, StatementNode * stmt ) {
    376     ast::WhenClause * clause = new ast::WhenClause( loc );
    377     clause->when_cond = notZeroExpr( maybeMoveBuild( when ) );
    378     clause->stmt = maybeMoveBuild( stmt );
    379     clause->target = maybeMoveBuild( timeout );
    380     return new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::TIMEOUT, clause );
    381 }
    382 
    383 ast::WaitUntilStmt * build_waituntil_stmt( const CodeLocation & loc, ast::WaitUntilStmt::ClauseNode * root ) {
    384     ast::WaitUntilStmt * retStmt = new ast::WaitUntilStmt( loc );
    385     retStmt->predicateTree = root;
    386    
    387     // iterative tree traversal
    388     std::vector<ast::WaitUntilStmt::ClauseNode *> nodeStack; // stack needed for iterative traversal
    389     ast::WaitUntilStmt::ClauseNode * currNode = nullptr;
    390     ast::WaitUntilStmt::ClauseNode * lastInternalNode = nullptr;
    391     ast::WaitUntilStmt::ClauseNode * cleanup = nullptr; // used to cleanup removed else/timeout
    392     nodeStack.push_back(root);
    393 
    394     do {
    395         currNode = nodeStack.back();
    396         nodeStack.pop_back(); // remove node since it will be processed
    397 
    398         switch (currNode->op) {
    399             case ast::WaitUntilStmt::ClauseNode::LEAF:
    400                 retStmt->clauses.push_back(currNode->leaf);
    401                 break;
    402             case ast::WaitUntilStmt::ClauseNode::ELSE:
    403                 retStmt->else_stmt = currNode->leaf->stmt
    404                     ? ast::deepCopy( currNode->leaf->stmt )
    405                     : nullptr;
    406                
    407                 retStmt->else_cond = currNode->leaf->when_cond
    408                     ? ast::deepCopy( currNode->leaf->when_cond )
    409                     : nullptr;
    410 
    411                 delete currNode->leaf;
    412                 break;
    413             case ast::WaitUntilStmt::ClauseNode::TIMEOUT:
    414                 retStmt->timeout_time = currNode->leaf->target
    415                     ? ast::deepCopy( currNode->leaf->target )
    416                     : nullptr;
    417                 retStmt->timeout_stmt = currNode->leaf->stmt
    418                     ? ast::deepCopy( currNode->leaf->stmt )
    419                     : nullptr;
    420                 retStmt->timeout_cond = currNode->leaf->when_cond
    421                     ? ast::deepCopy( currNode->leaf->when_cond )
    422                     : nullptr;
    423 
    424                 delete currNode->leaf;
    425                 break;
    426             default:
    427                 nodeStack.push_back( currNode->right ); // process right after left
    428                 nodeStack.push_back( currNode->left );
    429 
    430                 // Cut else/timeout out of the tree
    431                 if ( currNode->op == ast::WaitUntilStmt::ClauseNode::LEFT_OR ) {
    432                     if ( lastInternalNode )
    433                         lastInternalNode->right = currNode->left;
    434                     else    // if not set then root is LEFT_OR
    435                         retStmt->predicateTree = currNode->left;
    436    
    437                     currNode->left = nullptr;
    438                     cleanup = currNode;
    439                 }
    440                
    441                 lastInternalNode = currNode;
    442                 break;
    443         }
    444     } while ( !nodeStack.empty() );
    445 
    446     if ( cleanup ) delete cleanup;
    447 
    448     return retStmt;
    449 }
    450361
    451362ast::Stmt * build_with( const CodeLocation & location, ExpressionNode * exprs, StatementNode * stmt ) {
  • src/Parser/StatementNode.h

    r3982384 r6e4c44d  
    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 );
    102 ast::WaitUntilStmt::ClauseNode * build_waituntil_clause( const CodeLocation &, ExpressionNode * when, ExpressionNode * targetExpr, StatementNode * stmt );
    103 ast::WaitUntilStmt::ClauseNode * build_waituntil_else( const CodeLocation &, ExpressionNode * when, StatementNode * stmt );
    104 ast::WaitUntilStmt::ClauseNode * build_waituntil_timeout( const CodeLocation &, ExpressionNode * when, ExpressionNode * timeout, StatementNode * stmt );
    105 ast::WaitUntilStmt * build_waituntil_stmt( const CodeLocation &, ast::WaitUntilStmt::ClauseNode * root );
    106102ast::Stmt * build_with( const CodeLocation &, ExpressionNode * exprs, StatementNode * stmt );
    107103ast::Stmt * build_mutex( const CodeLocation &, ExpressionNode * exprs, StatementNode * stmt );
  • src/Parser/lex.ll

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

    r3982384 r6e4c44d  
    307307        ClauseNode * clause;
    308308        ast::WaitForStmt * wfs;
    309     ast::WaitUntilStmt::ClauseNode * wucn;
    310309        CondCtl * ifctl;
    311310        ForCtrl * forctl;
     
    428427%type<expr> when_clause                                 when_clause_opt                         waitfor         waituntil               timeout
    429428%type<stmt> waitfor_statement                           waituntil_statement
    430 %type<wfs> wor_waitfor_clause
    431 %type<wucn> waituntil_clause                    wand_waituntil_clause       wor_waituntil_clause
     429%type<wfs> wor_waitfor_clause                   waituntil_clause                        wand_waituntil_clause   wor_waituntil_clause
    432430
    433431// declarations
     
    16871685waituntil_clause:
    16881686        when_clause_opt waituntil statement
    1689                 { $$ = build_waituntil_clause( yylloc, $1, $2, maybe_build_compound( yylloc, $3 ) ); }
     1687                { printf( "waituntil_clause 1\n" ); $$ = nullptr; }
    16901688        | '(' wor_waituntil_clause ')'
    1691                 { $$ = $2; }
     1689                { printf( "waituntil_clause 2\n" ); $$ = nullptr; }
    16921690        ;
    16931691
    16941692wand_waituntil_clause:
    16951693        waituntil_clause                                                                        %prec THEN
    1696                 { $$ = $1; }
     1694                { printf( "wand_waituntil_clause 1\n" ); $$ = nullptr; }
    16971695        | waituntil_clause wand wand_waituntil_clause
    1698                 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::AND, $1, $3 ); }
     1696                { printf( "wand_waituntil_clause 2\n" ); $$ = nullptr; }
    16991697        ;
    17001698
    17011699wor_waituntil_clause:
    17021700        wand_waituntil_clause
    1703                 { $$ = $1; }
     1701                { printf( "wor_waituntil_clause 1\n" ); $$ = nullptr; }
    17041702        | wor_waituntil_clause wor wand_waituntil_clause
    1705                 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::OR, $1, $3 ); }
     1703                { printf( "wor_waituntil_clause 2\n" ); $$ = nullptr; }
    17061704        | wor_waituntil_clause wor when_clause_opt ELSE statement
    1707                 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::LEFT_OR, $1, build_waituntil_else( yylloc, $3, maybe_build_compound( yylloc, $5 ) ) ); }
     1705                { printf( "wor_waituntil_clause 3\n" ); $$ = nullptr; }
    17081706        | wor_waituntil_clause wor when_clause_opt timeout statement    %prec THEN
    1709                 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::LEFT_OR, $1, build_waituntil_timeout( yylloc, $3, $4, maybe_build_compound( yylloc, $5 ) ) ); }
     1707                { printf( "wor_waituntil_clause 4\n" ); $$ = nullptr; }
    17101708        // "else" must be conditional after timeout or timeout is never triggered (i.e., it is meaningless)
    17111709        | wor_waituntil_clause wor when_clause_opt timeout statement wor ELSE statement // syntax error
    17121710                { SemanticError( yylloc, "else clause must be conditional after timeout or timeout never triggered." ); $$ = nullptr; }
    17131711        | wor_waituntil_clause wor when_clause_opt timeout statement wor when_clause ELSE statement
    1714                 { $$ = new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::LEFT_OR, $1,
    1715                 new ast::WaitUntilStmt::ClauseNode( ast::WaitUntilStmt::ClauseNode::Op::OR,
    1716                     build_waituntil_timeout( yylloc, $3, $4, maybe_build_compound( yylloc, $5 ) ),
    1717                     build_waituntil_else( yylloc, $7, maybe_build_compound( yylloc, $9 ) ) ) ); }
     1712                { printf( "wor_waituntil_clause 6\n" ); $$ = nullptr; }
    17181713        ;
    17191714
     
    17211716        wor_waituntil_clause                                                            %prec THEN
    17221717                // SKULLDUGGERY: create an empty compound statement to test parsing of waituntil statement.
    1723                 {
    1724             $$ = new StatementNode( build_waituntil_stmt( yylloc, $1 ) );
    1725             // $$ = new StatementNode( build_compound( yylloc, nullptr ) );
    1726         }
     1718                { $$ = new StatementNode( build_compound( yylloc, nullptr ) ); }
    17271719        ;
    17281720
  • src/ResolvExpr/Resolver.cc

    r3982384 r6e4c44d  
    17301730
    17311731                        // Find all candidates for a function in canonical form
    1732                         funcFinder.find( clause.target, ResolvMode::withAdjustment() );
     1732                        funcFinder.find( clause.target_func, ResolvMode::withAdjustment() );
    17331733
    17341734                        if ( funcFinder.candidates.empty() ) {
    17351735                                stringstream ss;
    17361736                                ss << "Use of undeclared indentifier '";
    1737                                 ss << clause.target.strict_as< ast::NameExpr >()->name;
     1737                                ss << clause.target_func.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 = funcCandidates.front()->expr;
     1924                        clause2->target_func = 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->when_cond = findSingleExpression( clause.when_cond, context );
     1947                        clause2->cond = findSingleExpression( clause.cond, context );
    19481948                        clause2->stmt = clause.stmt->accept( *visitor );
    19491949
  • src/main.cc

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

    r3982384 r6e4c44d  
    1111## Created On       : Sun May 31 09:08:15 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Fri May 12 18:03:57 2023
    14 ## Update Count     : 176
     13## Last Modified On : Mon Apr 10 23:24:02 2023
     14## Update Count     : 96
    1515###############################################################################
    1616
     
    2222DEFAULT_INCLUDES = -I${abs_srcdir}
    2323
    24 debug ?= yes
    25 installed ?= no
    26 ARCH=${if ${arch},"--arch=${arch}"}
     24debug=yes
     25installed=no
    2726archiveerrors=
    2827
     
    3837# applies to both programs
    3938# since automake doesn't have support for CFA we have to
    40 AM_CFLAGS = ${if ${test}, 2> ${test}, } \
    41         -fdebug-prefix-map=${abspath ${abs_srcdir}}= \
     39AM_CFLAGS = $(if $(test), 2> $(test), ) \
     40        -fdebug-prefix-map=$(abspath ${abs_srcdir})= \
    4241        -fdebug-prefix-map=/tmp= \
    4342        -fno-diagnostics-show-caret \
     
    5251
    5352# get the desired cfa to test
    54 TARGET_CFA = ${if ${filter ${installed},yes}, @CFACC_INSTALL@, @CFACC@}
     53TARGET_CFA = $(if $(filter $(installed),yes), @CFACC_INSTALL@, @CFACC@)
    5554
    5655# adjust CC to current flags
    57 CC = LC_ALL=C ${if ${DISTCC_CFA_PATH},distcc ${DISTCC_CFA_PATH} ${ARCH_FLAGS} ,${TARGET_CFA} ${DEBUG_FLAGS} ${ARCH_FLAGS}}
    58 CFACC = ${CC}
     56CC = LC_ALL=C $(if $(DISTCC_CFA_PATH),distcc $(DISTCC_CFA_PATH) ${ARCH_FLAGS} ,$(TARGET_CFA) ${DEBUG_FLAGS} ${ARCH_FLAGS})
     57CFACC = $(CC)
    5958
    6059# get local binary for depedencies
     
    6261
    6362# adjusted CC but without the actual distcc call
    64 CFACCLOCAL = ${if ${DISTCC_CFA_PATH},${DISTCC_CFA_PATH} ${ARCH_FLAGS} ,${TARGET_CFA} ${DEBUG_FLAGS} ${ARCH_FLAGS}}
    65 CFACCLINK = ${CFACCLOCAL} -quiet ${if ${test}, 2> ${test}, } ${${shell echo "${@}_FLAGSLD" | sed 's/-\|\//_/g'}}
    66 
    67 PRETTY_PATH=mkdir -p ${dir ${abspath ${@}}} && cd ${srcdir} &&
    68 
    69 .PHONY : list .validate .test_makeflags
    70 .INTERMEDIATE : .validate .validate.cfa .test_makeflags
     63CFACCLOCAL = $(if $(DISTCC_CFA_PATH),$(DISTCC_CFA_PATH) ${ARCH_FLAGS} ,$(TARGET_CFA) ${DEBUG_FLAGS} ${ARCH_FLAGS})
     64CFACCLINK = $(CFACCLOCAL) -quiet $(if $(test), 2> $(test), ) $($(shell echo "${@}_FLAGSLD" | sed 's/-\|\//_/g'))
     65
     66PRETTY_PATH=mkdir -p $(dir $(abspath ${@})) && cd ${srcdir} &&
     67
     68.PHONY: list .validate .test_makeflags
     69.INTERMEDIATE: .validate .validate.cfa .test_makeflags
    7170EXTRA_PROGRAMS = avl_test linkonce linking/mangling/anon .dummy_hack # build but do not install
    7271EXTRA_DIST = test.py \
     
    9695        for file in `${TEST_PY} --list-dist`; do \
    9796                if test -f ${srcdir}/$${file}; then \
    98                         ${MKDIR_P} $$(dirname ${distdir}/$${file}); \
     97                        $(MKDIR_P) $$(dirname ${distdir}/$${file}); \
    9998                        cp -df ${srcdir}/$${file} ${distdir}/$${file}; \
    10099                fi; \
     
    108107
    109108#----------------------------------------------------------------------------------------------------------------
    110 
    111 all-local : # This name is important to automake and implies the default build target.
    112         @+${TEST_PY} --debug=${debug} --install=${installed} --invariant --archive-errors=${archiveerrors} ${concurrent} ${timeouts} ${ARCH} --all # '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
    113 
    114 install : all-local # PAB only
    115 
    116 tests : all-local
    117 
    118 quick :
    119         @+${TEST_PY} --debug=${debug} --install=${installed} --archive-errors=${archiveerrors} ${concurrent} ${timeouts} ${ARCH} ${quick_test}
    120 
    121 concurrency :
    122         @+${TEST_PY} --debug=${debug} --install=${installed} ${ARCH} -Iconcurrent
    123 
    124 list :
    125         @+${TEST_PY} --list ${concurrent}
    126 
    127 help :
    128         @echo "user targets:"
    129         @echo "    Run the complete test suite."
    130         @echo "    $$ make (null) / tests [debug=yes/no] [installed=yes/no] [arch=x86/x64/arm]"
    131         @echo ""
    132         @echo "    Run the short (quick) test suite."
    133         @echo "    $$ make quick [debug=yes/no] [installed=yes/no] [arch=x86/x64/arm]"
    134         @echo ""
    135         @echo "    Run the concurrent test suite."
    136         @echo "    $$ make concurrency [debug=yes/no] [installed=yes/no] [arch=x86/x64/arm]"
    137         @echo ""
    138         @echo "    List all tests in the test suite."
    139         @echo "    $$ make list"
     109all-local :
     110        @+${TEST_PY} --debug=${debug} --install=${installed} --archive-errors=${archiveerrors} ${concurrent} ${timeouts} ${quick_test}
     111
     112all-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
    140114
    141115mostlyclean-local :
     
    149123        find ${builddir} -path '*.Po' -delete
    150124
     125list :
     126        @+${TEST_PY} --list ${concurrent}
     127
    151128.test_makeflags:
    152129        @echo "${MAKEFLAGS}"
    153130
    154131.validate: .validate.cfa
    155         ${CFACOMPILE} .validate.cfa -fsyntax-only -Wall -Wextra -Werror
     132        $(CFACOMPILE) .validate.cfa -fsyntax-only -Wall -Wextra -Werror
    156133
    157134.validate.cfa:
     
    165142        @echo "int bar() { return 0; }" > ${@}
    166143
     144concurrency :
     145        @+${TEST_PY} --debug=${debug}  --install=${installed} -Iconcurrent
     146
    167147#----------------------------------------------------------------------------------------------------------------
    168148
    169149# Use for all tests, make sure the path are correct and all flags are added
    170 CFACOMPILETEST=${PRETTY_PATH} ${CFACOMPILE} ${shell realpath --relative-to=${srcdir} ${<}} ${${shell echo "${@}_FLAGSCFA" | sed 's/-\|\//_/g'}}
     150CFACOMPILETEST=$(PRETTY_PATH) $(CFACOMPILE) $(shell realpath --relative-to=${srcdir} ${<}) $($(shell echo "${@}_FLAGSCFA" | sed 's/-\|\//_/g'))
    171151
    172152#----------------------------------------------------------------------------------------------------------------
     
    175155# split into two steps to support compiling remotely using distcc
    176156# don't use distcc to do the linking because distcc doesn't do linking
    177 % : %.cfa ${CFACCBIN}
    178         ${CFACOMPILETEST} -c -o ${abspath ${@}}.o -DIN_DIR="${abspath ${dir ${<}}}/.in/"
    179         ${CFACCLINK} ${@}.o -o ${abspath ${@}}
    180         rm ${abspath ${@}}.o
     157% : %.cfa $(CFACCBIN)
     158        $(CFACOMPILETEST) -c -o $(abspath ${@}).o -DIN_DIR="$(abspath $(dir ${<}))/.in/"
     159        $(CFACCLINK) ${@}.o -o $(abspath ${@})
     160        rm $(abspath ${@}).o
    181161
    182162# implicit rule for c++ test
    183163# convient for testing the testsuite itself but not actuall used
    184164% : %.cpp
    185         ${PRETTY_PATH} ${CXXCOMPILE} ${shell realpath --relative-to=${srcdir} ${<}} -o ${abspath ${@}}
     165        $(PRETTY_PATH) $(CXXCOMPILE) $(shell realpath --relative-to=${srcdir} ${<}) -o $(abspath ${@})
    186166
    187167#------------------------------------------------------------------------------
     
    194174# Generated code
    195175GENERATED_CODE = declarationSpecifier gccExtensions extension attributes functions KRfunctions
    196 ${GENERATED_CODE} : % : %.cfa ${CFACCBIN}
    197         ${CFACOMPILETEST} -CFA -XCFA -p -c -fsyntax-only -o ${abspath ${@}}
     176$(GENERATED_CODE): % : %.cfa $(CFACCBIN)
     177        $(CFACOMPILETEST) -CFA -XCFA -p -c -fsyntax-only -o $(abspath ${@})
    198178
    199179#------------------------------------------------------------------------------
     
    201181#------------------------------------------------------------------------------
    202182# tests that just validate syntax and compiler output should be compared to stderr
    203 CFACOMPILE_SYNTAX = ${CFACOMPILETEST} -Wno-unused-variable -Wno-unused-label -c -fsyntax-only -o ${abspath ${@}}
     183CFACOMPILE_SYNTAX = $(CFACOMPILETEST) -Wno-unused-variable -Wno-unused-label -c -fsyntax-only -o $(abspath ${@})
    204184
    205185SYNTAX_ONLY_CODE = expression typedefRedef variableDeclarator switch numericConstants identFuncDeclarator \
    206186        init1 limits nested-types cast labelledExit array quasiKeyword include/stdincludes include/includes builtins/sync warnings/self-assignment concurrent/waitfor/parse
    207 ${SYNTAX_ONLY_CODE} : % : %.cfa ${CFACCBIN}
    208         ${CFACOMPILE_SYNTAX}
    209         ${if ${test}, cp ${test} ${abspath ${@}}, }
     187$(SYNTAX_ONLY_CODE): % : %.cfa $(CFACCBIN)
     188        $(CFACOMPILE_SYNTAX)
     189        $(if $(test), cp $(test) $(abspath ${@}), )
    210190
    211191# expected failures
    212192# use custom target since they require a custom define *and* have a name that doesn't match the file
    213 alloc-ERROR : alloc.cfa ${CFACCBIN}
    214         ${CFACOMPILE_SYNTAX} -DERR1
    215         -cp ${test} ${abspath ${@}}
    216 
    217 init1-ERROR : init1.cfa ${CFACCBIN}
    218         ${CFACOMPILE_SYNTAX} -DERR1
    219         -cp ${test} ${abspath ${@}}
    220 
    221 typedefRedef-ERR1 : typedefRedef.cfa ${CFACCBIN}
    222         ${CFACOMPILE_SYNTAX} -DERR1
    223         -cp ${test} ${abspath ${@}}
    224 
    225 nested-types-ERR1 : nested-types.cfa ${CFACCBIN}
    226         ${CFACOMPILE_SYNTAX} -DERR1
    227         -cp ${test} ${abspath ${@}}
    228 
    229 nested-types-ERR2 : nested-types.cfa ${CFACCBIN}
    230         ${CFACOMPILE_SYNTAX} -DERR2
    231         -cp ${test} ${abspath ${@}}
    232 
    233 raii/memberCtors-ERR1 : raii/memberCtors.cfa ${CFACCBIN}
    234         ${CFACOMPILE_SYNTAX} -DERR1
    235         -cp ${test} ${abspath ${@}}
    236 
    237 raii/ctor-autogen-ERR1 : raii/ctor-autogen.cfa ${CFACCBIN}
    238         ${CFACOMPILE_SYNTAX} -DERR1
    239         -cp ${test} ${abspath ${@}}
    240 
    241 raii/dtor-early-exit-ERR1 : raii/dtor-early-exit.cfa ${CFACCBIN}
    242         ${CFACOMPILE_SYNTAX} -DERR1
    243         -cp ${test} ${abspath ${@}}
    244 
    245 raii/dtor-early-exit-ERR2 : raii/dtor-early-exit.cfa ${CFACCBIN}
    246         ${CFACOMPILE_SYNTAX} -DERR2
    247         -cp ${test} ${abspath ${@}}
     193alloc-ERROR : alloc.cfa $(CFACCBIN)
     194        $(CFACOMPILE_SYNTAX) -DERR1
     195        -cp $(test) $(abspath ${@})
     196
     197init1-ERROR : init1.cfa $(CFACCBIN)
     198        $(CFACOMPILE_SYNTAX) -DERR1
     199        -cp $(test) $(abspath ${@})
     200
     201typedefRedef-ERR1 : typedefRedef.cfa $(CFACCBIN)
     202        $(CFACOMPILE_SYNTAX) -DERR1
     203        -cp $(test) $(abspath ${@})
     204
     205nested-types-ERR1 : nested-types.cfa $(CFACCBIN)
     206        $(CFACOMPILE_SYNTAX) -DERR1
     207        -cp $(test) $(abspath ${@})
     208
     209nested-types-ERR2 : nested-types.cfa $(CFACCBIN)
     210        $(CFACOMPILE_SYNTAX) -DERR2
     211        -cp $(test) $(abspath ${@})
     212
     213raii/memberCtors-ERR1 : raii/memberCtors.cfa $(CFACCBIN)
     214        $(CFACOMPILE_SYNTAX) -DERR1
     215        -cp $(test) $(abspath ${@})
     216
     217raii/ctor-autogen-ERR1 : raii/ctor-autogen.cfa $(CFACCBIN)
     218        $(CFACOMPILE_SYNTAX) -DERR1
     219        -cp $(test) $(abspath ${@})
     220
     221raii/dtor-early-exit-ERR1 : raii/dtor-early-exit.cfa $(CFACCBIN)
     222        $(CFACOMPILE_SYNTAX) -DERR1
     223        -cp $(test) $(abspath ${@})
     224
     225raii/dtor-early-exit-ERR2 : raii/dtor-early-exit.cfa $(CFACCBIN)
     226        $(CFACOMPILE_SYNTAX) -DERR2
     227        -cp $(test) $(abspath ${@})
    248228
    249229# Exception Tests
    250230# Test with libcfathread; it changes how storage works.
    251231
    252 exceptions/%-threads : exceptions/%.cfa ${CFACCBIN}
    253         ${CFACOMPILETEST} -include exceptions/with-threads.hfa -c -o ${abspath ${@}}.o
    254         ${CFACCLOCAL} ${${shell echo "${@}_FLAGSLD" | sed 's/-\|\//_/g'}} ${abspath ${@}}.o -o ${abspath ${@}}
     232exceptions/%-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 ${@})
    255235
    256236# Linking tests
    257237# Meta tests to make sure we see linking errors (can't compile with -O2 since it may multiply number of calls)
    258 linking/linkerror : linking/linkerror.cfa ${CFACCBIN}
    259         ${CFACOMPILETEST} -O0 -c -o ${abspath ${@}}.o
    260         ${CFACCLINK}  -O0 ${@}.o -o ${abspath ${@}}
    261         rm ${abspath ${@}}.o
     238linking/linkerror : linking/linkerror.cfa $(CFACCBIN)
     239        $(CFACOMPILETEST) -O0 -c -o $(abspath ${@}).o
     240        $(CFACCLINK)  -O0 ${@}.o -o $(abspath ${@})
     241        rm $(abspath ${@}).o
    262242
    263243#------------------------------------------------------------------------------
  • tests/concurrent/futures/select_future.cfa

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