%!PS-Adobe-2.0 %%Creator: dvips by Radical Eye Software %%Pages: 10 1 %%BoundingBox: 0 0 612 792 %%EndComments %%BeginDocument: tex.pro /TeXDict 200 dict def TeXDict begin /bdf{bind def}def /bop-aux{}bdf /@rigin{ /@page-height exch def /@page-width exch def 72 Resolution div dup neg scale translate}bdf /@letter{Resolution dup -10 mul 8.5 11 @rigin}bdf /@landscape{[ 0 1 -1 0 0 0]concat Resolution dup 8.5 11 @rigin}bdf /@a4{Resolution dup -10.6929133858 mul 21 2.54 div 29.7 2.54 div @rigin}bdf /@legal{Resolution dup -13 mul 8.5 14 @rigin}bdf /@11x17{statusdict /11x17tray known{statusdict begin 11x17tray end}if Resolution dup -16 mul 11 17 @rigin}bdf /@manualfeed{ statusdict /manualfeed true put}bdf /@copies{/#copies exch def}bdf /@draft{ /bop-aux{gsave initmatrix 72 dup scale @page-width 2 div @page-height 2 div translate @page-height @page-width atan rotate /Helvetica-Bold findfont 2 scalefont setfont(DRAFT)dup stringwidth pop 2 div neg -1 moveto .95 setgray show grestore}bdf}bdf /@FontMatrix[1 0 0 -1 0 0]def /@FontBBox[0 0 0 0]def /dmystr(ZZf@@@)def /newname{dmystr cvn}bdf /df{/fontname exch def dmystr 2 fontname cvx(@@@@)cvs putinterval newname 7 dict def newname load begin /FontType 3 def /FontMatrix @FontMatrix def /FontBBox @FontBBox def /BitMaps 256 array def /BuildChar{CharBuilder}def /Encoding IdentityEncoding def end fontname{/foo setfont}2 array copy cvx def fontname load 0 dmystr 6 string copy cvn cvx put}bdf /dfe{newname dup load definefont setfont}bdf /ch-image{ ch-data 0 get}bdf /ch-width{ch-data 1 get}bdf /ch-height{ch-data 2 get}bdf /ch-xoff{ch-data 3 get}bdf /ch-yoff{ch-data 4 get}bdf /ch-dx{ch-data 5 get} bdf /CharBuilder{save 3 1 roll exch /BitMaps get exch get /ch-data exch def ch-data null ne{ch-dx 0 ch-xoff ch-yoff neg ch-xoff ch-width add ch-height ch-yoff sub setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-height ch-yoff sub .1 add]{ch-image}imagemask}if restore}bdf /dc{/ch-code exch def /ch-data exch def newname load /BitMaps get ch-code ch-data put}bdf /bop{gsave /SaveImage save def /bop-aux load exec 0 0 moveto}bdf /eop{clear SaveImage restore showpage grestore}bdf /@start{/Resolution exch def /IdentityEncoding 256 array def 0 1 255{IdentityEncoding exch 1 string dup 0 3 index put cvn put}for}bdf /p{show}bdf /RuleMatrix[1 0 0 -1 -.1 -.1]def /BlackDots 8 string def /v{gsave currentpoint translate false RuleMatrix{ BlackDots}imagemask grestore}bdf /a{moveto}bdf /delta 0 def /tail{dup /delta exch def 0 rmoveto}bdf /b{exch show tail}bdf /c{show delta 4 sub tail}bdf /d{ show delta 3 sub tail}bdf /e{show delta 2 sub tail}bdf /f{show delta 1 sub tail}bdf /g{show delta 0 rmoveto}bdf /h{show delta 1 add tail}bdf /i{show delta 2 add tail}bdf /j{show delta 3 add tail}bdf /k{show delta 4 add tail} bdf /l{show -4 0 rmoveto}bdf /m{show -3 0 rmoveto}bdf /n{show -2 0 rmoveto} bdf /o{show -1 0 rmoveto}bdf /q{show 1 0 rmoveto}bdf /r{show 2 0 rmoveto}bdf /s{show 3 0 rmoveto}bdf /t{show 4 0 rmoveto}bdf /w{0 rmoveto}bdf /x{0 exch rmoveto}bdf /y{3 2 roll show moveto}bdf /bos{/section save def}bdf /eos{clear section restore}bdf end %%EndDocument %%BeginDocument: special.pro TeXDict begin /SDict 200 dict def SDict begin /@SpecialDefaults{/hs 612 def /vs 792 def /ho 0 def /vo 0 def /hsc 1 def /vsc 1 def /ang 0 def /CLIP false def /BBcalc false def}bdf /@scaleunit 1 def /@hscale{@scaleunit div /hsc exch def}bdf /@vscale{@scaleunit div /vsc exch def}bdf /@hsize{/hs exch def /CLIP true def}bdf /@vsize{/vs exch def /CLIP true def}bdf /@hoffset{/ho exch def} bdf /@voffset{/vo exch def}bdf /@angle{/ang exch def}bdf /@rwi{10 div /rwi exch def}bdf /@llx{/llx exch def}bdf /@lly{/lly exch def}bdf /@urx{/urx exch def}bdf /@ury{/ury exch def /BBcalc true def}bdf end /@MacSetUp{userdict /md known{userdict /md get type /dicttype eq{md begin /letter{}def /note{}def /legal{}def /od{txpose 1 0 mtx defaultmatrix dtransform exch atan/pa exch def newpath clippath mark{transform{itransform moveto}}{transform{itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{ itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{ closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}def /txpose{pxs pys scale ppr aload pop por{noflips{pop exch neg exch translate pop 1 -1 scale}if xflip yflip and{pop exch neg exch translate 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if xflip yflip not and{pop exch neg exch translate pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{ppr 1 get neg ppr 0 get neg translate} if}{noflips{translate pop pop 270 rotate 1 -1 scale}if xflip yflip and{ translate pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if xflip yflip not and{translate pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{ translate pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 exch translate} if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy translate .96 dup scale neg exch neg exch translate}if}def /cp{pop pop showpage pm restore}def end}if}if}def /psf$TeXscale{65536 div}def /startTexFig {/psf$SavedState save def userdict maxlength dict begin Resolution 72 div dup neg scale currentpoint translate /psf$ury exch psf$TeXscale def /psf$urx exch psf$TeXscale def /psf$lly exch psf$TeXscale def /psf$llx exch psf$TeXscale def /psf$y exch psf$TeXscale def /psf$x exch psf$TeXscale def currentpoint /psf$cy exch def /psf$cx exch def /psf$sx psf$x psf$urx psf$llx sub div def /psf$sy psf$y psf$ury psf$lly sub div def psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub translate /showpage{}def /erasepage{ }def /copypage{}def @MacSetUp}def /doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto}def /endTexFig{end psf$SavedState restore}def /@beginspecial{SDict begin /SpecialSave save def Resolution 72 div dup neg scale currentpoint translate @SpecialDefaults}bdf /@setspecial{CLIP{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}{initclip}ifelse ho vo translate hsc vsc scale ang rotate BBcalc{rwi urx llx sub div dup scale llx neg lly neg translate}if /showpage{}def newpath}bdf /@endspecial{clear SpecialSave restore end}bdf /@defspecial{SDict begin}bdf /@fedspecial{end}bdf /li{lineto}bdf /rl{rlineto} bdf /rc{rcurveto}bdf /np{/SaveX currentpoint /SaveY exch def def newpath}bdf /st{stroke SaveX SaveY moveto}bdf /fil{fill SaveX SaveY moveto}bdf /ellipse{ /endangle exch def /startangle exch def /yrad exch def /xrad exch def /savematrix matrix currentmatrix def translate xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}bdf end %%EndDocument TeXDict begin 300 @start /fa df[<00010000020000020000020000020000040000040000 0400000400000800000800007E0001C9800710E00C1060181070381030702030702030E02070E0 2070E04070E040E0E040E06041C06083803086001C9C0007E00001000001000001000001000002 0000020000020000020000>20 37 2 8 25]30 dc[<381F004E61804681C04701C08F01C08E01 C00E01C00E01C01C03801C03801C03801C0700380710380710380E10380E20700640300380>20 18 2 0 25]110 dc[<00C001C001C001C00380038003800380FFF00700070007000E000E000E00 0E001C001C001C001C00382038203840384018800F00>12 26 0 0 15]116 dc[<1C00C0802701 C1C04701C1C04701C0C087038040870380400E0380400E0380401C0700801C0700801C0700801C 07010018060100180602001C0E02001C0F04000E13080003E1F000>26 18 2 0 30]119 dc[<07 878008C84010F0C020F1E020E3C040E18000E00000E00001C00001C00001C00001C000638080F3 8080F38100E5810084C600787800>19 18 2 0 24]120 dc[<1C00C02701C04701C04701C08703 808703800E03800E03801C07001C07001C07001C0700180E00180E00180E001C1E000C3C0007DC 00001C00001800603800F03000F06000E0C0004180003E0000>18 26 2 8 20]121 dc dfe /fb df[<1FE0003FF0007FF800783C00300E00000E00000E0003FE001FFE003E0E00700E00E00E00E0 0E00E00E00783E007FFFE03FE7E00F83E0>19 18 2 0 22]97 dc[<03F80FFC1FFE3C1E780C70 00E000E000E000E000E000F000700778073E0E1FFC0FF803F0>16 18 3 0 22]99 dc[<003F00 007F00003F0000070000070000070000070003C7000FF7001FFF003C1F00780F00700700E00700 E00700E00700E00700E00700E00700700F00700F003C1F001FFFE00FE7F007C7E0>20 25 1 0 22]100 dc[<03E00FF81FFC3C1E780E7007E007FFFFFFFFFFFFE000E000700778073C0F1FFE0F FC03F0>16 18 3 0 22]101 dc[<7E0000FE00007E00000E00000E00000E00000E00000E3C000E FE000FFF000F87800F03800E03800E03800E03800E03800E03800E03800E03800E03800E03800E 03807FC7F0FFE7F87FC7F0>21 25 0 0 22]104 dc[<018003C003C0018000000000000000007F C07FC07FC001C001C001C001C001C001C001C001C001C001C001C001C07FFFFFFF7FFF>16 26 3 0 22]105 dc[<7E0000FE00007E00000E00000E00000E00000E00000E7FE00E7FE00E7FE00E0F 000E1E000E3C000E78000EF0000FF0000FF8000FBC000F1E000E0E000E07000E07807F87F0FFCF F07F87F0>20 25 0 0 22]107 dc[17 25 2 0 22]108 dc[ 21 18 0 0 22]109 dc[<7E3C00FEFE007FFF000F87800F03800E03800E03800E03800E03800E 03800E03800E03800E03800E03800E03807FC7F0FFE7F87FC7F0>21 18 0 0 22]110 dc[<03E0 000FF8001FFC003C1E00780F00700700E00380E00380E00380E00380E00380F00780700700780F 003C1E001FFC000FF80003E000>17 18 2 0 22]111 dc[<7E3E00FEFF007FFF800F83C00F00E0 0E00E00E00700E00700E00700E00700E00700E00700E00E00F01E00F83C00FFF800EFF000E3C00 0E00000E00000E00000E00000E00000E00007FC000FFE0007FC000>20 27 0 9 22]112 dc[<07 C7000FE7001FF7003C1F00700F00700F00E00700E00700E00700E00700E00700E00700700F0070 0F003C3F003FF7001FE70007C700000700000700000700000700000700000700003FE0007FF000 3FE0>20 27 2 9 22]113 dc[19 18 1 0 22]114 dc[< 0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600EE00EF00EF81EFFFCFFF8C7E0>15 18 3 0 22]115 dc[<0300000700000700000700000700007FFF00FFFF00FFFF0007000007000007 000007000007000007000007000007010007038007038007038007870003FE0001FC0000F800> 17 23 1 0 22]116 dc[<7E1F80FE3F807E1F800E03800E03800E03800E03800E03800E03800E 03800E03800E03800E03800E03800E0F800FFFF007FBF803E3F0>21 18 0 0 22]117 dc[<7F1F C0FF1FE07F1FC01C07001E0F000E0E000E0E000E0E00071C00071C00071C00071C0003B80003B8 0003B80001F00001F00000E000>19 18 1 0 22]118 dc[19 18 1 0 22]119 dc dfe /fc df[<0C003C00CC000C000C000C000C000C000C000C000C00 0C000C000C000C00FF80>9 16 2 0 15]49 dc[<1F00618040C08060C0600060006000C0018003 0006000C00102020207FC0FFC0>11 16 1 0 15]50 dc dfe /fd df[<0007E1F0001C17380070 3C3800E07C7801C0783001C0380001C0380001C038000380700003807000038070003FFFFF0003 807000038070000700E0000700E0000700E0000700E0000700E0000700E0000E01C0000E01C000 0E01C0000E01C0000E01C0000E01C0001C0380001C03C000FF8FF800>29 29 1 0 24]11 dc[< 0007E0001C1000703800E07801C07801C03001C00001C0000380000380000380003FFFF00380F0 0380700700E00700E00700E00700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01C0 1C03801C03C0FF8FF0>21 29 1 0 23]12 dc[<0007FC001C3C00707800E07801C03801C03801 C03801C0380380700380700380703FFFF00380700380700700E00700E00700E00700E00700E007 00E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF9FF0>22 29 1 0 23]13 dc[ <0060000060000060000040003041803847801CCE0007F80001E00001E0000EB0003C9C00718F 00C18200018000010000030000030000>17 18 5 -13 21]42 dc[<3878783808081010202040 80>5 12 3 8 12]44 dc[<7FF0FFE0>12 2 1 -8 14]45 dc[<7070F060>4 4 4 0 12]46 dc[< 000020000000300000007000000070000000F0000000F0000001F0000003780000027800000678 0000047800000C780000087C0000183C0000103C0000203C0000203C0000403C0000403E0000FF FE0000801E0001001E0001001E0002001E0002000F0004000F0004000F001E001F00FF80FFF0> 28 29 1 0 31]65 dc[<0007F010001C0C300070026000C001E0038000E0070000E00E0000600E 0000601C0000403C00004038000040780000007800000078000000F0000000F0000000F0000000 F0000000F0000000F0000080F0000100700001007000010038000200380004001C0004000C0018 00060020000380C000007F0000>28 30 4 1 30]67 dc[<0FFFFFE000F801E000F000E000F000 4000F0004000F0004000F0004001E0004001E0404001E0400001E0400001E0C00001E1C00003FF 800003C1800003C0800003C0800003C0800003C080800780008007800080078001000780010007 800300078006000F000E000F003E00FFFFFC00>27 28 2 0 28]69 dc[<0FFF8000F80000F000 00F00000F00000F00000F00001E00001E00001E00001E00001E00001E00003C00003C00003C000 03C00003C00003C0000780000780000780000780000780000780000F00000F8000FFF800>17 28 1 0 15]73 dc[<0FFFC000F80000F00000F00000F00000F00000F00001E00001E00001E00001E0 0001E00001E00003C00003C00003C00003C00003C00003C0040780040780040780040780080780 080780180F00380F00F0FFFFF0>22 28 2 0 26]76 dc[<003F0400C0CC018038030038060018 0E00180E00180E00181E00101E00001F00000F80000FF80007FF0003FF8001FFC0003FE00003E0 0001E00000E00000E04000E04000E04000E04000C06001C0E00180F00300CC0E0083F800>22 30 2 1 23]83 dc[<1FFFFFF03C07C0F03007803020078020600780204007802040078020400F0020 800F0020000F0000000F0000000F0000000F0000001E0000001E0000001E0000001E0000001E00 00001E0000003C0000003C0000003C0000003C0000003C0000003C000000780000007C00001FFF E000>28 28 4 0 30]84 dc[27 29 6 1 31]85 dc[41 29 5 1 43]87 dc[<07F0001C18001E0C001C0E00180E00000E00000E0001FE000F0E 001C1C00301C00701C00E01C40E01C40E03C40E05C80709D803F0E00>18 18 3 0 21]97 dc[< 3F00000F00000E00000E00000E00000E00000E00000E00001C00001C00001C00001C78001D8600 1E03003C03803801803801803801C03801C03801C0700380700380700380700300700700700E00 F00C00CC300083C000>18 29 4 0 23]98 dc[<01F8071C0C1E181C38183000700070007000E0 00E000E000600060047008301018200FC0>15 18 3 0 18]99 dc[<0003F00000F00000E00000 E00000E00000E00000E00000E00001C00001C00001C000F1C0030DC00C03C01C03803803803003 80700380700380700380E00700E00700E00700600700600700700F00301E00186F00078FC0>20 29 3 0 23]100 dc[<01F8070C0C061C073803300370037FFF7000E000E000E000600060023004 30081C3007C0>16 18 2 0 18]101 dc[<000F800039C00061C000E3C001C18001C00001C00001 C0000380000380000380003FF8000380000380000700000700000700000700000700000700000E 00000E00000E00000E00000E00000E00001C00001E0000FFC000>18 29 1 0 13]102 dc[<0000 38003CCC00C69C018308038380070380070380070380070380070700030600038C0004F0000400 000C00000C00000FFE0007FF800FFFC01801C02000C06000E0C000C0C000C0600180200300180E 0007F000>22 28 0 9 21]103 dc[<07E00001E00001C00001C00001C00001C00001C00001C000 038000038000038000038F8003B0C003C0E00780E00780E00700E00700E00700E00700E00E01C0 0E01C00E01C00E01C00E01C00E01C01C03801E03C0FF9FF0>20 29 1 0 23]104 dc[<00C001C0 01C0018000000000000000000000000000001F80078003800700070007000700070007000E000E 000E000E000E000E001C001E00FF80>10 29 1 0 12]105 dc[<07E00001E00001C00001C00001 C00001C00001C00001C0000380000380000380000387F80381E003818007020007040007080007 100007700007F8000F38000E3C000E1C000E1E000E0E000E0F001C07001C0F80FF9FE0>21 29 1 0 22]107 dc[<07E001E001C001C001C001C001C001C003800380038003800380038007000700 07000700070007000E000E000E000E000E000E001C001E00FF80>11 29 1 0 12]108 dc[<1F8F C0FC00079061060003E07607000780780700078078070007007007000700700700070070070007 007007000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E001C01C01C00 1E01E01E00FF8FF8FF80>33 18 1 0 36]109 dc[<1F8F8007B0C003C0E00780E00780E00700E0 0700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF9FF0>20 18 1 0 23]110 dc[<00FC000307000E01801C01C03800C03000C07000E07000E07000E0E001C0E0 01C0E001C0600180600380700700380E001C180007E000>19 18 2 0 21]111 dc[<0FC78003D8 6001E03003C03803803803801803801C03801C03801C0700380700380700380700700700700700 E00F01C00EC3000E3C000E00000E00000E00001C00001C00001C00001C0000FF8000>22 26 0 8 23]112 dc[<00F0400308C00E05C01C0380380380380380700380700380700380E00700E00700 E00700600700700700700F00301E00186E00078E00000E00000E00000E00001C00001C00001C00 001C0000FF80>18 26 3 8 22]113 dc[<1F9C07EE03CF078E078C07000700070007000E000E00 0E000E000E000E001C001E00FFC0>16 18 1 0 16]114 dc[<03F20C0E18061004300438043E00 1FE00FF007F8003C401C400C400C6018E010D0608FC0>15 18 1 0 16]115 dc[<020002000200 060006000C001C003C00FFE01C001C003800380038003800380038007000704070407040704070 80708031001E00>11 26 4 0 16]116 dc[17 18 4 0 23]117 dc[19 18 4 0 22]118 dc[27 18 4 0 30]119 dc[<1FE3 FC07C1E003818001C10001C20000E40000EC00007800007000003800007800009C00011E00020E 000407000C07003C0780FE1FF0>22 18 1 0 22]120 dc[<0FF0FE03C03801C03001C02001C060 01C04001E08000E08000E10000E10000E200007200007400007C00007800007000003000002000 002000004000004000708000F10000F10000E60000780000>23 26 0 8 22]121 dc[<0FFF800E 0700080E00180E00101C0010380010700000E00001C00001C0000382000702000E02001C040038 0400380C00703800FFF800>17 18 1 0 18]122 dc dfe /fe df[<60F0F0F0F0F0F0F0F0F0F0 700000000060F0F060>4 20 7 0 18]33 dc[<07001F8019C039C039C039C039BE3B3E3E701C70 1C701CE03EE06FE0E7C0E3C4E38E63CE7EFC3C38>15 20 1 0 18]38 dc[<0180038006000C00 18003800300070007000E000E000E000E000E000E000E000700070003000380018000C00060003 800180>9 25 5 2 18]40 dc[<80C06030181C0C0E0E070707070707070E0E0C1C183060C080> 8 25 4 2 18]41 dc[<070007000700E738FFF87FF01FC01FC07FF0FFF8E738070007000700> 13 14 2 -3 18]42 dc[<038003800380038003800380FFFEFFFEFFFE03800380038003800380 0380>15 15 1 -3 18]43 dc[<60F0F878183030E0C0>5 9 7 5 18]44 dc[<00180038003800 70007000E000E001C001C001C003800380070007000E000E001C001C001C003800380070007000 E000E000C000>13 26 2 3 18]47 dc[<07C00FE01C703838701C701CE00EE00EE00EE00EE00E E00EE00EE01E701C701C38381C700FE007C0>15 20 1 0 18]48 dc[<060006000E001E00FE00 EE000E000E000E000E000E000E000E000E000E000E000E000E00FFE0FFE0>11 20 3 0 18]49 dc[<0F803FC070E0E070E038E038403800380030007000E000C00180030006000C00183830387F F87FF8>13 20 2 0 18]50 dc[<0FE03FF07838701C201C001C0038007807E007F00038001C00 0E000E400EE00EE01C78383FF00FC0>15 20 1 0 18]51 dc[<00F001F00370037006700E700C 701C70387038707070E070FFFEFFFE007000700070007003FE03FE>15 20 1 0 18]52 dc[<7F F07FF07000700070007000700070007F807FE06070007000384038E038E038E07070E03FC01F00 >13 20 2 0 18]53 dc[<01F007F80E1C181C381C70007000E7C0EFF0F838F01CE00EE00EE00E 700E700E301C38381FF007C0>15 20 1 0 18]54 dc[15 21 1 0 18]55 dc[<07C0 1FF03C78783C701C701C701C38380FE007C03C78701CE00EE00EE00EE00E701C783C1FF00FE0> 15 20 1 0 18]56 dc[<07C01FF038387018E01CE00CE00EE00E701E383E1FEE0FCE000E001C00 1C7018703870F03FC00F80>15 20 1 0 18]57 dc[<60F0F06000000000000060F0F060>4 14 7 0 18]58 dc[<60F0F06000000000000060F0F070303060C080>4 19 7 5 18]59 dc[15 9 1 -6 18]61 dc[<038007C007C006C006C00EE00EE0 0EE00EE00C601C701C701C701FF01FF0383838383838FC7EFC7E>15 20 1 0 18]65 dc[ 15 20 1 0 18]66 dc[<03E60FFE1C3E381E700E700E600EE000E000E000E000E000E000600E70 0E700E381C1C380FF003E0>15 20 1 0 18]67 dc[15 20 1 0 18]68 dc[15 20 1 0 18]69 dc[15 20 1 0 18]70 dc[<07980FF81878387870387038E038E000E000E000E0 FCE0FCE038E03870387038387818780FF807B8>14 20 1 0 18]71 dc[11 20 3 0 18] 73 dc[15 20 1 0 18]76 dc[15 20 1 0 18]78 dc[<3FE07FF07070E038E038E0 38E038E038E038E038E038E038E038E038E038E038E03870707FF03FE0>13 20 2 0 18]79 dc[ 16 20 1 0 18]82 dc[<1F303FF070F0E070E070E070E00070007F003FC00FE000F00038 00386038E038E030F070FFE0CF80>13 20 2 0 18]83 dc[<7FFEFFFEE38EE38EE38E03800380 038003800380038003800380038003800380038003801FF01FF0>15 20 1 0 18]84 dc[17 20 0 0 18]85 dc[10 26 6 3 18]91 dc[10 26 1 3 18]93 dc[< FFF8FFF8FFF8>13 3 2 3 18]95 dc[<3F807FC070E0207000700FF03FF07870E070E070E07070 F03FFE1F3E>15 14 2 0 18]97 dc[<07F01FF8383870106000E000E000E000E0006000703838 381FF007E0>13 14 2 0 18]99 dc[<00F800F8003800380038003807B81FF8387870386038E0 38E038E038E0386038707838781FFE0FBE>15 20 1 0 18]100 dc[<07801FE0387070706038E0 38FFF8FFF8E0006000703838381FF007C0>13 14 2 0 18]101 dc[<007E00FF01C70382038003 807FFEFFFE03800380038003800380038003800380038003803FF83FF8>16 20 0 0 18]102 dc [15 20 1 0 18]104 dc[<06000F000F000600000000000000FF00FF000700070007000700 070007000700070007000700FFF0FFF0>12 21 3 0 18]105 dc[15 20 1 0 18]107 dc[< FF00FF000700070007000700070007000700070007000700070007000700070007000700FFF8FF F8>13 20 2 0 18]108 dc[17 14 0 0 18]109 dc[15 14 1 0 18]110 dc[<0F803FE038E07070E038E038E0 38E038E038F078707038E03FE00F80>13 14 2 0 18]111 dc[15 21 1 7 18]112 dc [<079C1FFC387C703C601CE01CE01CE01CE01C601C703C387C1FFC079C001C001C001C001C001C 007F007F>16 21 1 7 18]113 dc[14 14 2 0 18]114 dc[<1FF03FF06070C070E0007F003FE00FF000786018E018F030 FFE0DFC0>13 14 2 0 18]115 dc[<06000E000E000E007FF8FFF80E000E000E000E000E000E00 0E000E380E380E3807F003C0>13 18 1 0 18]116 dc[15 14 1 0 18]117 dc[15 14 1 0 18]118 dc[15 14 1 0 18]119 dc[<00F801F8038007000700070007000700 0700070007000E00FC00FC000E0007000700070007000700070007000700038001F800F8>13 26 2 3 18]123 dc[<7800FC000E0007000700070007000700070007000700038001F801F8038007 0007000700070007000700070007000E00FC007800>13 26 2 3 18]125 dc dfe /ff df[<0C 001C00EC000C000C000C000C000C000C000C000C000C000C000C000C000C000C000C00FFC0>10 19 3 0 17]49 dc[<1F0060C06060F070F030603000700070006000C001C00180020004000810 101020207FE0FFE0>12 19 2 0 17]50 dc dfe /fg df[<007E1F0001C1B1800303E3C00703C3 C00E03C1800E01C0000E01C0000E01C0000E01C0000E01C0000E01C000FFFFFC000E01C0000E01 C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E 01C0000E01C0000E01C0000E01C0000E01C0007F87FC00>26 29 0 0 24]11 dc[<007E0001C1 800301800703C00E03C00E01800E00000E00000E00000E00000E0000FFFFC00E01C00E01C00E01 C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 C07F87F8>21 29 0 0 23]12 dc[<007FC001C1C00303C00703C00E01C00E01C00E01C00E01C0 0E01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0 0E01C00E01C00E01C00E01C00E01C00E01C00E01C07FCFF8>21 29 0 0 23]13 dc[<003F07E0 0001C09C18000380F018000701F03C000E01E03C000E00E018000E00E000000E00E000000E00E0 00000E00E000000E00E00000FFFFFFFC000E00E01C000E00E01C000E00E01C000E00E01C000E00 E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E 00E01C000E00E01C000E00E01C000E00E01C007FC7FCFF80>33 29 0 0 35]14 dc[<6060F0F0 F8F8686808080808080810101010202040408080>13 12 1 -17 21]34 dc[<00030180000301 80000301800006030000060300000603000006030000060300000C0600000C0600000C0600000C 060000180C007FFFFFF8FFFFFFFC00301800003018000030180000301800006030000060300000 60300000603000FFFFFFFC7FFFFFF800C060000180C0000180C0000180C0000180C00003018000 030180000301800003018000060300000603000006030000>30 37 2 8 35]35 dc[<00E00000 019000000308000003080000070800000708000007080000070800000710000007100000072000 000740000003C03FE003800F00038006000380040005C0040009C0080010E0100030E010006070 200060702000E0384000E03C4000E01C8000E00F0020E0070020700780403009C0401830E18007 C03E00>27 31 2 1 32]38 dc[<60F0F8680808081010204080>5 12 4 -17 12]39 dc[<0040 00800100020006000C000C0018001800300030007000600060006000E000E000E000E000E000E0 00E000E000E000E000E000E000600060006000700030003000180018000C000C00060002000100 00800040>10 42 3 11 16]40 dc[<800040002000100018000C000C0006000600030003000380 01800180018001C001C001C001C001C001C001C001C001C001C001C001C0018001800180038003 000300060006000C000C0018001000200040008000>10 42 2 11 16]41 dc[<01800180018001 804182F18F399C0FF003C003C00FF0399CF18F41820180018001800180>16 18 2 -13 21]42 dc[<60F0F0701010101020204080>4 12 4 8 12]44 dc[11 2 0 -8 14]45 dc[< 60F0F060>4 4 4 0 12]46 dc[<00010003000600060006000C000C000C001800180018003000 3000300060006000C000C000C0018001800180030003000300060006000C000C000C0018001800 1800300030003000600060006000C000C000>16 41 2 10 21]47 dc[<03C00C301818300C300C 700E60066006E007E007E007E007E007E007E007E007E007E007E007E007E00760066006700E30 0C300C18180C3007E0>16 29 2 1 21]48 dc[<030007003F00C7000700070007000700070007 0007000700070007000700070007000700070007000700070007000700070007000F80FFF8>13 28 4 0 21]49 dc[<07C01830201C400C400EF00FF80FF807F8077007000F000E000E001C001C 00380070006000C00180030006010C01180110023FFE7FFEFFFE>16 28 2 0 21]50 dc[<07E0 1830201C201C781E780E781E381E001C001C00180030006007E00030001C001C000E000F000F70 0FF80FF80FF80FF00E401C201C183007E0>16 29 2 1 21]51 dc[<000C00000C00001C00003C 00003C00005C0000DC00009C00011C00031C00021C00041C000C1C00081C00101C00301C00201C 00401C00C01C00FFFFC0001C00001C00001C00001C00001C00001C00001C0001FFC0>18 28 1 0 21]52 dc[<300C3FF83FF03FC020002000200020002000200023E024302818301C200E000E000F 000F000F600FF00FF00FF00F800E401E401C2038187007C0>16 29 2 1 21]53 dc[<00F0030C 06040C0E181E301E300C700070006000E3E0E430E818F00CF00EE006E007E007E007E007E00760 0760077006300E300C18180C3003E0>16 29 2 1 21]54 dc[<4000007FFF807FFF007FFF0040 020080040080040080080000100000100000200000600000400000C00000C00001C00001800001 8000038000038000038000038000078000078000078000078000078000078000030000>17 29 2 1 21]55 dc[<03E00C301008200C20066006600660067006780C3E083FB01FE007F007F818FC30 7E601E600FC007C003C003C003C00360026004300C1C1007E0>16 29 2 1 21]56 dc[<03C00C 301818300C700C600EE006E006E007E007E007E007E0076007700F300F18170C2707C700060006 000E300C780C78187010203030C00F80>16 29 2 1 21]57 dc[<60F0F0600000000000000000 000060F0F060>4 18 4 0 12]58 dc[<60F0F0600000000000000000000060F0F0701010101020 204080>4 26 4 8 12]59 dc[<7FFFFFC0FFFFFFE0000000000000000000000000000000000000 0000000000000000000000000000FFFFFFE07FFFFFC0>27 12 2 -4 32]61 dc[<000600000006 000000060000000F0000000F0000000F00000017800000178000001780000023C0000023C00000 23C0000041E0000041E0000041E0000080F0000080F0000180F8000100780001FFF80003007C00 02003C0002003C0006003E0004001E0004001E000C001F001E001F00FF80FFF0>28 29 1 0 31] 65 dc[24 28 2 0 29]66 dc[<001F808000E0618001801980070007800E00 03801C0003801C00018038000180780000807800008070000080F0000000F0000000F0000000F0 000000F0000000F0000000F0000000F0000000700000807800008078000080380000801C000100 1C0001000E000200070004000180080000E03000001FC000>25 30 2 1 30]67 dc[27 28 2 0 32]68 dc[24 28 2 0 28]69 dc[22 28 2 0 27]70 dc[<001F80 8000E0618001801980070007800E0003801C0003801C0001803800018078000080780000807000 0080F0000000F0000000F0000000F0000000F0000000F0000000F000FFF0F0000F807000078078 00078078000780380007801C0007801C0007800E00078007000B800180118000E06080001F8000 >28 30 2 1 33]71 dc[26 28 2 0 31]72 dc[12 28 1 0 15]73 dc[<1FFF00F8007800780078007800780078007800780078007800780078007800780078 00780078007800787078F878F878F878F0F040E021C01F00>16 29 1 1 21]74 dc[28 28 2 0 32]75 dc[21 28 2 0 26]76 dc[33 28 2 0 38]77 dc[26 28 2 0 31]78 dc[<003F800000E0E0000380380007001C000E000E 001C0007003C00078038000380780003C0780003C0700001C0F00001E0F00001E0F00001E0F000 01E0F00001E0F00001E0F00001E0F00001E0700001C0780003C0780003C0380003803C0007801C 0007000E000E0007001C000380380000E0E000003F8000>27 30 2 1 32]79 dc[23 28 2 0 28]80 dc[<003F800000E0E0000380380007001C000E000E001C0007003C0007 8038000380780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F000 01E0F00001E0F00001E0700001C0780003C0780003C0380003803C0E07801C1107000E208E0007 205C0003A0780000F0E020003FE0200000602000003060000038E000003FC000003FC000001F80 00000F00>27 37 2 8 32]81 dc[28 29 2 1 31]82 dc[<07E0801C19803005807003806001 80E00180E00080E00080E00080F00000F800007C00007FC0003FF8001FFE0007FF0000FF80000F 800007C00003C00001C08001C08001C08001C0C00180C00180E00300D00200CC0C0083F800>18 30 2 1 23]83 dc[<7FFFFFC0700F01C0600F00C0400F0040400F0040C00F0020800F0020800F 0020800F0020000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000 0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000001F8000 03FFFC00>27 28 1 0 30]84 dc[26 29 2 1 31]85 dc[28 29 1 1 31]86 dc[40 29 1 1 43]87 dc[<7FFFF07C 01F07001E06003C06003C0400780400F80400F00401E00001E00003C00007C0000780000F00000 F00001E00003E00003C0100780100780100F00101F00301E00203C00203C00607800E0F803E0FF FFE0>20 28 2 0 25]90 dc[7 41 4 10 12]91 dc[<08081010202040404040808080 808080B0B0F8F878783030>13 12 6 -17 21]92 dc[7 41 0 10 12]93 dc[<1FC000 307000783800781C00301C00001C00001C0001FC000F1C00381C00701C00601C00E01C40E01C40 E01C40603C40304E801F8700>18 18 2 0 21]97 dc[19 29 1 0 23] 98 dc[<07E00C301878307870306000E000E000E000E000E000E00060007004300418080C3007 C0>14 18 2 0 18]99 dc[<003F00000700000700000700000700000700000700000700000700 00070000070003E7000C1700180F00300700700700600700E00700E00700E00700E00700E00700 E00700600700700700300700180F000C370007C7E0>19 29 2 0 23]100 dc[<03E00C30181830 0C700E6006E006FFFEE000E000E000E00060007002300218040C1803E0>15 18 1 0 18]101 dc [<00F8018C071E061E0E0C0E000E000E000E000E000E00FFE00E000E000E000E000E000E000E00 0E000E000E000E000E000E000E000E000E007FE0>15 29 0 0 13]102 dc[<00038003C4C00C38 C01C3880181800381C00381C00381C00381C001818001C38000C300013C0001000003000001800 001FF8001FFF001FFF803003806001C0C000C0C000C0C000C06001803003001C0E0007F800>18 28 1 9 21]103 dc[20 29 1 0 23]104 dc[<18003C003C0018000000 000000000000000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C 001C001C001C00FF80>9 29 1 0 12]105 dc[<00C001E001E000C00000000000000000000000 0000000FE000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0 00E000E000E060E0F0C0F1C061803E00>11 37 -3 8 13]106 dc[19 29 1 0 22]107 dc[9 29 1 0 12]108 dc[< FC7E07E0001C838838001D019018001E01E01C001C01C01C001C01C01C001C01C01C001C01C01C 001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C0 1C001C01C01C00FF8FF8FF80>33 18 1 0 36]109 dc[ 20 18 1 0 23]110 dc[<03F0000E1C00180600300300700380600180E001C0E001C0E001C0E0 01C0E001C0E001C06001807003803003001806000E1C0003F000>18 18 1 0 21]111 dc[19 26 1 8 23]112 dc[<03C1000C3300180B00300F00700700700700E00700E00700E00700E00700 E00700E00700600700700700300F00180F000C370007C700000700000700000700000700000700 000700000700003FE0>19 26 2 8 22]113 dc[13 18 1 0 16]114 dc[<1F9030704030C010C010E0 10F8007F803FE00FF000F880388018C018C018E010D0608FC0>13 18 1 0 16]115 dc[<040004 00040004000C000C001C003C00FFE01C001C001C001C001C001C001C001C001C001C101C101C10 1C101C100C100E2003C0>12 26 1 0 16]116 dc[20 18 1 0 23]117 dc[19 18 1 0 22]118 dc[27 18 1 0 30]119 dc[< 7F8FF00F03800F030007020003840001C80001D80000F00000700000780000F800009C00010E00 020E000607000403801E07C0FF0FF8>21 18 0 0 22]120 dc[19 26 1 8 22]121 dc[<7FFC 70386038407040F040E041C003C0038007000F040E041C043C0C380870087038FFF8>14 18 1 0 18]122 dc[20 1 0 -11 21]123 dc[41 1 0 -11 42]124 dc dfe /fh df[14 4 1 -9 19]45 dc[<00180000780001F800FFF800FFF80001 F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001 F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8007FFFE07F FFE0>19 32 4 0 28]49 dc[<03FC000FFF003C1FC07007E07C07F0FE03F0FE03F8FE03F8FE01 F87C01F83803F80003F80003F00003F00007E00007C0000F80001F00003E0000380000700000E0 1801C0180380180700180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF0>21 32 3 0 28] 50 dc[<00FE0007FFC00F07E01E03F03F03F03F81F83F81F83F81F81F03F81F03F00003F00003 E00007C0001F8001FE0001FF000007C00001F00001F80000FC0000FC3C00FE7E00FEFF00FEFF00 FEFF00FEFF00FC7E01FC7801F81E07F00FFFC001FE00>23 32 2 0 28]51 dc[<0000E00001E0 0003E00003E00007E0000FE0001FE0001FE00037E00077E000E7E001C7E00187E00307E00707E0 0E07E00C07E01807E03807E07007E0E007E0FFFFFEFFFFFE0007E00007E00007E00007E00007E0 0007E00007E000FFFE00FFFE>23 32 2 0 28]52 dc[<1000201E01E01FFFC01FFF801FFF001F FE001FF8001BC00018000018000018000018000019FC001FFF001E0FC01807E01803E00003F000 03F00003F80003F83803F87C03F8FE03F8FE03F8FC03F0FC03F07007E03007C01C1F800FFF0003 F800>21 32 3 0 28]53 dc[<000070000000007000000000F800000000F800000000F8000000 01FC00000001FC00000003FE00000003FE00000003FE00000006FF000000067F0000000E7F8000 000C3F8000000C3F800000183FC00000181FC00000381FE00000300FE00000300FE00000600FF0 00006007F00000E007F80000FFFFF80000FFFFF800018001FC00018001FC00038001FE00030000 FE00030000FE000600007F000600007F00FFE00FFFF8FFE00FFFF8>37 34 2 0 42]65 dc[<00 03FE0080001FFF818000FF01E38001F8003F8003E0001F8007C0000F800F800007801F80000780 3F000003803F000003807F000001807E000001807E00000180FE00000000FE00000000FE000000 00FE00000000FE00000000FE00000000FE00000000FE000000007E000000007E000001807F0000 01803F000001803F000003801F800003000F8000030007C000060003F0000C0001F800380000FF 00F000001FFFC0000003FE0000>33 34 3 0 40]67 dc[19 34 1 0 21]73 dc[29 34 2 0 34]76 dc[39 34 2 0 42]82 dc[<01FC04 07FF8C1F03FC3C007C7C003C78001C78001CF8000CF8000CFC000CFC0000FF0000FFE0007FFF00 7FFFC03FFFF01FFFF80FFFFC03FFFE003FFE0003FF00007F00003F00003FC0001FC0001FC0001F E0001EE0001EF0003CFC003CFF00F8C7FFE080FF80>24 34 3 0 31]83 dc[<07FC001FFF803F 07C03F03E03F01E03F01F01E01F00001F00001F0003FF003FDF01FC1F03F01F07E01F0FC01F0FC 01F0FC01F0FC01F07E02F07E0CF81FF87F07E03F>24 22 2 0 27]97 dc[<00FF8007FFE00F83 F01F03F03E03F07E03F07C01E07C0000FC0000FC0000FC0000FC0000FC0000FC00007C00007E00 007E00003E00301F00600FC0E007FF8000FE00>20 22 2 0 25]99 dc[<0001FE000001FE0000 003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E00 00003E0001FC3E0007FFBE000F81FE001F007E003E003E007E003E007C003E00FC003E00FC003E 00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E007C003E007C003E003E007E001E00 FE000F83BE0007FF3FC001FC3FC0>26 35 2 0 31]100 dc[<00FE0007FF800F87C01E01E03E01 F07C00F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00007E00003E00 181F00300FC07003FFC000FF00>21 22 2 0 26]101 dc[<003F8000FFC001E3E003C7E007C7E0 0F87E00F83C00F80000F80000F80000F80000F80000F8000FFFC00FFFC000F80000F80000F8000 0F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8000 0F80000F80007FF8007FF800>19 35 1 0 17]102 dc[<03FC1E0FFF7F1F0F8F3E07CF3C03C07C 03E07C03E07C03E07C03E07C03E03C03C03E07C01F0F801FFF0013FC003000003000003800003F FF801FFFF00FFFF81FFFFC3800FC70003EF0001EF0001EF0001EF0001E78003C7C007C3F01F80F FFE001FF00>24 33 2 11 28]103 dc[<1C003F007F007F007F003F001C000000000000000000 000000000000FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F 001F001F001F00FFE0FFE0>11 36 2 0 16]105 dc[26 35 2 0 30]107 dc[11 35 2 0 16]108 dc[43 22 2 0 48]109 dc[26 22 2 0 31]110 dc[<00FE0007FFC00F83E01E00 F03E00F87C007C7C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C00 7C3E00F81F01F00F83E007FFC000FE00>23 22 2 0 28]111 dc[ 26 32 2 10 31]112 dc[ 19 22 2 0 23]114 dc[<0FF3003FFF00781F00600700E00300E00300F00300FC00007FE0007F F8003FFE000FFF0001FF00000F80C00780C00380E00380E00380F00700FC0E00EFFC00C7F000> 17 22 2 0 22]115 dc[<0180000180000180000180000380000380000780000780000F80003F 8000FFFF00FFFF000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F 80000F81800F81800F81800F81800F81800F830007C30003FE0000F800>17 32 1 0 22]116 dc [26 22 2 0 31]117 dc[37 22 1 0 40]119 dc dfe /fi df[<00FC7E000703C1 000E0783801C0703801C0701001C0700001C0700001C0700001C070000FFFFFF801C0703801C07 03801C0703801C0703801C0703801C0703801C0703801C0703801C0703801C0703801C0703801C 070380FF1FCFF0>28 23 0 0 29]14 dc[<60C0F1E0F1E070E0102010202040204040804080> 11 10 1 -13 18]34 dc[<0102040C1818303070606060E0E0E0E0E0E0E0E0E0E0606060703030 18180C040201>8 34 3 9 14]40 dc[<8040203018180C0C0E0606060707070707070707070706 06060E0C0C181830204080>8 34 2 9 14]41 dc[<60F0F070101020204040>4 10 3 6 10]44 dc[9 2 0 -6 12]45 dc[<60F0F060>4 4 3 0 10]46 dc[<000800180030003000 3000600060006000C000C000C0018001800180030003000600060006000C000C000C0018001800 1800300030003000600060006000C000C000>13 33 2 8 18]47 dc[<07C018303018701C600C 600CE00EE00EE00EE00EE00EE00EE00EE00EE00E600C600C701C30181C7007C0>15 21 1 0 18] 48 dc[<0F8030E040708030C038E0384038003800700070006000C00180030006000C08080810 183FF07FF0FFF0>13 21 2 0 18]50 dc[<0FE030306018701C701C001C00180038006007E000 300018000C000E000EE00EE00EC00C401830300FE0>15 21 1 0 18]51 dc[<00300030007000 F001F001700270047008701870107020704070C070FFFE0070007000700070007003FE>15 21 1 0 18]52 dc[<20303FE03FC0240020002000200020002F8030E020700030003800384038E038E0 388030406020C01F00>13 21 2 0 18]53 dc[<01F00608080C181C301C70006000E000E3E0EC 30F018F00CE00EE00EE00E600E600E300C3018183007C0>15 21 1 0 18]54 dc[<40007FFE7F FC7FF8C008801080200040008000800100010003000200060006000E000E000E000E000E000400 >15 22 2 0 18]55 dc[<07E018302018600C600C700C78183E101F600FC00FF018F8607C601E C00EC006C006C004600C38300FE0>15 21 1 0 18]56 dc[<07C0183030186018E00CE00CE00E E00EE00E601E301E186E0F8E000E000C001C70187018603020C01F80>15 21 1 0 18]57 dc[< 001000003800003800003800005C00005C00005C00008E00008E00008E00010700010700030780 02038002038007FFC00401C00401C00800E00800E01800E03800F0FE03FE>23 23 1 0 26]65 dc[<00FC100383300E00B01C0070380030300030700010600010E00010E00000E00000E00000E0 0000E00000E000106000107000103000203800201C00400E008003830000FC00>20 23 2 0 25] 67 dc[23 23 1 0 27]68 dc[21 23 1 0 24]69 dc[20 23 1 0 23]70 dc[11 23 1 0 13]73 dc[29 23 1 0 32]77 dc[23 23 1 0 26]78 dc[<00FC000303000E01C01C00E0380070300030700038600018E000 1CE0001CE0001CE0001CE0001CE0001CE0001C7000387000383000303800701C00E00E01C00303 0000FC00>22 23 2 0 27]79 dc[20 23 1 0 24]80 dc[24 23 1 0 26]82 dc[<0FC4302C601C400CC004C004C004E00070007F00 3FE00FF801FC001C000E0006800680068006C004E008D81087E0>15 23 2 0 20]83 dc[<7FFF F86038184038084038088038048038048038040038000038000038000038000038000038000038 0000380000380000380000380000380000380000380000380007FFC0>22 23 1 0 25]84 dc[< FF80FE1C00381C00101C00101C00101C00101C00101C00101C00101C00101C00101C00101C0010 1C00101C00101C00101C00101C00100E0020060020030040018180007E00>23 23 1 0 26]85 dc[25 23 0 0 26]89 dc[<204020404080408081008100 E1C0F1E0F1E060C0>11 10 5 -13 18]92 dc[<1FC0386038301038003803F81E3830387038E0 39E039E07970FF1F1E>16 14 1 0 18]97 dc[18 23 0 0 20]98 dc[<07F01838303870106000E000E000E000E0 00600070083008183007C0>13 14 1 0 16]99 dc[<007E00000E00000E00000E00000E00000E 00000E00000E00000E0007CE001C3E00300E00700E00600E00E00E00E00E00E00E00E00E00600E 00700E00301E00182E0007CFC0>18 23 1 0 20]100 dc[<0FC0186030307038E018FFF8E000E0 00E000600070083010183007C0>13 14 1 0 16]101 dc[<03E006700E701C201C001C001C001C 001C00FF801C001C001C001C001C001C001C001C001C001C001C001C00FF80>12 23 0 0 11] 102 dc[<0F9E18E33060707070707070306018C02F80200060003FE03FF83FFC600EC006C006C0 06600C38380FE0>16 21 1 7 18]103 dc[19 23 0 0 20]104 dc[<183C3C1800000000007C1C1C1C1C1C1C1C1C1C 1C1C1CFF>8 23 0 0 10]105 dc[<0300078007800300000000000000000000001F8003800380 03800380038003800380038003800380038003800380038003804380E300E7007C00>9 29 -2 6 11]106 dc[18 23 0 0 19]107 dc[9 23 0 0 10]108 dc[29 14 0 0 30]109 dc[19 14 0 0 20]110 dc[<07C018303018600C600C E00EE00EE00EE00EE00E701C3018183007C0>15 14 1 0 18]111 dc[18 20 0 6 20]112 dc[<07C2001C2600381E00700E00600E00E00E 00E00E00E00E00E00E00600E00700E00301E001C2E0007CE00000E00000E00000E00000E00000E 00007FC0>18 20 1 6 19]113 dc[13 14 0 0 14]114 dc[<1F4060C0C040C040E000FF007F801FC001E080608060C060 E0C09F00>11 14 1 0 14]115 dc[<080008000800180018003800FF8038003800380038003800 3800380038403840384038401C800F00>10 20 1 0 14]116 dc[19 14 0 0 20]117 dc[16 14 1 0 19]118 dc[22 14 1 0 25]119 dc[16 14 1 0 19]120 dc[16 20 1 6 19]121 dc dfe /fj df[<0001FC0007 03000C03001C07001C0300180000380000380000380000380000700007FFFC00701C00701C0070 1C00E03800E03800E03800E03800E07001C07001C07001C07001C0E201C0E201C0E20380E40380 64038038038000030000070000060000C60000E40000CC0000700000>24 37 -1 8 23]12 dc[< 003C00000063003000C1007001808070038080200301802007038040070300800E0001000E0002 000E0004000EE01A000F1022000E1041000E1081001A20808039C10080300160807000E0807000 E080E0000100E0000100E0000100E0000200E0000200600004007000080030001000180060000E 03800001FC0000>28 31 5 1 32]38 dc[<183C3C3C0404080810204080>6 12 9 -17 13]39 dc[<00030006000800180030006000C000C0018003000300060006000C000C001C001800180038 0030003000700070006000600060006000E000E000E000E000E000600060006000600060002000 3000100008000800>16 42 5 11 17]40 dc[<001000100008000C000400060006000600060006 000700070007000700070006000600060006000E000E000C000C001C0018001800380030003000 60006000C000C001800300030006000C00180010006000C000>16 42 0 11 17]41 dc[<183878 380808101020404080>5 12 3 8 13]44 dc[10 3 3 -7 15]45 dc[<3078F0 60>5 4 4 0 13]46 dc[<00020006000C001C007C039C00380038003800380070007000700070 00E000E000E000E001C001C001C001C003800380038003800780FFF0>15 28 4 0 21]49 dc[< 00C06000FFC001FF8001FE00010000010000020000020000020000020000047800058C00060600 040600080600000700000700000600000E00000E00700E00700C00E01C00801800803800403000 40600021C0001F0000>19 29 4 1 21]53 dc[<09C04017E0801FE0803C6100302700601A0040 0600400400800C0080080000180000100000300000600000600000600000C00000C00001C00001 80000380000380000300000700000700000700000E00000E00000C0000>18 29 7 1 21]55 dc[ <0000180000001800000038000000380000007800000078000000B8000001B800000138000002 380000023C0000041C0000041C0000081C0000181C0000101C0000201C0000201C00007FFC0000 401C0000801C0001801C0001001C0002001C0002001C0004000E000C000E001C001E00FF00FFC0 >26 29 2 0 31]65 dc[<0003F020001E0C60003002E000E003C001C001C0038001C0070000C0 0E0000801E0000801C0000803C0000803C000000780000007800000078000000F0000000F00000 00F0000000F0000000F0000400F0000400F0000400F00008007000080070001000380020001800 40000C0180000706000001F80000>27 30 6 1 30]67 dc[<01FFFE00003C0780003801C00038 01C0003800E0003800E0007000F00070007000700070007000F000E000F000E000F000E000F000 E000F001C001E001C001E001C001E001C001C0038003C003800380038007800380070007000E00 07001C0007003800070070000E01C000FFFF0000>28 28 3 0 31]68 dc[<01FFFFE0003C00E0 003800600038004000380040003800400070004000700040007020400070200000E0400000E040 0000E0C00000FFC00001C0800001C0800001C0800001C080000381010003800100038002000380 0200070004000700040007000C00070018000E007800FFFFF000>27 28 3 0 28]69 dc[<0003 F020001E0C60003002E000E003C001C001C0038001C0070000C00E0000801E0000801C0000803C 0000803C000000780000007800000078000000F0000000F0000000F001FFC0F0001E00F0001C00 F0001C00F0001C00F0001C00700038007000380038003800180078000C0090000707100001F800 00>27 30 6 1 32]71 dc[<01FFC0003C00003800003800003800003800007000007000007000 00700000E00000E00000E00000E00001C00001C00001C00001C000038000038000038000038000 0700000700000700000700000F0000FFE000>18 28 2 0 16]73 dc[<01FFE0003C0000380000 380000380000380000700000700000700000700000E00000E00000E00000E00001C00001C00001 C00001C0000380080380080380080380100700100700300700600700E00E03C0FFFFC0>21 28 3 0 26]76 dc[<01FE0007F8003E000780002E000F00002E001700002E001700002E002700004E00 2E00004E004E00004E004E00004E008E00008E011C00008E011C00008E021C00008E021C000107 043800010704380001070838000107103800020710700002072070000207207000020740700004 0740E000040780E000040700E0000C0700E0001C0601E000FF861FFC00>37 28 3 0 37]77 dc[ <01FC03FE001C0070003C0060002E0040002E0040002E00400047008000470080004700800043 80800083810000838100008181000081C1000101C2000101C2000100E2000100E2000200E40002 00740002007400020074000400380004003800040038000C0018001C001000FF801000>31 28 3 0 31]78 dc[<0007F000001C1C0000700E0000E0070001C0038003800380070003800E0003C01E 0003C01C0003C03C0003C03C0003C0780003C0780003C0780003C0F0000780F0000780F0000780 F0000F00F0000F00F0000E00F0001E00F0003C0070003800700070007800E0003801C0001C0380 000E0E000003F80000>26 30 6 1 32]79 dc[<01FFFC00003C070000380380003801C0003801 C0003801C0007003C0007003C0007003C00070038000E0078000E0070000E00E0000E0380001FF E00001C0000001C0000001C0000003800000038000000380000003800000070000000700000007 000000070000000F000000FFE00000>26 28 3 0 28]80 dc[<01FFF800003C0E000038070000 380380003803800038038000700780007007800070078000700F0000E00E0000E01C0000E07000 00FFC00001C0C00001C0600001C0700001C07000038070000380700003807000038070000700F0 000700F0400700F0400700F0800F007880FFE0790000001E00>26 29 3 1 30]82 dc[<000F84 00304C00403C00801801001803001803001806001006001006000007000007000003E00003FC00 01FF00007F800007C00001C00001C00000C00000C02000C02000C0600180600180600300600200 F00400CC180083E000>22 30 3 1 23]83 dc[<1FFFFFC01C0701C0300E00C0200E0080600E00 80400E0080401C0080801C0080801C0080001C0000003800000038000000380000003800000070 000000700000007000000070000000E0000000E0000000E0000000E0000001C0000001C0000001 C0000001C0000003C000007FFE0000>26 28 7 0 30]84 dc[36 29 9 1 41]87 dc[<03CC063C0C3C181C3838303870 387038E070E070E070E070E0E2C0E2C0E261E462643C38>15 18 5 0 21]97 dc[<3F00070007 000E000E000E000E001C001C001C001C0039C03E60383038307038703870387038E070E070E070 E060E0E0C0C0C1C0618063003C00>13 29 5 0 19]98 dc[<01F007080C08181C383830007000 7000E000E000E000E000E000E008E010602030C01F00>14 18 5 0 19]99 dc[<001F80000380 000380000700000700000700000700000E00000E00000E00000E0003DC00063C000C3C00181C00 383800303800703800703800E07000E07000E07000E07000E0E200C0E200C0E20061E400626400 3C3800>17 29 5 0 21]100 dc[<01E007100C1018083810701070607F80E000E000E000E000E0 00E0086010602030C01F00>13 18 5 0 19]101 dc[<0003C0000670000C70001C60001C00001C 0000380000380000380000380000380003FF8000700000700000700000700000700000E00000E0 0000E00000E00000E00001C00001C00001C00001C00001C0000380000380000380000300000300 00070000C60000E60000CC0000780000>20 37 -1 8 13]102 dc[<00F3018F030F06070E0E0C 0E1C0E1C0E381C381C381C381C383830383038187818F00F700070007000E000E0C0C0E1C0C300 7E00>16 26 3 8 19]103 dc[<0FC00001C00001C0000380000380000380000380000700000700 000700000700000E78000E8C000F0E000E0E001C0E001C0E001C0E001C0E00381C00381C00381C 00383800703880703880707080707100E03200601C00>17 29 3 0 21]104 dc[<018003800100 00000000000000000000000000001C002600470047008E008E000E001C001C001C003800380071 0071007100720072003C00>9 28 4 0 13]105 dc[<0006000E00060000000000000000000000 00000000F00118021802180438043800380038007000700070007000E000E000E000E001C001C0 01C001C003800380C300E700CE007800>15 36 -1 8 13]106 dc[<0FC00001C00001C0000380 000380000380000380000700000700000700000700000E0F000E11000E23800E43801C83001C80 001D00001E00003F800039C00038E00038E00070E20070E20070E20070E400E06400603800>17 29 3 0 19]107 dc[<1F800380038007000700070007000E000E000E000E001C001C001C001C00 38003800380038007000700070007000E400E400E400E40068003800>9 29 4 0 11]108 dc[< 3C1E0780266318C04683A0E04703C0E08E0380E08E0380E00E0380E00E0380E01C0701C01C0701 C01C0701C01C070380380E0388380E0388380E0708380E0710701C0320300C01C0>29 18 4 0 34]109 dc[<3C3C002646004687004707008E07008E07000E07000E07001C0E001C0E001C0E00 1C1C00381C40381C40383840383880701900300E00>18 18 4 0 23]110 dc[<01E007180C0C18 0C380C300E700E700EE01CE01CE01CE018E038E030E06060C031801E00>15 18 5 0 21]111 dc [<07870004D98008E0C008E0C011C0E011C0E001C0E001C0E00381C00381C00381C00381800703 800703000707000706000E8C000E70000E00000E00001C00001C00001C00001C00003C0000FF80 00>19 26 1 8 21]112 dc[<03C4062C0C3C181C3838303870387038E070E070E070E070E0E0C0 E0C0E061E063C03DC001C001C0038003800380038007803FF0>14 26 5 8 19]113 dc[<3C3C26 C2468747078E068E000E000E001C001C001C001C00380038003800380070003000>16 18 4 0 18]114 dc[<01F006080C080C1C18181C001F001FC00FF007F0007800386030E030C030806060 C01F00>14 18 3 0 17]115 dc[<00C001C001C001C00380038003800380FFE00700070007000E 000E000E000E001C001C001C001C00384038403840388019000E00>11 26 3 0 14]116 dc[<1E 0300270700470700470700870E00870E000E0E000E0E001C1C001C1C001C1C001C1C0038388038 38801838801839001C5900078E00>17 18 4 0 22]117 dc[<1E06270E470E4706870287020E02 0E021C041C041C041C0818083808181018200C400780>15 18 4 0 19]118 dc[<1E0183270387 4703874703838707018707010E07010E07011C0E021C0E021C0E021C0E04180C04181C04181C08 1C1C100C263007C3C0>24 18 4 0 28]119 dc[<070E0019910010E38020E38041C30041C00001 C00001C000038000038000038000038000070200670200E70400CB04008B080070F000>17 18 3 0 19]120 dc[<1E03270747074707870E870E0E0E0E0E1C1C1C1C1C1C1C1C3838383818381838 1C7007F00070007000E0E0C0E1C0818047003C00>16 26 4 8 20]121 dc[<038207C20FEC0838 1008001000200040008001000200040008081008383067F043E081C0>15 18 3 0 17]122 dc dfe /fk df[12 4 1 -8 17]45 dc[<387CFEFEFE7C38>7 7 4 0 15]46 dc[<00E00001E0000FE000FFE000F3E00003E00003E00003E00003E00003E00003E00003E00003 E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003 E00003E000FFFF80FFFF80>17 29 4 0 26]49 dc[<07F0001FFE00383F007C1F80FE0FC0FE0F C0FE0FE0FE07E07C07E03807E0000FE0000FC0000FC0001F80001F00003E0000780000F00000E0 0001C0000380600700600E00601C00E01FFFC03FFFC07FFFC0FFFFC0FFFFC0>19 29 3 0 26] 50 dc[<01FC0007FF000E0F801E0FC03F07E03F07E03F07E03F07E01E0FC0000FC0000F80001F 0001FC0001FC00000F800007C00003E00003F00003F83803F87C03F8FE03F8FE03F8FE03F0FC03 F07807E03C0FC01FFF8003FC00>21 29 2 0 26]51 dc[<0001C00003C00007C00007C0000FC0 001FC0003BC00073C00063C000C3C00183C00383C00703C00E03C00C03C01803C03803C07003C0 E003C0FFFFFEFFFFFE0007C00007C00007C00007C00007C00007C000FFFE00FFFE>23 29 1 0 26]52 dc[<3803803FFF803FFF003FFE003FFC003FF0003F800030000030000030000030000033 F80037FE003C1F00380F801007C00007C00007E00007E07807E0FC07E0FC07E0FC07E0FC07C078 0FC0600F80381F001FFC0007F000>19 29 3 0 26]53 dc[<003F0001FFC007E0E00F81E01F03 F01E03F03E03F07C03F07C01E07C0000FC1000FCFF00FDFFC0FD03E0FE01F0FE01F0FC01F8FC01 F8FC01F8FC01F87C01F87C01F87C01F83C01F03E01F01E03E00F07C007FF8001FE00>21 29 2 0 26]54 dc[<0000E000000000E000000001F000000001F000000001F000000003F800000003F800 000006FC00000006FC0000000EFE0000000C7E0000000C7E000000183F000000183F000000303F 800000301F800000701FC00000600FC00000600FC00000C007E00000FFFFE00001FFFFF0000180 03F000018003F000030001F800030001F800060001FC00060000FC000E0000FE00FFE00FFFE0FF E00FFFE0>35 31 2 0 40]65 dc[<0007FC02003FFF0E00FE03DE03F000FE07E0003E0FC0001E 1F80001E3F00000E3F00000E7F0000067E0000067E000006FE000000FE000000FE000000FE0000 00FE000000FE000000FE0000007E0000007E0000067F0000063F0000063F00000C1F80000C0FC0 001807E0003803F0007000FE01C0003FFF800007FC00>31 31 3 0 38]67 dc[34 31 2 0 40] 68 dc[36 31 2 0 41]72 dc[16 31 2 0 20]73 dc[45 31 2 0 50]77 dc[36 31 2 0 39]82 dc[<03FC080FFF381E03F83800F8700078700038 F00038F00018F00018F80000FC00007FC0007FFE003FFF801FFFE00FFFF007FFF000FFF80007F8 0000FC00007C00003CC0003CC0003CC0003CE00038E00078F80070FE01E0E7FFC081FF00>22 31 3 0 29]83 dc[<07FC001FFF003F0F803F07C03F03E03F03E00C03E00003E0007FE007FBE01F03 E03C03E07C03E0F803E0F803E0F803E0FC05E07E0DE03FF8FE0FE07E>23 20 1 0 25]97 dc[< FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F1FC0 1F7FF01FE0F81F807C1F007E1F003E1F003E1F003F1F003F1F003F1F003F1F003F1F003F1F003E 1F003E1F007C1F807C1EC1F81C7FE0181F80>24 32 2 0 29]98 dc[<01FE0007FF801F0FC03E 0FC03E0FC07C0FC07C0300FC0000FC0000FC0000FC0000FC0000FC00007C00007E00003E00603F 00C01F81C007FF0001FC00>19 20 2 0 23]99 dc[<0007F80007F80000F80000F80000F80000 F80000F80000F80000F80000F80000F80000F801F8F80FFEF81F83F83E01F87E00F87C00F87C00 F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C00F87C00F87E00F83E01F81F07F80FFEFF03F8 FF>24 32 2 0 29]100 dc[<01FE0007FF800F83C01E01E03E00F07C00F07C00F8FC00F8FFFFF8 FFFFF8FC0000FC0000FC00007C00007C00003E00181E00180F807007FFE000FF80>21 20 1 0 24]101 dc[<001F8000FFC001F3E003E7E003C7E007C7E007C3C007C00007C00007C00007C000 07C000FFFC00FFFC0007C00007C00007C00007C00007C00007C00007C00007C00007C00007C000 07C00007C00007C00007C00007C00007C0003FFC003FFC00>19 32 1 0 16]102 dc[<01FC3C07 FFFE0F079E1E03DE3E03E03E03E03E03E03E03E03E03E01E03C00F07800FFF0009FC0018000018 00001C00001FFF800FFFF007FFF81FFFFC3C007C70003EF0001EF0001EF0001E78003C78003C3F 01F80FFFE001FF00>23 30 1 10 26]103 dc[ 24 32 3 0 29]104 dc[<1C003E003F007F003F003E001C00000000000000000000000000FF00 FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE0> 11 33 2 0 14]105 dc[24 32 2 0 28]107 dc [11 32 2 0 14]108 dc[39 20 3 0 44]109 dc[24 20 3 0 29]110 dc[<01FF0007FFC01F83F03E00F83E00F8 7C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C3E00F83E00F81F83F0 07FFC001FF00>23 20 1 0 26]111 dc[24 29 2 9 29]112 dc[<01F8 1807FE381F87783F01F83E01F87E00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C00 F87E00F87E00F83F01F81F87F80FFEF803F8F80000F80000F80000F80000F80000F80000F80000 F80007FF0007FF>24 29 2 9 28]113 dc[18 20 2 0 22]114 dc[<0FE63FFE701E600EE006E006F800FFC07FF83FFC1FFE03FE001FC007 C007E007F006F81EFFFCC7F0>16 20 2 0 21]115 dc[<01800180018003800380038007800F80 3F80FFFCFFFC0F800F800F800F800F800F800F800F800F800F800F860F860F860F860F8607CC03 F801F0>15 29 1 0 20]116 dc[24 20 3 0 29]117 dc[25 20 1 0 28]118 dc[35 20 1 0 38]119 dc[25 29 1 9 28]121 dc[<3FFFE03FFFE03C07C0380F80701F80 603F00603E00607C0000F80001F80003F00003E06007C0600F80601F80E03F00C03E01C07C03C0 FFFFC0FFFFC0>19 20 1 0 23]122 dc dfe /fl df[<70F8F8F0E0>5 5 6 0 15]46 dc[<0000 FE000007018000180060002000100040001000800008010000040201F00404070804080C040210 180202103003C2206001C220E0038240C0038241C0038241C00382838007048380070483800704 8380070483800E0883800E0881801E0881802E1080C04E2080618E60403E078040000000200000 0020000000100000E00C00078003007C0000FF8000>31 35 7 0 37]64 dc[<00FFFFE0000F00 38000F001C000F001E001E000E001E000F001E000F001E000F003C000E003C001E003C001E003C 003C00780078007800F0007801E00078078000FFFF8000F001E000F000F000F0007801E0007801 E0003801E0003C01E0003C03C0007803C0007803C0007803C000F0078000F0078001E0078003C0 078007000F801E00FFFFF000>32 34 3 0 34]66 dc[<00007F00800003808100000E00630000 380027000070001F0000E0000E0001C0000E000380000E000700000E000F000004000E00000400 1E000004003C000004003C00000800780000000078000000007800000000F000000000F0000000 00F000000000F000000000F000000000E000000000E000002000E000002000E000004000E00000 4000F00000800070000080007000010000380002000018000400001C0008000006003000000381 C0000000FE000000>33 36 7 1 35]67 dc[<00FFFFF000000F003C00000F000E00000F000700 001E000380001E000380001E0001C0001E0001C0003C0001C0003C0001E0003C0001E0003C0001 E000780001E000780001E000780001E000780001E000F00003C000F00003C000F00003C000F000 03C001E000078001E000078001E000070001E0000F0003C0000E0003C0001C0003C0003C0003C0 0038000780007000078000E000078001C00007800700000F801C0000FFFFF00000>35 34 3 0 37]68 dc[<00FFFFFF80000F000780000F000180000F000180001E000180001E000180001E0001 00001E000100003C000100003C000100003C010100003C01000000780200000078020000007806 000000780E000000FFFC000000F00C000000F00C000000F00C000001E008000001E008000001E0 08040001E000080003C000080003C000080003C000100003C00010000780002000078000600007 8000C000078001C0000F8007C000FFFFFF8000>33 34 3 0 33]69 dc[<00FF800007FC000F80 000F80000F80001780000F80001780001780002F000013C0002F000013C0004F000013C0008F00 0023C0009E000023C0011E000023C0011E000023C0021E000043C0043C000043C0043C000043C0 083C000041E0083C000081E01078000081E02078000081E02078000081E04078000101E040F000 0101E080F0000101E100F0000101E100F0000200F201E0000200F201E0000200F401E0000200F8 01E0000400F803C0000400F003C0000400F003C0000C00E003C0001E00C007C000FFC0C07FFC00 >46 34 3 0 44]77 dc[<0001F020000E0C40001802C0003001C0006001C000E0018000C00180 01C0018001C0018003C0010003C0010003C0000003C0000003E0000001F8000001FF000000FFE0 00007FF000001FF8000003FC0000007C0000003C0000001E0000001E0000001E0020001C002000 1C0020001C00200018006000380060003000700060007000C000C8018000C607000081FC0000> 27 36 3 1 27]83 dc[<3FFE03FF03C0007803C0006003C0002007800040078000400780004007 8000400F0000800F0000800F0000800F0000801E0001001E0001001E0001001E0001003C000200 3C0002003C0002003C0002007800040078000400780004007800040070000800F0000800F00010 007000100070002000700040003000400038018000180200000E0C000003F00000>32 35 9 1 36]85 dc[<00F8C00185C00705C00E03800E03801C03803C0380380700780700780700780700F0 0E00F00E00F00E00F00E10F01C20701C20703C20305C40308C400F0780>20 21 5 0 25]97 dc[ <00003C0003F80000380000380000380000700000700000700000700000E00000E00000E00000 E00001C000F9C00185C00705C00E03800E03801C03803C0380380700780700780700780700F00E 00F00E00F00E00F00E10F01C20701C20703C20305C40308C400F0780>22 35 5 0 25]100 dc[< 00F803840E021C023C0238027804F018FFE0F000F000E000E000E000E000E002E0026004701830 600F80>15 21 6 0 22]101 dc[<00F0000FE00000E00000E00000E00001C00001C00001C00001 C000038000038000038000038000070000071F0007218007C0C00F00E00F00E00E00E00E00E01C 01C01C01C01C01C01C01C0380380380380380380380704700708700E08700E10700610E0062060 03C0>22 35 3 0 25]104 dc[<00C001E001C001C0000000000000000000000000000000001C00 2300430043008700870087000E000E001C001C001C00380038003840708070807080710032001C 00>11 33 5 0 15]105 dc[<1C0F002631C04740C08780E08780E08700E08700E00E01C00E01C0 0E01C00E01C01C03801C03801C03801C0704380708380E08380E103806107006203003C0>22 21 5 0 27]110 dc[<1C1F002620804741C08783C08703C08701808700000E00000E00000E00000E 00001C00001C00001C00001C0000380000380000380000380000700000300000>18 21 5 0 21] 114 dc[<00FC000183000200800401800C03800C03000C00000F00000FF00007FC0003FE00003E 00000F00000700700700F00600F00600E004004008002030001FC000>17 21 3 0 20]115 dc dfe /fm df[<70F8FCFC7404040404080810102040>6 15 4 10 14]44 dc[<70F8F8F870>5 5 4 0 14]46 dc[<008003800F80F380038003800380038003800380038003800380038003800380 03800380038003800380038003800380038003800380038003800380038007C0FFFE>15 33 4 0 24]49 dc[<03F0000C1C001007002007804003C04003C08003E0F003E0F801E0F801E0F801E020 03E00003E00003C00003C0000780000700000E00001C0000180000300000600000C00001800001 00000200200400200800201800603000403FFFC07FFFC0FFFFC0>19 33 2 0 24]50 dc[<03F8 000C1E001007002007804007C07807C07803C07807C03807C0000780000780000700000F00000E 0000380003F000001C00000F000007800007800003C00003C00003E02003E07003E0F803E0F803 E0F003C04003C0400780200780100F000C1C0003F000>19 34 2 1 24]51 dc[<1000801E0700 1FFF001FFE001FF80013E00010000010000010000010000010000010000010F800130E00140700 1803801003800001C00001C00001E00001E00001E00001E07001E0F001E0F001E0E001C08001C0 4003C04003802007001006000C1C0003F000>19 34 2 1 24]53 dc[<00018000000180000001 80000003C0000003C0000003C0000005E0000005E000000DF0000008F0000008F0000010F80000 1078000010780000203C0000203C0000203C0000401E0000401E0000401E0000800F0000800F00 00FFFF000100078001000780030007C0020003C0020003C0040003E0040001E0040001E00C0000 F00C0000F03E0001F8FF800FFF>32 35 2 0 37]65 dc[29 34 2 0 35]66 dc[<0007E0100038183000E0063001C00170038000F0070000F0 0E0000701E0000701C0000303C0000303C0000307C0000107800001078000010F8000000F80000 00F8000000F8000000F8000000F8000000F8000000F800000078000000780000107C0000103C00 00103C0000101C0000201E0000200E000040070000400380008001C0010000E0020000381C0000 07E000>28 36 3 1 35]67 dc[40 34 2 0 45]77 dc[< FF8007FF07C000F807C0007005E0002004F0002004F0002004780020047C0020043C0020041E00 20041F0020040F002004078020040780200403C0200401E0200401E0200400F0200400F8200400 782004003C2004003E2004001E2004000F2004000F20040007A0040003E0040003E0040001E004 0001E0040000E00E0000601F000060FFE00020>32 34 2 0 37]78 dc[27 34 2 0 33]80 dc[<03F0200C0C601802603001E07000E0600060 E00060E00060E00020E00020E00020F00000F000007800007F00003FF0001FFE000FFF0003FF80 003FC00007E00001E00000F00000F0000070800070800070800070800070C00060C00060E000C0 F000C0C80180C6070081FC00>20 36 3 1 27]83 dc[32 35 2 1 37]85 dc[<0FE0001838003C0C003C0E00180700000700000700 00070000FF0007C7001E07003C0700780700700700F00708F00708F00708F00F087817083C2390 0FC1E0>21 21 2 0 24]97 dc[<0E0000FE00001E00000E00000E00000E00000E00000E00000E 00000E00000E00000E00000E00000E00000E1F000E61C00E80600F00300E00380E003C0E001C0E 001E0E001E0E001E0E001E0E001E0E001E0E001E0E001C0E003C0E00380F00700C80600C41C008 3F00>23 35 1 0 27]98 dc[<01FE000703000C07801C0780380300780000700000F00000F000 00F00000F00000F00000F00000F000007000007800403800401C00800C010007060001F800>18 21 2 0 22]99 dc[<0000E0000FE00001E00000E00000E00000E00000E00000E00000E00000E0 0000E00000E00000E00000E001F8E00704E00C02E01C01E03800E07800E07000E0F000E0F000E0 F000E0F000E0F000E0F000E0F000E07000E07800E03800E01801E00C02E0070CF001F0FE>23 35 2 0 27]100 dc[<01FC000707000C03801C01C03801C07801E07000E0F000E0FFFFE0F00000F0 0000F00000F00000F000007000007800203800201C00400E008007030000FC00>19 21 1 0 22] 101 dc[<003C00C6018F038F030F070007000700070007000700070007000700FFF80700070007 0007000700070007000700070007000700070007000700070007000700070007807FF8>16 35 0 0 15]102 dc[<00007001F198071E180E0E181C07001C07003C07803C07803C07803C07801C07 001C07000E0E000F1C0019F0001000001000001800001800001FFE000FFFC00FFFE03800F06000 30400018C00018C00018C000186000306000303800E00E038003FE00>21 33 1 11 24]103 dc[ <0E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00 000E00000E1F800E60C00E80E00F00700F00700E00700E00700E00700E00700E00700E00700E00 700E00700E00700E00700E00700E00700E00700E00700E0070FFE7FF>24 35 1 0 27]104 dc[< 1C001E003E001E001C00000000000000000000000000000000000E00FE001E000E000E000E000E 000E000E000E000E000E000E000E000E000E000E000E000E000E00FFC0>10 34 1 0 14]105 dc [<0E00FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00 0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFE0>11 35 1 0 14] 108 dc[<0E1FC07F00FE60E183801E807201C00F003C00E00F003C00E00E003800E00E003800E0 0E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800 E00E003800E00E003800E00E003800E00E003800E00E003800E0FFE3FF8FFE>39 21 1 0 42] 109 dc[<0E1F80FE60C01E80E00F00700F00700E00700E00700E00700E00700E00700E00700E00 700E00700E00700E00700E00700E00700E00700E00700E0070FFE7FF>24 21 1 0 27]110 dc[< 01FC000707000C01801800C03800E0700070700070F00078F00078F00078F00078F00078F00078 F000787000707800F03800E01C01C00E038007070001FC00>21 21 1 0 24]111 dc[<0E1F00FE 61C00E80600F00700E00380E003C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E 003C0E003C0E00380F00700E80E00E41C00E3F000E00000E00000E00000E00000E00000E00000E 00000E00000E0000FFE000>23 31 1 10 27]112 dc[<0E3CFE461E8F0F0F0F060F000E000E00 0E000E000E000E000E000E000E000E000E000E000E000F00FFF0>16 21 1 0 19]114 dc[<0F88 30786018C018C008C008E008F0007F803FE00FF001F8003C801C800C800CC00CC008E018D0308F C0>14 21 2 0 19]115 dc[<02000200020002000600060006000E001E003E00FFF80E000E000E 000E000E000E000E000E000E000E000E000E040E040E040E040E040E040708030801F0>14 31 1 0 19]116 dc[<0E0070FE07F01E00F00E00700E00700E00700E00700E00700E00700E00700E00 700E00700E00700E00700E00700E00700E00F00E00F006017003827800FC7F>24 21 1 0 27] 117 dc[23 21 1 0 26]118 dc[< FFC1FE1E00780E00300E00200E002007004007004003808003808003808001C10001C10000E200 00E20000E200007400007400003800003800003800001000001000002000002000002000004000 F04000F08000F180004300003C0000>23 31 1 10 26]121 dc dfe /fn df[<04081030206040 C0C0C0C0C0C0C0C040602030100804>6 22 3 6 11]40 dc[<804020301018080C0C0C0C0C0C0C 0C08181030204080>6 22 2 6 11]41 dc[<40E040>3 3 3 0 8]46 dc[<18F818181818181818 181818FF>8 13 3 0 14]49 dc[<3E0041806180018003001E00018000C000C0C0C0C0C041803E 00>10 13 2 0 14]51 dc[<1E006100C080C0C0C0C0C0C061C01EC000C00080618063003C00> 10 13 2 0 14]57 dc[<0180018002C002C002C004600460083008301FF810181018300CF83F> 16 14 2 0 20]65 dc[<03F10C0F300360016001C000C000C000C0006001600130020C0C03F0> 16 14 2 0 20]67 dc[17 14 2 0 21]68 dc[21 14 2 0 25]77 dc[<1F A0606080208020800070003F8003C00020001080108010C060BF80>12 14 2 0 16]83 dc[<3C 00620003001F006300C300C320C3203FC0>11 9 2 0 14]97 dc[12 14 2 0 16]98 dc[<1F0021804000C000C000C000 400020801F00>9 9 2 0 13]99 dc[<03C000C000C000C000C01EC021C040C0C0C0C0C0C0C040 C021C01EF0>12 14 2 0 16]100 dc[<1E0061004180FF80C000C000400020801F00>9 9 2 0 13]101 dc[<060B181818FE181818181818187E>8 14 1 0 9]102 dc[<1DE022206300630022 003C0060003F003F8040C0C0C0C0C061803F00>11 14 2 5 14]103 dc[12 14 2 0 16]104 dc[<307030000000F03030 3030303030FC>6 15 1 0 8]105 dc[20 9 2 0 24]109 dc[12 9 2 0 16] 110 dc[<1E0061804080C0C0C0C0C0C0408061801E00>10 9 2 0 14]111 dc[12 13 2 4 16]112 dc[8 9 2 0 11]114 dc[<7C8484F03C0682C2BC>7 9 2 0 11]115 dc[<08081838FE18181818 1919190E>8 13 1 0 11]116 dc[12 9 2 0 16] 117 dc[11 9 2 0 15]118 dc[11 13 2 4 15]121 dc dfe /fo df[17 3 1 -14 22]45 dc[39 49 4 0 47]66 dc[ <00003FE0010001FFF8030007F01E03001F800307003E000087007800004F00F000002F01E000 001F03C000000F078000000F0F800000070F000000071F000000031E000000033E000000033C00 0000017C000000017C000000017C000000017800000000F800000000F800000000F800000000F8 00000000F800000000F800000000F800000000F800000000F800000000F800000000F800000000 78000000007C000000007C000000017C000000013C000000013E000000011E000000011F000000 020F000000020F80000006078000000403C000000801E000000800F00000100078000020003E00 00C0001F8003800007F00F000001FFFC0000003FE000>40 51 4 1 48]67 dc[42 49 4 0 50]78 dc[<00003FC000000001C038000000 07000E0000001C0003800000380001C00000F00000F00001E00000780003C000003C0003800000 1C00078000001E000F0000000F000F0000000F001E00000007801E00000007803C00000003C03C 00000003C07C00000003E07C00000003E07800000001E07800000001E0F800000001F0F8000000 01F0F800000001F0F800000001F0F800000001F0F800000001F0F800000001F0F800000001F0F8 00000001F0F800000001F0F800000001F07C00000003E07C00000003E07C00000003E07C000000 03E03C00000003C03E00000007C01E00000007801E00000007800F0000000F000F0000000F0007 8000001E0003C000003C0003C000003C0001E00000780000F00000F00000380001C000001C0003 80000007000E00000001E078000000003FC00000>44 51 4 1 52]79 dc[37 49 4 0 45]80 dc[<00FE00000303C0000C00E00010007000100038003C003C003E 001C003E001E003E001E0008001E0000001E0000001E0000001E00000FFE0000FC1E0003E01E00 0F801E001F001E003E001E003C001E007C001E00F8001E04F8001E04F8001E04F8003E04F8003E 0478003E047C005E043E008F080F0307F003FC03E0>30 31 3 0 33]97 dc[<07800000FF8000 00FF8000000F800000078000000780000007800000078000000780000007800000078000000780 0000078000000780000007800000078000000780000007800000078000000781FC000786070007 8801C0079000E007A0007007C00078078000380780003C0780003C0780001E0780001E0780001F 0780001F0780001F0780001F0780001F0780001F0780001F0780001F0780001F0780001E078000 3E0780003C0780003C0780007807C00070072000F0072001E00618038006060F000401F800>32 50 2 0 37]98 dc[<003F8000E0600380180700040F00041E001E1C003E3C003E7C003E7C0008 780000F80000F80000F80000F80000F80000F80000F80000F80000F800007800007C00007C0000 3C00011E00011E00020F000207000403801800E060003F80>24 31 3 0 29]99 dc[<000001E0 00003FE000003FE0000003E0000001E0000001E0000001E0000001E0000001E0000001E0000001 E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0001F81E000F0 61E001C019E0078005E00F0003E00E0003E01E0001E03C0001E03C0001E07C0001E0780001E0F8 0001E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001E0780001E0 780001E03C0001E03C0001E01C0001E01E0003E00E0005E0070009E0038011F000E061FF003F81 FF>32 50 3 0 37]100 dc[<003F800000E0E0000380380007003C000E001E001E001E001C000F 003C000F007C000F0078000F8078000780F8000780F8000780FFFFFF80F8000000F8000000F800 0000F8000000F8000000F8000000780000007C0000003C0000003C0000801E0000800E0001000F 0002000780020001C00C0000F03000001FC000>25 31 2 0 29]101 dc[<0007E0001C10003838 00707C00E07C01E07C01C03803C00003C00003C00003C00003C00003C00003C00003C00003C000 03C00003C00003C000FFFFC0FFFFC003C00003C00003C00003C00003C00003C00003C00003C000 03C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C000 03C00003C00003C00003C00003C00007E0007FFF007FFF00>22 50 1 0 20]102 dc[<000000F0 007F030801C1C41C0380E81C070070080F0078001E003C001E003C003E003E003E003E003E003E 003E003E003E003E003E003E001E003C001E003C000F007800070070000780E00009C1C000087F 000018000000180000001800000018000000180000001C0000000E0000000FFFF80007FFFF0003 FFFF800E000FC0180001E0300000F070000070E0000038E0000038E0000038E0000038E0000038 7000007070000070380000E01C0001C00700070001C01C00003FE000>30 47 2 15 33]103 dc[ <07000F801F801F800F800700000000000000000000000000000000000000000000000780FF80 FF800F800780078007800780078007800780078007800780078007800780078007800780078007 800780078007800780078007800FC0FFF8FFF8>13 48 2 0 18]105 dc[<001E003F003F003F00 3F001E00000000000000000000000000000000000000000000001F01FF01FF001F000F000F000F 000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00 0F000F000F000F000F000F000F000F000F000F000F000F200EF80EF81EF81C703860701FC0>16 62 -3 14 20]106 dc[<07800000FF800000FF8000000F80000007800000078000000780000007 800000078000000780000007800000078000000780000007800000078000000780000007800000 078000000780000007801FFC07801FFC078007E007800780078006000780040007800800078010 000780600007808000078100000783800007878000078FC0000793C00007A1E00007C1F0000780 F0000780780007807C0007803C0007803E0007801F0007800F0007800F80078007C0078003C007 8003E00FC007F8FFFC0FFFFFFC0FFF>32 50 2 0 35]107 dc[<0780FF80FF800F800780078007 800780078007800780078007800780078007800780078007800780078007800780078007800780 078007800780078007800780078007800780078007800780078007800780078007800780078007 8007800FC0FFFCFFFC>14 50 2 0 18]108 dc[<0780FE0000FF83078000FF8C03C0000F9001E0 0007A001E00007A000F00007C000F00007C000F000078000F000078000F000078000F000078000 F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0000780 00F000078000F000078000F000078000F000078000F000078000F000078000F000078000F00007 8000F0000FC001F800FFFC1FFF80FFFC1FFF80>33 31 2 0 37]110 dc[<001FC00000F0780001 C01C00070007000F0007801E0003C01C0001C03C0001E03C0001E0780000F0780000F0780000F0 F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8780000F07C0001 F03C0001E03C0001E01E0003C01E0003C00F00078007800F0001C01C0000F07800001FC000>29 31 2 0 33]111 dc[<0783E0FF8C18FF907C0F907C07A07C07C03807C00007C00007C000078000 078000078000078000078000078000078000078000078000078000078000078000078000078000 0780000780000780000780000780000FC000FFFE00FFFE00>22 31 2 0 25]114 dc[<01FC100E 03301800F0300070600030E00030E00010E00010E00010F00010F800007E00003FF0001FFF000F FFC003FFE0003FF00001F80000F880003C80003C80001CC0001CC0001CE0001CE00018F00038F0 0030CC0060C301C080FE00>22 31 2 0 26]115 dc[<00400000400000400000400000400000C0 0000C00000C00001C00001C00003C00007C0000FC0001FFFE0FFFFE003C00003C00003C00003C0 0003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C0 1003C01003C01003C01003C01003C01003C01003C01001C02001E02000E0400078C0001F00>20 44 1 0 25]116 dc[<078000F000FF801FF000FF801FF0000F8001F000078000F000078000F000 078000F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0 00078000F000078000F000078000F000078000F000078000F000078000F000078000F000078000 F000078000F000078001F000078001F000078001F000038002F00003C004F00001C008F8000070 30FF80001FC0FF80>33 31 2 0 37]117 dc dfe end TeXDict begin @letter %%EndProlog %%Page: 1 1 bop 63 241 a fo(Practical)22 b(Considerations)f(for)g(Non-Blo)q(c)n(king)g (Concurren)n(t)h(Ob)s(jects)330 324 y fn(A)10 b(version)g(of)g(this)g(paper)g (appears)g(in)g(the)f(Ma)o(y)h(1993)g(Distributed)g(Computing)e(Systems)h(Con\ ference)f(\(DCS\).)776 439 y fm(Brian)16 b(N.)f(Bershad)666 492 y(Sc)n(ho)r (ol)h(of)h(Computer)e(Science)672 545 y(Carnegie)h(Mellon)f(Univ)n(ersit)n (y)732 598 y(Pittsburgh,)h(P)l(A)g(15213)633 651 y fl(Brian.Bershad@CS.CMU.ED\ U)328 812 y fk(Abstract)-7 996 y fj(A)o(n)g(imp)n(ortant)g(class)f(of)h(c)n (oncurr)n(ent)g(obje)n(cts)g(ar)n(e)g(those)-57 1041 y(that)21 b(ar)m(e)g(non\ -blo)o(cking,)h(that)f(is,)h(whose)f(op)n(er)m(ations)g(ar)n(e)-57 1087 y(not) g(c)n(ontaine)n(d)g(within)e(mutual)s(ly)h(exclusive)g(critic)m(al)g(se)n(c-) -57 1132 y(tions.)h(A)15 b(non-blo)n(cking)h(obje)n(ct)g(c)n(an)g(b)m(e)g(ac) n(c)n(esse)n(d)g(by)g(many)-57 1177 y(thr)m(e)n(ads)d(at)f(a)g(time,)g(yet)g (up)n(date)h(pr)m(oto)n(c)n(ols)f(b)n(ase)n(d)h(on)f(atomic)-57 1223 y(Comp)n (ar)n(e-A)n(nd-Swap)j(op)n(er)m(ations)f(c)n(an)g(b)n(e)g(use)n(d)g(to)g(guar) n(an-)-57 1268 y(te)n(e)h(the)g(obje)n(ct's)f(c)n(onsistency.)-7 1343 y(In)30 b(this)f(p)n(ap)o(er)g(we)h(take)g(a)g(pr)m(actic)n(al)g(lo)m(ok)g(at)g(the) -57 1388 y(Comp)n(ar)n(e-A)n(nd-Swap)21 b(op)n(er)n(ation)f(in)f(the)h(c)n (ontext)g(of)g(c)n(on-)-57 1434 y(temp)n(or)n(ary)e(bus-b)o(ase)n(d)h(shar)n (e)n(d)g(memory)g(multipr)m(o)n(c)n(essors,)-57 1479 y(although)j(our)g(r)n (esults)f(gener)n(alize)g(to)h(distribute)m(d)g(shar)n(e)n(d)-57 1524 y(memor\ y)d(multipr)m(o)n(c)n(essors.)30 b(We)20 b(\014rst)e(describ)n(e)h(an)g(op)o (er-)-57 1570 y(ating)14 b(system-b)n(ase)n(d)h(solution)f(that)g(p)o(ermits) f(the)h(c)n(onstruc-)-57 1615 y(tion)e(of)f(a)h(non-blo)n(cking)g(Comp)n(ar)n (e-A)n(nd-Swap)h(function)f(on)-57 1660 y(ar)n(chite)m(ctur)n(es)j(that)g(onl\ y)h(supp)o(ort)e(mor)n(e)h(primitive)f(atomic)-57 1706 y(primitives)f(such)h (as)g(T)m(est-A)n(nd-Set)h(or)e(A)o(tomic)h(Exchange.)-57 1751 y(We)21 b(then) g(evaluate)g(sever)n(al)f(lo)n(cking)h(str)m(ate)n(gies)f(that)h(c)n(an)-57 1796 y(b)n(e)14 b(use)n(d)g(to)g(synthesize)g(a)g(Comp)n(ar)n(e-A)o(nd-Swap)g (op)o(er)m(ation,)-57 1842 y(and)23 b(show)f(that)h(the)f(c)n(ommon)h(te)n (chniques)g(for)f(r)m(e)n(ducing)-57 1887 y(synchr)n(onization)12 b(overhe)n (ad)f(in)g(the)g(pr)n(esenc)n(e)g(of)g(c)n(ontention)-57 1932 y(ar)n(e)24 b (inappr)n(opriate)g(when)g(use)n(d)h(as)f(the)g(b)n(asis)g(for)f(non-)-57 1978 y(blo)n(cking)18 b(synchr)n(onization.)28 b(We)18 b(then)g(describ)n(e)g(a)g (simple)-57 2023 y(synchr)n(onization)12 b(str)m(ate)n(gy)g(that)g(has)g(go)n (o)n(d)g(p)n(erformanc)n(e)f(b)n(e-)-57 2068 y(c)n(ause)16 b(it)f(avoids)i (much)f(of)f(the)h(synchr)n(onization)h(overhe)n(ad)-57 2114 y(that)e(normal) r(ly)f(o)o(c)n(curs)g(when)h(ther)n(e)g(is)f(c)n(ontention.)-57 2267 y 389 2 v 7 2305 a fi(This)e(researc)o(h)e(w)o(as)i(sp)q(onsored)e(in)i(part)f(b)o(y)h (a)g(National)e(Science)-57 2341 y(F)m(oundation)k(Presiden)o(tial)h(Y)m(oung) h(In)o(v)o(estigator)e(Aw)o(ard,)19 b(the)d(Dig-)-57 2377 y(ital)f(Equipmen)o (t)e(Corp)q(oration,)i(the)g(Defense)f(Adv)n(anced)g(Researc)o(h)-57 2413 y (Pro)q(jects)i(Agency)m(,)g(Information)d(Science)h(and)h(T)m(ec)o(hnology)f (O\016ce,)-57 2449 y(under)7 b(the)h(title)f(\\Researc)o(h)g(on)h(P)o(arallel) f(Computing",)f(ARP)m(A)k(Order)-57 2485 y(No.)21 b(7330,)13 b(issued)f(b)o (y)h(D)o(ARP)m(A/CMO)i(under)d(Con)o(tract)g(MD)o(A972-)-57 2521 y(90-C-0035,) d(and)i(b)o(y)g(the)g(Op)q(en)g(Soft)o(w)o(are)f(F)m(oundation)f(\(OSF\).)-22 2556 y(The)16 b(views)g(and)f(conclusions)e(con)o(tained)g(in)i(this)g(do)q (cumen)o(t)e(are)-57 2592 y(those)i(of)g(the)g(authors)f(and)h(should)f(not)h (b)q(e)h(in)o(terpreted)c(as)k(repre-)-57 2628 y(sen)o(ting)8 b(the)h(o\016ci\ al)h(p)q(olicies,)e(either)g(expressed)g(or)i(implied,)e(of)h(NSF,)-57 2664 y (DEC,)j(D)o(ARP)m(A,)g(OSF,)g(or)f(the)g(U.S.)g(go)o(v)o(ernmen)o(t.)1013 812 y fh(1)56 b(In)n(tro)r(duction)1063 922 y fg(Programs)14 b(running)i(on)g(m)m (ultipro)q(cessors)h(rely)f(on)g(lo)n(w-)1013 967 y(lev)o(el)10 b(synchroniza\ tion)g(mec)o(hanisms)f(and)i(proto)q(cols)g(to)g(en-)1013 1013 y(sure)17 b (con)o(trolled)g(access)h(to)e(concurren)q(t)g(ob)s(jects.)26 b(An)17 b(im-) 1013 1058 y(p)q(ortan)o(t)d(class)h(of)f(concurrent)h(ob)r(jects)g(are)g(thos\ e)g(that)g(are)1013 1103 y fj(non-blo)n(cking)p fg(,)20 b(that)e(is,)h(whose) f(op)q(erations)h(are)g(not)f(con-)1013 1149 y(tained)10 b(within)g(m)n(utual\ ly)f(exclusiv)o(e)i(critical)f(sections)i([Her-)1013 1194 y(lih)n(y)17 b(&)g (Wing)f(90,)g(Herlih)o(y)h(91].)27 b(A)17 b(non-blocking)f(ob)r(ject)1013 1239 y(can)k(b)q(e)h(accessed)h(b)o(y)e(man)n(y)g(pro)q(cessors)i(at)e(a)g(time,)g (y)n(et)1013 1285 y(up)q(date)f(proto)q(cols)g(that)f(use)h(an)g(atomic)d(Com\ pare-And-)1013 1330 y(Sw)o(ap)e(guaran)n(tee)i(the)f(ob)r(ject's)g(consistenc\ y)n(.)k(In)c(con)o(trast,)1013 1375 y(a)i fj(blo)m(cking)h fg(ob)r(ject)g(ser\ ializes)g(access)h(within)d(critical)h(sec-)1013 1421 y(tions)d(where)h(loc)o (ks)f(are)h(used)f(to)g(con)o(trol)g(access.)1063 1471 y(Non-bloc)o(king)e (concurren)q(t)h(ob)r(jects)h(ha)o(v)n(e)g(sev)o(eral)f(qual-)1013 1516 y(iti\ es)e(that)g(mak)m(e)g(them)f(attractiv)o(e)i(for)e(parallel)g(pro)q(cessing.) 1013 1562 y(Because)18 b(pro)q(cessors)g(are)e(not)g(forced)g(to)g(queue)h (while)e(ac-)1013 1607 y(cessing)e(a)f(non-blocking)f(ob)r(ject,)i(they)g(are) g(not)f(vulnerable)1013 1652 y(to)f(the)i(e\013ects)g(of)f(sc)o(heduling)f (conv)n(o)o(ys,)h(priorit)n(y)g(in)n(v)o(ersion,)1013 1698 y(and)g(deadlo)q (c)o(k)g(|)g(all)f(p)q(oten)o(tial)g(problems)h(in)f(parallel)h(sys-)1013 1743 y(tems)j([Zahorjan)h(et)h(al.)24 b(88].)g(Con)n(v)o(o)o(ying)15 b(o)q(ccurs)j (when)e(a)1013 1788 y(thread)g(is)g(descheduled,)h(sa)o(y)f(due)g(to)g(its)g (quan)n(tum)f(expir-)1013 1834 y(ing,)d(a)g(page)g(fault)g(or)h(an)f(in)o(ter\ rupt,)h(forcing)f(other)i(pro)q(ces-)1013 1879 y(sors)e(to)g(w)o(ait)f(b)q (ecause)i(the)g(descheduled)f(thread)h(is)e(holding)1013 1924 y(a)k(lo)q(c)o (k.)24 b(Priorit)o(y)16 b(in)n(v)o(ersion)g(o)q(ccurs)i(when)e(a)g(lo)n(w)g (priorit)n(y)1013 1970 y(thread)f(holds)f(a)h(lock)f(needed)i(b)o(y)f(a)f(hig\ h)g(priorit)n(y)h(thread,)1013 2015 y(but)g(the)h(lo)n(w)f(priorit)n(y)g(thre\ ad)h(has)f(b)q(een)h(preempted)f(b)o(y)g(a)1013 2060 y(thread)i(of)f(medium)e (priorit)n(y)m(.)26 b(The)17 b(high)e(priorit)o(y)h(thread)1013 2106 y(cannot) 21 b(mak)m(e)h(progress)g(b)q(ecause)h(the)e(medium)e(priorit)n(y)1013 2151 y (thread)e(is)f(prev)o(en)o(ting)g(the)h(lo)n(w)f(priorit)n(y)g(thread)h(from) d(re-)1013 2196 y(leasing)c(its)h(loc)o(k.)17 b(Deadlo)q(c)o(k)10 b(o)q(ccurs) j(when)e(pro)q(cessors)i(hold)1013 2242 y(locks)g(while)g(w)n(aiting)f(for)h (lo)q(c)o(ks)g(held)g(b)o(y)g(other)h(pro)q(cessors.)1013 2287 y(All)g(of)h (these)i(problems)e(o)q(ccur)h(b)r(ecause)h(pro)q(cessors)g(blo)q(c)o(k)1013 2332 y(w)o(aiting)11 b(for)h(a)g(resource.)20 b(Since)13 b(there)g(is)g(no)f (blocking)f(with)1013 2378 y(non-bloc)o(king)i(ob)s(jects,)h(their)g(o)q(ccur\ rence)j(is)d(prev)o(ented.)1063 2428 y(Sev)o(eral)h(researchers)h(ha)o(v)o (e)f(already)f(demonstrated)h(the)1013 2473 y(feasibilit)m(y)g(of)f(non-bloc) o(king)g(ob)r(jects)i(in)e(concurren)q(t)g(algo-)1013 2519 y(rithms.)32 b(Mel\ lor-Crummey)16 b([Mellor-Crummey)g(87])i(and)1013 2564 y(Wing)e(and)i(Gong)f ([Wing)f(&)i(Gong)f(90])f(ha)o(v)o(e)i(designed)g(a)1013 2609 y(library)12 b (of)f(non-blo)q(c)o(king)h(concurrent)h(ob)r(jects)h(and)e(pro)o(v)n(en)1013 2655 y(them)i(correct.)23 b(Herlih)o(y)15 b(has)g(sho)o(wn)g(sev)o(eral)g(pra\ ctical)g(al-)1013 2700 y(gorithms)20 b(for)h(w)o(ait-free)h(|)f(a)g(restricte\ d)i(form)d(of)h(non-)p eop %%Page: 2 2 bop -57 117 a fg(blo)q(c)o(king)20 b(|)g(ob)r(jects)i([Herlih)n(y)f(90].)38 b (Massalin)20 b(and)h(Pu)-57 162 y(ha)o(v)n(e)d(implemen)m(ted)g(an)f(entire)h (op)q(erating)f(system)h(k)n(ernel)-57 207 y(for)i(shared)i(memory)c(m)m(ulti\ pro)q(cessors)k(using)f(only)e(non-)-57 253 y(blo)q(c)o(king)13 b(ob)r(jects) i([Massalin)e(&)h(Pu)g(91].)-7 300 y(In)21 b(practice,)i(t)o(w)o(o)d(problems) g(m)n(ust)h(b)q(e)h(addressed)g(b)o(y)-57 346 y(the)16 b(implemen)m(tors)g (of)f(non-blocking)g(ob)r(jects.)25 b(First,)16 b(few)-57 391 y(con)o(temp)q (orary)10 b(pro)q(cessors)i(supp)r(ort)f(Compare-And-Sw)m(ap)-57 436 y(direct\ ly)m(.)37 b(Instead,)23 b(most)c(supp)q(ort)i(simpler)e(atomic)g(op-)-57 482 y (erations)h(suc)o(h)g(as)f(T)m(est-And-Set)i(or)e(A)o(tomic)f(Exchange.)-57 527 y(F)m(or)11 b(example,)g(of)g(eigh)o(t)g(pro)r(duction-qualit)m(y)h(share\ d)h(mem-)-57 572 y(ory)25 b(m)m(ultipro)q(cessors)i(\(Encore's)f(Multimax,)e (Sequent's)-57 618 y(Symmetry)-6 b(,)26 b(SGI's)e(MIPS-based)h(m)m(ultipro)q (cessor,)i(Om-)-57 663 y(ron's)10 b(Luna88k,)f(Son)n(y's)h(NEWS,)f(DEC)h(SR)n (C's)g(Fire\015y)l(,)g(and)-57 708 y(DEC's)g(6380)g(and)g(433MP)g(Corollary\)\ ,)g(only)g(t)o(w)o(o)g(\(the)h(486-)-57 754 y(based)17 b(Corollary)d(and)i (the)g(68030-based)g(NEWS\))g(ha)n(v)o(e)g(a)-57 799 y(pro)q(cessor)g(that)e (implem)o(en)m(ts)g(Compare-And-Sw)n(ap.)-7 847 y(The)i(second)g(problem)e (with)h(non-blo)q(c)o(king)f(algorithms)-57 892 y(is)f(their)g(p)q(erformance) f(in)g(the)i(presence)h(of)d(con)o(tention.)17 b(As)-57 938 y(the)10 b(n)o (um)m(b)r(er)g(of)f(pro)q(cessors)i(concurren)q(tly)e(accessing)h(a)f(non-) -57 983 y(blo)q(c)o(king)17 b(ob)s(ject)i(increases,)h(there)g(exists)f(the)g (danger)g(of)-57 1028 y(degraded)h(throughput)f(due)h(to)f(the)h(cost)g(of)e (global)g(syn-)-57 1074 y(c)o(hronization)f(op)q(erations.)31 b(This)17 b(deg\ radation)h(is)g(similar)-57 1119 y(to)h(that)g(observed)h(in)f(the)h(sync)o (hronization)f(b)q(eha)o(vior)g(of)-57 1164 y(blo)q(c)o(king)f(ob)r(jects)i ([Anderson)g(90,)e(Graunk)o(e)h(&)h(Thakk)m(ar)-57 1210 y(90,)13 b(Mellor-Cru\ mmey)e(&)j(Scott)g(91].)-7 1258 y(In)d(this)g(pap)q(er)h(w)o(e)f(presen)q(t)g (practical)g(solutions)g(to)g(these)-57 1303 y(t)o(w)o(o)18 b(problems.)31 b (In)19 b(Section)g(2)f(w)o(e)h(describ)r(e)g(an)g(e\016cien)o(t)-57 1348 y (soft)o(w)o(are)g(mec)n(hanism)e(that)i(can)g(b)q(e)g(used)h(to)f(build)e(non\ -)-57 1394 y(blo)q(c)o(king)9 b(concurren)q(t)h(ob)r(jects.)18 b(Our)10 b(app\ roac)o(h)g(transforms)-57 1439 y(a)16 b(simple)f(T)m(est-And-Set)j(op)q(erati\ on)e(in)o(to)g(a)g(non-blo)q(c)o(king)-57 1484 y(Compare-And-Sw)n(ap)f(using) h(a)f(small)f(amoun)m(t)i(of)f(op)q(erat-)-57 1530 y(ing)j(system)h(supp)q (ort.)33 b(In)19 b(Section)h(3)e(w)o(e)h(describ)r(e)h(a)e(set)-57 1575 y(of) 12 b(sync)o(hronization)g(p)q(olicies)g(for)h(the)g(soft)n(w)o(are)g(implemen\ -)-57 1620 y(tation,)k(and)h(sho)o(w)f(that)g(the)i(established)f(techniques) f(for)-57 1666 y(reducing)f(synchronization)f(o)n(v)o(erhead)h(in)g(the)g(pre\ sence)i(of)-57 1711 y(con)o(tention)11 b(are)h(not)g(appropriate)f(for)h(use) g(in)f(non-blo)q(c)o(king)-57 1756 y(algorithms)18 b(on)i(m)m(ultipro)q(cesso\ rs.)38 b(W)l(e)21 b(then)g(describ)r(e)f(a)-57 1802 y(p)q(olicy)d(that)h(w)o (orks)h(w)n(ell)f(in)f(the)i(presence)i(of)c(con)o(tention)-57 1847 y(b)o(y)j (relaxing)f(sligh)n(tly)h(the)g(de\014nition)g(of)f(Compare-And-)-57 1892 y (Sw)o(ap)c(so)h(that)g(it)g(can)g(conserv)o(ativ)n(ely)g(fail.)22 b(This)16 b (has)g(the)-57 1938 y(e\013ect)e(of)e(reducing)h(the)g(frequency)g(of)f(globa\ l)f(sync)o(hroniza-)-57 1983 y(tion,)16 b(whic)o(h)g(is)g(necessary)j(for)d (goo)q(d)g(p)r(erformance)g(in)g(the)-57 2028 y(presence)e(of)c(conten)o(tion\ .)17 b(In)11 b(Section)h(4)f(w)n(e)h(discuss)h(related)-57 2074 y(w)o(ork.)18 b(W)l(e)c(presen)q(t)g(our)g(conclusions)g(in)f(Section)i(5.)-57 2234 y fh (2)56 b(Compare-And-Sw)n(ap)-7 2337 y fg(A)o(t)11 b(the)h(heart)f(of)g(man)m (y)g(non-bloc)o(king)g(concurrent)h(algo-)-57 2383 y(rithms)e(lies)h(an)g(ato\ mic)f(Compare-And-Sw)m(ap)h(instruction.)-57 2428 y(In)16 b(its)g(simplest)e (form,)g(Compare-And-Sw)n(ap)i(tak)n(es)h(three)-57 2473 y(argumen)n(ts:)i (the)c(address)h(of)e(a)g(shared)h(data)f(item,)f(an)h(old)-57 2519 y(v)n(alu\ e)k(of)g(the)h(shared)g(data)f(item,)g(and)h(a)f(new)h(v)m(alue.)32 b(A)-57 2564 y(pro)q(cessor)17 b(reads)f(a)e(shared)i(data)f(v)n(alue,)f(computes)h (a)g(new)-57 2609 y(v)n(alue)c(based)h(on)f(the)i(read)f(\(and)f(no)o(w)g(old\ \))g(v)n(alue,)g(and)g(then)-57 2655 y(tries)k(to)f(sw)o(ap)g(the)g(old)g(v)m (alue)g(with)g(the)g(new)h(v)n(alue.)j(If)c(the)-57 2700 y(current)i(v)n(alue) f(of)h(the)g(shared)h(data)e(item)g(is)g(equal)h(to)g(the)1013 117 y(old)d (v)n(alue,)g(then)i(it)e(is)h(replaced)h(b)o(y)f(the)g(new)h(v)m(alue.)j(If)c (not)1013 162 y(equal,)f(Compare-And-Sw)n(ap)h(returns)i(a)e(failure)f(co)q (de)i(and)1013 207 y(do)q(es)c(not)f(modify)f(the)i(shared)g(data)f(item.)15 b (The)c(failed)e(com-)1013 253 y(pare)14 b(indicates)h(that)f(the)h(old)e(v)n (alue)h(is)f(\\to)q(o)h(old")f(b)q(ecause)1013 298 y(another)h(pro)q(cessor)i (had)e(mo)o(di\014ed)g(the)h(shared)g(data.)j(The)1013 343 y(implication)11 b (is)i(that)h(the)h(new)f(v)m(alue)g(is)g(also)f(in)n(v)n(alid,)f(since)1013 388 y(it)18 b(presumably)f(had)h(b)r(een)h(computed)f(based)h(on)f(the)h(old) 1013 434 y(v)m(alue.)33 b(In)18 b(e\013ect,)j(the)e(failing)e(pro)q(cessor)j (disco)o(v)o(ers)g(con-)1013 479 y(ten)o(tion)d(for)h(shared)g(data)f(after)h (the)g(fact,)h(allo)m(wing)e(it)g(to)1013 524 y(reread)k(the)f(shared)g(data) g(item's)e(v)m(alue)i(and)f(compute)g(a)1013 570 y(new)14 b(v)n(alue.)1204 555 y ff(1)1063 617 y fg(The)f(Compare-And-Sw)n(ap)g(m)n(ust)g(b)r(e)g(b)q(oth)h (atomic)d(and)1013 662 y(non-bloc)o(king.)41 b(It)21 b(m)n(ust)h(also)f(b)q (e)h fj(available)p fg(.)41 b(As)22 b(men-)1013 707 y(tioned)13 b(in)g(the)h (in)n(tro)r(duction,)e(though,)h(few)h(con)o(temporary)1013 753 y(shared)k (memory)d(m)n(ultiprocessors)20 b(supp)q(ort)e(a)f(Compare-)1013 798 y(And-Sw) o(ap)g(instruction.)28 b(In)17 b(the)h(absence)h(of)d(an)h(explicit)1013 843 y (hardw)o(are)22 b(instruction,)j(it)c(m)n(ust)i(b)q(e)f(synthesized)h(using) 1013 889 y(other)c(a)n(v)n(ailable)e(sync)o(hronization)h(primitiv)l(es.)32 b (Unfortu-)1013 934 y(nately)l(,)12 b(a)g(straigh)o(tforw)n(ard)g(sim)n(ulatio\ n)f(of)g(Compare-And-)1013 979 y(Sw)o(ap)18 b(using)g(simpler)f(primitiv)m (es)i(such)f(as)h(T)l(est-And-Set)1013 1025 y(to)f(implem)o(en)m(t)g(a)g(m)m (utually)f(exclusiv)o(e)i(loc)o(k)f(as)g(sho)o(wn)g(in)1013 1070 y(Figure)f (1)h(is)f(not)g(non-blo)q(c)o(king.)28 b(The)18 b(op)q(erating)f(system)1013 1115 y(can)f(preempt)g(a)g(thread)h(within)f(the)h(critical)f(section,)h(de-) 1013 1161 y(la)n(ying)d(other)h(threads)h(for)f(a)f(p)q(ossibly)h(un)o(b)q (ounded)g(length)1013 1206 y(of)e(time.)1013 1282 y fe(int)j(Compare_And)o (_Sw)o(ap\()o(add)o(res)o(s,)e(old_value,)g(new_value\))1154 1318 y(int)j(*ad\ dress;)1154 1354 y(int)g(old_value)o(;)1154 1390 y(int)g(new_value)o(;)1013 1426 y({)1013 1462 y(1)35 b(acquire_lo)o(ck)o(\(\);)49 b(/*)17 b(BEGIN)f(CRIT\ ICAL)f(SECTION)g(*/)1013 1498 y(2)35 b(if)17 b(\(*address)d(==)j(old_value\)) 138 b({)1013 1534 y(3)88 b(*address)14 b(=)k(new_value;)1013 1569 y(4)88 b (release_l)o(ock)o(\(\);)32 b(/*)17 b(END)f(CRITICAL)f(SECTION)g(*/)1013 1605 y(5)88 b(return)15 b(SUCCESS;)1013 1641 y(6)35 b(})17 b(else)34 b({)1013 1677 y(7)88 b(release_l)o(ock)o(\(\);)32 b(/*)17 b(END)f(CRITICAL)f(SECTION)g(*/) 1013 1713 y(8)88 b(return)15 b(FAILURE;)1013 1749 y(9)35 b(})1013 1785 y(}) 1013 1862 y fg(Figure)25 b(1:)39 b fd(Implemen)l(ting)25 b(Compare-And-Sw)m (ap)g(With)1013 1907 y(Lo)q(c)o(ks)1013 2059 y fk(2.1)52 b(Implemen)n(ting)76 b(Compare-And-Sw)o(ap)1132 2104 y(without)18 b(direct)g(hardw)o(are)f(supp)q (ort)1063 2205 y fg(The)27 b(problem)f(with)h(building)f(Compare-And-Sw)m(ap) 1013 2250 y(from)21 b(primitiv)l(es)j(orien)o(ted)g(to)n(w)o(ards)f(blo)q(c)o (king)f(synchro-)1013 2295 y(nization,)16 b(such)h(as)g(T)m(est-And-Set,)i (is)e(caused)h(b)o(y)f(the)g(op-)1013 2341 y(erating)d(system)g(whic)o(h)g (sc)o(hedules)i(threads)f(preemptiv)n(ely)l(.)1013 2386 y(W)l(e)i(can)f(solv) o(e)h(this)f(problem)f(using)h fj(r)n(ol)r(l-out.)25 b fg(With)16 b(roll-) 1013 2431 y(out,)e(a)f(thread)i(can)g(b)q(e)f(preempted)h(within)f(the)g(Comp\ are-)1013 2477 y(And-Sw)o(ap)h(critical)g(section,)g(but)h(the)g(loc)o(k)g (is)f(released)h(at)1013 2518 y 389 2 v 1059 2545 a fc(1)1076 2556 y fi(A)31 b (more)e(general)f(form)g(of)i(Compare-And-Sw)o(ap)d(is)j(the)1013 2592 y(Comp\ are-And-Sw)o(ap-)o(N)13 b(op)q(eration,)f(whic)o(h)j(allo)o(ws)f(N)h(separate) e(lo-)1013 2628 y(cations)i(to)i(b)q(e)g(atomically)d(compared)g(and)i(sw)o (app)q(ed.)31 b(Compare-)1013 2664 y(And-Sw)o(ap-N)11 b(is)g(helpful)f(when)h (implemen)o(tin)o(g)e(complicate)o(d)g(shared)1013 2700 y(data)h(structures)f (suc)o(h)i(as)g(doubly-link)o(e)o(d)e(lists.)p eop %%Page: 3 3 bop -57 117 a fg(the)14 b(time)f(of)g(preemption.)k(If)d(the)g(thread)h(had) e(not)h(y)o(et)g(ex-)-57 162 y(ecuted)19 b(the)g(sw)o(ap,)f(it)g(resumes)g (at)g(the)g(b)q(eginning)f(of)h(the)-57 207 y(sequence,)23 b(otherwise)d(it)f (resumes)h(at)f(the)i(end.)35 b(F)m(or)19 b(ex-)-57 253 y(ample,)e(in)g(the)i (co)q(de)f(in)g(Figure)g(1,)g(a)f(thread)i(preempted)-57 298 y(after)f(line)f (1,)g(but)h(b)q(efore)g(executing)g(either)h(the)f(store)g(at)-57 343 y(line) d(3)h(or)g(the)h(loc)o(k)f(release)h(at)f(line)g(7)f(w)o(ould)g(b)r(e)h(resum\ ed)-57 388 y(at)d(line)f(1.)17 b(If)c(the)g(thread)g(w)o(as)g(preempted)g(aft\ er)g(executing)-57 434 y(line)h(3)g(but)g(b)q(efore)h(releasing)f(the)h(lo)q (c)o(k)f(at)g(line)g(4,)f(it)h(w)o(ould)-57 479 y(b)q(e)20 b(rolled-out)f(to) g(resume)h(at)f(line)g(5.)35 b(W)l(e)20 b(assume)f(here)-57 524 y(that)12 b (single)g(instructions)h(execute)i(atomically)9 b(\(in)n(terrupts)-57 570 y (are)i(precise\),)h(meaning)c(that)i(a)g(thread)h(is)f(nev)o(er)h(preempted) -57 615 y fj(while)f fg(executing)h(an)f(instruction.)18 b(The)11 b(preemptio\ n)f(comes)-57 660 y(en)o(tirely)k(after)g(one)g(instruction)g(and)g(b)q(efore) h(the)f(next.)-7 710 y(Roll-out)8 b(can)i(b)q(e)g(implemen)m(ted)g(with)g(op) q(erating)f(system)-57 756 y(supp)r(ort.)17 b(The)11 b(mac)n(hinery)g(describ) r(ed)h(in)21 b([Anderson)12 b(et)f(al.)-57 801 y(92],)k(for)g(example,)f(whic) o(h)i(giv)n(es)h(con)o(trol)e(bac)o(k)h(to)f(the)i(ap-)-57 846 y(plication)12 b(at)h(a)g(\014xed)h(address)h(immedia)o(tely)c(follo)m(wing)i(the)-57 892 y (preemption,)k(can)h(b)q(e)g(used.)30 b(Co)q(de)18 b(at)f(that)h(address)h (can)-57 937 y(determine)12 b(that)g(the)g(just)g(preempted)h(thread)f(w)o (as)g(execut-)-57 982 y(ing)18 b(a)g(Compare-and-Sw)m(ap)h(and)f(can)h(then)g (p)q(erform)f(the)-57 1028 y(necessary)g(clean)o(up.)24 b(Alternativ)o(ely)l (,)16 b(the)h(k)o(ernel)f(can)g(p)r(er-)-57 1073 y(form)g(the)i(clean)o(up)f (b)o(y)h(disco)o(v)o(ering)f(that)h(the)g(preempted)-57 1118 y(thread)g(w)o (as)f(in)g(a)h(Compare-And-Sw)m(ap)f(sequence.)31 b(This)-57 1164 y(can)13 b (b)q(e)h(done)f(through)g(the)h(use)g(of)e(co)q(de)i(sequences)i(at)c(dis-) -57 1209 y(tinguished)g(addresses,)i(on-the-\015y)e(insp)q(ection)g(of)g(the) g(co)r(de)-57 1254 y(stream,)e(or)f(a)h(designated)g(p)r(er-thread)h(v)m(aria\ ble)e(that)h(is)g(tog-)-57 1300 y(gled)k(on)f(entry)h(and)g(exit)f(from)g(the) h(sequence.)-7 1349 y(With)g(op)q(erating)g(system)h(supp)q(ort)g(for)f(Compa\ re-And-)-57 1395 y(Sw)o(ap,)22 b(the)g(problems)f(normally)e(asso)q(ciated)j (with)f(loc)o(k-)-57 1440 y(based)e(synchronization)e(do)h(not)h(occur.)33 b (Inde\014nite)19 b(con-)-57 1485 y(v)o(o)n(ying)i(is)g(imp)o(ossible)h(b)q (ecause)g(a)f(lo)q(c)o(k)g(held)h(b)o(y)f(a)g(pre-)-57 1531 y(empted)16 b(thr\ ead)g(is)g(released)h(immediately)c(after)j(the)h(pre-)-57 1576 y(emption.)f (Priorit)n(y)c(in)n(v)o(ersion)g(is)g(a)n(v)o(oided)f(b)r(ecause)i(pro)q(ces-) -57 1621 y(sors)j(running)f(lo)n(w)n(er)h(priorit)o(y)e(threads)j(cannot)e (hold)f(lo)q(c)o(ks)-57 1667 y(inde\014nitely)j(after)g(b)q(eing)g(preempted) g(b)o(y)g(higher)g(priorit)n(y)-57 1712 y(threads.)33 b(Deadlo)q(c)o(k)18 b (is)h(a)n(v)o(oided)g(b)q(ecause)h(it)e(is)h(not)f(p)q(os-)-57 1757 y(sible)f (to)h(execute)h(arbitrary)e(co)r(de)h(while)f(holding)f(a)h(lock;)-57 1803 y (lock)12 b(acquisitions)h(cannot)g(b)q(e)g(nested,)i(so)e(there)h(can)f(b)q (e)g(no)-57 1848 y(cycles)i(in)e(the)i(\\w)o(aits-for")d(relationship)i(of)f (pro)q(cessors.)-57 1957 y fk(2.2)52 b(Alternativ)o(es)17 b(and)h(adv)m(an)o (tages)-7 2065 y fg(An)11 b(alternativ)n(e)g(to)g(roll-out)f(is)g fj(r)n(ol)r (l-forwar)l(d.)17 b fg(With)10 b(roll-)-57 2111 y(forw)o(ard,)h(at)g(the)g (p)r(oin)n(t)g(when)h(the)f(preemption)g(o)q(ccurs,)i(the)-57 2156 y(remainin\ g)c(co)q(de)j(in)e(the)i(Compare-And-Sw)m(ap)f(sequence)i(is)-57 2201 y(execu\ ted)21 b(and)d(the)i(loc)o(k)f(is)g(released.)33 b(Roll-forw)m(ard)19 b(has) -57 2247 y(several)i(problems,)g(though,)h(that)f(mak)m(e)h(it)e(less)i(attra\ c-)-57 2292 y(tiv)n(e)c(than)g(roll-out)e(\(whic)o(h)i(only)e(requires)j(that) e(the)i(loc)o(k)-57 2337 y(b)q(e)i(released)g(and)f(the)h(thread's)f(instruct\ ion)h(coun)o(ter)g(b)q(e)-57 2383 y(c)o(hanged\).)d(Roll-forw)l(ard)12 b(requ\ ires)g(executing)g(co)q(de)g(on)f(b)q(e-)-57 2428 y(half)i(of)g(a)g(thread)h (within)f(the)h(context)g(of)f(another)h(thread.)-57 2473 y(If)e(roll-forw)m (ard)h(is)f(b)q(eing)g(handled)g(in)g(the)h(k)o(ernel,)g(then)g(the)-57 2519 y (k)o(ernel)f(m)m(ust)g(b)q(e)f(careful)g(ab)q(out)g(an)o(y)g(memory)e(referen\ ces)14 b(it)-57 2564 y(mak)m(es)g(during)g(the)g(roll-forw)m(ard)g(to)f(ensur\ e)i(that)f(they)g(are)-57 2609 y(within)h(the)i(addressing)f(domain)e(of)h (the)i(stopp)r(ed)f(thread.)-57 2655 y(P)o(age)g(faults)f(are)i(another)f(pro\ blem)f(with)g(roll-forw)n(ard;)h(if)-57 2700 y(the)k(thread)f(stopp)r(ed)g (b)q(ecause)i(of)d(a)h(page)g(fault,)g(then)h(it)1013 117 y(migh)m(t)c(not)h (b)q(e)g(p)r(ossible)f(to)h(p)q(erform)f(the)h(roll-forw)m(ard)g(at)1013 162 y (all)12 b(un)o(til)h(the)i(fault)e(is)h(satis\014ed.)1063 207 y(One)k(adv)m (an)o(tage)g(of)f(a)g(soft)o(w)o(are)h(approac)o(h)f(to)h(atomic-)1013 253 y (it)n(y)j(is)g(that)g(it)f(allo)n(ws)h(for)f(arbitrary)h(generalizations)g (of)1013 298 y(Compare-And-Sw)m(ap.)d(F)m(or)13 b(example,)f(the)i(compare)f (func-)1013 343 y(tion)21 b(can)h(test)h(an)n(y)f(kind)f(of)g(binary)g(relati\ on,)i(not)f(just)1013 388 y(equalit)n(y)l(.)32 b(Additionally)-5 b(,)19 b(sof\ t)o(w)o(are)g(Compare-And-Sw)m(ap)1013 434 y(can)d(op)q(erate)h(on)f(ob)r(jec\ ts)i(that)e(span)g(m)n(ultiple)f(w)o(ords.)25 b(In)1013 479 y(con)o(trast,)d (Compare-And-Sw)n(ap)e(implemen)m(ted)h(in)f(hard-)1013 524 y(w)o(are)e(is)f (generally)g(limited)f(to)h(single)g(w)o(ord)h(op)q(erations.)1965 509 y ff (2)1013 570 y fg(Herlih)o(y)j(describ)r(ed)g(implemen)m(table)g(non-bloc)o (king)f(algo-)1013 615 y(rithms)12 b(in)h(whic)o(h)h(that)g(single)f(w)o(ord) g(w)o(as)h(a)f(p)q(oin)o(ter)h(to)f(the)1013 660 y(actual)19 b(shared)h(data) g([Herlih)n(y)f(90].)34 b(Much)19 b(of)g(the)h(com-)1013 706 y(plexit)n(y)d (and)f(cost)h(of)f(his)h(algorithms,)d(ho)o(w)n(ever,)j(w)o(as)f(due)1013 751 y(to)d(the)g(o)o(v)o(erhead)g(of)g(ha)o(ving)f(to)g(use)i(p)r(oin)n(ters)g (and)f(manage)1013 796 y(memory)-6 b(.)36 b(This)20 b(complexit)m(y)g(disapp) q(ears)g(with)g(a)f(m)n(ulti-)1013 842 y(w)o(ord)14 b(Compare-And-Sw)n(ap)h (\(although)f(the)h(implemen)l(ta-)1013 887 y(tion)e(of)g(roll-out)g(do)q(es) i(b)q(ecome)f(more)e(complicated\).)1013 982 y fk(2.3)52 b(Dra)n(wbac)o(ks)17 b(with)h(the)g(solution)1063 1076 y fg(Roll-out)c(is)i(a)h(practical)f(techni\ que)g(for)g(implemen)m(ting)1013 1121 y(non-bloc)o(king)21 b(concurren)q(t)g (ob)r(jects.)42 b(It)22 b(do)q(es)g(ha)o(v)o(e)f(t)o(w)o(o)1013 1167 y(dra)o (wbac)o(ks,)15 b(though,)g(that)h(could)f(mak)m(e)g(it)g(inappropriate)1013 1212 y(for)c(use)h(in)g(some)e(settings.)18 b(First,)12 b(it)g(assumes)f(that) h(pro)q(ces-)1013 1257 y(sors)i(are)g(non-stop.)k(If)13 b(a)g(pro)q(cessor)i (fails)e(in)g(the)h(middle)e(of)1013 1303 y(a)18 b(synthesized)i(Compare-And-\ Sw)n(ap,)f(then)h(the)f(roll-out)1013 1348 y(w)o(on't)e(o)q(ccur,)j(and)d(the) i(loc)o(k)f(will)f(remain)f(held.)30 b(A)18 b(non-)1013 1393 y(blocking)11 b (ob)r(ject)i(implemen)m(ted)f(with)h(a)f(\\pure")g(Compare-)1013 1439 y(And-S\ w)o(ap)22 b(instruction)g(can)h(b)q(e)g(imm)-5 b(une)23 b(to)f(pro)q(cessor) 1013 1484 y(failure.)16 b(In)10 b(practice,)i(ho)o(w)o(ev)o(er,)f(v)o(ery)g (little)f(else)h(in)f(a)g(m)n(ulti-)1013 1529 y(pro)q(cessor)15 b(actually)d (is,)g(so)h(this)g(should)g(not)g(b)q(e)g(a)g(practical)1013 1575 y(de\014cie\ ncy)n(.)1063 1620 y(P)o(athological)20 b(sc)o(heduling)h(can)i(create)g(a)e (more)g(acute)1013 1665 y(problem)13 b(since)i(roll-out)e(do)q(es)i(not)f(gua\ ran)o(tee)h(that)f(a)g(pro-)1013 1711 y(cessor)23 b(mak)m(es)f(forw)n(ard)g (progress.)41 b(Sp)q(eci\014cally)m(,)22 b(a)f(pro-)1013 1756 y(cessor)e(pree\ mpted)g(at)f(line)f(2)h(in)g(Figure)g(1)g(is)g(bac)o(k)n(ed)h(up)1013 1801 y (to)h(line)f(1.)37 b(If)20 b(the)g(op)q(erating)g(system)g(quan)o(tum)f(is)h (just)1013 1847 y(a)f(few)g(cycles,)i(it)e(w)o(ould)g(b)q(e)g(p)r(ossible)g (for)g(all)f(pro)q(cessors)1013 1892 y(to)g(nev)o(er)h(mak)m(e)f(an)o(y)g(for\ w)n(ard)g(progress.)32 b(This)18 b(situation)1013 1937 y(w)o(ould)h(preven)o (t)i(the)f(implemen)l(tation)g(of)g(w)o(ait-free)g(con-)1013 1983 y(current) 14 b(ob)s(jects,)g(whic)o(h)g(guaran)o(tee)h(that)f(some)f(pro)q(cessor)1013 2028 y(mak)m(es)h(progress)g(within)e(a)h(b)q(ounded)g(n)o(um)n(b)q(er)h(of)e (steps.)19 b(In)1013 2073 y(practice,)f(scheduling)f(quan)n(tums)g(are)g(m)n (uc)o(h)g(longer)g(than)1013 2119 y(a)f(few)g(cycles,)h(so)f(w)o(e)h(do)e(not) h(p)r(erceiv)o(e)h(this)f(to)g(b)q(e)h(a)f(seri-)1013 2164 y(ous)e(practical) g(problem.)j(If)c(it)h(w)o(ere)h(to)f(b)q(ecome)g(one,)f(then)1013 2209 y(rol\ l-forw)m(ard,)f(rather)i(than)e(roll-bac)n(k,)g(w)o(ould)f(b)q(e)i(more)e(ap-) 1013 2255 y(propriate.)1013 2406 y fh(3)56 b(Lo)q(c)n(king)18 b(strategies) 1063 2501 y fg(While)12 b(op)q(erating)i(system)f(supp)r(ort)h(can)f(guaran)o (tee)h(the)1013 2546 y(\\non-bloc)o(kingness")24 b(of)f(a)g(syn)o(thesized)i (Compare-And-)1013 2592 y(Sw)o(ap)17 b(op)q(eration,)i(prop)q(er)g(locking)e (strategies)i(are)f(neces-)1013 2626 y 389 2 v 1059 2652 a fc(2)1076 2664 y fi (The)e(Compare-And-Sw)o(ap-2)d(op)q(eration)g(found)i(on)g(the)h(680x0)1013 2700 y(series)9 b(could)f(b)q(e)i(used)f(to)g(implemen)o(t)e(a)j(64)f(bit)g (Compare-And-Sw)o(ap.)p eop %%Page: 4 4 bop -57 117 a fg(sary)18 b(to)g(ensure)h(go)q(o)q(d)f(p)q(erformance.)30 b (This)17 b(is)h(esp)r(ecially)-57 162 y(true)13 b(during)f(p)q(erio)q(ds)h (of)f(high)f(con)o(tention)g(for)h(shared)h(data)-57 207 y(ob)r(jects.)-7 253 y(In)d(this)g(section)g(w)o(e)h(examine)d(strategies)j(for)f(implemen)l(t-) -57 298 y(ing)17 b(the)i fb(acquire)q 14 2 v 13 w(lock)e fg(op)q(eration)h (from)e(Figure)i(1.)31 b(W)l(e)-57 343 y(b)q(egin)13 b(b)o(y)g(demonstrating) f(that)i(a)f(straigh)n(tforw)o(ard)g(imple-)-57 388 y(men)n(tation)f(based)h (on)f(spinlo)q(c)o(ks)h(p)q(erforms)e(p)r(o)q(orly)g(even)i(in)-57 434 y(the) g(presence)i(of)d(small)f(amoun)m(ts)i(of)f(con)o(ten)o(tion.)17 b(W)l(e)c (then)-57 479 y(sho)o(w)k(that)h(soft)o(w)n(are)g(queueing)g([Anderson)g(90,) e(Graunk)o(e)-57 524 y(&)g(Thakk)m(ar)g(90,)e(Mellor-Crummey)f(&)j(Scott)g (91],)e(a)i(loc)o(k-)-57 570 y(ing)e(strategy)i(designed)f(to)g(p)q(erform)f (w)o(ell)g(in)g(the)i(presence)-57 615 y(of)d(con)o(tention,)g(is)h(inappropr\ iate)f(for)h(use)h(with)e(Compare-)-57 660 y(And-Sw)o(ap.)28 b(W)m(e)17 b(the\ n)h(describ)s(e)g(a)f(strategy)h(that)f(allo)n(ws)-57 706 y(Compare-And-Sw)n (ap)23 b(to)g(conserv)o(ativ)n(ely)g(and)h(inexp)q(en-)-57 751 y(siv)o(ely)16 b(fail.)25 b(Our)18 b(goal)d(is)i(to)g(reduce)h(the)g(frequency)f(with)-57 796 y(whic)o(h)d(Compare-And-Sw)m(ap)g(fails)f(after)h(requiring)f(an)h(ex-)-57 842 y(p)q(ensiv)o(e)e(atomic)d(op)q(eration)j({)f(a)f(pattern)j(that)e(o)q (ccurs)i(com-)-57 887 y(monly)f(during)h(p)q(erio)r(ds)h(of)f(high)g(conten)o (tion.)-57 978 y fk(3.1)52 b(Hardw)n(are)18 b(platforms)-7 1068 y fg(W)l(e)d (use)h(t)o(w)o(o)e(successiv)q(e)h(generations)h(of)e(shared)i(mem-)-57 1113 y (ory)f(m)n(ultiprocessor)i(architectures)g(to)e(ev)n(aluate)h(sync)o(hro-)-57 1159 y(nization)e(strategies)j(for)e(Compare-And-Sw)m(ap.)22 b(Both)16 b(are) -57 1204 y(bus-based,)g(cac)o(he)g(coherent,)f(and)g(use)h(a)f(write-in)n(v)n (alidate)-57 1249 y(coherency)23 b(proto)q(col.)40 b(The)21 b(older)g(generat\ ion)h(is)f(repre-)-57 1295 y(sented)14 b(b)o(y)f(a)g(Sequent)g(Symmetry)e(wit\ h)j(20)e(In)o(tel)i(386)e(pro-)-57 1340 y(cessors)18 b(running)d(at)h(16.67)e (Mhz.)24 b(The)16 b(newer)g(generation)-57 1385 y(is)h(represen)q(ted)g(b)o (y)g(an)g(Omron)f(Luna88k)g(m)m(ultipro)q(cessor)-57 1431 y(w)o(orkstation)21 b(with)g(4)f(Motorola)h(88100)f(pro)q(cessors)j(run-)-57 1476 y(ning)18 b(at) g(25)g(Mhz.)32 b(Neither)19 b(supp)r(orts)f(a)g(Compare-And-)-57 1521 y(Sw)o (ap)h(op)q(eration)h(directly)g(in)f(hardw)o(are.)36 b(The)20 b(Symme-)-57 1567 y(try)g(and)g(the)g(Luna88k)f(eac)o(h)h(ha)o(v)n(e)h(an)e(instruction)h (that)-57 1612 y(allo)m(ws)c(a)g(register)h(and)e(a)h(memory)d(lo)q(cation)i (to)h(b)q(e)g(atom-)-57 1657 y(ically)f(sw)o(app)q(ed.)26 b(This)16 b(is)g (su\016cien)o(t)h(for)f(implem)o(en)m(ting)f(a)-57 1703 y(synchronizing)e(loc\ k)g(op)q(eration.)-7 1748 y(Bus-based)j(shared)h(memory)12 b(m)n(ultiprocesso\ rs)17 b(use)g(the)-57 1793 y(system)h(bus)g(as)f(an)h(arbitration)f(mec)n(han\ ism.)28 b(A)18 b(pro)q(ces-)-57 1839 y(sor)e(p)q(erforms)e(an)i(atomic)d(op)q (eration)i(b)o(y)g(asserting)h(a)f(sp)r(e-)-57 1884 y(cial)e(signal)g(on)h (the)h(bus.)k(This)14 b(prev)o(ents)g(other)h(pro)q(cessors)-57 1929 y(from)e (p)q(erforming)g(atomic)g(op)q(erations)i(un)o(til)f(the)i(signal)d(is)-57 1975 y(remo)n(v)o(ed.)18 b(On)c(systems)h(that)f(use)g(a)g(write-in)o(v)m(ali\ date)f(pro-)-57 2020 y(to)q(col,)e(the)g(sp)r(ecial)g(signal)f(can)h(also)f (in)o(v)m(alidate)h(data.)16 b(In)11 b(all)-57 2065 y(cases,)k(ho)o(w)n(ever,) f(the)g(atomic)e(op)q(eration)i(in)o(v)n(olv)n(es)h(at)f(least)-57 2111 y(one) i(bus)h(transaction.)25 b(On)16 b(systems)g(with)g(write-through)-57 2156 y (caches,)h(or)g(on)f(systems)h(requiring)f(that)h(synchronization)-57 2201 y (op)q(erations)10 b(b)q(e)g(p)r(erformed)f(through)h(to)f(memory)-6 b(,)10 b (the)h(mo)o(d-)-57 2247 y(i\014cation)19 b(can)g(in)o(v)n(olv)n(e)h(an)f(addi\ tional)f(bus)h(and)h(memory)-57 2292 y(transaction.)-7 2337 y(Using)d(t)o(w)o (o)g(generations)h(of)f(m)m(ultipro)q(cessors)i(helps)f(to)-57 2383 y(illustr\ ate)e(that)h(the)g(relativ)n(e)g(cost)g(of)f(p)q(erforming)f(atomic)-57 2428 y (op)q(erations)k(is)g(increasing)g(substantially)e(with)h(pro)r(cessor)-57 2473 y(sp)r(eed.)26 b(This)16 b(is)g(b)q(ecause)i(of)d(the)i(gro)o(wing)e(im) m(balance)i(b)q(e-)-57 2519 y(t)o(w)o(een)c(pro)q(cessor)h(sp)r(eed,)f(bus)g (sp)q(eed,)g(and)f(memory)e(sp)r(eed.)-57 2564 y(The)17 b(In)o(tel)g(386)f (in)g(the)i(Sequent)e(Symmetry)f(tak)o(es)i(ab)q(out)-57 2609 y(t)o(wice)23 b (as)g(long)f(to)g(execute)j(an)d(atomic)f(exchange)i(to)f(a)-57 2655 y(cached) g(memory)e(location)i(as)h(it)e(do)q(es)i(to)f(incremen)o(t)g(a)-57 2700 y (cached)d(memory)d(location.)33 b(In)19 b(con)o(trast,)h(the)f(Motorola)1013 117 y(88100,)g(a)h(RISC-based)f(microprocessor,)k(tak)n(es)e(ab)q(out)e(6) 1013 162 y(times)13 b(longer)i(for)f(the)h(atomic)e(exc)o(hange)i(than)f(for) g(the)i(in-)1013 207 y(cremen)o(t.)i(A)o(t)12 b(the)h(far)f(end)h(of)f(the)h (sp)r(ectrum)f(are)h(mac)n(hines)1013 253 y(lik)n(e)20 b(Stanford's)g(D)o(ASH) h(m)m(ultipro)q(cessor;)j(its)d(pro)q(cessors)1013 298 y(tak)n(e)c(ab)q(out)g (sixt)o(y)f(times)g(longer)g(to)g(synchronize)h(using)f(a)1013 343 y(shared)f (memory)d(location)i(as)g(they)h(do)f(to)g(execute)i(simple)1013 388 y(instru\ ctions)e([Lenoski)g(et)g(al.)j(90].)1063 434 y(Tw)n(o)10 b(p)r(oin)n(ts)h(are) f(implied)e(b)o(y)i(this)h(trend.)18 b(First,)10 b(it)g(is)g(b)r(e-)1013 479 y (coming)e(increasingly)h(imp)o(ortan)o(t)h(to)g(reduce)h(the)g(frequency)1013 524 y(of)f(sync)o(hronization)g(b)q(ecause)i(its)f(cost)g(is)f(no)g(longer)h (negligi-)1013 570 y(ble.)17 b(W)l(e)12 b(will)e(see)j(later)e(in)g(this)h (section)g(that)f(a)h(straigh)n(tfor-)1013 615 y(w)o(ard)18 b(implemen)l(tati\ on)f(of)h(Compare-And-Sw)m(ap)g(can)h(in-)1013 660 y(v)o(olv)n(e)12 b(a)f(lar\ ge)h(n)o(um)m(b)q(er)h(of)e(unnecessary)j(synchronizations.)1013 706 y(Second\ ,)i(b)q(ecause)h(sync)o(hronization)e(op)q(erations)h(run)f(rela-)1013 751 y (tiv)n(ely)i(more)f(slo)n(wly)h(on)f(faster)i(pro)q(cessors,)h(the)e(synchro-) 1013 796 y(nized)d(component)g(of)f(a)h(non-blocking)f(ob)r(ject)i(will)d(ha) o(v)o(e)i(a)1013 842 y(greater)d(e\013ect)g(on)f(p)q(erformance)f(on)h(faster) g(pro)q(cessors)i(than)1013 887 y(on)i(slo)n(w)o(er)h(ones.)20 b(F)l(or)15 b (example,)d(co)q(de)j(that)f(implemen)m(ts)g(a)1013 932 y(non-bloc)o(king)k (data)g(structure)j(e\016cien)o(tly)d(on)g(older)h(gen-)1013 978 y(eration)g (shared)h(memory)d(m)n(ultiprocessors,)22 b(will)c(b)r(e)h(less)1013 1023 y (e\016cien)o(t)e(when)h(executed)h(on)e(a)g(new)o(er)h(mac)n(hine)f(b)q(ecaus\ e)1013 1068 y(of)f(the)h(div)n(ergence)h(in)e(the)h(relativ)o(e)g(p)q(erforma\ nce)f(of)g(syn-)1013 1114 y(c)o(hronizing)d(and)h(non-sync)o(hronizing)g(op)q (erations.)1013 1207 y fk(3.2)52 b(Measuring)70 b(the)h(p)q(erformance)f(of) 1132 1253 y(sync)n(hronization)19 b(alternatives)1063 1347 y fg(W)l(e)11 b (use)g(throughput)f(as)h(the)f(primary)f(measuremen)n(t)h(for)1013 1392 y(ev) n(aluating)i(the)i(p)q(erformance)g(of)f(sync)o(hronization)g(strate-)1013 1437 y(gies)f(for)f(non-blocking)g(concurren)q(t)g(ob)s(jects.)18 b(W)l(e)12 b (compute)1013 1482 y(throughput)f(b)o(y)f(ha)o(ving)g(a)g(\014xed)h(n)o(um)m (b)r(er)g(of)f(pro)q(cessors)j(ex-)1013 1528 y(ecute)f(a)f(lo)q(op)g(that)g (con)o(tains)g(a)g(Compare-And-Sw)n(ap.)17 b(The)1013 1573 y(co)q(de,)h(whic) o(h)g(executes)h(for)e(\014v)o(e)h(seconds)h(\(w)o(all-clo)o(c)o(k\),)f(is) 1013 1618 y(sho)o(wn)f(in)g(Figure)g(2.)28 b(The)17 b(v)n(ariable)f fb(should) r 14 2 v 13 w(stop)g fg(is)h(set)1013 1664 y(b)o(y)e(a)f(sp)r(ecial)h(thread) h(that)f(w)o(ak)n(es)h(when)g(a)e(timer)g(expires.)1013 1709 y(The)h(arra)o (y)g fb(success)e fg(is)i(used)h(to)e(k)o(eep)i(trac)o(k)f(of)f(the)i(n)o(um-) 1013 1754 y(b)q(er)d(of)f(times)g(that)g(each)g(thread)h(successfully)h(up)q (dates)f(the)1013 1800 y(v)m(ariable)e fb(shared)q 14 2 v 13 w(data)f fg(\(w) o(e)i(use)g(a)f(p)q(er-thread)h(data)f(struc-)1013 1845 y(ture)i(for)e(collec\ ting)h(statistics)g(to)g(a)o(v)o(oid)f(extra)h(lo)q(c)o(king)f(and)1013 1890 y (con)o(ten)o(tion\).)25 b(Throughput)17 b(is)f(simply)e(the)j(total)f(n)o(um) m(b)q(er)1013 1936 y(of)d(successes)k(that)d(o)q(ccur)h(during)f(the)g(test.) 1013 2015 y fe(1:)34 b(while)16 b(\(should_sto)o(p)f(==)i(FALSE\))139 b({) 1013 2051 y(2:)87 b(do)35 b({)1013 2087 y(3:)176 b(old_value)14 b(=)j(shared_\ data)o(;)1013 2123 y(4:)176 b(new_value)14 b(=)j(compute_new)o(_va)o(lue)o (\(o)o(ld_)o(val)o(ue\))o(;)1013 2159 y(5:)176 b(res)16 b(=)h(Compare_And)o (_Sw)o(ap\()o(&sh)o(are)o(d_)o(dat)o(a,)1595 2195 y(old_value,)d(new_value\);) 1013 2231 y(6:)87 b(})18 b(while)d(\(res)i(!=)g(SUCCESS\);)1013 2267 y(7:)87 b (success[me])14 b(=)j(success[me])d(+)j(1;)1013 2302 y(8:)34 b(})1074 2380 y fg(Figure)14 b(2:)k fd(Co)q(de)c(loop)g(for)g(measuring)e(throughput)1063 2473 y fg(Clearly)l(,)20 b(if)f(the)i(function)e fb(compute)r 14 2 v 13 w(new)r 14 2 v 13 w(value)g fg(tak)n(es)1013 2519 y(a)c(long)f(time)g(relativ)o(e)h(to)h (the)g(Compare-And-Sw)m(ap,)f(then)1013 2564 y(the)f(impact)f(of)g(the)i(Comp\ are-And-Sw)m(ap)f(on)g(throughput)1013 2609 y(will)g(b)q(e)i(small,)d(since)k (pro)q(cessors)h(will)c(b)q(e)i(executing)g(non-)1013 2655 y(sync)o(hronizing) 21 b(co)q(de)g(most)f(of)g(the)h(time.)38 b(As)21 b(the)g(time)1013 2700 y (to)f(execute)j fb(compute)q 14 2 v 13 w(new)r 14 2 v 13 w(value)d fg(decreas\ es)j(relativ)n(e)e(to)p eop %%Page: 5 5 bop -57 117 a fg(the)10 b(Compare-And-Sw)n(ap,)g(the)g(e\013ects)i(of)d(sync\ hronization)-57 162 y(will)17 b(b)r(egin)h(to)h(dominate.)31 b(F)l(or)19 b (the)g(measuremen)n(ts)h(pre-)-57 207 y(sented)13 b(in)f(this)h(pap)q(er,)g (the)g(function)f fb(compute)q 14 2 v 13 w(new)r 14 2 v 13 w(value)-57 253 y fg(is)i(implemen)l(ted)h(as)g(a)f(lo)q(op)g(that)g(cycles)i(for)e(a)g(\014xed) h(n)o(um-)-57 298 y(b)q(er)21 b(of)e(times,)h(and)f(returns)j(a)d(di\013erent) h(v)n(alue)f(for)h(eac)o(h)-57 343 y(thread.)28 b(An)17 b(\\execution)h(time") d(of)i fa(w)g fg(corresp)s(onds)g(to)g fa(w)-57 388 y fg(passes)e(through)f (the)h(loop.)-7 434 y(Throughput)34 b(measuremen)n(ts)g(with)f(one)h(pro)r (cessor)-57 479 y(rev)o(eal)k(the)g(basic)g(latency)g(of)f(the)h(Compare-And-) -57 524 y(Sw)o(ap)c(op)q(eration)h(when)g(paired)g(with)f(the)h(function)-57 570 y fb(compute)q 14 2 v 13 w(new)r 14 2 v 13 w(value)p fg(.)17 b(Throughput) d(measuremen)n(ts)f(with)-57 615 y(man)m(y)21 b(pro)q(cessors)i(reveal)d(b)r (eha)o(vior)g(in)h(the)g(presence)j(of)-57 660 y(con)o(tention.)-57 754 y fk (3.3)52 b(Simple)18 b(spinlo)r(c)o(ks)-7 848 y fg(W)l(e)32 b(\014rst)h(examin\ e)d(the)j(e\013ect)g(of)e(conten)o(tion)g(on)-57 893 y(throughput)17 b(when)f (the)h fb(acquire)q 14 2 v 14 w(lock)e fg(op)q(eration)h(is)g(im-)-57 939 y (plemen)n(ted)22 b(using)g(spinloc)o(ks.)42 b(Spinlocks,)23 b(in)e(turn,)j (are)-57 984 y(implemen)l(ted)14 b(using)f(an)g(atomic)e(T)m(est-And-Set)j (op)q(eration)-57 1029 y(\(Figure)19 b(3\))f(built)g(from)f(the)i(atomic)e (exchange)h(pro)o(vided)-57 1075 y(b)o(y)f(the)g(pro)q(cessor.)29 b(The)17 b (function)g(T)l(est-And-Set)i(atomi-)-57 1120 y(cally)14 b(sets)h(a)g(memory) c(lo)q(cation)j(and)g(returns)i(its)f(previous)-57 1165 y(v)n(alue.)i(The)d (non-destructive)g(read)g(loop)g(b)q(efore)g(the)g(T)l(est-)-57 1211 y(And-Se\ t)21 b(creates)h(a)e(T)m(est-And-T)m(est-And-Set)i(op)q(eration)-57 1256 y (that)13 b(allo)m(ws)g(a)f(pro)r(cessor)i(to)e(read-spin)h(on)g(a)f(cached)h (v)m(alue)-57 1301 y(of)j(the)h(loc)o(k,)g(rather)g(than)f(generate)i(bus)f (activit)n(y)f(during)-57 1347 y(each)h(pass)h(through)g(the)g(spin)f(lo)q (op.)28 b(This)17 b(is)h(a)f(common)-57 1392 y(spinlock)d(optimization)d([Rud\ olph)h(&)i(Segall)f(84].)-57 1474 y fe(acquire_lo)o(ck\()o(\))-57 1510 y({)-4 1545 y(while)j(\(1\))34 b({)49 1581 y(while)16 b(\()h(lock)f(!=)h(0)g(\))208 1617 y(;)g(/*)g(wait)f(until)g(lock)g(is)h(free)f(*/)49 1653 y(if)h(\(Test_An\ d_)o(Se)o(t\(l)o(ock)o(\))e(==)i(0\))84 1689 y(return;)14 1725 y(})-57 1761 y (})-26 1838 y fg(Figure)d(3:)k fd(Simple)12 b(T)m(est-And-T)m(est-And-Set)j (Spinlo)q(c)o(k)-7 1929 y fg(Throughput)f(for)h(the)g(co)q(de)g(in)f(Figure)g (2)h(on)f(b)q(oth)g(m)n(ul-)-57 1975 y(tipro)q(cessors)19 b(is)e(sho)o(wn)g (in)g(Figure)g(4.)28 b(The)18 b fa(x)p fg(-axis)e(repre-)-57 2020 y(sents)h (the)g(n)o(um)m(b)q(er)g(of)f(pro)q(cessors)j(and)d(the)h fa(y)r fg(-axis)f (repre-)-57 2065 y(sents)j(the)f(total)g(n)o(um)m(b)r(er)h(of)e(successful)k (operations)e(that)-57 2111 y(o)q(ccurred.)g(W)l(e)12 b(ran)g(our)g(exp)q(eri\ men)n(ts)h(out)e(to)h(18)f(of)g(the)h(Se-)-57 2156 y(quen)o(t's)19 b(20)f(pro) q(cessors)j(as)d(that)h(o\013ered)g(a)g(wide)f(enough)-57 2201 y(range)j(with\ out)g(in)n(tro)r(ducing)g(bac)o(kground)g(activit)n(y)g(in)n(to)-57 2247 y (the)e(exp)q(erimen)n(t.)31 b(A)18 b(small)e(amoun)m(t)j(of)e(bac)o(kground)h (ac-)-57 2292 y(tivit)n(y)13 b(is)g(included,)h(though,)e(in)h(the)h(Omron)e (exp)r(erimen)n(ts.)-57 2337 y(Eac)o(h)19 b(graph)f(contains)g(a)g(family)e (of)i(curves,)i(where)g(eac)o(h)-57 2383 y(curve)c(represen)q(ts)h(a)e(di\013\ erent)h(\\compute")f(time,)g(ranging)-57 2428 y(from)c fa(w)h fg(=)g(1)h(to)g fa(w)f fg(=)g(1000.)k(The)e fa(w)e fg(=)g(1)g(case)i(corresp)s(onds)-57 2473 y (to)f(a)g(\\w)n(orst)h(case")g(ratio)e(of)h(compute)f(to)h(synchronization) -57 2519 y(time,)d(whereas)i fa(w)g fg(=)g(1000)e(corresp)s(onds)h(to)g(the)g (case)h(where)-57 2564 y(compute)h(time)g(dominates)f(synchronization)h(time.) -7 2609 y(As)d(exp)r(ected,)i(smaller)d(compute)g(times)g(result)i(in)f(highe\ r)-57 2655 y(throughput)g(b)r(ecause)h(it)f(tak)o(es)h(less)g(time)e(to)h(mak) m(e)g(one)h(pass)-57 2700 y(of)i(the)h(co)r(de)g(in)f(Figure)h(2.)k(Except)c (for)g(the)g fa(w)e fg(=)g(1)i(case)g(on)1013 117 y(the)g(Luna88k,)f(throughp\ ut)h(increases)h(sligh)n(tly)f(as)g(pro)q(ces-)1013 162 y(sors)j(are)g(added) h(and)e(then)i(drops)f(o\013.)26 b(The)17 b(small)e(initial)1013 207 y(rise)k (in)e(throughput)i(is)f(due)g(to)g(the)h(fact)f(that)h(not)f(all)f(of)1013 253 y(the)h(co)r(de)g(in)f(the)i(measured)f(loop)g(is)f(strictly)h(sequen)q(tial.) 1013 298 y(In)c(particular,)f(the)i(co)q(de)g(at)f(lines)g(1,2,3,6,7)d(and)i (8)h(in)g(Fig-)1013 343 y(ure)e(2)f(can)g(execute)i(in)e(parallel.)k(The)d (impro)m(v)o(emen)n(t)f(due)h(to)1013 388 y(this)j(parallelism)e(is)i(o\013se\ t)h(b)o(y)f(the)g(increased)i(o)o(v)n(erhead)g(of)1013 434 y(lock)f(and)g(dat\ a)g(con)o(tention)g(that)g(comes)g(with)h(more)e(pro-)1013 479 y(cessors.)37 b (As)20 b(a)g(result,)h(the)g(curv)o(es)g(for)e(smaller)f fa(w)i fg(turn)1013 524 y(do)n(wn)15 b(more)f(quic)o(kly)g(than)h(those)h(for)e(larger)h fa(w)q fg (.)21 b(A)o(t)15 b(small)1013 570 y fa(w)q fg(,)20 b(loc)o(k)f(and)g(data)g (con)o(ten)o(tion)g(are)h(high,)f(therefore)h(the)1013 615 y(b)q(ene\014t)e (due)f(to)f(the)h(parallelism)d(in)i(the)h(loop)f(disapp)q(ears)1013 660 y (quic)o(kly)e(as)h(pro)r(cessors)i(are)e(added)h(\(and)f(do)q(esn't)h(exist)f (at)1013 706 y(all)h(on)g(the)i(Luna88k)e(when)i fa(w)f fg(=)g(1\).)28 b(When) 17 b fa(w)h fg(is)f(large,)1013 751 y(ho)n(w)o(ever,)d(lock)g(and)g(data)f (conten)o(tion)h(are)g(reduced)i(so)e(the)1013 796 y(b)q(ene\014cial)i(e\013e\ ct)h(of)e(the)h(lo)q(op's)f(parallelism)e(tak)o(es)j(longer)1013 842 y(to)e (undermine.)1063 898 y(The)c(graphs)h(also)e(illustrate)h(that)h(throughput)f (drops)h(o\013)1013 944 y(more)f(rapidly)f(on)i(the)g(Luna88k's)f(faster)i (pro)q(cessors)h(where)1013 989 y(the)i(cost)g(of)f(sync)o(hronization)g(is)g (m)n(uc)o(h)g(higher)h(relativ)n(e)g(to)1013 1034 y(the)h(Symmetry)-6 b(.)22 b (F)l(or)15 b(example,)f(the)i fa(w)e fg(=)g(1)h(case)h(sho)o(ws)f(a)1013 1080 y(factor)e(of)g(3)g(reduction)h(in)f(throughput)h(at)f(four)g(pro)q(cessors) 1013 1125 y(on)d(the)i(Luna88k,)e(whereas)i(the)g(reduction)f(is)g(only)f(a)h (factor)1013 1170 y(of)i(1.3)g(on)h(the)g(Symmetry)-5 b(.)1063 1227 y(A)o(t) 19 b(least)h(t)o(w)o(o)f(e\013ects)j(are)e(resp)r(onsible)g(for)f(the)h(rapid) 1013 1272 y(drop)q(o\013)d(in)f(throughput.)26 b(First,)18 b(there)g(is)e(the) h(commonly)1013 1318 y(observ)o(ed)d(degradation)f(that)h(o)q(ccurs)h(when)e (man)n(y)g(threads)1013 1363 y(try)j(to)f(sim)m(ultaneously)h(sync)o(hronize.) 24 b(Although)15 b(threads)1013 1408 y(spin)o(w)o(ait)f(on)i(a)f(cac)o(hed)h (v)n(alue)f(of)g(the)h(lock,)f(the)h(release)h(of)1013 1454 y(the)g(loc)o(k)f (is)g(broadcast)h(to)f(all)f(w)o(aiting)g(pro)q(cessors.)27 b(Eac)o(h)1013 1499 y(then)20 b(tries)g(to)f(reacquire)i(the)f(loc)o(k.)35 b(Although)19 b (one)g(will)1013 1544 y(succeed,)c(the)f(others)h(will)d(execute)k(a)d(synchr\ onizing)g(T)l(est-)1013 1590 y(And-Set,)h(placing)f(a)h(load)e(on)i(the)h(bus\ .)1063 1646 y(A)h(second)i(reason)g(for)e(the)h(slo)o(wdo)n(wn)g(is)g(that)g (a)f(failed)1013 1691 y(compare)23 b(incurs)h(a)g(sync)o(hronization)f(cost)i (that)f(a\013ects)1013 1737 y(all)17 b(pro)q(cessors,)k(but)e(that)f(con)o (tributes)i(nothing)d(to)i(total)1013 1782 y(throughput.)29 b(W)m(e)18 b(can) f(factor)h(out)g(sync)o(hronization)f(and)1013 1827 y(failure)i(e\013ects)j (and)e(just)h(look)f(at)g(b)q(eha)o(vior)g(due)g(to)g(the)1013 1873 y(locking) c(proto)r(col)h(b)o(y)g(modifying)f(the)i(lo)q(op)f(so)h(that)f(each)1013 1918 y(thread)11 b(do)q(es)g(a)f(Compare-And-Sw)m(ap)g(on)g(a)g(di\013erent)h(mem-) 1013 1963 y(ory)16 b(lo)q(cation.)26 b(In)17 b(this)g(w)o(a)n(y)m(,)g(ev)o (ery)h(Compare-And-Sw)m(ap)1013 2009 y(succeeds)13 b(and)e(there)h(is)f(no)g (bus)g(con)o(tention)f(due)h(to)g(k)o(eeping)1013 2054 y(shared)h(data)g(cons\ istent.)17 b(Threads)c(in)n(teract)g(only)e(b)q(ecause)1013 2099 y(they)h(use) h(the)f(same)f(lo)q(c)o(k)h(to)g(gain)e(access)k(to)e(the)g(Compare-)1013 2145 y(And-Sw)o(ap)h(sequence.)1063 2201 y(The)j(resulting)h(curv)o(es)g(are)g(sho) o(wn)f(in)g(Figure)g(5.)25 b(\(The)1013 2247 y(scale)10 b(of)g(the)g(y-axis)g (is)f(di\013erent)h(than)g(than)g(in)g(the)h(previous)1013 2292 y(\014gure)j (for)g(reasons)h(of)e(resolution.\))18 b(Because)e(only)d(part)i(of)1013 2337 y(the)i(loop)g(is)f(sequential,)g(increasing)h(the)g(n)o(um)n(b)q(er)g(of)f (pro-)1013 2383 y(cessors)c(also)e(increases)j(throughput.)k(Ev)o(en)o(tually) l(,)11 b(though,)1013 2428 y(the)i(sequential)e(Compare-And-Sw)n(ap)h(limits) e(throughput.)1013 2473 y(F)l(or)18 b(smaller)e(compute)h(times)f(the)i(limit) d(is)j(reac)o(hed)g(with)1013 2519 y(few)o(er)i(pro)q(cessors)i(b)q(ecause)f (most)e(of)g(the)h(co)q(de)g(is)g(serial.)1013 2564 y(Throughput)g(then)g(dro\ ps)g(o\013)f(b)r(ecause)i(of)e(the)h(bus)g(con-)1013 2609 y(ten)o(tion)d(that) f(arises)i(when)f(man)m(y)g(pro)q(cessors)i(sim)m(ultane-)1013 2655 y(ously) 12 b(compete)h(for)e(the)i(same)e(spinlo)q(c)o(k.)17 b(There)d(is)e(a)f(\015u\ rry)1013 2700 y(of)e(bus)g(activit)o(y)g(when)h(the)g(spinlock)f(is)g(release\ d,)i(e\013ectively)p eop %%Page: 6 6 bop -32 75 a 14208860 11840716 3289088 3289088 50651955 36443095 startTexFig %%BeginDocument: Plots/Family.cas/plot.sequent.ps /gnudict 40 dict def gnudict begin /Color false def /gnulinewidth 5.000 def /vshift -60 def /dl {10 mul} def /hpt 31.5 def /vpt 31.5 def /vpt2 vpt 2 mul def /hpt2 hpt 2 mul def /Lshow { currentpoint stroke moveto 0 vshift rmoveto show } def /Rshow { currentpoint stroke moveto dup stringwidth pop neg vshift rmoveto show } def /Cshow { currentpoint stroke moveto dup stringwidth pop -2 div vshift rmoveto show } def /DL { Color {setrgbcolor [] 0 setdash pop} {pop pop pop 0 setdash} ifelse } def /BL { stroke gnulinewidth 2 mul setlinewidth } def /AL { stroke gnulinewidth 2 div setlinewidth } def /PL { stroke gnulinewidth setlinewidth } def /LTb { BL [] 0 0 0 DL } def /LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def /LT0 { PL [] 0 1 0 DL } def /LT1 { PL [4 dl 2 dl] 0 0 1 DL } def /LT2 { PL [2 dl 3 dl] 1 0 0 DL } def /LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def /LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def /LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def /LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def /LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def /LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def /M {moveto} def /L {lineto} def /P { stroke [] 0 setdash currentlinewidth 2 div sub moveto 0 currentlinewidth rlineto stroke } def /D { stroke [] 0 setdash 2 copy vpt add moveto hpt neg vpt neg rlineto hpt vpt neg rlineto hpt vpt rlineto hpt neg vpt rlineto closepath stroke P } def /A { stroke [] 0 setdash vpt sub moveto 0 vpt2 rlineto currentpoint stroke moveto hpt neg vpt neg rmoveto hpt2 0 rlineto stroke } def /B { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add moveto 0 vpt2 neg rlineto hpt2 0 rlineto 0 vpt2 rlineto hpt2 neg 0 rlineto closepath stroke P } def /C { stroke [] 0 setdash exch hpt sub exch vpt add moveto hpt2 vpt2 neg rlineto currentpoint stroke moveto hpt2 neg 0 rmoveto hpt2 vpt2 rlineto stroke } def /T { stroke [] 0 setdash 2 copy vpt 1.12 mul add moveto hpt neg vpt -1.62 mul rlineto hpt 2 mul 0 rlineto hpt neg vpt 1.62 mul rlineto closepath stroke P } def /S { 2 copy A C} def end gnudict begin gsave 50 50 translate 0.100 0.100 scale 0 setgray /Courier findfont 180 scalefont setfont newpath LTa 1296 631 M 6921 631 L LTb 1296 631 M 1359 631 L 6921 631 M 6858 631 L 1188 631 M (0) Rshow 1296 1291 M 1359 1291 L 6921 1291 M 6858 1291 L 1188 1291 M (50000) Rshow 1296 1950 M 1359 1950 L 6921 1950 M 6858 1950 L 1188 1950 M (100000) Rshow 1296 2610 M 1359 2610 L 6921 2610 M 6858 2610 L 1188 2610 M (150000) Rshow 1296 3270 M 1359 3270 L 6921 3270 M 6858 3270 L 1188 3270 M (200000) Rshow 1296 3929 M 1359 3929 L 6921 3929 M 6858 3929 L 1188 3929 M (250000) Rshow 1296 4589 M 1359 4589 L 6921 4589 M 6858 4589 L 1188 4589 M (300000) Rshow 1627 631 M 1627 694 L 1627 4589 M 1627 4526 L 1627 451 M (2) Cshow 2289 631 M 2289 694 L 2289 4589 M 2289 4526 L 2289 451 M (4) Cshow 2950 631 M 2950 694 L 2950 4589 M 2950 4526 L 2950 451 M (6) Cshow 3612 631 M 3612 694 L 3612 4589 M 3612 4526 L 3612 451 M (8) Cshow 4274 631 M 4274 694 L 4274 4589 M 4274 4526 L 4274 451 M (10) Cshow 4936 631 M 4936 694 L 4936 4589 M 4936 4526 L 4936 451 M (12) Cshow 5597 631 M 5597 694 L 5597 4589 M 5597 4526 L 5597 451 M (14) Cshow 6259 631 M 6259 694 L 6259 4589 M 6259 4526 L 6259 451 M (16) Cshow 6921 631 M 6921 694 L 6921 4589 M 6921 4526 L 6921 451 M (18) Cshow LTb 1296 631 M 6921 631 L 6921 4589 L 1296 4589 L 1296 631 L 180 2610 M currentpoint gsave translate 90 rotate 0 0 moveto (Five second Throughput) Cshow grestore 4108 271 M (Number of processors) Cshow 4108 4769 M (Compare-And-Swap Symmetry) Cshow LT0 LT0 6318 4346 M (1) Rshow 6426 4346 M 6750 4346 L 1296 4226 M 1296 4226 L 1627 4248 L 1958 3628 L 2289 3348 L 2620 2953 L 2950 2001 L 3281 1676 L 3612 1513 L 3943 1347 L 4274 1289 L 4605 1215 L 4936 1149 L 5267 1092 L 5597 1050 L 5928 1002 L 6259 966 L 6590 940 L 6921 903 L 6534 4346 D 1296 4226 D 1627 4248 D 1958 3628 D 2289 3348 D 2620 2953 D 2950 2001 D 3281 1676 D 3612 1513 D 3943 1347 D 4274 1289 D 4605 1215 D 4936 1149 D 5267 1092 D 5597 1050 D 5928 1002 D 6259 966 D 6590 940 D 6921 903 D LT1 6318 4166 M (5) Rshow 6426 4166 M 6750 4166 L 1296 3384 M 1296 3384 L 1627 3595 L 1958 3172 L 2289 2806 L 2620 2166 L 2950 2256 L 3281 2367 L 3612 1671 L 3943 1610 L 4274 1383 L 4605 1247 L 4936 1188 L 5267 1109 L 5597 1043 L 5928 1000 L 6259 961 L 6590 940 L 6921 905 L 6534 4166 A 1296 3384 A 1627 3595 A 1958 3172 A 2289 2806 A 2620 2166 A 2950 2256 A 3281 2367 A 3612 1671 A 3943 1610 A 4274 1383 A 4605 1247 A 4936 1188 A 5267 1109 A 5597 1043 A 5928 1000 A 6259 961 A 6590 940 A 6921 905 A LT2 6318 3986 M (10) Rshow 6426 3986 M 6750 3986 L 1296 2809 M 1296 2809 L 1627 3076 L 1958 3252 L 2289 2588 L 2620 2381 L 2950 1860 L 3281 1705 L 3612 1540 L 3943 1490 L 4274 1461 L 4605 1333 L 4936 1206 L 5267 1122 L 5597 1047 L 5928 1004 L 6259 967 L 6590 944 L 6921 907 L 6534 3986 B 1296 2809 B 1627 3076 B 1958 3252 B 2289 2588 B 2620 2381 B 2950 1860 B 3281 1705 B 3612 1540 B 3943 1490 B 4274 1461 B 4605 1333 B 4936 1206 B 5267 1122 B 5597 1047 B 5928 1004 B 6259 967 B 6590 944 B 6921 907 B LT3 6318 3806 M (50) Rshow 6426 3806 M 6750 3806 L 1296 1445 M 1296 1445 L 1627 1642 L 1958 1775 L 2289 1853 L 2620 1906 L 2950 1937 L 3281 1940 L 3612 1707 L 3943 1600 L 4274 1429 L 4605 1354 L 4936 1164 L 5267 1103 L 5597 1040 L 5928 1004 L 6259 962 L 6590 953 L 6921 930 L 6534 3806 C 1296 1445 C 1627 1642 C 1958 1775 C 2289 1853 C 2620 1906 C 2950 1937 C 3281 1940 C 3612 1707 C 3943 1600 C 4274 1429 C 4605 1354 C 4936 1164 C 5267 1103 C 5597 1040 C 5928 1004 C 6259 962 C 6590 953 C 6921 930 C LT4 6318 3626 M (100) Rshow 6426 3626 M 6750 3626 L 1296 1087 M 1296 1087 L 1627 1217 L 1958 1290 L 2289 1336 L 2620 1365 L 2950 1386 L 3281 1403 L 3612 1412 L 3943 1423 L 4274 1430 L 4605 1430 L 4936 1426 L 5267 1326 L 5597 1089 L 5928 999 L 6259 961 L 6590 928 L 6921 910 L 6534 3626 T 1296 1087 T 1627 1217 T 1958 1290 T 2289 1336 T 2620 1365 T 2950 1386 T 3281 1403 T 3612 1412 T 3943 1423 T 4274 1430 T 4605 1430 T 4936 1426 T 5267 1326 T 5597 1089 T 5928 999 T 6259 961 T 6590 928 T 6921 910 T LT5 6318 3446 M (1000) Rshow 6426 3446 M 6750 3446 L 1296 682 M 1296 682 L 1627 699 L 1958 707 L 2289 712 L 2620 714 L 2950 716 L 3281 720 L 3612 721 L 3943 721 L 4274 721 L 4605 721 L 4936 721 L 5267 722 L 5597 723 L 5928 724 L 6259 723 L 6590 723 L 6921 725 L 6534 3446 S 1296 682 S 1627 699 S 1958 707 S 2289 712 S 2620 714 S 2950 716 S 3281 720 S 3612 721 S 3943 721 S 4274 721 S 4605 721 S 4936 721 S 5267 722 S 5597 723 S 5928 724 S 6259 723 S 6590 723 S 6921 725 S stroke grestore end showpage %%EndDocument endTexFig 950 w 14208860 11840716 3289088 3289088 50651955 36443095 startTexFig %%BeginDocument: Plots/Family.cas/plot.omron.ps /gnudict 40 dict def gnudict begin /Color false def /gnulinewidth 5.000 def /vshift -60 def /dl {10 mul} def /hpt 31.5 def /vpt 31.5 def /vpt2 vpt 2 mul def /hpt2 hpt 2 mul def /Lshow { currentpoint stroke moveto 0 vshift rmoveto show } def /Rshow { currentpoint stroke moveto dup stringwidth pop neg vshift rmoveto show } def /Cshow { currentpoint stroke moveto dup stringwidth pop -2 div vshift rmoveto show } def /DL { Color {setrgbcolor [] 0 setdash pop} {pop pop pop 0 setdash} ifelse } def /BL { stroke gnulinewidth 2 mul setlinewidth } def /AL { stroke gnulinewidth 2 div setlinewidth } def /PL { stroke gnulinewidth setlinewidth } def /LTb { BL [] 0 0 0 DL } def /LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def /LT0 { PL [] 0 1 0 DL } def /LT1 { PL [4 dl 2 dl] 0 0 1 DL } def /LT2 { PL [2 dl 3 dl] 1 0 0 DL } def /LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def /LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def /LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def /LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def /LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def /LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def /M {moveto} def /L {lineto} def /P { stroke [] 0 setdash currentlinewidth 2 div sub moveto 0 currentlinewidth rlineto stroke } def /D { stroke [] 0 setdash 2 copy vpt add moveto hpt neg vpt neg rlineto hpt vpt neg rlineto hpt vpt rlineto hpt neg vpt rlineto closepath stroke P } def /A { stroke [] 0 setdash vpt sub moveto 0 vpt2 rlineto currentpoint stroke moveto hpt neg vpt neg rmoveto hpt2 0 rlineto stroke } def /B { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add moveto 0 vpt2 neg rlineto hpt2 0 rlineto 0 vpt2 rlineto hpt2 neg 0 rlineto closepath stroke P } def /C { stroke [] 0 setdash exch hpt sub exch vpt add moveto hpt2 vpt2 neg rlineto currentpoint stroke moveto hpt2 neg 0 rmoveto hpt2 vpt2 rlineto stroke } def /T { stroke [] 0 setdash 2 copy vpt 1.12 mul add moveto hpt neg vpt -1.62 mul rlineto hpt 2 mul 0 rlineto hpt neg vpt 1.62 mul rlineto closepath stroke P } def /S { 2 copy A C} def end gnudict begin gsave 50 50 translate 0.100 0.100 scale 0 setgray /Courier findfont 180 scalefont setfont newpath LTa 1296 631 M 6921 631 L LTb 1296 631 M 1359 631 L 6921 631 M 6858 631 L 1188 631 M (0) Rshow 1296 1027 M 1359 1027 L 6921 1027 M 6858 1027 L 1188 1027 M (100000) Rshow 1296 1423 M 1359 1423 L 6921 1423 M 6858 1423 L 1188 1423 M (200000) Rshow 1296 1818 M 1359 1818 L 6921 1818 M 6858 1818 L 1188 1818 M (300000) Rshow 1296 2214 M 1359 2214 L 6921 2214 M 6858 2214 L 1188 2214 M (400000) Rshow 1296 2610 M 1359 2610 L 6921 2610 M 6858 2610 L 1188 2610 M (500000) Rshow 1296 3006 M 1359 3006 L 6921 3006 M 6858 3006 L 1188 3006 M (600000) Rshow 1296 3402 M 1359 3402 L 6921 3402 M 6858 3402 L 1188 3402 M (700000) Rshow 1296 3797 M 1359 3797 L 6921 3797 M 6858 3797 L 1188 3797 M (800000) Rshow 1296 4193 M 1359 4193 L 6921 4193 M 6858 4193 L 1188 4193 M (900000) Rshow 1296 4589 M 1359 4589 L 6921 4589 M 6858 4589 L 1188 4589 M (1e+06) Rshow 1296 631 M 1296 694 L 1296 4589 M 1296 4526 L 1296 451 M (1) Cshow 2234 631 M 2234 694 L 2234 4589 M 2234 4526 L 2234 451 M % 3171 631 M 3171 694 L 3171 4589 M 3171 4526 L 3171 451 M (2) Cshow 4109 631 M 4109 694 L 4109 4589 M 4109 4526 L 4109 451 M % 5046 631 M 5046 694 L 5046 4589 M 5046 4526 L 5046 451 M (3) Cshow 5984 631 M 5984 694 L 5984 4589 M 5984 4526 L 5984 451 M % 6921 631 M 6921 694 L 6921 4589 M 6921 4526 L 6921 451 M (4) Cshow LTb 1296 631 M 6921 631 L 6921 4589 L 1296 4589 L 1296 631 L 180 2610 M currentpoint gsave translate 90 rotate 0 0 moveto (Five second Throughput) Cshow grestore 4108 271 M (Number of processors) Cshow 4108 4769 M (Compare-And-Swap Luna88k) Cshow LT0 LT0 6318 4346 M (1) Rshow 6426 4346 M 6750 4346 L 1296 4587 M 1296 4587 L 3171 4105 L 5046 3305 L 6921 1941 L 6534 4346 D 1296 4587 D 3171 4105 D 5046 3305 D 6921 1941 D LT1 6318 4166 M (5) Rshow 6426 4166 M 6750 4166 L 1296 3772 M 1296 3772 L 3171 3860 L 5046 2711 L 6921 2380 L 6534 4166 A 1296 3772 A 3171 3860 A 5046 2711 A 6921 2380 A LT2 6318 3986 M (10) Rshow 6426 3986 M 6750 3986 L 1296 3133 M 1296 3133 L 3171 3339 L 5046 3241 L 6921 2560 L 6534 3986 B 1296 3133 B 3171 3339 B 5046 3241 B 6921 2560 B LT3 6318 3806 M (50) Rshow 6426 3806 M 6750 3806 L 1296 1581 M 1296 1581 L 3171 1796 L 5046 1902 L 6921 1946 L 6534 3806 C 1296 1581 C 3171 1796 C 5046 1902 C 6921 1946 C LT4 6318 3626 M (100) Rshow 6426 3626 M 6750 3626 L 1296 1166 M 1296 1166 L 3171 1312 L 5046 1383 L 6921 1418 L 6534 3626 T 1296 1166 T 3171 1312 T 5046 1383 T 6921 1418 T LT5 6318 3446 M (1000) Rshow 6426 3446 M 6750 3446 L 1296 691 M 1296 691 L 3171 711 L 5046 720 L 6921 726 L 6534 3446 S 1296 691 S 3171 711 S 5046 720 S 6921 726 S stroke grestore end showpage %%EndDocument endTexFig -57 899 a fg(Figure)12 b(4:)17 b fd(Compare-And-Sw)n(ap)12 b(usin\ g)f(spinlo)q(c)o(ks.)18 b(The)12 b(n)o(um)n(b)q(ers)h(in)f(the)g(legend)h(re\ \015ect)h(runs)e(using)g(di\013erent)g(v)n(alues)g(of)g fa(w)p fd(.)-57 945 y (The)i(graphs)g(for)g(b)q(oth)g(system)f(con\014gurations)h(clearly)g(sho)o (w)f(that)h(throughput)g(drops)h(o\013)e(signi\014can)o(tly)g(under)i(con)o (tention)-57 990 y(when)f(the)h(compute)e(time)g(is)h(small.)-57 1123 y fg (slo)o(wing)19 b(do)o(wn)i(all)e(pro)q(cessors.)40 b(The)21 b(b)q(eha)o(vior) f(demon-)-57 1168 y(strated)d(in)f(Figure)g(5)g(closely)g(matc)m(hes)h(that)f (observed)g(b)o(y)-57 1213 y(Anderson,)f(and)f(Graunk)o(e)h(and)f(Thakk)m(ar) g(in)g(their)h(studies)-57 1259 y(of)e(spinlo)q(c)o(k)h(p)q(erformance.)-57 1364 y fk(3.4)52 b(Con)o(ten)n(tion-toleran)q(t)13 b(lo)r(c)o(king)g(with)g (soft-)62 1409 y(w)n(are)18 b(queueing)-7 1515 y fg(The)c(degradation)f(in)g (throughput)g(sho)o(wn)h(in)f(Figures)g(4)-57 1560 y(and)34 b(5)16 b(suggests) j(that)e(a)f(lo)q(c)o(king)g(strategy)i(that)f(reduces)-57 1605 y(bus)d(conte\ n)o(tion)g(due)g(to)g(synchronization)f(migh)m(t)h(impro)m(v)o(e)-57 1651 y (p)q(erformance.)j(In)c(this)f(subsection,)h(w)o(e)g(examine)d(b)r(eha)o(vior) -57 1696 y(when)h(Compare-And-Sw)n(ap)g(is)f(implemen)m(ted)h(with)f fj(queue\ -)-57 1741 y(lo)n(cks)18 b fg([Anderson)g(90,)f(Graunk)o(e)h(&)h(Thakk)m(ar)f (90,)f(Mellor-)-57 1787 y(Crummey)12 b(&)i(Scott)g(91].)-7 1835 y(Queuelo)r (c)o(ks)i(ha)o(v)n(e)h(b)q(een)g(sho)o(wn)f(to)f(b)q(e)i(e\013ective)f(at)g (re-)-57 1881 y(ducing)g(bus)h(con)o(ten)o(tion,)f(and)g(at)g(main)m(taining) e(near)j(con-)-57 1926 y(stan)o(t)g(throughput)g(out)g(to)g(large)f(n)o(um)n (b)q(ers)i(of)e(pro)q(cessors)-57 1971 y(for)10 b(algorithms)e(that)j(use)g (traditional)e(lock-based)i(sync)o(hro-)-57 2017 y(nization.)30 b(With)18 b (queuelo)q(cks,)h(eac)o(h)g(pro)q(cessor)h(w)n(aits)e(for)-57 2062 y(one)h (other)h(pro)q(cessor)h(to)d(release)i(the)g(lock,)f(rather)h(than)-57 2107 y (w)o(aiting)11 b(for)h(the)h(lo)q(c)o(k)f(itself.)18 b(F)l(or)13 b(example,)e (the)i(\014rst)g(w)o(ait-)-57 2153 y(ing)g(pro)q(cessor)i(w)o(ould)e(w)o(ait) g(for)g(the)h(actual)f(lo)q(c)o(k)h(holder)f(to)-57 2198 y(release)20 b(the)g (lo)q(c)o(k,)g(while)e(the)i(second)h(w)n(aiting)d(pro)r(cessor)-57 2243 y (w)o(ould)f(w)n(ait)g(for)g(the)h(\014rst)g(w)o(aiting)e(pro)r(cessor)j(to)e (acquire)-57 2289 y(and)g(then)g(release)i(the)e(lo)q(c)o(k.)27 b(This)17 b (relationship)g(p)q(ermits)-57 2334 y(each)c(pro)q(cessor)j(to)d(p)q(oll)g (a)g(di\013erent)h(memory)d(location.)18 b(A)-57 2379 y(pro)q(cessor)12 b(rel\ eases)f(a)e(lo)q(c)o(k)g(b)o(y)h(dep)r(ositing)e(a)i(new)g(v)m(alue)g(in)n (to)-57 2425 y(the)j(memory)d(lo)q(cation)i(asso)q(ciated)h(with)f(the)i(next) f(w)n(aiting)-57 2470 y(thread.)18 b(Queuelo)q(cks)10 b(reduce)j(bus)e(con)o (ten)o(tion)f(b)q(ecause)j(the)-57 2515 y(n)o(um)m(b)r(er)e(of)f(synchronizat\ ion)g(op)q(erations)h(equals)f(the)i(n)o(um-)-57 2561 y(b)q(er)g(of)f(success\ ful)h(synchronizing)f(bus)g(op)q(erations,)h(ev)o(en)g(in)-57 2606 y(the)i (presence)j(of)c(high)g(lo)q(c)o(k)h(con)o(tention.)-7 2655 y(Figure)21 b(6)g (sho)o(ws)h(throughput)g(when)f(queuelo)r(c)o(ks)h(are)-57 2700 y(used)e(to)g (implem)o(en)m(t)f(the)h fb(acquire)q 14 2 v 13 w(lock)f fg(function)g(from) 1013 1123 y(Figure)e(2.)29 b(By)18 b(comparing)e(the)i(curves)g(to)f(those)i (in)e(Fig-)1013 1168 y(ure)g(4,)f(several)g(things)h(b)q(ecome)f(apparen)o (t.)26 b(First,)18 b(at)e(lo)n(w)1013 1213 y(con)o(ten)o(tion,)11 b(queuelo)q (c)o(ks)g(ha)o(v)o(e)g(lo)n(w)o(er)g(throughput)g(b)q(ecause)1013 1259 y(they) 16 b(are)h(more)e(complicated)g(to)h(implem)o(en)m(t)g(\(our)g(imple-)1013 1304 y(men)n(tation)9 b(follo)m(ws)i(that)f(of)g(Graunk)o(e)g(and)g(Thakk)n (ar\).)17 b(Rel-)1013 1349 y(ativ)n(e)f(to)g(the)g(spinlo)q(c)o(k)f(solution) g(with)h(one)g(pro)q(cessor,)h(for)1013 1395 y(example,)i(throughput)g(with)h (queuelo)q(c)o(ks)g(is)f(reduced)i(b)o(y)1013 1440 y(factor)d(of)g(2.)32 b (More)19 b(imp)o(ortan)o(tly)l(,)g(ho)o(w)n(ever,)g(the)h(p)q(erfor-)1013 1485 y(mance)9 b(pro\014le)h(for)g(queuelo)q(cks)g(is)g(not)g(m)m(uch)g(di\013eren\ t)g(than)1013 1531 y(for)16 b(spinloc)o(ks.)25 b(There)17 b(is)f(a)g(sligh)n (t)g(rise)h(in)f(throughput)g(at)1013 1576 y(small)9 b(n)o(um)m(b)q(ers)j(of) f(pro)q(cessors,)i(and)e(then)h(a)f(drop)q(o\013)g(as)g(the)1013 1621 y(n)o (um)m(b)q(er)i(of)f(pro)q(cessors)j(increases.)k(This)12 b(b)q(eha)o(vior)g (con)o(tra-)1013 1667 y(dicts)17 b(that)f(seen)i(when)f(queuelo)r(c)o(ks)g (are)g(used)g(to)g(manage)1013 1712 y(critical)c(sections)i(for)f(lock-based) g(concurrent)g(ob)s(jects.)1063 1775 y(The)k(drop)q(o\013)f(in)g(throughput)h (is)f fj(not)h fg(due)g(to)f(synchro-)1013 1821 y(nization)12 b(o)o(v)n(erhea\ d,)i(whic)o(h)f(queuelo)q(c)o(ks)g(eliminate,)e(but)i(to)1013 1866 y(the)22 b (fact)f(that)h(pro)q(cessors)h(dela)o(y)e(b)q(efore)h(executing)g(the)1013 1911 y(Compare-And-Sw)m(ap.)38 b(When)21 b(a)f(pro)q(cessor)i(w)o(aits)e(on)g (a)1013 1957 y(queuelo)q(c)o(k,)12 b(it)g(dela)o(ys)g(un)o(til)g(all)f(pro)q (cessors)j(ahead)e(of)g(it)g(ac-)1013 2002 y(quire)h(the)g(queuelo)q(ck,)f (execute)j(the)e(Compare-And-Sw)n(ap,)1013 2047 y(and)i(release)h(the)g(lock.) 21 b(If)15 b(a)g(w)o(aiting)f(pro)q(cessor)j(succeeds,)1013 2093 y(then)12 b (the)g(pro)q(cessors)h(that)e(w)o(ere)h(w)o(aiting)e(ahead)i(of)e(it)h(m)m (ust)1013 2138 y(ha)n(v)o(e)h(failed,)e(and)h(those)h(w)o(aiting)e(b)q(ehind) h(will)f(fail.)15 b(Sp)r(eci\014-)1013 2183 y(cally)l(,)10 b(with)h fa(n)f fg (pro)q(cessors)j(queued,)f(a)e(successful)i(Compare-)1013 2229 y(And-Sw)o(ap) e(can)h(b)q(e)g(p)q(erformed)f(only)g(once)h(ev)o(ery)g fa(nt)f fg(cycles,) 1013 2274 y(where)k(the)g(Compare-And-Sw)n(ap)f(tak)o(es)h fa(t)f fg(cycles.) 19 b(\(W)l(e)14 b(ig-)1013 2319 y(nore)22 b(the)f(b)r(ene\014cial)g(e\013ects) i(of)e(the)h(loop's)f(parallelism,)1013 2365 y(whic)o(h)g(accoun)o(ts)h(for)f (an)g(initial)f(rise)i(in)e(throughput)i(at)1013 2410 y(small)11 b(n)o(um)n (b)q(ers)k(of)e(pro)q(cessors.\))1063 2473 y(W)l(e)19 b(can)g(again)f(separat\ e)i(the)g(e\013ects)h(of)d(failure)h(from)1013 2519 y(those)c(of)f(synchroniz\ ation)g(b)o(y)h(ha)n(ving)f(each)h(pro)q(cessor)h(do)1013 2564 y(its)k(Compar\ e-And-Sw)n(ap)g(to)g(a)g(di\013erent)g(memory)e(loca-)1013 2609 y(tion.)40 b (In)22 b(this)f(case,)j(sho)o(wn)d(in)g(Figure)h(7,)h(throughput)1013 2655 y (do)q(es)g(not)g(drop)g(o\013)f(as)h(the)h(n)n(um)n(b)q(er)g(of)e(pro)q(cesso\ rs)j(in-)1013 2700 y(creases.)19 b(Bus)11 b(con)o(tention)e(due)i(to)f(synchr\ onization)g(is)g(min-)p eop %%Page: 7 7 bop -32 75 a 14208860 11840716 3289088 3289088 50651955 36443095 startTexFig %%BeginDocument: Plots/Family.cas.P/plot.sequent.ps /gnudict 40 dict def gnudict begin /Color false def /gnulinewidth 5.000 def /vshift -60 def /dl {10 mul} def /hpt 31.5 def /vpt 31.5 def /vpt2 vpt 2 mul def /hpt2 hpt 2 mul def /Lshow { currentpoint stroke moveto 0 vshift rmoveto show } def /Rshow { currentpoint stroke moveto dup stringwidth pop neg vshift rmoveto show } def /Cshow { currentpoint stroke moveto dup stringwidth pop -2 div vshift rmoveto show } def /DL { Color {setrgbcolor [] 0 setdash pop} {pop pop pop 0 setdash} ifelse } def /BL { stroke gnulinewidth 2 mul setlinewidth } def /AL { stroke gnulinewidth 2 div setlinewidth } def /PL { stroke gnulinewidth setlinewidth } def /LTb { BL [] 0 0 0 DL } def /LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def /LT0 { PL [] 0 1 0 DL } def /LT1 { PL [4 dl 2 dl] 0 0 1 DL } def /LT2 { PL [2 dl 3 dl] 1 0 0 DL } def /LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def /LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def /LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def /LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def /LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def /LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def /M {moveto} def /L {lineto} def /P { stroke [] 0 setdash currentlinewidth 2 div sub moveto 0 currentlinewidth rlineto stroke } def /D { stroke [] 0 setdash 2 copy vpt add moveto hpt neg vpt neg rlineto hpt vpt neg rlineto hpt vpt rlineto hpt neg vpt rlineto closepath stroke P } def /A { stroke [] 0 setdash vpt sub moveto 0 vpt2 rlineto currentpoint stroke moveto hpt neg vpt neg rmoveto hpt2 0 rlineto stroke } def /B { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add moveto 0 vpt2 neg rlineto hpt2 0 rlineto 0 vpt2 rlineto hpt2 neg 0 rlineto closepath stroke P } def /C { stroke [] 0 setdash exch hpt sub exch vpt add moveto hpt2 vpt2 neg rlineto currentpoint stroke moveto hpt2 neg 0 rmoveto hpt2 vpt2 rlineto stroke } def /T { stroke [] 0 setdash 2 copy vpt 1.12 mul add moveto hpt neg vpt -1.62 mul rlineto hpt 2 mul 0 rlineto hpt neg vpt 1.62 mul rlineto closepath stroke P } def /S { 2 copy A C} def end gnudict begin gsave 50 50 translate 0.100 0.100 scale 0 setgray /Courier findfont 180 scalefont setfont newpath LTa 1296 631 M 6921 631 L LTb 1296 631 M 1359 631 L 6921 631 M 6858 631 L 1188 631 M (0) Rshow 1296 1291 M 1359 1291 L 6921 1291 M 6858 1291 L 1188 1291 M (100000) Rshow 1296 1950 M 1359 1950 L 6921 1950 M 6858 1950 L 1188 1950 M (200000) Rshow 1296 2610 M 1359 2610 L 6921 2610 M 6858 2610 L 1188 2610 M (300000) Rshow 1296 3270 M 1359 3270 L 6921 3270 M 6858 3270 L 1188 3270 M (400000) Rshow 1296 3929 M 1359 3929 L 6921 3929 M 6858 3929 L 1188 3929 M (500000) Rshow 1296 4589 M 1359 4589 L 6921 4589 M 6858 4589 L 1188 4589 M (600000) Rshow 1627 631 M 1627 694 L 1627 4589 M 1627 4526 L 1627 451 M (2) Cshow 2289 631 M 2289 694 L 2289 4589 M 2289 4526 L 2289 451 M (4) Cshow 2950 631 M 2950 694 L 2950 4589 M 2950 4526 L 2950 451 M (6) Cshow 3612 631 M 3612 694 L 3612 4589 M 3612 4526 L 3612 451 M (8) Cshow 4274 631 M 4274 694 L 4274 4589 M 4274 4526 L 4274 451 M (10) Cshow 4936 631 M 4936 694 L 4936 4589 M 4936 4526 L 4936 451 M (12) Cshow 5597 631 M 5597 694 L 5597 4589 M 5597 4526 L 5597 451 M (14) Cshow 6259 631 M 6259 694 L 6259 4589 M 6259 4526 L 6259 451 M (16) Cshow 6921 631 M 6921 694 L 6921 4589 M 6921 4526 L 6921 451 M (18) Cshow LTb 1296 631 M 6921 631 L 6921 4589 L 1296 4589 L 1296 631 L 180 2610 M currentpoint gsave translate 90 rotate 0 0 moveto (Five second Throughput) Cshow grestore 4108 271 M (Number of processors) Cshow 4108 4769 M (Private Compare-And-Swap Symmetry) Cshow LT0 LT0 6318 4346 M (1) Rshow 6426 4346 M 6750 4346 L 1296 2425 M 1296 2425 L 1627 3718 L 1958 3411 L 2289 3445 L 2620 3323 L 2950 2995 L 3281 2735 L 3612 2524 L 3943 2370 L 4274 2354 L 4605 2173 L 4936 2109 L 5267 2103 L 5597 1959 L 5928 1992 L 6259 1933 L 6590 1805 L 6921 1872 L 6534 4346 D 1296 2425 D 1627 3718 D 1958 3411 D 2289 3445 D 2620 3323 D 2950 2995 D 3281 2735 D 3612 2524 D 3943 2370 D 4274 2354 D 4605 2173 D 4936 2109 D 5267 2103 D 5597 1959 D 5928 1992 D 6259 1933 D 6590 1805 D 6921 1872 D LT1 6318 4166 M (5) Rshow 6426 4166 M 6750 4166 L 1296 2009 M 1296 2009 L 1627 3080 L 1958 4118 L 2289 3641 L 2620 3573 L 2950 3201 L 3281 2750 L 3612 2528 L 3943 2373 L 4274 2341 L 4605 2260 L 4936 2151 L 5267 2132 L 5597 2022 L 5928 1959 L 6259 1853 L 6590 1836 L 6921 1791 L 6534 4166 A 1296 2009 A 1627 3080 A 1958 4118 A 2289 3641 A 2620 3573 A 2950 3201 A 3281 2750 A 3612 2528 A 3943 2373 A 4274 2341 A 4605 2260 A 4936 2151 A 5267 2132 A 5597 2022 A 5928 1959 A 6259 1853 A 6590 1836 A 6921 1791 A LT2 6318 3986 M (10) Rshow 6426 3986 M 6750 3986 L 1296 1720 M 1296 1720 L 1627 2616 L 1958 3595 L 2289 3432 L 2620 3445 L 2950 3319 L 3281 3004 L 3612 2657 L 3943 2471 L 4274 2308 L 4605 2225 L 4936 2097 L 5267 2221 L 5597 2075 L 5928 1849 L 6259 1793 L 6590 1806 L 6921 1836 L 6534 3986 B 1296 1720 B 1627 2616 B 1958 3595 B 2289 3432 B 2620 3445 B 2950 3319 B 3281 3004 B 3612 2657 B 3943 2471 B 4274 2308 B 4605 2225 B 4936 2097 B 5267 2221 B 5597 2075 B 5928 1849 B 6259 1793 B 6590 1806 B 6921 1836 B LT3 6318 3806 M (50) Rshow 6426 3806 M 6750 3806 L 1296 1037 M 1296 1037 L 1627 1415 L 1958 1807 L 2289 2197 L 2620 2586 L 2950 2972 L 3281 3355 L 3612 3733 L 3943 3594 L 4274 3538 L 4605 2767 L 4936 2420 L 5267 2353 L 5597 2301 L 5928 2208 L 6259 2062 L 6590 1919 L 6921 1842 L 6534 3806 C 1296 1037 C 1627 1415 C 1958 1807 C 2289 2197 C 2620 2586 C 2950 2972 C 3281 3355 C 3612 3733 C 3943 3594 C 4274 3538 C 4605 2767 C 4936 2420 C 5267 2353 C 5597 2301 C 5928 2208 C 6259 2062 C 6590 1919 C 6921 1842 C LT4 6318 3626 M (100) Rshow 6426 3626 M 6750 3626 L 1296 859 M 1296 859 L 1627 1078 L 1958 1300 L 2289 1524 L 2620 1747 L 2950 1967 L 3281 2191 L 3612 2413 L 3943 2635 L 4274 2853 L 4605 3074 L 4936 3299 L 5267 3503 L 5597 3443 L 5928 3380 L 6259 2375 L 6590 2281 L 6921 2151 L 6534 3626 T 1296 859 T 1627 1078 T 1958 1300 T 2289 1524 T 2620 1747 T 2950 1967 T 3281 2191 T 3612 2413 T 3943 2635 T 4274 2853 T 4605 3074 T 4936 3299 T 5267 3503 T 5597 3443 T 5928 3380 T 6259 2375 T 6590 2281 T 6921 2151 T LT5 6318 3446 M (1000) Rshow 6426 3446 M 6750 3446 L 1296 657 M 1296 657 L 1627 682 L 1958 708 L 2289 733 L 2620 759 L 2950 784 L 3281 810 L 3612 835 L 3943 861 L 4274 886 L 4605 912 L 4936 937 L 5267 963 L 5597 989 L 5928 1014 L 6259 1040 L 6590 1066 L 6921 1091 L 6534 3446 S 1296 657 S 1627 682 S 1958 708 S 2289 733 S 2620 759 S 2950 784 S 3281 810 S 3612 835 S 3943 861 S 4274 886 S 4605 912 S 4936 937 S 5267 963 S 5597 989 S 5928 1014 S 6259 1040 S 6590 1066 S 6921 1091 S stroke grestore end showpage %%EndDocument endTexFig 950 w 14208860 11840716 3289088 3289088 50651955 36443095 startTexFig %%BeginDocument: Plots/Family.cas.P/plot.omron.ps /gnudict 40 dict def gnudict begin /Color false def /gnulinewidth 5.000 def /vshift -60 def /dl {10 mul} def /hpt 31.5 def /vpt 31.5 def /vpt2 vpt 2 mul def /hpt2 hpt 2 mul def /Lshow { currentpoint stroke moveto 0 vshift rmoveto show } def /Rshow { currentpoint stroke moveto dup stringwidth pop neg vshift rmoveto show } def /Cshow { currentpoint stroke moveto dup stringwidth pop -2 div vshift rmoveto show } def /DL { Color {setrgbcolor [] 0 setdash pop} {pop pop pop 0 setdash} ifelse } def /BL { stroke gnulinewidth 2 mul setlinewidth } def /AL { stroke gnulinewidth 2 div setlinewidth } def /PL { stroke gnulinewidth setlinewidth } def /LTb { BL [] 0 0 0 DL } def /LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def /LT0 { PL [] 0 1 0 DL } def /LT1 { PL [4 dl 2 dl] 0 0 1 DL } def /LT2 { PL [2 dl 3 dl] 1 0 0 DL } def /LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def /LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def /LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def /LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def /LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def /LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def /M {moveto} def /L {lineto} def /P { stroke [] 0 setdash currentlinewidth 2 div sub moveto 0 currentlinewidth rlineto stroke } def /D { stroke [] 0 setdash 2 copy vpt add moveto hpt neg vpt neg rlineto hpt vpt neg rlineto hpt vpt rlineto hpt neg vpt rlineto closepath stroke P } def /A { stroke [] 0 setdash vpt sub moveto 0 vpt2 rlineto currentpoint stroke moveto hpt neg vpt neg rmoveto hpt2 0 rlineto stroke } def /B { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add moveto 0 vpt2 neg rlineto hpt2 0 rlineto 0 vpt2 rlineto hpt2 neg 0 rlineto closepath stroke P } def /C { stroke [] 0 setdash exch hpt sub exch vpt add moveto hpt2 vpt2 neg rlineto currentpoint stroke moveto hpt2 neg 0 rmoveto hpt2 vpt2 rlineto stroke } def /T { stroke [] 0 setdash 2 copy vpt 1.12 mul add moveto hpt neg vpt -1.62 mul rlineto hpt 2 mul 0 rlineto hpt neg vpt 1.62 mul rlineto closepath stroke P } def /S { 2 copy A C} def end gnudict begin gsave 50 50 translate 0.100 0.100 scale 0 setgray /Courier findfont 180 scalefont setfont newpath LTa 1296 631 M 6921 631 L LTb 1296 631 M 1359 631 L 6921 631 M 6858 631 L 1188 631 M (0) Rshow 1296 1071 M 1359 1071 L 6921 1071 M 6858 1071 L 1188 1071 M (200000) Rshow 1296 1511 M 1359 1511 L 6921 1511 M 6858 1511 L 1188 1511 M (400000) Rshow 1296 1950 M 1359 1950 L 6921 1950 M 6858 1950 L 1188 1950 M (600000) Rshow 1296 2390 M 1359 2390 L 6921 2390 M 6858 2390 L 1188 2390 M (800000) Rshow 1296 2830 M 1359 2830 L 6921 2830 M 6858 2830 L 1188 2830 M (1e+06) Rshow 1296 3270 M 1359 3270 L 6921 3270 M 6858 3270 L 1188 3270 M (1.2e+06) Rshow 1296 3709 M 1359 3709 L 6921 3709 M 6858 3709 L 1188 3709 M (1.4e+06) Rshow 1296 4149 M 1359 4149 L 6921 4149 M 6858 4149 L 1188 4149 M (1.6e+06) Rshow 1296 4589 M 1359 4589 L 6921 4589 M 6858 4589 L 1188 4589 M (1.8e+06) Rshow 1296 631 M 1296 694 L 1296 4589 M 1296 4526 L 1296 451 M (1) Cshow 2234 631 M 2234 694 L 2234 4589 M 2234 4526 L 2234 451 M % 3171 631 M 3171 694 L 3171 4589 M 3171 4526 L 3171 451 M (2) Cshow 4109 631 M 4109 694 L 4109 4589 M 4109 4526 L 4109 451 M % 5046 631 M 5046 694 L 5046 4589 M 5046 4526 L 5046 451 M (3) Cshow 5984 631 M 5984 694 L 5984 4589 M 5984 4526 L 5984 451 M % 6921 631 M 6921 694 L 6921 4589 M 6921 4526 L 6921 451 M (4) Cshow LTb 1296 631 M 6921 631 L 6921 4589 L 1296 4589 L 1296 631 L 180 2610 M currentpoint gsave translate 90 rotate 0 0 moveto (Five second Throughput) Cshow grestore 4108 271 M (Number of processors) Cshow 4108 4769 M (Private Compare-And-Swap Luna88k) Cshow LT0 LT0 6318 4346 M (1) Rshow 6426 4346 M 6750 4346 L 1296 2824 M 1296 2824 L 3171 4157 L 5046 3734 L 6921 3456 L 6534 4346 D 1296 2824 D 3171 4157 D 5046 3734 D 6921 3456 D LT1 6318 4166 M (5) Rshow 6426 4166 M 6750 4166 L 1296 2367 M 1296 2367 L 3171 3606 L 5046 4097 L 6921 3635 L 6534 4166 A 1296 2367 A 3171 3606 A 5046 4097 A 6921 3635 A LT2 6318 3986 M (10) Rshow 6426 3986 M 6750 3986 L 1296 2020 M 1296 2020 L 3171 3069 L 5046 4051 L 6921 3754 L 6534 3986 B 1296 2020 B 3171 3069 B 5046 4051 B 6921 3754 B LT3 6318 3806 M (50) Rshow 6426 3806 M 6750 3806 L 1296 1159 M 1296 1159 L 3171 1634 L 5046 2095 L 6921 2501 L 6534 3806 C 1296 1159 C 3171 1634 C 5046 2095 C 6921 2501 C LT4 6318 3626 M (100) Rshow 6426 3626 M 6750 3626 L 1296 929 M 1296 929 L 3171 1209 L 5046 1486 L 6921 1741 L 6534 3626 T 1296 929 T 3171 1209 T 5046 1486 T 6921 1741 T LT5 6318 3446 M (1000) Rshow 6426 3446 M 6750 3446 L 1296 664 M 1296 664 L 3171 698 L 5046 731 L 6921 764 L 6534 3446 S 1296 664 S 3171 698 S 5046 731 S 6921 764 S stroke grestore end showpage %%EndDocument endTexFig -57 899 a fg(Figure)15 b(5:)20 b fd(Compare-And-Sw)n(ap)15 b(usin\ g)g(spinlocks.)22 b(Eac)o(h)15 b(thread)h(accesses)h(a)e(di\013erent)g(lo)q (cation.)21 b(Throughput)15 b(drops)h(o\013)-57 945 y(less)g(signi\014can)o (tly)f(than)h(when)g(eac)o(h)g(pro)q(cessor)h(manipulates)d(the)j(same)d(lo)q (cation.)23 b(Con)n(tention)15 b(exists)h(only)f(for)h(the)g(lock,)-57 990 y (not)e(for)f(the)i(data)e(v)n(alue.)-57 1115 y fg(imized)j(and)h(ev)o(ery)h (Compare-And-Sw)n(ap)f(con)o(tributes)h(to)-57 1160 y(total)h(throughput.)36 b (Real)19 b(concurrent)h(ob)r(jects,)i(though,)-57 1205 y(require)17 b(up)q (dates)h(to)e(common)d(data,)j(so)h(this)f(exp)r(erimen)n(t)-57 1251 y(is)11 b (only)f(useful)h(for)g(understanding)h(the)f(e\013ects)i(of)e(queueing)-57 1296 y(and)j(failure.)-57 1386 y fk(3.5)52 b(Reducing)37 b(the)g(frequency)d (of)j(w)n(asted)62 1431 y(sync)n(hronization)-7 1521 y fg(The)22 b(problem)f (with)h(Compare-And-Sw)n(ap)g(based)g(on)-57 1567 y(spinlocks)c(and)f(queuelo) r(c)o(ks)h(is)f(that)h(threads)h(go)e(through)-57 1612 y(a)d(global)e(synchro\ nization)i(proto)q(col)g(only)f(to)h(then)h(fail)d(b)o(y)-57 1657 y(disco)o (v)o(ering)19 b(data)h(con)o(ten)o(tion.)35 b(Throughput,)21 b(the)f(total) -57 1703 y(n)o(um)m(b)r(er)10 b(of)f(successful)i(accesses)i(to)c(the)h(share\ d)h(v)m(alue,)f(is)g(ul-)-57 1748 y(timately)h(limited)g(b)o(y)h(the)i(time)d (to)i(execute)i(the)e(Compare-)-57 1793 y(And-Sw)o(ap)21 b(sequence)j(itself.) 41 b(As)22 b(more)f(pro)q(cessors)j(are)-57 1839 y(added,)i(ho)o(w)n(ever,)g (the)e(total)f(n)o(um)m(b)q(er)i(of)e(attempts)g(in-)-57 1884 y(creases.)d (Since)14 b(the)h(n)o(um)m(b)q(er)g(of)e(successes)k(is)d(limited,)d(this)-57 1929 y(results)18 b(in)f(an)f(increase)j(in)d(the)i(n)o(um)m(b)q(er)g(of)f (failures.)26 b(Be-)-57 1975 y(cause)20 b(failures)f(ha)n(v)o(e)h(a)e(non-loc\ al)h(cost)h(in)e(terms)h(of)g(bus)-57 2020 y(synchronization)14 b(and)i(queue\ ing)f(dela)o(y)l(,)h(throughput)f(nec-)-57 2065 y(essarily)f(drops)g(o\013.) -7 2111 y(With)21 b(blocking)f(concurren)q(t)i(ob)r(jects,)i(that)e(is,)g(tho\ se)-57 2156 y(built)12 b(using)g(traditional)e(lo)q(c)o(ks)i(and)h(critical)e (sections,)j(eac)o(h)-57 2201 y(synchronization)i(op)q(eration)g(is)h(follo)m (w)o(ed)g(b)o(y)g(a)f(successful)-57 2247 y(up)q(date)k(op)q(eration,)f(so)g (synchronization)f(op)q(erations)i(are)-57 2292 y(nev)o(er)j(\\w)o(asted.")43 b(An)23 b(implemen)l(tation)f(for)f(Compare-)-57 2337 y(And-Sw)o(ap)15 b(shou\ ld)g(exhibit)g(the)g(same)g(prop)q(erty)l(.)22 b(Ideally)l(,)-57 2383 y(the)d (rate)f(of)g(sync)o(hronization)g(op)q(erations)g(for)f(Compare-)-57 2428 y (And-Sw)o(ap)12 b(should)h(b)q(e)g(equal)f(to)g(the)i(throughput,)e(that)h (is,)-57 2473 y(the)h(rate)h(of)e(successful)j(compares)d(follo)m(w)o(ed)i (b)o(y)e(a)h(sw)o(ap.)-7 2519 y(W)l(e)f(can)g(build)e(a)i(Compare-And-Sw)m (ap)g(op)q(eration)f(that)-57 2564 y(reduces)18 b(the)e(cost)h(of)e(failure)g (b)o(y)h(c)o(hanging)f(the)i(de\014nition)-57 2609 y(of)k(Compare-And-Sw)n (ap)g(so)h(that)g(it)f(b)q(ecomes)h fj(advisory)-57 2655 y fg(rather)12 b(tha\ n)f(prescriptiv)o(e.)18 b(A)11 b(failed)f(Compare-And-Sw)m(ap)-57 2700 y(only) g(means)g(that)h(no)g(sw)o(ap)g(o)q(ccurred,)i(but)e(not)g(necessarily)1013 1115 y(that)i(the)i(old)e(v)m(alue)h(and)f(the)h(curren)q(t)f(v)n(alue)g(are) h(di\013erent.)1013 1160 y(This)f(enables)g(a)g(Compare-And-Sw)m(ap)g(to)g (fail)e(b)q(efore)j(ha)n(v-)1013 1205 y(ing)9 b(to)h(execute)h(an)f(exp)q(ens\ ive)g(sync)o(hronization)g(op)q(eration.)1013 1251 y(W)l(e)18 b(can)f(impleme\ n)l(t)g(the)h(advisory)f(Compare-And-Sw)m(ap)1013 1296 y(b)o(y)j(ha)o(ving)f (a)i(pro)q(cessor)h(p)q(oll)e(the)h(old)e(v)n(alue)h(for)g(equal-)1013 1341 y (it)n(y)g(with)f(the)h(new)g(v)n(alue)f(while)g(attempting)f(to)i(acquire) 1013 1387 y(the)14 b(lo)q(c)o(k.)k(A)c(w)n(aiting)f(pro)q(cessor)j(can)e(ab)q (ort)g(its)f(Compare-)1013 1432 y(And-Sw)o(ap)18 b(at)f(an)o(y)h(time)f(b)q (efore)h(it)g(acquires)h(the)f(lo)q(c)o(k)g(if)1013 1477 y(it)c(detects)i(tha\ t)e(the)h(shared)g(v)n(alue)f(and)g(the)g(old)g(v)n(alue)g(are)1013 1523 y (not)20 b(equal.)35 b(This)20 b(has)g(the)g(e\013ect)i(of)d(purging)g(from)f (the)1013 1568 y(set)e(of)f(w)n(aiting)f(pro)r(cessors)j(those)f(pro)q(cessor\ s)h(whose)f(syn-)1013 1613 y(c)o(hronized)g(Compare-And-Sw)m(ap)f(w)o(ould)f (most)g(lik)n(ely)h(fail.)1013 1659 y(Successful)d(pro)q(cessors)h(therefore) f(only)d(w)o(ait)h(for)g(other)h(suc-)1013 1704 y(cessful)21 b(pro)q(cessors;) j(failure)19 b(incurs)i(no)f(global)e(queueing)1013 1749 y(dela)n(y)m(.)1063 1795 y(The)25 b(throughput)f(of)g(this)h(strategy)m(,)i(whic)o(h)d(w)o(e)h (call)1013 1840 y(Compare*-And-Compa)o(re-And-Sw)m(ap,)18 b(is)g(sho)o(wn)g (in)f(\014g-)1013 1885 y(ure)j(8.)35 b(The)21 b(graphs)e(w)o(ere)i(generated) g(using)f(T)l(est-And-)1013 1931 y(T)l(est-And-Set)f(spinlocks)e(in)g(whic)o (h)g(the)g(initial)f(test)i(loop)1013 1976 y(also)h(included)i(a)e(chec)o(k)h (for)g(equalit)n(y)g(b)r(et)o(w)o(een)h(the)g(new)1013 2021 y(v)m(alue)d(and) h(the)f(old)g(v)n(alue.)30 b(Compared)18 b(to)g(the)h(previous)1013 2067 y (techniques,)h(the)g(additional)e(compare)g(substantially)f(re-)1013 2112 y (duces)22 b(the)f(rate)g(at)f(whic)o(h)g(throughput)h(degrades)g(when)1013 2157 y(pro)q(cessors)12 b(are)e(added.)17 b(Moreo)o(v)o(er,)10 b(absolute)g (p)q(erformance)1013 2203 y(in)21 b(the)g(case)h(of)f(lo)n(w)g(con)o(tention) f(is)i(comparable)d(to)i(the)1013 2248 y(straigh)o(tforw)n(ard)i(Compare-And-\ Sw)m(ap)f(implemen)m(tation)1013 2293 y(using)13 b(simple)g(spinlocks)h(\(Fig\ ure)g(4\).)1013 2383 y fk(3.6)52 b(Summary)1063 2473 y fg(Sync)o(hronization) 30 b(proto)q(cols)i(appropriate)f(for)f(non-)1013 2519 y(blocking)9 b(concurr\ en)q(t)h(ob)r(jects)i(are)e(inappropriate)g(in)g(terms)1013 2564 y(of)22 b (p)q(erformance)g(when)h(used)h(as)f(the)g(basis)g(for)f(a)g(non-)1013 2609 y (blocking)16 b(concurrent)h(ob)s(jects.)28 b(In)17 b(the)g(presence)j(of)c (con-)1013 2655 y(ten)o(tion,)h(simple)e(spinlocks)h(generate)i(excessiv)q (e)f(bus)g(con-)1013 2700 y(ten)o(tion.)28 b(Queuelo)r(c)o(ks,)18 b(whic)o (h)g(are)f(e\013ective)h(at)f(reducing)p eop %%Page: 8 8 bop -32 75 a 14208860 11840716 3289088 3289088 50651955 36443095 startTexFig %%BeginDocument: Plots/Family.queue/plot.sequent.ps /gnudict 40 dict def gnudict begin /Color false def /gnulinewidth 5.000 def /vshift -60 def /dl {10 mul} def /hpt 31.5 def /vpt 31.5 def /vpt2 vpt 2 mul def /hpt2 hpt 2 mul def /Lshow { currentpoint stroke moveto 0 vshift rmoveto show } def /Rshow { currentpoint stroke moveto dup stringwidth pop neg vshift rmoveto show } def /Cshow { currentpoint stroke moveto dup stringwidth pop -2 div vshift rmoveto show } def /DL { Color {setrgbcolor [] 0 setdash pop} {pop pop pop 0 setdash} ifelse } def /BL { stroke gnulinewidth 2 mul setlinewidth } def /AL { stroke gnulinewidth 2 div setlinewidth } def /PL { stroke gnulinewidth setlinewidth } def /LTb { BL [] 0 0 0 DL } def /LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def /LT0 { PL [] 0 1 0 DL } def /LT1 { PL [4 dl 2 dl] 0 0 1 DL } def /LT2 { PL [2 dl 3 dl] 1 0 0 DL } def /LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def /LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def /LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def /LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def /LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def /LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def /M {moveto} def /L {lineto} def /P { stroke [] 0 setdash currentlinewidth 2 div sub moveto 0 currentlinewidth rlineto stroke } def /D { stroke [] 0 setdash 2 copy vpt add moveto hpt neg vpt neg rlineto hpt vpt neg rlineto hpt vpt rlineto hpt neg vpt rlineto closepath stroke P } def /A { stroke [] 0 setdash vpt sub moveto 0 vpt2 rlineto currentpoint stroke moveto hpt neg vpt neg rmoveto hpt2 0 rlineto stroke } def /B { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add moveto 0 vpt2 neg rlineto hpt2 0 rlineto 0 vpt2 rlineto hpt2 neg 0 rlineto closepath stroke P } def /C { stroke [] 0 setdash exch hpt sub exch vpt add moveto hpt2 vpt2 neg rlineto currentpoint stroke moveto hpt2 neg 0 rmoveto hpt2 vpt2 rlineto stroke } def /T { stroke [] 0 setdash 2 copy vpt 1.12 mul add moveto hpt neg vpt -1.62 mul rlineto hpt 2 mul 0 rlineto hpt neg vpt 1.62 mul rlineto closepath stroke P } def /S { 2 copy A C} def end gnudict begin gsave 50 50 translate 0.100 0.100 scale 0 setgray /Courier findfont 180 scalefont setfont newpath LTa 1296 631 M 6921 631 L LTb 1296 631 M 1359 631 L 6921 631 M 6858 631 L 1188 631 M (0) Rshow 1296 1071 M 1359 1071 L 6921 1071 M 6858 1071 L 1188 1071 M (20000) Rshow 1296 1511 M 1359 1511 L 6921 1511 M 6858 1511 L 1188 1511 M (40000) Rshow 1296 1950 M 1359 1950 L 6921 1950 M 6858 1950 L 1188 1950 M (60000) Rshow 1296 2390 M 1359 2390 L 6921 2390 M 6858 2390 L 1188 2390 M (80000) Rshow 1296 2830 M 1359 2830 L 6921 2830 M 6858 2830 L 1188 2830 M (100000) Rshow 1296 3270 M 1359 3270 L 6921 3270 M 6858 3270 L 1188 3270 M (120000) Rshow 1296 3709 M 1359 3709 L 6921 3709 M 6858 3709 L 1188 3709 M (140000) Rshow 1296 4149 M 1359 4149 L 6921 4149 M 6858 4149 L 1188 4149 M (160000) Rshow 1296 4589 M 1359 4589 L 6921 4589 M 6858 4589 L 1188 4589 M (180000) Rshow 1627 631 M 1627 694 L 1627 4589 M 1627 4526 L 1627 451 M (2) Cshow 2289 631 M 2289 694 L 2289 4589 M 2289 4526 L 2289 451 M (4) Cshow 2950 631 M 2950 694 L 2950 4589 M 2950 4526 L 2950 451 M (6) Cshow 3612 631 M 3612 694 L 3612 4589 M 3612 4526 L 3612 451 M (8) Cshow 4274 631 M 4274 694 L 4274 4589 M 4274 4526 L 4274 451 M (10) Cshow 4936 631 M 4936 694 L 4936 4589 M 4936 4526 L 4936 451 M (12) Cshow 5597 631 M 5597 694 L 5597 4589 M 5597 4526 L 5597 451 M (14) Cshow 6259 631 M 6259 694 L 6259 4589 M 6259 4526 L 6259 451 M (16) Cshow 6921 631 M 6921 694 L 6921 4589 M 6921 4526 L 6921 451 M (18) Cshow LTb 1296 631 M 6921 631 L 6921 4589 L 1296 4589 L 1296 631 L 180 2610 M currentpoint gsave translate 90 rotate 0 0 moveto (Five second Throughput) Cshow grestore 4108 271 M (Number of processors) Cshow 4108 4769 M (Queuelock Compare-And-Swap Symmetry) Cshow LT0 LT0 6318 4346 M (1) Rshow 6426 4346 M 6750 4346 L 1296 4298 M 1296 4298 L 1627 4218 L 1958 4244 L 2289 3566 L 2620 2955 L 2950 2548 L 3281 2268 L 3612 2055 L 3943 1892 L 4274 1742 L 4605 1674 L 4936 1619 L 5267 1522 L 5597 1486 L 5928 1400 L 6259 1385 L 6590 1347 L 6921 1292 L 6534 4346 D 1296 4298 D 1627 4218 D 1958 4244 D 2289 3566 D 2620 2955 D 2950 2548 D 3281 2268 D 3612 2055 D 3943 1892 D 4274 1742 D 4605 1674 D 4936 1619 D 5267 1522 D 5597 1486 D 5928 1400 D 6259 1385 D 6590 1347 D 6921 1292 D LT1 6318 4166 M (5) Rshow 6426 4166 M 6750 4166 L 1296 3726 M 1296 3726 L 1627 3784 L 1958 4054 L 2289 3567 L 2620 2972 L 2950 2578 L 3281 2290 L 3612 2084 L 3943 1906 L 4274 1775 L 4605 1690 L 4936 1610 L 5267 1526 L 5597 1500 L 5928 1443 L 6259 1358 L 6590 1324 L 6921 1287 L 6534 4166 A 1296 3726 A 1627 3784 A 1958 4054 A 2289 3567 A 2620 2972 A 2950 2578 A 3281 2290 A 3612 2084 A 3943 1906 A 4274 1775 A 4605 1690 A 4936 1610 A 5267 1526 A 5597 1500 A 5928 1443 A 6259 1358 A 6590 1324 A 6921 1287 A LT2 6318 3986 M (10) Rshow 6426 3986 M 6750 3986 L 1296 3256 M 1296 3256 L 1627 3400 L 1958 3723 L 2289 3525 L 2620 3001 L 2950 2616 L 3281 2296 L 3612 2059 L 3943 1903 L 4274 1742 L 4605 1690 L 4936 1614 L 5267 1545 L 5597 1480 L 5928 1400 L 6259 1354 L 6590 1335 L 6921 1292 L 6534 3986 B 1296 3256 B 1627 3400 B 1958 3723 B 2289 3525 B 2620 3001 B 2950 2616 B 3281 2296 B 3612 2059 B 3943 1903 B 4274 1742 B 4605 1690 B 4936 1614 B 5267 1545 B 5597 1480 B 5928 1400 B 6259 1354 B 6590 1335 B 6921 1292 B LT3 6318 3806 M (50) Rshow 6426 3806 M 6750 3806 L 1296 1818 M 1296 1818 L 1627 2043 L 1958 2218 L 2289 2320 L 2620 2356 L 2950 2335 L 3281 2339 L 3612 2245 L 3943 2002 L 4274 1827 L 4605 1733 L 4936 1616 L 5267 1538 L 5597 1466 L 5928 1412 L 6259 1359 L 6590 1325 L 6921 1291 L 6534 3806 C 1296 1818 C 1627 2043 C 1958 2218 C 2289 2320 C 2620 2356 C 2950 2335 C 3281 2339 C 3612 2245 C 3943 2002 C 4274 1827 C 4605 1733 C 4936 1616 C 5267 1538 C 5597 1466 C 5928 1412 C 6259 1359 C 6590 1325 C 6921 1291 C LT4 6318 3626 M (100) Rshow 6426 3626 M 6750 3626 L 1296 1334 M 1296 1334 L 1627 1511 L 1958 1615 L 2289 1680 L 2620 1714 L 2950 1738 L 3281 1752 L 3612 1750 L 3943 1739 L 4274 1740 L 4605 1739 L 4936 1752 L 5267 1633 L 5597 1539 L 5928 1464 L 6259 1406 L 6590 1355 L 6921 1310 L 6534 3626 T 1296 1334 T 1627 1511 T 1958 1615 T 2289 1680 T 2620 1714 T 2950 1738 T 3281 1752 T 3612 1750 T 3943 1739 T 4274 1740 T 4605 1739 T 4936 1752 T 5267 1633 T 5597 1539 T 5928 1464 T 6259 1406 T 6590 1355 T 6921 1310 T LT5 6318 3446 M (1000) Rshow 6426 3446 M 6750 3446 L 1296 716 M 1296 716 L 1627 744 L 1958 757 L 2289 762 L 2620 768 L 2950 771 L 3281 774 L 3612 775 L 3943 775 L 4274 777 L 4605 776 L 4936 778 L 5267 780 L 5597 779 L 5928 780 L 6259 780 L 6590 780 L 6921 780 L 6534 3446 S 1296 716 S 1627 744 S 1958 757 S 2289 762 S 2620 768 S 2950 771 S 3281 774 S 3612 775 S 3943 775 S 4274 777 S 4605 776 S 4936 778 S 5267 780 S 5597 779 S 5928 780 S 6259 780 S 6590 780 S 6921 780 S stroke grestore end showpage %%EndDocument endTexFig 950 w 14208860 11840716 3289088 3289088 50651955 36443095 startTexFig %%BeginDocument: Plots/Family.queue/plot.omron.ps /gnudict 40 dict def gnudict begin /Color false def /gnulinewidth 5.000 def /vshift -60 def /dl {10 mul} def /hpt 31.5 def /vpt 31.5 def /vpt2 vpt 2 mul def /hpt2 hpt 2 mul def /Lshow { currentpoint stroke moveto 0 vshift rmoveto show } def /Rshow { currentpoint stroke moveto dup stringwidth pop neg vshift rmoveto show } def /Cshow { currentpoint stroke moveto dup stringwidth pop -2 div vshift rmoveto show } def /DL { Color {setrgbcolor [] 0 setdash pop} {pop pop pop 0 setdash} ifelse } def /BL { stroke gnulinewidth 2 mul setlinewidth } def /AL { stroke gnulinewidth 2 div setlinewidth } def /PL { stroke gnulinewidth setlinewidth } def /LTb { BL [] 0 0 0 DL } def /LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def /LT0 { PL [] 0 1 0 DL } def /LT1 { PL [4 dl 2 dl] 0 0 1 DL } def /LT2 { PL [2 dl 3 dl] 1 0 0 DL } def /LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def /LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def /LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def /LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def /LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def /LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def /M {moveto} def /L {lineto} def /P { stroke [] 0 setdash currentlinewidth 2 div sub moveto 0 currentlinewidth rlineto stroke } def /D { stroke [] 0 setdash 2 copy vpt add moveto hpt neg vpt neg rlineto hpt vpt neg rlineto hpt vpt rlineto hpt neg vpt rlineto closepath stroke P } def /A { stroke [] 0 setdash vpt sub moveto 0 vpt2 rlineto currentpoint stroke moveto hpt neg vpt neg rmoveto hpt2 0 rlineto stroke } def /B { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add moveto 0 vpt2 neg rlineto hpt2 0 rlineto 0 vpt2 rlineto hpt2 neg 0 rlineto closepath stroke P } def /C { stroke [] 0 setdash exch hpt sub exch vpt add moveto hpt2 vpt2 neg rlineto currentpoint stroke moveto hpt2 neg 0 rmoveto hpt2 vpt2 rlineto stroke } def /T { stroke [] 0 setdash 2 copy vpt 1.12 mul add moveto hpt neg vpt -1.62 mul rlineto hpt 2 mul 0 rlineto hpt neg vpt 1.62 mul rlineto closepath stroke P } def /S { 2 copy A C} def end gnudict begin gsave 50 50 translate 0.100 0.100 scale 0 setgray /Courier findfont 180 scalefont setfont newpath LTa 1296 631 M 6921 631 L LTb 1296 631 M 1359 631 L 6921 631 M 6858 631 L 1188 631 M (0) Rshow 1296 1196 M 1359 1196 L 6921 1196 M 6858 1196 L 1188 1196 M (100000) Rshow 1296 1762 M 1359 1762 L 6921 1762 M 6858 1762 L 1188 1762 M (200000) Rshow 1296 2327 M 1359 2327 L 6921 2327 M 6858 2327 L 1188 2327 M (300000) Rshow 1296 2893 M 1359 2893 L 6921 2893 M 6858 2893 L 1188 2893 M (400000) Rshow 1296 3458 M 1359 3458 L 6921 3458 M 6858 3458 L 1188 3458 M (500000) Rshow 1296 4024 M 1359 4024 L 6921 4024 M 6858 4024 L 1188 4024 M (600000) Rshow 1296 4589 M 1359 4589 L 6921 4589 M 6858 4589 L 1188 4589 M (700000) Rshow 1296 631 M 1296 694 L 1296 4589 M 1296 4526 L 1296 451 M (1) Cshow 2234 631 M 2234 694 L 2234 4589 M 2234 4526 L 2234 451 M % 3171 631 M 3171 694 L 3171 4589 M 3171 4526 L 3171 451 M (2) Cshow 4109 631 M 4109 694 L 4109 4589 M 4109 4526 L 4109 451 M % 5046 631 M 5046 694 L 5046 4589 M 5046 4526 L 5046 451 M (3) Cshow 5984 631 M 5984 694 L 5984 4589 M 5984 4526 L 5984 451 M % 6921 631 M 6921 694 L 6921 4589 M 6921 4526 L 6921 451 M (4) Cshow LTb 1296 631 M 6921 631 L 6921 4589 L 1296 4589 L 1296 631 L 180 2610 M currentpoint gsave translate 90 rotate 0 0 moveto (Five second Throughput) Cshow grestore 4108 271 M (Number of processors) Cshow 4108 4769 M (Queuelock Compare-And-Swap Luna88k) Cshow LT0 LT0 6318 4346 M (1) Rshow 6426 4346 M 6750 4346 L 1296 4207 M 1296 4207 L 3171 4405 L 5046 4020 L 6921 3219 L 6534 4346 D 1296 4207 D 3171 4405 D 5046 4020 D 6921 3219 D LT1 6318 4166 M (5) Rshow 6426 4166 M 6750 4166 L 1296 3702 M 1296 3702 L 3171 3964 L 5046 4096 L 6921 3374 L 6534 4166 A 1296 3702 A 3171 3964 A 5046 4096 A 6921 3374 A LT2 6318 3986 M (10) Rshow 6426 3986 M 6750 3986 L 1296 3238 M 1296 3238 L 3171 3546 L 5046 3752 L 6921 3208 L 6534 3986 B 1296 3238 B 3171 3546 B 5046 3752 B 6921 3208 B LT3 6318 3806 M (50) Rshow 6426 3806 M 6750 3806 L 1296 1823 M 1296 1823 L 3171 2097 L 5046 2239 L 6921 2301 L 6534 3806 C 1296 1823 C 3171 2097 C 5046 2239 C 6921 2301 C LT4 6318 3626 M (100) Rshow 6426 3626 M 6750 3626 L 1296 1341 M 1296 1341 L 3171 1532 L 5046 1633 L 6921 1669 L 6534 3626 T 1296 1341 T 3171 1532 T 5046 1633 T 6921 1669 T LT5 6318 3446 M (1000) Rshow 6426 3446 M 6750 3446 L 1296 717 M 1296 717 L 3171 745 L 5046 758 L 6921 766 L 6534 3446 S 1296 717 S 3171 745 S 5046 758 S 6921 766 S stroke grestore end showpage %%EndDocument endTexFig -57 899 a fg(Figure)14 b(6:)19 b fd(Compare-And-Sw)n(ap)14 b(usin\ g)g(queuelo)q(c)o(ks.)20 b(Throughput)14 b(drops)h(o\013)f(as)h(with)f(the)h (simple)e(spinloc)o(k-based)i(imple-)-57 945 y(men)n(tation.)-32 995 y 14208860 11840716 3289088 3289088 50651955 36443095 startTexFig %%BeginDocument: Plots/Family.queue.P/plot.sequent.ps /gnudict 40 dict def gnudict begin /Color false def /gnulinewidth 5.000 def /vshift -60 def /dl {10 mul} def /hpt 31.5 def /vpt 31.5 def /vpt2 vpt 2 mul def /hpt2 hpt 2 mul def /Lshow { currentpoint stroke moveto 0 vshift rmoveto show } def /Rshow { currentpoint stroke moveto dup stringwidth pop neg vshift rmoveto show } def /Cshow { currentpoint stroke moveto dup stringwidth pop -2 div vshift rmoveto show } def /DL { Color {setrgbcolor [] 0 setdash pop} {pop pop pop 0 setdash} ifelse } def /BL { stroke gnulinewidth 2 mul setlinewidth } def /AL { stroke gnulinewidth 2 div setlinewidth } def /PL { stroke gnulinewidth setlinewidth } def /LTb { BL [] 0 0 0 DL } def /LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def /LT0 { PL [] 0 1 0 DL } def /LT1 { PL [4 dl 2 dl] 0 0 1 DL } def /LT2 { PL [2 dl 3 dl] 1 0 0 DL } def /LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def /LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def /LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def /LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def /LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def /LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def /M {moveto} def /L {lineto} def /P { stroke [] 0 setdash currentlinewidth 2 div sub moveto 0 currentlinewidth rlineto stroke } def /D { stroke [] 0 setdash 2 copy vpt add moveto hpt neg vpt neg rlineto hpt vpt neg rlineto hpt vpt rlineto hpt neg vpt rlineto closepath stroke P } def /A { stroke [] 0 setdash vpt sub moveto 0 vpt2 rlineto currentpoint stroke moveto hpt neg vpt neg rmoveto hpt2 0 rlineto stroke } def /B { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add moveto 0 vpt2 neg rlineto hpt2 0 rlineto 0 vpt2 rlineto hpt2 neg 0 rlineto closepath stroke P } def /C { stroke [] 0 setdash exch hpt sub exch vpt add moveto hpt2 vpt2 neg rlineto currentpoint stroke moveto hpt2 neg 0 rmoveto hpt2 vpt2 rlineto stroke } def /T { stroke [] 0 setdash 2 copy vpt 1.12 mul add moveto hpt neg vpt -1.62 mul rlineto hpt 2 mul 0 rlineto hpt neg vpt 1.62 mul rlineto closepath stroke P } def /S { 2 copy A C} def end gnudict begin gsave 50 50 translate 0.100 0.100 scale 0 setgray /Courier findfont 180 scalefont setfont newpath LTa 1296 631 M 6921 631 L LTb 1296 631 M 1359 631 L 6921 631 M 6858 631 L 1188 631 M (0) Rshow 1296 1126 M 1359 1126 L 6921 1126 M 6858 1126 L 1188 1126 M (50000) Rshow 1296 1621 M 1359 1621 L 6921 1621 M 6858 1621 L 1188 1621 M (100000) Rshow 1296 2115 M 1359 2115 L 6921 2115 M 6858 2115 L 1188 2115 M (150000) Rshow 1296 2610 M 1359 2610 L 6921 2610 M 6858 2610 L 1188 2610 M (200000) Rshow 1296 3105 M 1359 3105 L 6921 3105 M 6858 3105 L 1188 3105 M (250000) Rshow 1296 3600 M 1359 3600 L 6921 3600 M 6858 3600 L 1188 3600 M (300000) Rshow 1296 4094 M 1359 4094 L 6921 4094 M 6858 4094 L 1188 4094 M (350000) Rshow 1296 4589 M 1359 4589 L 6921 4589 M 6858 4589 L 1188 4589 M (400000) Rshow 1627 631 M 1627 694 L 1627 4589 M 1627 4526 L 1627 451 M (2) Cshow 2289 631 M 2289 694 L 2289 4589 M 2289 4526 L 2289 451 M (4) Cshow 2950 631 M 2950 694 L 2950 4589 M 2950 4526 L 2950 451 M (6) Cshow 3612 631 M 3612 694 L 3612 4589 M 3612 4526 L 3612 451 M (8) Cshow 4274 631 M 4274 694 L 4274 4589 M 4274 4526 L 4274 451 M (10) Cshow 4936 631 M 4936 694 L 4936 4589 M 4936 4526 L 4936 451 M (12) Cshow 5597 631 M 5597 694 L 5597 4589 M 5597 4526 L 5597 451 M (14) Cshow 6259 631 M 6259 694 L 6259 4589 M 6259 4526 L 6259 451 M (16) Cshow 6921 631 M 6921 694 L 6921 4589 M 6921 4526 L 6921 451 M (18) Cshow LTb 1296 631 M 6921 631 L 6921 4589 L 1296 4589 L 1296 631 L 180 2610 M currentpoint gsave translate 90 rotate 0 0 moveto (Five second Throughput) Cshow grestore 4108 271 M (Number of processors) Cshow 4108 4769 M (Queuelock Private Compare-And-Swap Symmetry) Cshow LT0 LT0 6318 4346 M (1) Rshow 6426 4346 M 6750 4346 L 1296 2283 M 1296 2283 L 1627 3191 L 1958 4330 L 2289 4515 L 2620 4462 L 2950 4375 L 3281 4359 L 3612 4273 L 3943 4244 L 4274 4182 L 4605 4125 L 4936 4252 L 5267 4354 L 5597 4228 L 5928 4334 L 6259 4112 L 6590 4238 L 6921 4273 L 6534 4346 D 1296 2283 D 1627 3191 D 1958 4330 D 2289 4515 D 2620 4462 D 2950 4375 D 3281 4359 D 3612 4273 D 3943 4244 D 4274 4182 D 4605 4125 D 4936 4252 D 5267 4354 D 5597 4228 D 5928 4334 D 6259 4112 D 6590 4238 D 6921 4273 D LT1 6318 4166 M (5) Rshow 6426 4166 M 6750 4166 L 1296 2022 M 1296 2022 L 1627 2869 L 1958 3968 L 2289 4311 L 2620 4486 L 2950 4392 L 3281 4371 L 3612 4270 L 3943 4232 L 4274 4161 L 4605 4107 L 4936 4291 L 5267 4336 L 5597 4225 L 5928 4307 L 6259 4212 L 6590 4252 L 6921 4278 L 6534 4166 A 1296 2022 A 1627 2869 A 1958 3968 A 2289 4311 A 2620 4486 A 2950 4392 A 3281 4371 A 3612 4270 A 3943 4232 A 4274 4161 A 4605 4107 A 4936 4291 A 5267 4336 A 5597 4225 A 5928 4307 A 6259 4212 A 6590 4252 A 6921 4278 A LT2 6318 3986 M (10) Rshow 6426 3986 M 6750 3986 L 1296 1812 M 1296 1812 L 1627 2581 L 1958 3558 L 2289 4314 L 2620 4497 L 2950 4418 L 3281 4371 L 3612 4302 L 3943 4248 L 4274 4198 L 4605 4205 L 4936 4256 L 5267 4242 L 5597 4305 L 5928 4303 L 6259 4323 L 6590 4299 L 6921 4313 L 6534 3986 B 1296 1812 B 1627 2581 B 1958 3558 B 2289 4314 B 2620 4497 B 2950 4418 B 3281 4371 B 3612 4302 B 3943 4248 B 4274 4198 B 4605 4205 B 4936 4256 B 5267 4242 B 5597 4305 B 5928 4303 B 6259 4323 B 6590 4299 B 6921 4313 B LT3 6318 3806 M (50) Rshow 6426 3806 M 6750 3806 L 1296 1165 M 1296 1165 L 1627 1606 L 1958 2087 L 2289 2568 L 2620 3056 L 2950 3531 L 3281 3988 L 3612 4286 L 3943 4474 L 4274 4438 L 4605 4372 L 4936 4327 L 5267 4316 L 5597 4287 L 5928 4237 L 6259 4220 L 6590 4236 L 6921 4263 L 6534 3806 C 1296 1165 C 1627 1606 C 1958 2087 C 2289 2568 C 2620 3056 C 2950 3531 C 3281 3988 C 3612 4286 C 3943 4474 C 4274 4438 C 4605 4372 C 4936 4327 C 5267 4316 C 5597 4287 C 5928 4237 C 6259 4220 C 6590 4236 C 6921 4263 C LT4 6318 3626 M (100) Rshow 6426 3626 M 6750 3626 L 1296 947 M 1296 947 L 1627 1232 L 1958 1529 L 2289 1825 L 2620 2126 L 2950 2424 L 3281 2717 L 3612 3012 L 3943 3298 L 4274 3596 L 4605 3876 L 4936 4162 L 5267 4290 L 5597 4473 L 5928 4465 L 6259 4412 L 6590 4352 L 6921 4337 L 6534 3626 T 1296 947 T 1627 1232 T 1958 1529 T 2289 1825 T 2620 2126 T 2950 2424 T 3281 2717 T 3612 3012 T 3943 3298 T 4274 3596 T 4605 3876 T 4936 4162 T 5267 4290 T 5597 4473 T 5928 4465 T 6259 4412 T 6590 4352 T 6921 4337 T LT5 6318 3446 M (1000) Rshow 6426 3446 M 6750 3446 L 1296 669 M 1296 669 L 1627 707 L 1958 744 L 2289 782 L 2620 820 L 2950 858 L 3281 896 L 3612 934 L 3943 971 L 4274 1009 L 4605 1047 L 4936 1085 L 5267 1123 L 5597 1159 L 5928 1198 L 6259 1236 L 6590 1275 L 6921 1311 L 6534 3446 S 1296 669 S 1627 707 S 1958 744 S 2289 782 S 2620 820 S 2950 858 S 3281 896 S 3612 934 S 3943 971 S 4274 1009 S 4605 1047 S 4936 1085 S 5267 1123 S 5597 1159 S 5928 1198 S 6259 1236 S 6590 1275 S 6921 1311 S stroke grestore end showpage %%EndDocument endTexFig 950 w 14208860 11840716 3289088 3289088 50651955 36443095 startTexFig %%BeginDocument: Plots/Family.queue.P/plot.omron.ps /gnudict 40 dict def gnudict begin /Color false def /gnulinewidth 5.000 def /vshift -60 def /dl {10 mul} def /hpt 31.5 def /vpt 31.5 def /vpt2 vpt 2 mul def /hpt2 hpt 2 mul def /Lshow { currentpoint stroke moveto 0 vshift rmoveto show } def /Rshow { currentpoint stroke moveto dup stringwidth pop neg vshift rmoveto show } def /Cshow { currentpoint stroke moveto dup stringwidth pop -2 div vshift rmoveto show } def /DL { Color {setrgbcolor [] 0 setdash pop} {pop pop pop 0 setdash} ifelse } def /BL { stroke gnulinewidth 2 mul setlinewidth } def /AL { stroke gnulinewidth 2 div setlinewidth } def /PL { stroke gnulinewidth setlinewidth } def /LTb { BL [] 0 0 0 DL } def /LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def /LT0 { PL [] 0 1 0 DL } def /LT1 { PL [4 dl 2 dl] 0 0 1 DL } def /LT2 { PL [2 dl 3 dl] 1 0 0 DL } def /LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def /LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def /LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def /LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def /LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def /LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def /M {moveto} def /L {lineto} def /P { stroke [] 0 setdash currentlinewidth 2 div sub moveto 0 currentlinewidth rlineto stroke } def /D { stroke [] 0 setdash 2 copy vpt add moveto hpt neg vpt neg rlineto hpt vpt neg rlineto hpt vpt rlineto hpt neg vpt rlineto closepath stroke P } def /A { stroke [] 0 setdash vpt sub moveto 0 vpt2 rlineto currentpoint stroke moveto hpt neg vpt neg rmoveto hpt2 0 rlineto stroke } def /B { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add moveto 0 vpt2 neg rlineto hpt2 0 rlineto 0 vpt2 rlineto hpt2 neg 0 rlineto closepath stroke P } def /C { stroke [] 0 setdash exch hpt sub exch vpt add moveto hpt2 vpt2 neg rlineto currentpoint stroke moveto hpt2 neg 0 rmoveto hpt2 vpt2 rlineto stroke } def /T { stroke [] 0 setdash 2 copy vpt 1.12 mul add moveto hpt neg vpt -1.62 mul rlineto hpt 2 mul 0 rlineto hpt neg vpt 1.62 mul rlineto closepath stroke P } def /S { 2 copy A C} def end gnudict begin gsave 50 50 translate 0.100 0.100 scale 0 setgray /Courier findfont 180 scalefont setfont newpath LTa 1296 631 M 6921 631 L LTb 1296 631 M 1359 631 L 6921 631 M 6858 631 L 1188 631 M (0) Rshow 1296 1126 M 1359 1126 L 6921 1126 M 6858 1126 L 1188 1126 M (200000) Rshow 1296 1621 M 1359 1621 L 6921 1621 M 6858 1621 L 1188 1621 M (400000) Rshow 1296 2115 M 1359 2115 L 6921 2115 M 6858 2115 L 1188 2115 M (600000) Rshow 1296 2610 M 1359 2610 L 6921 2610 M 6858 2610 L 1188 2610 M (800000) Rshow 1296 3105 M 1359 3105 L 6921 3105 M 6858 3105 L 1188 3105 M (1e+06) Rshow 1296 3600 M 1359 3600 L 6921 3600 M 6858 3600 L 1188 3600 M (1.2e+06) Rshow 1296 4094 M 1359 4094 L 6921 4094 M 6858 4094 L 1188 4094 M (1.4e+06) Rshow 1296 4589 M 1359 4589 L 6921 4589 M 6858 4589 L 1188 4589 M (1.6e+06) Rshow 1296 631 M 1296 694 L 1296 4589 M 1296 4526 L 1296 451 M (1) Cshow 2234 631 M 2234 694 L 2234 4589 M 2234 4526 L 2234 451 M % 3171 631 M 3171 694 L 3171 4589 M 3171 4526 L 3171 451 M (2) Cshow 4109 631 M 4109 694 L 4109 4589 M 4109 4526 L 4109 451 M % 5046 631 M 5046 694 L 5046 4589 M 5046 4526 L 5046 451 M (3) Cshow 5984 631 M 5984 694 L 5984 4589 M 5984 4526 L 5984 451 M % 6921 631 M 6921 694 L 6921 4589 M 6921 4526 L 6921 451 M (4) Cshow LTb 1296 631 M 6921 631 L 6921 4589 L 1296 4589 L 1296 631 L 180 2610 M currentpoint gsave translate 90 rotate 0 0 moveto (Five second Throughput) Cshow grestore 4108 271 M (Number of processors) Cshow 4108 4769 M (Queuelock Private Compare-And-Swap Luna88k) Cshow LT0 LT0 6318 4346 M (1) Rshow 6426 4346 M 6750 4346 L 1296 2197 M 1296 2197 L 3171 3293 L 5046 4324 L 6921 4182 L 6534 4346 D 1296 2197 D 3171 3293 D 5046 4324 D 6921 4182 D LT1 6318 4166 M (5) Rshow 6426 4166 M 6750 4166 L 1296 1969 M 1296 1969 L 3171 2975 L 5046 3975 L 6921 3963 L 6534 4166 A 1296 1969 A 3171 2975 A 5046 3975 A 6921 3963 A LT2 6318 3986 M (10) Rshow 6426 3986 M 6750 3986 L 1296 1776 M 1296 1776 L 3171 2666 L 5046 3552 L 6921 4212 L 6534 3986 B 1296 1776 B 3171 2666 B 5046 3552 B 6921 4212 B LT3 6318 3806 M (50) Rshow 6426 3806 M 6750 3806 L 1296 1153 M 1296 1153 L 3171 1617 L 5046 2089 L 6921 2496 L 6534 3806 C 1296 1153 C 3171 1617 C 5046 2089 C 6921 2496 C LT4 6318 3626 M (100) Rshow 6426 3626 M 6750 3626 L 1296 942 M 1296 942 L 3171 1231 L 5046 1523 L 6921 1799 L 6534 3626 T 1296 942 T 3171 1231 T 5046 1523 T 6921 1799 T LT5 6318 3446 M (1000) Rshow 6426 3446 M 6750 3446 L 1296 668 M 1296 668 L 3171 706 L 5046 743 L 6921 779 L 6534 3446 S 1296 668 S 3171 706 S 5046 743 S 6921 779 S stroke grestore end showpage %%EndDocument endTexFig -57 1819 a fg(Figure)f(7:)j fd(Compare-And-Sw)n(ap)c(using)g(queu\ elo)r(c)o(ks.)18 b(Each)13 b(thread)h(accesses)i(a)e(di\013eren)o(t)g(lo)q (cation.)j(Throughput)d(do)q(es)g(not)-57 1864 y(drop)g(o\013)g(as)g(pro)q (cessors)i(are)e(added)g(b)r(ecause)h(there)g(is)f(neither)h(loc)o(k-con)o (tention)e(nor)h(useless)h(lo)q(c)o(k)f(acquisitions.)-57 1997 y fg(con)o(ten\ tion)c(with)g(lock-based)h(concurrent)g(ob)r(jects,)h(are)f(not)-57 2042 y (e\013ective)k(when)f(used)i(with)e(non-bloc)o(king)g(concurrent)h(ob-)-57 2088 y(jects.)k(They)c(create)g(a)f(situation)f(in)g(whic)o(h)h(threads)h(que\ ue)-57 2133 y(on)k(the)h(lo)q(c)o(k)f(only)g(to)g(fail)f(on)h(the)h(compare.) 33 b(Through-)-57 2178 y(put)23 b(decreases)i(as)e(pro)q(cessors)i(are)e(adde\ d)g(b)q(ecause)i(the)-57 2224 y(n)o(um)m(b)r(er)g(of)f(failed)f(Compare-And-S\ w)n(aps)i(gro)n(ws.)51 b(W)l(e)-57 2269 y(can)18 b(eliminate)e(the)i(e\013ect) i(of)d(failure)g(on)h(queueing)g(dela)n(y)-57 2314 y(and)10 b(therefore)i(thr\ oughput)f(b)o(y)f(prematurely)g(ab)q(orting)g(the)-57 2360 y(Compare-And-Sw)n (ap)j(if)g(the)i(shared)g(v)m(alue)f(and)g(old)f(v)m(alue)-57 2405 y(b)q(ecom\ e)h(unequal)f(while)h(trying)f(to)h(acquire)g(the)h(lock.)-57 2559 y fh(4)56 b (Related)17 b(w)o(ork)-7 2655 y fg(Our)c(use)g(of)f(roll-out)f(is)h(patterned) i(after)e(the)h(optimistic)-57 2700 y(synchronization)g(p)r(olicies)h(describ) r(ed)h(for)f(T)l(rellis)g([Moss)h(&)1013 1997 y(Kohler)i(87],)g(Mac)o(h)h(and) f(T)l(aos)g([Bershad)i(et)e(al.)28 b(92],)17 b(but)1013 2042 y(di\013ers)j (in)g(that)f(it)h(is)f(in)o(tended)i(for)e(use)h(on)g(a)f(m)n(ultipro-)1013 2088 y(cessor.)42 b(As)22 b(such,)h(p)q(erformance,)f(as)g(w)o(ell)f(as)g(pro\ gress,)1013 2133 y(is)16 b(imp)o(ortan)o(t.)24 b(Herlih)o(y)16 b([Herlih)n (y)g(90])f(has)h(sho)o(wn)g(ho)o(w)g(to)1013 2178 y(implemen)l(t)f(non-blocki\ ng)f(concurrent)h(ob)s(jects)h(using)e(the)1013 2224 y(load-link)m(ed/store-c\ onditional)19 b(op)q(eration)h(found)f(on)h(ar-)1013 2269 y(c)o(hitectures)f (suc)o(h)e(as)f(the)i(MIPS)e(R4000)g([Mirapuri)f(et)i(al.)1013 2314 y(92])12 b (and)i(Digital's)d(Alpha)i([Sites)h(92].)j(Herlih)o(y)c(sho)o(ws)h(that)1013 2360 y(the)e(load-link)m(ed/store-conditional)e(op)q(eration)i(is)f(more)f (ef-)1013 2405 y(\014cien)o(t)16 b(and)f(simpler)g(to)g(use)i(in)e(non-bloc)o (king)g(algorithms)1013 2450 y(than)h(Compare-And-Sw)n(ap)h(\(although)f(they) h(are)g(equiv)m(a-)1013 2496 y(len)o(tly)h(p)q(o)o(w)o(erful\).)32 b(As)20 b (in)e(our)h(w)o(ork,)g(he)g(examines)f(p)q(er-)1013 2541 y(formance)j(in)h (the)h(presence)j(of)21 b(conten)o(tion)h fj(and)h fg(in)f(the)1013 2586 y (absence)e(of)f(hardw)o(are)g(supp)r(ort)g(for)g(the)h(\\righ)n(t")f(atomic) 1013 2632 y(primitiv)l(e.)35 b(He)19 b(do)q(es)h(not)g(suggest)g(a)f(strategy) g(for)g(deal-)1013 2677 y(ing)24 b(with)h(inopp)q(ortune)h(preemption)e(when) i(sim)m(ulating)p eop %%Page: 9 9 bop -32 75 a 14208860 11840716 3289088 3289088 50651955 36443095 startTexFig %%BeginDocument: Plots/Family.xcas/plot.sequent.ps /gnudict 40 dict def gnudict begin /Color false def /gnulinewidth 5.000 def /vshift -60 def /dl {10 mul} def /hpt 31.5 def /vpt 31.5 def /vpt2 vpt 2 mul def /hpt2 hpt 2 mul def /Lshow { currentpoint stroke moveto 0 vshift rmoveto show } def /Rshow { currentpoint stroke moveto dup stringwidth pop neg vshift rmoveto show } def /Cshow { currentpoint stroke moveto dup stringwidth pop -2 div vshift rmoveto show } def /DL { Color {setrgbcolor [] 0 setdash pop} {pop pop pop 0 setdash} ifelse } def /BL { stroke gnulinewidth 2 mul setlinewidth } def /AL { stroke gnulinewidth 2 div setlinewidth } def /PL { stroke gnulinewidth setlinewidth } def /LTb { BL [] 0 0 0 DL } def /LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def /LT0 { PL [] 0 1 0 DL } def /LT1 { PL [4 dl 2 dl] 0 0 1 DL } def /LT2 { PL [2 dl 3 dl] 1 0 0 DL } def /LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def /LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def /LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def /LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def /LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def /LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def /M {moveto} def /L {lineto} def /P { stroke [] 0 setdash currentlinewidth 2 div sub moveto 0 currentlinewidth rlineto stroke } def /D { stroke [] 0 setdash 2 copy vpt add moveto hpt neg vpt neg rlineto hpt vpt neg rlineto hpt vpt rlineto hpt neg vpt rlineto closepath stroke P } def /A { stroke [] 0 setdash vpt sub moveto 0 vpt2 rlineto currentpoint stroke moveto hpt neg vpt neg rmoveto hpt2 0 rlineto stroke } def /B { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add moveto 0 vpt2 neg rlineto hpt2 0 rlineto 0 vpt2 rlineto hpt2 neg 0 rlineto closepath stroke P } def /C { stroke [] 0 setdash exch hpt sub exch vpt add moveto hpt2 vpt2 neg rlineto currentpoint stroke moveto hpt2 neg 0 rmoveto hpt2 vpt2 rlineto stroke } def /T { stroke [] 0 setdash 2 copy vpt 1.12 mul add moveto hpt neg vpt -1.62 mul rlineto hpt 2 mul 0 rlineto hpt neg vpt 1.62 mul rlineto closepath stroke P } def /S { 2 copy A C} def end gnudict begin gsave 50 50 translate 0.100 0.100 scale 0 setgray /Courier findfont 180 scalefont setfont newpath LTa 1296 631 M 6921 631 L LTb 1296 631 M 1359 631 L 6921 631 M 6858 631 L 1188 631 M (0) Rshow 1296 1291 M 1359 1291 L 6921 1291 M 6858 1291 L 1188 1291 M (50000) Rshow 1296 1950 M 1359 1950 L 6921 1950 M 6858 1950 L 1188 1950 M (100000) Rshow 1296 2610 M 1359 2610 L 6921 2610 M 6858 2610 L 1188 2610 M (150000) Rshow 1296 3270 M 1359 3270 L 6921 3270 M 6858 3270 L 1188 3270 M (200000) Rshow 1296 3929 M 1359 3929 L 6921 3929 M 6858 3929 L 1188 3929 M (250000) Rshow 1296 4589 M 1359 4589 L 6921 4589 M 6858 4589 L 1188 4589 M (300000) Rshow 1627 631 M 1627 694 L 1627 4589 M 1627 4526 L 1627 451 M (2) Cshow 2289 631 M 2289 694 L 2289 4589 M 2289 4526 L 2289 451 M (4) Cshow 2950 631 M 2950 694 L 2950 4589 M 2950 4526 L 2950 451 M (6) Cshow 3612 631 M 3612 694 L 3612 4589 M 3612 4526 L 3612 451 M (8) Cshow 4274 631 M 4274 694 L 4274 4589 M 4274 4526 L 4274 451 M (10) Cshow 4936 631 M 4936 694 L 4936 4589 M 4936 4526 L 4936 451 M (12) Cshow 5597 631 M 5597 694 L 5597 4589 M 5597 4526 L 5597 451 M (14) Cshow 6259 631 M 6259 694 L 6259 4589 M 6259 4526 L 6259 451 M (16) Cshow 6921 631 M 6921 694 L 6921 4589 M 6921 4526 L 6921 451 M (18) Cshow LTb 1296 631 M 6921 631 L 6921 4589 L 1296 4589 L 1296 631 L 180 2610 M currentpoint gsave translate 90 rotate 0 0 moveto (Five second Throughput) Cshow grestore 4108 271 M (Number of processors) Cshow 4108 4769 M (Compare* and Compare and Swap Symmetry) Cshow LT0 LT0 6318 4346 M (1) Rshow 6426 4346 M 6750 4346 L 1296 3937 M 1296 3937 L 1627 3828 L 1958 3175 L 2289 3413 L 2620 3149 L 2950 2867 L 3281 2737 L 3612 2685 L 3943 2584 L 4274 2472 L 4605 2359 L 4936 2297 L 5267 2279 L 5597 2269 L 5928 2252 L 6259 2226 L 6590 2182 L 6921 2128 L 6534 4346 D 1296 3937 D 1627 3828 D 1958 3175 D 2289 3413 D 2620 3149 D 2950 2867 D 3281 2737 D 3612 2685 D 3943 2584 D 4274 2472 D 4605 2359 D 4936 2297 D 5267 2279 D 5597 2269 D 5928 2252 D 6259 2226 D 6590 2182 D 6921 2128 D LT1 6318 4166 M (5) Rshow 6426 4166 M 6750 4166 L 1296 3222 M 1296 3222 L 1627 3404 L 1958 2890 L 2289 3068 L 2620 2834 L 2950 2711 L 3281 2668 L 3612 2634 L 3943 2574 L 4274 2517 L 4605 2431 L 4936 2375 L 5267 2285 L 5597 2272 L 5928 2156 L 6259 2141 L 6590 2082 L 6921 2030 L 6534 4166 A 1296 3222 A 1627 3404 A 1958 2890 A 2289 3068 A 2620 2834 A 2950 2711 A 3281 2668 A 3612 2634 A 3943 2574 A 4274 2517 A 4605 2431 A 4936 2375 A 5267 2285 A 5597 2272 A 5928 2156 A 6259 2141 A 6590 2082 A 6921 2030 A LT2 6318 3986 M (10) Rshow 6426 3986 M 6750 3986 L 1296 2704 M 1296 2704 L 1627 2963 L 1958 2536 L 2289 2575 L 2620 2486 L 2950 2399 L 3281 2384 L 3612 2383 L 3943 2333 L 4274 2301 L 4605 2254 L 4936 2173 L 5267 2147 L 5597 2061 L 5928 2005 L 6259 2009 L 6590 1972 L 6921 1914 L 6534 3986 B 1296 2704 B 1627 2963 B 1958 2536 B 2289 2575 B 2620 2486 B 2950 2399 B 3281 2384 B 3612 2383 B 3943 2333 B 4274 2301 B 4605 2254 B 4936 2173 B 5267 2147 B 5597 2061 B 5928 2005 B 6259 2009 B 6590 1972 B 6921 1914 B LT3 6318 3806 M (50) Rshow 6426 3806 M 6750 3806 L 1296 1431 M 1296 1431 L 1627 1623 L 1958 1738 L 2289 1758 L 2620 1637 L 2950 1598 L 3281 1504 L 3612 1462 L 3943 1456 L 4274 1452 L 4605 1437 L 4936 1431 L 5267 1393 L 5597 1412 L 5928 1399 L 6259 1382 L 6590 1366 L 6921 1345 L 6534 3806 C 1296 1431 C 1627 1623 C 1958 1738 C 2289 1758 C 2620 1637 C 2950 1598 C 3281 1504 C 3612 1462 C 3943 1456 C 4274 1452 C 4605 1437 C 4936 1431 C 5267 1393 C 5597 1412 C 5928 1399 C 6259 1382 C 6590 1366 C 6921 1345 C LT4 6318 3626 M (100) Rshow 6426 3626 M 6750 3626 L 1296 1083 M 1296 1083 L 1627 1209 L 1958 1280 L 2289 1308 L 2620 1327 L 2950 1300 L 3281 1272 L 3612 1229 L 3943 1200 L 4274 1164 L 4605 1144 L 4936 1133 L 5267 1124 L 5597 1117 L 5928 1107 L 6259 1096 L 6590 1071 L 6921 1078 L 6534 3626 T 1296 1083 T 1627 1209 T 1958 1280 T 2289 1308 T 2620 1327 T 2950 1300 T 3281 1272 T 3612 1229 T 3943 1200 T 4274 1164 T 4605 1144 T 4936 1133 T 5267 1124 T 5597 1117 T 5928 1107 T 6259 1096 T 6590 1071 T 6921 1078 T LT5 6318 3446 M (1000) Rshow 6426 3446 M 6750 3446 L 1296 682 M 1296 682 L 1627 699 L 1958 707 L 2289 711 L 2620 713 L 2950 715 L 3281 718 L 3612 717 L 3943 718 L 4274 717 L 4605 719 L 4936 717 L 5267 719 L 5597 719 L 5928 719 L 6259 716 L 6590 717 L 6921 717 L 6534 3446 S 1296 682 S 1627 699 S 1958 707 S 2289 711 S 2620 713 S 2950 715 S 3281 718 S 3612 717 S 3943 718 S 4274 717 S 4605 719 S 4936 717 S 5267 719 S 5597 719 S 5928 719 S 6259 716 S 6590 717 S 6921 717 S stroke grestore end showpage %%EndDocument endTexFig 950 w 14208860 11840716 3289088 3289088 50651955 36443095 startTexFig %%BeginDocument: Plots/Family.xcas/plot.omron.ps /gnudict 40 dict def gnudict begin /Color false def /gnulinewidth 5.000 def /vshift -60 def /dl {10 mul} def /hpt 31.5 def /vpt 31.5 def /vpt2 vpt 2 mul def /hpt2 hpt 2 mul def /Lshow { currentpoint stroke moveto 0 vshift rmoveto show } def /Rshow { currentpoint stroke moveto dup stringwidth pop neg vshift rmoveto show } def /Cshow { currentpoint stroke moveto dup stringwidth pop -2 div vshift rmoveto show } def /DL { Color {setrgbcolor [] 0 setdash pop} {pop pop pop 0 setdash} ifelse } def /BL { stroke gnulinewidth 2 mul setlinewidth } def /AL { stroke gnulinewidth 2 div setlinewidth } def /PL { stroke gnulinewidth setlinewidth } def /LTb { BL [] 0 0 0 DL } def /LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def /LT0 { PL [] 0 1 0 DL } def /LT1 { PL [4 dl 2 dl] 0 0 1 DL } def /LT2 { PL [2 dl 3 dl] 1 0 0 DL } def /LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def /LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def /LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def /LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def /LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def /LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def /M {moveto} def /L {lineto} def /P { stroke [] 0 setdash currentlinewidth 2 div sub moveto 0 currentlinewidth rlineto stroke } def /D { stroke [] 0 setdash 2 copy vpt add moveto hpt neg vpt neg rlineto hpt vpt neg rlineto hpt vpt rlineto hpt neg vpt rlineto closepath stroke P } def /A { stroke [] 0 setdash vpt sub moveto 0 vpt2 rlineto currentpoint stroke moveto hpt neg vpt neg rmoveto hpt2 0 rlineto stroke } def /B { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add moveto 0 vpt2 neg rlineto hpt2 0 rlineto 0 vpt2 rlineto hpt2 neg 0 rlineto closepath stroke P } def /C { stroke [] 0 setdash exch hpt sub exch vpt add moveto hpt2 vpt2 neg rlineto currentpoint stroke moveto hpt2 neg 0 rmoveto hpt2 vpt2 rlineto stroke } def /T { stroke [] 0 setdash 2 copy vpt 1.12 mul add moveto hpt neg vpt -1.62 mul rlineto hpt 2 mul 0 rlineto hpt neg vpt 1.62 mul rlineto closepath stroke P } def /S { 2 copy A C} def end gnudict begin gsave 50 50 translate 0.100 0.100 scale 0 setgray /Courier findfont 180 scalefont setfont newpath LTa 1296 631 M 6921 631 L LTb 1296 631 M 1359 631 L 6921 631 M 6858 631 L 1188 631 M (0) Rshow 1296 1291 M 1359 1291 L 6921 1291 M 6858 1291 L 1188 1291 M (200000) Rshow 1296 1950 M 1359 1950 L 6921 1950 M 6858 1950 L 1188 1950 M (400000) Rshow 1296 2610 M 1359 2610 L 6921 2610 M 6858 2610 L 1188 2610 M (600000) Rshow 1296 3270 M 1359 3270 L 6921 3270 M 6858 3270 L 1188 3270 M (800000) Rshow 1296 3929 M 1359 3929 L 6921 3929 M 6858 3929 L 1188 3929 M (1e+06) Rshow 1296 4589 M 1359 4589 L 6921 4589 M 6858 4589 L 1188 4589 M (1.2e+06) Rshow 1296 631 M 1296 694 L 1296 4589 M 1296 4526 L 1296 451 M (1) Cshow 2234 631 M 2234 694 L 2234 4589 M 2234 4526 L 2234 451 M % 3171 631 M 3171 694 L 3171 4589 M 3171 4526 L 3171 451 M (2) Cshow 4109 631 M 4109 694 L 4109 4589 M 4109 4526 L 4109 451 M % 5046 631 M 5046 694 L 5046 4589 M 5046 4526 L 5046 451 M (3) Cshow 5984 631 M 5984 694 L 5984 4589 M 5984 4526 L 5984 451 M % 6921 631 M 6921 694 L 6921 4589 M 6921 4526 L 6921 451 M (4) Cshow LTb 1296 631 M 6921 631 L 6921 4589 L 1296 4589 L 1296 631 L 180 2610 M currentpoint gsave translate 90 rotate 0 0 moveto (Five second Throughput) Cshow grestore 4108 271 M (Number of processors) Cshow 4108 4769 M (Compare* and Compare and Swap Luna88k) Cshow LT0 LT0 6318 4346 M (1) Rshow 6426 4346 M 6750 4346 L 1296 4028 M 1296 4028 L 3171 3499 L 5046 3185 L 6921 2778 L 6534 4346 D 1296 4028 D 3171 3499 D 5046 3185 D 6921 2778 D LT1 6318 4166 M (5) Rshow 6426 4166 M 6750 4166 L 1296 3315 M 1296 3315 L 3171 3373 L 5046 2958 L 6921 2689 L 6534 4166 A 1296 3315 A 3171 3373 A 5046 2958 A 6921 2689 A LT2 6318 3986 M (10) Rshow 6426 3986 M 6750 3986 L 1296 2758 M 1296 2758 L 3171 2925 L 5046 2745 L 6921 2457 L 6534 3986 B 1296 2758 B 3171 2925 B 5046 2745 B 6921 2457 B LT3 6318 3806 M (50) Rshow 6426 3806 M 6750 3806 L 1296 1430 M 1296 1430 L 3171 1610 L 5046 1698 L 6921 1732 L 6534 3806 C 1296 1430 C 3171 1610 C 5046 1698 C 6921 1732 C LT4 6318 3626 M (100) Rshow 6426 3626 M 6750 3626 L 1296 1078 M 1296 1078 L 3171 1197 L 5046 1260 L 6921 1290 L 6534 3626 T 1296 1078 T 3171 1197 T 5046 1260 T 6921 1290 T LT5 6318 3446 M (1000) Rshow 6426 3446 M 6750 3446 L 1296 681 M 1296 681 L 3171 698 L 5046 706 L 6921 710 L 6534 3446 S 1296 681 S 3171 698 S 5046 706 S 6921 710 S stroke grestore end showpage %%EndDocument endTexFig -57 902 a fg(Figure)16 b(8:)21 b fd(Compare*-And-Compa)o(re-And-S\ w)m(ap.)i(Throughput)15 b(drops)h(o\013)g(only)e(gradually)h(or)g(not)g(at)h (all)e(as)i(pro)q(cessors)-57 947 y(are)e(added.)19 b(Unnecessary)d(sync)o (hronization)e(op)q(erations)g(ha)n(v)o(e)g(b)r(een)g(eliminated.)-57 1080 y fg(the)i(primitiv)l(e)f(on)g(architectures)h(that)f(do)g(not)g(pro)o(vide)g (it.)-57 1125 y(He)22 b(uses)g(an)f(exp)q(onen)o(tial)f(bac)o(k)o(o\013)h(str\ ategy)h(at)f(the)h(ob-)-57 1170 y(ject)g(lev)n(el,)g(rather)g(than)f(at)g(the) g(synchronization)f(lev)o(el,)-57 1216 y(to)c(in)n(tro)r(duce)h(dela)n(ys)g (during)f(p)q(erio)q(ds)h(of)e(con)o(tention)g(and)-57 1261 y(sho)o(ws)20 b (that)g(this)g(preven)o(ts)g(throughput)h(from)d(dropping)-57 1306 y(o\013)12 b(with)g(con)o(tention.)17 b(It)12 b(is)g(unclear)h(whether)g(the)g(same)e (ef-)-57 1352 y(fect)i(could)f(b)r(e)g(obtained)h(b)o(y)f(implemen)l(ting)g (the)h(sim)m(ulated)-57 1397 y(load-link)m(ed/store-conditional)20 b(with)h (exp)q(onential)e(bac)o(k-)-57 1442 y(o\013.)-7 1505 y(Our)32 b(results)g(do) g(not)f(dep)r(end)g(on)h(the)g(fact)f(that)-57 1550 y(Compare-And-Sw)n(ap)9 b (is)h(the)h(atomic)d(primitiv)l(e)j(b)q(eing)f(sim-)-57 1595 y(ulated.)23 b (Non-bloc)o(king)15 b(ob)r(jects)h(based)g(on)g(Herlih)n(y's)g(pre-)-57 1641 y (scription)26 b(for)f(load-link)m(ed/store-conditional)g(could)h(b)q(e)-57 1686 y(built)c(using)g(the)h(techniques)g(describ)r(ed)g(in)f(this)h(pap)q (er.)-57 1731 y(The)12 b(p)r(olling)d(asp)r(ect)k(of)e(our)h(\014nal)f(p)q (olicy)l(,)h(Compare*-And-)-57 1777 y(Compare-And-Sw)n(ap,)21 b(could)g(b)q (e)g(used)h(to)e(implemen)m(t)g(a)-57 1822 y(store-conditional)11 b(using)g (synchronization)g(primitiv)l(es)i(ori-)-57 1867 y(en)o(ted)i(to)o(w)n(ards)g (blocking)e(sync)o(hronization.)-7 1929 y(While)d(the)i(exp)r(erimen)n(ts)g (presented)g(in)f(this)g(pap)q(er)h(ha)o(v)o(e)-57 1975 y(b)q(een)28 b(p)q (erformed)f(on)g(con)o(v)o(en)o(tional)f(bus-based)i(shared)-57 2020 y(memory) 14 b(m)n(ultiprocessors,)19 b(our)e(results)g(and)g(conclusions)-57 2065 y (can)22 b(b)q(e)g(applied)f(to)h(distributed)g(shared)h(memory)c(m)n(ul-)-57 2111 y(tipro)q(cessors)24 b(as)e(w)o(ell,)h(such)f(as)g(D)o(ASH)g([Lenoski)g (et)g(al.)-57 2156 y(90])d(and)i(Alewife)f([Agarw)n(al)g(et)h(al.)37 b(88].)g (F)l(unctionally)l(,)-57 2201 y(these)14 b(systems)f(are)g(similar)d(to)j(sha\ red)g(memory)e(m)m(ultipro-)-57 2247 y(cessors,)18 b(in)d(that)h(a)f(parallel) g(program)f(distributed)i(across)-57 2292 y(man)m(y)g(pro)q(cessors)i(execute\ s)g(within)d(a)g(single,)h(shared)h(ad-)-57 2337 y(dress)h(space.)26 b(Archit\ ecturally)m(,)16 b(bus-based)h(shared)h(mem-)-57 2383 y(ory)f(mac)n(hines)h (di\013er)g(from)e(distributed)i(shared)h(memory)-57 2428 y(mac)n(hines)j(in) g(that)g(remote)g(memory)d(references)25 b(\(cache)-57 2473 y(misses\))c(gene\ rally)h(tak)n(e)g(substantially)e(few)o(er)i(pro)r(cessor)-57 2519 y(cycles) 17 b(in)e(a)h(bus-based)h(mac)n(hine.)24 b(Since)16 b(a)g(primary)e(con-)-57 2564 y(tributor)j(to)g(sync)o(hronization)g(o)n(v)o(erhead)h(in)e(the)i(prese\ nce)-57 2609 y(of)10 b(conten)o(tion)g(stems)h(from)f(the)h(cost)h(of)e(ha)o (ving)g(to)h(p)q(erform)-57 2655 y(op)q(erations)i(globally)d(\(out)i(of)g (cac)o(he\),)h(w)o(e)f(b)q(eliev)o(e)h(that)f(our)-57 2700 y(results,)18 b (whic)o(h)f(reduce)h(the)g(frequency)g(and)e(increase)j(the)1013 1080 y(usefu\ lness)c(of)e(suc)o(h)h(global)e(op)q(erations,)h(apply)g(directly)h(to)1013 1125 y(distributed)g(shared)h(memory)d(m)m(ultiprocessors.)1013 1287 y fh(5) 56 b(Conclusions)1063 1391 y fg(Non-bloc)o(king)11 b(concurren)q(t)h(ob)r(jec\ ts)h(ha)n(v)o(e)f(the)h(p)q(oten)o(tial)1013 1437 y(to)e(b)q(ecome)g(p)r(o)n (w)o(erful)g(and)h(e\016cien)o(t)f(to)r(ols)g(for)g(use)h(in)f(paral-)1013 1482 y(lel)j(programs.)19 b(In)c(this)g(pap)q(er,)g(w)o(e)g(ha)n(v)o(e)g(expl\ ored)g(several)1013 1527 y(practical)10 b(asp)q(ects)i(for)e(systems)h(that)f (rely)h(on)f(non-blocking)1013 1573 y(concurrent)k(ob)r(jects.)19 b(W)l(e)14 b (ha)o(v)n(e)g(describ)s(ed)f(a)h(simple)d(op)q(er-)1013 1618 y(ating)16 b(sys\ tem)h(mec)o(hanism)e(with)i(whic)o(h)h(to)f(build)f(a)h(non-)1013 1663 y(bloc\ king)i(Compare-And-Sw)m(ap)h(out)g(of)f(blo)q(c)o(king)g(primi-)1013 1709 y (tiv)n(es)g(such)f(as)g(T)l(est-And-Set.)32 b(This)18 b(enables)h(the)g(use)g (of)1013 1754 y(non-bloc)o(king)c(ob)r(jects)h(on)f(a)g(wide)g(range)g(of)g (m)m(ultipro)q(ces-)1013 1799 y(sor)i(systems,)g(including)f(b)q(oth)h(shared) h(memory)c(and)j(dis-)1013 1845 y(tributed)e(shared)g(memory)d(arc)o(hitectur\ es.)21 b(W)l(e)15 b(ha)n(v)o(e)g(ev)n(al-)1013 1890 y(uated)f(a)f(set)h(of)f (sync)o(hronization)g(p)q(olicies)g(for)g(implemen)l(t-)1013 1935 y(ing)22 b (the)h(non-bloc)o(king)f(mec)n(hanisms,)h(and)g(ha)n(v)o(e)g(sho)o(wn)1013 1981 y(that)16 b(throughput)g(is)f(vulnerable)h(to)g(con)o(ten)o(tion.)23 b (Sp)r(eci\014-)1013 2026 y(cally)l(,)13 b(w)n(e)h(ha)o(v)o(e)f(sho)o(wn)h(tha\ t)f(it)g(is)h(the)g(cost)g(of)f(failure)f(with)1013 2071 y(Compare-And-Sw)m (ap)i(that)f(in\015uences)j(throughput)d(when)1013 2117 y(con)o(ten)o(tion)18 b(is)g(high.)31 b(W)l(e)18 b(ha)o(v)o(e)g(sho)o(wn)h(that)f(it)g(is)g(p)q(oss\ i-)1013 2162 y(ble)h(to)g(reduce)i(this)f(cost)g(b)o(y)f(relaxing)g(the)h(de\ \014nition)f(of)1013 2207 y(Compare-And-Sw)m(ap)f(so)g(that)g(failures)f(can) i(occur)g(with-)1013 2253 y(out)14 b(sync)o(hronization.)1013 2414 y fh(Ac)n (kno)o(wledgemen)l(ts)1063 2519 y fg(Dan)k(Sto)r(dolsky)g(help)r(ed)h(in)g (ev)n(aluating)f(the)i(tradeo\013s)1013 2564 y(b)q(et)o(w)o(een)h(v)n(arious) e(synchronization)g(p)r(olicies.)35 b(He,)22 b(Greg)1013 2609 y(Morrisett,)h (Steve)e(Sch)o(w)n(ab,)i(and)e(Jeannette)i(Wing)d(pro-)1013 2655 y(vided)15 b (v)n(aluable)f(feedback)h(on)g(this)h(pap)q(er's)g(presentation.)1013 2700 y (A)21 b(con)o(v)o(ersation)g(with)f(Maurice)h(Herlih)o(y)g(help)q(ed)g(me)f (to)p eop %%Page: 10 10 bop -57 117 a fg(con)o(vince)10 b(m)m(yself)g(that)g(the)g(ideas)g(in)f(this) g(pap)q(er)i(w)n(ere)g(w)o(orth)-57 162 y(pursuing.)-57 313 y fh(References) -57 406 y fg([Agarw)n(al)i(et)i(al.)d(88])20 b(Agarw)o(al,)30 b(A.,)g(Simoni,) d(R.,)j(Hen-)137 452 y(nessy)n(,)13 b(J.,)g(and)g(Horo)o(witz,)g(M.)18 b(An)c (Ev)n(aluation)137 497 y(of)e(Directory)h(Sc)o(hemes)g(for)f(Cac)o(he)h(Coher\ ence.)137 542 y(In)j fj(Pr)n(o)n(c)n(e)n(e)n(dings)h(of)h(the)f(15th)h(A)o (nnual)g(Symp)n(o-)137 588 y(sium)11 b(on)h(Computer)f(A)o(r)m(chite)n(ctur)m (e)p fg(,)g(pages)f(280{)137 633 y(289,)i(June)j(1988.)-57 710 y([Anderson)g (90])k(Anderson,)h(T.)d(E.)30 b(The)18 b(P)o(erformance)g(of)137 756 y(Spin) 12 b(Lo)q(c)o(k)g(Alternativ)o(es)i(for)e(Shared-Memory)137 801 y(Multiproces\ sors.)55 b fj(IEEE)25 b(T)m(r)m(ansactions)i(on)137 846 y(Par)n(al)r(lel)21 b (and)i(Distribute)m(d)g(Systems)p fg(,)g(1\(1\):6{)137 891 y(16,)13 b(Jan)o (uary)h(1990.)-57 969 y([Anderson)h(et)f(al.)f(92])19 b(Anderson,)14 b(T.)d (E.,)h(Bershad,)i(B.)e(N.,)137 1014 y(Lazo)o(wsk)n(a,)d(E.)g(D.,)g(and)g(Levy) m(,)h(H.)e(M.)j(Sc)o(heduler)137 1059 y(Activ)n(ations:)28 b(E\013ective)19 b (Kernel)i(Supp)q(ort)e(for)137 1105 y(the)13 b(User-Level)f(Managemen)n(t)h (of)e(P)o(arallelism.)137 1150 y fj(A)o(CM)17 b(T)l(r)n(ansactions)h(on)f(Com\ puter)g(Systems)p fg(,)137 1195 y(9\(1\),)c(F)m(ebruary)h(1992.)-57 1272 y ([Bershad)h(et)f(al.)f(92])20 b(Bershad,)11 b(B.)f(N.,)g(Redell,)g(D.,)g(and) g(El-)137 1318 y(lis,)g(J.)i(F)m(ast)e(Mutual)g(Exclusion)g(for)g(Unipro)q (ces-)137 1363 y(sors.)23 b(In)16 b fj(Pr)m(o)n(c)n(e)n(e)n(dings)h(of)f(the) h(5th)f(A)o(CM)g(Con-)137 1408 y(fer)m(enc)n(e)22 b(on)f(A)o(r)m(chite)n(ctur) n(al)g(Supp)o(ort)f(for)h(Pr)m(o-)137 1454 y(gr)m(amming)j(L)n(anguages)h(and) g(Op)n(er)m(ating)f(Sys-)137 1499 y(tems)p fg(,)13 b(Octob)r(er)h(1992.)-57 1576 y([Graunk)n(e)g(&)g(Thakk)n(ar)g(90])19 b(Graunk)o(e,)j(G.)d(and)h(Thakk) n(ar,)137 1621 y(S.)e(Synchronization)13 b(Algorithms)f(for)i(Shared-)137 1667 y(Memory)d(Multiprocessors.)17 b fj(IEEE)c(Computer)p fg(,)137 1712 y(23\(6\)\ :60{69,)e(June)k(1990.)-57 1789 y([Herlih)n(y)f(&)g(Wing)f(90])20 b(Herlih)o (y)l(,)c(M.)f(P)m(.)g(and)g(Wing,)g(J.)h(M.)137 1834 y(Linearizabilit)m(y:)36 b(A)23 b(Correctness)i(Condition)137 1880 y(for)9 b(Concurrent)h(Ob)s(jects.) j fj(A)n(CM)e(T)m(r)m(ansactions)137 1925 y(on)21 b(Pr)n(o)n(gr)m(amming)g (L)n(anguages)h(and)f(Systems)p fg(,)137 1970 y(12\(3\):463{492,)11 b(July)i (1990.)-57 2047 y([Herlih)n(y)h(90])20 b(Herlih)o(y)l(,)h(M.)34 b(A)20 b(Meth\ o)q(dology)f(for)g(Imple-)137 2093 y(men)n(ting)26 b(Highly)f(Concurrent)i (Data)e(Struc-)137 2138 y(tures.)46 b(In)23 b fj(Se)n(c)n(ond)h(A)n(CM)f(SIGP\ LAN)h(Sym-)137 2183 y(p)n(osium)17 b(on)g(Principles)f(&)h(Pr)m(actic)n(e)g (of)g(Par)n(al-)137 2229 y(lel)12 b(Pr)m(o)n(gr)n(amming)h(\(PPOPP\))p fg(,)e (pages)h(197{206,)137 2274 y(Marc)o(h)i(1990.)-57 2351 y([Herlih)n(y)g(91])20 b(Herlih)o(y)l(,)h(M.)37 b(W)l(ait-free)20 b(Sync)o(hronization.)137 2396 y fj (A)o(CM)f(T)m(r)m(ansactions)i(on)f(Pr)m(o)n(gr)n(amming)g(L)n(an-)137 2442 y (guages)15 b(and)h(Systems)p fg(,)e(13\(1\),)f(Jan)o(uary)g(1991.)-57 2519 y ([Lenoski)g(et)i(al.)d(90])20 b(Lenoski,)26 b(D.,)e(Laudon,)h(J.,)g(Ghara-) 137 2564 y(c)o(horlo)q(o,)30 b(K.,)h(Gupta,)f(A.,)h(and)c(Hennessy)o(,)137 2609 y(J.)i(The)18 b(Directory-Based)h(Cac)o(he)f(Coherence)137 2655 y(Proto) q(col)d(for)f(the)i(D)o(ASH)f(Multiprocessor.)23 b(In)137 2700 y fj(Pr)m(o)n (c)n(e)n(e)n(dings)15 b(of)f(the)g(17th)g(A)o(nnual)h(Symp)n(osium)1207 117 y (on)i(Computer)g(A)o(r)m(chite)n(ctur)m(e)p fg(,)g(pages)f(148{159,)1207 162 y (Ma)n(y)e(1990.)1013 240 y([Massalin)f(&)h(Pu)g(91])20 b(Massalin,)12 b(H.)h (and)h(Pu,)f(C.)k(A)d(Lo)q(c)o(k-)1207 286 y(F)l(ree)k(Multiprocessor)g(OS)e (Kernel.)26 b(T)m(echnical)1207 331 y(Rep)q(ort)11 b(CUCS-005-91,)e(Departmen) n(t)i(of)f(Com-)1207 376 y(puter)k(Science,)h(Colum)m(bia)e(Univ)o(ersit)o (y)m(,)g(1991.)1013 455 y([Mellor-Crumm)o(ey)e(&)k(Scott)f(91])20 b(Mellor-Cr\ ummey)-6 b(,)1207 500 y(J.)11 b(M.)g(and)g(Scott,)h(M.)f(L.)j(Algorithms)9 b (for)i(Scal-)1207 546 y(able)26 b(Sync)o(hronization)g(on)g(Shared-Memory) 1207 591 y(Multiprocessors.)57 b fj(A)n(CM)27 b(T)l(r)m(ansactions)g(on)1207 636 y(Computer)14 b(Systems)p fg(,)g(9\(1\),)f(F)m(ebruary)h(1991.)1013 715 y ([Mellor-Crumm)o(ey)d(87])20 b(Mellor-Crummey)-6 b(,)20 b(J.)f(M.)34 b(Con-) 1207 760 y(current)15 b(Queues:)22 b(Practical)16 b(F)l(etch-and-)p fa(\036)e fg(Al-)1207 805 y(gorithms.)32 b(T)m(echnical)19 b(Rep)q(ort)g(229,)h(Depart-) 1207 851 y(men)n(t)h(of)f(Computer)h(Science,)j(Univ)n(ersity)d(of)1207 896 y (Roc)o(hester,)15 b(No)o(v)o(em)n(b)q(er)g(1987.)1013 975 y([Mirapuri)e(et)h (al.)f(92])20 b(Mirapuri,)15 b(S.,)h(W)l(o)q(o)q(dacre,)h(M.,)f(and)1207 1020 y(V)l(asseghi,)h(N.)26 b(The)17 b(MIPS)g(R4000)e(Pro)r(cessor.)1207 1065 y fj (IEEE)g(Micr)m(o)p fg(,)f(12\(4\),)f(April)g(1992.)1013 1144 y([Moss)h(&)g (Kohler)g(87])20 b(Moss,)h(J.)f(and)g(Kohler,)h(W.)35 b(Con-)1207 1189 y(curr\ ency)15 b(F)m(eatures)h(for)d(the)i(T)l(rellis/Owl)e(Lan-)1207 1234 y(guage.) 20 b(In)15 b fj(Eur)m(op)o(e)n(an)h(Confer)m(enc)o(e)f(on)i(Obje)m(ct-)1207 1280 y(Oriente)m(d)24 b(Pr)m(o)n(gr)n(amming)p fg(,)h(June)f(1987.)45 b(Ap-) 1207 1325 y(p)q(ears)13 b(in)f(Springer-V)m(erlag's)g(Lecture)i(Notes)f(in) 1207 1370 y(Computer)g(Science)i(#276.)1013 1449 y([Rudolph)d(&)i(Segall)f (84])20 b(Rudolph,)10 b(L.)g(and)h(Segall,)e(Z.)14 b(Dy-)1207 1494 y(namic)26 b(Decentralized)i(Cac)o(he)h(Sc)o(hemes)f(for)1207 1540 y(MIMD)15 b(P)o(arall\ el)f(Pro)r(cessors.)25 b(In)15 b fj(Pr)n(o)n(c)n(e)n(e)n(dings)1207 1585 y (of)22 b(the)g(11th)g(A)o(nnual)h(Symp)n(osium)g(on)f(Com-)1207 1630 y(puter) 14 b(A)o(r)n(chite)m(ctur)n(e)p fg(,)f(pages)i(340{347,)c(1984.)1013 1709 y ([Sites)j(92])29 b(Sites,)19 b(R.)d(L.)30 b fj(A)o(lpha)19 b(A)o(r)m(chite)n (ctur)m(e)g(R)n(efer)m(enc)o(e)1207 1754 y(Manual)p fg(.)f(Digital)12 b(Press\ ,)j(1992.)1013 1833 y([Wing)d(&)i(Gong)f(90])20 b(Wing,)25 b(J.)g(M.)e(and)h (Gong,)i(C.)49 b(A)1207 1878 y(Library)19 b(of)g(Concurrent)g(Ob)s(jects)h (and)g(Their)1207 1923 y(Pro)q(ofs)i(of)f(Correctness.)44 b(T)m(ec)o(hnical) 22 b(Rep)q(ort)1207 1969 y(CMU-CS-90-151,)15 b(Sc)o(ho)q(ol)h(of)g(Computer)g (Sci-)1207 2014 y(ence,)36 b(Carnegie)31 b(Mellon)f(Univ)n(ersity)m(,)k(July) 1207 2059 y(1990.)1013 2138 y([Zahorjan)13 b(et)h(al.)f(88])20 b(Zahorjan,)g (J.,)g(Lazo)n(wsk)n(a,)g(E.,)g(and)1207 2183 y(Eager,)11 b(D.)i(Spinning)e (V)l(ersus)i(Blo)q(c)o(king)d(in)h(P)o(ar-)1207 2229 y(allel)20 b(Systems)i (with)g(Uncertaint)o(y.)42 b(In)22 b fj(Pr)n(o-)1207 2274 y(c)n(e)n(e)n(dings) g(of)g(the)h(International)f(Seminar)g(on)1207 2319 y(the)11 b(Performanc)m (e)g(of)g(Distribute)m(d)g(and)h(Par)n(al)r(lel)1207 2365 y(Systems)p fg(,)h (pages)i(455{472,)c(Decem)o(b)q(er)j(1988.)p eop %%Trailer end %%EOF