[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: drop in sgemm



Doug,

>Some time ago there was a discussion of drop in gemv/ger. Camm was
>working on SSI GEMV/GER, and atlas_goto.tgz was an example of a drop
>in gemm. A new developer release with this stuff was on the way?
>
>I haven't heard anything for a while. I've got time now to
>incorporate my SSE SGEMM into ATLAS. Of course I'd like to do this 
>on a bugfixed dist with a couple of examples to work from. Is there any
>chance of getting a copy of a release with the SSE GEMV/GER stuff in
>it and the fixes that Clint and Camm described on this list?
>
>Otherwise I'll work with the goto version.

I was getting close to a new developer release, when we found a possible
stability problem with one of my routines used in TRSM.  We posted a fix
to the errata, but it is one that is not good for TRSM performance, so
we have been spending all our time trying to get that under control.  

Essentially, I am now scrambling to get patch 2 out for the official
3.0 release, and as soon as that is done, I will try to get the next
developer release out.  It would be quite handy for you in particular:
I provide an example of a "user contributed GEMM" that simply calls
ATLAS's stuff.  I think this would be handy for you 'cause it shows
the Makefile structure, and gives you all the other precisions, since
you are, at the moment anyway, supplying only SGEMM.

As a stop-gap measure, I include below the updated working note on how to
contribute code to ATLAS below.  This version explains how to contribute
full GEMM implementations, as well as the prefered kernel method.

I hope to have the patch out by Monday, so I can probably give you a tarfile
to match this paper soon after that, though the full developer release may
take a little longer . . .

Cheers,
Clint

%!PS-Adobe-2.0
%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
%%Title: atlas_contrib.dvi
%%Pages: 33
%%PageOrder: Ascend
%%BoundingBox: 0 0 596 842
%%EndComments
%DVIPSWebPage: (www.radicaleye.com)
%DVIPSCommandLine: dvips -o atlas_contrib.ps atlas_contrib
%DVIPSParameters: dpi=600, compressed
%DVIPSSource:  TeX output 2000.06.09:1243
%%BeginProcSet: texc.pro
%!
/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
(LaserWriter 16/600)]{A length product length le{A length product exch 0
exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end

%%EndProcSet
TeXDict begin 39158280 55380996 1000 600 600 (atlas_contrib.dvi)
@start
%DVIPSBitmapFont: Fa cmr6 6 1
/Fa 1 50 df<13E01201120712FF12F91201B3A7487EB512C0A212217AA01E>49
D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fb cmmi6 6 2
/Fb 2 122 df<90B6FC16E0903907C003F0ED00F8494813FC167C167EA249C7127C16FC
A2ED01F8013EEB03F0ED07E0ED1F8090393FFFFE005B90397C003F80ED07C0ED03E04914
F01501A216F8484814F01503A2ED07E04848EB0FC0ED1F80ED3F00000714FEB612F815C0
27227CA12E>66 D<EA07C0380FE0033918F0078012300060EB0F0012C0A2EAC1E0000113
1EEA03C0A348485AA45CA214F813813803C3F0EA01FFEA00FC1300495A121E383E03C05C
D83C07C7FCEA300EEA383CEA1FF8EA07C019217D9520>121 D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fc cmr8 8 4
/Fc 4 52 df<EC0380B3A4B812FCA3C7D80380C7FCB3A42E2F7CA737>43
D<130C133C137CEA03FC12FFEAFC7C1200B3B113FE387FFFFEA2172C7AAB23>49
D<EB7F803801FFF0380780FC380E003F48EB1F8048EB0FC05A0060EB07E012F000FC14F0
7E1403A3007C1307C7FCA215E0140F15C0141F1580EC3F00147E147C5C495A495A495A49
5A011EC7FC5B5B4913305B485A4848136048C7FC000E14E0001FB5FC5A4814C0B6FCA21C
2C7DAB23>I<EB3FC03801FFF03807C0FC380E007E487FEC1F80003F14C0A2EB800F1300
A2000C131FC7FC1580A2EC3F00143E5C5CEB03F0EBFFC014F0EB00FC143FEC1F8015C014
0F15E0A2EC07F0A21238127C12FEA3EC0FE012F8006014C00070131F6C1480001EEB3F00
380780FC3801FFF038007FC01C2D7DAB23>I E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fd cmmi8 8 12
/Fd 12 122 df<123C127EB4FCA21380A2127F123D1201A312031300A25A1206120E5A5A
5A126009157A8714>59 D<013FB6FC17C0903A00FE0007F0EE01F84AEB00FC177E130117
7F5CA21303177E4A14FEA20107EC01FC17F84AEB03F0EE07E0010FEC1FC0EE7F009138C0
03FC91B55A4914FE9139C0003F804AEB0FC017E0013F140717F091C7FC16035BA2017E14
07A201FE15E0160F4915C0161F0001ED3F80EE7F004914FEED03F80003EC0FF0B712C003
FCC7FC302D7CAC35>66 D<90263FFFFC90381FFF80A2D900FEC73803F80018E04AEC0780
4DC7FC0101151C5F4A14E04C5A01034A5A040EC8FC4A5B5E010714E04B5A9138E0078003
0EC9FC010F131F157F4A487E14C190391FC71FC014CEEC9C0F02F07F90383FE00702C07F
EC0003825B6F7E137E6F7E13FE167F5B707E1201161F4981831203B539E001FFFEA2392D
7CAC3C>75 D<D93FFE91B5FCA2D900FFEC07E018C06FEB038002DF150001016D5B02CF14
06EC8FE0148701036D130E170C140381D90701141C6F1318EB060081010E017E1338037F
1330010C7FA2011CEC8070031F1360011814C0150F0138ECE0E003075B013014F0150301
7014F1EEF9800160130116FD01E0EB00FF94C7FC4980A2000181163E5B486C141EEA0FE0
D8FFFE140CA2382D7CAC38>78 D<013FB512F816FF903A00FE001FC0EE07E04A6D7E707E
01016E7EA24A80A213034C5A5CA201074A5A5F4A495A4C5A010F4A5A047EC7FC9138C003
F891B512E04991C8FC9138C007C04A6C7E6F7E013F80150091C77EA2491301A2017E5CA2
01FE1303A25BA20001EE038018005B5F0003913801FC0EB5D8E000133CEE7FF0C9EA0FC0
312E7CAC35>82 D<913807F00691383FFE0E9138F80F9E903903E001FE903807800049C7
127C131E49143CA2491438A313F81630A26D1400A27FEB7F8014F86DB47E15F06D13FC01
077F01007F141F02011380EC003F151F150FA215071218A3150F00381500A2151EA2007C
5C007E5C007F5C397B8003E039F1F00F8026E07FFEC7FC38C00FF0272F7CAD2B>I<000F
B8FCA23B1FC003F8003F0100151F001C4A130E123C003801071406123000704A130EA200
60010F140C12E0485CA2141FC715005DA2143FA292C8FCA25CA2147EA214FEA25CA21301
A25CA21303A25CA21307A25C130F131F001FB512F0A2302D7FAC29>I<1307EB0F80EB1F
C0A2EB0F80EB070090C7FCA9EA01E0EA07F8EA0E3CEA1C3E123812301270EA607EEAE07C
12C013FC485A120012015B12035BA21207EBC04014C0120F13801381381F01801303EB07
00EA0F06131EEA07F8EA01F0122E7EAC18>105 D<15E0EC01F01403A3EC01C091C7FCA9
147CEB03FE9038078F80EB0E07131C013813C01330EB700F0160138013E013C0EB801F13
001500A25CA2143EA2147EA2147CA214FCA25CA21301A25CA21303A25CA2130700385BEA
FC0F5C49C7FCEAF83EEAF0F8EA7FF0EA1F801C3B81AC1D>I<90387C01F89038FE07FE39
01CF8E0F3A03879C0780D907B813C0000713F000069038E003E0EB0FC0000E1380120CA2
D8081F130712001400A249130F16C0133EA2017EEB1F80A2017C14005D01FC133E5D15FC
6D485A3901FF03E09038FB87C0D9F1FFC7FCEBF0FC000390C8FCA25BA21207A25BA2120F
A2EAFFFCA2232B829D24>112 D<3807C01F390FF07FC0391CF8E0E0383879C138307B87
38707F07EA607E13FC00E0EB03804848C7FCA2128112015BA21203A25BA21207A25BA212
0FA25BA2121FA290C8FC120E1B1F7E9D20>114 D<EA01E0D807F8130ED80E3C131FD81C
3E133F0038143E12301270D8607E137ED8E07C137C12C013FC484813FC000014F812015B
1401000314F013E0A21403000714E013C0A2140715C00003130FEBE01F143F3901F07F80
38007FEFEB1F8FEB001F1500A2003E133EA2007E5B5C387C01F0387003E0383007C0383C
0F80D80FFEC7FCEA03F0202C7E9D23>121 D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fe cmmi10 10.95 25
/Fe 25 122 df<EC0FF0EC7FFE903801F81F903907E007C049486C6C13E0D93F80EBF001
90267F000114C001FE14F84848EB00FC484815030007178049147E000FEE0700485A5F48
48150E171E171C007F163C49153817785F00FF5E90C8127F5F5F94C7FCA248157EA2127E
007F15FE15016C4A7E92390F3F03806C6C131E6C6C9038781F070007D901E014003B03F0
1F800F8E3B00FFFE0007FCD91FE0EB01F033297CA73A>11 D<EE7F80923801FFE0923807
80F892381E003C03387F03F0131F4A48EB0F804A5A5D4AC7EA07C0140E021E140F141C14
3C023815805C171F5C180001015D4A143E5F010315FC4A495A4C5A01079038FFE7C00203
EBFF80DB807EC7FC92B57E49C6EBC7C0010E90380003E0160183011E81011C1400A28313
3C1338A313781370A301F01401495DA3000115035F16075F0003150F5F4C5A6D4AC7FC00
07157E01785C0138495A6DEB03E0D80F0FEB0FC0270E07C07FC8FC903801FFF89038007F
C0001E90CAFC121CA3123C1238A312781270A312F05AA432527EBF33>I<121EEA7F8012
FF13C0A213E0A3127FEA1E601200A413E013C0A312011380120313005A120E5A12181238
12300B1C798919>59 D<183818FC1703EF0FF8EF3FE0EFFF80933803FE00EE0FF8EE3FE0
EEFF80DB03FEC7FCED0FF8ED3FE0EDFF80DA03FEC8FCEC0FF8EC3FE0ECFF80D903FEC9FC
EB0FF8EB3FE0EBFF80D803FECAFCEA0FF8EA3FE0EA7F8000FECBFCA2EA7F80EA3FE0EA0F
F8EA03FEC66C7EEB3FE0EB0FF8EB03FE903800FF80EC3FE0EC0FF8EC03FE913800FF80ED
3FE0ED0FF8ED03FE923800FF80EE3FE0EE0FF8EE03FE933800FF80EF3FE0EF0FF8EF03FC
17001838363678B147>I<ED0180ED03C01507A21680150FA216005DA2151E153EA2153C
157CA2157815F8A25D1401A25D1403A25D1407A25D140FA24AC7FCA2141E143EA2143C14
7CA2147814F8A25C1301A25C1303A25C1307A25C130FA291C8FC5BA2131E133EA25BA213
7813F8A25B1201A25B1203A25B1207A25B120FA290C9FC5AA2121E123EA2123C127CA212
7812F8A25A1260225B7BC32D>I<17075F84171FA2173F177FA217FFA25E5EA24C6C7EA2
EE0E3F161E161C1638A21670A216E0ED01C084ED0380171FED07005D150E5DA25D157815
705D844A5A170F4A5A4AC7FC92B6FC5CA2021CC7120F143C14384A81A24A140713015C49
5AA249C8FC5B130E131E4982137C13FED807FFED1FFEB500F00107B512FCA219F83E417D
C044>65 D<49B712F818FF19E090260001FEC7EA3FF0F007F84B6E7E727E850203815D1A
80A20207167F4B15FFA3020F17004B5C611803021F5E4B4A5A180FF01FE0023F4B5A4B4A
5ADD01FEC7FCEF07F8027FEC7FE092B6C8FC18E092C7EA07F84AEC01FE4A6E7E727E727E
13014A82181FA213034A82A301075F4A153FA261010F167F4A5E18FF4D90C7FC011F5E4A
14034D5A013FED1FF04D5A4AECFFC0017F020790C8FCB812FC17F094C9FC413E7DBD45>
I<DC1FF81307923801FFFE030F9038FF800E923A7FF007E01E4A48C7EAF03EDA03FCEC78
7EDA0FF0EC3CFCDA3FC0141F4A48140F4AC8FC4948ED07F8EB07F849481503131F4A16F0
49481501495A13FF4890C913E05B1203485A19C0485AA2485A95C7FC123F5BA2127F5BA3
12FF5BA590CCFC183CA21838A21878187018F06C6C5E17014D5A003F5F6D15074DC7FC00
1F161E6C6C5D6D5D6C6C5D00034B5AD801FEEC07C06C6C4AC8FCD97FC0137E90391FF803
F80107B512E0010114809026001FF8C9FC40427BBF41>I<49B600C090387FFFF896B5FC
5FD900010180C7000F130093C813F84B16E01A804FC7FC0203163C4B15F84E5AF003C002
074B5A4B021FC8FC183E1878020F5D4BEB03E0EF07804DC9FC021F143E4B5B17F04C5A02
3F1307EDC00F4C7E163F027FEBFFF8ED81EFED83CF92388F87FC9138FF9F0792383C03FE
15784B6C7E4913E0158092C77F5C01036F7E5C717EA213074A6E7EA2717E130F4A6E7EA2
84011F15035C717E133F855C496C4A13E0B600E0017F13FFA34D3E7DBD4D>75
D<49B56C93B512C050148062D90001F18000704B90C7FC03DF5F1A0E1A1D1403039FEE39
FC1A711A739126078FE015E3030F5FF101C3F10387140F020E93380707F0A2F10E0F021E
161C91261C07F05E1938F1701F143C023804E05BA2953801C03F0278ED038091267003F8
5EF00700060E137F14F002E04B91C8FCA24E5B01015E4A6C6C5D60943801C00113030280
DA03805BA294380700030107150E91C700FE5D5F1907495D010E4B5CA24D130F011E6E5A
011C60705A013C171F017C92C7FC01FE027E5DD803FF4D7EB500FC017C017FB512E01678
04385E5A3E7CBD58>77 D<49B56C49B512F81BF0A290C76D9039000FFE004AEE03F0705D
735A03DF150302037F038F5E82190791380787FC030793C7FC1503705C140F91260E01FF
140EA26F151E021E80021C017F141C83193C023C6D7E02381638161F711378147802706D
6C1370A2040714F002F0804A01035C8318010101EC01FF4A5E82188313034A91387FC380
A2EF3FC7010716E791C8001F90C8FC18F718FF4981010E5E1707A2131E011C6F5AA2013C
1501137C01FE6F5AEA03FFB512FC187818704D3E7DBD49>I<EE3FF00303B5FC92391FC0
3FC092397E0007E0DA01F8EB01F8DA07E06D7E4A48147E023FC87E027EED1F804A16C0D9
03F8150F494816E0495A4948ED07F0A2494816F849C9FC5B48481603A2484817FCA2485A
000F17075B121FA25B123F19F84848160FA44848EE1FF0A3F03FE0A390CAEA7FC0A2F0FF
80A219004D5A1703604D5A6C7E4D5A4D5A003F5F4D5A6C6C4BC7FC17FE6C6C4A5A4C5A6C
6CEC07E06C6CEC1FC06C6C4A5A6C6C02FEC8FC90393F8003F890390FE01FE00103B5C9FC
9038007FF03E427BBF45>I<49B77E18F818FFD90001D900017F9438003FE04BEC0FF072
7E727E14034B6E7EA30207825DA3020F4B5A5DA24E5A141F4B4A5A614E5A023F4B5A4B4A
5A06FEC7FCEF03FC027FEC0FF04BEBFF8092B500FCC8FC5F9139FF8001FE92C7EA7F80EF
1FC084496F7E4A1407A28413035CA2170F13075C60171F130F5CA3011F033F5B4AEE0380
18E0013F17071A004A021F5B496C160EB600E090380FF01E05075B716C5ACBEAFFE0F03F
8041407DBD45>82 D<DB07FC1338ED3FFF92B5EAC070913A03F807F0F091390FE000F9DA
1F80137F4AC7EA3FE0027E141F5C4948140F4A15C001031507495AA2010F16805CA3011F
1600A38094C7FC808014FE90380FFFC015FC6DEBFFC016F86D14FE6D806D81023F800207
801400030F7F1500163F707E160F1607A2160312075A5F120EA2001E15075FA24C5A123E
003F4B5AA26D4AC7FC007F157E6D5C6D495AD87DF0495AD8F8FCEB0FE090393F803F8027
F01FFFFEC8FCD8E00713F839C0007FC035427BBF38>I<027FB5D88007B512C091B6FCA2
020101F8C7EBF8009126007FE0EC7F804C92C7FC033F157C701478616F6C495A4E5A6F6C
495A4EC8FC180E6F6C5B606F6C5B6017016F6C485A4D5A6F018FC9FC179E17BCEE7FF85F
705AA3707EA283163F167FEEF7FCED01E7EEC3FEED0383ED070392380E01FF151E4B6C7F
5D5D4A486D7E4A5A4A486D7E92C7FC140E4A6E7E5C4A6E7E14F0495A49486E7E1307D91F
806E7ED97FC014072603FFE0EC1FFF007F01FC49B512FEB55CA24A3E7EBD4B>88
D<B66C0103B51280A3000101E0C8387FF0006C49ED3F80017F94C7FC183C606D6C157060
6D6C4A5A17034D5A6D6C4AC8FC170E5F6D6C5C17785F6D6C495A5F6E495A6D4AC9FC160E
6DEB801E5E5E91387FC0705EEDC1C0EC3FE3EDE78003FFCAFC6E5A5D6E5AA25DA25D141F
A35D143FA35D147FA392CBFC5CA3495AA3497E0007B512FEA3413E7DBD35>I<EC1F80EC
FFE0903903F0707090390FC039F890381F801D90383F000F017E5C5B00011407485A4848
5CA2485A001F140F5E485AA2151F007F5D5BA2153F00FF92C7FC90C7FCA25D92387E0380
5AA215FEEDFC07007E0101140014035E6C0107130E140E3A1F801C7C1C000F13783A07C1
F03E383A01FFC01FF03A007F0007C029297DA730>97 D<EB1FC0EA0FFF5CA2EA003FA291
C8FCA25BA2137EA213FEA25BA21201A25BA21203A25BEC3F800007EBFFE09038F3C1F849
C67E01FE137E4848133E49133F5B491480001F141F5B5BED3FC0123FA290C7FCA248147F
1680127EA215FF00FE15005AA24A5AA25D1403485C1407007C5C4A5A5D003C495A003E49
C7FC001E137E6C13F8380783F03803FFC0C648C8FC22407CBE27>I<EE07F0ED03FF17E0
A2ED000FA217C0A2161FA21780A2163FA21700A25EA2167EA216FEA25EEC1F80ECFFE190
3803F07190390FC039F890381F801D90383F000F137E495C00011407485A485A5E485A00
1F140FA248485CA2151F127F495CA2153F12FF90C790C7FCA25DEE038048147EA215FE16
07007ED901FC130014035E6C0107130E140E3A1F801C7C1C000F13783A07C1F03E383A01
FFC01FF03A007F0007C02C407DBE2F>100 D<143C14FEA21301A314FCEB00701400AD13
7E3801FF803803C7C0EA0703000F13E0120E121C13071238A2EA780F007013C0A2EAF01F
14801200133F14005B137EA213FE5BA212015B0003130E13F0A20007131EEBE01CA2143C
EBC0381478147014E013C13803E3C03801FF00EA007C173E7EBC1F>105
D<ED01C0ED07F0A2150FA316E0ED038092C7FCADEC03E0EC0FF8EC3C3EEC701EECE01FEB
01C001031480EB0780140049133F010E1400131E131C013C5BA290C7127EA215FEA25DA2
1401A25DA21403A25DA21407A25DA2140FA25DA2141FA25DA2143FA292C7FCA25C147EA2
001C13FE007F5BEAFF015C495A495A48485A38F81F80D8783EC8FCEA3FF8EA0FE0245081
BC25>I<EB01FC13FF5CA21303A25CA21307A25CA2130FA25CA2131FA25CA2133FA291C9
FC16FC49EB03FE92380F0780017EEB3C0FED703F01FE13E0913801C07F9038FC0380EC07
000001010E14004A131C494890C7FC5C00035BEBF9C0495A01FFC9FC5A14F0EBE3FE9038
E07F80000FEB1FC06E7EEBC00781001F1303160E1380A2003F151E0207131C010013E0A2
485DA2007E01031378167000FE01015B15F1489038007F800038023EC7FC29407CBE2F>
I<EB07F0EA03FF14E0A2EA000FA214C0A2131FA21480A2133FA21400A25BA2137EA213FE
A25BA21201A25BA21203A25BA21207A25BA2120FA25BA2121FA25BA2123FA290C7FCA25A
EB0380127EA212FE130700FC1300A25B130EA2EA7C1C133CEA3E38EA1FF0EA07C014407D
BE1B>I<D901F8133FD907FEEBFFE0903A1E0F83C0F0903A3807C780F890397003CF0301
E013FED801C0EBFC071203018013F8D8070015F0EE01C0000E4AC7FCA2001E1307A2C75B
A2140F5DA3141F5DA3143F92380001C0A34A1303001E1680003F017E1307267F80FE1400
5ED8FF81141ED901DF131CD8FE035C3A7C078F80F03A3C0F07C1E03A1FFC03FF802707F0
007EC7FC2D297EA734>120 D<137C48B4EC03802603C7C0EB0FC0EA0703000F7F000E15
1F001C168013071238163FD8780F150000705BA2D8F01F5C4A137E1200133F91C712FE5E
5B137E150113FE495CA2150300015D5BA215075EA2150F151F00005D6D133F017C137F01
7E13FF90393F03DF8090380FFF1FEB01FC90C7123F93C7FCA25DD80380137ED80FE013FE
001F5C4A5AA24848485A4A5A6CC6485A001C495A001E49C8FC000E137C380781F03803FF
C0C648C9FC2A3B7EA72D>I E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Ff cmbx12 12 50
/Ff 50 122 df<ED0FFF4AB512C0020F14F0027F80903A01FFF803FC499038C000FE010F
EB00034948497E49485B5C495A4C138001FF6E13005CA3705AEE01F893C8FCA74BB51280
B9FCA5C69038E00003B3B0007FD9FFC1B6FCA538467EC53E>12 D<EA07C0EA1FF0EA3FF8
EA7FFC12FF13FEA213FFA47E7E7EEA07CFEA000FA2131F131EA2133EA2133C137C13F8A2
EA01F0120313E0EA07C0EA1F801300121E120C1022788E1F>44 D<B612F8A91D097F9A25
>I<EA07C0EA1FF0EA3FF8EA7FFCEAFFFEA7EA7FFCEA3FF8EA1FF0EA07C00F0F788E1F>I<
EC03C01407141F147FEB03FF133FB6FCA413C3EA0003B3B3ADB712FCA5264177C038>49
D<ECFFE0010F13FE013F6D7E90B612E0000315F82607FC0313FE3A0FE0007FFFD81F806D
138048C7000F13C0488001C015E001F07F00FF6E13F07F17F881A46C5A6C5A6C5AC9FC17
F05DA217E05D17C04B13804B1300A2ED1FFC4B5A5E4B5A4B5A4A90C7FC4A5A4A5AEC0FF0
4A5AEC3F804AC7127814FE495A494814F8D907E014F0495A495A49C8FC017C1401491403
48B7FC4816E05A5A5A5A5AB8FC17C0A42D417BC038>I<ECFFF0010713FF011F14C0017F
14F049C66C7ED803F8EB3FFED807E06D7E81D80FF86D138013FE001F16C07FA66C5A6C48
15806C485BC814005D5E4B5A4B5A4B5A4A5B020F1380902607FFFEC7FC15F815FF16C090
C713F0ED3FFCED0FFEEEFF80816F13C017E0A26F13F0A217F8A3EA0FC0EA3FF0487EA248
7EA217F0A25D17E06C5A494913C05BD83F80491380D81FF0491300D80FFEEBFFFE6CB612
F800015D6C6C14C0011F49C7FC010113E02D427BC038>I<163FA25E5E5D5DA25D5D5D5D
A25D92B5FCEC01F7EC03E7140715C7EC0F87EC1F07143E147E147C14F8EB01F0EB03E013
0714C0EB0F80EB1F00133E5BA25B485A485A485A120F5B48C7FC123E5A12FCB91280A5C8
000F90C7FCAC027FB61280A531417DC038>I<0007150301E0143F01FFEB07FF91B6FC5E
5E5E5E5E16804BC7FC5D15E092C8FC01C0C9FCAAEC3FF001C1B5FC01C714C001DF14F090
39FFE03FFC9138000FFE01FC6D7E01F06D13804915C0497F6C4815E0C8FC6F13F0A317F8
A4EA0F80EA3FE0487E12FF7FA317F05B5D6C4815E05B007EC74813C0123E003F4A1380D8
1FC0491300D80FF0495AD807FEEBFFFC6CB612F0C65D013F1480010F01FCC7FC010113C0
2D427BC038>I<4AB47E021F13F0027F13FC49B6FC01079038807F8090390FFC001FD93F
F014C04948137F4948EBFFE048495A5A1400485A120FA248486D13C0EE7F80EE1E00003F
92C7FCA25B127FA2EC07FC91381FFF8000FF017F13E091B512F89039F9F01FFC9039FBC0
07FE9039FF8003FF17804A6C13C05B6F13E0A24915F0A317F85BA4127FA5123FA217F07F
121FA2000F4A13E0A26C6C15C06D4913806C018014006C6D485A6C9038E01FFC6DB55A01
1F5C010714C0010191C7FC9038003FF02D427BC038>I<121E121F13FC90B712FEA45A17
FC17F817F017E017C0A2481680007EC8EA3F00007C157E5E00785D15014B5A00F84A5A48
4A5A5E151FC848C7FC157E5DA24A5A14035D14074A5AA2141F5D143FA2147F5D14FFA25B
A35B92C8FCA35BA55BAA6D5A6D5A6D5A2F447AC238>I<EE1F80A24C7EA24C7EA34C7EA2
4B7FA34B7FA24B7FA34B7F169F031F80161F82033F80ED3E07037E80157C8203FC804B7E
02018115F0820203814B137F0207815D173F020F814B7F021F8292C77EA24A82023E8002
7E82027FB7FCA291B87EA2498302F0C8FCA20103834A157F0107834A153FA24948828401
1F8491C97E4984133E017E82B6020FB612F0A54C457CC455>65 D<B9FC18F018FE727E19
E026003FFCC700077F05017F716C7E727E727EA2721380A37213C0A74E1380A24E1300A2
4E5A4E5A4E5A4D5B05075B94B5128091B700FCC7FC18F018FF19E002FCC7000113F8716C
7EF01FFE727E7213801AC07213E0A27213F0A31AF8A71AF0A2601AE0604E13C0604E1380
95B5120005075BBA12F86119C04EC7FC18E045447CC350>I<DCFFF01470031F01FF14F0
4AB6EAE0010207EDF803023FEDFE0791B539E001FF0F4949C7EA3F9F010701F0EC0FFF49
01C0804990C87E4948814948814948167F4849163F4849161F5A4A160F485B19074890CA
FC19035A5BA2007F1801A34994C7FC12FFAE127F7F1AF0A2123FA27F6C18011AE06C7F19
036C6D17C06E16077E6C6DEE0F806C6DEE1F006D6C5E6D6C167E6D6C6C5D6D6D4A5A6D01
F0EC07F0010101FEEC1FE06D903AFFF001FF80023F90B6C7FC020715FC020115F0DA001F
1480030001F8C8FC44467AC451>I<B9FC18F018FE727E19E026003FFEC7001F13F80501
7F9438003FFF060F7F727F727F727F84737E737EA2737EA2737EA21B80A2851BC0A51BE0
AD1BC0A51B8061A21B006162193F624F5A19FF624E5B06075B4E5B063F90C7FC4DB45A05
0F13F8BA5A19C04EC8FC18F095C9FC4B447CC356>I<BA12F8A485D8001F90C71201EF00
3F180F180318011800A2197E193EA3191EA21778A285A405F890C7FCA316011603161F92
B5FCA5ED001F160316011600A2F101E01778A2F103C0A494C7FC1907A21A80A2190FA219
1FA2193FF17F0061601807181F4DB5FCBBFC61A443447DC34A>I<BA1280A419C026003F
FEC7121F1701EF007F183F181F180F180719E01803A31801A3EE01E0F000F0A419001603
A31607160F167F91B6FCA59138FE007F160F16071603A31601A693C9FCAFB712F0A53C44
7CC346>I<DCFFF01470031F01FF14F04AB6EAE0010207EDF803023FEDFE0791B539E001
FF0F4949C7EA3F9F010701F0EC0FFF4901C0804990C87E4948814948814948167F484916
3F4849161F5A4A160F485B19074890CAFC19035A5BA2007F1801A34994C8FC12FFAD057F
B612F0127F7FA3003FDC0001EBF000A27F7EA26C7FA26C7F807E6C7F6C7F6D7E6D6C5D6D
6C7E6D6D5C6D01F05C010101FE143F6D903AFFF001FF9F023F90B6120F0207EDFC030201
EDF000DA001F02C01330030001FCC9FC4C467AC458>I<B7D88003B612FEA526003FFEC9
EBF800B3A791B9FCA54AC9FCB3AAB7D88003B612FEA54F447CC358>I<B712E0A5D8001F
90C7FCB3B3B3A4B712E0A523447DC32A>I<B712F0A526003FFECAFCB3B1F00780A4180F
1900A460A360A2187EA218FE170117031707171F177FEE03FFB95AA539447CC343>76
D<B500FE067FB512806E95B6FCA26F5EA2D8003F50C7FC013D6DEE03DFA2013C6DEE079F
A26E6CEE0F1FA26E6C161EA26E6C163CA36E6C1678A26E6C16F0A26E6DEC01E0A26E6DEC
03C0A36E6DEC0780A26F6CEC0F00A26F6C141EA26F6C5CA36F6C5CA26F6C5CA26F6D485A
A26F6D485AA26F6D485AA3706C48C7FCA293383FF81EA2706C5AA2706C5AA3706C5AA270
5BA2705BA2705BA2B6057FB6128071C7FCA2173E171C61447CC36A>I<B9FC18F018FE72
7E19E0D8001F90C7000F7F05017F716C7E727E727E721380A21AC084A21AE0A91AC0A24E
1380A21A00604E5A4E5A4D485A050F5B92B712C096C7FC18FC18C092CBFCB3A7B712E0A5
43447DC34D>80 D<B812F8EFFFC018F818FE727ED8001F90C7003F13E005037F05007F72
7E727E727EA28684A286A762A24E90C7FCA24E5A61187F943801FFF005075B053F138092
B7C8FC18F818E018F892C77FEF3FFF050F7F717F717FA2717FA2717FA785A61B0F85A218
7F73131F72141EB700E06DEB803E72EBE0FC72EBFFF8060114F0726C13E0CC0007138050
457DC354>82 D<DAFFE0131C010701FE133C013F9038FF807C90B6EAE0FC4815F9489038
801FFF3907FC00014848EB007F4848143F4848140F491407007F15035B1601160012FF17
7CA27FA26D153C7F7F6D92C7FC6C7EEBFFE014FE6CEBFFF015FF6C15E016FC6C816C6F7E
6C826C826C6C81011F810107811300020F80140003077FED007F82040F1380828212F082
A282A27EA218007EA26C5D6C5E6D14036D5D6D140701F84A5A01FFEC3FF002F8EBFFE048
6CB65AD8FC1F92C7FCD8F80714FC48C614F0480107138031467AC43E>I<003FBA12E0A5
9026FE000FEB8003D87FE09338003FF049171F90C71607A2007E1803007C1801A3007818
00A400F819F8481978A5C81700B3B3A20107B8FCA545437CC24E>I<B76C010FB512F8A5
26003FFEC93803E000B3B3A9011F17076280190F6D606F151F6D95C7FC6D6D5D197E6D6D
5D6D6D1403DA7FFC4A5A6EB4EC3FF0020F9039F003FFE06E90B61280020193C8FC6E6C14
FC030F14E09226007FFEC9FC4D457CC356>I<B792B6FCA526003FFECAEAFC00806D606F
15016D608119036D606F15076D606F150F6D6081191F6D6D93C7FC61027F163E6F157E02
3F167C8119FC6E6D5C18016E5E7013036E5E8218076E6D5C180F6E5E70131F6E93C8FC70
5B037F143E82187E033F147C7013FC6F5C17816F5C17C117C36F5C17E76F5C17FF6F5CA3
6F91C9FCA2705AA2705AA3705AA2705AA2705AA250457EC355>I<B76C027FB5FCA5D800
3F0180C9EAFC006D6D4B5AA26D6D4B5A6D6D4B5A816D4D5A6D6D4B5A816D4DC7FC6E6C15
7E826E5E6E6D495A826E4B5A6E6D495A6E7F4E5A6E6D495A6E7F4EC8FC6F6C137E6F1380
606FEBC1F86F13E1EFF3F06FEBF7E06F13FF606F5C8195C9FC705A163FB3A592B77EA550
447EC355>89 D<903801FFE0011F13FE017F6D7E48B612E03A03FE007FF84848EB1FFC6D
6D7E486C6D7EA26F7FA36F7F6C5A6C5AEA00F090C7FCA40203B5FC91B6FC1307013F13F1
9038FFFC01000313E0000F1380381FFE00485A5B127F5B12FF5BA35DA26D5B6C6C5B4B13
F0D83FFE013EEBFFC03A1FFF80FC7F0007EBFFF86CECE01FC66CEB8007D90FFCC9FC322F
7DAD36>97 D<EB7FC0B5FCA512037EB1ED0FF892B57E02C314E002CF14F89139DFC03FFC
9139FF000FFE02FCEB03FF4A6D13804A15C04A6D13E05CEF7FF0A218F8173FA318FCAC18
F8A2177F18F0A3EFFFE06E15C06E5B6E491380027C491300496C495A903AFC1FC07FFC49
6CB512F0D9F00314C049C691C7FCC8EA1FF036467DC43E>I<EC3FFC49B512C0010F14F0
013F14FC90397FF003FE9039FFC001FF0003495A48494813805B120F485AA2485A6F1300
007F6E5AED00784991C7FCA212FFAC6C7EA3123F6DEC03C0A26C6C1407000F16806D140F
6C6DEB1F006C6D133E6C01F05B3A007FFC03F86DB55A010F14C0010391C7FC9038003FF8
2A2F7CAD32>I<EE03FEED07FFA5ED001F160FB1EC3FE0903803FFFC010FEBFF8F013F14
CF9039FFF807FF48EBC00148903880007F4890C7123F4848141F49140F121F485AA3127F
5BA212FFAC127FA37F123FA26C6C141FA26C6C143F0007157F6C6C91B5FC6CD9C00314FC
6C9038F01FEF6DB5128F011FEBFE0F010713F89026007FC0EBF80036467CC43E>I<EC3F
F80103B57E010F14E0013F8090397FF83FF89039FFC007FC48496C7E48496C7E48486D13
80485A001FED7FC05B003FED3FE0A2127F5B17F0161F12FFA290B7FCA401F0C9FCA5127F
A27FA2123F17F06C7E16016C6C15E06C6C14036C6DEB07C06C6DEB0F806C01F0EB3F0090
397FFE01FE011FB55A010714F0010114C09026001FFEC7FC2C2F7DAD33>I<EDFF80020F
13E0027F13F049B512F849EB8FFC90390FFE0FFE90381FFC1F14F8133FEB7FF0A2ED0FFC
EBFFE0ED03F0ED00C01600ABB612F8A5C601E0C7FCB3B0007FEBFFE0A527467DC522>I<
DAFFE0137E010F9039FE03FF80013FEBFF8F90B812C048D9C07F133F489038001FF84848
EB0FFC4848903907FE1F80001F9238FF0F00496D90C7FCA2003F82A8001F93C7FCA26D5B
000F5D6C6C495A6C6C495A6C9038C07FF04890B55A1680D8078F49C8FC018013E0000F90
CAFCA47F7F7F90B612C016FC6CEDFF8017E06C826C16FC7E000382000F82D81FF0C77ED8
3FC014074848020113808248C9FC177FA46D15FF007F17006D5C6C6C4A5A6C6C4A5AD80F
FEEC3FF83B07FFC001FFF0000190B612C06C6C92C7FC010F14F8D9007F90C8FC32427DAC
38>I<EB7FC0B5FCA512037EB1ED07FE92383FFF8092B512E002C114F89139C7F03FFC91
38CF801F9139DF000FFE14DE14FC4A6D7E5CA25CA35CB3A7B60083B512FEA537457CC43E
>I<137C48B4FC4813804813C0A24813E0A56C13C0A26C13806C1300EA007C90C7FCAAEB
7FC0EA7FFFA512037EB3AFB6FCA518467CC520>I<EB7FC0B5FCA512037EB3B3B3A3B612
80A519457CC420>108 D<90277F8007FEEC0FFCB590263FFFC090387FFF8092B5D8F001
B512E002816E4880913D87F01FFC0FE03FF8913D8FC00FFE1F801FFC0003D99F009026FF
3E007F6C019E6D013C130F02BC5D02F86D496D7EA24A5D4A5DA34A5DB3A7B60081B60003
B512FEA5572D7CAC5E>I<90397F8007FEB590383FFF8092B512E0028114F8913987F03F
FC91388F801F000390399F000FFE6C139E14BC02F86D7E5CA25CA35CB3A7B60083B512FE
A5372D7CAC3E>I<EC1FFC49B512C0010714F0011F14FC90397FF80FFF9026FFC0017F48
496C7F4848C7EA3FE000078248486E7E49140F001F82A2003F82491407007F82A400FF17
80AA007F1700A46C6C4A5AA2001F5E6D141F000F5E6C6C4A5AA26C6C6CEBFFE06C6D485B
27007FF80F90C7FC6DB55A010F14F8010114C09026001FFCC8FC312F7DAD38>I<90397F
C00FF8B590B57E02C314E002CF14F89139DFC03FFC9139FF001FFE000301FCEB07FF6C49
6D13804A15C04A6D13E05C7013F0A2EF7FF8A4EF3FFCACEF7FF8A318F017FFA24C13E06E
15C06E5B6E4913806E4913006E495A9139DFC07FFC02CFB512F002C314C002C091C7FCED
1FF092C9FCADB67EA536407DAC3E>I<90387F807FB53881FFE0028313F0028F13F8ED8F
FC91389F1FFE000313BE6C13BC14F8A214F0ED0FFC9138E007F8ED01E092C7FCA35CB3A5
B612E0A5272D7DAC2E>114 D<90391FFC038090B51287000314FF120F381FF003383FC0
0049133F48C7121F127E00FE140FA215077EA27F01E090C7FC13FE387FFFF014FF6C14C0
15F06C14FC6C800003806C15806C7E010F14C0EB003F020313E0140000F0143FA26C141F
150FA27EA26C15C06C141FA26DEB3F8001E0EB7F009038F803FE90B55A00FC5CD8F03F13
E026E007FEC7FC232F7CAD2C>I<EB01E0A51303A41307A2130FA2131FA2133F137F13FF
1203000F90B51280B7FCA4C601E0C7FCB3A3ED01E0A9150302F013C0137F150790393FF8
0F8090391FFC1F006DB5FC6D13FC01015B9038003FE023407EBE2C>I<D97FC049B4FCB5
0103B5FCA50003EC000F6C81B3A85EA25EA25E7E6E491380017FD901F713FE9138F807E7
6DB512C7010F1407010313FE9026007FF0EBFC00372E7CAC3E>I<B5D8FE1FB539801FFF
F0A500019027C0003FE0C7EA7C007114786E17F86C6F6C5C6E1601017F6E6C5CA26E011F
1403013F6F5C6E013F1407011F6F5CA26E0179140F010F048090C7FC6E01F95C6D02F0EB
C01E15806D902681E07F5B18E003C3157C6D9139C03FF07815E76DDA801F5B18F803FF14
F96E9039000FFDE018FF6E486D5BA36E486D5BA26E486D90C8FCA24B7F02075DA26E4814
7C4B143C4C2C7EAB51>119 D<B500FE90383FFFF0A5C601F0903803E0006D6C495A013F
4A5A6D6C49C7FC6E5B6D6C137E6DEB807C6D6D5A6DEBC1F0EDE3E06DEBF7C06EB45A806E
90C8FC5D6E7E6E7F6E7FA24A7F4A7F8291381F3FFCEC3E1F027C7F4A6C7E49486C7F0103
6D7F49487E02C08049486C7F49C76C7E013E6E7E017E141FB500E090B512FCA5362C7EAB
3B>I<B6903803FFFCA5000101E09038003E006C163C80017F5D8017F8013F5D6E130101
1F5D6E1303010F5D6E13076D5DED800F6D92C7FC15C05E6DEBE01E163E6D143CEDF07C02
7F1378EDF8F8023F5B15FD021F5B15FF6E5BA36E5BA26E90C8FCA26E5AA26E5AA21578A2
15F85D14015D001F1303D83F805B387FC007D8FFE05B140F92C9FC5C143E495A387FC1F8
EB07F06CB45A6C5B000790CAFCEA01FC36407EAB3B>I E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fg cmtt10 10.95 85
/Fg 85 126 df<121C127FEAFF80B3EA7F00B2123EC7FCA8121C127FA2EAFF80A3EA7F00
A2121C09396DB830>33 D<00101304007C131F00FEEB3F80A26C137FA248133FB2007E14
00007C7F003C131E00101304191C75B830>I<903907C007C0A2496C487EA8011F131FA2
02C05BA3007FB7FCA2B81280A36C16006C5D3A007F807F80A2020090C7FCA9495BA2003F
90B512FE4881B81280A36C1600A22701FC01FCC7FCA300031303A201F85BA76C486C5AA2
29387DB730>I<1438147C14FCA4EB03FF011F13E090B512FC4880000780481580261FFE
FD13C09039F0FC3FE0D83FC0131FD87F80EB0FF001001307007E15F800FE14035A1507A3
6CEC03F0A2007F91C7FC138013C0EA3FF0EA1FFE13FF6C13FF6C14E0000114F86C6C7F01
1F7F01037F0100148002FD13C09138FC7FE0151FED0FF015070018EC03F8127E1501B4FC
A35AA26CEC03F07E01801307ED0FE0D83FC0131F01F0EB7FC0D81FFEB512806CB612006C
5C6C5CC614F0013F13C0D907FEC7FCEB00FCA5147C143825477BBE30>I<EB07E0EB1FF8
497E137F497E803801FC7F497E810003131F13F0A6143F92C8FC91387F0FFF9026F87E1F
1380000113FEEBF9FC13FB4A6C1300D9FFF013C06C13E0151F02C05BEB7F809038FF003F
4892C7FC485C48EB807E5A15FE391FDFC0FC383F8FE014E1397F07F1F8EB03F300FEEBFB
F0EB01FF5D7FEDC006027F130F91393F801F8015C06C137F6CEBFFE049EBF83F018701FC
1300263FFFFBB5FC6C01F15B14E06C9038C03FFC00039038001FF8D801FCEB07E0293A7D
B830>38 D<141E147F14FF5BEB03FEEB07FCEB0FF0EB1FE0EB3FC0EB7F80EBFF00485A5B
12035B485A120F5BA2485AA2123F5BA2127F90C7FCA412FEAD127FA47F123FA27F121FA2
6C7EA27F12076C7E7F12017F6C7EEB7F80EB3FC0EB1FE0EB0FF0EB07FCEB03FEEB01FF7F
147F141E184771BE30>40 D<127812FE7E7F6C7E6C7EEA0FF06C7E6C7E6C7E6C7EEB7F80
133F14C0131FEB0FE014F01307A2EB03F8A214FC1301A214FE1300A4147FAD14FEA41301
14FCA2130314F8A2EB07F0A2130F14E0EB1FC0133F1480137FEBFF00485A485A485A485A
EA3FE0485A485A90C7FC5A1278184778BE30>I<14E0497E497EA60038EC0380007EEC0F
C0D8FF83EB3FE001C3137F9038F3F9FF267FFBFB13C06CB61280000FECFE00000314F86C
5C6C6C13C0011F90C7FC017F13C048B512F04880000F14FE003FECFF80267FFBFB13C026
FFF3F913E09038C3F87F0183133FD87E03EB0FC00038EC0380000091C7FCA66D5A6D5A23
277AAE30>I<143EA2147FAF007FB7FCA2B81280A36C1600A2C76CC8FCAF143EA229297D
AF30>I<EA03E0EA0FF0EA1FF813FCEA3FFEA213FFA27EA27E1203EA007FA2137E13FEEA
01FC1203EA07F8EA3FF0127FEAFFE0EA7F801300123C1019708B30>I<007FB612F0A2B7
12F8A36C15F0A225077B9E30>I<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F
000C0C6E8B30>I<16F01501ED03F8A21507A2ED0FF0A2ED1FE0A2ED3FC0A2ED7F80A2ED
FF00A24A5AA25D1403A24A5AA24A5AA24A5AA24A5AA24A5AA24AC7FCA2495AA25C1303A2
495AA2495AA2495AA2495AA2495AA249C8FCA2485AA25B1203A2485AA2485AA2485AA248
5AA2485AA248C9FCA25AA2127CA225477BBE30>I<14FE903807FFC0497F013F13F8497F
90B57E48EB83FF4848C6138049137F4848EB3FC04848EB1FE049130F001F15F0491307A2
4848EB03F8A290C712014815FCA400FEEC00FEAD6C14016C15FCA36D1303003F15F8A26D
1307001F15F0A26D130F6C6CEB1FE0A26C6CEB3FC06C6CEB7F806D13FF2601FF8313006C
EBFFFE6D5B6D5B010F13E06D5BD900FEC7FC273A7CB830>I<EB03C0497EA2130FA2131F
A2133F137F13FF1203123FB5FCA213EF138FEA7E0F1200B3B0003FB512F84814FCB612FE
A26C14FC6C14F81F3977B830>I<EB07FC90383FFFC090B512F00003804814FE4880261F
F80F1380263FE00113C09038C0007F4848EB3FE090C7121FED0FF04814075A6C15F81503
A3127E1218C8FCA2150716F0150F16E0151F16C0153FED7F8015FF4A13005DEC07FC4A5A
4A5A4A5A4A5A4A5A4990C7FC495A495AEB0FF0EB3FE0495A495A4890C8FC4848EB01F048
48EB03F8485AEA1FE048B6FCB7FCA37E6C15F025397BB830>I<EB03FF013F13E090B512
F84814FE4880481580260FFE0113C09038F0007F4848EB1FE0150F16F01507A26C5A6C5A
C8FC150F16E0A2151FED3FC0157FEDFF8002071300903807FFFE495B5D8115FF6D1480D9
000113C09138003FE0ED1FF0ED07F8150316FC150116FE1500A21218127EB4FCA2150116
FC4814036C15F86C6C13076DEB1FF0D83FF0133F3A1FFE01FFE06CB612C06C15806CECFE
00C65C013F13F001031380273A7CB830>I<EC03FC4A7E140F141FA2143F147F157E14FE
A2EB01FCEB03F8A2EB07F0A2EB0FE0EB1FC0A2EB3F80A2EB7F0013FEA2485A485AA2485A
A2485A485AA2485AA248C7FC12FEB8FC1780A46C1600C8007EC7FCAA91387FFFFE91B6FC
A46E5B29397DB830>I<000FB612804815C05AA316800180C8FCAEEB83FF019F13C090B5
12F015FC8181D9FE0313809039F0007FC049133F0180EB1FE06CC7120F000E15F0C81207
A216F81503A31218127EA2B4FC150716F048140F6C15E06C141F6DEB3FC06D137F3A3FE0
01FF80261FFC0F13006CB55A6C5C6C5C6C14E06C6C1380D90FFCC7FC25397BB730>I<EC
0FF8EC7FFF49B51280010714E0131F4914F090387FF80F9039FFC007F84813803803FE00
5B485A4848EB03F0ED01E0484890C7FC5B123F5BA2127FEB000C903803FFE0010F13F8D8
FF3F13FE48B6FCB7128016C09039FE007FE001F8EB1FF001E0130F49EB07F849EB03FCA2
90C7120116FE1500A37EA46C7E15016D14FC121F6D1303000FEC07F86D130F6C6CEB1FF0
6DEB3FE03A03FF81FFC06C90B512806C15006D5B011F13F8010713E001011380273A7CB8
30>I<127CB712FC16FEA416FC48C7EA0FF816F0ED1FE0007CEC3FC0C8EA7F80EDFF00A2
4A5A4A5A5D14075D140F5D4A5AA24A5AA24AC7FCA25C5C13015CA213035CA213075CA449
5AA6131F5CA96D5A6DC8FC273A7CB830>I<49B4FC011F13F0017F13FC90B57E0003ECFF
804815C048010113E03A1FF8003FF049131FD83FC0EB07F8A24848EB03FC90C71201A56D
1303003F15F86D13076C6CEB0FF06C6CEB1FE0D807FCEB7FC03A03FF83FF806C90B51200
6C6C13FC011F13F0497F90B512FE48802607FE0013C0D80FF8EB3FE0D81FE0EB0FF04848
EB07F8491303007F15FC90C712014815FE481400A66C14016C15FC6D1303003F15F86D13
07D81FF0EB1FF06D133F3A0FFF01FFE06C90B512C06C1580C6ECFE006D5B011F13F00101
90C7FC273A7CB830>I<49B4FC010F13E0013F13F890B57E4880488048010113803A0FFC
007FC0D81FF0EB3FE04848131F49EB0FF048481307A290C7EA03F85A4815FC1501A416FE
A37E7E6D1303A26C6C13076C6C130F6D133FD80FFC13FF6CB6FC7E6C14FE6C14F9013FEB
E1FC010F138190380060011400ED03F8A2150716F0150F000F15E0486C131F486CEB3FC0
157FEDFF804A1300EC07FE391FF01FFC90B55A6C5C6C5C6C1480C649C7FCEB3FF0273A7C
B830>I<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F00C7FCAF120FEA3FC0EA
7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C276EA630>I<EA03C0EA0FF0EA1FF8A2EA3F
FCA4EA1FF8A2EA0FF0EA03C0C7FCAFEA03C0EA0FF0121F13F8123F13FCA3121FA2120F12
031200120113F8120313F01207EA1FE0123FEA7FC0EAFF80EA7F00127E12380E3470A630
>I<16F01503ED07F8151F157FEDFFF014034A13C0021F138091383FFE00ECFFF8495B01
0713C0495BD93FFEC7FC495A3801FFF0485B000F13804890C8FCEA7FFC5BEAFFE05B7FEA
7FF87FEA1FFF6C7F000313E06C7F38007FFC6D7E90380FFF806D7F010113F06D7FEC3FFE
91381FFF80020713C06E13F01400ED7FF8151F1507ED03F01500252F7BB230>I<007FB7
FCA2B81280A36C16006C5DCBFCA7003FB612FE4881B81280A36C1600A229157DA530>I<
1278127EB4FC13C07FEA7FF813FEEA1FFF6C13C000037F6C13F86C6C7EEB1FFF6D7F0103
13E06D7F9038007FFC6E7E91380FFF806E13C0020113F080ED3FF8151F153FEDFFF05C02
0713C04A138091383FFE004A5A903801FFF0495B010F13804990C7FCEB7FFC48485A4813
E0000F5B4890C8FCEA7FFE13F8EAFFE05B90C9FC127E1278252F7BB230>I<EB1FFE90B5
12E0000314F8000F14FE4880481580267FF80313C09038C0007F48C7121F16E0150FA312
7E151F0018EC7FC0C812FF020313804A13004A5AEC1FF84A5AEC7FC04A5A92C7FC495AA2
495A5CA213075CA86D5A90C9FCA8EB01C0EB07F0A2497EA36D5AA2EB01C023397AB830>
I<EC1FE0ECFFF8010313FE010F7F4914804914C090397FF03FE09038FF800F4890380007
F0D803FC13033A07F801FBF89038F007FF380FE01F4A13FCEA1FC0495A003FEBFF0F9038
00FE07903901FC03FE007FEBF801EA7E03ECF000A2EAFE0700FC49137EAA00FE6D13FED8
7E0314FCA2ECF801D87F0114F8003FEBFC03903900FE07F0903880FF0F001F90387FFFE0
6D6C13C0EA0FE06E13803A07F007FE009038F801F86C6CC7127C6CB414FE6CEB80039038
7FF01F6DB512FC6D14F86D14E0010314C00100EBFE00EC1FF0273A7CB830>I<147F4A7E
A2497FA4497F14F7A401077F14E3A3010F7FA314C1A2011F7FA490383F80FEA590387F00
7FA4498049133F90B6FCA34881A39038FC001F00038149130FA4000781491307A2D87FFF
EB7FFFB56CB51280A46C496C130029397DB830>I<007FB512F0B612FE6F7E82826C813A
03F8001FF815076F7E1501A26F7EA615015EA24B5A1507ED1FF0ED7FE090B65A5E4BC7FC
6F7E16E0829039F8000FF8ED03FC6F7E1500167FA3EE3F80A6167F1700A25E4B5A1503ED
1FFC007FB6FCB75A5E16C05E6C02FCC7FC29387EB730>I<91387F803C903903FFF03E49
EBFC7E011F13FE49EBFFFE5B9038FFE07F48EB801F3903FE000F484813075B48481303A2
484813015B123F491300A2127F90C8FC167C16005A5AAC7E7EA2167C6D14FE123FA27F12
1F6D13016C6C14FCA26C6CEB03F86D13076C6CEB0FF03901FF801F6C9038E07FE06DB512
C06D14806D1400010713FC6D13F09038007FC0273A7CB830>I<003FB512E04814FCB67E
6F7E6C816C813A03F8007FF0ED1FF8150F6F7E6F7E15016F7EA2EE7F80A2163F17C0161F
A4EE0FE0AC161F17C0A3163F1780A2167F17005E4B5A15034B5A150F4B5AED7FF0003FB6
5A485DB75A93C7FC6C14FC6C14E02B387FB730>I<007FB7FCB81280A47ED803F8C7123F
A8EE1F0093C7FCA4157C15FEA490B5FCA6EBF800A4157C92C8FCA5EE07C0EE0FE0A9007F
B7FCB8FCA46C16C02B387EB730>I<003FB712804816C0B8FCA27E7ED801FCC7121FA8EE
0F8093C7FCA5153E157FA490B6FCA69038FC007FA4153E92C8FCAE383FFFF8487FB5FCA2
7E6C5B2A387EB730>I<02FF13F00103EBC0F8010F13F1013F13FD4913FF90B6FC4813C1
EC007F4848133F4848131F49130F485A491307121F5B123F491303A2127F90C7FC6F5A92
C8FC5A5AA892B5FC4A14805CA26C7F6C6D1400ED03F8A27F003F1407A27F121F6D130F12
0F7F6C6C131FA2D803FE133F6C6C137FECC1FF6C90B5FC7F6D13FB010F13F30103EBC1F0
010090C8FC293A7DB830>I<3B3FFF800FFFE0486D4813F0B56C4813F8A26C496C13F06C
496C13E0D803F8C7EAFE00B290B6FCA601F8C7FCB3A23B3FFF800FFFE0486D4813F0B56C
4813F8A26C496C13F06C496C13E02D387FB730>I<007FB6FCB71280A46C1500260007F0
C7FCB3B3A8007FB6FCB71280A46C1500213879B730>I<49B512F04914F85BA27F6D14F0
90C7EAFE00B3B3123C127EB4FCA24A5A1403EB8007397FF01FF86CB55A5D6C5C00075C00
0149C7FC38003FF025397AB730>I<D83FFF90380FFF80486D4813C0B56C5AA26C497E6C
496C1380D803F0903803F8004B5A4B5A151F4B5A5E4BC7FC15FE14014A5A5D4A5A4A5A14
1F5D4A5A4AC8FC5C13F18101F37F13F790B57E14EFECC7F01483EC03F8140101FE7F496C
7E5B157F497F82151F82150F826F7EA26F7E1501821500D83FFF903803FFC0486D4813E0
B56C5AA26C497E6C496C13C02B387FB730>I<383FFFF8487FB57EA26C5B6C5BD801FCC9
FCB3B0EE0F80EE1FC0A9003FB7FC5AB8FCA27E6C16802A387EB730>I<D83FF8ECFFE048
6C4913F0486C4913F8A2007F16F06C6C4913E00007160001EF14BFEC800FA39039E7C01F
3FA4ECE03F01E3133EA2ECF07EA201E1137CA2ECF8FCA201E013F8A214FDEC7DF0A3147F
EC3FE0A3EC1FC0A2EC070091C7FCADD83FFC903801FFE0486C4913F0B54913F8A26C486D
13F06C486D13E02D387FB730>I<D83FFC90381FFF80486C4913C0B54913E0A26C6D6C13
C06C6E13800003913801F800EBF7C0A3EBF3E0A314F013F1A214F8A213F014FCA2147C14
7EA2143E143FA2141FA21581A2140F15C1A2140715E1A2140315F1A21401A215F91400A3
157DA3153FEA3FFF481380B5EAC01FA26CEB800F6C496C5A2B387EB730>I<90383FFFE0
48B512FC000714FF4815804815C04815E0EBF80001E0133FD87F80EB0FF0A290C71207A4
4815F8481403B3A96C1407A26C15F0A36D130FA26D131F6C6CEB3FE001F813FF90B6FC6C
15C06C15806C1500000114FCD8003F13E0253A7BB830>I<007FB512F0B612FE6F7E16E0
826C813903F8003FED0FFCED03FE15016F7EA2821780163FA6167F17005EA24B5A1503ED
0FFCED3FF890B6FC5E5E16804BC7FC15F001F8C9FCB0387FFFC0B57EA46C5B29387EB730
>I<003FB57E4814F0B612FC15FF6C816C812603F8017F9138003FF0151F6F7E15071503
821501A515035E1507150F4B5A153F4AB45A90B65A5E93C7FC5D8182D9F8007FED3FE015
1F150F821507A817F8EEF1FCA53A3FFF8003FB4801C0EBFFF8B56C7E17F06C496C13E06C
49EB7FC0C9EA1F002E397FB730>82 D<90390FF803C0D97FFF13E048B512C74814F74814
FF5A381FF80F383FE001497E4848137F90C7123F5A48141FA2150FA37EED07C06C91C7FC
7F7FEA3FF0EA1FFEEBFFF06C13FF6C14E0000114F86C80011F13FF01031480D9003F13C0
14019138007FE0151FED0FF0A2ED07F8A2007C140312FEA56C140716F07F6DEB0FE06D13
1F01F8EB3FC001FF13FF91B51280160000FD5CD8FC7F13F8D8F81F5BD878011380253A7B
B830>I<003FB712C04816E0B8FCA43AFE003F800FA8007CED07C0C791C7FCB3B1011FB5
FC4980A46D91C7FC2B387EB730>I<3B7FFFC007FFFCB56C4813FEA46C496C13FCD803F8
C7EA3F80B3B16D147F00011600A36C6C14FE6D13016D5CEC800390393FE00FF890391FF8
3FF06DB55A6D5C6D5C6D91C7FC9038007FFCEC1FF02F3980B730>I<D87FFE90380FFFC0
B54913E06E5AA24A7E6C486D13C0D807F0903801FC00A26D130300035DA46C6C495AA46C
6C495AA46D131F6D5CA3EC803F013F5CA46D6C48C7FCA490380FE0FEA401075B14F1A301
035BA314FB01015BA314FFA26D5BA46E5A6E5A2B397EB730>I<D83FFC903801FFE0486C
4913F000FF16F8A2007F16F06C486D13E0D81FC09038001FC0000F1680A76D143F000716
00A7000390380F803E9039F01FC07EEC3FE0A3EC7FF0A2147D0001157CA29039F8FDF8FC
A314F8A300005D01F913FCA2ECF07CA201FD137DA2017D5CECE03DA3017F133FA2ECC01F
A2013F5CA2EC800F6D486C5A2D397FB730>I<3A3FFF01FFF84801837F02C77FA202835B
6C01015B3A01FC007F806D91C7FC00005C6D5BEB7F01EC81FCEB3F8314C3011F5B14E701
0F5B14FF6D5BA26D5BA26D5BA26D90C8FCA4497FA2497FA2815B81EB0FE781EB1FC381EB
3F8181EB7F0081497F49800001143F49800003141F49800007140FD87FFEEB7FFFB590B5
128080A25C6C486D130029387DB730>I<D87FFF90381FFFC0B56C4813E0A46C496C13C0
D803F8903803F8006D1307A26C6C495AA26C6C5C151F6D5CEC803F013F5CECC07F011F91
C7FCA290380FE0FEA214F101075BA2903803FBF8A201015B14FF6D5BA26E5AA36E5AB190
3803FFF8497F497FA26D5B6D5B2B387EB730>I<007FB5FCB61280A4150048C8FCB3B3B3
A5B6FC1580A46C140019476DBE30>91 D<007FB5FCB61280A47EC7123FB3B3B3A5007FB5
FCB6FCA46C140019477DBE30>93 D<007FB612F0A2B712F8A36C15F0A225077B7D30>95
D<EB7FF80003B5FC4814C04880488048809038E01FFC9038C003FE14016E7E6C487F6CC7
7FC8123FA491B5FC130F137F48B6FC12075A48EB803F383FF800EA7FE0138048C7FC5AA4
157F7E6C6C13FFEBC003263FF01FEBFF8090B712C07E6C14EF000314876CD9FE01138026
003FE0C8FC2A2A7BA830>97 D<EA3FFC487E12FFA2127F123F1200AAEC03FE91381FFF80
027F13E091B57E90B612FC82ECFE079138F001FF4A6C13804A137F4AEB3FC091C7121F17
E049140FA217F01607A8160FA217E07F161F6EEB3FC0A26EEB7F806E13FFDAF003130091
38FC0FFE91B55A5E495CD97E7F13C0D93C1F90C7FC90380003FC2C3980B730>I<ECFFE0
010713FC011F7F017F7F90B612804815C048EB807F3907FC003F485A485A49EB1F804848
EB0F004990C7FC127F90C9FCA25A5AA87E7EA27F003FEC07C06DEB0FE06C7E6D131F6C6C
14C0D807FE133F9039FFC0FF806C90B5FCC615006D5B011F13F801075B01011380232A7A
A830>I<913801FFE04A7F5CA28080EC0007AAEB03FE90381FFF874913E790B6FC5A5A48
1303380FFC00D81FF0133F49131F485A150F4848130790C7FCA25AA25AA87E6C140FA27F
003F141F6D133F6C7E6D137F390FF801FF2607FE07EBFFC06CB712E06C16F06C14F76D01
C713E0011F010313C0D907FCC8FC2C397DB730>I<49B4FC010713E0011F13F8017F7F90
B57E488048018113803A07FC007FC04848133FD81FE0EB1FE0150F484814F0491307127F
90C7FCED03F85A5AB7FCA516F048C9FC7E7EA27F003FEC01F06DEB03F86C7E6C7E6D1307
D807FEEB1FF03A03FFC07FE06C90B5FC6C15C0013F14806DEBFE00010713F8010013C025
2A7CA830>I<EDFF80020713E0021F13F05C4A13F891B5FC491387903803FE079138FC03
F0903907F800C04A1300A8003FB612C04815E0B7FCA36C15C0260007F0C7FCB3A9003FB5
12FE4880B71280A26C15006C5C25397DB830>I<D903FC13FF90261FFF8713C04913DF90
B712E05A5A2607FE07138F903AF801FE07C048486C6CC7FCA2497F001F8149133FA56D13
7F000F92C7FC6D5BA26C6C485AEBFE0790B55A5D485C15C001DF5BD9C3FCC8FC01C0C9FC
A37F7F6CB512F015FF6C15C04815F0488148813A3FE0001FFE0180130148C8127F007E81
00FE168048151FA56C153F007FED7F006D5C6C6C495A01F013076CB4EB7FFC6C90B55A6C
5D000115C06C6C91C7FC011F13FC010113C02B3E7DA730>I<EA3FFC487E12FFA2127F12
3F1200AAEC01FE91380FFF80023F13E091B57E90B67EA29138FE07FCECF8039138E001FE
14C0EC8000A291C7FCA25BB3A23B3FFFF81FFFF8486D4813FCB500FE14FEA26C01FC14FC
6C496C13F82F3880B730>I<14E0EB03F8A2497EA36D5AA2EB00E091C8FCA9381FFFF848
7F5AA27E7EEA0001B3A9003FB612C04815E0B7FCA27E6C15C023397AB830>I<EC01C0EC
07F0A2EC0FF8A3EC07F0A2EC01C091C7FCA990B512F04814F8A47EEB0003B3B3A5EC07F0
A2123C007EEB0FE0B4131FEC3FC0147F90B512806C14005C6C5B000F13F0000313C01D4E
7CB830>I<EA7FF8487EA4127F1200AB0203B512804A14C017E0A217C06E14809139001F
E0004B5A4B5A4BC7FC4A5A4A5AEC0FF84A5A4A5A4A5A4A5A01FD7F90B57E8114F7ECE3F8
ECC1FCEC81FEEC00FF497F496D7E6F7E826F7E15076F7E6F7E3B7FFFF81FFFE0B56C4813
F017F8A217F06C496C13E02D387FB730>I<387FFFF8B57EA47EEA0001B3B3A8007FB612
F0B712F8A46C15F025387BB730>I<02FC137E3B7FC3FF01FF80D8FFEF01877F90B500CF
7F15DF92B57E6C010F13872607FE07EB03F801FC13FE9039F803FC01A201F013F8A301E0
13F0B3A23C7FFE0FFF07FF80B548018F13C0A46C486C01071380322881A730>I<EC01FE
3A3FFC0FFF80267FFE3F13E000FF90B57E90B67E7E6C9038FE07FCC6EBF8039138E001FE
14C0EC8000A291C7FCA25BB3A23B3FFFF81FFFF8486D4813FCB500FE14FEA26C01FC14FC
6C496C13F82F2880A730>I<49B4FC010F13E0013F13F8497F90B57E0003ECFF8014013A
07FC007FC04848EB3FE0D81FE0EB0FF0A24848EB07F8491303007F15FC90C71201A300FE
EC00FEA86C14016C15FCA26D1303003F15F86D13076D130F6C6CEB1FF06C6CEB3FE06D13
7F3A07FF01FFC06C90B512806C15006C6C13FC6D5B010F13E0010190C7FC272A7CA830>
I<EC03FE3A3FFC1FFF80267FFE7F13E000FF90B57E90B612FC6C816CEBFE07C69038F001
FF4A6C13804A137F4AEB3FC091C7121F17E049140FA217F01607A8160FA217E07F161F6E
EB3FC0A26EEB7F806E13FFDAF00313009138FC0FFE91B55A5E495C6E13C0021F90C7FCEC
03FC91C9FCAD383FFFF8487FB57EA26C5B6C5B2C3C80A730>I<ED07F83A3FFF803FFF48
6DB51280B512C302CF14C06C13DF6C9038FFFC3FD8001F13E09238801F809238000F004A
90C7FC5C5C5CA25CA45CAF003FB512FC4880B7FCA26C5C6C5C2A287EA730>114
D<90381FFC1E48B5129F000714FF5A5A5A387FF007EB800100FEC7FC4880A46C143E007F
91C7FC13E06CB4FC6C13FC6CEBFF806C14E0000114F86C6C7F01037F9038000FFF020013
80007C147F00FEEC1FC0A2150F7EA27F151F6DEB3F806D137F9039FC03FF0090B6FC5D5D
00FC14F0D8F83F13C026780FFEC7FC222A79A830>I<EB0780497E131FA9003FB612E048
15F0B7FCA36C15E026001FC0C7FCB216F8ED01FCA5ECE003010FEB07F814F09138FC1FF0
6DB512E06D14C016806D14009038007FFCEC1FF026337EB130>I<D83FFCEB3FFC486C49
7E00FF14FFA2007F147F003F143F00001400B3A41501A2150315076D130F903A7FC07FFF
F891B612FC6D15FE7F6D4913FC6D9038F87FF8010001C0C7FC2F2880A630>I<3B3FFFC0
7FFF80486DB512C0B515E0A26C16C06C496C13803B01F80003F000A26D130700005DA26D
130F017E5CA2017F131F6D5CA2EC803F011F91C7FCA26E5A010F137EA2ECE0FE01075BA2
14F101035BA3903801FBF0A314FF6D5BA36E5A6E5A2B277EA630>I<3B3FFFC01FFFE048
6D4813F0B515F8A26C16F06C496C13E0D807E0C7EA3F00A26D5C0003157EA56D14FE0001
5DEC0F80EC1FC0EC3FE0A33A00FC7FF1F8A2147DA2ECFDF9017C5C14F8A3017E13FBA290
393FF07FE0A3ECE03FA2011F5C90390F800F802D277FA630>I<3A3FFF81FFFC4801C37F
B580A26C5D6C01815BC648C66CC7FC137FEC80FE90383F81FC90381FC3F8EB0FE3ECE7F0
6DB45A6D5B7F6D5B92C8FC147E147F5C497F81903803F7E0EB07E790380FE3F0ECC1F890
381F81FC90383F80FE90387F007E017E137F01FE6D7E48486D7E267FFF80B5FCB500C114
8014E3A214C16C0180140029277DA630>I<3B3FFFC07FFF80486DB512C0B515E0A26C16
C06C496C13803B01FC0003F000A2000014076D5C137E150F017F5C7F151FD91F805BA214
C0010F49C7FCA214E00107137EA2EB03F0157C15FCEB01F85DA2EB00F9ECFDF0147D147F
A26E5AA36E5AA35DA2143F92C8FCA25C147EA2000F13FE486C5AEA3FC1EBC3F81387EB8F
F0EBFFE06C5B5C6C90C9FC6C5AEA01F02B3C7EA630>I<001FB612FC4815FE5AA316FC90
C7EA0FF8ED1FF0ED3FE0ED7FC0EDFF80003E491300C7485A4A5A4A5A4A5A4A5A4A5A4A5A
4990C7FC495A495A495A495A495A495A4948133E4890C7127F485A485A485A485A485A48
B7FCB8FCA46C15FE28277DA630>I<ED3FF0913803FFF8140F5C147F16F09138FFF00092
C7FC495A5CB3A21303495A133F383FFFF0B55A5C91C8FC14C080003F7F38003FF813076D
7E1301B3A2806D7E15F091387FFFF016F8141F8014039138003FF025477BBE30>I<127C
A212FEB3B3B3AD127CA207476CBE30>I<EA7FE0EAFFFE6D7E8014F07EC66C7E13076D7E
1301B3A2806D7E15E091387FFFE06E13F8801407141F5C4A13E09138FFE00092C7FC495A
5CB3A21303495A137F387FFFF0B5FC14C05C49C8FCEA7FE025477BBE30>I
E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fh cmsy10 10.95 9
/Fh 9 102 df<007FB812F8B912FCA26C17F83604789847>0 D<0060166000F816F06C15
01007E15036CED07E06C6CEC0FC06C6CEC1F806C6CEC3F006C6C147E6C6C5C6C6C495A01
7E495A6D495A6D6C485A6D6C485A6D6C48C7FC903803F07E6D6C5A903800FDF8EC7FF06E
5A6E5AA24A7E4A7EECFDF8903801F8FC903803F07E49487E49486C7E49486C7E49486C7E
017E6D7E496D7E48486D7E4848147E4848804848EC1F804848EC0FC048C8EA07E0007EED
03F0481501481500006016602C2C73AC47>2 D<EB0FFCEB3FFF90B512C0000314F04880
488048804880A2481580A3B712C0AA6C1580A36C1500A26C5C6C5C6C5C6C5CC614C0013F
90C7FCEB0FFC22227BA72D>15 D<1818187CEF01FCEF07F8EF1FF0EF7FC0933801FF00EE
07FCEE1FF0EE7FC04B48C7FCED07FCED1FF0ED7FC04A48C8FCEC07FCEC1FF0EC7FC04948
C9FCEB07FCEB1FF0EB7FC04848CAFCEA07FCEA1FF0EA7FC048CBFC5AEA7F80EA3FE0EA0F
F8EA03FEC66C7EEB3FE0EB0FF8EB03FE903800FF80EC3FE0EC0FF8EC03FE913800FF80ED
3FE0ED0FF8ED03FE923800FF80EE3FE0EE0FF8EE03FE933800FF80EF3FE0EF0FF8EF03FC
170018381800AE007FB812F8B912FCA26C17F8364878B947>20 D<140C141EA2143E143C
A2147C1478A214F8495AA2495A495AA2495A49CDFC133E137EEA01F8485AEA0FE0003FBB
12FEBDFCA2003F1AFED80FE0CDFCEA03F06C7EEA007E133E7F6D7E6D7EA26D7E6D7EA26D
7E1478A2147C143CA2143E141EA2140C50307BAE5B>32 D<176017F01601A2EE03E0A2EE
07C0A2EE0F80A2EE1F00A2163EA25EA25EA24B5AA24B5AA24B5AA24B5AA24BC7FCA2153E
A25DA25DA24A5AA24A5AA24A5AA24A5AA24AC8FCA2143EA25CA25CA2495AA2495AA2495A
A2495AA249C9FCA2133EA25BA25BA2485AA2485AA2485AA2485AA248CAFCA2123EA25AA2
5AA25A12602C5473C000>54 D<0060EE018000F0EE03C06C1607A200781780007C160FA2
003C1700003E5EA26C163EA26C163C6D157CA2000716786D15F8A26C6C4A5AA200015E6D
140390B7FC6C5EA3017CC7EA0F80A2013C92C7FC013E5CA2011E141E011F143EA26D6C5B
A2010714786E13F8A26D6C485AA201015CECF003A201005CECF807A291387C0F80A2023C
90C8FCEC3E1FA2EC1E1EEC1F3EA2EC0FFCA26E5AA36E5AA36E5A6E5A324180BE33>56
D<387FFFFCB5FCA300F0C7FCB3B3B3B3AD1260165A71C328>100
D<B512F814FCA3C7123CB3B3B3B3AD1418165A7EC328>I E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fi cmti10 10.95 25
/Fi 25 121 df<EA01E0EA07F8120FA2EA1FFCA4EA0FF8EA0798EA001813381330A21370
136013E013C01201EA0380EA07001206120E5A5A5A5A5A0E1C7A891C>44
D<387FFFFCA3B5FCA21605799521>I<49B812F0A390260003FEC7123F180F4B1403A2F0
01E014075DA3140F5D19C0A2141F5D1770EFF003023F02E013804B91C7FCA21601027F5C
ED8003A2160702FFEB1F8092B5FCA349D9003FC8FC4A7F82A20103140E5CA2161E010714
1C5CA293C9FC130F5CA3131F5CA3133F5CA2137FA25C497EB612E0A33C3E7BBD3B>70
D<48B9FCA25A903AFE001FF00101F89138E0007FD807E0163E49013F141E5B48C75BA200
1E147FA2001C4B131C123C003814FFA2007892C7FC12704A153C00F01738485CC7160014
03A25DA21407A25DA2140FA25DA2141FA25DA2143FA25DA2147FA25DA214FFA292C9FCA2
5BA25CA21303A25CEB0FFE003FB67E5AA2383D71BC41>84 D<147E49B47E903907C1C380
90391F80EFC090383F00FF017E137F4914804848133F485AA248481400120F5B001F5C15
7E485AA215FE007F5C90C7FCA21401485C5AA21403EDF0385AA21407EDE078020F137012
7C021F13F0007E013F13E0003E137FECF3E1261F01E313C03A0F8781E3803A03FF00FF00
D800FC133E252977A72E>97 D<EB1FC0EA0FFF5CA2EA003FA291C7FCA25BA2137EA213FE
A25BA21201A25BA21203A25B147E3907F1FF809038F783E09038EF01F013FE390FF800F8
A24913FC49137C485A157E5B15FE123FA290C7FCA248130115FC127EA2140300FE14F85A
A2EC07F0A215E048130F15C0141F15800078EB3F00127C147E003C5B383E01F8381E03E0
6C485A6CB4C7FCEA01F81F4076BE2A>I<EC1FC0ECFFF0903803F03C903807C01E90381F
800E90383F000F017E133F4913FF485A485A000714FE5B000F14FC48481300A2485AA312
7F90C8FCA35A5AA6481403007E1407150F151E003E143C15786C14F0EC03E0390F800F80
3903E07E003801FFF838003FC0202977A72A>I<EE3F80ED1FFF1700A2ED007FA2167EA2
16FEA25EA21501A25EA21503A25EA21507A25E147E903801FF8F903807C1CF90391F80EF
C090383F00FF017E137F5B48486D5A485AA2485A000F92C7FC5B001F5CA24848137EA215
FE127F90C75AA214015A485CA2140316384814F0A21407167891380FE070127C021F13F0
007E013F5B003E137FECF3E1261F01E35B3A0F8781E3802703FF00FFC7FCD800FC133E29
4077BE2E>I<EC3F80903801FFE0903807E0F890381F803CEB3E0001FC131E485A485A12
074848133E49133C121F4848137C15F8EC03F0397F000FE0ECFF809038FFFC00B512C048
C8FCA45AA61506150E151E007C143C15786C14F0EC01E06CEB07C0390F801F003807C0FC
3801FFF038007F801F2976A72A>I<EC03F0EC0FFC91383E0E1C9138FC077E903901F003
FE1303903807E001D90FC013FCEB1F80A2EB3F004914F8137E01FE1303A2484814F0A215
0712034914E0A2150F12074914C0A2151FA216805B153F1203ED7F006D5BA200015B0000
495A9038F80F7E90387C1EFEEB1FF8903807E0FC90C7FC1401A25DA21403A25D001C1307
007F5C48130F5D4A5A4AC7FC48137E00F85B387C03F0381FFFC0D803FEC8FC273B7CA72A
>103 D<EB01FC13FF5CA21303A25CA21307A25CA2130FA25CA2131FA25CA2133FA291C8
FCEC03F890387F0FFE91383E0F80D97E7813C0ECE007D9FFC013E014801400A2485A5BA2
5B0003140F16C05BA20007141F16805BA2000F143F16005B5D001F147EEDFE074913FCA2
003F0101130FEDF80E1300161E48ECF01CA2007E1538A200FE1570020013E048EC7FC000
38EC1F0028407ABE2E>I<1478EB01FCA21303A314F8EB00E01400AD137C48B4FC38038F
80EA0707000E13C0121E121CEA3C0F1238A2EA781F00701380A2EAF03F140012005B137E
13FE5BA212015BA212035B1438120713E0000F1378EBC070A214F0EB80E0A2EB81C01383
148038078700EA03FEEA00F8163E79BC1C>I<1507ED1FC0A2153FA31680ED0E0092C7FC
ADEC07C0EC3FF0EC78F8ECE07CEB01C01303EC807EEB0700A2010E13FE5D131E131CEB3C
01A201005BA21403A25DA21407A25DA2140FA25DA2141FA25DA2143FA292C7FCA25CA214
7EA214FEA25CA213015CA2121C387F03F012FF495A5C495A4848C8FCEAF83EEA707CEA3F
F0EA0FC0225083BC1C>I<EB01FC13FF5CA21303A25CA21307A25CA2130FA25CA2131FA2
5CA2133FA291C8FCED03E049EB0FF8ED3C3C017EEB707CEDE1FC9038FE01C1EC03839038
FC0703140E0001011C13F891383800E0494813001460000313E0EBF9C0EBF78001FEC8FC
1207EBFFE0EBE7F8EBE0FE000F137F6E7EEBC01F81001F130F16701380A2003F15F0021F
13E001001380A248148116C0007EEB0F83168000FE14879138078F0048EB03FE0038EB00
F826407ABE2A>I<EB07F0EA03FF14E0A2EA000FA214C0A2131FA21480A2133FA21400A2
5BA2137EA213FEA25BA21201A25BA21203A25BA21207A25BA2120FA25BA2121FA25BA212
3FA290C7FCA25A1307127EA2EAFE0F130E12FCA2131E131CA2EA7C381378EA3C70EA1FE0
EA0780144079BE17>I<D801F0D93F80137F3D07FC01FFE003FFC03D0F3E07C1F80F83F0
3D0E1F0F00FC1E01F8001E011C90387C3800001C49D97E707F003C01F05C0038157F4A5C
26783FC05C12704A91C7FC91C7127E00F003FE1301494A5CEA007EA20301140301FE5F49
5CA203031407000160495C180F03075D0003051F13E0494A1480A2030FEC3F810007F001
C0495CA2031F91383E0380120F494AEC0700A2033F150E001FEF1E1C4991C7EA0FF80007
C7000EEC03E0432979A74A>I<D801F0EB3F803A07FC01FFE03A0F3E07C1F83A0E1F0F00
FC001E011C137C001C49137E003C13F012385C38783FC012705C91C7FC00F015FE495CEA
007EA2150101FE5C5BA2150300015D5B15075E0003020F13704914C0A2031F13F00007ED
80E05B1681EE01C0120F49EC0380A2EE0700001FEC0F0E49EB07FC0007C7EA01F02C2979
A733>I<EC1FC0ECFFF8903803F07C90380FC01FEB1F8090393F000F80017E14C0491307
484814E0485A12075B000F15F0485AA2485AA2ED0FE0127F90C7FCA2151F4815C05AA2ED
3F80A2ED7F00A248147E007C5C007E13015D4A5A003E495A6C495A4A5A260F803EC7FC38
07C0FC3801FFF038003F80242977A72E>I<903903E001F890390FF807FE903A1E7C1E0F
80903A1C3E3C07C0013C137801389038E003E0EB783F017001C013F0ED80019038F07F00
01E015F8147E1603000113FEA2C75AA20101140717F05CA20103140F17E05CA20107EC1F
C0A24A1480163F010F15005E167E5E131F4B5A6E485A4B5A90393FB80F80DA9C1FC7FCEC
0FFCEC03E049C9FCA2137EA213FEA25BA21201A25BA21203A2387FFFE0B5FCA22D3A80A7
2E>I<D801F013FC3A07FC07FF803A0F3E0F03C0260E1F1C13E0001EEB380F001C137000
3CEBE01F123814C0D8783F14C00070903880070092C7FC91C8FC12F05BEA007EA313FE5B
A312015BA312035BA312075BA3120F5BA3121F5B0007C9FC232979A726>114
D<EC7F80903801FFE0903807C0F890381F003C013E131C013C131E017C133E49137E15FE
A2000114FCA215706D13007FEBFFC014FC6C13FF15806D13C06D13E0010F13F01300140F
14071403120C123F387F80011403D8FF0013E0A300FCEB07C000F0EB0F8012700078EB1F
006C133C381F01F83807FFE0C690C7FC1F297AA725>I<EB01C0EB03F01307A25CA2130F
A25CA2131FA25CA2133FA291C7FCA2007FB51280B6FC1500D8007EC7FC13FEA25BA21201
A25BA21203A25BA21207A25BA2120FA25BA2121F141C1380A2003F133C1438EB00781470
14F05C495AEA1F03495A6C48C7FCEA07FCEA01F0193A78B81E>I<137C48B4141C26038F
80137EEA0707000E7F001E15FE121CD83C0F5C12381501EA781F007001805BA2D8F03F13
03140000005D5B017E1307A201FE5C5B150F1201495CA2151F0003EDC1C0491481A2153F
1683EE0380A2ED7F07000102FF13005C01F8EBDF0F00009038079F0E90397C0F0F1C9039
1FFC07F8903907F001F02A2979A731>I<017C167048B491387001FC3A038F8001F8EA07
07000E01C015FE001E1403001CEDF000EA3C0F0038177C1507D8781F4A133C00701380A2
D8F03F130F020049133812005B017E011F14784C137013FE5B033F14F0000192C712E05B
A2170100034A14C049137E17031880A2EF070015FE170E00010101141E01F86D131C0000
D9039F5BD9FC076D5A903A3E0F07C1E0903A1FFC03FFC0902703F0007FC7FC372979A73C
>119 D<903903F001F890390FFC07FE90393C1E0E0F9026780F1C138001F0EBB83FD801
E013F89039C007F07FEA0380000714E0D9000F140048151C000E4AC7FCA2001E131FA2C7
5BA2143F92C8FCA35C147EA314FE4A131CA30101143C001E1538003F491378D87F811470
018314F000FF5D9039077801C039FE0F7C033A7C0E3C078027783C1E1EC7FC391FF80FFC
3907E003F029297CA72A>I E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fj cmbx10 10.95 54
/Fj 54 124 df<EDFFF8020F13FF027F8049B612E001079038C01FF090390FFE0007D91F
F8497ED93FE0131F4948497E13FF5C5A91C7FCA2705A705AEE03C093C8FCA6EE03FCB8FC
A50001903880001F160FB3AB007FD9FE03B512F0A534407EBF3A>12
D<EA0FC0EA1FE0EA3FF0EA7FF8EAFFFCA313FEA3127F123F121FEA0FDEEA001EA2133E13
3CA2137C1378A213F8EA01F0A2EA03E0EA07C0EA0F80121FEA3F00121E120C0F2079BE1D
>39 D<EA0FC0EA1FE0EA3FF0EA7FF8EAFFFCA6EA7FF8EA3FF0EA1FE0EA0FC00E0E798D1D
>46 D<140F143F5C495A130F48B5FCB6FCA313F7EAFE071200B3B3A8007FB612F0A5243C
78BB34>49 D<903803FF80013F13F890B512FE00036E7E4881260FF80F7F261FC0037F48
48C67F486C6D7E6D6D7E487E6D6D7EA26F1380A46C5A6C5A6C5A0007C7FCC8FC4B1300A2
5E153F5E4B5AA24B5A5E4A5B4A5B4A48C7FC5D4A5AEC1FE04A5A4A5A9139FF000F80EB01
FC495A4948EB1F00495AEB1F8049C7FC017E5C5B48B7FC485D5A5A5A5A5AB7FC5EA4293C
7BBB34>I<903801FFE0010F13FE013F6D7E90B612E04801817F3A03FC007FF8D807F06D
7E82D80FFC131F6D80121F7FA56C5A5E6C48133FD801F05CC8FC4B5A5E4B5A4A5B020F5B
902607FFFEC7FC15F815FEEDFFC0D9000113F06E6C7E6F7E6F7E6F7E1780A26F13C0A217
E0EA0FC0487E487E487E487EA317C0A25D491580127F49491300D83FC0495A6C6C495A3A
0FFE01FFF86CB65A6C5DC61580013F49C7FC010313E02B3D7CBB34>I<ED01F815031507
A2150F151F153FA2157F15FF5C5CA25C5CEC1FBFEC3F3F143E147C14FCEB01F814F0EB03
E01307EB0FC0EB1F801400133E137E5B485A5B485A1207485A5B48C7FC5A127E5AB812F8
A5C8387FF800AA49B612F8A52D3C7DBB34>I<00071538D80FE0EB01F801FE133F90B6FC
5E5E5E5E93C7FC5D15F85D15C04AC8FC0180C9FCA9ECFFC0018713FC019F13FF90B67E02
0113E09039F8007FF0496D7E01C06D7E5B6CC77FC8120F82A31780A21207EA1FC0487E48
7E12FF7FA21700A25B4B5A6C5A01805C6CC7123F6D495AD81FE0495A260FFC075B6CB65A
6C92C7FCC614FC013F13F0010790C8FC293D7BBB34>I<EC07FF023F13C049B512F00107
8049EB03FC90383FF80090397FE001FE9038FFC0034849487E48495AA2485A120FA2485A
6F5A003F6E5A6F5A92C8FC485AA21402EC3FFE00FF496C7E01F9B512E001FB809138E03F
F89039FF800FFC4A6C7E825B6F13804915C0A317E05BA4127FA5123FA26D15C0121FA200
0F4A13806D150012076C6C495A6C6D485A6C9038E07FF86DB55A6D5C6D1480010749C7FC
010013F02B3D7CBB34>I<121F7F13F890B712F0A45A17E017C0178017005E5E5A007EC7
EA01F84B5A007C4A5A4B5A4B5A93C7FC485C157E5DC7485A4A5AA24A5A140F5D141F143F
5D147FA214FF92C8FC5BA25BA3495AA3130FA5131FAA6D5A6D5A6D5A2C3F7ABD34>I<EC
FFF0010713FE011F6D7E017F14E09039FFC07FF03A01FE001FF848486D7E48486D7E1503
485A8281121FA27F7F7F6D5B02C05B14F06C6D485A9138FE0FF89138FF9FF06CECFFE06C
5D5E6C92C7FC6C816D14E0011F80498090B67E48812607FE3F7F48486C1480381FF807D9
F00114C048486C7E007F8049010F13E0150348487F81167FA2163FA36D15C0127FEE7F80
7F6C6CECFF006C6C5B01FEEB07FE3A0FFFC03FFC6C90B55A000115E06C6C5C011F49C7FC
010113F02B3D7CBB34>I<903801FFE0010F13FC013F13FF90B612C04801E07F48903800
3FF048486D7E000F6E7E485A6F7E123F48488081178012FFA217C0A517E0A4007F5CA400
3F5C6C7E5D6C7E00075C3903FF80FB6C13FF6C6C13F36D13C3010F018313C09038000803
1400A24B1380EA03F0487E486C1500487E4B5AA25E151F4B5A495C6C48EBFFE049485B26
07FC0F5B6CB6C7FC6C14FC6C14F06D13C0D90FFEC8FC2B3D7CBB34>I<16FCA24B7EA24B
7EA34B7FA24B7FA34B7FA24B7FA34B7F157C03FC7FEDF87FA2020180EDF03F0203804B7E
02078115C082020F814B7E021F811500824A81023E7F027E81027C7FA202FC814A147F49
B77EA34982A2D907E0C7001F7F4A80010F835C83011F8391C87E4983133E83017E83017C
81B500FC91B612FCA5463F7CBE4F>65 D<B812F8EFFF8018F018FC8426003FFCC7EA3FFF
050F13807113C07113E08319F0A27113F8A719F05FA24D13E019C04D13804D1300EF3FFE
933801FFF891B712E0188018F818FE02FCC7380FFF80050313C07113E07113F019F8F07F
FCA2F03FFEA219FFA38460A419FE187FA2F0FFFC4D13F85F4D13F0053F13E0BA12C01900
18FC18F095C7FC403E7DBD4A>I<922607FFC0130E92B500FC131E020702FF133E023FED
C07E91B7EAE1FE01039138803FFB499039F80003FF4901C01300013F90C8127F4948151F
D9FFF8150F48491507485B4A1503481701485B18004890CAFC197E5A5B193E127FA34917
0012FFAC127F7F193EA2123FA27F6C187E197C6C7F19FC6C6D16F86C6D150119F06C6D15
036C6DED07E0D97FFEED0FC06D6CED3F80010F01C0ECFF006D01F8EB03FE6D9039FF801F
FC010091B55A023F15E002071580020002FCC7FC030713C03F407ABE4C>I<B812F8EFFF
8018F018FC18FF26003FFCC76C13C005077F05017F716C7E727E727E727E721380A27213
C0A27213E0A21AF084A21AF8A41AFCA5197FA319FFA51AF8A41AF0A2601AE0A24E13C0A2
4E13804E1300604E5A4E5A4D485A050713E0057F5BBA5A4EC7FC18F818C005F8C8FC463E
7DBD50>I<BAFCA4198026003FFEC7123F1707170183183FA2181FF00FC0A31807EE07C0
A3F003E0A3160F95C7FC161F163F16FF91B6FCA54AC6FC163F161F040F147CA2160719F8
A593C71201A219F01803A21807A2180FF01FE0183F18FF1703173FBAFCA219C0A33E3D7D
BC45>I<B912FEA48426003FFEC77E170F1703170084A284F01F80A3180FA2EE07C0A2F0
07C0A4040F90C7FCA2161F163F16FF91B6FCA54AC6FC163F161F160FA21607A693C9FCAC
B712E0A53A3D7DBC42>I<922607FFC0130E92B500FC131E020702FF133E023FEDC07E91
B7EAE1FE01039138803FFB499039F80003FF4901C01300013F90C8127F4948151FD9FFF8
150F48491507485B4A1503481701485B18004890CAFC197E5A5B193E127FA34994C7FC12
FFAB0407B612FC127F7FA3003F92C7383FFE00A27F7EA26C7FA26C7F6C7FA26C7F6C7FD9
7FFE157F6D6C7E010F01E014FF6D01F813036D9038FF801F010091B512F3023F15C00207
ED803E02009138FE000E030701E090C7FC46407ABE52>I<B71280A526003FFEC7FCB3B3
B0B71280A5213E7DBD28>73 D<B76C90B6FCA526003FFEC8D801FCC7FCF007F84E5A4E5A
F03F804EC8FC18FEEF03FC4D5A4D5AEF1FC04D5A4DC9FCEE01FE4C5A4C5AEE0FE04C5A4C
5A16FF4B7F4B7F5D4B7F4B7F037F7F92B5FC6E486C7E9238F83FFF03F0804B7E4B6C7F4B
6C7F0300804A7F707F707F84717E83717F85717F83717F85717F83727E85727F84B7D880
07B612C0A54A3E7DBD52>75 D<B712E0A526003FFEC9FCB3AD183EA4187E187CA418FCA2
1701A2EF03F8A21707170F171F177FEE01FF160FB9FC18F0A4373E7DBD3F>I<B6051FB5
12C06F5EA26F5EA2D8003F97C7FC6F16F7A26E6CED01E7A26E6CED03C7A36E6CED0787A2
6E6CED0F07A26E6C151EA36E6D143CA26E6D1478A26E6D14F0A26F6CEB01E0A36F6CEB03
C0A26F6CEB0780A26F6CEB0F00A36F6C131EA26F6D5AA26F6D5AA26F6D5AA393387FF1E0
A293383FFBC0A270B45AA37090C7FCA2705AA2705AB600C0031FB612C0A2705AA2705A5A
3E7CBD63>I<B812F017FF18C018F018FC26003FFCC77FEF1FFF7113807113C07113E0A2
7113F0A319F8A819F0A34D13E019C05F4D1380053F1300EFFFFE91B712F860188005FCC7
FC4ACAFCB3A4B77EA53D3E7DBD47>80 D<B87E17FCEFFF8018F08428003FFC000113FE93
38003FFF050F7F717F717FA2858385A761A25F61614D5B4D90C8FCEF3FFE4CB45A91B712
F018C04DC9FC717E9126FC000F7F040113F0707F717EA2717EA2717EA685A6F207C019C0
A271140F07E01380B76DEBF01F719038FC3F007190B5FC716C5B061F13F8CB000113E04A
3F7DBD4E>82 D<903A03FFC001C0011FEBF803017FEBFE0748B6128F4815DF48010013FF
D80FF8130F48481303497F4848EB007F127F49143F161F12FF160FA27F1607A27F7F01FC
91C7FCEBFF806C13F8ECFFC06C14FCEDFF806C15E016F86C816C816C816C16806C6C15C0
7F010715E0EB007F020714F0EC003F1503030013F8167F163F127800F8151FA2160FA27E
A217F07E161F6C16E06D143F01E015C001F8EC7F8001FEEB01FF9026FFE00713004890B5
5A486C14F8D8F81F5CD8F00314C027E0003FFEC7FC2D407ABE3A>I<003FB912FCA5903B
FE003FFE003FD87FF0EE0FFE01C0160349160190C71500197E127EA2007C183EA400FC18
3F48181FA5C81600B3AF010FB712F8A5403D7CBC49>I<B600FC020FB512C0A5C66C48C9
381F8000013F95C7FC80616D173E6F157E6D177C6F15FC6D5F8118016D6D5D18036D5F6F
14076D5F6F140F027F5E81181F023F93C8FC6F5C6E153E70137E6E157C8218FC6E6D5B17
016E5DEEF0036E5DEEF8076E5D16FC170F037F5CEEFE1F033F91C9FC705A6F133E17BE17
FE6F5BA26F5BA26F5BA26F5BA36F5BA2705AA270CAFCA24A3F7EBD4F>86
D<B6D8FC03B600F090B512FEA5C601FCC7000301F0C8EA7E00017F6F177C856E6E17FC01
3F63856D6C037F4B5AA26F4A6C14036D634D7F6F18076D634D806F02EF150F6D636F0107
6E131F6D04C793C7FC050F806F02835D6D1A3E051F806F0201157E027F197C6F013F6E13
FC023FDA3E005D057E806F017C017F13016E6105FC14FE7048013F13036E6104C1EDFF07
6E4A6D5C04C31687DCE3E06D138F6E6104E716CFDCF7C06D13DF6E96C8FC04FF16FF6E4A
6D5BA294C77E6F5FA24C80033F5FA26F486F5AA24C153F030F5FA24C151F03075FA26F48
6F5A673F7EBD6C>I<903807FFC0013F13F848B6FC48812607FE037F260FF8007F6DEB3F
F0486C806F7EA36F7EA26C5A6C5AEA01E0C8FC153F91B5FC130F137F3901FFFE0F4813E0
000F1380381FFE00485A5B485A12FF5BA4151F7F007F143F6D90387BFF806C6C01FB13FE
391FFF07F36CEBFFE100031480C6EC003FD91FF890C7FC2F2B7DA933>97
D<13FFB5FCA512077EAFEDFFE0020713FC021FEBFF80027F80DAFF8113F09139FC003FF8
02F06D7E4A6D7E4A13074A80701380A218C082A318E0AA18C0A25E1880A218005E6E5C6E
495A6E495A02FCEB7FF0903AFCFF01FFE0496CB55AD9F01F91C7FCD9E00713FCC7000113
C033407DBE3A>I<EC7FF00107B5FC011F14C0017F14E09039FFF01FF0489038800FF848
EB001F4848EB3FFC120F485AA2485AA2007FEC1FF849EB0FF0ED03C000FF91C7FCAB127F
7FA3003F153E7F001F157E6C6C147C6C6C14FC91388001F86C9038C003F0C69038F81FE0
6DB512C0011F14800107EBFE009038007FF0272B7DA92E>I<EE07F8ED07FFA5ED003F16
1FAFEC7FF0903807FFFE011FEBFF9F017F14DF9039FFF01FFF48EBC00348EB00014848EB
007F485A001F153F5B123FA2127F5BA212FFAA127FA37F123FA26C6C147F120F6D14FF6C
6C01037F6C6D48EBFFE06CEBF03F6C6CB512BF6D143F010713FC010001E0EBE00033407D
BE3A>I<ECFFF0010713FE011F6D7E017F809039FFE07FE0489038801FF048496C7E4848
6D7E48486D7E121F491301003F81A2485A6F1380A212FFA290B7FCA401F0C9FCA5127FA2
7F123FEE0F806C7E161F6C6C15006C6C5C6C6D137E6C9038E001FC6C9038F80FF8013FB5
5A6D14C0010391C7FC9038007FF8292B7DA930>I<EC07FE91387FFF8049B512C0010714
E090390FFE3FF0EB1FF090393FE07FF8EB7FC013FF1480A2489038003FF0ED1FE0ED0FC0
92C7FCAAB612E0A500010180C7FCB3AC007FEBFF80A525407DBF20>I<903A03FF8007F0
013F9038F83FF8499038FCFFFC48B712FE48018313F93A07FC007FC34848EB3FE1001FED
F1FC4990381FF0F81700003F81A7001F5DA26D133F000F5D6C6C495A3A03FF83FF8091B5
C7FC4814FC01BF5BD80F03138090CAFCA2487EA27F13F06CB6FC16F016FC6C15FF17806C
16C06C16E01207001F16F0393FE000034848EB003F49EC1FF800FF150F90C81207A56C6C
EC0FF06D141F003F16E001F0147FD81FFC903801FFC02707FF800F13006C90B55AC615F8
013F14E0010101FCC7FC2F3D7DA834>I<13FFB5FCA512077EAFED1FF8EDFFFE02036D7E
4A80DA0FE07F91381F007F023C805C4A6D7E5CA25CA35CB3A4B5D8FE0FB512E0A5333F7C
BE3A>I<EA01F8487E487E487E481380A66C13006C5A6C5A6C5AC8FCA913FFB5FCA51207
7EB3ABB512F8A515407CBF1D>I<13FFB5FCA512077EB092380FFFFEA5DB01FEC7FC4B5A
ED07F0ED1FE04B5A4B5A4BC8FCEC03FC4A5A4A5A141F4A7EECFFFCA2818102E77F02C37F
148102007F826F7E6F7E151F6F7E826F7F6F7F816F7FB5D8FC07EBFFC0A5323F7DBE37>
107 D<13FFB5FCA512077EB3B3AFB512FCA5163F7CBE1D>I<01FFD91FF8ECFFC0B590B5
010713F80203DAC01F13FE4A6E487FDA0FE09026F07F077F91261F003FEBF8010007013E
DAF9F0806C0178ECFBC04A6DB4486C7FA24A92C7FC4A5CA34A5CB3A4B5D8FE07B5D8F03F
EBFF80A551297CA858>I<01FFEB1FF8B5EBFFFE02036D7E4A80DA0FE07F91381F007F00
07013C806C5B4A6D7E5CA25CA35CB3A4B5D8FE0FB512E0A533297CA83A>I<EC7FF09038
03FFFE011FEBFFC0017F14F09039FFE03FF8489038800FFC3A03FE0003FE48486D7E000F
168048486D13C0A2003F16E049147F007F16F0A400FF16F8AA007F16F0A46C6CECFFE0A2
001F16C06C6C491380A26C6C4913003A03FF800FFE6C9038E03FFC6C6CB512F0011F14C0
010791C7FC9038007FF02D2B7DA934>I<01FFEBFFE0B5000713FC021FEBFF80027F80DA
FF8113F09139FC007FF8000701F06D7E6C496D7E4A130F4A6D7E1880A27013C0A38218E0
AA4C13C0A318805E18005E6E5C6E495A6E495A02FCEBFFF0DAFF035B92B55A029F91C7FC
028713FC028113C00280C9FCACB512FEA5333B7DA83A>I<DA7FE01378902607FFFC13F8
011FEBFF01017F14819039FFF81FC3489038E007E74890388003F74890380001FF48487F
001F157F5B003F153F5B127F161FA2485AAA127F7FA36C6C143F167F121F6C6C14FF6D5B
6C6D5A6CEBC00F6CEBF03F6C6CB512BF6DEBFE3F010713F8010013C091C7FCAC030FB512
E0A5333B7DA837>I<3901FE01FE00FF903807FF804A13E04A13F0EC3F1F91387C3FF800
0713F8000313F0EBFFE0A29138C01FF0ED0FE091388007C092C7FCA391C8FCB3A2B6FCA5
25297DA82B>I<90383FFC1E48B512BE000714FE5A381FF00F383F800148C7FC007E147E
A200FE143EA27E7F6D90C7FC13F8EBFFE06C13FF15C06C14F06C806C806C806C80C61580
131F1300020713C014000078147F00F8143F151F7EA27E16806C143F6D140001E013FF90
38F803FE90B55A15F0D8F87F13C026E00FFEC7FC222B7DA929>I<EB07C0A5130FA4131F
A3133F137FA213FF5A1207001FEBFFFEB6FCA40001EBC000B3151FA96CEBE03EA2017F13
7EECF8FC90383FFFF86D13F0010713E001001380203B7EB929>I<D9FF80EB0FF8B5EB0F
FFA50007EC007F6C153FB3A5167FA316FF6C5C4B7F6C903AC007DFFFE09138F01F9F6DB5
121F6D13FE010F13F8010101E0EBE000332A7CA83A>I<B500FC90383FFFC0A5000101C0
903803E0006E1307A26C5E6E130F017F5D6E131F013F92C7FC6E5B011F143E6E137E010F
147C6E13FCA26D5C15816D5C15C36D5C15E76D5C15FF6E5BA36E90C8FCA26E5AA26E5AA2
6E5AA26E5AA232287EA737>I<B53CFC3FFFFC03FFFEA50003D980009039C0000F806E16
1F6C037F15006E496C5B6C183E836E48157E017F177C6E486D13FC013F02EF5C83DAFC07
1401011F02C75CDAFE0FEBFE03010F02835C17FFDAFF1F14076D02015C03BF148F6DD9BE
005C18CF03FE14DF6D49017F90C7FC18FF6D496D5AA36E486D5AA26E486D5AA36E486D5A
A26E486D5A47287EA74C>I<B5D8FC03B51280A5C69026E0007FC7FC6E13FE6D6C5B6D6C
485A6D6C485A010F13076D6C485AED9FC06DEBFF806D91C8FC6D5B6E5AA2143F6E7E140F
814A7F4A7F4A7F02FE7F903801FC7F49486C7E02F07F49486C7E49486C7E011F7F49486C
7FD97F008001FE6D7FB5D8C007EBFFC0A532287EA737>I<B500FC90383FFFC0A5000101
C0903803E0006E1307A26C5E6E130F017F5D6E131F013F92C7FC6E5B011F143E6E137E01
0F147C6E13FCA26D5C15816D5C15C36D5C15E76D5C15FF6E5BA36E90C8FCA26E5AA26E5A
A26E5AA26E5AA35D14075D000E130FD83F805B387FC01FD8FFE090C9FC5C143E147E5CEB
C1F8387FC3F0387E0FE06CB45A6C5B6C48CAFCEA03F8323B7EA737>I<B912E0A4330480
9A34>123 D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fk cmbx12 14.4 37
/Fk 37 122 df<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13F0EAF800C7
FCB3B3B3A6007FB712FEA52F4E76CD43>49 D<EC3FFE0103B512E0010F14FC013F14FF90
B712C048D9C07F7F2703FE000F13F8D807F801037FD80FE06D7F48486D7F48488001F016
80486C6E13C07F486C6E13E07FA27013F0A56C5AA26C5AEA0FF0EA03C0C914E05EA218C0
5E1880A24C13005F4C5A4B5B5F4B5B5F4B5B4B90C7FC4B5A5E4B5AED7FE04B5A4A5B4A48
C8FC4A5A5D4A48EB01F04A5AEC3F804AC7FC02FEEC03E0495A495A495A495AD91F801407
49C8FC013E150F017FB7FC90B812C05A5A5A5A5A5A5AB9FC1880A4344E79CD43>I<9138
0FFFC091B512FC0107ECFF80011F15E090263FF8077F9026FF800113FC4848C76C7ED803
F86E7E491680D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90C75AD801FC16
80C9FC4C13005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E016FCEEFF80DA
000713E0030113F89238007FFE707E7013807013C018E07013F0A218F8A27013FCA218FE
A2EA03E0EA0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C6C4816E001F0
4A13C06C484A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D011F15800103
02FCC7FCD9001F1380374F7ACD43>I<177C17FEA2160116031607160FA2161F163F167F
A216FF5D5DA25D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03E01407EC0FC01580EC
1F005C147E147C5C1301495A495A5C495A131F49C7FC133E5B13FC485A5B485A1207485A
485A90C8FC123E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A4F7CCE43>I<D80380
150ED807E0157E01FEEC03FED9FFF0137F91B65A5F5F5F5F5F94C7FC5E5E16F016C093C8
FC15F801E190C9FC01E0CAFCABEC0FFF027F13F001E3B512FE01E76E7E9026FFF8077FDA
C0017F49C713F8496E7E49143F4981496E7E6C481680C9FC18C08218E0A418F0A3EA0FE0
487E487E487E487EA418E0A35B6C484A13C05B491680003EC85A003F17006C6C4A5A6D5D
6C6C4A5AD807F8495BD803FE01075B2701FFC03F5B6C90B65A013F4AC7FC6D14F8010314
C09026007FF8C8FC344F79CD43>I<ED0FFF92B512E0020780021F14FC91397FFE03FE90
3A01FFF0007F4901C0EB3F804990C7121F4948EC7FC0494814FF49484913E049485B01FF
5C485BA2485B5AA2486F13C04A6D1380486F1300177E94C7FC5AA291CAFC5AA215089138
01FFF8020713FFB54814C04A14F04AC66C7E023C6D7E4A6D7E4A6D7E7013804A15C0A24A
15E07013F05C18F8A491C714FCA37EA67EA46C17F880A27E18F06C5D18E06C6D15C07E6E
4913806C6D15006D6C495A6D6CEB7FFC6DB448485A6D90B55A010315C0010092C7FC023F
13FC020713C0364F7ACD43>I<121F7F7FEBFF8091B81280A45A1900606060A260606048
5F0180C86CC7FC007EC95A4C5A007C4B5A5F4C5A160F4C5A484B5A4C5A94C8FC16FEC812
014B5A5E4B5A150F4B5AA24B5AA24B5A15FFA24A90C9FCA25C5D1407A2140FA25D141FA2
143FA4147F5DA314FFA55BAC6D5BA2EC3FC06E5A395279D043>I<913807FFC0027F13FC
0103B67E010F15E090261FFC0113F8903A3FE0003FFCD97F80EB0FFE49C76C7E48488048
486E1380000717C04980120F18E0177FA2121F7FA27F7F6E14FF02E015C014F802FE4913
806C7FDBC00313009238F007FE6C02F85B9238FE1FF86C9138FFBFF06CEDFFE017806C4B
C7FC6D806D81010F15E06D81010115FC010781011F81491680EBFFE748018115C048D900
7F14E04848011F14F048487F48481303030014F8484880161F4848020713FC1601824848
157F173FA2171FA2170FA218F8A27F007F17F06D151FA26C6CED3FE0001F17C06D157F6C
6CEDFF806C6C6C010313006C01E0EB0FFE6C01FCEBFFFC6C6CB612F06D5D010F15800101
02FCC7FCD9000F13C0364F7ACD43>I<171F4D7E4D7EA24D7EA34C7FA24C7FA34C7FA34C
7FA24C7FA34C8083047F80167E8304FE804C7E03018116F8830303814C7E03078116E083
030F814C7E031F81168083033F8293C77E4B82157E8403FE824B800201835D840203834B
800207835D844AB87EA24A83A3DA3F80C88092C97E4A84A2027E8202FE844A82010185A2
4A820103854A82010785A24A82010F855C011F717FEBFFFCB600F8020FB712E0A55B547B
D366>65 D<BA12C019FEF1FFC01AF01AFCD8000701F0C7000313FFDE007F7F737F070F7F
737F878587858785A287A84F5BA263616361634F5B4F5B077F90C7FC4E485A060713F892
B812E097C8FC861AF003F0C7000313FE9539003FFF80070F13E0737F07017F87737F747E
1C807413C0A27413E0A31CF0A386A362A31CE0A2621CC0A250138097B5FC1C004F5B1907
4F5B073F13F04EB55ABC128098C7FC1AF81AC007F8C8FC54527CD160>I<932601FFFCEC
01C0047FD9FFC013030307B600F81307033F03FE131F92B8EA803F0203DAE003EBC07F02
0F01FCC7383FF0FF023F01E0EC0FF94A01800203B5FC494848C9FC4901F8824949824949
824949824949824990CA7E494883A2484983485B1B7F485B481A3FA24849181FA3485B1B
0FA25AA298C7FC5CA2B5FCAE7EA280A2F307C07EA36C7FA21B0F6C6D1980A26C1A1F6C7F
1C006C6D606C6D187EA26D6C606D6D4C5A6D6D16036D6D4C5A6D6D4C5A6D01FC4C5A6D6D
EE7F806D6C6C6C4BC7FC6E01E0EC07FE020F01FEEC1FF80203903AFFE001FFF0020091B6
12C0033F93C8FC030715FCDB007F14E0040101FCC9FC525479D261>I<B812C0A5D80007
01F8C7FCB3B3B3B2B812C0A52A527CD132>73 D<B812F8A5D8000701F8CAFCB3B3A91A7C
A41AFC1AF8A51901A31903A219071AF0190FA2191F193F197F19FF180360183F4DB5FCBB
12E0A546527CD151>76 D<91260FFF80130791B500F85B010702FF5B011FEDC03F49EDF0
7F9026FFFC006D5A4801E0EB0FFD4801800101B5FC4848C87E48488149150F001F824981
123F4981007F82A28412FF84A27FA26D82A27F7F6D93C7FC14C06C13F014FF15F86CECFF
8016FC6CEDFFC017F06C16FC6C16FF6C17C06C836C836D826D82010F821303010082021F
16801400030F15C0ED007F040714E01600173F050F13F08383A200788200F882A3187FA2
7EA219E07EA26CEFFFC0A27F6D4B13806D17006D5D01FC4B5A01FF4B5A02C04A5A02F8EC
7FF0903B1FFFC003FFE0486C90B65AD8FC0393C7FC48C66C14FC48010F14F048D9007F90
C8FC3C5479D24B>83 D<003FBC1280A59126C0003F9038C0007F49C71607D87FF8060113
C001E08449197F49193F90C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6C994C7
FCB3B3AC91B912F0A553517BD05E>I<EC7FFF0107B512F0013F14FE90B77E48D9E00F7F
2703FE000113F0486C6D7F6EEB3FFC48826E131F83707FA36C496D7FA26C90C7FC6C5AC9
FCA6037FB5FC020FB6FC91B7FC01071487013FEBF0074913803901FFFC004813F0485B48
5B485B4890C7FC5A5BA2485AA45EA26D5C007F151D163D6C6C02797F6C6D01F113F86C90
26C003E1EBFFE06C9026F81FC014F06C90B5487EC6ED001F011F01FC010713E0010101E0
90C8FC3C387CB641>97 D<EB3FF0B5FCA51203C6FCB3A4923801FFE0030F13FE033FEBFF
C092B612F002F301017F913AF7F8003FFEDAFFE0EB0FFF03806D7F92C76C7F4A6E7F4A82
4A6E7FA2727EA285A28584A31A80AC1A00A44E5AA36118FF616E4A5BA26E4A5B6E4A5B6F
495BDACFC04990C7FCDA87F0EB7FFC913A03FE03FFF849C6B612E0496D148049011F01FC
C8FC90C7000313C041547BD24B>I<913801FFF8021FEBFF8091B612F0010315FC010F90
38C00FFE903A1FFE0001FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F1380
91C7FC486F1300705A4892C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E
6E140F6CEE1F806C6DEC3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B5
5A01001580023F49C7FC020113E033387CB63C>I<4DB47E0407B5FCA5EE001F1707B3A4
913801FFE0021F13FC91B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC
49487F4849143F484980485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C
7F5F6C6D5C7E6C6D5C6C6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D
90B5128F0101ECFE0FD9003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13
FC49B6FC010715C04901817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E48
178048497F18C0488191C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA612
7FA27F7EA218E06CEE01F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D
6CECFF00D91FFEEB03FE903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034
387CB63D>I<ED3FFC0203B5FC020F14C0023F14E09139FFF81FF0499038C03FF849EB80
7F49903800FFFC495A495AA2495AA2EE7FF8495AEE3FF0EE0FC093C7FCAEB712E0A52600
7FF8C8FCB3B3A7007FB512FEA52E547CD329>I<DA3FFF14FF0103B5D8F00713C0010FDA
FC1F13E0013FECFF7F90267FFC0F9038FF9FF09026FFE001EBF83F48496C13E048499038
7FF01F4890C7D83FF813E0489338FC0FC0F0078048486E6CC7FCA2003F82A9001F5EA26C
6C4A5AA26C5E6C6D495A6C6D495A6C6D485BDAFC0F5B4890B6C8FCD803EF14FC01C314F0
2607C03F90C9FC91CBFCA2120FA37FA213F813FE90B7FC6C16F817FF18C06C836C836C83
6D828448B9FC12074848C700031480D81FF8EC003F4848150748486F13C083485A83A56D
5D007F18806D5D003F18006C6C4B5AD80FFEED1FFC6C6C6CEC7FF86C01E049485A6C01FE
011F5B6C6CB71280010F03FCC7FC010115E0D9000F01FCC8FC3C4F7CB543>I<EB3FF0B5
FCA51203C6FCB3A4EE1FFC93B512C0030314F0030F8092391FE07FFC92393F001FFE037C
8003F07FDAF1E081ECF3C0DAF7807F8502FFC7FC5CA25CA45CB3ACB6D8F807B612C0A542
537BD24B>I<137F497E000313E0487FA2487FA76C5BA26C5BC613806DC7FC90C8FCADEB
3FF0B5FCA512017EB3B3A6B612E0A51B547BD325>I<EB3FF0B5FCA51203C6FCB3A54CB5
12F8A59339003FFE00EF1FF0EF3FC04D5A4DC7FCEE03FEEE07F84C5A4C5AEE7FC04CC8FC
4B5A4B5AED0FF8ED1FE04B7E4B7EECF1FF02F37F02F77F91B6FC83159F030F7F02FE80DA
F8077F4A7E6F7F6F7F83707E82707F84707F707F82707F84707F177F717E4D13C0B6D8F0
03B6FCA540537CD247>107 D<EB3FF0B5FCA512017EB3B3B3B1B612F0A51C537BD225>I<
D93FF0D91FFCEDFFE0B591B500C0010713FE030302F0011F6D7E030F6E017F8092271FE0
7FFCD9FF037F922A3F001FFE01F8007F0003027C9126FF03E080C602F06DD90780137FDA
F1E0038FC77FDAF3C0159EDAF7806D01BC143F07FC8102FFC75C4A5EA24A5EA44A5EB3AC
B6D8F807B6D8C03FB512FEA567367BB570>I<D93FF0EB1FFCB591B512C0030314F0030F
8092391FE07FFC92393F001FFE0003027C80C602F07FDAF1E081ECF3C0DAF7807F8502FF
C7FC5CA25CA45CB3ACB6D8F807B612C0A542367BB54B>I<913801FFE0021F13FE91B612
C0010315F0010F9038807FFC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F48496D
7F4A147F48834890C86C7EA24883A248486F7EA3007F1880A400FF18C0AC007F1880A300
3F18006D5DA26C5FA26C5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD93FFE01
1F90C7FC903A0FFF807FFC6D90B55A010015C0023F91C8FC020113E03A387CB643>I<90
3A3FF001FFE0B5010F13FE033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9FF
E0EB1FFFC602806D7F92C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A00
60A36118FFA2615F616E4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FBFE
075B02F8B612E06F1480031F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>I<91
2601FFE0EB0780021F01F8130F91B500FE131F0103ECFF80010F9039F03FC03F49903980
0FE07F903A7FFE0003F04948903801F8FF4849EB00FD4849147F4A805A4849805A4A805A
A291C87E5AA35B12FFAC6C7EA37EA2806C5EA26C6D5CA26C6D5C6C6D5C6C93B5FC6C6D5B
6D6C5B6DB4EB0FEF010F9038C07FCF6D90B5120F010114FED9003F13F80203138091C8FC
B1040FB61280A5414D7CB547>I<90397FE003FEB590380FFF80033F13E04B13F09238FE
1FF89139E1F83FFC0003D9E3E013FEC6ECC07FECE78014EF150014EE02FEEB3FFC5CEE1F
F8EE0FF04A90C7FCA55CB3AAB612FCA52F367CB537>I<903903FFF00F013FEBFE1F90B7
FC120348EB003FD80FF81307D81FE0130148487F4980127F90C87EA24881A27FA27F01F0
91C7FC13FCEBFFC06C13FF15F86C14FF16C06C15F06C816C816C81C681013F1580010F15
C01300020714E0EC003F030713F015010078EC007F00F8153F161F7E160FA27E17E07E6D
141F17C07F6DEC3F8001F8EC7F0001FEEB01FE9039FFC00FFC6DB55AD8FC1F14E0D8F807
148048C601F8C7FC2C387CB635>I<143EA6147EA414FEA21301A313031307A2130F131F
133F13FF5A000F90B6FCB8FCA426003FFEC8FCB3A9EE07C0AB011FEC0F8080A26DEC1F00
15806DEBC03E6DEBF0FC6DEBFFF86D6C5B021F5B020313802A4D7ECB34>I<D93FF89138
01FFC0B50207B5FCA50003ED001FC61607B3AE5FA35FA2017F5D173B177B6D6C14F3DC01
E313F06D6CD907C3EBFFC0903A0FFFC03F836D90B51203010114FE6D6C13F8020701E091
C7FC42377BB54B>I<B600F00107B5FCA5000101F8C8EA7FE06C6DED3F00A2017F163E6E
157E013F167C6E15FC6D5E6F13016D5E8117036D5E6F13076D5E6F130F6D5E6F131F6D93
C7FC815F6E6C133E177E023F147C6F13FC6E5C16816E5C16C3A26EEBE3E016E76E5C16FF
6E5CA26E91C8FCA26F5AA36F5AA26F5AA26F5AA26F5A6F5A40367DB447>I<B600F00107
B5FCA5C601F8C8EA7FE06EED3F00A26D6C153E187E013F167C6E15FC6D5E6F13016D5E6F
13036D5E8117076D6D5C170F6D6D5C171F6D93C7FC6F5B027F143E6F137E023F147C6F13
FCA26E6D5A16816EEBC1F016C36E5C16E76E5C16FF6E5CA26E91C8FCA36F5AA26F5AA26F
5AA26F5AA26F5AA35E150F5E151F93C9FC5DD81FC0133E486C137E486C137C486C13FC5D
14015D14034A5A6C48485A49485A263FC07FCAFCEB81FE6CB45A6C13F000035BC690CBFC
404D7DB447>121 D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fl cmr10 10.95 80
/Fl 80 123 df<4AB4EB0FE0021F9038E03FFC913A7F00F8FC1ED901FC90383FF03FD907
F090397FE07F80494801FF13FF4948485BD93F805C137F0200ED7F00EF003E01FE6D91C7
FC82ADB97EA3C648C76CC8FCB3AE486C4A7E007FD9FC3FEBFF80A339407FBF35>11
D<EC03FE91383FFF809138FE03E0903903F800F0D90FE013384948137C90393F8001FE90
387F00035B5BA2485A6F5AED007093C7FCAA16FEB7FCA33901FC000315011500B3AC486C
497EB5D8F87F13FCA32E407EBF33>I<EC03FF023F13EE9138FE01FEEB03F090380FE003
EB1FC0EB3F80EB7F005B5B150148481300AEB7FCA3D801FCC7FCB3AE486C497EB5D8F87F
13FCA32E407EBF33>I<DA03FE49B4FC91273FFF801F13C0913BFE03E07F01F0903C03F0
00F1FC0078D90FE0D97FF0131C49484948133E4948484913FF494848495A5B491500A248
485C03016E5A0300153896C7FCAA197FBBFCA3D801FCC738FE00018485B3AC486C496CEC
FF80B5D8F87FD9FC3F13FEA347407EBF4C>I<001E130F397F803FC000FF137F01C013E0
A201E013F0A3007F133F391E600F3000001300A401E01370491360A3000114E04913C000
03130101001380481303000EEB070048130E0018130C0038131C003013181C1C7DBE2D>
34 D<013F1603D9FFC04B7E2601E0E0150F2607C070151F48486C4BC7FC023E157E4848
6C15FE48D90FC0EB03FC003ED90EF0EB0FF8DA0F3F13FD007E903A070FFFF1F0007C0200
EB03E0160000FC6D6C495A170F604DC8FC5F173E5F17FC5F4C5A1603007CD907005B4C5A
007E150F003E495C020E49C9FC003F5D6C49133E260F803C5B023813FC6C6C485B3A01E0
E001F03800FFC090273F0003E0133F90C70007ECFFC09339C001E0E0923A0F8007C07003
1F49487E0400143C033E90381F001C037E497F037C133E4B150F0201027E7F4B137C4A5A
020702FCEB03805D4A5A141F92C7FC143E147E147C5CA2495A0103037CEB07005C494814
7E010F033E5B4A160E49C8123F496F5B013E92380F803C49173801FC6F6C5A49923801E0
E0496FB45A0160043FC7FC41497BC34C>37 D<121EEA7F8012FF13C0A213E0A3127FEA1E
601200A413E013C0A312011380120313005A120E5A1218123812300B1C79BE19>39
D<1430147014E0EB01C0EB03801307EB0F00131E133E133C5B13F85B12015B1203A2485A
A2120F5BA2121F90C7FCA25AA3123E127EA6127C12FCB2127C127EA6123E123FA37EA27F
120FA27F1207A26C7EA212017F12007F13787F133E131E7FEB07801303EB01C0EB00E014
701430145A77C323>I<12C07E12707E7E121E7E6C7E7F12036C7E7F12007F1378137CA2
7FA2133F7FA21480130FA214C0A3130714E0A6130314F0B214E01307A614C0130FA31480
A2131F1400A25B133EA25BA2137813F85B12015B485A12075B48C7FC121E121C5A5A5A5A
145A7BC323>I<EB03C0A2805CA600F0140F00FC143F00FE147F00FF14FF393FC3C3FC39
0FE187F03903F18FC03900FDBF00EB3FFCEB0FF0EB03C0EB0FF0EB3FFCEBFDBF3903F18F
C0390FE187F0393FC3C3FC39FF03C0FF00FE147F00FC143F00F0140F00001400A6805CA2
20277AC32D>I<1506150FB3A9007FB912E0BA12F0A26C18E0C8000FC9FCB3A915063C3C
7BB447>I<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A31201138012
0313005A120E5A1218123812300B1C798919>I<B512FEA617067F961E>I<121EEA7F80A2
EAFFC0A4EA7F80A2EA1E000A0A798919>I<ED0180ED03C01507A21680150FA216005DA2
151E153EA2153C157CA2157815F8A25D1401A25D1403A25D1407A25D140FA24AC7FCA214
1E143EA2143C147CA2147814F8A25C1301A25C1303A25C1307A25C130FA291C8FC5BA213
1E133EA25BA2137813F8A25B1201A25B1203A25B1207A25B120FA290C9FC5AA2121E123E
A2123C127CA2127812F8A25A1260225B7BC32D>I<EB01FE90380FFFC090383F03F09038
7C00F849137C48487F48487F4848EB0F80A2000F15C04848EB07E0A3003F15F0A290C712
034815F8A64815FCB3A26C15F8A56C6CEB07F0A3001F15E0A36C6CEB0FC0A26C6CEB1F80
000315006C6C133E6C6C5B017C5B90383F03F090380FFFC0D901FEC7FC263F7DBC2D>I<
EB01C013031307131F137FEA07FFB5FC139FEAF81F1200B3B3ACEB7FF0B612F8A31D3D78
BC2D>I<EB07FC90383FFF8090B512E03903F01FF83907C007FC390F0001FE001E6D7E00
1C1580003CEC7FC05AED3FE01270B4FC6DEB1FF07FA56C5A6CC7FC120CC813E0153FA216
C0157F168015FF16004A5A5D4A5A4A5A5D4A5A4A5A4AC7FC147E147C5C495A495A495A49
5A49C71270133E133C5B4914E0485A485A485A48C7120148B6FCA25A4815C0B7FCA3243D
7CBC2D>I<EB07FC90383FFF809038F80FE03901E003F839078001FCD80F007F000E6D7E
001E1580D81F80137F486C14C07FA27F5BA2121F6C5AC8138015FF1600A24A5AA24A5A5D
EC07E04A5A023FC7FCEB1FFCECFF809038000FE0EC07F86E7E6E7E6E7E1680ED7FC0A216
E0153FA216F0A2120C123F487E487EA316E0A249137F6CC713C01278EDFF807E6C491300
6C495A3907C007FC3903F80FF0C6B55A013F1380D907F8C7FC243F7CBC2D>I<150E151E
153EA2157EA215FE1401A21403EC077E1406140E141CA214381470A214E0EB01C0A2EB03
80EB0700A2130E5BA25B5BA25B5B1201485A90C7FC5A120E120C121C5AA25A5AB8FCA3C8
EAFE00AC4A7E49B6FCA3283E7EBD2D>I<00061403D80780131F01F813FE90B5FC5D5D5D
15C092C7FC14FCEB3FE090C9FCACEB01FE90380FFF8090383E03E090387001F8496C7E49
137E497F90C713800006141FC813C0A216E0150FA316F0A3120C127F7F12FFA416E090C7
121F12FC007015C012780038EC3F80123C6CEC7F00001F14FE6C6C485A6C6C485A3903F8
0FE0C6B55A013F90C7FCEB07F8243F7CBC2D>I<EC1FE0ECFFF8903803F03E90380FC00F
90391F000780133E017EEB1FC049133F4848137F12035B12074848EB3F80ED1F00001F91
C7FC5BA2123FA3485AA214FE903887FF8039FF8F07E090389C01F09038B800FC01B0137E
13F0497F16804914C0A2ED1FE0A34914F0A5127FA6123F6D14E0A2121FED3FC0A26C6C14
80A20007EC7F006C6C137E6C6C5B6C6C485A90387E07F06DB45A010F1380D903FCC7FC24
3F7CBC2D>I<1238123C123F90B612FCA316F85A16F016E00078C712010070EC03C0ED07
8016005D48141E151C153C5DC8127015F04A5A5D14034A5A92C7FC5C141EA25CA2147C14
7814F8A213015C1303A31307A3130F5CA2131FA6133FAA6D5A0107C8FC26407BBD2D>I<
EB03FC90381FFF8090387C07E09038F001F83901E0007C48487F48487F48C7FCED0F8012
1E16C0003E1407A4123FA26DEB0F807F6C6C131F6D140001FC133E6C6C5B9038FF80786C
6D5A6CEBF3E06CEBFF806C91C7FC133F6D13C06D7F013F13F801787F48486C7E3903E01F
FF48486C1380260F800313C048487E489038007FE0003E143F007E141F007CEC0FF01507
481403A31501A46C15E0007C1403A2007E15C06C14076CEC0F806DEB1F006C6C133ED807
F05B3901FC03F86CB512E0011F1380D903FCC7FC243F7CBC2D>I<EB03FCEB1FFF90387E
07C09038FC03F048486C7E48486C7E4848137C000F147E4848137F81003F15805B007F15
C0A2151F12FF16E0A516F0A5127F153FA36C7EA2001F147F120F6C6C13FF6D13DF000313
013900F8039F90387E0F1FD91FFE13E0EB07F090C7FCA2ED3FC0A41680157FD80F801400
487E486C13FEA24A5A5D49485AEB8007391E000FE0001F495A260FC07FC7FC3803FFFE6C
13F838003FC0243F7CBC2D>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3121EEA
7F80A2EAFFC0A4EA7F80A2EA1E000A2779A619>I<121EEA7F80A2EAFFC0A4EA7F80A2EA
1E00C7FCB3121E127FEAFF80A213C0A4127F121E1200A412011380A3120313005A120612
0E120C121C5A1230A20A3979A619>I<007FB912E0BA12F0A26C18E0CDFCAE007FB912E0
BA12F0A26C18E03C167BA147>61 D<EB1FF890B5FC3903E01FC0390F0007F0001EEB03F8
48EB01FC4814FE140000FE14FF7E7FA46CC7FC123EC7EA01FEA2EC03FCEC07F815F0EC0F
C0EC1F80EC3F00143E5C147814F85C13015CA2495AA25CAB91C7FC90C8FCA8EB0780EB1F
E0A2497EA46D5AA2EB078020407BBF2B>63 D<15074B7EA34B7EA34B7EA34B7EA34B7E15
E7A2913801C7FC15C3A291380381FEA34AC67EA3020E6D7EA34A6D7EA34A6D7EA34A6D7E
A34A6D7EA349486D7E91B6FCA249819138800001A249C87EA24982010E157FA2011E8201
1C153FA2013C820138151FA2017882170F13FC00034C7ED80FFF4B7EB500F0010FB512F8
A33D417DC044>65 D<B712FCEEFF8017F00001903980000FF86C6CC7EA03FE707E701380
EF7FC0EF3FE0A2EF1FF0A218F8A3170F171FA318F0A2EF3FE0177F18C0EFFF804C1300EE
03FCEE0FF8EE7FE091B6C7FC17E091C7EA07FCEE01FE933800FF80EF7FC0EF3FE0EF1FF0
18F8170F18FC1707A218FEA718FC170FA2EF1FF818F0173FEF7FE0EFFFC0040313804848
6C90380FFE00B85A17E094C7FC373E7DBD40>I<DB3FF01306912603FFFE130E020F9038
FF801E913A3FF007E03E9139FF8000F8D903FEC7EA7C7ED907F8EC1EFE4948140FD93FE0
140749481403495A91C812014848150012034848167E5B000F173EA24848161EA2123F5B
180E127FA349160012FFAC127F7F180EA2123FA27F001F171E181C6C7EA20007173C6D16
386C6C1678000117706C6C16F06EEC01E06D6C15C06D6C1403D90FF0EC07806D6CEC1F00
D903FE143E902600FF8013F891393FF007F0020FB512C0020391C7FC9138003FF037427B
BF42>I<B712FCEEFF8017E000019039C0001FF86C6C48EB03FEEE00FF717E717EEF0FE0
84717E717E170184717EA21980187F19C0A3F03FE0A519F0AB19E0A5F07FC0A21980A218
FF19004D5AA24D5A6017074D5A4D5AEF7FC04DC7FCEE03FE48486CEB1FF8B85A178004FC
C8FC3C3E7DBD45>I<B912E0A300019038C000016C6C48EB001FEF0FF01703A217011700
A31870A418381638A41800A21678A216F81501150791B5FCA3EC8007150115001678A216
38A2180EA3181C93C7FCA4183C1838A21878A318F8EF01F0A21707170F173F48486CEB03
FFB912E0A3373E7DBD3E>I<B91280A300019038C000036C6C48EB007FEF1FC0170F1707
A21703A31701A4EF00E0A21638A31800A31678A216F81501150791B5FCA3EC8007150115
001678A21638A693C8FCAF3801FFE0B612F0A3333E7DBD3B>I<DB3FE0130C912603FFFE
131C021F9038FF803C913A7FF00FC07C9139FF0001F0D903FC90380078FC4948143DD91F
E0141F4948140F4948140701FF15034890C8FC491501485A000716005B000F177C5B001F
173CA2485AA2181C127FA25B95C7FC12FFAB041FB512F0127FA26D9139000FFE00EF03FC
123FA27F121FA26C7EA212077F12036C7E7F6C7F6D6C14076D7E6D6C140FD907F8141ED9
03FEEC3C7C902600FF80EBF83C913A7FF007F01C021FB5EAC00C020391C8FC9138003FF0
3C427BBF47>I<B6D8C01FB512F8A3000101E0C7383FFC0026007F80EC0FF0B3A691B7FC
A30280C7120FB3A92601FFE0EC3FFCB6D8C01FB512F8A33D3E7DBD44>I<B612F0A3C6EB
F000EB3FC0B3B3B2EBFFF0B612F0A31C3E7EBD21>I<011FB512FCA3D9000713006E5A14
01B3B3A6123FEA7F80EAFFC0A44A5A1380D87F005B007C130700385C003C495A6C495A6C
495A2603E07EC7FC3800FFF8EB3FC026407CBD2F>I<B600C090387FFFFCA3000101E0C7
000F138026007F80913807FE0018F818E0604D5A4DC7FC173E5F5F4C5A4C5A4C5A4C5A4C
C8FC163E5E5E4B5A4B5AED07804B7E151F4B7E4B7E15FF913881EFF8913883C7FCEC8787
91388F03FE91389E01FF14BCDAF8007F4A6D7E5C4A6D7E4A6D7EA2707E707EA2707E707E
A2707F717E84173F717E717EA2717E848419802601FFE04A13C0B600C090B6FCA3403E7D
BD47>I<B612F8A3000101E0C9FC38007F80B3B0EF0380A517071800A45FA35FA25F5F5F
4C5A160748486C133FB8FCA3313E7DBD39>I<B500C093B512C0A300016D4BEBE000D800
7F1880D977F0ED03BFA3D973F8ED073FA3D971FC150EA2D970FE151CA3027F1538A36E6C
1470A36E6C14E0A26E6CEB01C0A36E6CEB0380A36E6CEB0700A26E6C130EA36E6C5BA303
7F5BA26F6C5AA36F6C5AA392380FE1C0A3923807F380A26FB4C7FCA36F5AA213F8486C6D
5AD807FFEFFFE0B500F80178017FEBFFC0A34A3E7CBD53>I<B56C91B512F88080D8007F
030713006EEC01FC6E6E5A1870EB77FCEB73FEA2EB71FF01707FA26E7E6E7EA26E7E6E7E
A26E7E6E7EA26E7E6E7FA26F7E6F7EA26F7E6F7EA26F7E6F7EA26F7E6F1380A2EE7FC0EE
3FE0A2EE1FF0EE0FF8A2EE07FCEE03FEA2EE01FF7013F0A2177F173FA2171F170FA21707
01F81503487ED807FF1501B500F81400A218703D3E7DBD44>I<ED7FE0913807FFFE9139
1FC03F8091397E0007E04948EB03F8D907F0EB00FE4948147F49486E7E49486E7E49C86C
7E01FE6F7E00018349150300038348486F7EA248486F7EA2001F188049167F003F18C0A3
007F18E049163FA300FF18F0AC007F18E06D167FA4003F18C0A26C6CEEFF80A36C6C4B13
00A26C6C4B5A00035F6D150700015F6C6C4B5A6D5E6D6C4A5A6D6C4A5A6D6C4AC7FC6D6C
14FED901FCEB03F8D9007FEB0FE091391FC03F80912607FFFEC8FC9138007FE03C427BBF
47>I<B712F8EEFF8017E000019039C0003FF86C6C48EB07FCEE01FE707EEF7F80EF3FC0
18E0A2EF1FF0A218F8A818F0A2EF3FE0A218C0EF7F80EFFF004C5AEE07FCEE3FF091B612
C04CC7FC0280C9FCB3A73801FFE0B612C0A3353E7DBD3E>I<B712C016FCEEFF800001D9
C00013E06C6C48EB1FF0EE07FCEE01FE707E84717EA2717EA284A760177F606017FF95C7
FCEE01FCEE07F8EE1FE0EEFF8091B500FCC8FC16F091388001FCED003FEE1FC0707E707E
83160383160183A383A484A4F0C004190EA28218E0057F131E2601FFE0161CB600C0EB3F
F094381FF83805071370CA3801FFE09438003F803F407DBD43>82
D<D907FC131890391FFF8038017FEBE0783901FC03F83A03F0007CF8D807C0133F484813
0F001F140748C7FC003E1403007E1401A2007C140012FC1678A46C1538A27EA26C6C1400
7F7FEA3FF8EBFF806C13F86CEBFF806C14F06C14FC6C14FF6C15C0013F14E0010714F0EB
007F020713F89138007FFC150FED07FE15031501ED00FFA200E0157FA3163FA27EA3163E
7E167E6C157C6C15FC6C15F86D13016DEB03F06DEB07E0D8F9FCEB0FC03AF07F803F8090
391FFFFE00D8E00713F839C0007FC028427BBF33>I<003FB91280A3903AF0007FE00101
8090393FC0003F48C7ED1FC0007E1707127C00781703A300701701A548EF00E0A5C81600
B3B14B7E4B7E0107B612FEA33B3D7DBC42>I<B600C090B512F8A3000101E0C700071300
26007F80EC01FC715A1870B3B3A4013F16F06E5DA21701011F5E80010F15036E4A5A0107
93C7FC6D6C5C6D6C141E6D6C5C027F14F86E6C485A91390FF00FE00203B51280020049C8
FCED1FF03D407DBD44>I<B691380FFFFEA3000301E0020113E06C01809138007F806CEF
3F00017F163E181C6E153C013F1638A26E1578011F1670A26D6C5DA26E140101075EA26E
140301035EA26D6C4AC7FCA2806D150EA26F131E027F141CA26F133C023F1438A26E6C5B
A26F13F0020F5CA2EDF80102075CA26E6C485AA2EDFE07020191C8FCA26F5A6E130EA2ED
7F9CA216DCED3FF8A36F5AA36F5AA26F5AA36F5A3F407EBD44>I<B500FE017FB5D88007
B5FCA3000301C0010101E0C713F86C90C849EC3FE07148EC0F807E7215006E143F017F19
0E84A26D6C60A24D7E6D6C60A2EFE7F86D6C60A2933801C3FC6E18F001076104037F6E02
81140101036104077F17006D6C4D5AA2040EEB7F806D6C4DC7FCA24CEB3FC0DA7F80160E
A24CEB1FE003C0161E023F171C047814F0DBE070010F133C021F173804F014F84C1307DA
0FF05EA2DBF1C0EB03FCDA07F95EA2DBFB80EB01FEDA03FF6F5AA293C8FCA26E5FA24B15
7F020094C8FCA24B81037C153EA20378151E0338151C58407EBD5D>I<007FB5D8C003B5
12E0A3C649C7EBFC00D93FF8EC3FE06D48EC1F806D6C92C7FC171E6D6C141C6D6C143C5F
6D6C14706D6D13F04C5ADA7FC05B023F13036F485ADA1FF090C8FC020F5BEDF81E913807
FC1C163C6E6C5A913801FF7016F06E5B6F5AA26F7E6F7EA28282153FED3BFEED71FF15F1
03E07F913801C07F0203804B6C7EEC07004A6D7E020E6D7E5C023C6D7E02386D7E14784A
6D7E4A6D7F130149486E7E4A6E7E130749C86C7E496F7E497ED9FFC04A7E00076DEC7FFF
B500FC0103B512FEA33F3E7EBD44>I<B66C0103B51280A3000101F0C8EBF8006C6C48ED
3FC0725A013F041EC7FC6D7E606D6C15386D6C1578606D6C5D6E14016D5E6D6D1303606E
6C49C8FC6E6C5B170E6E6C131E171C6E6C5B6E6C137817706E6C13F06F5B6E13016EEB83
C05FED7FC7DB3FE7C9FC16EFED1FFE5E150F6F5AB3A4ED1FFC020FB512FCA3413E7FBD44
>I<486C13C00003130101001380481303000EEB070048130E0018130C0038131C003013
180070133800601330A300E01370481360A400CFEB678039FFC07FE001E013F0A3007F13
3FA2003F131F01C013E0390F0007801C1C73BE2D>92 D<EB0FF8EBFFFE3903F01F803907
8007E0000F6D7E9038E001F8D81FF07F6E7EA3157F6C5AEA0380C8FCA4EC1FFF0103B5FC
90381FF87FEB7F803801FC00EA07F8EA0FE0485A485AA248C7FCEE038012FEA315FFA300
7F5BEC03BF3B3F80071F8700261FC00E13CF3A07F03C0FFE3A01FFF807FC3A003FC001F0
292A7DA82D>97 D<EA01FC12FFA3120712031201B1EC03FC91381FFF8091387C07E09039
FDE001F09039FFC000FC4A137E91C77E49158049141F17C0EE0FE0A217F0A2160717F8AA
17F0A2160FA217E0161F17C06D1580EE3F006D5C6E13FE9039F3C001F89039F1E003F090
39E0780FC09026C03FFFC7FCC7EA07F82D407EBE33>I<49B4FC010F13E090383F00F801
7C131E4848131F4848137F0007ECFF80485A5B121FA24848EB7F00151C007F91C7FCA290
C9FC5AAB6C7EA3003FEC01C07F001F140316806C6C13076C6C14000003140E6C6C131E6C
6C137890383F01F090380FFFC0D901FEC7FC222A7DA828>I<ED01FC15FFA31507150315
01B114FF010713E190381F80F990387E003D49131FD803F81307485A4913034848130112
1F123F5B127FA290C7FCA25AAA7E7FA2123FA26C7E000F14037F000714076C6C497E6C6C
497ED8007C017913F890383F01F190380FFFC1903A01FE01FC002D407DBE33>I<EB01FE
90380FFFC090383F03F09038FC01F848486C7E4848137E48487F000F158049131F001F15
C04848130FA2127F16E090C7FCA25AA290B6FCA290C9FCA67EA27F123F16E06C7E150100
0F15C06C6C13036DEB07806C6C1400C66C131E017E5B90381F80F8903807FFE0010090C7
FC232A7EA828>I<EC1FC0EC7FF8903801F83C903807E07E90380FC0FFEB1FC1EB3F8114
01137FEC00FE01FE137C1500AEB6FCA3C648C7FCB3AE487E007F13FFA320407EBF1C>I<
167C903903F801FF903A1FFF078F8090397E0FDE1F9038F803F83803F001A23B07E000FC
0600000F6EC7FC49137E001F147FA8000F147E6D13FE00075C6C6C485AA23901F803E039
03FE0FC026071FFFC8FCEB03F80006CAFC120EA3120FA27F7F6CB512E015FE6C6E7E6C15
E06C810003813A0FC0001FFC48C7EA01FE003E140048157E825A82A46C5D007C153E007E
157E6C5D6C6C495A6C6C495AD803F0EB0FC0D800FE017FC7FC90383FFFFC010313C0293D
7EA82D>I<EA01FC12FFA3120712031201B1EC01FE913807FFC091381E07E091387803F0
9138E001F8D9FDC07F148001FF6D7E91C7FCA25BA25BB3A6486C497EB5D8F87F13FCA32E
3F7DBE33>I<EA01E0EA07F8A2487EA46C5AA2EA01E0C8FCACEA01FC127FA31207120312
01B3AC487EB512F0A3143E7DBD1A>I<1478EB01FEA2EB03FFA4EB01FEA2EB00781400AC
147FEB7FFFA313017F147FB3B3A5123E127F38FF807E14FEA214FCEB81F8EA7F01387C03
F0381E07C0380FFF803801FC00185185BD1C>I<EA01FC12FFA3120712031201B292B512
80A392383FFC0016E0168093C7FC153C5D5D4A5AEC07C04A5A4AC8FC143E147F4A7E13FD
9038FFDFC0EC9FE0140F496C7E01FC7F496C7E1401816E7E81826F7E151F826F7EA28248
6C14FEB539F07FFFE0A32B3F7EBE30>I<EA01FC12FFA3120712031201B3B3B1487EB512
F8A3153F7DBE1A>I<2701F801FE14FF00FF902707FFC00313E0913B1E07E00F03F0913B
7803F03C01F80007903BE001F87000FC2603F9C06D487F000101805C01FBD900FF147F91
C75B13FF4992C7FCA2495CB3A6486C496CECFF80B5D8F87FD9FC3F13FEA347287DA74C>
I<3901F801FE00FF903807FFC091381E07E091387803F000079038E001F82603F9C07F00
01138001FB6D7E91C7FC13FF5BA25BB3A6486C497EB5D8F87F13FCA32E287DA733>I<14
FF010713E090381F81F890387E007E01F8131F4848EB0F804848EB07C04848EB03E0000F
15F04848EB01F8A2003F15FCA248C812FEA44815FFA96C15FEA36C6CEB01FCA3001F15F8
6C6CEB03F0A26C6CEB07E06C6CEB0FC06C6CEB1F80D8007EEB7E0090383F81FC90380FFF
F0010090C7FC282A7EA82D>I<3901FC03FC00FF90381FFF8091387C0FE09039FDE003F0
3A07FFC001FC6C496C7E6C90C7127F49EC3F805BEE1FC017E0A2EE0FF0A3EE07F8AAEE0F
F0A4EE1FE0A2EE3FC06D1580EE7F007F6E13FE9138C001F89039FDE007F09039FC780FC0
DA3FFFC7FCEC07F891C9FCAD487EB512F8A32D3A7EA733>I<02FF131C0107EBC03C9038
1F80F090397F00387C01FC131CD803F8130E4848EB0FFC150748481303121F485A150148
5AA448C7FCAA6C7EA36C7EA2001F14036C7E15076C6C130F6C7E6C6C133DD8007E137990
383F81F190380FFFC1903801FE0190C7FCAD4B7E92B512F8A32D3A7DA730>I<3901F807
E000FFEB1FF8EC787CECE1FE3807F9C100031381EA01FB1401EC00FC01FF1330491300A3
5BB3A5487EB512FEA31F287EA724>I<90383FC0603901FFF8E03807C03F381F000F003E
1307003C1303127C0078130112F81400A27E7E7E6D1300EA7FF8EBFFC06C13F86C13FE6C
7F6C1480000114C0D8003F13E0010313F0EB001FEC0FF800E01303A214017E1400A27E15
F07E14016C14E06CEB03C0903880078039F3E01F0038E0FFFC38C01FE01D2A7DA824>I<
131CA6133CA4137CA213FCA2120112031207001FB512C0B6FCA2D801FCC7FCB3A215E0A9
12009038FE01C0A2EB7F03013F138090381F8700EB07FEEB01F81B397EB723>I<D801FC
14FE00FF147FA3000714030003140100011400B3A51501A31503120015076DEB06FF017E
010E13806D4913FC90381FC078903807FFE00100903880FE002E297DA733>I<B539E00F
FFE0A32707FE000313006C48EB00FC5E00015D7F00005DA26D13016D5CA26D6C485AA2EC
C007011F91C7FCA290380FE00EA2ECF01E0107131CA26D6C5AA2ECFC7801011370A2ECFE
F001005BA2EC7FC0A36E5AA26EC8FCA3140E2B287EA630>I<B53BC3FFFE03FFF8A3290F
FE003FE00013C06C486D48EB3F806C4817006D010F141E00016F131C15076D163C00004A
6C1338A2017F5E4B7E151DD93F805DED3DFC1538D91FC04A5AED78FE9238707E03D90FE0
017F5BEDE03F02F0140701070387C7FC9138F1C01F02F9148F010315CE9138FB800F02FF
14DE6D15FCED00076D5DA24A1303027E5CA2027C1301023C5C023813003D287EA642>I<
B539F01FFFE0A30003D9C00F1300C690388007F8D97F0013E002805BD93FC05B011F49C7
FC90380FE00EECF01E6D6C5A01035B6D6C5A6E5AEB00FF6E5A6E5A81141F814A7E81147B
ECF1FC903801E1FEECC0FF01037F49486C7ED90F007F011E6D7E013E130F496D7E01FC80
486C80000F4A7EB539803FFFF8A32D277FA630>I<B539E00FFFE0A32707FE000313006C
48EB01FC6F5A00015D7F00005DA2017F495AA2EC8003013F5CA26D6C48C7FCA26E5A010F
130EA26D6C5AA2ECF83C01031338A26D6C5AA2ECFEF001005BA2EC7FC0A36E5AA36EC8FC
A2140EA2141E141C143C1438A2147800181370127EB45BA2495AA248485AD87E07C9FCEA
780EEA3C3CEA1FF8EA07E02B3A7EA630>I<001FB61280A2EBE0000180140049485A001E
495A121C4A5A003C495A141F00385C4A5A147F5D4AC7FCC6485AA2495A495A130F5C495A
90393FC00380A2EB7F80EBFF005A5B484813071207491400485A48485BA248485B484813
7F00FF495A90B6FCA221277EA628>I E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fm cmtt9 9 15
/Fm 15 122 df<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A728927>46
D<EB01FE903807FF80011F13C0017F13E090B512F048EB03F83803FC013907F000FC390F
E01F7C9038C07FFE381F80FF1301485A393E07F1FF007E13E0397C0FC07FEC803FA2EAFC
1F00F8EB001FA800FCEB803FD87C0F133EA2ECC07E397E07E0FC003E13F1393F03FFF86C
6C13F0018013E0390FC07FC09038E01F1E3907F0003FD803FC137F3901FF03FF6CEBFFFE
6D13FC011F13F0010713C001011300202E7DAD27>64 D<3803FFC0000F13F04813FC4813
FF811380EC1FC0381F000F000480C71207A2EB0FFF137F0003B5FC120F5A383FFC07EA7F
C0130012FE5AA46C130F007F131FEBC0FF6CB612806C15C07E000313F1C69038807F8022
207C9F27>97 D<EB0FFF017F13C048B512E04814F05A380FF807EA1FE0393FC003E09038
80008048C8FC127EA212FE5AA67E127EA2007F14F0393F8001F813C0381FE003390FF80F
F06CB5FC6C14E06C14C06C6C1300EB0FF81D207B9F27>99 D<EC3FF04A7EA3143F1401A9
EB0FE1EB7FFD48B5FC5A5A380FF83F381FE00F383FC007EB8003EA7F00007E1301A212FE
5AA67E007E1303A2127F6C1307EB800F381FE01F380FF03F6CB612C06C15E06C13FD3800
7FF9D91FE013C0232E7EAD27>I<EB0FF8EB3FFE90B51280000314C04814E0390FFC0FF0
391FE003F8EBC001D83F8013FC48C7FC127E157E12FEB612FEA415FC00FCC8FC7E127E12
7F6C143C6D137E6C7E01F013FE390FFC07FC6CB5FC000114F86C14F0013F13C0903807FE
001F207D9F27>I<EA7FE0487EA3127F1203A9147F9038F1FFC001F713F090B5FC8114C1
EC01FCEBFE005B5BA25BB03A7FFF83FFE0B500C713F0A36C018313E0242E7FAD27>104
D<EA7FE07F12FF127FA21201A991383FFFC04A13E0A36E13C0913803F8004A5A4A5A4A5A
4A5A02FFC7FCEBF1FEEBF3FCEBF7F8EBFFFC8080143F496C7E496C7E01F87FEBF0076E7E
6E7E816E7E157E3A7FFFC1FFF002C313F8B512E36C13C316F0252E80AD27>107
D<387FFF80B57EA37EEA000FB3B2007FB512F8B612FCA36C14F81E2E7CAD27>I<397FFC
03FC39FFFE0FFF023F13804A13C0007F90B5FC39007FFE1F14F89138F00F809138E00200
4AC7FC5CA291C8FCA2137EAD007FB57EB67EA36C5C22207E9F27>114
D<9038FFF3800007EBFFC0121F5A5AEB803F38FC000F5AA2EC07806C90C7FCEA7F8013FC
383FFFF06C13FC000713FF00011480D8000F13C09038003FE014070078EB03F000FC1301
A27E14036CEB07E0EBE01F90B512C01580150000FB13FC38707FF01C207B9F27>I<133C
137EA8007FB512F0B612F8A36C14F0D8007EC7FCAE1518157EA415FE6D13FC1483ECFFF8
6D13F06D13E0010313C0010013001F297EA827>I<397FE01FF8486C487EA3007F131F00
031300B21401A21403EBFC0F6CB612E016F07EEB3FFE90390FF87FE024207F9F27>I<3A
7FFE07FFE000FF15F06D5A497E007F15E03A0F80001F00A36D5B0007143EA414F0EBC1F8
3903E3FC7CA4EBE79EA200011478A301F713F8A2EBFF0F6C5CA3EBFE0790387C03E02420
7F9F27>119 D<3A7FFC0FFF80486C4813C0A36C486C13803A07E000F800000313015D13
F00001130301F85B1200A26D485A137CA290387E0F80133EA2011F90C7FC5CA2130F149E
14BE130714FC1303A25C1301A25CA213035CA213075C1208EA3E0F007F5B131FD87E7FC8
FCEA7FFE6C5A5B6C5AEA07C022317E9F27>121 D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fn cmr9 9 28
/Fn 28 121 df<123C127EB4FCA21380A2127F123D1201A412031300A25A1206120E120C
121C5A5A126009177A8715>44 D<123C127E12FFA4127E123C08087A8715>46
D<EB1FE0EBFFFC4813FF3907E03F80390F001FC0001EEB0FE0001CEB07F0123F018013F8
140313C01380A2381F0007C7FC15F0A2EC0FE015C0141FEC3F80EC7E00EB01F8EB7FE014
FCEB003FEC1FC0EC0FE0EC07F015F8140315FC140115FEA3127EB4FCA415FC4813031278
0070EB07F86C14F0003C130F001FEB1FE0390FE03F800003B51200C613FCEB1FE01F347D
B126>51 D<14FE903807FF80011F13E090383F00F0017C13703901F801F8EBF003EA03E0
1207EA0FC0EC01F04848C7FCA248C8FCA35A127EEB07F0EB1FFC38FE381F9038700F8090
38E007C039FFC003E0018013F0EC01F8130015FC1400A24814FEA5127EA4127F6C14FCA2
6C1301018013F8000F14F0EBC0030007EB07E03903E00FC03901F81F806CB51200EB3FFC
EB0FE01F347DB126>54 D<1230123C003FB6FCA34814FEA215FC0070C712380060143015
7015E04814C01401EC0380C7EA07001406140E5C141814385CA25CA2495A1303A3495AA2
130FA3131F91C7FCA25BA55BA9131C20347CB126>I<EB0FE0EB7FF8EBFFFE3803F83F39
07E00F80390FC007C0D81F8013E0EC03F0EA3F0048EB01F8127EA200FE14FC1400A415FE
A5007E1301A2127F7E1403EA1F80000F13073807C00E3803E01C3801F03838007FF09038
1FC0FC90C7FC1401A215F8A215F01403001F14E0383F800715C0140FEC1F809038003F00
001C137E381F01FC380FFFF0000313C0C690C7FC1F347DB126>57
D<DA03FE130C91393FFF801C91B512E0903A03FE01F83C903A0FF0003C7CD91FC0EB0EFC
D97F80130701FEC7120348481401000315005B4848157C485A173C485A171C123F5B007F
160CA390C9FC481600AB7E6D150CA3123F7F001F161C17186C7E17386C6C15306C6C1570
6D15E012016C6CEC01C0D97F80EB0380D91FC0EB0F00D90FF0131ED903FE13FC0100B512
F0023F13C0DA03FEC7FC2E377CB437>67 D<B77E16F016FE3A01FE0001FF00009138003F
C0EE0FE0707E707E707E707E177E177FEF3F80A2EF1FC0A3EF0FE0A418F0AA18E0A3171F
18C0A21880173F18005F17FE5F4C5AEE07F04C5AEE3FC000014AB45AB748C7FC16F81680
34337EB23B>I<B500FE903807FFF8A3000190C7000113006C48EC00FC17F04C5A4C5A4C
C7FC160E5E5E5E5E4B5A4B5A4BC8FC150E5D5D15F84A7E14034A7EEC0EFF5C4A6C7E4A6C
7EECE01FD9FFC07F4A6C7E4A6C7E5B6F7E6F7EA26F7E707EA2707E707E160F83707E707E
A283486C913807FF80B500FE013F13FCA336337EB23C>75 D<D8FFFE91381FFFF87F80C6
030013006E143CD9DFE01418EBCFF0A2EBC7F8EBC3FCA2EBC1FEEBC0FF6E7EA26E7E6E7E
A26E7E6E7E6E7EA26E7E6E7EA2ED7F80ED3FC0ED1FE0A2ED0FF0ED07F8A2ED03FCED01FE
ED00FFA2EE7F98EE3FD8A2EE1FF8160F1607A216031601A2486C1400D807F81578B500C0
1438A2171835337EB23A>78 D<90381FE00390387FFC0748B5FC3907F01FCF390F8003FF
48C7FC003E80814880A200788000F880A46C80A27E92C7FC127F13C0EA3FF013FF6C13F0
6C13FF6C14C06C14F0C680013F7F01037F9038003FFF140302001380157F153FED1FC015
0F12C0A21507A37EA26CEC0F80A26C15006C5C6C143E6C147E01C05B39F1FC03F800E0B5
12E0011F138026C003FEC7FC22377CB42B>83 D<007FB712FEA390398007F001D87C00EC
003E0078161E0070160EA20060160600E01607A3481603A6C71500B3AB4A7E011FB512FC
A330337DB237>I<B500FE90381FFFF8A3000190C813006C48153C1718B3AF1738017F15
30A217706D6C1460011F15E06E495A010F14036D6C495A6D6C49C7FCD901FC131E6DB413
FC91383FFFF0020F13C0020190C8FC35357EB23A>I<EB07F8EB3FFF9038FC07C03901F0
00E03903E003F03807C007120FEA1F80123F90380003E04890C7FCA2127E12FEAA127FA2
6C14187F001F14386D1330000F14706C6C13E03903F001C03900FC0F8090383FFE00EB07
F01D237EA122>99 D<EB0FE0EB7FFCEBF83F3903F00F80D807E013C0390FC007E0381F80
0315F0EA3F0014014814F8127EA212FEA2B6FCA248C8FCA5127E127FA26C1418A26C6C13
38000F14306D13706C6C13E03901F003C03900FC0F00EB3FFEEB07F01D237EA122>101
D<EB01FCEB07FF90381F078090383E0FC0EB7C1F13FCEA01F8A20003EB070049C7FCACB5
12F0A3D803F0C7FCB3A7487E387FFFE0A31A357FB417>I<EA0780EA0FC0EA1FE0A4EA0F
C0EA0780C7FCAAEA07E012FFA3120F1207B3A6EA0FF0B5FCA310337EB215>105
D<EA07E012FFA3120F1207B3B3A7EA0FF0B5FCA310347EB315>108
D<2703F01FE013FF00FF90267FF80313C0903BF1E07C0F03E0903BF3803E1C01F02807F7
003F387FD803FE1470496D486C7EA2495CA2495CB3486C496C487EB53BC7FFFE3FFFF0A3
3C217EA041>I<3903F01FC000FFEB7FF09038F1E0FC9038F3807C3907F7007EEA03FE49
7FA25BA25BB3486CEB7F80B538C7FFFCA326217EA02B>I<EB07F0EB3FFE9038FC1F8039
01F007C03903C001E000078048486C7E48C7127CA248147E003E143E007E143FA300FE15
80A8007E1500A36C147EA26C147C6D13FC6C6C485A00075C3903F007E03900FC1F80D93F
FEC7FCEB07F021237EA126>I<3903F03F8000FFEBFFE09038F3C0F89038F7007ED807FE
7F6C48EB1F804914C049130F16E0ED07F0A3ED03F8A9150716F0A216E0150F16C06D131F
6DEB3F80160001FF13FC9038F381F89038F1FFE0D9F07FC7FC91C8FCAA487EB512C0A325
307EA02B>I<3803E07C38FFE1FF9038E38F809038E71FC0EA07EEEA03ECA29038FC0F80
49C7FCA35BB2487EB512E0A31A217FA01E>114 D<EBFF06000713CE381F00FE003C133E
48131E140E5A1406A27EA200FE90C7FC6C7EEA7FFC383FFFC014F0000F7F6C7FC67FEB0F
FF1300EC3F8000C0131F140F6C1307A37E15006C5B6C130E6C5B38F7807838E1FFE038C0
7F8019237EA11E>I<1330A51370A313F0A21201A212031207381FFFFEB5FCA23803F000
AF1403A814073801F806A23800FC0EEB7E1CEB1FF8EB07E0182F7FAD1E>I<D803F0133F
00FFEB0FFFA30007EB007F000380B35DA35D12016D4813800000903803BFFC90387E073F
EB1FFED907F8130026227EA02B>I<B5EBFFF0A3D80FF0EB3F800007EC1F000003140E15
0C6D131C00011418A26C6C5BA26D1370017E1360137F6D5BA290381F8180A214C3010F90
C7FCA2EB07E6A214FE6D5AA26D5AA36D5AA2146024217E9F29>I<B53801FFF8A32603FE
0013806C48EB7C0000001478017E1370017F5B90383F81C090381F8380D90FC3C7FCEB07
E614FE6D5A6D5A6D7E80805B9038039F809038071FC09038060FE0EB0C0790381C03F049
6C7E01707FEBF000000180000FECFF8026FFFC0313FCA326207F9F29>120
D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fo cmsy6 6 1
/Fo 1 4 df<136013701360A20040132000E0137038F861F0387E67E0381FFF803807FE
00EA00F0EA07FE381FFF80387E67E038F861F038E060700040132000001300A213701360
14157B9620>3 D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fp cmr10 10 34
/Fp 34 122 df<121C127FEAFF80A213C0A3127F121C1200A412011380A2120313005A12
06120E5A5A5A12600A1979B917>39 D<146014E0EB01C0EB0380EB0700130E131E5B5BA2
5B485AA2485AA212075B120F90C7FCA25A121EA2123EA35AA65AB2127CA67EA3121EA212
1F7EA27F12077F1203A26C7EA26C7E1378A27F7F130E7FEB0380EB01C0EB00E014601352
78BD20>I<12C07E12707E7E7E120F6C7E6C7EA26C7E6C7EA21378A2137C133C133E131E
A2131F7FA21480A3EB07C0A6EB03E0B2EB07C0A6EB0F80A31400A25B131EA2133E133C13
7C1378A25BA2485A485AA2485A48C7FC120E5A5A5A5A5A13527CBD20>I<121C127FEAFF
80A213C0A3127F121C1200A412011380A2120313005A1206120E5A5A5A12600A19798817
>44 D<121C127FEAFF80A5EA7F00121C0909798817>46 D<150C151E153EA2153C157CA2
157815F8A215F01401A215E01403A215C01407A21580140FA215005CA2141E143EA2143C
147CA2147814F8A25C1301A25C1303A2495AA25C130FA291C7FC5BA2131E133EA2133C13
7CA2137813F8A25B1201A25B1203A25B1207A25B120FA290C8FC5AA2121E123EA2123C12
7CA2127812F8A25A12601F537BBD2A>I<1538A3157CA315FEA34A7EA34A6C7EA202077F
EC063FA2020E7FEC0C1FA2021C7FEC180FA202387FEC3007A202707FEC6003A202C07F15
01A2D901807F81A249C77F167FA20106810107B6FCA24981010CC7121FA2496E7EA3496E
7EA3496E7EA213E0707E1201486C81D80FFC02071380B56C90B512FEA3373C7DBB3E>65
D<B612C0A3C6EBC0006D5AB3B3AD497EB612C0A31A397EB81E>73
D<B612E0A3000101C0C8FC6C90C9FCB3AD1718A517381730A31770A317F0A21601160316
0FEE1FE0486D13FFB8FCA32D397DB834>76 D<D90FF813C090383FFE0190B512813903F8
07E33907E000F74848137F4848133F48C7121F003E140F007E1407A2007C140312FC1501
A36C1400A37E6D14006C7E7F13F86CB47E6C13F8ECFF806C14E06C14F86C14FEC680013F
1480010714C0EB007F020713E0EC007FED3FF0151F150FED07F8A200C01403A21501A37E
A216F07E15036C15E06C14076C15C06C140F6DEB1F80D8FBF0EB3F00D8F0FE13FE39E03F
FFF8010F13E0D8C00190C7FC253D7CBA2E>83 D<003FB812E0A3D9C003EB001F273E0001
FE130348EE01F00078160000701770A300601730A400E01738481718A4C71600B3B09138
07FF80011FB612E0A335397DB83C>I<EB1FE0EBFFFC3803E03F3907000F80390F8007E0
486C6C7E13E06E7EA26E7E6C5A6C5AC8FCA4147FEB07FFEB3FE0EBFE00EA03F8EA0FF0EA
1FC0123F485A90C7FC160C12FEA31401A26C13036CEB077C903980063E18383FC01E3A0F
E0781FF03A03FFF00FE03A007F8007C026277DA52A>97 D<EA03F012FFA3120F1203B0EC
1FE0EC7FF89038F1E03E9039F3801F809039F7000FC001FEEB07E049EB03F049EB01F85B
ED00FCA216FEA2167E167FAA167E16FEA216FC15016D14F8ED03F07F01EEEB07E001C6EB
0FC09039C7801F00903881E07E903800FFF8C7EA1FC0283B7EB92E>I<EB03FC90381FFF
8090387E03E03901F80070484813F83907E001FC380FC003A2EA1F80123F90380001F848
EB00F01500A2127E12FEAA127E127FA26C14067F001F140E6D130C000F141C6C6C13386C
6C13706C6C13E039007C07C090381FFF00EB07F81F277DA525>I<ED0FC0EC03FFA3EC00
3F150FB0EB03F8EB1FFF90387E078F9038F801EF3903F0007F4848133F4848131FA24848
130F123F90C7FC5AA2127E12FEAA127E127FA27EA26C6C131FA26C6C133F6C6C137F6C6C
EBEFF03A01F801CFFF39007C078F90381FFE0FD907F813C0283B7DB92E>I<EB07F8EB1F
FF90387C0FC03901F803E03903F001F0D807E013F8380FC0004848137CA248C7127E153E
5A153F127E12FEA3B7FCA248C8FCA5127EA2127FA26C14037F001F14076C6C1306000714
0E6D131CD801F013386C6C137090387E03E090381FFF80903803FC0020277EA525>I<14
7E903803FF8090380FC1E0EB1F8790383F0FF0137EA213FCA23901F803C091C7FCADB512
FCA3D801F8C7FCB3AB487E387FFFF8A31C3B7FBA19>I<ED03F090390FF00FF890393FFC
3C3C9039F81F707C3901F00FE03903E007C03A07C003E010000FECF000A248486C7EA86C
6C485AA200075C6C6C485A6D485A6D48C7FC38073FFC38060FF0000EC9FCA4120FA213C0
6CB512C015F86C14FE6CECFF804815C03A0F80007FE048C7EA0FF0003E140348140116F8
481400A56C1401007C15F06CEC03E0003F1407D80F80EB0F80D807E0EB3F003901FC01FC
39007FFFF0010790C7FC26387EA52A>I<EA03F012FFA3120F1203B0EC0FF0EC3FFCECF0
3F9039F1C01F809039F3800FC0EBF70013FE496D7EA25BA35BB3A3486C497EB500C1B512
80A3293A7EB92E>I<EA0380EA0FE0487EA56C5AEA0380C8FCAAEA03F012FFA312071203
B3AA487EB512C0A312387EB717>I<EB01C0EB07F0EB0FF8A5EB07F0EB01C090C7FCAAEB
01F813FFA313071301B3B3A2123C127E00FF13F01303A214E038FE07C0127C383C0F00EA
0FFEEA03F8154984B719>I<EA03F012FFA3120F1203B1913801FFFCA39138007FC01600
157C15705D4A5A4A5A4AC7FC141E1438147814FC13F1EBF3FEEBF73F01FE7FEBF81F496C
7E8114076E7E6E7E811400157E157F811680ED1FC0486CEB3FF0B500C0B5FCA3283A7EB9
2C>I<EA03F012FFA3120F1203B3B3AD487EB512C0A3123A7EB917>I<2703F00FF0EB1FE0
00FFD93FFCEB7FF8913AF03F01E07E903BF1C01F83803F3D0FF3800FC7001F802603F700
13CE01FE14DC49D907F8EB0FC0A2495CA3495CB3A3486C496CEB1FE0B500C1B50083B5FC
A340257EA445>I<3903F00FF000FFEB3FFCECF03F9039F1C01F803A0FF3800FC03803F7
0013FE496D7EA25BA35BB3A3486C497EB500C1B51280A329257EA42E>I<EB03FE90380F
FF8090383E03E09038F800F84848137C48487F48487F4848EB0F80001F15C090C7120748
15E0A2007EEC03F0A400FE15F8A9007E15F0A2007F14076C15E0A26C6CEB0FC0000F1580
6D131F6C6CEB3F006C6C137EC66C13F890387E03F090381FFFC0D903FEC7FC25277EA52A
>I<3903F01FE000FFEB7FF89038F1E07E9039F3801F803A0FF7000FC0D803FEEB07E049
EB03F04914F849130116FC150016FEA3167FAA16FEA3ED01FCA26DEB03F816F06D13076D
EB0FE001F614C09039F7803F009038F1E07E9038F0FFF8EC1FC091C8FCAB487EB512C0A3
28357EA42E>I<3807E01F00FFEB7FC09038E1E3E09038E387F0380FE707EA03E613EE90
38EC03E09038FC0080491300A45BB3A2487EB512F0A31C257EA421>114
D<EBFF03000313E7380F80FF381E003F487F487F00707F12F0A2807EA27EB490C7FCEA7F
E013FF6C13E06C13F86C7F00037FC67F01071380EB007F141F00C0EB0FC01407A26C1303
A37E15806C13077EEC0F00B4131E38F3C07C38E1FFF038C03F801A277DA521>I<1318A5
1338A31378A313F8120112031207001FB5FCB6FCA2D801F8C7FCB215C0A93800FC011580
EB7C03017E13006D5AEB0FFEEB01F81A347FB220>I<D803F0EB07E000FFEB01FFA3000F
EB001F00031407B3A4150FA3151F12016D133F0000EC77F86D9038E7FF8090383F03C790
381FFF87903A03FC07E00029267EA42E>I<B538803FFEA33A0FF8000FF06C48EB07E000
03EC03C06D148000011500A26C6C1306A26D130E017E130CA26D5BA2EC8038011F1330A2
6D6C5AA214E001075BA2903803F180A3D901FBC7FCA214FF6D5AA2147CA31438A227257E
A32C>I<B53A1FFFE03FFEA3260FF8009038000FF86C48017EEB03E018C00003023EEB01
80A26C6C013FEB0300A36C6CEC8006156FA2017E9038EFC00C15C7A2D93F016D5A158302
81EBF038D91F831430150102C3EBF87090260FC6001360A2D907E66D5A02EC137CA2D903
FCEB7F804A133FA2010192C7FC4A7FA20100141E4A130E0260130C37257EA33C>I<B538
803FFEA33A0FF8000FF06C48EB07C00003EC03806C7E16007F00001406A2017E5BA2137F
6D5BA26D6C5AA2ECC070010F1360A26D6C5AA214F101035BA2D901FBC7FCA214FF6D5AA2
147CA31438A21430A214701460A25CA2EA7C0100FE5B130391C8FC1306EAFC0EEA701C6C
5AEA1FF0EA0FC027357EA32C>121 D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fq cmbx10 10 7
/Fq 7 117 df<ED03E04B7EA24B7EA34B7EA24B7EA34B7EA292B57EA34A8015F3020380
15E1A202078015C0020F80ED807FA2021F80ED003F4A80023E131FA2027E80027C7F02FC
814A7FA20101824A7F49B77EA3498202C0C7FC010F824A147FA2011F8291C8123F498201
3E151FA2017E82017C8101FE83B500F80107B61280A4413A7DB948>65
D<EB3FFE0003B512E0000F14F8391FF00FFE003FEB03FF6D6C7F6E7FA26F7EA26C5A6C5A
EA0380C8FCA2EC3FFF010FB5FC137F3901FFF87F00071380380FFE00EA3FF85B485A12FF
5BA415FF6D5A127F263FF00713F83B1FFC1FBFFFC0390FFFFE1F0003EBF80F39003FE003
2A257DA42E>97 D<13FFB5FCA412077EAF4AB47E020F13F0023F13FC9138FE03FFDAF000
13804AEB7FC00280EB3FE091C713F0EE1FF8A217FC160FA217FEAA17FCA3EE1FF8A217F0
6E133F6EEB7FE06E14C0903AFDF001FF80903AF8FC07FE009039F03FFFF8D9E00F13E0D9
C00390C7FC2F3A7EB935>I<903801FFC0010F13FC017F13FFD9FF8013802603FE0013C0
48485AEA0FF8121F13F0123F6E13804848EB7F00151C92C7FC12FFA9127FA27F123FED01
E06C7E15036C6CEB07C06C6C14806C6C131FC69038C07E006DB45A010F13F00101138023
257DA42A>I<9038FE03F000FFEB0FFEEC3FFF91387C7F809138F8FFC000075B6C6C5A5C
A29138807F80ED3F00150C92C7FC91C8FCB3A2B512FEA422257EA427>114
D<90383FF0383903FFFEF8000F13FF381FC00F383F0003007E1301007C130012FC15787E
7E6D130013FCEBFFE06C13FCECFF806C14C06C14F06C14F81203C614FC131F9038007FFE
140700F0130114007E157E7E157C6C14FC6C14F8EB80019038F007F090B512C000F81400
38E01FF81F257DA426>I<130FA55BA45BA25B5BA25A1207001FEBFFE0B6FCA3000390C7
FCB21578A815F86CEB80F014816CEBC3E090383FFFC06D1380903803FE001D357EB425>
I E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fr cmsy8 8 2
/Fr 2 4 df<B812C0A32A037A9137>0 D<130C131EA50060EB01800078130739FC0C0FC0
007FEB3F80393F8C7F003807CCF83801FFE038007F80011EC7FCEB7F803801FFE03807CC
F8383F8C7F397F0C3F8000FCEB0FC039781E078000601301000090C7FCA5130C1A1D7C9E
23>3 D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fs cmr12 12 18
/Fs 18 122 df<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A3120113
80120313005A1206120E5A5A5A12600B1D78891B>44 D<121EEA7F80A2EAFFC0A4EA7F80
A2EA1E000A0A78891B>46 D<14FF010713E090381F81F890383E007C01FC133F4848EB1F
8049130F4848EB07C04848EB03E0A2000F15F0491301001F15F8A2003F15FCA390C8FC48
15FEA54815FFB3A46C15FEA56D1301003F15FCA3001F15F8A26C6CEB03F0A36C6CEB07E0
000315C06D130F6C6CEB1F806C6CEB3F00013E137C90381F81F8903807FFE0010090C7FC
28447CC131>48 D<EB03FE90381FFFC0017F13F03901F80FFC3903C001FE48486C7E000E
C7EA7F8048EC3FC0ED1FE04815F00030140F007015F800601407126CB415FC7F7F1503A4
6C4813076CC7FCC8FC16F8A2150F16F0151F16E0A2ED3FC0ED7F8016005D5D4A5A4A5A4A
5A5D4A5A4A5A4AC7FC147C5C5C495A495A495A49C7120C131E5B013814185B5B485A4848
143848C81230000E1570001FB612F0A25A5AB712E0A326427BC131>50
D<14FF010713E0011F13F890387F80FC9038FC007E48487F4848EB1F804848EB0FC0000F
EC07E0485AED03F0485A16F8007F140190C713FCA25AA216FE1500A516FFA46C5CA36C7E
5D121F7F000F5C6C6C130E150C6C6C131C6C6C5BD8007C5B90383F01E090390FFF80FE90
3801FE0090C8FC150116FCA4ED03F8A216F0D80F801307486C14E0486C130F16C0ED1F80
A249EB3F0049137E001EC75A001C495A000F495A3907E01FE06CB51280C649C7FCEB1FF0
28447CC131>57 D<DB0FFE146092B500C013E0020314F0913A0FFC01FC0191393FC0003E
02FFC7EA0F83D903FCEC03C74948EC01E74948EC00FF4948157F4948153F4948151F49C9
120F485A491607120348481603A248481601A248481600A2123FA2491760127FA3190048
5AAE6C7EA21960A2123F7FA2001F18E07F000F18C0A26C6C160119806C6C160312016DEE
07006C6C16066D6C150E6D6C5D6D6C5D6D6C15786D6C5D6D6C4A5AD900FFEC0780DA3FC0
011FC7FCDA0FFC13FC0203B512F0020014C0DB0FFEC8FC3B487BC546>67
D<010FB512FEA3D9000313806E130080B3B3AB123F487E487EA44A5A13801300006C495A
00705C6C13076C5C6C495A6CEB1F802603E07FC7FC3800FFFCEB1FE027467BC332>74
D<B712E016FF17C000019039C0003FF86C6C48EB03FCEE00FF717E717E717E717E717EA2
84170384A760A21707604D5AA24D5A4D5A4DC8FCEE01FEEE07F8EE3FE091B6C9FC16FC91
3980007F80EE0FE0707EEE03FC707E160083717EA2717EA784A71A6084171FA21AE0716C
13C02601FFE002071301B600C01680943801FC03943900FE0700CBEA3FFEF007F843467C
C348>82 D<B60107B500F890380FFFFEA3000301E0D9001F90C813F06C0180DA0FFCED3F
C091C86C48ED1F006C871C0E6D6C6E7E1C0CA26D6C6F5DA36EDA06FF1538011F1A30A26E
020E6D1470010FDB0C7F1560A26E021C7F0107DB183F5DA2856D6CDA301F4A5AA36D6C4A
6C6C49C7FCA36D6C4A6C6C1306A3DB80016E130E027FDA8003140CA2DBC00380023FDA00
015CA203E081021F01066D5CA36E6C486E6C5AA36E6C486E6C5AA36F48EC1FE1020360A2
DBFE7015F302010160020F90C8FCA2DBFFE015FB6E49EC07FEA36F486E5AA36FC86C5AA3
031E6F5AA4030C16605F467EC364>87 D<EB07FC90383FFF809038F80FE03903C003F048
C66C7E000E6D7ED80FC0137E486C137F6D6D7EA36F7EA26C5AEA0380C8FCA4EC0FFF49B5
FC90380FFE1FEB3FC0EBFF00EA03FC485A485A485A485A127F5B176048C7FCA3153FA36D
137F007F14EF6D9038C7E0C0003F13013A1FE00783F13B07F81E03FF802701FFFC011300
3A001FE0007C2B2E7CAC31>97 D<EB01FE903807FFC090381F03F090387E00FC49137E48
487F485A4848EB1F80000F15C049130F121F484814E01507A2007F15F090C7FCA25AA390
B6FCA290C9FCA67EA27FA2123F16306C7E1670000F15606D14E06C6C14C0000314016C6C
EB03806C6CEB0700013E131E90381F80F8903803FFE0010090C7FC242E7DAC2B>101
D<EA01FC12FFA3120712031201B3EC01FE913807FFC091381E07F091383801F802707FEC
E000D9FDC07F5C01FF147F91C7FCA25BA35BB3A8486CECFF80B5D8F83F13FEA32F457DC4
36>104 D<EA01E0EA07F8A2487EA46C5AA2EA01E0C8FCADEA01FC12FFA3120712031201
B3B0487EB512F8A315437DC21C>I<EA01FC12FFA3120712031201B3B3B3A5487EB512F8
A315457DC41C>108 D<3901FC01FE00FF903807FFC091381E07F091383801F800070170
7F0003EBE0002601FDC07F5C01FF147F91C7FCA25BA35BB3A8486CECFF80B5D8F83F13FE
A32F2C7DAB36>110 D<1306A5130EA4131EA3133E137EA213FE12011207001FB512F0B6
FCA2C648C7FCB3A4150CAA017E131C017F1318A26D133890381F8030ECC070903807E0E0
903801FFC09038007F001E3E7EBC26>116 D<D801FC147F00FFEC3FFFA3000714010003
80000181B3A85EA35DA212006D5B017E9038077F80017F010E13C06D011C13FE90380FC0
78903803FFF09026007F8013002F2D7DAB36>I<B539F001FFFCA3000790C7EA7FE06C48
EC1F8000011600160E0000150C6D141C6D1418A26E1338013F1430A26D6C5BA26E13E001
0F5CA26D6C485AA2ECF803010391C7FCA2903801FC06A2ECFE0E0100130CA2EC7F18A215
B8EC3FB0A2EC1FE0A36E5AA26E5AA36EC8FCA21406A35CA25CA2123C007E5BB4FC5CA25C
EAFE01387C0380D87007C9FCEA3C1EEA0FFCEA03F02E3F7EAA33>121
D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Ft cmr17 17.28 15
/Ft 15 118 df<170FA34D7EA24D7EA34D7EA34D7EA34C7F17DFA29338039FFC178FA293
38070FFE1707040F7FEE0E03A2041E80EE1C01A2043C80EE3800A24C80187FA24C80183F
A24B4880181F0303814C130FA203078193C71207A24B81030E80A24B8284A24B8284A24B
82197F03F0824B153FA20201834B151FA202038392B8FCA24A83A292C91207020E8385A2
4A8485023C84023882A20278840270177FA202F0844A173FA24948841A1FA24948841A0F
A249CB7F1A074985865B496C85497E48486C4D7F000F01F8051F13F0B60407B612F0A45C
657DE463>65 D<B712E0A4C60280CAFCD93FFCCBFC131F5CB3B3B21A1CA61A3C1A38A61A
78A41AF8A21AF01901A219031907A2190F191F193F197FF001FF1807013F043F13E0D9FF
FC0203B5FCBBFCA4466279E153>76 D<DA07FF1403023F01F05B49B512FC010702FF5B90
260FFC0013C0D93FE090380FF01FD97F80EB03F801FEC86C5A4848157E4848ED1F7F4848
6F5A4848815B001F824981003F8290CAFC4883A2007E83A212FE84A384A27EA36D82A26C
7EA26D93C7FC6C7E7F7F6C7E6D7E6C13E06C13FCECFFC06C14F86CECFF806C15F86DECFF
80011F15E06D15F8010315FE01006F7E021F81020181DA003F80030380DB003F7F04037F
EE007FEF1FFF71138017037113C083A2F07FE0183FA2181F00E018F0180FA41807A27EA4
7E19E0180F7E19C07E6C171F19806D163F6D17006D5E6D16FE486C5E6D4B5AD8FC7F1503
D91F80EC0FF026F80FE04A5AD907FCEC7F8029F001FFE003FFC7FC6D6CB512FC48011F14
F0020314C0489026001FFEC8FC3C667AE349>83 D<003FBC12F8A49126C000039038C000
0301FCC76C49EB007F01F0190F01C019074848F103FC90C81701007E1A00007C1B7CA300
781B3CA400701B1CA600F01B1E481B0EA7C91800B3B3B3A54C7FA2041F13F84AB87EA457
627CE160>I<B7031FB512F0A4C691CAEBFE00D93FFCEF3FF86D48EF0FE0A2745AA2745A
B3B3B3A71A07010F96C7FC80A30107601A0E6E171E13031A1C6D6C173C1A386D6D167862
6E7E023F4C5A6F4B5A6E6C15076E6C4B5A6E6C4BC8FC6E6C153E6E6C15FC9126007FC049
5ADB3FF0EB0FF0DB0FFEEB7FC00303B6C9FC030014FC043F13F004031380546479E163>
I<EB03C0EA07FFB5FCA41201EA007FA2133FB3AAEE7FC0923807FFFC031F13FF92397F00
7FC003F8EB0FF0DAC3E06D7EDAC780EB01FC02CFC87E02DE157F02FC6F7E4A824A6F7E18
0F4A82727E5C727EA2851801A285A3841A80AD1A0060A461180361A21807616E5E180F6E
4B5A6E5E02B8153F023C4B5A6E4BC7FC6E4A5A90263E0780495A6E6CEB0FF090263C01F0
495ADA007EEBFF806FB448C8FC0138010F13F890C8138041657DE349>98
D<4AB47E020F13F8023F13FE9139FF007F80D903FCEB07E0D907F0EB01F0D91FE0EB0078
49488049488049C87E48485D4915FF00034B138048485CA2485AA2485AA2003F6F130049
EC007C94C7FC127FA35B12FFAD127F7FA4123F7FA2001FEE01C07F000F16036D16801207
6C6C15076D160000015E6C6C151E6D6C5C6D6C5C6D6C5CD90FF8495AD903FCEB07C0903A
00FF803F8091263FFFFEC7FC020F13F80201138032417CBF3A>I<EC03FE91381FFFE091
B512F8903901FE03FE903A07F0007F8049486D7ED93FC06D7E49C76C7E496E7E49140348
488148481401000782491400000F8283485A1880123F49153FA2007F17C0A35BA212FF90
B8FCA30180CAFCA9127F7FA3123FA27F121FEF01C06C7E17036C6C1680A26C6C15070001
EE0F006D150E6C6C151E6D6C5C6D6C5C6D6C5CD907F0EB03E0D903FC495A902700FF803F
C7FC91383FFFFC020F13F00201138032417CBF3A>101 D<133C13FF487F487FA66C5B6C
90C7FC133C90C8FCB3A2EB03C0EA07FF127FA41201EA007FA2133FB3B3AC497E497EB612
E0A41B5F7DDE23>105 D<D903C0EB7FE0D807FF903803FFFCB5010F13FFDB3F0013C003
78EB1FE04B6D7E0001D9C1C06D7E27007FC3808002C7C71203D93FCE81170114DC14D802
F86E7E5CA35CA35CB3B3496C4A7F496C4A7FB6D8F003B612C0A4423F7DBE49>110
D<EDFF80020F13F8023F13FE9139FF007F80D903FCEB1FE0D907F0EB07F0D90FC0EB01F8
D93F80EB00FE49C8127F017E81496F7E48486F7E00038349150700078348486F7EA2001F
83491501A2003F83A348486F7EA400FF1880AC007F1800A26D5DA2003F5FA36C6C4B5AA3
6C6C4B5A00075FA26C6C4B5A6C6C4B5AA26C6C4B5A017F4BC7FC6D6C14FE6D6C495AD90F
F0EB07F8D903FCEB1FE0D900FFEB7F806EB5C8FC020F13F8020113C039417CBF42>I<90
39078003F8D807FFEB0FFFB5013F13C092387C0FE0913881F01F9238E03FF00001EB8380
39007F8700148FEB3F8E029CEB1FE0EE0FC00298EB030002B890C7FCA214B014F0A25CA5
5CB3B0497EEBFFF8B612FCA42C3F7CBE33>114 D<9139FFE00180010FEBFC03017FEBFF
073A01FF001FCFD803F8EB03EFD807E0EB01FF48487F4848147F48C8123F003E151F007E
150F127CA200FC1507A316037EA27E7F6C7E6D91C7FC13F8EA3FFE381FFFF06CEBFF806C
14F86C14FF6C15C06C6C14F0011F80010714FED9007F7F02031480DA003F13C015030300
13E0167F00E0ED1FF0160F17F86C15071603A36C1501A37EA26C16F016037E17E06D1407
6DEC0FC06D1580D8FDF0141FD8F8F8EC7F00013E14FC3AF01FC00FF80107B512E0D8E001
148027C0003FF8C7FC2D417DBF34>I<1438A71478A414F8A31301A31303A21307130F13
1FA2137F13FF1203000F90B6FCB8FCA3260007F8C8FCB3AE17E0AE6D6CEB01C0A316036D
6C148016076D6C14006E6C5A91383FC01E91381FF07C6EB45A020313E09138007F802B59
7FD733>I<D903C0150FD807FFED1FFFB50203B5FCA40001ED0007D8007F1501A2013F81
B3B25FA35FA35F011F15066E140E5F130F6E4A7F01075D6D6C494813E0D901FE4948EBFF
C0903A00FFC01F8091393FFFFE00020F13F8020001C0EC800042407DBE49>I
E
%EndDVIPSBitmapFont
end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 600dpi
TeXDict begin
%%PaperSize: A4

%%EndSetup
%%Page: 1 1
1 0 bop 1020 577 a Ft(User)44 b(con)l(tribution)h(to)e(A)-11
b(TLAS)1520 830 y Fs(R.)33 b(Clin)m(t)e(Whaley)2256 794
y Fr(\003)1619 1034 y Fs(June)j(9,)e(2000)1706 1469 y
Fq(Abstract)440 1620 y Fp(This)20 b(pap)r(er)f(describ)r(es)g(the)g
(metho)r(d)i(b)n(y)e(whic)n(h)g(users)g(can)g(sp)r(eed)h(up)f(A)-7
b(TLAS)21 b(for)e(themselv)n(es,)316 1720 y(as)29 b(w)n(ell)h(as)f(con)
n(tribute)g(an)n(y)g(suc)n(h)h(sp)r(eedup)g(to)g(the)g(A)-7
b(TLAS)31 b(pro)5 b(ject.)43 b(It's)30 b(written)g(to)g(get)g(y)n(ou)
316 1820 y(started,)43 b(in)f(a)e(highly)h(informal)f(\(read)h(slopp)n
(y\))f(fashion.)77 b(There's)40 b(a)h(lot)g(of)g(material)f(that)316
1919 y(optimally)28 b(should)h(b)r(e)h(co)n(v)n(ered)d(in)j(detail,)f
(whic)n(h)h(is)f(only)f(hin)n(ted)i(at)f(in)h(this)f(do)r(cumen)n(t.)42
b(Since)316 2019 y(no)35 b(real)f(attempt)i(has)f(b)r(een)h(made)g(to)f
(mak)n(e)g(the)g(do)r(cumen)n(t)h(sheerly)f(bac)n(kw)n(ard)e
(referencial,)316 2119 y(it)f(is)f(recommended)g(that)h(the)g(user)f
(at)h(least)f(skim)g(the)h(en)n(tire)g(section)f(b)r(efore)g
(attempting)h(to)316 2218 y(understand)27 b(and/or)f(apply)h
(information)g(from)g(a)g(giv)n(en)g(subsection.)p 88
5256 1440 4 v 191 5309 a Fo(\003)227 5341 y Fn(Dept.)33
b(of)27 b(Computer)e(Sciences,)h(Univ.)34 b(of)26 b(TN,)g(Kno)n
(xville,)g(TN)g(37996,)h Fm(rwhaley@cs.utk.edu)1866 5591
y Fl(1)p eop
%%Page: 2 2
2 1 bop 88 213 a Fk(Con)l(ten)l(ts)88 417 y Fj(1)85 b(In)m(tro)s
(duction)2835 b(3)88 620 y(2)85 b(Con)m(tributing)34
b(y)m(our)i(impro)m(v)m(emen)m(t)e(to)g(A)-9 b(TLAS)1441
b(3)225 733 y Fl(2.1)94 b(Signing)28 b(up)h(for)h(the)h(A)-8
b(TLAS)30 b(mailing)e(list)58 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)184 b(4)225
846 y(2.2)94 b(License)30 b(issues)51 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h
(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)
g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)184 b(4)225 959
y(2.3)94 b(Due)30 b(Credit)82 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g
(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)184 b(4)225 1072
y(2.4)94 b(Inclusion)28 b(in)h(the)h(A)-8 b(TLAS)30 b(tar\014le)89
b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)184 b(5)88 1276 y Fj(3)85
b(Co)s(ding)35 b(Con)m(v)m(en)m(tions)g(for)g(con)m(tributed)h(co)s(de)
1520 b(5)88 1480 y(4)85 b(A)35 b(note)f(ab)s(out)h(A)-9
b(TLAS)35 b(k)m(ernels)2069 b(5)88 1684 y(5)85 b(Sp)s(eeding)35
b(up)g(the)f(Lev)m(el)h(3)g(BLAS)1996 b(5)225 1796 y
Fl(5.1)94 b(Building)27 b(the)k(General)f(Matrix)g(Multiply)e(F)-8
b(rom)31 b(the)g(L1)f(Cac)m(he-con)m(tained)i(Multiply)113
b(6)225 1909 y(5.2)94 b(The)30 b(L1)g(matm)m(ul)42 b(.)k(.)f(.)h(.)g(.)
f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)184 b(7)434
2022 y(5.2.1)106 b(L1)30 b(matm)m(ul)g(macro)h(de\014nitions)71
b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
f(.)h(.)g(.)g(.)f(.)184 b(7)434 2135 y(5.2.2)106 b(L1)30
b(matm)m(ul)g(API)e(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
184 b(8)434 2248 y(5.2.3)106 b(L1)30 b(matm)m(ul)g(description)f
(\014le)j(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)184 b(8)225 2361
y(5.3)94 b(Putting)29 b(it)h(together)i(with)d(some)i(examples)76
b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
g(.)g(.)f(.)184 b(9)225 2474 y(5.4)94 b(More)31 b(timing)e(info)65
b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)138
b(13)225 2587 y(5.5)94 b(Complex)29 b(L1)i(matm)m(ul)59
b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)138
b(14)225 2700 y(5.6)94 b(L1)30 b(matm)m(ul)g(usage)h(notes)c(.)45
b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)138 b(16)225
2813 y(5.7)94 b(Con)m(tributing)28 b(a)j(complete)g(GEMM)g(implemen)m
(tation)57 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
(.)138 b(16)434 2926 y(5.7.1)106 b(Supplying)26 b(A)-8
b(TLAS)31 b(with)e(what)h(it)g(needs)76 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)
g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)138 b(17)434
3039 y(5.7.2)106 b(What)31 b(to)g(do)f(if)f(y)m(ou)i(don't)g(supply)c
(all)j(precisions)72 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
(.)f(.)138 b(18)434 3151 y(5.7.3)106 b(F)-8 b(orcing)30
b(A)-8 b(TLAS)30 b(to)i(use)e(y)m(our)g(GEMM)76 b(.)46
b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)138
b(19)88 3355 y Fj(6)85 b(Sp)s(eeding)35 b(up)g(the)f(Lev)m(el)h(2)g
(BLAS)1944 b(19)225 3468 y Fl(6.1)94 b(Sp)s(eeding)28
b(Up)i(GEMV,)h(HEMV,)h(SYMV,)e(TRMV)h(and)e(TRSV)83 b(.)46
b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)138 b(20)434 3581
y(6.1.1)106 b(The)30 b(Kernel)f(Description)g(File)39
b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
g(.)f(.)h(.)g(.)g(.)f(.)138 b(20)434 3694 y(6.1.2)106
b(W)-8 b(riting)29 b(a)i(GEMV)g(k)m(ernel)50 b(.)c(.)g(.)f(.)h(.)g(.)g
(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
f(.)138 b(21)434 3807 y(6.1.3)106 b(GEMV)31 b(examples)52
b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)138 b(23)434
3920 y(6.1.4)106 b(GEMV)31 b(k)m(ernel)f(notes)81 b(.)46
b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)138 b(28)225 4033
y(6.2)94 b(Sp)s(eeding)28 b(Up)i(GER,)h(GER)m(U,)g(GER)m(C,)g(HER,)f
(HER2,)h(SYR)f(and)g(SYR2)42 b(.)j(.)h(.)g(.)g(.)f(.)138
b(28)434 4146 y(6.2.1)106 b(GER)30 b(examples)67 b(.)45
b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)138 b(29)434
4259 y(6.2.2)106 b(GER)30 b(k)m(ernel)g(notes)24 b(.)46
b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h
(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)138 b(31)88
4462 y Fj(7)85 b(A)35 b(quic)m(k)g(reference)h(to)e(A)-9
b(TLAS)35 b(programming)f(resources)947 b(31)88 4666
y(8)85 b(Conclusion)2860 b(33)1866 5591 y Fl(2)p eop
%%Page: 3 3
3 2 bop 88 213 a Fk(1)135 b(In)l(tro)t(duction)88 416
y Fl(This)43 b(pap)s(er)g(describ)s(es)f(the)j(metho)s(d)e(b)m(y)h
(whic)m(h)f(users)h(can)g(sp)s(eed)f(up)g(A)-8 b(TLAS)44
b(\(Automatically)88 529 y(T)-8 b(uned)31 b(Linear)f(Algebra)h(Soft)m
(w)m(are\))i(for)e(themselv)m(es,)h(as)g(w)m(ell)e(as)i(con)m(tribute)f
(an)m(y)h(suc)m(h)f(sp)s(eedup)f(to)88 642 y(the)h(A)-8
b(TLAS)30 b(pro)5 b(ject.)229 755 y(A)-8 b(TLAS)47 b(is)e(an)h
(implemen)m(tation)f(of)i(a)g(new)f(st)m(yle)g(of)h(high)e(p)s
(erformance)h(soft)m(w)m(are)i(pro)s(duc-)88 867 y(tion/main)m(tenance)
42 b(called)f(Automated)i(Empirical)c(Optimization)h(of)i(Soft)m(w)m
(are)h(\(AEOS\).)e(In)g(an)88 980 y(AEOS-enabled)27 b(library)-8
b(,)26 b(man)m(y)i(di\013eren)m(t)f(w)m(a)m(ys)i(of)f(p)s(erforming)d
(a)k(giv)m(en)e(k)m(ernel)h(op)s(eration)f(are)h(sup-)88
1093 y(plied,)c(and)g(timers)f(are)i(used)f(to)h(empirically)c
(determine)j(whic)m(h)f(implemen)m(tation)g(is)g(b)s(est)h(for)g(a)h
(giv)m(en)88 1206 y(arc)m(hitectural)g(platform.)38 b(A)-8
b(TLAS)25 b(uses)f(t)m(w)m(o)i(tec)m(hniques)e(for)h(supplying)d
(di\013eren)m(t)i(implemen)m(tations)88 1319 y(of)31
b(k)m(ernel)f(op)s(erations:)40 b Fi(multiple)33 b(implementation)g
Fl(and)d Fi(c)-5 b(o)g(de)33 b(gener)-5 b(ation)p Fl(.)229
1432 y(In)30 b(co)s(de)h(generation,)h(a)f(highly-parameterized)e
(program)i(is)f(written)f(that)j(can)f(generate)h(man)m(y)88
1545 y(di\013eren)m(t)25 b(k)m(ernel)g(implemen)m(tations.)38
b(The)24 b(matrix)h(m)m(ultiply)e(co)s(de)i(generator)i(is)d(an)i
(example)f(of)g(this.)88 1658 y(The)36 b(second)f(metho)s(d)h(is)f(m)m
(ultiple)e(implemen)m(tation,)j(and)f(this,)i(as)f(its)f(name)h
(suggests,)i(is)d(simply)88 1771 y(supplying)27 b(v)-5
b(arious)30 b(hand-written)f(implemen)m(tations)f(of)j(the)f(same)h(k)m
(ernel.)229 1884 y(A)-8 b(TLAS)22 b(pro)m(vides)f(a)h(standard)f(w)m(a)
m(y)i(for)e(users)g(to)i(help)d(with)h(m)m(ultiple)e(implemen)m
(tation.)37 b(A)-8 b(TLAS)88 1997 y(is)28 b(designed)f(suc)m(h)i(that)g
(sev)m(eral)g(k)m(ernel)f(routines)g(supply)e(p)s(erformance)i(for)g
(the)h(en)m(tire)g(library)-8 b(.)38 b(The)88 2109 y(en)m(tire)h(Lev)m
(el)h(3)f(BLAS)g(ma)m(y)h(b)s(e)f(sp)s(eeded)f(up)g(b)m(y)h(impro)m
(ving)f(the)h(L1)g(matm)m(ul,)i(and)e(the)g(Lev)m(el)h(2)88
2222 y(routines)27 b(ma)m(y)i(b)s(e)f(sp)s(ed)f(up)g(b)m(y)h(impro)m
(ving)f(the)h(GER)g(and)g(GEMV)h(k)m(ernels.)39 b(A)-8
b(TLAS)28 b(has)g(standard)88 2335 y(timers)40 b(whic)m(h)g(can)h(call)
f(user-programmed)g(v)m(ersions)g(of)h(these)h(k)m(ernels,)h(and)d
(automatically)h(use)88 2448 y(them)31 b(throughout)f(the)g(library)e
(when)i(they)g(are)h(sup)s(erior)d(to)j(the)g(A)-8 b(TLAS-pro)s(duced)
28 b(v)m(ersions.)229 2561 y(Although)k(users)g(ma)m(y)i(con)m(tribute)
e(an)m(y)h(co)s(de)g(impro)m(v)m(emen)m(ts)g(they)g(lik)m(e,)g(the)g
(most)g(useful)e(con-)88 2674 y(tributions)26 b(will)f(probably)h(b)s
(e)i(mac)m(hine)g(sp)s(eci\014c)e(optimizations.)39 b(Most)29
b(general)f(optimizations)f(will)88 2787 y(b)s(e)33 b(handled)f(b)m(y)i
(A)-8 b(TLAS's)33 b(co)s(de)h(generators)h(\(the)f(Lev)m(el)g(2)g(k)m
(ernels)f(at)h(presen)m(t)g(do)f(not)h(ha)m(v)m(e)h(co)s(de)88
2900 y(generators,)45 b(but)39 b(they)i(ev)m(en)m(tually)f(will\),)h
(but)f(it)g(is)f(not)i(planned)d(to)j(ha)m(v)m(e)h(the)f(co)s(de)f
(generators)88 3013 y(pro)s(duce)f(mac)m(hine-sp)s(eci\014c)g(co)s(de.)
70 b(Th)m(us,)42 b(adding)d(mac)m(hine-sp)s(eci\014c)g(prefetc)m(h)h
(instructions)e(to)j(a)88 3126 y(k)m(ernel)31 b(can)g(pro)m(vide)f
(optimizations)g(that)h(A)-8 b(TLAS)31 b(will)d(get)k(in)d(no)i(other)g
(w)m(a)m(y)-8 b(.)44 b(Some)31 b(clear)g(targets)88 3239
y(for)f(suc)m(h)h(mac)m(hine-sp)s(eci\014c)e(in)m(terv)m(en)m(tion)h
(are:)225 3451 y Fh(\017)46 b Fl(In)m(tel-sp)s(eci\014c)36
b(Streaming)h(SIMD)h(Extensions)e(\(SSE\))h(optimizations)g(\(also)h
(kno)m(wn)f(as)h(KNI)316 3564 y(instructions\).)49 b(Single)32
b(precision)f(routines)i(can)h(utilize)e(factor)j(4)f(sp)s(eedup)e(of)i
(\015oating)f(p)s(oin)m(t)316 3677 y(p)s(eak,)d(and)g(ev)m(en)h(double)
e(precision)f(routines)i(should)e(b)s(ene\014t)h(from)h(prefetc)m(h)h
(instructions.)225 3865 y Fh(\017)46 b Fl(Same)30 b(thing)f(as)i(ab)s
(o)m(v)m(e)h(for)e(AMD's)h(3DNO)m(W)h(instructions)225
4052 y Fh(\017)46 b Fl(Same)30 b(for)g(Apple's)f(Altiv)m(ec)i(v)m
(ector)h(unit.)225 4240 y Fh(\017)46 b Fl(Use)30 b(of)h(v)-5
b(arious)29 b(system-sp)s(eci\014c)h(prefetc)m(h)h(\(eg.,)h(P)m(o)m(w)m
(erPC,)f(UltraSparcI)s(I,)e(etc\).)229 4452 y(One)24
b(thing)f(to)i(consider)e(when)g(getting)i(started)f(is)g(to)g(tak)m(e)
i(the)e(b)s(est)g(A)-8 b(TLAS)24 b(k)m(ernel)f(found,)i(and,)88
4565 y(for)h(instance,)h(add)e(some)i(prefetc)m(h)f(instructions,)f
(and)g(see)i(if)e(y)m(ou)h(can)g(get)h(noticable)f(impro)m(v)m(emen)m
(ts.)88 4852 y Fk(2)135 b(Con)l(tributing)46 b(y)l(our)f(impro)l(v)l
(emen)l(t)i(to)e(A)-11 b(TLAS)88 5055 y Fl(If)32 b(y)m(ou)h(pro)s(duce)
e(a)i(substan)m(tially)d(b)s(etter)i(k)m(ernel)g(than)g(A)-8
b(TLAS)32 b(presen)m(tly)g(has,)h(w)m(e)f(hop)s(e)g(that)h(y)m(ou)88
5168 y(will)k(con)m(tribute)h(it)h(to)h(the)f(A)-8 b(TLAS)38
b(pro)5 b(ject.)67 b(Co)s(de)39 b(submissions)c(and)k(discussions)d(of)
j(this)f(t)m(yp)s(e)88 5280 y(should)g(tak)m(e)k(place)e(on)f(the)i
Fg(atlas-comm@cs.utk.edu)34 b Fl(mailing)k(list.)68 b(An)m(y)m(one)40
b(can)h(sign)e(up)f(for)1866 5591 y(3)p eop
%%Page: 4 4
4 3 bop 88 213 a Fl(this)29 b(list,)g(and)g(w)m(e)i(hop)s(e)e(that)i
(in)m(terested)f(parties)f(will)e(corresp)s(ond)i(using)f(it.)41
b(In)29 b(this)g(w)m(a)m(y)h(someone)88 326 y(in)m(terested)42
b(in)f(supplying)d(a)k(particular)e(enhancemen)m(t)j(to)f(A)-8
b(TLAS)42 b(can)g(\014nd)e(if)h(someone)i(else)e(is)88
439 y(already)28 b(w)m(orking)f(on)g(it,)h(\014nd)e(in)m(terested)i
(collab)s(orators,)g(get)h(co)s(ding)e(help)f(from)h(a)h(wider)e(p)s(o)
s(ol)g(than)88 552 y(with)j(the)i(standard)e(atlas)i(mailing)d(list,)i
(etc.)88 795 y Ff(2.1)113 b(Signing)36 b(up)i(for)f(the)h(A)-9
b(TLAS)37 b(mailing)e(list)88 967 y Fl(W)-8 b(e)26 b(ha)m(v)m(e)h(set)e
(up)f(a)h(mailing)e(list)h(that)h(w)m(e)h(hop)s(e)e(con)m(tributers)g
(and)g(in)m(terested)h(parties)g(will)d(subscrib)s(e)88
1080 y(to,)44 b Fg(atlas-comm@cs.utk.edu)p Fl(.)63 b(The)39
b(regular)g(A)-8 b(TLAS)40 b(mailing)e(list,)j Fg(atlas@cs.utk.edu)p
Fl(,)d(is)h(a)88 1192 y(\014xed)23 b(mailing)e(list,)i(whose)g
(recipien)m(ts)f(are)i(limited)c(to)k(the)f(UTK)g(con)m(tingen)m(t)h
(of)f(the)h(A)-8 b(TLAS)23 b(pro)5 b(ject.)88 1305 y(On)36
b(the)g(other)g(hand,)h Fg(atlas-comm@cs.utk.edu)p Fl(,)32
b(is)j(a)i(dynamic)e(list,)h(that)h(users)e(can)i(subscrib)s(e)88
1418 y(and)30 b(unsubscrib)s(e)d(to)k(at)g(will.)229
1531 y(T)-8 b(o)31 b(subscrib)s(e)c(to)j(this)e(mailing)g(list,)h(send)
f(mail)h(to)h Fg(majordomo@cs.utk.edu)p Fl(,)25 b(and)k(include)e(the)
88 1644 y(line)39 b Fg(subscribe)45 b(atlas-comm)38 b
Fl(as)i(the)h(only)e(b)s(o)s(dy)g(to)i(the)g(message.)71
b(Unsubscribing)37 b(is)j(accom-)88 1757 y(plished)28
b(b)m(y)i(sending)f Fg(unsubscribe)45 b(atlas-comm)27
b Fl(instead.)88 2000 y Ff(2.2)113 b(License)37 b(issues)88
2172 y Fl(A)-8 b(TLAS)44 b(uses)f(a)i(BSD-st)m(yle)f(license)f(for)h
(its)f(distribution,)h(and)f(th)m(us)h(an)m(y)g(co)s(de)g(that)h(y)m
(ou)f(wish)88 2285 y(to)f(con)m(tribute)e(m)m(ust)g(ha)m(v)m(e)i(a)f
(compatible)f(license.)73 b(This)40 b(e\013ectiv)m(ely)i(rules)e(out)i
(GPL)g(and)f(ev)m(en)88 2398 y(LGPL)26 b(licenses,)g(since)f(if)g(the)h
(A)-8 b(TLAS)25 b(group)h(redistributed)c(an)m(y)27 b(routines)d(with)h
(these)h(licenses,)g(the)88 2511 y(conditions)35 b(of)i(their)e
(licenses)g(w)m(ould)g(e\013ectiv)m(ely)j(c)m(hange)f(the)g(en)m(tire)f
(A)-8 b(TLAS)36 b(library)e(to)j(GPL)f(or)88 2624 y(LGPL.)229
2737 y(Note)g(that)f(y)m(ou,)h(the)e(author,)i(retain)d(the)i(cop)m
(yrigh)m(t,)h(and)d(th)m(us)h(y)m(ou)h(can)f(relicense)g(y)m(our)g(co)s
(de)88 2850 y(in)c(an)m(y)h(w)m(a)m(y)h(y)m(ou)f(wish.)41
b(So,)31 b(an)m(ything)f(released)h(as)g(part)g(of)g(the)g(A)-8
b(TLAS)31 b(tar\014le)f(will)f(need)h(a)i(BSD-)88 2962
y(compatible)40 b(license,)j(but)d(y)m(ou)h(could)f(then)g(issue)g(the)
h(co)s(de)g(y)m(ourself)f(under)f(a)i(di\013eren)m(t)f(license.)88
3075 y(Alternativ)m(ely)-8 b(,)28 b(y)m(ou)f(can)g(pro)m(vide)f(y)m
(our)h(co)s(des)f(as)h(\\patc)m(hes")i(to)f(standard)d(A)-8
b(TLAS,)27 b(and)f(th)m(us)h(a)m(v)m(oid)88 3188 y(the)f(license)f
(issue)g(altogether,)j(at)f(the)f(cost)h(of)f(not)g(b)s(eing)f(part)h
(of)g(the)g(standard)f(tar\014le.)39 b(Ev)m(en)26 b(if)f(y)m(ou)88
3301 y(decide)35 b(not)h(to)h(license)d(y)m(our)i(con)m(tribution)e(in)
g(a)i(w)m(a)m(y)h(that)f(the)g(A)-8 b(TLAS)35 b(group)h(can)f
(redistribute,)88 3414 y(submitting)26 b(it)h(to)i(the)e(mailing)f
(list)g(is)h(still)f(recommended.)39 b(Other)28 b(p)s(eople)e(can)i
(see)h(y)m(our)e(w)m(ork,)i(and)88 3527 y(w)m(e)i(can)g(p)s(oin)m(t)e
(to)i(it)f(if)g(w)m(e)g(think)f(it)h(is)g(co)s(ol)g(enough.)88
3770 y Ff(2.3)113 b(Due)37 b(Credit)88 3942 y Fl(W)-8
b(e)30 b(ha)m(v)m(e)f(set)g(in)e(place)h(some)h(infrastructure)e(in)g
(order)g(to)i(giv)m(e)g(con)m(tributers)f(credit)f(for)i(their)e(w)m
(ork.)88 4055 y(Firstly)-8 b(,)34 b(if)f(y)m(our)h(co)s(de)g(is)e
(included)g(in)g(the)i(standard)f(tar\014le,)h(y)m(our)g(con)m
(tribution)e(will)f(b)s(e)j(noted)g(in)88 4168 y(A)-8
b(TLAS/do)s(c/A)m(tlasCredits.txt.)40 b(As)24 b(the)g(author,)i(y)m(ou)
e(retain)g(the)g(cop)m(yrigh)m(t,)j(and)c(th)m(us)h(y)m(our)g(name)88
4281 y(is)h(in)g(the)h(con)m(tributed)g(co)s(de.)39 b(W)-8
b(e)28 b(ha)m(v)m(e)f(also)f(mo)s(di\014ed)e(the)i(installation)e
(logger)j(to)f(prin)m(t)f(the)h(author)88 4394 y(name)37
b(for)g(user-pro)m(vided)e(routines.)60 b(W)-8 b(e)38
b(will)c(mak)m(e)k(a)g(go)s(o)s(d)e(faith)h(e\013ort)h(to)f(giv)m(e)h
(due)e(credit)g(for)88 4507 y(w)m(ork,)31 b(but)f(in)f(general,)h(w)m
(e)h(can't)h(guaran)m(tee)f(an)m(ything.)229 4620 y(As)e(an)g(aside,)g
(if)f(fame)i(and)e(fortune)h(are)g(y)m(our)g(ma)5 b(jor)29
b(motiv)-5 b(ations,)30 b(y)m(ou)f(ma)m(y)h(w)m(an)m(t)g(to)f(consider)
88 4732 y(con)m(tributing)23 b(to)i(something)f(else)g(an)m(yw)m(a)m(y)
-8 b(.)40 b(As)24 b(the)h(founder)e(of)h(the)h(A)-8 b(TLAS)24
b(pro)5 b(ject,)26 b(I'm)e(still)e(w)m(ait-)88 4845 y(ing)30
b(for)h(m)m(y)g(\014rst)e(in)m(terview)h(with)f(CNN,)i(NBC,)g(etc.,)i
(or)e(indeed,)e(an)m(y)m(one)j(other)f(then)f(m)m(y)h(relativ)m(es)88
4958 y(\(and)39 b(all)f(those)i(in)m(terviews)e(go)i(lik)m(e,)h("Y)-8
b(ou're)40 b(in)e(computers,)k(can't)e(y)m(ou)g(get)g(those)g(w)m(ordp)
s(erfect)88 5071 y(guys)30 b(to)i(mak)m(e)f(it)f(easier)g(to)h
(use?"\).)1866 5591 y(4)p eop
%%Page: 5 5
5 4 bop 88 213 a Ff(2.4)113 b(Inclusion)36 b(in)h(the)g(A)-9
b(TLAS)37 b(tar\014le)88 384 y Fl(If)i(y)m(ou)h(submit)e(an)h(impro)m
(v)m(emen)m(t)h(to)h Fg(atlas-comm@cs.utk.edu)p Fl(,)36
b(w)m(e)k(hop)s(e)f(that)h(other)g(A)-8 b(TLAS)88 497
y(users)34 b(will)d(try)k(it)f(out,)h(and)f(giv)m(e)h(commen)m(ts.)53
b(Ultimately)-8 b(,)36 b(someone)f(in)e(the)h(A)-8 b(TLAS)34
b(group)g(\(cur-)88 610 y(ren)m(tly)-8 b(,)36 b(that)f(w)m(ould)e(b)s
(e)h(me\))h(will)c(decide)j(whether)g(to)h(include)d(it)i(in)f(the)i
(standard)e(tar\014le)h(or)h(not.)88 723 y(Suc)m(h)22
b(a)i(decision)d(will)f(b)s(e)i(based)h(on)g(ho)m(w)f(hard)g(it)h(is)f
(to)h(get)h(to)g(w)m(ork)f(with)e(our)h(distribution)e(\(this)i(pain)88
836 y(should)31 b(b)s(e)i(minimal)d(if)i(the)i(instructions)c(in)i
(this)g(note)i(are)g(follo)m(w)m(ed\),)g(ho)m(w)f(m)m(uc)m(h)g(of)g(an)
g(impro)m(v)m(e-)88 949 y(men)m(t)g(it)f(is,)g(etc.)47
b(Ob)m(viously)-8 b(,)31 b(there)h(are)h(sp)s(eed)e(impro)m(v)m(emen)m
(ts)i(that)f(some)h(users)e(ma)m(y)i(utilize)e(that)88
1062 y(the)f(A)-8 b(TLAS)29 b(group)f(can't)j(indulge)c(in)h
(\(examples)h(include)e(sp)s(eedups)g(that)j(p)s(ossibly)c(lose)j
(accuracy)-8 b(,)88 1175 y(suc)m(h)34 b(as,)h(for)f(instance,)h(using)e
(Strassen's)g(algorithm)g(for)h(matrix)f(m)m(ultiply\).)50
b(If)33 b(there)h(app)s(ears)g(to)88 1288 y(b)s(e)c(a)g(great)h(demand)
e(for)h(suc)m(h)g(lossy)f(optimizations,)g(w)m(e)h(ma)m(y)h(consider)e
(w)m(a)m(ys)i(of)f(allo)m(wing)e(users)i(to)88 1401 y(select)h(if)f
(they)g(w)m(an)m(t)h(to)h(risk)d(them.)229 1514 y(Note)38
b(that)e(ev)m(en)g(if)f(w)m(e)h(are)g(ungrateful)f(morons)g(who)g(do)h
(not)g(release)g(y)m(our)g(submission,)e(y)m(ou,)88 1626
y(and)i(an)m(y)m(one)h(who)f(w)m(an)m(ts)h(to)g(use)e(y)m(our)h(k)m
(ernel)g(routines,)h(can)f(use)g(the)g(A)-8 b(TLAS)36
b(infrastructure)f(to)88 1739 y(get)d(a)f(complete,)g(fast)f(BLAS)h
(implemen)m(tation.)88 2026 y Fk(3)135 b(Co)t(ding)45
b(Con)l(v)l(en)l(tions)i(for)e(con)l(tributed)g(co)t(de)88
2229 y Fl(The)30 b(follo)m(wing)f(rules)g(are)i(mandatory:)225
2416 y Fh(\017)46 b Fl(All)32 b(externally)h(addressable)g(sym)m(b)s
(ols)g(used)g(in)g(the)h(co)s(de)g(\(eg,)i(routine)d(names,)i(global)f
(v)-5 b(ari-)316 2529 y(ables,)30 b(etc\))h(will)d(b)s(e)i(prefaced)g
(b)m(y)h(the)f(pre\014x)f Fg(ATLU)p 2143 2529 29 4 v
34 w Fl(.)225 2717 y Fh(\017)46 b Fl(All)29 b(user-con)m(tributed)g
(include)f(\014les)h(will)f(b)s(e)i(found)f(in)g Fg
(ATLAS/include/contrib)p Fl(.)229 2905 y(The)h(A)-8 b(TLAS)30
b(team)i(encourages:)225 3092 y Fh(\017)46 b Fl(Using)26
b(the)h(standard)g(BLAS)g(names)g(for)g(op)s(erands)f(\(i.e.,)i(for)f
(GEMM,)h(using)e(the)h(names)g Fg(A)p Fl(,)g Fg(B)p Fl(,)316
3205 y(and)i Fg(C)h Fl(for)h(the)f(input)f(matrices,)h(for)g(GEMV,)i
(using)c(the)j(names)f Fg(A)p Fl(,)h Fg(X)p Fl(,)f(and)g
Fg(Y)p Fl(,)g(etc.\).)88 3492 y Fk(4)135 b(A)44 b(note)i(ab)t(out)f(A)
-11 b(TLAS)43 b(k)l(ernels)88 3694 y Fl(All)37 b(of)h(A)-8
b(TLAS's)38 b(user-suppliable)c(k)m(ernels)j(are)i(used)e(to)i(sp)s
(eed)e(up)g(a)h(wide)f(range)h(of)g(co)s(des)h(\(i.e.,)88
3807 y(GEMM)26 b(sp)s(eeds)e(up)g(all)g(lev)m(el)h(3)h(BLAS,)f(etc\),)j
(whic)m(h)23 b(means)i(it)g(is)f(p)s(ossible)f(to)j(write)e(a)h(go)s(o)
s(d)g(GEMM,)88 3920 y(for)40 b(instance,)h(that)g(is)d(still)g(not)h(a)
h(go)s(o)s(d)g(GEMM)g Fi(kernel)p Fl(.)68 b(The)39 b(unmo)s(di\014ed)e
(testers)j(and)f(timers)88 4033 y(describ)s(ed)24 b(in)g(this)g(note)i
(time)g(these)f(k)m(ernels)g(in)g(their)f(most-used)i(states,)h(so)f
(if)f(y)m(ou)g(dev)m(elop)h(a)g(k)m(ernel)88 4146 y(using)f(these)i
(tec)m(hniques,)f(ev)m(erything)h(will)c(lik)m(ely)i(b)s(e)g(OK.)h(Ho)m
(w)m(ev)m(er,)j(if)c(y)m(ou)i(\014rst)e(write)h(a)g(full-blo)m(wn)88
4259 y(GEMV,)g(for)f(instance,)g(and)f(then)h(attempt)h(to)f(adapt)g
(it,)h(there)f(is)f(more)h(opp)s(ortunit)m(y)e(for)h(mismatc)m(h.)88
4372 y(A)m(t)i(the)e(end)g(of)h(eac)m(h)h(k)m(ernel)e(section)g(I)h
(giv)m(e)g(a)f(few)h(k)m(ernel)f(notes)h(to)g(giv)m(e)g(y)m(ou)g(an)f
(idea)g(of)h(ho)m(w)g(A)-8 b(TLAS)88 4485 y(uses)30 b(the)h(k)m(ernel.)
88 4771 y Fk(5)135 b(Sp)t(eeding)45 b(up)f(the)h(Lev)l(el)h(3)f(BLAS)88
4974 y Fl(The)29 b(p)s(erformance)f(k)m(ernel)h(for)g(the)g(en)m(tire)g
(Lev)m(el)g(3)h(BLAS)e(is)h(matrix)f(m)m(ultiply)-8 b(.)38
b(Matrix)29 b(m)m(ultiply)d(is)88 5087 y(written)f(in)f(terms)h(of)g(a)
h(lo)m(w)m(er-lev)m(el)g(building)21 b(blo)s(c)m(k)k(that)h(w)m(e)f
(call)g(the)g(L1)h(matm)m(ul.)38 b(The)25 b(L1)h(matm)m(ul)88
5200 y(is)33 b(a)i(sp)s(ecial)d(matrix)i(m)m(ultiply)d(where)j(the)g
(input)e(dimensions)f(are)j(\014xed)g(at)h Fe(M)41 b
Fl(=)31 b Fe(N)41 b Fl(=)31 b Fe(K)38 b Fl(=)31 b Fe(N)3602
5214 y Fd(B)3663 5200 y Fl(,)88 5313 y(where)f(the)h(blo)s(c)m(king)e
(factor)i Fe(N)1202 5327 y Fd(B)1293 5313 y Fl(is)f(c)m(hosen)h(in)e
(order)g(to)j(maximize)d(L1)i(cac)m(he)h(reuse.)1866
5591 y(5)p eop
%%Page: 6 6
6 5 bop 229 213 a Fl(A)-8 b(TLAS)42 b(actually)g(has)g(t)m(w)m(o)h
(di\013eren)m(t)f(L1)g(matm)m(ul)g(k)m(ernels:)64 b(one)42
b(for)g(copied)g(matrices,)j(and)88 326 y(one)37 b(that)g(op)s(erates)g
(directly)f(on)g(the)h(user's)f(matrices.)60 b(F)-8 b(or)37
b(matrices)f(of)h(su\016cien)m(t)f(size,)j(A)-8 b(TLAS)88
439 y(copies)39 b(the)g(input)e(matrix)h(in)m(to)h Fi(blo)-5
b(ck-major)40 b Fl(storage.)68 b(In)38 b(blo)s(c)m(k-ma)5
b(jor)39 b(storage,)j(the)e Fe(N)3372 453 y Fd(B)3458
439 y Fh(\002)26 b Fe(N)3628 453 y Fd(B)88 552 y Fl(blo)s(c)m(ks)31
b(op)s(erated)h(on)f(b)m(y)g(the)h(L1)g(matm)m(ul)f(are)h(actually)f
(con)m(tiguous.)44 b(This)29 b(optimization)i(prev)m(en)m(ts)88
664 y(unnecessary)42 b(cac)m(he)h(misses,)h(cac)m(he)g(con\015icts,)h
(and)c(TLB)h(problems.)74 b(Ho)m(w)m(ev)m(er,)47 b(for)42
b(su\016cien)m(tly)88 777 y(small)31 b(matrices,)i(the)g(cost)g(of)g
(this)e(data)i(cop)m(y)g(is)e(prohibitiv)m(ely)e(exp)s(ensiv)m(e,)k
(and)e(th)m(us)h(A)-8 b(TLAS)32 b(has)88 890 y(k)m(ernels)24
b(that)g(op)s(erate)h(on)f(non-copied)f(data.)39 b(Ho)m(w)m(ev)m(er,)28
b(without)23 b(the)h(cop)m(y)h(to)g(simplify)20 b(the)k(pro)s(cess,)88
1003 y(there)40 b(are)f(m)m(ultiple)e(non-cop)m(y)j(k)m(ernels)f
(\(di\013ering)e(k)m(ernels)i(for)g(di\013ering)e(transp)s(ose)i
(settings,)i(for)88 1116 y(instance\).)k(Since)31 b(the)h(non-cop)m(y)g
(k)m(ernels)f(are)h(t)m(ypically)f(only)g(used)f(for)i(v)m(ery)g(small)
e(problems,)h(and)88 1229 y(they)e(are)g(m)m(uc)m(h)g(more)g(complex,)g
(A)-8 b(TLAS)28 b(presen)m(tly)g(accepts)i(con)m(tributed)e(co)s(de)h
(only)e(for)i(the)f(cop)m(y)88 1342 y(L1)40 b(matm)m(ul.)67
b(F)-8 b(or)41 b(most)e(problems,)i(w)m(ell)d(o)m(v)m(er)j(98\045)f(of)
f(A)-8 b(TLAS)39 b(time)h(is)e(sp)s(en)m(t)h(in)f(the)i(cop)m(y)g(L1)88
1455 y(matm)m(ul,)30 b(so)h(this)e(should)g(not)h(b)s(e)g(m)m(uc)m(h)g
(of)h(a)g(problem.)88 1698 y Ff(5.1)113 b(Building)33
b(the)i(General)g(Matrix)f(Multiply)g(F)-9 b(rom)34 b(the)h(L1)h(Cac)m
(he-con)m(tained)344 1815 y(Multiply)88 1986 y Fl(This)30
b(section)i(describ)s(es)e(the)i(co)s(de)g(necessary)g(to)h(build)c
(the)j(BLAS's)f(general)h(matrix-matrix)f(m)m(ul-)88
2099 y(tiply)e(using)g(an)h(L1)h(cac)m(he-con)m(tained)h(matm)m(ul)e
(\(hereafter)h(referred)f(to)h(as)g(the)f(L1)h(matm)m(ul\).)229
2212 y(F)-8 b(or)32 b(our)e(presen)m(t)g(discussion,)e(it)i(is)g
(enough)g(to)h(kno)m(w)g(that)g(A)-8 b(TLAS)30 b(has)g(at)h(its)f(disp)
s(osal)e(highly)88 2325 y(optimized)c(routines)h(for)g(doing)f(matrix)h
(m)m(ultiplies)d(whose)j(dimensions)d(are)k(c)m(hosen)g(suc)m(h)f(that)
h(cac)m(he)88 2438 y(blo)s(c)m(king)21 b(is)f(not)i(required)e(\(i.e.,)
k(the)e(hand-written)e(co)s(de)h(discussed)f(in)g(this)h(section)g
(deals)g(with)g(cac)m(he)88 2551 y(blo)s(c)m(king;)30
b(the)g(generated/user)h(supplied)d(k)m(ernel)h(assumes)h(things)g
(\014t)g(in)m(to)g(cac)m(he\).)229 2664 y(When)g(the)g(user)g(calls)f
(GEMM,)i(A)-8 b(TLAS)30 b(m)m(ust)g(decide)f(whether)h(the)g(problem)e
(is)h(large)h(enough)88 2777 y(to)d(tolerate)g(cop)m(ying)e(the)h
(input)e(matrices)h Fe(A)h Fl(and)f Fe(B)5 b Fl(.)39
b(If)25 b(the)h(matrices)f(are)h(large)g(enough)g(to)g(supp)s(ort)88
2889 y(this)h Fe(O)s Fl(\()p Fe(N)453 2856 y Fc(2)493
2889 y Fl(\))h(o)m(v)m(erhead,)i(A)-8 b(TLAS)28 b(will)d(cop)m(y)k
Fe(A)f Fl(and)g Fe(B)k Fl(in)m(to)c(blo)s(c)m(k-ma)5
b(jor)28 b(format.)41 b(A)-8 b(TLAS's)27 b(blo)s(c)m(k-)88
3002 y(ma)5 b(jor)28 b(format)f(breaks)g(up)f(the)h(input)f(matrices)h
(in)m(to)g(con)m(tiguous)g(blo)s(c)m(ks)g(of)g(a)h(\014xed)e(size)h
Fe(N)3342 3016 y Fd(B)3403 3002 y Fl(,)h(where)88 3115
y Fe(N)161 3129 y Fd(B)251 3115 y Fl(is)g(c)m(hosen)h(in)f(order)g(to)i
(maximize)e(L1)h(cac)m(he)i(reuse.)40 b(Once)29 b(in)e(blo)s(c)m(k-ma)5
b(jor)29 b(format,)h(the)f(blo)s(c)m(ks)88 3228 y(are)h(con)m(tiguous,)
f(whic)m(h)f(eliminates)f(TLB)h(problems,)g(minimizes)e(cac)m(he)31
b(thrashing)c(and)h(maximizes)88 3341 y(cac)m(he)39 b(line)c(use.)59
b(It)37 b(also)f(allo)m(ws)g(A)-8 b(TLAS)36 b(to)i(apply)d(alpha)h
(\(if)g(alpha)g(is)f(not)i(already)f(one\))i(to)f(the)88
3454 y(smaller)29 b(of)h Fe(A)g Fl(or)g Fe(B)5 b Fl(,)30
b(th)m(us)f(minimizing)e(this)i(cost)i(as)f(w)m(ell.)39
b(Finally)-8 b(,)29 b(the)h(pac)m(k)-5 b(age)32 b(can)f(use)e(the)h
(cop)m(y)88 3567 y(to)40 b(transform)e(the)h(problem)f(to)i(a)f
(particular)e(transp)s(ose)i(setting,)i(whic)m(h)d(for)h(load)f(and)g
(indexing)88 3680 y(optimization,)28 b(is)f(set)h(so)h(A)f(is)f(copied)
g(to)i(transp)s(osed)e(form,)h(and)f(B)h(is)f(in)g(normal)g
(\(non-transp)s(osed\))88 3793 y(form.)48 b(This)31 b(means)i(our)f
(L1-cac)m(he)j(con)m(tained)e(co)s(de)g(is)f(of)h(the)g(form)f
Fe(C)k Fh( )29 b Fe(A)2872 3760 y Fd(T)2927 3793 y Fe(B)5
b Fl(,)33 b Fe(C)j Fh( )29 b Fe(A)3348 3760 y Fd(T)3404
3793 y Fe(B)d Fl(+)c Fe(C)7 b Fl(,)88 3906 y(and)28 b
Fe(C)j Fh( )26 b Fe(A)544 3873 y Fd(T)599 3906 y Fe(B)20
b Fl(+)15 b Fe(\014)5 b(C)i Fl(,)28 b Fi(wher)-5 b(e)32
b(al)5 b(l)31 b(dimensions,)h(including)e(the)h(non-c)-5
b(ontiguous)32 b(stride,)f(ar)-5 b(e)31 b(known)88 4019
y(to)h(b)-5 b(e)31 b Fe(N)379 4033 y Fd(B)440 4019 y
Fl(.)40 b(Kno)m(wing)27 b(all)h(of)h(the)f(dimensions)e(of)j(the)g(lo)s
(ops)f(allo)m(ws)g(for)g(arbitrary)f(unrollings)f(\(i.e.,)j(if)88
4131 y(the)d(instruction)e(cac)m(he)j(could)d(supp)s(ort)g(it,)i(A)-8
b(TLAS)26 b(could)e(unroll)f(all)i(lo)s(ops)f(completely)-8
b(,)27 b(so)f(that)g(the)88 4244 y(L1)k(cac)m(he-con)m(tained)j(m)m
(ultiply)27 b(had)i(no)h(lo)s(ops)f(at)h(all\).)40 b(F)-8
b(urther,)30 b(when)f(the)h(co)s(de)g(generator)h(kno)m(ws)88
4357 y(leading)g(dimension)f(of)j(the)g(matrices)f(\(i.e.,)i(the)e(ro)m
(w)h(stride\),)f(all)g(indexing)e(can)j(b)s(e)e(done)i(up)e(fron)m(t,)
88 4470 y(without)f(the)g(need)g(for)h(exp)s(ensiv)m(e)e(in)m(teger)i
(or)f(p)s(oin)m(ter)g(computations.)229 4583 y(If)43
b(the)g(matrices)g(are)g(to)s(o)g(small,)i(the)e Fe(O)s
Fl(\()p Fe(N)1852 4550 y Fc(2)1891 4583 y Fl(\))g(data)h(cop)m(y)f
(cost)h(can)f(actually)g(dominate)f(the)88 4696 y(algorithm)35
b(cost,)j(ev)m(en)e(though)f(the)h(computation)f(cost)i(is)d
Fe(O)s Fl(\()p Fe(N)2428 4663 y Fc(3)2468 4696 y Fl(\).)56
b(F)-8 b(or)37 b(these)f(matrices,)h(A)-8 b(TLAS)88 4809
y(will)32 b(call)i(an)g(L1)h(matm)m(ul)f(whic)m(h)f(op)s(erates)i(on)f
(non-copied)g(matrices)g(\(i.e.)54 b(directly)33 b(on)h(the)h(user's)88
4922 y(op)s(erands\).)i(The)20 b(non-cop)m(y)i(L1)f(matm)m(ul)f(will)e
(generally)i(not)h(b)s(e)f(as)i(e\016cien)m(t)f(as)g(the)g(cop)m(y)g
(L1)h(matm)m(ul;)88 5035 y(at)i(this)e(problem)f(size)i(the)g(main)e
(dra)m(wbac)m(k)j(is)d(the)i(additional)e(p)s(oin)m(ter)h(arithmetic)g
(required)f(in)h(order)88 5148 y(to)31 b(supp)s(ort)e(the)i
(user-supplied)26 b(leading)k(dimension.)229 5261 y(The)25
b(c)m(hoice)i(of)e(when)f(a)i(cop)m(y)g(is)f(dictated)g(and)g(when)f
(it)h(is)g(prohibitiv)m(ely)d(exp)s(ensiv)m(e)i(is)h(an)g(AEOS)1866
5591 y(6)p eop
%%Page: 7 7
7 6 bop 88 213 a Fl(parameter;)38 b(it)c(turns)g(out)h(that)g(this)f
(crosso)m(v)m(er)i(p)s(oin)m(t)e(dep)s(ends)f(strongly)h(b)s(oth)g(on)h
(the)g(particular)88 326 y(arc)m(hitecture,)g(and)e(the)g(shap)s(e)g
(of)g(the)g(op)s(erands)f(\(matrix)h(shap)s(e)g(e\013ectiv)m(ely)h
(sets)g(limits)c(on)k(whic)m(h)88 439 y(matrix)22 b(dimensions)d(can)k
(enjo)m(y)f(cac)m(he)i(reuse\).)38 b(T)-8 b(o)22 b(handle)f(this)g
(problem,)h(A)-8 b(TLAS)22 b(simply)e(compares)88 552
y(the)32 b(sp)s(eed)f(of)h(the)f(cop)m(y)i(and)e(non-cop)m(y)h(L1)g
(matm)m(ul)f(for)g(v)-5 b(ariously)30 b(shap)s(ed)g(matrices,)i(v)-5
b(arying)31 b(the)88 664 y(problem)43 b(size)g(un)m(til)g(the)h(cop)m
(ying)g(pro)m(vides)f(a)h(sp)s(eedup)e(\(on)i(some)g(platforms,)j(and)c
(with)g(some)88 777 y(shap)s(es,)30 b(this)f(p)s(oin)m(t)g(is)g(nev)m
(er)h(reac)m(hed\).)42 b(These)29 b(crosso)m(v)m(er)j(p)s(oin)m(ts)d
(are)h(determined)f(at)h(install)e(time,)88 890 y(and)e(then)g(used)f
(to)i(mak)m(e)h(this)d(decision)g(at)i(run)m(time.)38
b(Because)28 b(it)d(is)h(the)g(dominan)m(t)g(case,)i(this)d(pap)s(er)88
1003 y(describ)s(es)k(only)g(the)i(copied)f(matm)m(ul)g(algorithm)f(in)
g(detail.)229 1116 y(Figure)g(1)g(sho)m(ws)f(the)h(necessary)g(steps)g
(for)f(computing)g(a)h Fe(N)2363 1130 y Fd(B)2441 1116
y Fh(\002)17 b Fe(N)2602 1130 y Fd(B)2691 1116 y Fl(section)29
b(of)g Fe(C)35 b Fl(using)27 b(the)i(L1)88 1229 y(matm)m(ul.)p
417 1864 173 4 v 417 2031 4 167 v 424 1965 a Fe(C)489
1979 y Fc(3)p Fd(;)p Fc(2)p 586 2031 V 417 2034 173 4
v 1496 1864 V 1496 2031 4 167 v 1502 1965 a Fe(A)1570
1979 y Fc(3)p Fd(;)p Fc(1)p 1666 2031 V 1496 2034 173
4 v 1662 1864 V 1662 2031 4 167 v 1668 1965 a Fe(A)1736
1979 y Fc(3)p Fd(;)p Fc(2)p 1832 2031 V 1662 2034 173
4 v 1828 1864 90 4 v 1828 2031 4 167 v 1915 2031 V 1828
2034 90 4 v 88 1848 a Fe(M)669 1491 y(N)p 251 1532 837
4 v 251 2155 4 623 v 632 1875 a Fj(C)p 1085 2155 V 251
2158 837 4 v 1251 1848 a Fh( )k Fe(M)1691 1491 y(K)p
1496 1532 422 4 v 1496 2155 4 623 v 1668 1875 a Fj(A)p
1915 2155 V 1496 2158 422 4 v 2579 1615 a Fe(N)3119 1848
y(K)1998 1856 y Fh(\002)p 2161 1657 837 4 v 2161 2072
4 416 v 2542 1896 a Fj(B)p 2994 2072 V 2161 2075 837
4 v 2327 1657 173 4 v 2327 1823 4 167 v 2332 1758 a Fe(B)2401
1772 y Fc(1)p Fd(;)p Fc(2)p 2496 1823 V 2327 1826 173
4 v 2327 1823 V 2327 1989 4 167 v 2332 1924 a Fe(B)2401
1938 y Fc(2)p Fd(;)p Fc(2)p 2496 1989 V 2327 1992 173
4 v 2327 1989 V 2327 2072 4 84 v 2332 2048 a Fe(B)2401
2062 y Fc(3)p Fd(;)p Fc(2)p 2496 2072 V 2327 2075 173
4 v 983 2351 a Fl(Figure)d(1:)41 b(One)30 b(step)g(of)h(matrix-matrix)e
(m)m(ultiply)229 2577 y(More)35 b(formally)-8 b(,)33
b(the)h(follo)m(wing)e(actions)i(are)f(p)s(erformed)f(in)h(order)g(to)h
(calculate)g(the)g Fe(N)3379 2591 y Fd(B)3462 2577 y
Fh(\002)22 b Fe(N)3628 2591 y Fd(B)88 2690 y Fl(blo)s(c)m(k)30
b Fe(C)393 2704 y Fd(i;j)473 2690 y Fl(,)h(where)f Fe(i)g
Fl(and)g Fe(j)36 b Fl(are)31 b(in)e(the)h(range)h(0)26
b Fh(\024)f Fe(i)g(<)g Fh(d)p Fe(M)5 b(=)-5 b(N)2330
2704 y Fd(B)2392 2690 y Fh(e)p Fl(,)31 b(0)26 b Fh(\024)f
Fe(j)31 b(<)24 b Fh(d)p Fe(N)r(=)-5 b(N)3046 2704 y Fd(B)3108
2690 y Fh(e)p Fl(:)199 2891 y(1.)47 b(Call)40 b(L1)h(matm)m(ul)g(of)h
(the)f(correct)i(form)e(based)g(on)g(user-de\014ned)f
Fe(\014)46 b Fl(\(eg.)75 b(if)41 b Fe(\014)49 b Fl(==)43
b(0,)i(use)316 3004 y Fe(C)f Fh( )37 b Fe(AB)5 b Fl(\))38
b(to)g(m)m(ultiply)e(blo)s(c)m(k)h(0)h(of)g(the)g(ro)m(w)g(panel)f
Fe(i)h Fl(of)g Fe(A)g Fl(with)e(blo)s(c)m(k)h(0)i(of)e(the)h(column)316
3117 y(panel)29 b Fe(j)36 b Fl(of)30 b Fe(B)5 b Fl(.)199
3301 y(2.)47 b(Call)34 b(L1)j(matm)m(ul)f(of)g(form)g
Fe(C)41 b Fh( )35 b Fe(AB)29 b Fl(+)24 b Fe(C)42 b Fl(to)37
b(m)m(ultiply)d(blo)s(c)m(k)h Fe(k)40 b Fl(of)c(the)h(ro)m(w)f(panel)f
Fe(i)i Fl(of)f Fe(A)316 3414 y Fl(with)29 b(blo)s(c)m(k)h
Fe(k)j Fl(of)e(the)f(column)f(panel)h Fe(j)36 b Fl(of)30
b Fe(B)5 b Fl(,)30 b Fh(8)p Fe(k)s(;)15 b Fl(1)26 b Fh(\024)f
Fe(k)k(<)24 b Fh(d)p Fe(K)q(=)-5 b(N)2679 3428 y Fd(B)2742
3414 y Fh(e)p Fl(.)229 3615 y(As)29 b(this)f(example)g(demonstrates,)i
(if)d(a)i(giv)m(en)g(dimension)d(is)i(not)h(a)g(m)m(ultiple)d(of)j(the)
g(L1)g(blo)s(c)m(king)88 3728 y(factor)j Fe(N)422 3742
y Fd(B)482 3728 y Fl(,)f(partial)e(blo)s(c)m(ks)h(results.)39
b(A)-8 b(TLAS)31 b(has)f(sp)s(ecial)f(routines)g(that)i(handle)e(cases)
i(where)f(one)88 3841 y(or)h(more)f(dimension)e(is)h(less)h(than)g
Fe(N)1401 3855 y Fd(B)1462 3841 y Fl(;)g(these)h(routines)f(are)g
(referred)g(to)h(as)g Fi(cle)-5 b(anup)31 b Fl(co)s(des.)88
4082 y Ff(5.2)113 b(The)37 b(L1)h(matm)m(ul)88 4254 y
Fl(So,)e(there)f(are)g(actually)g(three)g(L1)g(matm)m(ul)f(k)m(ernels)g
(\(corresp)s(onding)f(to)j(di\013eren)m(t)e Fe(\014)40
b Fl(v)-5 b(alues\),)36 b(and)88 4367 y(they)j(are:)57
b Fe(C)45 b Fh( )38 b Fe(A)811 4334 y Fd(T)866 4367 y
Fe(B)5 b Fl(,)40 b Fe(C)45 b Fh( )39 b Fe(A)1313 4334
y Fd(T)1368 4367 y Fe(B)30 b Fl(+)25 b Fe(C)7 b Fl(,)40
b Fe(C)45 b Fh( )38 b Fe(A)2007 4334 y Fd(T)2063 4367
y Fe(B)30 b Fl(+)25 b Fe(\014)5 b(C)i Fl(.)64 b(All)37
b(input)f(arra)m(ys)j(\()p Fe(A;)15 b(B)5 b(;)15 b(C)7
b Fl(\))39 b(are)88 4480 y(column-ma)5 b(jor)34 b(\(they)h(are)f(still)
f(used)g(as)i(p)s(erformance)e(k)m(ernels)h(for)g(ro)m(w-ma)5
b(jor)35 b(BLAS)f(as)g(w)m(ell,)h(so)88 4593 y(don't)i(w)m(orry\).)58
b(Additionally)-8 b(,)35 b Fe(A)1296 4560 y Fd(T)1387
4593 y Fl(and)h Fe(B)41 b Fl(are)36 b(in)f(blo)s(c)m(k-ma)5
b(jor)36 b(format,)j(suc)m(h)d(that)g Fe(l)r(da)g Fl(=)e
Fe(l)r(db)i Fl(=)88 4706 y Fe(M)g Fl(=)25 b Fe(N)35 b
Fl(=)25 b Fe(K)32 b Fl(=)25 b Fe(N)790 4720 y Fd(B)850
4706 y Fl(.)88 4944 y Fj(5.2.1)106 b(L1)35 b(matm)m(ul)e(macro)h
(de\014nitions)88 5116 y Fl(In)44 b(order)f(to)i(mak)m(e)g(writing)d
(an)i(L1)g(matm)m(ul)g(easier,)j(A)-8 b(TLAS)44 b(de\014nes)f(sev)m
(eral)i(cpp)e(macros)h(for)88 5229 y(programmer)25 b(use.)39
b(Examples)24 b(in)g(subsequen)m(t)g(sections)h(should)e(illustrate)h
(the)h(use)g(of)g(these)h(macros,)88 5342 y(so)31 b(w)m(e)g(merely)e
(de\014ne)h(them)g(here.)1866 5591 y(7)p eop
%%Page: 8 8
8 7 bop 229 213 a Fl(First,)30 b(A)-8 b(TLAS)29 b(de\014nes)g(the)h
(macro)h Fg(ATL)p 1684 213 29 4 v 33 w(USERMM)d Fl(to)j(the)f
(appropriate)f(A)-8 b(TLAS)29 b(in)m(ternal)g(k)m(ernel)88
326 y(name.)58 b(Second,)38 b(it)e(de\014nes)f(one)i(of)f
Fg(SREAL)p Fl(,)f Fg(DREAL)p Fl(,)g Fg(SCPLX)p Fl(,)g
Fg(DCPLX)p Fl(,)g(according)h(to)h(the)f(data)h(t)m(yp)s(e)88
439 y(b)s(eing)24 b(compiled)g(\(single)h(precision)f(real,)i(double)e
(precision)g(real,)i(single)f(precision)e(complex,)k(double)88
552 y(precision)i(complex,)h(resp)s(ectiv)m(ely\).)229
664 y(Similarly)-8 b(,)22 b(A)-8 b(TLAS)23 b(de\014nes)g(a)h(macro)g
(indicating)d(the)j Fe(\014)k Fl(case)d(b)s(eing)d(compiled,)h
Fg(BETA1)f Fl(\()p Fe(\014)29 b Fl(should)88 777 y(b)s(e)i(assumed)g
(to)i(b)s(e)e(1.0\),)i Fg(BETA0)e Fl(\()p Fe(\014)37
b Fl(should)29 b(b)s(e)i(assumed)g(to)i(b)s(e)e(0.0\),)i(and)e
Fg(BETAX)g Fl(\()p Fe(\014)37 b Fl(neither)30 b(zero)88
890 y(or)h(one,)g(and)e(should)g(b)s(e)g(handled)g(as)i(an)f(input)e
(parameter\).)229 1003 y(Finally)-8 b(,)31 b(the)h(\014xed)f(blo)s(c)m
(king)g(factors)i(for)e(eac)m(h)i(dimension)c(are)k(de\014ned)d
Fg(MB)p Fl(,)i Fg(NB)p Fl(,)f Fg(KB)p Fl(.)h(Note)h(that)88
1116 y(for)c(our)f(L1)h(matm)m(ul,)g Fg(MB)f Fl(=)h Fg(NB)f
Fl(=)h Fg(KB)f Fl(=)g Fe(N)1621 1130 y Fd(B)1682 1116
y Fl(;)h(they)g(are)h(separated)f(out)g(for)g(supp)s(ort)e(of)i(the)g
(clean)m(up)88 1229 y(co)s(des,)36 b(where)f(they)f(can)h(b)s(e)f
(di\013eren)m(t.)53 b(A)-8 b(TLAS)35 b(also)f(de\014nes)g(the)h(macros)
g Fg(MB2)p Fl(,)g Fg(NB2)p Fl(,)g Fg(KB2)p Fl(,)h(whic)m(h)88
1342 y(are)31 b(simply)d(t)m(w)m(o)k(times)e(the)g(appropriate)g(blo)s
(c)m(king)f(factor.)88 1582 y Fj(5.2.2)106 b(L1)35 b(matm)m(ul)e(API)88
1754 y Fl(The)d(L1)h(matm)m(ul)f(API)g(ma)m(y)h(b)s(e)f(summarized)e
(as:)88 1927 y Fg(#if)47 b(defined\(SREAL\))d(||)j(defined\(SCPLX\))179
2100 y Fl(v)m(oid)30 b(A)-8 b(TL)p 564 2100 28 4 v 33
w(USERMM)97 b(\()30 b(const)37 b(in)m(t)f(M,)h(const)h(in)m(t)e(N,)g
(const)i(in)m(t)e(K,)g(const)h(\015oat)g(alpha,)h(const)1168
2212 y(\015oat)32 b(*A,)g(const)f(in)m(t)f(lda,)h(const)g(\015oat)h
(*B,)g(const)f(in)m(t)g(ldb,)e(const)j(\015oat)1168 2325
y(b)s(eta,)f(\015oat)g(*C,)g(const)g(in)m(t)f(ldc)f(\))88
2498 y Fg(#elif)47 b(defined\(DREAL\))d(||)j(defined\(DCPLX\))179
2671 y Fl(v)m(oid)30 b(A)-8 b(TL)p 564 2671 V 33 w(USERMM)97
b(\()30 b(const)g(in)m(t)f(M,)h(const)g(in)m(t)f(N,)h(const)g(in)m(t)f
(K,)h(const)g(double)e(alpha,)h(const)1168 2784 y(double)k(*A,)i(const)
f(in)m(t)g(lda,)g(const)h(double)d(*B,)j(const)g(in)m(t)e(ldb,)h(const)
1168 2897 y(double)29 b(b)s(eta,)i(double)e(*C,)i(const)g(in)m(t)e(ldc)
h(\))88 3070 y Fg(#endif)88 3310 y Fj(5.2.3)106 b(L1)35
b(matm)m(ul)e(description)i(\014le)88 3482 y Fl(In)d(the)h(install)d
(pro)s(cess,)j(A)-8 b(TLAS)33 b(\014rst)e(searc)m(hes)j(through)e(the)h
(L1)f(matm)m(ul)g(implemen)m(tations)f(pro-)88 3595 y(vided)44
b(b)m(y)h(the)h(A)-8 b(TLAS)44 b(matm)m(ul)h(generator.)86
b(When)45 b(the)h(b)s(est)e(generated)j(co)s(de)e(is)f(found,)k(the)88
3707 y(user)39 b(con)m(tributed)g(co)s(des)h(are)g(timed)f(to)h(see)h
(if)d(they)i(can)g(b)s(eat)g(the)g(generated)g(co)s(de.)69
b(The)39 b(mat-)88 3820 y(m)m(ul)k(searc)m(h)i(script)e(op)s(ens)g(a)i
(description)d(\014le)h(for)h(eac)m(h)h(precision)d(\()p
Fg(scases.dsc)p Fl(,)k Fg(dcases.dsc)p Fl(,)88 3933 y
Fg(ccases.dsc)p Fl(,)31 b Fg(zcases.dsc)p Fl(\))f(in)i(the)h(A)-8
b(TLAS/tune/blas/gemm/CASES)32 b(directory)-8 b(,)34
b(to)f(see)g(what)88 4046 y(user-con)m(tributed)43 b(co)s(des)i(are)f
(a)m(v)-5 b(ailable.)82 b(The)44 b(format)g(for)g(all)f(precisions)g
(is)g(the)h(same,)49 b(and)43 b(is)88 4159 y(describ)s(ed)29
b(in)g(the)h(follo)m(wing)f(paragraphs.)229 4272 y(The)i(\014rst)f
(line)f(of)i(eac)m(h)h(\014le)d(is)h(a)h(commen)m(t)h(line,)d(and)i(is)
e(ignored.)41 b(The)30 b(next)h(line)e(indicates)h(the)88
4385 y(n)m(um)m(b)s(er)g(of)g(user-con)m(tributed)g(co)s(des)g(to)i
(searc)m(h,)f(and)f(eac)m(h)i(subsequen)m(t)d(line)g(supplies)f
(information)88 4498 y(ab)s(out)i(a)h(giv)m(en)g(user-supplied)26
b(L1)31 b(matm)m(ul.)40 b(The)30 b(form)g(of)g(these)h(lines)e(is:)88
4611 y Fg(<flag>)46 b(<mb>)h(<nb>)g(<kb>)f(<muladd>)g(<lat>)g(<mu>)h
(<nu>)f(<ku>)h(<rout>)f("<author>")229 4724 y(<rout>)29
b Fl(and)h Fg(<author>")e Fl(are)i(strings,)g(and)g(the)g(rest)h(of)f
(the)h(parameters)g(are)f(signed)g(in)m(tegers.)229 4837
y(The)g(meaning)g(of)g(these)h(parameters)g(are:)225
5024 y Fh(\017)46 b Fg(<flag>)p Fl(:)36 b(\015ag)27 b(indicating)c(sp)s
(ecial)i(conditions.)38 b(Un)m(used)25 b(at)i(momen)m(t,)g(should)d
(alw)m(a)m(ys)j(b)s(e)e(zero.)225 5212 y Fh(\017)46 b
Fg(<mb>)p Fl(,)22 b Fg(<nb>)p Fl(,)g Fg(<kb>)p Fl(:)35
b(Used)21 b(to)h(indicate)f(restriction)f(on)h(the)h(input)d(parameter)
j Fe(M)31 b Fl(\()p Fe(N)10 b Fl(,)24 b Fe(K)k Fl(resp.\),)316
5325 y(and)e(its)h(asso)s(ciated)h(blo)s(c)m(king)e Fg(MB)g
Fl(\()p Fg(NB)p Fl(,)i Fg(KB)p Fl(,)f(resp.\).)39 b(If)27
b(the)h(v)-5 b(alue)26 b(is)h(zero,)i(the)e(in)m(ternal)f(routine)1866
5591 y(8)p eop
%%Page: 9 9
9 8 bop 316 213 a Fl(handles)26 b(an)m(y)i Fe(M)10 b
Fl(;)30 b(i.e.)39 b(the)29 b(lo)s(op-limit)c(is)i(a)i(run)m(time)d(v)-5
b(ariable.)39 b(If)28 b(the)g(v)-5 b(alue)27 b(is)h(negativ)m(e,)i
(then)316 326 y Fe(M)46 b Fl(=)36 b Fg(MB)g Fl(=)h(-)p
Fg(<mb>)e Fl(\(i.e.,)k(the)e(blo)s(c)m(king)e(factor)j(cannot)f(b)s(e)f
(v)-5 b(aried)36 b(using)f(a)i(macro\).)60 b(If)36 b(the)316
439 y(v)-5 b(alue)32 b(is)g(p)s(ositiv)m(e,)g(the)h(blo)s(c)m(king)f
(factor)h(can)g(b)s(e)g(v)-5 b(aried)31 b(b)m(y)i(setting)g(the)g
(appropriate)f(macro)316 552 y(\()p Fg(MB)27 b(NB)p Fl(,)h
Fg(KB)p Fl(,)g(resp.\),)h(but)e(the)h(blo)s(c)m(king)f(factor)i(m)m
(ust)f(b)s(e)g(a)g(m)m(ultiple)e(of)i(the)h(v)-5 b(alue.)39
b(Therefore,)316 664 y(setting)h Fg(<mb>)g Fl(=)g(4,)k(indicates)c
(that)h Fg(MB)f Fl(m)m(ust)h(b)s(e)f(a)h(m)m(ultiple)d(of)j(4,)j(while)
38 b(setting)j(it)f(to)i(1)316 777 y(indicates)29 b(that)i
Fg(MB)f Fl(is)f(an)h(arbitrary)f(compile-time)h(constan)m(t.)225
965 y Fh(\017)46 b Fg(<muladd>)p Fl(:)63 b(Set)43 b(to)g(zero)h(if)e(y)
m(ou)h(are)g(using)f(separate)h(m)m(ultiply)d(and)j(add)f
(instructions,)i(1)316 1078 y(otherwise.)c(If)30 b(y)m(ou)g(don't)h
(kno)m(w)f(the)h(answ)m(er,)f(put)g(1.)225 1266 y Fh(\017)46
b Fg(<lat>)p Fl(:)j(Set)36 b(to)g(the)g(latency)f(y)m(ou)h(use)f(b)s
(et)m(w)m(een)i(\015oating)e(p)s(oin)m(t)f(instructions.)54
b(If)35 b(y)m(ou)h(don't)316 1378 y(kno)m(w)30 b(the)h(answ)m(er,)f
(put)g(1.)225 1566 y Fh(\017)46 b Fg(<mu>)p Fl(:)39 b(Unrolling)28
b(y)m(ou)j(are)f(using)f(for)h(the)h Fe(M)40 b Fl(lo)s(op.)225
1754 y Fh(\017)46 b Fg(<nu>)p Fl(:)39 b(Unrolling)28
b(y)m(ou)j(are)f(using)f(for)h(the)h Fe(N)40 b Fl(lo)s(op.)225
1941 y Fh(\017)46 b Fg(<ku>)p Fl(:)39 b(Unrolling)28
b(y)m(ou)j(are)f(using)f(for)h(the)h Fe(K)37 b Fl(lo)s(op.)225
2129 y Fh(\017)46 b Fg(<rout>)p Fl(:)34 b(The)19 b(\014lename)h(of)g
(the)h(user-con)m(tributed)e(routine,)i(relativ)m(e)g(to)g(the)f(path)g
Fg(ATLAS/tune/blas/gemm/CASES)o Fl(.)316 2242 y(Maxim)m(um)29
b(length)h(64)h(c)m(hars.)225 2430 y Fh(\017)46 b Fg(<author>)p
Fl(:)40 b(The)30 b(name)h(of)h(the)f(author)g(or)g(authors,)g(enclosed)
g(in)f(quotes.)43 b(Maxim)m(um)31 b(length)316 2542 y(64)g(c)m(hars.)
229 2730 y(Here's)g(an)g(example:)88 2918 y Fg(<flag>)46
b(<mb>)h(<nb>)g(<kb>)f(<muladd>)g(<lat>)g(<mu>)h(<nu>)f(<ku>)h(<rout>)f
("<Contributer>")88 3031 y(3)88 3144 y(0)i(0)f(0)h(0)f(1)h(1)f(1)g(1)h
(1)f(ATL_mm1x1x1.c)e("R.)h(Clint)h(Whaley")88 3256 y(0)h(1)f(1)h(1)f(1)
h(1)f(1)g(1)h(1)f(ATL_mm1x1x1b.c)d("R.)j(Clint)g(Whaley")88
3369 y(0)h(1)f(1)h(8)f(1)h(1)f(1)g(1)h(4)f(ATL_mm2.c)f("R.)h(Clint)f
(Whaley")229 3557 y Fl(So,)29 b(w)m(e)g(ha)m(v)m(e)g(3)f(user-supplied)
d(routines,)i(all)g(written)g(b)m(y)h(me.)40 b(The)28
b(\014rst)f(lo)s(ops)g(o)m(v)m(er)i Fe(M)10 b Fl(,)29
b Fe(N)10 b Fl(,)29 b(and)88 3670 y Fe(K)7 b Fl(,)34
b(but)f(the)h(follo)m(wing)e(t)m(w)m(o)j(routines)d(lo)s(op)h(o)m(v)m
(er)i(the)e(cpp)g(macros)h Fg(MB)p Fl(,)f Fg(NB)p Fl(,)g
Fg(KB)p Fl(.)h(The)f(third)e(routine)88 3783 y(insists)38
b(that)i Fg(KB)f Fl(b)s(e)g(a)h(m)m(ultiple)d(of)j(8.)69
b(The)39 b(\014rst)g(t)m(w)m(o)h(routines)f(don't)g(unroll)f(an)m(y)h
(of)h(the)g(lo)s(ops,)88 3896 y(while)31 b(the)j(third)d(unrolls)g(the)
i(K)g(lo)s(op)f(to)i(a)f(depth)g(of)g(4.)49 b(They)33
b(all)f(use)h(a)g(com)m(bined)f(m)m(uladd)g(st)m(yle)88
4009 y(of)f(programming,)e(and)h(don't)g(w)m(orry)g(ab)s(out)h(latency)
-8 b(.)88 4252 y Ff(5.3)113 b(Putting)35 b(it)h(together)h(with)g(some)
g(examples)88 4424 y Fl(Let's)e(sa)m(y)f(w)m(e)g(decide)f(to)h(co)m(v)m
(er)i(the)e(basics,)g(the)g(classical)e(3)i(do)g(lo)s(op)f(implemen)m
(tation)f(of)i(matm)m(ul)88 4537 y(w)m(ould)29 b(b)s(e:)88
4724 y Fg(void)47 b(ATL_USERMM)231 4837 y(\(const)g(int)f(M,)i(const)e
(int)h(N,)g(const)f(int)h(K,)h(const)e(double)g(alpha,)279
4950 y(const)h(double)f(*A,)h(const)f(int)h(lda,)f(const)h(double)f
(*B,)h(const)f(int)h(ldb,)279 5063 y(const)g(double)f(beta,)g(double)g
(*C,)h(const)f(int)h(ldc\))88 5176 y({)231 5289 y(int)g(i,)h(j,)f(k;)
1866 5591 y Fl(9)p eop
%%Page: 10 10
10 9 bop 231 213 a Fg(register)46 b(double)g(c00;)231
439 y(for)h(\(j=0;)g(j)g(<)h(N;)f(j++\))231 552 y({)375
664 y(for)g(\(i=0;)f(i)h(<)h(M;)f(i++\))375 777 y({)518
890 y(#ifdef)f(BETA0)661 1003 y(c00)h(=)g(0.0;)518 1116
y(#elif)f(defined\(BETA1\))661 1229 y(c00)h(=)g(C[i+j*ldc];)518
1342 y(#else)661 1455 y(c00)g(=)g(C[i+j*ldc])e(*)j(beta;)518
1568 y(#endif)518 1681 y(for)f(\(k=0;)f(k)i(<)f(K;)g(k++\))g(c00)g(+=)g
(A[k+i*lda])e(*)i(B[k+j*ldb];)518 1794 y(C[i+j*ldc])e(=)i(c00;)375
1906 y(})231 2019 y(})88 2132 y(})229 2310 y Fl(W)-8
b(e)22 b(then)e(sa)m(v)m(e)i(this)d(paragon)i(of)f(p)s(erformance)g(to)
h Fg(ATLAS/tune/blas/gemm/CA)o(SES)o(/ATL)p 3412 2310
29 4 v 28 w(mm1x1x1.c)p Fl(.)88 2423 y(F)-8 b(rom)31
b Fg(ATLAS/tune/blas/gemm/<arc)o(h>)p Fl(,)24 b(w)m(e)31
b(can)g(test)g(that)g(it)f(gets)h(the)g(righ)m(t)f(answ)m(er)g(b)m(y:)
231 2600 y Fg(make)47 b(mmutstcase)e(pre=d)h(nb=40)h
(mmrout=../CASES/ATL_mm1x)o(1x1)o(.c)42 b(beta=0)231
2713 y(make)47 b(mmutstcase)e(pre=d)h(nb=40)h(mmrout=../CASES/ATL_mm1x)
o(1x1)o(.c)42 b(beta=1)231 2826 y(make)47 b(mmutstcase)e(pre=d)h(nb=40)
h(mmrout=../CASES/ATL_mm1x)o(1x1)o(.c)42 b(beta=7)229
3003 y Fl(W)-8 b(e)32 b(pass)f(four)f(argumen)m(ts)h(to)h(mm)m
(utstcase,)g(a)f(precision)e(sp)s(eci\014er)h(\()p Fg(d)g
Fl(:)42 b(double)29 b(precision)g(real;)88 3116 y Fg(s)36
b Fl(:)51 b(single)35 b(precision)f(real;)k Fg(z)e Fl(:)51
b(double)35 b(precision)f(complex;)k Fg(c)e Fl(:)51 b(single)35
b(precision)f(complex\),)j(the)88 3229 y(size)30 b(of)g(the)g(blo)s(c)m
(king)e(parameter)i Fe(N)1386 3243 y Fd(B)1447 3229 y
Fl(,)g(the)g(b)s(eta)g(v)-5 b(alue)29 b(to)i(test)f(\(0,)h(1,)g(and)e
(other\),)i(and)e(\014nally)-8 b(,)28 b(the)88 3342 y(\014lename)i(to)h
(test.)229 3455 y(If)37 b(these)g(messages)g(pass)f(the)h(test,)i(w)m
(e)e(can)g(then)g(see)g(what)f(kind)f(of)i(p)s(erformance)f(w)m(e)h
(get)g(b)m(y)88 3568 y(\(this)30 b(is)f(the)i(actual)g(output)f(on)g(m)
m(y)g(266Mhz)i(PI)s(I\):)88 3745 y Fg(make)47 b(ummcase)f(pre=d)g
(nb=40)g(mmrout=../CASES/ATL_mm1x1x)o(1.c)41 b(beta=1)88
3858 y(dNB=40,)46 b(ldc=40,)g(mu=4,)g(nu=4,)h(ku=1,)f(lat=4:)g
(time=1.820000,)e(mflop=53.731868)88 3971 y(dNB=40,)i(ldc=40,)g(mu=4,)g
(nu=4,)h(ku=1,)f(lat=4:)g(time=1.810000,)e(mflop=54.028729)88
4084 y(dNB=40,)i(ldc=40,)g(mu=4,)g(nu=4,)h(ku=1,)f(lat=4:)g
(time=1.830000,)e(mflop=53.438251)229 4261 y Fl(This)g(is)g(the)h(same)
h(timing)d(rep)s(eated)i(three)g(times)g(\(this)f(just)h(tries)f(to)i
(ensure)e(timings)g(are)88 4374 y(rep)s(eatable\),)29
b(and)e(the)h(only)f(output)g(of)h(real)f(in)m(terest)h(is)f(the)h
(MFLOP)g(rate)g(at)h(the)f(end.)39 b(The)27 b(v)-5 b(alues)88
4487 y(the)26 b(timer)g(prin)m(ts)e(\(m)m(u,)j(n)m(u,)g(ku,)f(lat\))g
(are)h(all)e(defaults)g(b)s(ecause)h(w)m(e)g(didn't)e(sp)s(ecify)h
(them;)i(sp)s(ecifying)88 4600 y(them)k(has)f(no)g(e\013ect)i(when)d
(the)i(timer)f(is)f(used)h(in)f(this)g(w)m(a)m(y)-8 b(,)32
b(so)e(don't)h(w)m(orry)f(ab)s(out)g(them.)229 4713 y(No)m(w)d(w)m(e)g
(can)g(trivially)c(impro)m(v)m(e)j(the)h(implemen)m(tation)d(b)m(y)j
(using)d(the)j(macro)f(constan)m(ts)i(in)d(order)88 4825
y(to)31 b(let)g(the)f(compiler)f(unroll)f(the)j(lo)s(ops:)88
5003 y Fg(void)47 b(ATL_USERMM)231 5116 y(\(const)g(int)f(M,)i(const)e
(int)h(N,)g(const)f(int)h(K,)h(const)e(double)g(alpha,)279
5229 y(const)h(double)f(*A,)h(const)f(int)h(lda,)f(const)h(double)f
(*B,)h(const)f(int)h(ldb,)279 5342 y(const)g(double)f(beta,)g(double)g
(*C,)h(const)f(int)h(ldc\))1843 5591 y Fl(10)p eop
%%Page: 11 11
11 10 bop 88 213 a Fg({)231 326 y(int)47 b(i,)h(j,)f(k;)231
439 y(register)f(double)g(c00;)231 664 y(for)h(\(j=0;)g(j)g(<)h(NB;)f
(j++\))231 777 y({)375 890 y(for)g(\(i=0;)f(i)h(<)h(MB;)f(i++\))375
1003 y({)518 1116 y(#ifdef)f(BETA0)661 1229 y(c00)h(=)g(0.0;)518
1342 y(#elif)f(defined\(BETA1\))661 1455 y(c00)h(=)g(C[i+j*ldc];)518
1568 y(#else)661 1681 y(c00)g(=)g(C[i+j*ldc])e(*)j(beta;)518
1794 y(#endif)518 1906 y(for)f(\(k=0;)f(k)i(<)f(KB;)g(k++\))g(c00)f(+=)
i(A[k+i*KB])d(*)i(B[k+j*KB];)518 2019 y(C[i+j*ldc])e(=)i(c00;)375
2132 y(})231 2245 y(})88 2358 y(})229 2539 y Fl(W)-8
b(e)32 b(sa)m(v)m(e)g(this)d(to)i Fg(ATL)p 1019 2539
29 4 v 34 w(mm1x1x1b.c)p Fl(,)d(and)h(then)i(time:)88
2721 y Fg(make)47 b(ummcase)f(pre=d)g(nb=40)g
(mmrout=../CASES/ATL_mm1x1x)o(1b.c)41 b(beta=1)88 2834
y(dNB=40,)46 b(ldc=40,)g(mu=4,)g(nu=4,)h(ku=1,)f(lat=4:)g
(time=1.670000,)e(mflop=58.558084)88 2947 y(dNB=40,)i(ldc=40,)g(mu=4,)g
(nu=4,)h(ku=1,)f(lat=4:)g(time=1.660000,)e(mflop=58.910843)88
3059 y(dNB=40,)i(ldc=40,)g(mu=4,)g(nu=4,)h(ku=1,)f(lat=4:)g
(time=1.670000,)e(mflop=58.558084)229 3241 y Fl(OK,)30
b(ma)m(yb)s(e)h(a)g(little)e(explicit)f(lo)s(op)i(unrolling)d(will)h
(mak)m(e)j(things)e(w)m(ork)i(b)s(etter:)88 3422 y Fg(void)47
b(ATL_USERMM)231 3535 y(\(const)g(int)f(M,)i(const)e(int)h(N,)g(const)f
(int)h(K,)h(const)e(double)g(alpha,)g(const)g(double)h(*A,)f(const)h
(int)g(lda,)f(const)h(double)f(*B,)h(const)f(int)h(ldb,)g(const)f
(double)g(beta,)g(double)h(*C,)f(const)h(int)g(ldc\))88
3648 y({)231 3761 y(int)g(i,)h(j,)f(k;)231 3874 y(register)f(double)g
(c00,)h(c10,)f(b0;)231 3987 y(const)h(double)f(*pA0,)g(*pB=B;)88
4212 y(#if)h(\()h(\(KB)f(/)g(8\)*8)g(!=)g(KB)g(\))g(||)h(\(MB)f(/)g
(2\)*2)g(!=)g(MB)231 4325 y(create)g(syntax)f(error!$@@&)88
4438 y(#endif)231 4551 y(for)h(\(j=0;)g(j)g(<)h(NB;)f(j++,)f(pB)h(+=)h
(KB\))231 4664 y({)375 4777 y(pA0)f(=)g(A;)375 4890 y(for)g(\(i=0;)f(i)
h(<)h(MB;)f(i)g(+=)g(2,)h(pA0)e(+=)i(KB2\))375 5003 y({)518
5116 y(#ifdef)e(BETA0)661 5229 y(c00)h(=)g(c10)g(=)h(0.0;)518
5342 y(#elif)e(defined\(BETA1\))1843 5591 y Fl(11)p eop
%%Page: 12 12
12 11 bop 661 213 a Fg(c00)47 b(=)g(C[i+j*ldc];)661 326
y(c10)g(=)g(C[i+1+j*ldc];)518 439 y(#else)661 552 y(c00)g(=)g
(beta*C[i+j*ldc];)661 664 y(c10)g(=)g(beta*C[i+1+j*ldc];)518
777 y(#endif)518 890 y(for)g(\(k=0;)f(k)i(<)f(KB;)g(k)g(+=)h(8\))518
1003 y({)661 1116 y(b0)f(=)h(pB[k];)661 1229 y(c00)f(+=)g(pA0[k])f(*)i
(b0;)661 1342 y(c10)f(+=)g(pA0[KB+k])e(*)j(b0;)661 1455
y(b0)f(=)h(pB[k+1];)661 1568 y(c00)f(+=)g(pA0[k+1])f(*)h(b0;)661
1681 y(c10)g(+=)g(pA0[KB+k+1])e(*)i(b0;)661 1794 y(b0)g(=)h(pB[k+2];)
661 1906 y(c00)f(+=)g(pA0[k+2])f(*)h(b0;)661 2019 y(c10)g(+=)g
(pA0[KB+k+2])e(*)i(b0;)661 2132 y(b0)143 b(=)95 b(pB[k+3];)661
2245 y(c00)47 b(+=)g(pA0[k+3])f(*)h(b0;)661 2358 y(c10)g(+=)g
(pA0[KB+k+3])e(*)i(b0;)661 2471 y(b0)143 b(=)95 b(pB[k+4];)661
2584 y(c00)47 b(+=)g(pA0[k+4])f(*)h(b0;)661 2697 y(c10)g(+=)g
(pA0[KB+k+4])e(*)i(b0;)661 2810 y(b0)143 b(=)95 b(pB[k+5];)661
2923 y(c00)47 b(+=)g(pA0[k+5])f(*)h(b0;)661 3036 y(c10)g(+=)g
(pA0[KB+k+5])e(*)i(b0;)661 3149 y(b0)143 b(=)95 b(pB[k+6];)661
3261 y(c00)47 b(+=)g(pA0[k+6])f(*)h(b0;)661 3374 y(c10)g(+=)g
(pA0[KB+k+6])e(*)i(b0;)661 3487 y(b0)143 b(=)95 b(pB[k+7];)661
3600 y(c00)47 b(+=)g(pA0[k+7])f(*)h(b0;)661 3713 y(c10)g(+=)g
(pA0[KB+k+7])e(*)i(b0;)518 3826 y(})518 3939 y(C[i+j*ldc])e(=)i(c00;)
518 4052 y(C[i+1+j*ldc])d(=)k(c10;)375 4165 y(})231 4278
y(})88 4391 y(})229 4557 y Fl(And)35 b(with)f(this)g(o)s(de)h(to)h(b)s
(eaut)m(y)f(and)g(elegance)i(w)m(e)e(get)i(\(after)f(c)m(hec)m(king)g
(that)g(it)f(still)e(gets)j(the)88 4670 y(righ)m(t)30
b(answ)m(er,)h(of)f(course\):)88 4836 y Fg(make)47 b(ummcase)f(pre=d)g
(nb=40)g(mmrout=../CASES/ATL_mm2x1x)o(8.c)41 b(beta=1)88
4949 y(dNB=40,)46 b(ldc=40,)g(mu=4,)g(nu=4,)h(ku=1,)f(lat=4:)g
(time=0.720000,)e(mflop=135.822222)88 5062 y(dNB=40,)i(ldc=40,)g(mu=4,)
g(nu=4,)h(ku=1,)f(lat=4:)g(time=0.710000,)e(mflop=137.735211)88
5175 y(dNB=40,)i(ldc=40,)g(mu=4,)g(nu=4,)h(ku=1,)f(lat=4:)g
(time=0.710000,)e(mflop=137.735211)229 5342 y Fl(Its)31
b(in)m(teresting)f(to)h(see)g(the)f(e\013ects)i(of)e(di\013ering)f
Fe(\014)35 b Fl(on)c(the)f(co)s(de:)1843 5591 y(12)p
eop
%%Page: 13 13
13 12 bop 88 213 a Fg(make)47 b(ummcase)f(pre=d)g(nb=40)g
(mmrout=../CASES/ATL_mm2x1x)o(8a.c)41 b(beta=0)88 326
y(dNB=40,)46 b(ldc=40,)g(mu=4,)g(nu=4,)h(ku=1,)f(lat=4:)g
(time=0.700000,)e(mflop=139.702857)88 439 y(dNB=40,)i(ldc=40,)g(mu=4,)g
(nu=4,)h(ku=1,)f(lat=4:)g(time=0.700000,)e(mflop=139.702857)88
552 y(dNB=40,)i(ldc=40,)g(mu=4,)g(nu=4,)h(ku=1,)f(lat=4:)g
(time=0.700000,)e(mflop=139.702857)88 777 y(make)j(ummcase)f(pre=d)g
(nb=40)g(mmrout=../CASES/ATL_mm2x1x)o(8a.c)41 b(beta=7)88
890 y(dNB=40,)46 b(ldc=40,)g(mu=4,)g(nu=4,)h(ku=1,)f(lat=4:)g
(time=0.720000,)e(mflop=135.822222)88 1003 y(dNB=40,)i(ldc=40,)g(mu=4,)
g(nu=4,)h(ku=1,)f(lat=4:)g(time=0.730000,)e(mflop=133.961644)88
1116 y(dNB=40,)i(ldc=40,)g(mu=4,)g(nu=4,)h(ku=1,)f(lat=4:)g
(time=0.720000,)e(mflop=135.822222)229 1304 y Fl(As)31
b(w)m(ell)e(as)i(di\013ering)d(blo)s(c)m(king)h(factors:)88
1491 y Fg(make)47 b(ummcase)f(pre=d)g(mmrout=../CASES/ATL_mm2x1)o(x8a)o
(.c)c(beta=1)k(nb=16)88 1604 y(dNB=16,)g(ldc=16,)g(mu=4,)g(nu=4,)h
(ku=1,)f(lat=4:)g(time=0.850000,)e(mflop=115.112056)88
1717 y(dNB=16,)i(ldc=16,)g(mu=4,)g(nu=4,)h(ku=1,)f(lat=4:)g
(time=0.860000,)e(mflop=113.773544)88 1830 y(dNB=16,)i(ldc=16,)g(mu=4,)
g(nu=4,)h(ku=1,)f(lat=4:)g(time=0.850000,)e(mflop=115.112056)88
2056 y(make)j(ummcase)f(pre=d)g(mmrout=../CASES/ATL_mm2x1)o(x8a)o(.c)c
(beta=1)k(nb=32)88 2169 y(dNB=32,)g(ldc=32,)g(mu=4,)g(nu=4,)h(ku=1,)f
(lat=4:)g(time=0.730000,)e(mflop=134.034586)88 2282 y(dNB=32,)i
(ldc=32,)g(mu=4,)g(nu=4,)h(ku=1,)f(lat=4:)g(time=0.740000,)e
(mflop=132.223308)88 2395 y(dNB=32,)i(ldc=32,)g(mu=4,)g(nu=4,)h(ku=1,)f
(lat=4:)g(time=0.730000,)e(mflop=134.034586)88 2620 y(make)j(ummcase)f
(pre=d)g(mmrout=../CASES/ATL_mm2x1)o(x8a)o(.c)c(beta=1)k(nb=48)88
2733 y(dNB=48,)g(ldc=48,)g(mu=4,)g(nu=4,)h(ku=1,)f(lat=4:)g
(time=0.820000,)e(mflop=119.223571)88 2846 y(dNB=48,)i(ldc=48,)g(mu=4,)
g(nu=4,)h(ku=1,)f(lat=4:)g(time=0.820000,)e(mflop=119.223571)88
2959 y(dNB=48,)i(ldc=48,)g(mu=4,)g(nu=4,)h(ku=1,)f(lat=4:)g
(time=0.820000,)e(mflop=119.223571)229 3147 y Fl(If)f(w)m(e)h(w)m(an)m
(ted)g(to)h(ha)m(v)m(e)f(A)-8 b(TLAS)43 b(try)h(these)g(crapp)m(y)f
(implemen)m(tations)f(during)f(the)j(A)-8 b(TLAS)88 3260
y(searc)m(h,)32 b(w)m(e)e(w)m(ould)g(ha)m(v)m(e)h(the)g(follo)m(wing)e
Fg(ATLAS/tune/blas/gemm/CA)o(SES)o(/dca)o(ses.)o(dsc)o
Fl(:)88 3447 y Fg(<flag>)46 b(<mb>)h(<nb>)g(<kb>)f(<muladd>)g(<lat>)g
(<mu>)h(<nu>)f(<ku>)h(<rout>)f("<Contributer>")88 3560
y(3)88 3673 y(0)i(0)f(0)h(0)f(1)h(1)f(1)g(1)h(1)f(ATL_mm1x1x1.c)188
b("R.)47 b(Clint)f(Whaley")88 3786 y(0)i(1)f(1)h(1)f(1)h(1)f(1)g(1)h(1)
f(ATL_mm1x1x1b.c)140 b("R.)47 b(Clint)f(Whaley")88 3899
y(0)i(2)f(1)h(8)f(1)h(1)f(2)g(1)h(8)f(ATL_mm2x1x8a.c)140
b("R.)47 b(Clint)f(Whaley")88 4142 y Ff(5.4)113 b(More)37
b(timing)e(info)88 4314 y Fl(So)41 b(ma)m(yb)s(e)h(y)m(ou)f(w)m(onder)g
(ho)m(w)g(our)g(big)g(hand-tuned)e(guy)i(stac)m(ks)i(up)d(against)i
(the)f(A)-8 b(TLAS)41 b(co)s(de)88 4427 y(generator?)96
b(When)49 b(A)-8 b(TLAS)48 b(completed)g(its)g(searc)m(h)h(on)g(m)m(y)g
(PI)s(I,)e(it)h(stored)h(its)f(b)s(est)g(case)i(in)88
4540 y Fg(ATLAS/tune/blas/gemm/LINU)o(X)p 1341 4540 29
4 v 29 w(PII/res/dMMRES)p Fl(:)88 4728 y Fg(speedy.)c(cat)h(res/dMMRES)
88 4840 y(MULADD)94 b(LAT)h(NB)g(MU)g(NU)f(KU)h(FFTCH)f(IFTCH)h(NFTCH)
189 b(MFLOP)327 4953 y(0)i(5)95 b(40)142 b(2)h(1)95 b(40)286
b(0)g(2)g(1)143 b(197.94)88 5066 y(16)229 5254 y Fl(W)-8
b(e)32 b(generate)g(and)e(time)g(this)f(case)i(b)m(y:)1843
5591 y(13)p eop
%%Page: 14 14
14 13 bop 88 213 a Fg(make)47 b(mmcase)f(muladd=0)g(lat=5)g(nb=40)g
(mu=2)h(nu=1)g(ku=40)f(beta=1)88 326 y(dNB=40,)g(ldc=40,)g(mu=2,)g
(nu=1,)h(ku=40,)f(lat=5:)g(time=0.490000,)e(mflop=199.575510)88
439 y(dNB=40,)i(ldc=40,)g(mu=2,)g(nu=1,)h(ku=40,)f(lat=5:)g
(time=0.500000,)e(mflop=195.584000)88 552 y(dNB=40,)i(ldc=40,)g(mu=2,)g
(nu=1,)h(ku=40,)f(lat=5:)g(time=0.490000,)e(mflop=199.575510)229
736 y Fl(W)-8 b(e)32 b(test)f(that)g(the)g(generator)g(isn't)f(out)h
(of)f(its)g(mind)e(b)m(y:)88 920 y Fg(make)47 b(mmtstcase)e(muladd=0)h
(lat=5)g(nb=40)g(mu=2)h(nu=1)g(ku=40)f(beta=1)229 1105
y Fl(Note)36 b(that)f(when)e(timing/testing)g(the)h(generator,)j(v)-5
b(arying)33 b(the)h(parameters)h(suc)m(h)e(as)i(m)m(u,)g(n)m(u,)88
1218 y(ku,)30 b(b)s(eta,)h(etc.,)h(generates)g(di\013eren)m(t)e(co)s
(des,)g(and)g(th)m(us)g(di\013eren)m(t)g(p)s(erformance)g(n)m(um)m(b)s
(ers:)88 1402 y Fg(make)47 b(mmcase)f(muladd=0)g(lat=4)g(nb=40)g(mu=2)h
(nu=1)g(ku=4)f(beta=1)88 1515 y(dNB=40,)g(ldc=40,)g(mu=2,)g(nu=1,)h
(ku=4,)f(lat=4:)g(time=0.760000,)e(mflop=128.673684)88
1628 y(dNB=40,)i(ldc=40,)g(mu=2,)g(nu=1,)h(ku=4,)f(lat=4:)g
(time=0.770000,)e(mflop=127.002597)88 1741 y(dNB=40,)i(ldc=40,)g(mu=2,)
g(nu=1,)h(ku=4,)f(lat=4:)g(time=0.770000,)e(mflop=127.002597)88
1967 y(make)j(mmcase)f(muladd=0)g(lat=4)g(nb=40)g(mu=2)h(nu=1)g(ku=8)f
(beta=1)88 2080 y(dNB=40,)g(ldc=40,)g(mu=2,)g(nu=1,)h(ku=8,)f(lat=4:)g
(time=0.640000,)e(mflop=152.800000)88 2193 y(dNB=40,)i(ldc=40,)g(mu=2,)
g(nu=1,)h(ku=8,)f(lat=4:)g(time=0.630000,)e(mflop=155.225397)88
2305 y(dNB=40,)i(ldc=40,)g(mu=2,)g(nu=1,)h(ku=8,)f(lat=4:)g
(time=0.630000,)e(mflop=155.225397)88 2531 y(make)j(mmcase)f(muladd=0)g
(lat=4)g(nb=40)g(mu=2)h(nu=2)g(ku=40)f(beta=1)88 2644
y(dNB=40,)g(ldc=40,)g(mu=2,)g(nu=2,)h(ku=40,)f(lat=4:)g(time=2.550000,)
e(mflop=38.349804)88 2757 y(dNB=40,)i(ldc=40,)g(mu=2,)g(nu=2,)h(ku=40,)
f(lat=4:)g(time=2.560000,)e(mflop=38.200000)88 2870 y(dNB=40,)i
(ldc=40,)g(mu=2,)g(nu=2,)h(ku=40,)f(lat=4:)g(time=2.550000,)e
(mflop=38.349804)88 3113 y Ff(5.5)113 b(Complex)36 b(L1)i(matm)m(ul)88
3285 y Fl(V)-8 b(ainly)34 b(hoping)e(w)m(e)j(w)m(ere)g(done,)g(eh?)52
b(Nop)s(e,)36 b(complex)e(co)s(des)g(are)h(sp)s(ecial.)51
b(A)-8 b(TLAS)34 b(actually)g(uses)88 3397 y(the)k(real)f(matrix)f(m)m
(ultiply)f(generator)j(in)e(order)h(to)h(do)f(complex)g(m)m
(ultiplication.)58 b(It)37 b(needs)g(some)88 3510 y(tric)m(ks)c(to)g
(do)f(this,)g(ob)m(viously)-8 b(.)46 b(The)31 b(\014rst)h(thing)f(to)i
(note)g(is)f(that)h(if)e Fe(X)2608 3524 y Fd(r)2679 3510
y Fl(denotes)h(the)h(real)f(elemen)m(ts)88 3623 y(of)c
Fe(X)7 b Fl(,)29 b(and)e Fe(X)574 3637 y Fd(i)630 3623
y Fl(indicates)f(the)i(imaginary)e(comp)s(onen)m(ts,)j(then)e(complex)h
(matrix-matrix)e(m)m(ultiply)f(of)88 3736 y(the)30 b(form)f
Fe(C)j Fh( )25 b Fe(AB)e Fl(+)c Fe(\014)5 b(C)36 b Fl(ma)m(y)30
b(b)s(e)f(accomplished)f(b)m(y)i(the)f(follo)m(wing)f(four)h(real)g
(matrix)g(m)m(ultiplies:)199 3921 y(1.)47 b Fe(C)381
3935 y Fd(r)444 3921 y Fh( )25 b Fe(A)628 3935 y Fd(i)656
3921 y Fe(B)725 3935 y Fd(i)774 3921 y Fh(\000)20 b Fe(\014)5
b(C)986 3935 y Fd(r)199 4107 y Fl(2.)47 b Fe(C)381 4121
y Fd(i)434 4107 y Fh( )25 b Fe(A)618 4121 y Fd(i)647
4107 y Fe(B)716 4121 y Fd(r)774 4107 y Fl(+)20 b Fe(\014)5
b(C)986 4121 y Fd(i)199 4293 y Fl(3.)47 b Fe(C)381 4307
y Fd(r)444 4293 y Fh( )25 b Fe(A)628 4307 y Fd(r)666
4293 y Fe(B)735 4307 y Fd(r)793 4293 y Fh(\000)20 b Fe(C)949
4307 y Fd(r)199 4480 y Fl(4.)47 b Fe(C)381 4494 y Fd(i)434
4480 y Fh( )25 b Fe(A)618 4494 y Fd(r)656 4480 y Fe(B)725
4494 y Fd(i)774 4480 y Fl(+)20 b Fe(C)930 4494 y Fd(i)229
4664 y Fl(This)28 b(w)m(orks)h(\014ne)f(assuming)g Fe(\014)34
b Fl(is)28 b(real,)h(otherwise)g Fe(\014)34 b Fl(m)m(ust)29
b(b)s(e)f(applied)f(explicitly)g(as)i(a)h(complex)88
4777 y(scalar,)h(and)f(then)g(set)h Fe(\014)f Fl(=)25
b(1)31 b(in)e(the)h(ab)s(o)m(v)m(e)i(outline.)229 4890
y(Therefore,)42 b(in)c(order)g(to)i(use)f(this)f(tric)m(k,)k(up)s(on)37
b(cop)m(ying)i Fe(A)g Fl(and)g Fe(B)44 b Fl(to)39 b(blo)s(c)m(k-ma)5
b(jor)39 b(storage,)88 5003 y(A)-8 b(TLAS)37 b(also)g(splits)f(the)h
(arra)m(ys)h(in)m(to)f(real)g(and)f(imaginary)g(comp)s(onen)m(ts.)61
b(The)37 b(only)f(matrix)h(not)88 5116 y(expressed)f(as)g(t)m(w)m(o)i
(real)e(matrices)g(is)f(then)h Fe(C)7 b Fl(,)38 b(and)d(to)i(\014x)f
(this)f(problem,)i(A)-8 b(TLAS)35 b(demands)h(that)88
5229 y(the)31 b(complex)f(L1)h(matm)m(ul)e(stride)h Fe(C)36
b Fl(b)m(y)31 b(2.)41 b(An)30 b(example)g(will)e(solidify)f(the)k
(confusion.)229 5342 y(A)g(simple)d(3-lo)s(op)j(implemen)m(tation)e(of)
h(an)g(A)-8 b(TLAS)30 b(complex)g(L1)h(matm)m(ul)f(is:)1843
5591 y(14)p eop
%%Page: 15 15
15 14 bop 88 213 a Fg(void)47 b(ATL_USERMM)231 326 y(\(const)g(int)f
(M,)i(const)e(int)h(N,)g(const)f(int)h(K,)h(const)e(double)g(alpha,)279
439 y(const)h(double)f(*A,)h(const)f(int)h(lda,)f(const)h(double)f(*B,)
h(const)f(int)h(ldb,)279 552 y(const)g(double)f(beta,)g(double)g(*C,)h
(const)f(int)h(ldc\))88 664 y({)231 777 y(int)g(i,)h(j,)f(k;)231
890 y(register)f(double)g(c00;)231 1116 y(for)h(\(j=0;)g(j)g(<)h(N;)f
(j++\))231 1229 y({)375 1342 y(for)g(\(i=0;)f(i)h(<)h(M;)f(i++\))375
1455 y({)518 1568 y(#ifdef)f(BETA0)661 1681 y(c00)h(=)g(0.0;)518
1794 y(#else)661 1906 y(c00)g(=)g(C[2*\(i+j*ldc\)];)661
2019 y(#ifdef)f(BETAX)804 2132 y(c00)h(*=)g(beta;)661
2245 y(#endif)518 2358 y(#endif)518 2471 y(for)g(\(k=0;)f(k)i(<)f(K;)g
(k++\))g(c00)g(+=)g(A[k+i*lda])e(*)i(B[k+j*ldb];)518
2584 y(C[2*\(i+j*ldc\)])d(=)j(c00;)375 2697 y(})231 2810
y(})88 2923 y(})229 3100 y Fl(First)30 b(w)m(e)h(test)g(that)g(it)f
(pro)s(duces)f(the)i(righ)m(t)f(answ)m(er:)88 3277 y
Fg(make)47 b(cmmutstcase)e(pre=z)h(nb=40)g(mmrout=../CASES/ATL_cmm1x1)o
(x1.)o(c)c(beta=0)88 3390 y(make)47 b(cmmutstcase)e(pre=z)h(nb=40)g
(mmrout=../CASES/ATL_cmm1x1)o(x1.)o(c)c(beta=1)88 3503
y(make)47 b(cmmutstcase)e(pre=z)h(nb=40)g(mmrout=../CASES/ATL_cmm1x1)o
(x1.)o(c)c(beta=8)229 3680 y Fl(Then)30 b(w)m(e)h(scop)s(e)f(the)h(a)m
(w)m(esome)h(p)s(erformance:)88 3858 y Fg(make)47 b(cmmucase)e(pre=z)i
(nb=40)f(mmrout=../CASES/ATL_cmm1x)o(1x1.)o(c)c(beta=1)88
3971 y(zNB=40,)k(ldc=40,)g(mu=4,)g(nu=4,)h(ku=1,)f(lat=4:)g
(time=1.830000,)e(mflop=53.438251)88 4084 y(zNB=40,)i(ldc=40,)g(mu=4,)g
(nu=4,)h(ku=1,)f(lat=4:)g(time=1.830000,)e(mflop=53.438251)88
4197 y(zNB=40,)i(ldc=40,)g(mu=4,)g(nu=4,)h(ku=1,)f(lat=4:)g
(time=1.830000,)e(mflop=53.438251)229 4374 y Fl(No)m(w,)50
b(since)45 b(w)m(e)g(are)h(clearly)e(gluttons)h(for)g(punishmen)m(t,)i
(w)m(e)e(compare)h(our)f(masterw)m(ork)h(to)88 4487 y(A)-8
b(TLAS's)30 b(generated)i(k)m(ernel:)88 4664 y Fg(speedy.)46
b(cat)h(res/zMMRES)88 4777 y(MULADD)94 b(LAT)h(NB)g(MU)g(NU)f(KU)h
(FFTCH)f(IFTCH)h(NFTCH)189 b(MFLOP)327 4890 y(0)i(5)95
b(36)142 b(2)h(1)95 b(36)286 b(0)g(2)g(1)143 b(186.42)327
5003 y(10)88 5229 y(speedy.)46 b(make)h(mmcase)f(muladd=0)f(lat=5)i
(nb=36)f(mu=2)h(nu=1)f(ku=36)h(beta=1)88 5342 y(dNB=36,)f(ldc=36,)g
(mu=2,)g(nu=1,)h(ku=36,)f(lat=5:)g(time=0.500000,)e(mflop=195.581952)
1843 5591 y Fl(15)p eop
%%Page: 16 16
16 15 bop 88 213 a Fg(dNB=36,)46 b(ldc=36,)g(mu=2,)g(nu=1,)h(ku=36,)f
(lat=5:)g(time=0.490000,)e(mflop=199.573420)88 326 y(dNB=36,)i(ldc=36,)
g(mu=2,)g(nu=1,)h(ku=36,)f(lat=5:)g(time=0.490000,)e(mflop=199.573420)
88 569 y Ff(5.6)113 b(L1)37 b(matm)m(ul)f(usage)i(notes)88
741 y Fl(The)30 b(assumptions)e(b)s(ehind)g(this)h(k)m(ernel)g(are)i
(that)g(the)f(input)e(op)s(erands)h(are)i(loaded)e(to)i(L1)g(only)e
(one)88 854 y(time)38 b(\(i.e.,)j(the)e(blo)s(c)m(king)e(guaran)m(tees)
i(that)g(all)e(of)i(the)f(matrix)g(accessed)h(in)e(the)h(inner)f(lo)s
(op)g(plus)88 967 y(the)31 b(activ)m(e)h(panel)d(of)i(the)f(matrix)g
(in)f(the)i(outer)g(lo)s(op)e(\014ts)h(in)f(L1\).)42
b(F)-8 b(or)31 b(v)m(ery)g(large)g(cac)m(hes,)h(all)d(three)88
1080 y(op)s(erands)j(ma)m(y)h(\014t)f(in)m(to)g(cac)m(he,)j(but)d(this)
f(is)h(t)m(ypically)f(not)i(the)f(case.)48 b(Because)34
b(this)e(L1)g(matm)m(ul)g(is)88 1192 y(called)d(b)m(y)g(routines)f
(that)i(place)g Fe(K)36 b Fl(as)29 b(the)h(innermost)e(lo)s(op,)h(the)h
(output)f(op)s(erand)f Fe(C)36 b Fl(will)26 b(t)m(ypically)88
1305 y(come)31 b(from)e(the)h(L2)g(cac)m(he)h(\(except,)h(ob)m(viously)
-8 b(,)29 b(on)h(the)g(\014rst)f(of)h(the)2591 1270 y
Fd(K)p 2568 1285 109 4 v 2568 1337 a(N)2624 1348 y Fb(B)2717
1305 y Fl(suc)m(h)f(calls\).)40 b(A)-8 b(TLAS)30 b(uses)88
1418 y(the)k(JIK)f(lo)s(op)g(v)-5 b(arian)m(t)33 b(of)h(on-c)m(hip)f(m)
m(ultiply)-8 b(,)32 b(and)h(th)m(us)g(all)g(of)h Fe(A)f
Fl(\014ts)h(in)e(cac)m(he,)k(with)d(n)m(u)g(columns)88
1531 y(of)d Fe(B)5 b Fl(.)40 b(T)-8 b(o)31 b(tak)m(e)g(an)f(example,)g
(sa)m(y)g(y)m(ou)g(are)g(using)f(m)m(u)g(=)h(n)m(u)f(=)g(4,)i(with)d
Fe(N)2745 1545 y Fd(B)2831 1531 y Fl(=)d(40,)31 b(then)f(the)g(idea)f
(is)88 1644 y(that)k(the)g(40)22 b Fh(\002)f Fl(40)33
b(piece)f(of)h Fe(A)p Fl(,)g(along)f(with)f(the)h(40)22
b Fh(\002)g Fl(4)32 b(piece)g(of)h Fe(B)j Fl(\(the)d(activ)m(e)h(panel)
d(of)h Fe(B)5 b Fl(\),)33 b(and)88 1757 y(the)e(4)21
b Fh(\002)f Fl(4)31 b(section)g(of)g Fe(C)37 b Fl(all)29
b(\014t)h(in)m(to)h(cac)m(he)h(at)g(once,)f(with)e(enough)i(ro)s(om)f
(for)h(the)f(load)h(of)f(the)h(next)88 1870 y(step,)g(and)e(an)m(y)h
(junk)f(the)h(algorithm)f(migh)m(t)g(ha)m(v)m(e)i(in)e(L1.)41
b(That)30 b(panel)e(of)i Fe(B)35 b Fl(is)29 b(applied)e(to)k(all)e(of)h
Fe(A)p Fl(,)88 1983 y(and)g(then)h(a)g(new)f(panel)f(is)h(loaded.)41
b(Since)30 b(the)h(panel)e(has)i(b)s(een)e(applied)g(to)i(all)f
Fe(A)p Fl(,)h(it)f(will)e(nev)m(er)j(b)s(e)88 2096 y(reloaded,)j(and)f
(th)m(us)g(w)m(e)h(see)g(that)h Fe(B)j Fl(is)32 b(loaded)h(to)h(L1)g
(only)f(one)g(time.)50 b(Since)33 b(all)f(of)i Fe(A)f
Fl(\014ts)h(in)e(L1,)88 2209 y(and)e(w)m(e)h(k)m(eep)g(it)f(there)g
(across)h(all)f(panels)f(of)h Fe(B)5 b Fl(,)31 b(it)e(is)h(also)g
(loaded)g(to)h(L1)g(only)e(one)i(time.)229 2322 y(If)j(written)f
(appropriately)-8 b(,)33 b(loading)g(all)g(of)h Fe(B)k
Fl(with)32 b(a)i(few)g(ro)m(ws)g(of)g Fe(A)g Fl(should)d(theoretically)
j(b)s(e)88 2434 y(just)j(as)g(e\016cien)m(t)h(\(i.e.,)h(the)f(IJK)e(v)
-5 b(arian)m(t)37 b(of)g(matm)m(ul\).)61 b(Ho)m(w)m(ev)m(er,)41
b(the)d(v)-5 b(arian)m(ts)36 b(where)h Fe(K)44 b Fl(is)36
b(not)88 2547 y(the)j(innermost)f(lo)s(op)g(are)h(unlik)m(ely)e(to)i(w)
m(ork)g(w)m(ell)f(in)g(A)-8 b(TLAS,)39 b(if)f(for)g(no)h(other)g
(reason)g(than)g(the)88 2660 y(transp)s(ose)30 b(settings)g(w)m(e)h(ha)
m(v)m(e)h(c)m(hosen)f(militate)e(against)i(it.)229 2773
y(Note)e(that)e(the)g Fe(\014)k Fl(=)25 b(0)i(case)h(m)m(ust)e(not)h
(read)g Fe(C)7 b Fl(,)27 b(since)g(the)g(memory)f(ma)m(y)i(legally)e(b)
s(e)g(unitialized.)88 3017 y Ff(5.7)113 b(Con)m(tributing)35
b(a)j(complete)e(GEMM)i(implemen)m(tation)88 3188 y Fl(Con)m(tributing)
d(an)i(L1)g(k)m(ernel)g(is)f(the)h(prefered)f(metho)s(d)g(of)h(user)g
(con)m(tribution)e(for)i(Lev)m(el)g(3)g(BLAS)88 3301
y(sp)s(eedup,)j(but)f(it)g(is)f(not)h(the)h(only)e(one)i(supp)s(orted)d
(b)m(y)i(A)-8 b(TLAS.)40 b(A)-8 b(TLAS)38 b(also)i(allo)m(ws)e(a)i
(user)f(to)88 3414 y(con)m(tribute)23 b(a)h(complete)g(system-sp)s
(eci\014c)f(GEMM)h(implemen)m(tation.)37 b(This)21 b(metho)s(d)i(of)h
(con)m(tribution)88 3527 y(is)42 b(far)h(less)f(desirable)f(than)i(k)m
(ernel)f(con)m(tribution,)j(and)d(th)m(us)h(the)g(standards)f(of)h
(acceptance)i(are)88 3640 y(corresp)s(ondingly)28 b(higher.)229
3753 y(When)34 b(only)e(a)i(k)m(ernel)f(is)g(con)m(tributed,)h(it)f(is)
g(only)f(used)h(when)f(timings)g(indicate)h(it)g(is)g(sup)s(erior)88
3866 y(to)i(the)g(b)s(est)f(A)-8 b(TLAS-supplied)31 b(routine)i(for)i
(a)f(giv)m(en)h(arc)m(hitecture.)53 b(Because)36 b(k)m(ernel)e
(routines)f(are)88 3979 y(called)h(in)g(kno)m(wn)g(w)m(a)m(ys)i(b)m(y)f
(the)g(A)-8 b(TLAS)34 b(infrastructure,)h(the)g(timer)f(can)h(b)s(e)f
(made)h(to)g(accurately)88 4092 y(re\015ect)e(t)m(ypical)e(usage.)45
b(A)32 b(full)d(GEMM,)k(whic)m(h)e(is)f(to)j(all)d(in)m(ten)m(ts)i
(called)f(directly)f(b)m(y)i(the)g(user,)f(has)88 4204
y(no)i(\\t)m(ypical")g(usage,)h(and)e(the)h(timer)f(is)f(th)m(us)h(not)
h(able)f(to)i(ensure)e(that)h(the)f(user's)h(full)d(GEMM)j(is)88
4317 y(sup)s(erior)h(to)j(that)g(supplied)32 b(b)m(y)k(A)-8
b(TLAS)36 b(in)f(a)i(system-indep)s(enden)m(t)d(w)m(a)m(y)-8
b(,)39 b(ev)m(en)e(if)e(the)h(additional)88 4430 y(installation)k(time)
i(required)e(to)j(c)m(ho)s(ose)g(amoung)f(full)d(GEMM)k(implemen)m
(tations)e(w)m(ere)h(allo)m(w)m(ed.)88 4543 y(Th)m(us,)25
b(full)e(GEMM)i(implemen)m(tations)e(will)f(b)s(e)i(used)g(only)g(when)
g(A)-8 b(TLAS's)24 b(con\014guration)g(detects)i(a)88
4656 y(kno)m(wn)h(arc)m(hitecture)i(where)e(the)g(A)-8
b(TLAS)28 b(team)g(has)f(certi\014ed)g(the)h(full)d(GEMM)k(to)f(b)s(e)f
(signi\014can)m(tly)88 4769 y(b)s(etter)41 b(than)f(A)-8
b(TLAS's)41 b(nativ)m(e)g(GEMM,)g(across)h(the)e(en)m(tire)h(sp)s
(ectrum)e(of)i(problem)e(shap)s(es)h(and)88 4882 y(sizes)30
b(\(with)g(the)h(exception)f(of)h(those)g(shap)s(es)e(and)h(sizes)g
(handled)f(b)m(y)h(A)-8 b(TLAS's)30 b(non-cop)m(y)h(co)s(de,)g(as)88
4995 y(explained)e(b)s(elo)m(w\).)229 5108 y(As)d(explained)e(in)h
(Section)g(5.1,)j(A)-8 b(TLAS)26 b(has)f(b)s(oth)g(a)h(small-case)g
(matm)m(ul,)h(whic)m(h)d(do)s(es)h(not)h(cop)m(y)88 5221
y(the)34 b(user's)g(input)e(op)s(erands,)h(and)h(a)g(large-case)h(co)s
(de)f(that)h(do)s(es.)51 b(The)33 b(user)g(con)m(tributed)g(GEMM)1843
5591 y(16)p eop
%%Page: 17 17
17 16 bop 88 213 a Fl(replaces)26 b(A)-8 b(TLAS's)26
b(large-case)i(GEMM,)f(and)e(then)h(timings)e(are)j(used)e(as)h(normal)
f(to)i(determine)e(the)88 326 y(crosso)m(v)m(er)32 b(p)s(oin)m(ts)d(at)
j(whic)m(h)d(the)h(con)m(tributed)g(GEMM)h(outp)s(erforms)e(A)-8
b(TLAS's)30 b(small-case)h(co)s(de.)88 565 y Fj(5.7.1)106
b(Supplying)36 b(A)-9 b(TLAS)34 b(with)h(what)e(it)i(needs)88
736 y Fl(A)-8 b(TLAS)35 b(exp)s(ects)h(that)g(the)f(con)m(tributed)g
(GEMM)h(will)c(ha)m(v)m(e)37 b(its)e(o)m(wn)g(arc)m(hitecture-)h(sp)s
(eci\014c)e(sub-)88 849 y(directory)-8 b(,)36 b(just)e(as)h(with)f(all)
f(other)i(A)-8 b(TLAS)35 b(source)g(directories.)53 b(That)34
b(directory)g(is)g(indicated)g(to)88 962 y(A)-8 b(TLAS)26
b(b)m(y)g(the)g Fg(UMMdir)e Fl(macro)j(set)f(in)f Fg(Make.<arch>)p
Fl(.)36 b(F)-8 b(or)27 b(instance,)g(on)f(the)g(alpha)f(platform,)h
(Mr.)88 1075 y(Goto's)c(GEMM)f(is)f(used)f(b)m(y)h(A)-8
b(TLAS,)20 b(and)g(UMMdir)g(is)f(therefore)i(set)f(to:)37
b Fg($\(TOPdir\)/src/blas/gemm/)o(GOT)o(O/$\()o(ARCH)o(\))p
Fl(.)229 1188 y(In)f(this)f(directory)-8 b(,)39 b(there)d(m)m(ust)g(b)s
(e)g(a)h(master)g(mak)m(e\014le,)h(called)e Fg(Makefile)p
Fl(,)g(whic)m(h)f(minimally)88 1301 y(con)m(tains)c(the)f(follo)m(wing)
f(targets:)225 1483 y Fh(\017)46 b Fg(susermm)28 b Fl(:)41
b(builds)27 b(the)j(single)f(precision)g(real)h(gemm)h(with)e(all)g
(its)h(dep)s(endencies)225 1668 y Fh(\017)46 b Fg(dusermm)28
b Fl(:)41 b(builds)27 b(the)j(double)f(precision)g(real)h(gemm)h(with)e
(all)g(its)h(dep)s(endencies)225 1853 y Fh(\017)46 b
Fg(cusermm)28 b Fl(:)41 b(builds)27 b(the)j(single)f(precision)g
(complex)h(gemm)h(with)e(all)g(its)h(dep)s(endencies)225
2038 y Fh(\017)46 b Fg(zusermm)28 b Fl(:)41 b(builds)27
b(the)j(double)f(precision)g(complex)h(gemm)h(with)e(all)g(its)h(dep)s
(endencies)225 2224 y Fh(\017)46 b Fg(sclean)28 b Fl(:)41
b(deletes)30 b(all)g(non-library)d(\014les)j(created)h(b)m(y)f
Fg(susermm)225 2409 y Fh(\017)46 b Fg(dclean)28 b Fl(:)41
b(deletes)30 b(all)g(non-library)d(\014les)j(created)h(b)m(y)f
Fg(dusermm)225 2594 y Fh(\017)46 b Fg(cclean)28 b Fl(:)41
b(deletes)30 b(all)g(non-library)d(\014les)j(created)h(b)m(y)f
Fg(cusermm)225 2780 y Fh(\017)46 b Fg(zclean)28 b Fl(:)41
b(deletes)30 b(all)g(non-library)d(\014les)j(created)h(b)m(y)f
Fg(zusermm)229 2961 y Fl(F)-8 b(or)32 b(eac)m(h)f(precision,)e(A)-8
b(TLAS)30 b(calls)g(the)g(user's)g(GEMM)h(using)e(this)g(API:)88
3143 y Fg(int)47 b(ATL_U<pre>usergemm\(const)41 b(enum)47
b(ATLAS_TRANS)e(TA,)i(const)f(enum)h(ATLAS_TRANS)d(TB,)1186
3256 y(const)i(int)h(M,)g(const)g(int)g(N,)g(const)f(int)h(K,)1186
3369 y(const)f(SCALAR)g(alpha,)h(const)f(TYPE)h(*A,)f(const)h(int)g
(lda,)1186 3482 y(const)f(TYPE)h(*B,)g(const)f(int)h(ldb,)g(const)f
(SCALAR)g(beta,)1186 3595 y(TYPE)h(*C,)g(const)f(int)h(ldc\))88
3776 y Fl(where,)p 88 3806 2006 4 v 88 3822 V 86 3935
4 113 v 103 3935 V 155 3901 a Fg(<pre>)29 b Fl(:)p 579
3935 V 182 w Fg(s)p 917 3935 V 290 w(d)p 1303 3935 V
338 w(c)p 1689 3935 V 338 w(z)p 2075 3935 V 2092 3935
V 88 3938 2006 4 v 88 3955 V 86 4068 4 113 v 103 4068
V 155 4034 a Fl(SCALAR)p 579 4068 V 99 w Fg(float)p 917
4068 V 98 w(double)p 1303 4068 V 98 w(float*)p 1689 4068
V 98 w(float*)p 2075 4068 V 2092 4068 V 88 4071 2006
4 v 86 4184 4 113 v 103 4184 V 155 4150 a Fl(TYPE)p 579
4184 V 218 w Fg(float)p 917 4184 V 98 w(double)p 1303
4184 V 98 w(float)p 1689 4184 V 146 w(float)p 2075 4184
V 2092 4184 V 88 4188 2006 4 v 88 4204 V 229 4438 a Fl(This)39
b(routine)h(should)f(return)g Fg(0)h Fl(up)s(on)f(successful)h(in)m(v)m
(o)s(cation,)j(and)d Fg(-1)g Fl(if)g(unable)f(to)i(mallo)s(c)88
4551 y(enough)32 b(memory)-8 b(.)47 b(Other)31 b(errors)h(ma)m(y)h(b)s
(e)e(signaled)g(b)m(y)h(returning)e(a)j(v)-5 b(alue)31
b(of)i Fg(2)p Fl(.)45 b(On)32 b(error)g(in)e(this)88
4664 y(routine,)c(A)-8 b(TLAS)24 b(will)e(call)j(the)g(no-cop)m(y)h(co)
s(de)f(to)h(get)g(the)f(answ)m(er,)h(so)f(a)g(return)f(v)-5
b(alue)25 b(of)g Fg(1)f Fl(indicates)88 4777 y(that)j(A)-8
b(TLAS)26 b(should)e(do)i(this.)38 b(If)26 b(a)h(fatal)f(error)g(o)s
(ccurs,)h(or)f(if)f(an)h(error)g(o)s(ccurs)f(after)i(op)s(erands)e(ha)m
(v)m(e)88 4890 y(b)s(een)38 b(mo)s(di\014ed)e(\(i.e.,)41
b(calling)c(the)i(no-cop)m(y)g(co)s(de)g(will)c(no)k(longer)e(pro)s
(duce)h(the)g(correct)i(answ)m(er\),)88 5003 y(then)30
b(execution)h(should)d(b)s(e)i(halted.)229 5116 y(A)-8
b(TLAS's)37 b(in)m(terface)f(routines)f(ha)m(v)m(e)j(already)e(done)g
(all)f(required)f(error)i(c)m(hec)m(king,)j(so)d(the)h(user)88
5229 y(need)22 b(not)h(c)m(hec)m(k)h(the)e(input)e(argumen)m(ts)j(in)e
(this)g(routine,)i(or)f(an)m(y)h(of)f(the)h(lo)m(w)m(er-lev)m(el)f
(user)g(con)m(tributed)88 5342 y(routines.)1843 5591
y(17)p eop
%%Page: 18 18
18 17 bop 88 213 a Fj(5.7.2)106 b(What)34 b(to)h(do)g(if)g(y)m(ou)h
(don't)f(supply)g(all)g(precisions)88 384 y Fl(Remem)m(b)s(er)h(that)h
(what)f(A)-8 b(TLAS)35 b(is)h(doing)f(is)g(substituting)f(y)m(our)i
(GEMM)g(for)g(its)g(o)m(wn)g(large-case)88 497 y(GEMM.)31
b(Ho)m(w)m(ev)m(er,)h(A)-8 b(TLAS's)30 b(large-case)h(GEMM)g(is)e
(still)f(compiled)g(in)g(the)i(library)-8 b(,)29 b(it)g(is)g(just)g
(not)88 610 y(b)s(eing)g(used.)40 b(The)30 b(follo)m(wing)f(co)s(de)h
(will)e(call)i(A)-8 b(TLAS's)30 b(large)h(case)g(co)s(de)g(for)f(all)f
(precisions:)88 797 y Fg(#include)46 b("atlas_misc.h")88
910 y(#include)g("atlas_lvl3.h")88 1136 y(int)h
(Mjoin\(Mjoin\(ATL_U,PRE\),us)o(erge)o(mm\))231 1248
y(\(const)g(enum)f(ATLAS_TRANS)f(TA,)i(const)f(enum)h(ATLAS_TRANS)e
(TB,)279 1361 y(const)i(int)f(M,)i(const)e(int)h(N,)g(const)f(int)h(K,)
h(const)e(SCALAR)g(alpha,)279 1474 y(const)h(TYPE)f(*A,)h(const)f(int)h
(lda,)g(const)f(TYPE)h(*B,)g(const)f(int)h(ldb,)279 1587
y(const)g(SCALAR)f(beta,)g(TYPE)h(*C,)g(const)f(int)h(ldc\))88
1700 y({)231 1813 y(int)g(ierr;)231 2039 y(if)h(\(N)f(>=)g(M\))231
2152 y({)375 2265 y(if)g(\()g(ierr)g(=)g(Mjoin\(PATL,mmJIK\)\(TA,)42
b(TB,)47 b(M,)g(N,)h(K,)f(alpha,)f(A,)h(lda,)g(B,)g(ldb,)1806
2378 y(beta,)g(C,)g(ldc\))g(\))518 2490 y(ierr)f(=)i
(Mjoin\(PATL,mmIJK\)\(TA,)42 b(TB,)47 b(M,)g(N,)g(K,)g(alpha,)f(A,)i
(lda,)e(B,)h(ldb,)1711 2603 y(beta,)f(C,)i(ldc\);)231
2716 y(})231 2829 y(else)231 2942 y({)375 3055 y(if)f(\()g(ierr)g(=)g
(Mjoin\(PATL,mmIJK\)\(TA,)42 b(TB,)47 b(M,)g(N,)h(K,)f(alpha,)f(A,)h
(lda,)g(B,)g(ldb,)1806 3168 y(beta,)g(C,)g(ldc\))g(\))518
3281 y(ierr)f(=)i(Mjoin\(PATL,mmJIK\)\(TA,)42 b(TB,)47
b(M,)g(N,)g(K,)g(alpha,)f(A,)i(lda,)e(B,)h(ldb,)1711
3394 y(beta,)f(C,)i(ldc\);)231 3507 y(})231 3620 y(return)f(\(ierr\);)
88 3732 y(})229 3919 y Fl(So,)h(y)m(ou)d(can)g(use)f(the)g(ab)s(o)m(v)m
(e)i(co)s(de)e(to)h(ha)m(v)m(e)h(A)-8 b(TLAS)44 b(call)f(it's)h(normal)
f(routines)h(for)g(those)88 4032 y(precisions)37 b(y)m(ou)i(do)f(not)h
(supply)-8 b(,)38 b(and)g(call)g(y)m(our)g(o)m(wn)h(otherwise.)64
b(In)38 b(order)g(to)h(help)e(understand)88 4145 y(this)i(pro)s(cess,)j
(A)-8 b(TLAS)40 b(includes)e(a)i(\\user-supplied")d(GEMM)k(that)g
(simply)c(calls)i(A)-8 b(TLAS's)40 b(o)m(wn)88 4258 y(GEMM)30
b(for)e(all)g(precisions,)f(in)h Fg(ATLAS/src/blas/gemm/UMME)o(XAM)o
(PLE)p Fl(.)23 b(If,)28 b(for)h(instance,)g(y)m(ou)g(ha)m(v)m(e)88
4371 y(a)37 b(single)e(precision)g(real)h(GEMM)h(but)e(nothing)h(else,)
i(y)m(ou)e(can)h(tak)m(e)h(this)d(directory)h(as)h(a)f(starting)88
4483 y(p)s(oin)m(t,)28 b(adding)f(y)m(our)h(o)m(wn)g(commands)f(for)h
(single)f(precision)f(real)i(in)f(the)h(Mak)m(e\014le,)h(etc,)h(and)e
(lea)m(ving)88 4596 y(ev)m(erything)j(else)f(alone.)229
4709 y(In)g(order)g(to)h(do)g(this,)e(y)m(ou)i(should)e(do)h(the)h
(follo)m(wing)e(\(where)h Fg(<arch>)f Fl(is)g(replaced)h(b)m(y)h(the)f
Fg(ARCH)88 4822 y Fl(string)g(of)g(y)m(our)h Fg(Make.<arch>)p
Fl(;)c(eg,)k Fg(Linux)p 1625 4822 29 4 v 33 w(PII)p Fl(,)f
Fg(AIX)p 2001 4822 V 34 w(POWER3)p Fl(,)f Fg(OSF)p 2521
4822 V 33 w(21264)p Fl(,)g(etc.\):)199 5009 y(1.)47 b(In)29
b Fg(ATLAS/src/blas/gemm/UMMEX)o(AMPL)o(E)p Fl(:)425
5196 y Fh(\017)46 b Fg(mkdir)g(<arch>)425 5342 y Fh(\017)g
Fg(cp)h(Makefile)e(<arch>/.)1843 5591 y Fl(18)p eop
%%Page: 19 19
19 18 bop 425 213 a Fh(\017)46 b Fg(ln)h(-s)g(../../../../../Make.<arc)
o(h>)42 b(Make.inc)425 354 y Fh(\017)k Fl(Mo)s(dify)29
b Fg(<arch>/Makefile)d Fl(to)31 b(compile)e(y)m(our)i(single)e
(precision)f(routine)425 495 y Fh(\017)46 b Fl(F)-8 b(ollo)m(w)30
b(the)g(instructions)d(giv)m(en)j(in)f(Section)h(5.7.3,)i(whic)m(h)c
(discusses)g(ho)m(w)i(to)h(mak)m(e)g(A)-8 b(T-)516 608
y(LAS)29 b(use)h(a)h(con)m(tributed)f(GEMM)h(that)g(con\014g)g(has)f
(not)g(setup)g(for)g(y)m(ou)88 846 y Fj(5.7.3)106 b(F)-9
b(orcing)36 b(A)-9 b(TLAS)35 b(to)g(use)g(y)m(our)g(GEMM)88
1018 y Fl(If)k(A)-8 b(TLAS)39 b(detects)h(y)m(ou)g(are)f(on)g(a)h
(platform)e(where)h(a)g(con)m(tributed)g(full)e(GEMM)j(is)e(sup)s
(erior)f(to)88 1131 y(A)-8 b(TLAS's)21 b(large-case)h(GEMM,)g(A)-8
b(TLAS)21 b(will)d(automatically)j(handle)e(the)i(details)f(of)h
(making)g(A)-8 b(TLAS)88 1243 y(call)25 b(the)h(user-con)m(tributed)f
(routine.)38 b(If,)27 b(ho)m(w)m(ev)m(er,)h(y)m(ou)e(wish)e(to)i(force)
g(A)-8 b(TLAS)26 b(to)g(use)g(y)m(our)f(GEMM)88 1356
y(\(for)30 b(instance,)g(y)m(ou)g(are)g(testing)g(y)m(our)g(co)s(de)g
(b)s(efore)f(con)m(tribution,)g(or)h(just)f(w)m(an)m(t)i(to)f(utilize)f
(A)-8 b(TLAS)88 1469 y(for)30 b(complete)h(BLAS)f(co)m(v)m(erage)k
(with)29 b(y)m(our)h(GEMM\),)i(y)m(ou)f(should)d(tak)m(e)k(the)e(follo)
m(wing)f(steps,)i(after)88 1582 y(creating)g(the)g(appropriate)e(sub)s
(directory)f(and)i(API)g(as)h(previously)d(describ)s(ed:)199
1758 y(1.)47 b(Edit)29 b(y)m(our)h Fg(Make.<arch>)d Fl(\014le:)425
1940 y Fh(\017)46 b Fl(Change)30 b Fg(UMMdir)f Fl(to)i(p)s(oin)m(t)e
(to)i(y)m(our)f(full)f(GEMM's)i(arc)m(hitecture)g(sub)s(directory)425
2082 y Fh(\017)46 b Fl(Add)29 b Fg(-DUSERGEMM)f Fl(to)j(the)f
Fg(CDEFS)f Fl(macro.)199 2264 y(2.)47 b(In)35 b Fg(ATLAS/src/blas/gemm)
p Fl(,)d(touc)m(h)k Fg(ATL)p 1809 2264 29 4 v 33 w(gemmXX.c)e
Fl(and)h Fg(ATL)p 2586 2264 V 34 w(AgemmXX.c)e Fl(to)j(force)g(recom-)
316 2377 y(pilation)199 2560 y(3.)47 b(In)29 b Fg
(ATLAS/src/blas/gemm/<arch)o(>)24 b Fl(t)m(yp)s(e)31
b Fg(make)47 b(lib)199 2743 y Fl(4.)g(In)29 b Fg(ATLAS/include/<arch>)p
Fl(,)c(issue)425 2925 y Fh(\017)46 b Fg(rm)h(?Xover.h)e(atlas)p
1334 2925 V 33 w(cacheedge.h)425 3067 y Fh(\017)h Fg(touch)g(altas)p
1048 3067 V 33 w(cacheedge.h)f(sXover.h)g(dXover.h)h(cXover.h)f
(zXover.h)199 3249 y Fl(5.)i(In)29 b Fg(ATLAS/tune/blas/gemm/<arc)o(h>)
p Fl(,)24 b(issue:)425 3432 y Fh(\017)46 b Fg(rm)h(res/?Xover.h)d
(res/atlas)p 1717 3432 V 32 w(cacheedge.h)425 3573 y
Fh(\017)i Fg(make)g(res/atlas)p 1192 3573 V 32 w(cacheedge.h)425
3715 y Fh(\017)g Fg(make)g(res/sXover.h)f(pre=s)425 3856
y Fh(\017)h Fg(make)g(res/dXover.h)f(pre=d)425 3997 y
Fh(\017)h Fg(make)g(res/cXover.h)f(pre=c)425 4138 y Fh(\017)h
Fg(make)g(res/zXover.h)f(pre=z)88 4422 y Fk(6)135 b(Sp)t(eeding)45
b(up)f(the)h(Lev)l(el)h(2)f(BLAS)88 4625 y Fl(All)29
b(Lev)m(el)i(2)g(BLAS)f(are)h(written)e(in)g(terms)h(of)h(3)g(k)m
(ernel)f(routines:)199 4801 y(1.)47 b(Notransp)s(ose)30
b(GEMV)199 4983 y(2.)47 b(T)-8 b(ransp)s(ose)29 b(GEMV)199
5166 y(3.)47 b(GER)229 5342 y(F)-8 b(or)32 b(complex)e(co)s(des,)g
(these)h(k)m(ernels)f(m)m(ust)g(also)h(supply)c(conjugate)32
b(cases.)1843 5591 y(19)p eop
%%Page: 20 20
20 19 bop 88 213 a Ff(6.1)113 b(Sp)s(eeding)38 b(Up)f(GEMV,)g(HEMV,)g
(SYMV,)g(TRMV)g(and)i(TRSV)88 384 y Fl(These)f(routines)g(are)g(all)g
(based)g(on)g(GEMV.)h(Therefore,)i(to)e(sp)s(eed)e(them)i(up,)g(the)g
(user)f(needs)g(to)88 497 y(supply)26 b(a)i(more)g(e\016cien)m(t)g
(GEMV)g(primitiv)m(e.)38 b(The)27 b(hand-co)s(ded)g(GEMV)i(primitiv)m
(es)c(ma)m(y)j(b)s(e)g(found)88 610 y(in)h(A)-8 b(TLAS/tune/blas/gem)m
(v/CASES.)88 850 y Fj(6.1.1)106 b(The)34 b(Kernel)h(Description)h(File)
88 1022 y Fl(The)41 b(most)h(imp)s(ortan)m(t)f(\014le)f
Fg(ATLAS/tune/blas/gemv/CAS)o(ES)35 b Fl(is)41 b(the)g(primitiv)m(e)e
(description)h(\014le,)88 1135 y Fg(<pre>cases.dsc)p
Fl(.)j(Eac)m(h)33 b(precision)d(has)i(its)g(o)m(wn)g(description)f
(\014le)g(\(as)i(indicated)e(b)m(y)h Fg(<pre>)p Fl(\),)g(and)88
1248 y(this)38 b(\014le)g(describ)s(es)f(all)g(of)i(the)g(routines)e
(to)j(time)e(in)g(order)g(to)h(\014nd)e(the)i(b)s(est.)65
b(F)-8 b(or)40 b(instance,)g(for)88 1361 y(double)29
b(precision,)g(w)m(e)i(see:)88 1548 y Fg(speedy.)46 b(cat)h
(CASES/dcases.dsc)88 1661 y(9)136 1774 y(8)95 b(0)g(0)48
b(ATL_gemvN_mm.c)235 b("R.)47 b(Clint)f(Whaley")136 1887
y(0)95 b(1)g(1)48 b(ATL_gemvN_1x1_1.c)91 b("R.)47 b(Clint)f(Whaley")88
2000 y(16)h(32)95 b(1)48 b(ATL_gemvN_1x1_1a.c)43 b("R.)k(Clint)f
(Whaley")136 2113 y(0)95 b(4)g(2)48 b(ATL_gemvN_4x2_0.c)91
b("R.)47 b(Clint)f(Whaley")136 2226 y(0)95 b(4)g(4)48
b(ATL_gemvN_4x4_1.c)91 b("R.)47 b(Clint)f(Whaley")136
2339 y(0)95 b(8)g(4)48 b(ATL_gemvN_8x4_1.c)91 b("R.)47
b(Clint)f(Whaley")136 2452 y(0)h(16)95 b(2)48 b(ATL_gemvN_16x2_1.c)43
b("R.)k(Clint)f(Whaley")136 2565 y(0)h(16)95 b(4)48 b
(ATL_gemvN_16x4_1.c)43 b("R.)k(Clint)f(Whaley")88 2677
y(16)h(32)95 b(4)48 b(ATL_gemvN_32x4_1.c)43 b("R.)k(Clint)f(Whaley")136
2790 y(6)136 2903 y(8)95 b(0)g(0)48 b(ATL_gemvT_mm.c)282
b("R.)47 b(Clint)g(Whaley")136 3016 y(0)95 b(2)g(8)48
b(ATL_gemvT_2x8_0.c)138 b("R.)47 b(Clint)g(Whaley")136
3129 y(0)95 b(4)g(8)48 b(ATL_gemvT_4x8_1.c)138 b("R.)47
b(Clint)g(Whaley")136 3242 y(0)95 b(4)48 b(16)f(ATL_gemvT_4x16_1.c)90
b("R.)47 b(Clint)g(Whaley")136 3355 y(0)95 b(2)48 b(16)f
(ATL_gemvT_2x16_1.c)90 b("R.)47 b(Clint)g(Whaley")136
3468 y(0)95 b(1)g(1)48 b(ATL_gemvT_1x1_1.c)138 b("R.)47
b(Clint)g(Whaley")229 3655 y Fl(The)27 b(\014rst)f(n)m(um)m(b)s(er)f
(\(in)h(this)g(case)i(9\))f(is)f(the)h(n)m(um)m(b)s(er)e(of)i(NoT)-8
b(ransp)s(ose)27 b(primitiv)m(es)d(to)k(time.)39 b(This)88
3768 y(is)27 b(follo)m(w)m(ed)g(b)m(y)g(that)h(n)m(um)m(b)s(er)e(of)i
(primitiv)m(e)d(lines)g(describing)h(those)h(NoT)-8 b(rans)28
b(primitiv)m(es,)e(and)h(then)88 3881 y(w)m(e)f(supply)d(the)j(n)m(um)m
(b)s(er)f(of)g(T)-8 b(ransp)s(ose)25 b(primitiv)m(es)e(to)k(time)e
(\(in)f(this)h(example,)h(6\),)i(follo)m(w)m(ed)d(b)m(y)h(that)88
3994 y(n)m(um)m(b)s(er)j(of)i(primitiv)m(e)d(lines)h(describing)f(the)i
(T)-8 b(ransp)s(ose)30 b(primitiv)m(es.)229 4107 y(As)35
b(y)m(ou)f(can)h(see,)h(eac)m(h)g(line)d(supplies)e(three)k(in)m
(tegers)f(and)g(a)h(\014lename)e(to)i(the)g(searc)m(h)g(routine.)88
4220 y(The)25 b(\014lename)g(is)g(the)h(\014lename)e(of)i(the)g
(primitiv)m(e)d(to)j(time.)39 b(The)25 b(three)h(in)m(tegers)g(supply)d
(information)88 4333 y(necessary)31 b(in)e(order)h(for)g(the)h(higher)e
(lev)m(el)h(routines)f(to)i(do)f(blo)s(c)m(king.)229
4446 y(This)23 b(is)h(the)h(\014rst)f(piece)h(of)g(imp)s(ortan)m(t)f
(information)f(ab)s(out)h(these)h(primitiv)m(e)e(routines:)37
b(no)24 b(blo)s(c)m(k-)88 4559 y(ing)41 b(should)f(b)s(e)i(done)f(in)g
(them.)76 b(The)41 b(appropriate)g(blo)s(c)m(king)g(is)g(done)g(b)m(y)h
(higher)f(lev)m(el)h(A)-8 b(TLAS)88 4672 y(routines.)40
b(Most)31 b(primitiv)m(es)d(emplo)m(y)j(some)f(kind)f(of)i(lo)s(op)e
(unrolling,)e(and)j(when)g(these)g(higher)g(lev)m(el)88
4785 y(routines)f(blo)s(c)m(k)g(in)g(order)g(to)h(reuse)g(v)m(ectors)h
(or)f(matrices,)g(it)f(is)g(imp)s(ortan)m(t)g(that)h(this)f(blo)s(c)m
(king)g(do)s(es)88 4897 y(not)38 b(con\015ict)g(with)f(the)h(primitiv)m
(es')d(unrolling)g(factors)k(\(for)f(instance,)h(if)e(the)h(primitiv)m
(e)e(unrolls)f(a)88 5010 y(giv)m(en)g(dimension)e(b)m(y)i(8,)i(but)d(A)
-8 b(TLAS)35 b(blo)s(c)m(ks)f(that)i(dimension)c(to)k(3,)h(A)-8
b(TLAS)35 b(w)m(ould)e(alw)m(a)m(ys)j(call)88 5123 y(the)31
b(clean)m(up)f(co)s(de\).)41 b(So)30 b(this)g(is)f(the)i(information)d
(con)m(v)m(ey)m(ed)33 b(b)m(y)d(these)h(three)f(in)m(tegers.)229
5236 y(The)g(form)g(of)h(a)g(GEMV)g(primitiv)m(e)d(line)g(is:)1843
5591 y(20)p eop
%%Page: 21 21
21 20 bop 88 213 a Fg(<flag>)46 b(<Yunroll>)g(<Xunroll>)f(<filename>)g
("<author\(s\)>")229 390 y Fl(As)d(men)m(tioned)f(previously)-8
b(,)43 b Fg(<filename>)38 b Fl(is)j(the)h(primitiv)m(e)d(source)i
(\014le.)74 b Fg(<Yunroll>)39 b Fl(is)h(the)88 502 y(unrolling)33
b(used)j(for)g(the)g(lo)s(op)g(that)g(lo)s(ops)g(o)m(v)m(er)h(the)g
Fe(Y)56 b Fl(v)m(ector,)39 b(and)d Fg(<Xunroll>)e Fl(is)h(the)i
(unrolling)88 615 y(used)c(for)f(the)i(lo)s(op)e(that)h(lo)s(ops)f(o)m
(v)m(er)j(the)e Fe(X)40 b Fl(v)m(ector.)51 b Fg(<flag>)31
b Fl(is)h(a)h(less)g(ob)m(vious)f(parameter)i(whic)m(h)88
728 y(is)c(used)f(to)i(tell)f(the)h(searc)m(h)g(script)e(ab)s(out)h(sp)
s(ecial)f(prop)s(erties)g(of)h(a)h(k)m(ernel.)229 841
y(It)23 b(is)f(assumed)g(that)i(the)f(user)f(has)h(supplied)c(a)k
("inner-pro)s(duct")f(based)g(GEMV)i(implemen)m(tation)88
954 y(\(i.e.,)31 b(an)e(implemen)m(tation)f(whic)m(h)g(basically)f(do)s
(es)i Fg(<Yunroll>)e Fl(sim)m(ultaneous)h(dot)i(pro)s(ducts\).)39
b(This)88 1067 y(default)c(state)h(is)e(expressed)h(to)h(the)f(searc)m
(h)h(b)m(y)f(a)h Fg(<flag>)d Fl(v)-5 b(alue)35 b(of)g(0.)56
b(Ho)m(w)m(ev)m(er,)38 b(since)d(the)g(inner)88 1180
y(pro)s(duct)42 b(form)m(ulation)g(of)i(NoT)-8 b(ransp)s(ose)43
b(GEMV)h(lo)s(ops)e(across)i(the)g(non-con)m(tiguous)f(dimension)88
1293 y(of)36 b(the)f(matrix,)h(some)f(arc)m(hitectures)h(need)f(to)g
(emplo)m(y)g(an)g("outer-pro)s(duct")h(based)e(NoT)-8
b(ransp)s(ose)88 1406 y(GEMV)31 b(\(i.e.,)g(a)f(GEMV)g(whic)m(h)f(is)g
(p)s(erformed)f(b)m(y)i(doing)f Fg(<Xunroll>)e Fl(sim)m(ultaneous)i
(axp)m(y's\).)41 b(This)88 1519 y(is)30 b(indicated)f(b)m(y)i(a)g
Fg(<flag>)e Fl(v)-5 b(alue)30 b(of)h(16.)43 b(Finally)-8
b(,)29 b(since)h(A)-8 b(TLAS's)31 b(GEMM)h(has)e(a)h(co)s(de)g
(generator)88 1632 y(whic)m(h)j(allo)m(ws)g(it)g(to)h(ac)m(hiev)m(e)h
(v)m(ery)f(go)s(o)s(d)g(p)s(ortable)f(p)s(erformance,)h(it)f(is)g(alw)m
(a)m(ys)h(w)m(orth)g(seeing)f(ho)m(w)88 1744 y(optimal)23
b(a)h(GEMV)h(can)f(b)s(e)f(obtained)g(b)m(y)g(simply)f(making)h(the)h
(appropriate)f(call)g(to)h(GEMM.)h Fg(<flag>)88 1857
y Fl(of)31 b(8)g(indicates)e(that)i(this)e(is)h(what)g(the)g(k)m(ernel)
g(is)g(doing.)229 1970 y(In)g(summary:)p 88 2087 3576
4 v 88 2103 V 86 2216 4 113 v 103 2216 V 155 2182 a(FLA)m(G)p
456 2216 V 101 w(MEANING)p 3645 2216 V 3662 2216 V 88
2219 3576 4 v 88 2236 V 86 2349 4 113 v 103 2349 V 362
2315 a(0)p 456 2349 V 101 w(Normal)p 3645 2349 V 3662
2349 V 88 2352 3576 4 v 86 2465 4 113 v 103 2465 V 362
2431 a(8)p 456 2465 V 101 w(GEMM-based)h(primitiv)m(e)p
3645 2465 V 3662 2465 V 88 2468 3576 4 v 86 2581 4 113
v 103 2581 V 317 2547 a(16)p 456 2581 V 101 w(Outer-pro)s(duct)e(or)h
(AXPY-based)h(primitiv)m(e)d(\(only)i(v)-5 b(alid)28
b(for)i(Notransp)s(ose)h(GEMV\))p 3645 2581 V 3662 2581
V 88 2585 3576 4 v 88 2601 V 88 2917 a Fj(6.1.2)106 b(W)-9
b(riting)35 b(a)g(GEMV)g(k)m(ernel)88 3089 y Fl(There)29
b(are)h(sev)m(eral)g(assumptions)e(that)i(need)g(to)g(hold)e(true)i
(for)f(a)h(user-supplied)c(GEMV)k(primitiv)m(e.)88 3201
y(First,)d(the)h(lo)s(op)e(ordering)f(m)m(ust)i(b)s(e)f(that)i(implied)
23 b(b)m(y)k(the)g Fg(<flag>)e Fl(setting)i(the)g(user)g(supplies)c(in)
j(the)88 3314 y(primitiv)m(e)k(description)f(\014le,)i(as)h(discussed)e
(in)g(Section)h(6.1.1.)46 b(Eac)m(h)32 b(primitiv)m(e)e(mak)m(es)i
(assumptions)88 3427 y(ab)s(out)h(the)h(argumen)m(ts)g(it)f(handles,)g
(and)f(these)i(assumptions)e(are)i(re\015ected)g(in)e(the)i(routine)e
(name.)88 3540 y(The)e(function)f(name)i(of)f(a)h(GEMV)g(primitiv)m(e)d
(is:)231 3717 y Fg(ATL_<pre>gemv<Trans>_a1_x1)o(_<be)o(tan)o(am>_)o(y1)
88 3894 y Fl(where:)225 4070 y Fh(\017)46 b Fg(<pre>)29
b Fl(is)g(replaced)h(b)m(y)g(the)h(precision)d(pre\014x:)40
b Fg(s)p Fl(,)30 b Fg(d)p Fl(,)g Fg(c)p Fl(,)h(or)f Fg(z)p
Fl(.)225 4254 y Fh(\017)46 b Fg(<Trans>)28 b Fl(is)h(replaced)h(b)m(y)g
(transp)s(ose)g(sp)s(eci\014er:)418 4437 y Fj({)46 b
Fg(N)30 b Fl(:)g(NoT)-8 b(ransp)s(ose)418 4579 y Fj({)46
b Fg(T)30 b Fl(:)g(T)-8 b(ransp)s(ose)418 4720 y Fj({)46
b Fg(C)30 b Fl(:)g(Conjugate)h(T)-8 b(ransp)s(ose)418
4862 y Fj({)46 b Fg(Nc)29 b Fl(:)41 b(NoT)-8 b(ransp)s(ose,)30
b(with)g(conjugation)225 5045 y Fh(\017)46 b Fg(<betanam>)32
b Fl(is)i(replaced)g(b)m(y)g(the)h(b)s(eta)g(sp)s(eci\014er)e(this)h(k)
m(ernel)g(supplies.)51 b(All)33 b(GEMV)j(k)m(ernels)316
5158 y(m)m(ust)30 b(supply)e(the)i(follo)m(wing)f(b)s(eta)i(sp)s
(eci\014ers)d(and)i(names:)418 5342 y Fj({)46 b Fg(b0)29
b Fl(:)41 b Fe(\014)30 b Fl(=)25 b(0)1843 5591 y(21)p
eop
%%Page: 22 22
22 21 bop 418 213 a Fj({)46 b Fg(b1)29 b Fl(:)41 b Fe(\014)30
b Fl(=)25 b(1)418 359 y Fj({)46 b Fg(bXi0)c Fl(:)67 b(for)44
b(complex)f(GEMV)h(only)-8 b(,)47 b(sp)s(eci\014es)42
b(when)h Fe(\014)53 b Fh(6)p Fl(=)47 b(0)d(and)f Fe(\014)52
b Fh(6)p Fl(=)c(1,)f(but)c(the)516 472 y(imaginary)29
b(comp)s(onen)m(t)h(is)g(zero.)418 618 y Fj({)46 b Fg(bX)29
b Fl(:)i(b)s(eta)f(is)g(a)h(input)d(v)-5 b(ariable)29
b(without)h(kno)m(wn)f(c)m(haracteristics.)229 806 y(F)-8
b(or)31 b(a)f(giv)m(en)g(gem)m(v)h(primitiv)m(e)c(\(either)j(NoT)-8
b(ransp)s(ose)30 b(or)g(T)-8 b(ransp)s(ose\),)29 b(if)g(the)h(cpp)f
(macro)i Fg(Conj_)88 919 y Fl(is)f(de\014ned)f(w)m(e)i(w)m(an)m(t)g
(the)f(conjugate)i(form)e(of)h(that)g(transp)s(ose)e(setting)i(\(i.e.,)
g Fg(Nc)f Fl(or)g Fg(C)p Fl(\).)229 1031 y(Eac)m(h)41
b(\014le)d(is)h(further)f(compiled)g(with)g(di\013ering)f(cpp)i
(settings)h(to)g(generate)h(the)f(v)-5 b(arious)38 b(b)s(eta)88
1144 y(cases.)k(The)30 b(b)s(eta)g(macro)h(settings)g(and)e(their)h
(meanings)f(are:)p 229 1174 3090 4 v 229 1190 V 227 1303
4 113 v 244 1303 V 296 1269 a(CPP)h(MA)m(CR)m(O)p 913
1303 V 100 w(MEANING)p 3300 1303 V 3317 1303 V 229 1306
3090 4 v 229 1323 V 227 1436 4 113 v 244 1436 V 296 1402
a Fg(BETA0)p 913 1436 V 429 w Fl(Primitiv)m(e)e(should)h(pro)m(vide)g
Fe(y)f Fh( )e Fe(Ax)p 3300 1436 V 3317 1436 V 229 1439
3090 4 v 227 1552 4 113 v 244 1552 V 296 1518 a Fg(BETA1)p
913 1552 V 429 w Fl(Primitiv)m(e)i(should)h(pro)m(vide)g
Fe(y)f Fh( )e Fe(y)d Fl(+)d Fe(Ax)p 3300 1552 V 3317
1552 V 229 1556 3090 4 v 227 1668 4 113 v 244 1668 V
296 1635 a Fg(BETAX)p 913 1668 V 429 w Fl(Primitiv)m(e)28
b(should)h(pro)m(vide)g Fe(y)f Fh( )e Fe(\014)5 b(y)23
b Fl(+)d Fe(Ax)p 3300 1668 V 3317 1668 V 229 1672 3090
4 v 227 1785 4 113 v 244 1785 V 296 1751 a Fg(BETAXI0)p
913 1785 V 333 w Fl(F)-8 b(or)31 b(complex)f(only)-8
b(,)30 b(primitiv)m(e)e(should)h(pro)m(vide)g Fe(y)f
Fh( )e Fe(\014)5 b(y)23 b Fl(+)d Fe(Ax)p Fl(,)p 3300
1785 V 3317 1785 V 227 1898 V 244 1898 V 913 1898 V 965
1864 a(where)30 b(the)g(imaginary)f(comp)s(onen)m(t)i(of)g(b)s(eta)f
(is)g(zero.)p 3300 1898 V 3317 1898 V 229 1901 3090 4
v 229 1918 V 229 1989 a(In)g(terms)g(of)h(the)f(BLAS)h(API,)f(the)h
(GEMV)g(k)m(ernels)e(additionally)f(assume)225 2177 y
Fh(\017)46 b Fe(\013)25 b Fl(=)g(1)225 2364 y Fh(\017)46
b Fg(incX)g(=)i(1)225 2552 y Fh(\017)e Fg(incY)g(=)i(1)225
2739 y Fh(\017)e Fl(Column-ma)5 b(jor)28 b(storage)k(of)f(A)229
2927 y(Higher)c(lev)m(el)g(A)-8 b(TLAS)27 b(routines)f(ensure)h(these)g
(assumptions)f(are)i(true)f(b)s(efore)g(calling)e(the)j(prim-)88
3040 y(itiv)m(e.)229 3153 y(Therefore,)j(the)f(routine:)231
3341 y Fg(ATL_dgemvN_a1_x1_b0_y1)88 3528 y Fl(supplies)f(a)i(primitiv)m
(e)e(doing)i(notransp)s(ose)f(gem)m(v,)j(on)e(a)h(column-ma)5
b(jor)31 b(arra)m(y)g(with)f Fe(\013)e Fl(=)e(1,)32 b
Fe(\014)g Fl(=)27 b(0,)88 3641 y Fg(incX)j Fl(=)g(1)g(and)g
Fg(incY)f Fl(=)h(1.)41 b(while:)231 3829 y Fg
(ATL_cgemvNc_a1_x1_bXi0_y1:)88 4016 y Fl(supplies)g(a)i(primitiv)m(e)e
(doing)h(notransp)s(ose)h(gem)m(v,)k(on)c(a)h(column-ma)5
b(jor)42 b(arra)m(y)i(whose)f(elemen)m(ts)88 4129 y(should)35
b(b)s(e)h(conjugated)h(b)s(efore)f(the)h(m)m(ultiplication,)f(with)f
Fe(\013)h Fl(=)f(1,)k Fg(incX)d Fl(=)g(1,)j Fg(incY)c
Fl(=)h(1,)j(and)d Fe(\014)88 4242 y Fl(whose)30 b(real)h(comp)s(onen)m
(t)f(is)g(unkno)m(wn,)f(but)g(whose)i(imaginary)e(comp)s(onen)m(t)h(is)
g(kno)m(wn)g(to)h(b)s(e)e(zero.)229 4355 y(F)-8 b(or)28
b(greater)h(understanding)24 b(of)k(ho)m(w)f(these)h(CPP)e(macros)i
(are)f(used)g(to)h(compile)e(m)m(ultiple)f(prim-)88 4468
y(itiv)m(es)30 b(from)g(one)h(\014le,)e(examine)i(the)f(pro)m(vided)f
(CASES)g(\014les.)229 4581 y(The)h(API)h(of)f(the)h(primitiv)m(e)d(is:)
231 4769 y Fg(ATL_<pre>gemv<Trans>_a1_x1)o(_<be)o(tan)o(am>_)o(y1)231
4881 y(\()375 4994 y(const)46 b(int)h(M,)333 b(/*)48
b(length)e(of)h(Y)g(vector)f(*/)375 5107 y(const)g(int)h(N,)333
b(/*)48 b(length)e(of)h(X)g(vector)f(*/)375 5220 y(const)g(SCALAR)g
(alpha,/*)g(ignored,)f(assumed)h(to)h(be)g(one)g(*/)375
5333 y(const)f(TYPE)h(*A,)237 b(/*)48 b(pointer)d(to)j(column-major)c
(matrix)i(*/)1843 5591 y Fl(22)p eop
%%Page: 23 23
23 22 bop 375 213 a Fg(const)46 b(int)h(lda,)237 b(/*)48
b(leading)d(dimension)h(of)h(A,)g(or)g(row-stride)e(*/)375
326 y(const)h(TYPE)h(*X,)237 b(/*)48 b(vector)e(to)h(multiply)e(A)j(by)
f(*/)375 439 y(const)f(int)h(incX,)189 b(/*)48 b(ignored,)d(assumed)h
(to)h(be)g(one)g(*/)375 552 y(const)f(SCALAR)g(beta,)g(/*)i(value)e(of)
h(beta)g(*/)375 664 y(TYPE)f(*Y,)524 b(/*)48 b(output)e(vector)g(*/)375
777 y(const)g(int)h(incY)237 b(/*)48 b(ignored,)d(assumed)h(to)h(be)g
(one)g(*/)231 890 y(\);)229 1189 y Fl(where,)p 518 969
2006 4 v 518 985 V 516 1098 4 113 v 533 1098 V 584 1064
a Fg(<pre>)29 b Fl(:)p 1008 1098 V 182 w Fg(s)p 1347
1098 V 290 w(d)p 1733 1098 V 338 w(c)p 2119 1098 V 338
w(z)p 2505 1098 V 2522 1098 V 518 1101 2006 4 v 518 1118
V 516 1231 4 113 v 533 1231 V 584 1197 a Fl(SCALAR)p
1008 1231 V 99 w Fg(float)p 1347 1231 V 98 w(double)p
1733 1231 V 98 w(float*)p 2119 1231 V 98 w(float*)p 2505
1231 V 2522 1231 V 518 1234 2006 4 v 516 1347 4 113 v
533 1347 V 584 1313 a Fl(TYPE)p 1008 1347 V 218 w Fg(float)p
1347 1347 V 98 w(double)p 1733 1347 V 98 w(float)p 2119
1347 V 146 w(float)p 2505 1347 V 2522 1347 V 518 1350
2006 4 v 518 1367 V 229 1438 a Fl(Note)e(that)e(the)g(meaning)f(of)h(M)
g(and)f(N)h(are)g(sligh)m(tly)e(di\013eren)m(t)h(than)h(that)g(used)f
(b)m(y)h(the)g(F)-8 b(ortran77)88 1551 y(API,)31 b(in)e(that)i(they)f
(giv)m(e)h(the)g(v)m(ector)h(lengths,)e(not)g(arra)m(y)h(dimensions.)88
1788 y Fj(6.1.3)106 b(GEMV)35 b(examples)88 1959 y Fl(Probably)29
b(the)i(simplest,)e(notransp)s(ose)g(GEMV)i(k)m(ernel)f(implemen)m
(tation)f(is:)88 2126 y Fg(#ifdef)46 b(BETA0)88 2239
y(void)h(ATL_dgemvN_a1_x1_b0_y1)88 2352 y(#elif)g(defined)e(\(BETA1\))
88 2465 y(void)i(ATL_dgemvN_a1_x1_b1_y1)88 2578 y(#else)88
2691 y(void)g(ATL_dgemvN_a1_x1_bX_y1)88 2804 y(#endif)231
2916 y(\(const)g(int)f(M,)i(const)e(int)h(N,)g(const)f(double)h(alpha,)
f(const)g(double)g(*A,)279 3029 y(const)h(int)f(lda,)h(const)f(double)h
(*X,)f(const)h(int)g(incX,)f(const)g(double)h(beta,)279
3142 y(double)f(*Y,)h(const)g(int)f(incY\))88 3255 y({)231
3368 y(int)h(i,)h(j;)231 3481 y(register)e(double)g(y0;)231
3707 y(for)h(\(i=0;)g(i)g(!=)g(M;)h(i++\))231 3820 y({)375
3933 y(#ifdef)e(BETA0)518 4046 y(y0)h(=)g(0.0;)375 4158
y(#elif)f(defined\(BETA1\))518 4271 y(y0)h(=)g(Y[i];)375
4384 y(#elif)f(defined\(BETAX\))518 4497 y(y0)h(=)g(Y[i])g(*)h(beta;)
375 4610 y(#endif)375 4723 y(for)f(\(j=0;)f(j)h(!=)h(N;)f(j++\))f(y0)i
(+=)f(A[i+j*lda])e(*)i(X[j];)375 4836 y(Y[i])f(=)i(y0;)231
4949 y(})88 5062 y(})229 5229 y Fl(Sa)m(ving)20 b(this)f(\014le)h(to)h
Fg(ATLAS/tune/blas/gemv/CAS)o(ES/)o(ATL)p 2360 5229 29
4 v 28 w(dgemvN)p 2677 5229 V 33 w(1x1)p 2854 5229 V
33 w(1.c)p Fl(,)h(from)e(the)g Fg(ATLAS/tune/blas/gemv/<arc)o(h>)88
5342 y Fl(directory)-8 b(,)31 b(w)m(e)g(can)f(test)i(and)d(time)h(the)h
(implemen)m(tation)e(b)m(y:)1843 5591 y(23)p eop
%%Page: 24 24
24 23 bop 88 213 a Fg(make)47 b(dmvtstcaseN)e(mvrout=../CASES/ATL_dge)o
(mvN_)o(1x1)o(_1.c)c(yu=1)47 b(xu=1)88 326 y(BEGINNING)f(GEMV)g
(PRIMITIVE)f(TESTING:)231 552 y(TEST)i(TA=N,)f(M=997,)h(N=177,)f
(lda=1004,)f(beta=0.000000)f(STARTED)231 664 y(TEST)j(TA=N,)f(M=997,)h
(N=177,)f(lda=1004,)f(beta=0.000000)f(PASSED)231 777
y(TEST)j(TA=N,)f(M=997,)h(N=177,)f(lda=1004,)f(beta=1.000000)f(STARTED)
231 890 y(TEST)j(TA=N,)f(M=997,)h(N=177,)f(lda=1004,)f(beta=1.000000)f
(PASSED)231 1003 y(TEST)j(TA=N,)f(M=997,)h(N=177,)f(lda=1004,)f
(beta=0.800000)f(STARTED)231 1116 y(TEST)j(TA=N,)f(M=997,)h(N=177,)f
(lda=1004,)f(beta=0.800000)f(PASSED)88 1455 y(GEMV)j(PRIMITIVE)e
(PASSED)h(ALL)h(TESTS)88 1681 y(speedy.)f(make)h(dmvcaseN)e
(mvrout=../CASES/ATL_dgemv)o(N_1x)o(1_1.)o(c)d(yu=1)k(xu=1)375
1794 y(gemvN_0)f(:)j(49.484536)d(MFLOPS)375 1906 y(gemvN_0)g(:)j
(49.484536)d(MFLOPS)375 2019 y(gemvN_0)g(:)j(49.230769)d(MFLOPS)231
2132 y(gemvN_0)h(:)i(49.40)e(MFLOPS)229 2320 y Fl(In)22
b(the)g(ab)s(o)m(v)m(e)i(examples,)g(w)m(e)e(pass)g Fg(yu)p
Fl(,)i(the)e(unrolling)d(along)k(the)f Fe(y)j Fl(v)m(ector,)h(and)c
Fg(xu)p Fl(,)h(the)g(unrolling)88 2433 y(along)h(the)g
Fe(x)f Fl(v)m(ector,)k(so)d(that)g(when)e(A)-8 b(TLAS)23
b(blo)s(c)m(ks)g(the)h(op)s(eration,)h(it)e(kno)m(ws)g(the)h(correct)h
(unrolling)88 2546 y(to)31 b(use)f(to)i(a)m(v)m(oid)f(clean)m(up)e(co)s
(de.)229 2659 y(A)i(similarly)c(sophisticated)i(transp)s(ose)h
(primitiv)m(e)e(is:)88 2846 y Fg(#ifdef)46 b(BETA0)88
2959 y(void)h(ATL_dgemvT_a1_x1_b0_y1)88 3072 y(#elif)g(defined)e
(\(BETA1\))88 3185 y(void)i(ATL_dgemvT_a1_x1_b1_y1)88
3298 y(#else)88 3411 y(void)g(ATL_dgemvT_a1_x1_bX_y1)88
3524 y(#endif)231 3637 y(\(const)g(int)f(M,)i(const)e(int)h(N,)g(const)
f(double)h(alpha,)f(const)g(double)g(*A,)279 3750 y(const)h(int)f(lda,)
h(const)f(double)h(*X,)f(const)h(int)g(incX,)f(const)g(double)h(beta,)
279 3862 y(double)f(*Y,)h(const)g(int)f(incY\))88 4088
y({)231 4201 y(int)h(i,)h(j;)231 4314 y(register)e(double)g(y0;)231
4540 y(for)h(\(j=0;)g(j)g(!=)g(M;)h(j++\))231 4653 y({)375
4766 y(#ifdef)e(BETA0)518 4879 y(y0)h(=)g(0.0;)375 4992
y(#elif)f(defined\(BETA1\))518 5105 y(y0)h(=)g(Y[j];)375
5217 y(#else)518 5330 y(y0)g(=)g(Y[j])g(*)h(beta;)1843
5591 y Fl(24)p eop
%%Page: 25 25
25 24 bop 375 213 a Fg(#endif)375 326 y(for)47 b(\(i=0;)f(i)h(!=)h(N;)f
(i++\))f(y0)i(+=)f(A[i+j*lda])e(*)i(X[i];)375 439 y(Y[j])f(=)i(y0;)231
552 y(})88 664 y(})229 846 y Fl(Whic)m(h)30 b(w)m(e)h(could)f(test)h
(and)f(time)g(b)m(y:)88 1027 y Fg(speedy.)46 b(make)h(dmvtstcaseT)d
(mvrout=../CASES/ATL_dgemvT)o(_1x1)o(_1.)o(c)e(xu=1)47
b(yu=1)88 1140 y(BEGINNING)f(GEMV)g(PRIMITIVE)f(TESTING:)231
1366 y(TEST)i(TA=T,)f(M=997,)h(N=177,)f(lda=1004,)f(beta=0.000000)f
(STARTED)231 1479 y(TEST)j(TA=T,)f(M=997,)h(N=177,)f(lda=1004,)f
(beta=0.000000)f(PASSED)231 1592 y(TEST)j(TA=T,)f(M=997,)h(N=177,)f
(lda=1004,)f(beta=1.000000)f(STARTED)231 1705 y(TEST)j(TA=T,)f(M=997,)h
(N=177,)f(lda=1004,)f(beta=1.000000)f(PASSED)231 1817
y(TEST)j(TA=T,)f(M=997,)h(N=177,)f(lda=1004,)f(beta=0.800000)f(STARTED)
231 1930 y(TEST)j(TA=T,)f(M=997,)h(N=177,)f(lda=1004,)f(beta=0.800000)f
(PASSED)88 2269 y(GEMV)j(PRIMITIVE)e(PASSED)h(ALL)h(TESTS)88
2495 y(speedy.)f(make)h(dmvcaseT)e(mvrout=../CASES/ATL_dgemv)o(T_1x)o
(1_1.)o(c)d(xu=1)k(yu=1)375 2608 y(gemvT_0)f(:)j(37.647059)d(MFLOPS)375
2721 y(gemvT_0)g(:)j(37.647059)d(MFLOPS)375 2834 y(gemvT_0)g(:)j
(37.647059)d(MFLOPS)231 2947 y(gemvT_0)h(:)i(37.65)e(MFLOPS)229
3128 y Fl(An)38 b(unsophisticated)d(notransp)s(ose)i(GEMV)h(implemen)m
(tation)e(for)i(double)e(precision)g(complex)88 3241
y(w)m(ould)29 b(b)s(e:)88 3422 y Fg(#ifdef)46 b(BETA0)231
3535 y(#ifdef)h(Conj_)375 3648 y(void)f(ATL_dgemvNc_a1_x1_b0_y1)231
3761 y(#else)375 3874 y(void)g(ATL_dgemvN_a1_x1_b0_y1)231
3987 y(#endif)88 4100 y(#elif)h(defined)e(\(BETA1\))231
4212 y(#ifdef)i(Conj_)375 4325 y(void)f(ATL_dgemvNc_a1_x1_b1_y1)231
4438 y(#else)375 4551 y(void)g(ATL_dgemvN_a1_x1_b1_y1)231
4664 y(#endif)88 4777 y(#elif)h(defined)e(\(BETAXI0\))231
4890 y(#ifdef)i(Conj_)375 5003 y(void)f(ATL_dgemvNc_a1_x1_bXi0_y1)231
5116 y(#else)375 5229 y(void)g(ATL_dgemvN_a1_x1_bXi0_y1)231
5342 y(#endif)1843 5591 y Fl(25)p eop
%%Page: 26 26
26 25 bop 88 213 a Fg(#else)231 326 y(#ifdef)47 b(Conj_)375
439 y(void)f(ATL_dgemvNc_a1_x1_bX_y1)231 552 y(#else)375
664 y(void)g(ATL_dgemvN_a1_x1_bX_y1)231 777 y(#endif)88
890 y(#endif)231 1003 y(\(const)h(int)f(M,)i(const)e(int)h(N,)g(const)f
(double)h(*alpha,)279 1116 y(const)g(double)f(*A,)h(const)f(int)h(lda,)
f(const)h(double)f(*X,)h(const)f(int)h(incX,)279 1229
y(const)g(double)f(*beta,)g(double)g(*Y,)h(const)f(int)h(incY\))88
1342 y({)231 1455 y(int)g(i,)h(j;)231 1568 y(const)f(int)g(M2)g(=)g
(M<<1,)g(N2)g(=)g(N<<1;)231 1681 y(#if)g(defined\(BETAX\))375
1794 y(const)f(double)g(rbeta)g(=)i(*beta,)e(ibeta)g(=)i(beta[1];)231
1906 y(#elif)f(defined\(BETAXI0\))375 2019 y(const)f(double)g(rbeta)g
(=)i(*beta;)231 2132 y(#endif)231 2245 y(register)e(double)g(ra,)h(ia,)
g(rx,)g(ix,)g(ry,)g(iy;)231 2471 y(for)g(\(i=0;)g(i)g(!=)g(M2;)g(i)h
(+=)f(2\))231 2584 y({)375 2697 y(#ifdef)f(BETA0)518
2810 y(ry)h(=)g(iy)h(=)f(0.0;)375 2923 y(#elif)f(defined\(BETAX\))518
3036 y(rx)h(=)g(rbeta;)g(ix)g(=)g(ibeta;)518 3149 y(ra)g(=)g(Y[i];)g
(ia)g(=)g(Y[i+1];)518 3261 y(ry)g(=)g(ra)h(*)f(rx)g(-)h(ia)f(*)g(ix;)
518 3374 y(iy)g(=)g(ra)h(*)f(ix)g(+)h(ia)f(*)g(rx;)375
3487 y(#else)518 3600 y(ry)g(=)g(Y[i];)518 3713 y(iy)g(=)g(Y[i+1];)518
3826 y(#ifdef)f(BETAXI0)661 3939 y(rx)h(=)h(rbeta;)661
4052 y(ry)f(*=)g(rx;)661 4165 y(iy)g(*=)g(rx;)518 4278
y(#endif)375 4391 y(#endif)375 4503 y(for\(j=0;)e(j)j(!=)f(N2;)g(j)g
(+=)g(2\))375 4616 y({)518 4729 y(ra)g(=)g(A[i+j*lda];)e(ia)i(=)h
(A[i+j*lda+1];)518 4842 y(rx)f(=)g(X[j];)g(ix)g(=)g(X[j+1];)518
4955 y(ry)g(+=)g(ra)g(*)h(rx;)518 5068 y(iy)f(+=)g(ra)g(*)h(ix;)518
5181 y(#ifdef)e(Conj_)661 5294 y(ry)h(+=)g(ia)h(*)f(ix;)1843
5591 y Fl(26)p eop
%%Page: 27 27
27 26 bop 661 213 a Fg(iy)47 b(-=)g(ia)h(*)f(rx;)518
326 y(#else)661 439 y(ry)g(-=)g(ia)h(*)f(ix;)661 552
y(iy)g(+=)g(ia)h(*)f(rx;)518 664 y(#endif)375 777 y(})375
890 y(Y[i])f(=)i(ry;)375 1003 y(Y[i+1])e(=)h(iy;)231
1116 y(})88 1229 y(})229 1417 y Fl(Whic)m(h,)39 b(when)d(sa)m(v)m(ed)i
(to)f Fg(ATLAS/tune/blas/gemv/CASES)o(/AT)o(L)p 2608
1417 29 4 v 29 w(zgemvN)p 2925 1417 V 32 w(1x1)p 3101
1417 V 34 w(1.c)p Fl(,)h(w)m(e)f(could)88 1530 y(test)32
b(and)d(time)h(b)m(y:)136 1717 y Fg(make)47 b(zmvtstcaseN)d
(mvrout=../CASES/ATL_zgemvN)o(_1x)o(1_1.)o(c)e(xu=1)k(yu=1)88
1943 y(BEGINNING)g(GEMV)g(PRIMITIVE)f(TESTING:)231 2169
y(TEST)i(TA=N,)f(M=997,)h(N=177,)f(lda=1004,)f
(beta=\(0.000000,0.000000\))c(STARTED)231 2282 y(TEST)47
b(TA=N,)f(M=997,)h(N=177,)f(lda=1004,)f(beta=\(0.000000,0.000000\))c
(PASSED)231 2395 y(TEST)47 b(TA=-,)f(M=997,)h(N=177,)f(lda=1004,)f
(beta=\(0.000000,0.000000\))c(STARTED)231 2508 y(TEST)47
b(TA=-,)f(M=997,)h(N=177,)f(lda=1004,)f(beta=\(0.000000,0.000000\))c
(PASSED)231 2620 y(TEST)47 b(TA=N,)f(M=997,)h(N=177,)f(lda=1004,)f
(beta=\(1.000000,0.000000\))c(STARTED)231 2733 y(TEST)47
b(TA=N,)f(M=997,)h(N=177,)f(lda=1004,)f(beta=\(1.000000,0.000000\))c
(PASSED)231 2846 y(TEST)47 b(TA=-,)f(M=997,)h(N=177,)f(lda=1004,)f
(beta=\(1.000000,0.000000\))c(STARTED)231 2959 y(TEST)47
b(TA=-,)f(M=997,)h(N=177,)f(lda=1004,)f(beta=\(1.000000,0.000000\))c
(PASSED)231 3072 y(TEST)47 b(TA=N,)f(M=997,)h(N=177,)f(lda=1004,)f
(beta=\(0.800000,0.000000\))c(STARTED)231 3185 y(TEST)47
b(TA=N,)f(M=997,)h(N=177,)f(lda=1004,)f(beta=\(0.800000,0.000000\))c
(PASSED)231 3298 y(TEST)47 b(TA=-,)f(M=997,)h(N=177,)f(lda=1004,)f
(beta=\(0.800000,0.000000\))c(STARTED)231 3411 y(TEST)47
b(TA=-,)f(M=997,)h(N=177,)f(lda=1004,)f(beta=\(0.800000,0.000000\))c
(PASSED)231 3524 y(TEST)47 b(TA=N,)f(M=997,)h(N=177,)f(lda=1004,)f
(beta=\(0.800000,0.300000\))c(STARTED)231 3637 y(TEST)47
b(TA=N,)f(M=997,)h(N=177,)f(lda=1004,)f(beta=\(0.800000,0.300000\))c
(PASSED)231 3750 y(TEST)47 b(TA=-,)f(M=997,)h(N=177,)f(lda=1004,)f
(beta=\(0.800000,0.300000\))c(STARTED)231 3862 y(TEST)47
b(TA=-,)f(M=997,)h(N=177,)f(lda=1004,)f(beta=\(0.800000,0.300000\))c
(PASSED)88 4201 y(GEMV)47 b(PRIMITIVE)e(PASSED)h(ALL)h(TESTS)88
4427 y(speedy.)f(make)h(zmvcaseN)e(mvrout=../CASES/ATL_zgemv)o(N_1x)o
(1_1.)o(c)d(xu=1)k(yu=1)375 4540 y(gemvN_0)f(:)j(78.688525)d(MFLOPS)375
4653 y(gemvN_0)g(:)j(78.688525)d(MFLOPS)375 4766 y(gemvN_0)g(:)j
(78.688525)d(MFLOPS)231 4879 y(gemvN_0)h(:)i(78.69)e(MFLOPS)1843
5591 y Fl(27)p eop
%%Page: 28 28
28 27 bop 88 213 a Fj(6.1.4)106 b(GEMV)35 b(k)m(ernel)g(notes)88
384 y Fl(All)29 b(routines)h(except)h(SYMV)g(call)f(the)h(GEMV)g(k)m
(ernel)f(in)f(the)i(same)g(fashion.)40 b(Other)30 b(than)g(SYMV,)88
497 y(all)e(routines)g(cannot)h(reduce)g(the)g(load)f(of)h
Fe(A)g Fl(from)g Fe(O)s Fl(\()p Fe(N)2097 464 y Fc(2)2136
497 y Fl(\),)h(but)e(can)h(reduce)g(the)g(memory)g(access)h(of)88
610 y(b)s(oth)23 b Fe(X)31 b Fl(and)23 b Fe(Y)43 b Fl(from)23
b Fe(O)s Fl(\()p Fe(N)1066 577 y Fc(2)1106 610 y Fl(\))g(to)h
Fe(O)s Fl(\()p Fe(N)10 b Fl(\).)39 b(In)23 b(general,)i(the)f
Fe(Y)43 b Fl(access)25 b(is)d(reduced)h(b)m(y)g(register)h(blo)s(c)m
(king)88 723 y(in)31 b(the)h(GEMV)h(k)m(ernel.)45 b(Therefore,)33
b(the)f(higher)f(lev)m(el)g(routines)g(blo)s(c)m(k)h
Fe(X)39 b Fl(suc)m(h)32 b(it)f(is)g(reused)h(across)88
836 y(k)m(ernel)26 b(in)m(v)m(o)s(cations)g(in)f(L1)h(\(if)g(y)m(ou)g
(write)g(a)g(axp)m(y-based)h(notransp)s(ose)e(GEMV)i(k)m(ernel,)g
Fe(Y)46 b Fl(is)25 b(blo)s(c)m(k)m(ed)88 958 y(instead)33
b(of)g Fe(X)7 b Fl(\).)50 b(What)34 b(this)e(amoun)m(ts)i(to)g(is)e
(partitioning)f Fe(X)41 b Fl(via:)46 b Fe(N)2601 972
y Fd(p)2671 958 y Fl(=)2782 913 y Fd(S)2825 922 y Fa(1)2859
913 y Fr(\000)p Fd(R)2967 921 y Fb(y)p 2782 937 224 4
v 2803 990 a Fd(R)2856 998 y Fb(y)2893 990 y Fc(+1)3015
958 y Fl(,)34 b(where)e Fe(S)3395 972 y Fc(1)3468 958
y Fl(is)g(the)88 1071 y(size,)25 b(in)c(elemen)m(ts,)k(of)e(the)g(Lev)m
(el)g(1)g(cac)m(he,)j Fe(N)1650 1085 y Fd(p)1712 1071
y Fl(is)c(the)h(partitioning)d(of)j Fe(X)7 b Fl(,)25
b(and)d Fe(R)2903 1085 y Fd(y)2967 1071 y Fl(corresp)s(onds)g(to)h(the)
88 1184 y Fg(Yunroll)28 b Fl(of)h(y)m(our)g(input)e(\014le.)40
b(The)28 b(equation)i(is)e(actually)h(a)g(little)f(more)i(complicated)e
(than)h(this,)g(as)88 1297 y(A)-8 b(TLAS)29 b(ma)m(y)g(w)m(an)m(t)g(to)
g(use)f(less)g(than)h(the)f(full)e Fe(S)1842 1311 y Fc(1)1910
1297 y Fl(to)j(a)m(v)m(oid)g(cac)m(he)h(thrashing)d(and)h(thro)m(wing)g
(useful)88 1410 y(sections)c(a)m(w)m(a)m(y)h(b)s(et)m(w)m(een)f(k)m
(ernel)f(calls.)38 b(Ho)m(w)m(ev)m(er,)27 b(this)22 b(giv)m(es)i(the)f
(user)g(some)h(idea)f(of)g(the)h(imp)s(ortance)88 1523
y(of)36 b(these)g(parameters.)58 b(In)35 b(particular,)h(it)f(sho)m(ws)
g(that)i Fg(Yunroll)d Fl(should)f(not)j(b)s(e)g(allo)m(w)m(ed)f(to)i
(gro)m(w)88 1636 y(to)s(o)31 b(large,)g(for)f(fear)h(of)f(causing)g
(the)h Fe(X)37 b Fl(lo)s(op)30 b(to)h(b)s(e)f(to)s(o)h(short)f(to)h
(supp)s(ort)e(go)s(o)s(d)h(optimization.)229 1749 y(Also,)i(note)f
(that)h(after)g(the)f(\014rst)f(in)m(v)m(o)s(cation)h(of)h(the)f(k)m
(ernel,)g Fe(X)39 b Fl(will)28 b(come)k(from)f(L1,)g(lea)m(ving)g
Fe(A)88 1862 y Fl(the)g(dominan)m(t)e(data)j(cost.)229
1974 y(A)m(t)47 b(presen)m(t,)i(SYMV)d(do)s(es)f(a)h(di\013eren)m(t)f
(blo)s(c)m(king)f(that)i(blo)s(c)m(ks)f(b)s(oth)g Fe(X)53
b Fj(and)45 b Fe(Y)65 b Fl(\(all)45 b(other)88 2087 y(routines)28
b(blo)s(c)m(k)g(only)g(one)h(dimension\),)e(so)h(that)i
Fe(A)e Fl(is)g(reused)g(b)s(et)m(w)m(een)h(calls)f(to)h(the)g(T)-8
b(ransp)s(ose)28 b(and)88 2200 y(NoT)-8 b(ransp)s(ose)31
b(k)m(ernels.)42 b(This)29 b(ma)m(y)i(ev)m(en)m(tually)g(c)m(hange)h
(as)f(greater)h(sophistication)d(is)h(ac)m(hiev)m(ed)i(\(as)88
2313 y(y)m(ou)37 b(migh)m(t)g(imagine,)h(y)m(ou)f(get)h(t)m(w)m(o)g(v)m
(ery)f(di\013eren)m(t)g(GEMV)g(k)m(ernels)f(if)g(one)h(is)f(exp)s
(ecting)h Fe(A)g Fl(from)88 2426 y(main)25 b(memory)-8
b(,)28 b(and)d(the)i(other)f(exp)s(ects)g Fe(A)g Fl(to)h(come)g(from)f
(L1,)h(as)g(in)d(this)h(case;)k(this)c(means)h(w)m(e)h(ma)m(y)88
2539 y(at)k(some)g(time)f(generate)i(a)f(sp)s(ecialized)d(L1-con)m
(tained)k(GEMV)f(k)m(ernel\).)229 2652 y(Note)e(that)e(the)g
Fe(\014)j Fl(=)25 b(0)i(case)h(m)m(ust)f(not)g(read)f
Fe(Y)20 b Fl(,)28 b(since)e(the)h(memory)g(ma)m(y)g(legally)f(b)s(e)g
(unitialized.)88 2895 y Ff(6.2)113 b(Sp)s(eeding)38 b(Up)f(GER,)g(GER)m
(U,)g(GER)m(C,)f(HER,)h(HER2,)f(SYR)h(and)h(SYR2)88 3067
y Fl(All)c(of)h(these)g(routines)f(rely)g(on)h(the)g(GER)g(primitiv)m
(e)e(for)i(their)f(p)s(erformance.)53 b(The)35 b(hand-written)88
3180 y(primitiv)m(es)28 b(tried)i(b)m(y)g(A)-8 b(TLAS)30
b(ma)m(y)h(b)s(e)f(found)f(in)231 3367 y Fg(ATLAS/tune/blas/ger/CASES.)
229 3555 y Fl(Most)34 b(of)e(the)g(discussion)e(of)i(the)g(GEMV)h
(primitiv)m(es)d(applies)g(to)j(the)g(GER)f(primitiv)m(es)e(as)i(w)m
(ell,)88 3668 y(so)h(I)g(assume)f(y)m(ou)h(ha)m(v)m(e)h(read)f(and)f
(are)h(familiar)d(with)i(the)h(concepts)g(discussed)e(ab)s(o)m(v)m(e.)
49 b(As)32 b(b)s(efore,)88 3781 y(the)e(routines)e(to)i(b)s(e)f(timed)g
(are)g(giv)m(en)h(in)e(a)h(k)m(ernel)g(description)f(\014le,)h
Fg(<pre>cases.dsc)p Fl(.)36 b(GER)30 b(do)s(es)88 3894
y(not)36 b(ha)m(v)m(e)h(a)g(transp)s(ose)e(case,)j(so)e(this)f(\014le)g
(\014rst)g(lists)f(the)i(n)m(um)m(b)s(er)f(of)h(GER)f(primitiv)m(es)f
(to)i(searc)m(h,)88 4007 y(follo)m(w)m(ed)30 b(b)m(y)h(that)g(man)m(y)f
(primitiv)m(e)e(lines)h(describing)f(them.)229 4120 y(GER)j(primitiv)m
(e)d(lines)h(are)h(of)h(the)f(form:)88 4307 y Fg(<flag>)46
b(<Xunroll>)g(<Yunroll>)f(<filename>)g("<author\(s\)>")225
4520 y Fh(\017)h Fg(<flag>)p Fl(:)39 b(is)29 b(an)h(in)m(teger)h
(\015ag)g(whic)m(h)e(is)g(ignored)h(at)h(the)f(momen)m(t)225
4707 y Fh(\017)46 b Fg(<Xunroll>)p Fl(:)38 b(is)29 b(the)i(unrolling)c
(of)j(the)h(lo)s(op)e(o)m(v)m(er)j(the)f(X)f(v)m(ector)i(\(i.e.)41
b(the)31 b(M-lo)s(op\))225 4895 y Fh(\017)46 b Fg(<Yunroll>)p
Fl(:)38 b(is)29 b(the)i(unrolling)c(of)j(the)h(lo)s(op)e(o)m(v)m(er)j
(the)f(Y)f(v)m(ector)i(\(i.e.)41 b(the)31 b(N-lo)s(op\))225
5083 y Fh(\017)46 b Fg(<filename>)p Fl(:)38 b(is)29 b(the)h(name)h(of)f
(the)h(C)f(source)h(\014le)e(for)h(the)h(primitiv)m(e.)225
5270 y Fh(\017)46 b Fg(<author\(s\)>)p Fl(:)37 b(author\(s\))31
b(name\(s\))1843 5591 y(28)p eop
%%Page: 29 29
29 28 bop 229 213 a Fl(The)30 b(API)h(for)f(the)g(ger)h(primitiv)m(e)d
(is:)88 400 y Fg(#if)47 b(defined\(SCPLX\))d(||)j(defined\(DCPLX\))231
513 y(#ifdef)g(Conj_)375 626 y(ATL_<pre>ger1c_a1_x1_yX)231
739 y(#else)375 852 y(ATL_<pre>ger1u_a1_x1_yX)231 965
y(#endif)88 1078 y(#else)231 1191 y(ATL_<pre>ger1_a1_x1_yX)88
1304 y(#endif)231 1417 y(\()375 1530 y(const)f(int)h(M,)333
b(/*)48 b(length)e(of)h(X)g(vector)f(*/)375 1642 y(const)g(int)h(N,)333
b(/*)48 b(length)e(of)h(Y)g(vector)f(*/)375 1755 y(const)g(SCALAR)g
(alpha,/*)g(ignored,)f(assumed)h(to)h(be)g(one)g(*/)375
1868 y(const)f(TYPE)h(*X,)237 b(/*)48 b(pointer)d(to)j(X)f(vector)f(*/)
375 1981 y(const)g(int)h(incX,)189 b(/*)48 b(ignored,)d(assumed)h(to)h
(be)g(one)g(*/)375 2094 y(const)f(TYPE)h(*Y,)237 b(/*)48
b(pointer)d(to)j(Y)f(vector)f(*/)375 2207 y(const)g(int)h(incY)237
b(/*)48 b(increment)d(of)i(Y)h(vector;)d(NOTE:)i(NOT)g(IGNORED)e(*/)375
2320 y(TYPE)h(*A,)238 b(/*)47 b(pointer)f(to)h(column-major)e(matrix)h
(*/)375 2433 y(const)g(int)h(lda,)237 b(/*)48 b(leading)d(dimension)h
(of)h(A,)g(or)g(row-stride)e(*/)231 2546 y(\);)229 2733
y Fl(Assumptions:)225 2921 y Fh(\017)h Fe(\013)25 b Fl(=)g(1)225
3109 y Fh(\017)46 b Fg(incX)g(=)i(1)225 3296 y Fh(\017)e
Fl(Column-ma)5 b(jor)28 b(storage)k(of)f(A)88 3536 y
Fj(6.2.1)106 b(GER)35 b(examples)88 3708 y Fl(A)c(simple)d(double)h
(precision)g(real)h(implemen)m(tation)f(of)h(GER)h(w)m(ould)e(then)h(b)
s(e:)88 3896 y Fg(void)47 b(ATL_dger1_a1_x1_yX\(const)41
b(int)47 b(M,)g(const)g(int)f(N,)i(const)e(double)g(alpha,)1234
4009 y(const)g(double)g(*X,)h(const)f(int)h(incX,)g(const)f(double)g
(*Y,)1234 4121 y(const)g(int)h(incY,)f(double)g(*A,)h(const)g(int)g
(lda\))88 4234 y({)231 4347 y(int)g(i,)h(j;)231 4460
y(register)e(double)g(y0;)231 4686 y(for)h(\(j=0;)g(j)g(<)h(N;)f(j++\))
231 4799 y({)375 4912 y(y0)g(=)g(Y[j*incY];)375 5025
y(for)g(\(i=0;)f(i)h(<)h(M;)f(i++\))g(A[i+j*lda])e(+=)i(X[i])f(*)i(y0;)
231 5138 y(})88 5251 y(})1843 5591 y Fl(29)p eop
%%Page: 30 30
30 29 bop 88 213 a Fl(Whic)m(h)30 b(w)m(e)h(can)g(test)g(and)f(time)g
(with:)88 400 y Fg(speedy.)46 b(make)h(dr1tstcase)e
(r1rout=../CASES/ATL_dge)o(r1_1)o(x1_1)o(.c)c(xu=1)47
b(yu=1)231 513 y(TEST)g(CONJ=0,)f(M=997,)g(N=177,)g(lda=1006,)f
(incY=1,)h(STARTED)231 626 y(TEST)h(CONJ=0,)f(M=997,)g(N=177,)g
(lda=1006,)f(incY=1,)h(PASSED)231 739 y(TEST)h(CONJ=0,)f(M=997,)g
(N=177,)g(lda=1006,)f(incY=3,)h(STARTED)231 852 y(TEST)h(CONJ=0,)f
(M=997,)g(N=177,)g(lda=1006,)f(incY=3,)h(PASSED)231 965
y(TEST)h(CONJ=0,)f(M=997,)g(N=177,)g(lda=1006,)f(incY=-3,)h(STARTED)231
1078 y(TEST)h(CONJ=0,)f(M=997,)g(N=177,)g(lda=1006,)f(incY=-3,)h
(PASSED)88 1304 y(speedy.)g(make)h(dr1case)f(r1rout=../CASES/ATL_dge)o
(r1_)o(1x1_)o(1.c)41 b(xu=1)47 b(yu=1)375 1417 y(dger_0)f(:)h
(31.168831)e(MFLOPS)375 1530 y(dger_0)h(:)h(31.788079)e(MFLOPS)375
1642 y(dger_0)h(:)h(31.578947)e(MFLOPS)231 1755 y(dger_0)i(:)g(31.51)f
(MFLOPS)229 1943 y Fl(A)31 b(simple)d(double)h(precision)g(complex)h
(implemen)m(tation)f(w)m(ould)g(b)s(e:)88 2131 y Fg(#ifdef)46
b(Conj_)231 2244 y(void)h(ATL_zger1c_a1_x1_yX)88 2356
y(#else)231 2469 y(void)g(ATL_zger1u_a1_x1_yX)88 2582
y(#endif)231 2695 y(\(const)g(int)f(M,)i(const)e(int)h(N,)g(const)f
(double)h(*alpha,)e(const)i(double)f(*X,)279 2808 y(const)h(int)f
(incX,)h(const)f(double)g(*Y,)h(const)g(int)f(incY,)h(double)f(*A,)h
(const)f(int)h(lda\))88 2921 y({)231 3034 y(const)g(int)g(M2)g(=)g
(M<<1,)g(N2)g(=)g(N<<1;)231 3147 y(int)g(i,)h(j;)231
3260 y(register)e(double)g(ry,)h(iy,)g(ra,)g(ia,)g(rx,)g(ix;)231
3486 y(for)g(\(j=0;)g(j)g(<)h(N2;)f(j)g(+=)g(2\))231
3598 y({)375 3711 y(ry)g(=)g(Y[incY*j];)375 3824 y(iy)g(=)g
(Y[incY*j+1];)375 3937 y(for)g(\(i=0;)f(i)h(<)h(M2;)f(i)g(+=)g(2\))375
4050 y({)518 4163 y(rx)g(=)g(X[i];)518 4276 y(ix)g(=)g(X[i+1];)518
4389 y(ra)g(=)g(rx)h(*)f(ry;)518 4502 y(ia)g(=)g(ix)h(*)f(ry;)518
4615 y(#ifdef)f(Conj_)661 4728 y(ra)h(+=)g(ix)h(*)f(iy;)661
4840 y(ia)g(-=)g(rx)h(*)f(iy;)518 4953 y(#else)661 5066
y(ra)g(-=)g(ix)h(*)f(iy;)661 5179 y(ia)g(+=)g(rx)h(*)f(iy;)518
5292 y(#endif)1843 5591 y Fl(30)p eop
%%Page: 31 31
31 30 bop 518 213 a Fg(A[i+j*lda])45 b(+=)i(ra;)518 326
y(A[i+j*lda+1])d(+=)j(ia;)375 439 y(})231 552 y(})88
664 y(})229 834 y Fl(Whic)m(h)30 b(w)m(e)h(test)g(in)f(time)g(b)m(y:)88
1003 y Fg(speedy.)46 b(make)h(zr1tstcase)e(r1rout=../CASES/ATL_zge)o
(r1_1)o(x1_1)o(.c)c(xu=1)47 b(yu=1)231 1116 y(TEST)g(CONJ=0,)f(M=997,)g
(N=177,)g(lda=1006,)f(incY=1,)h(STARTED)231 1229 y(TEST)h(CONJ=0,)f
(M=997,)g(N=177,)g(lda=1006,)f(incY=1,)h(PASSED)231 1342
y(TEST)h(CONJ=0,)f(M=997,)g(N=177,)g(lda=1006,)f(incY=3,)h(STARTED)231
1455 y(TEST)h(CONJ=0,)f(M=997,)g(N=177,)g(lda=1006,)f(incY=3,)h(PASSED)
231 1568 y(TEST)h(CONJ=0,)f(M=997,)g(N=177,)g(lda=1006,)f(incY=-3,)h
(STARTED)231 1681 y(TEST)h(CONJ=0,)f(M=997,)g(N=177,)g(lda=1006,)f
(incY=-3,)h(PASSED)231 1794 y(TEST)h(CONJ=1,)f(M=997,)g(N=177,)g
(lda=1006,)f(incY=1,)h(STARTED)231 1907 y(TEST)h(CONJ=1,)f(M=997,)g
(N=177,)g(lda=1006,)f(incY=1,)h(PASSED)231 2020 y(TEST)h(CONJ=1,)f
(M=997,)g(N=177,)g(lda=1006,)f(incY=3,)h(STARTED)231
2133 y(TEST)h(CONJ=1,)f(M=997,)g(N=177,)g(lda=1006,)f(incY=3,)h(PASSED)
231 2245 y(TEST)h(CONJ=1,)f(M=997,)g(N=177,)g(lda=1006,)f(incY=-3,)h
(STARTED)231 2358 y(TEST)h(CONJ=1,)f(M=997,)g(N=177,)g(lda=1006,)f
(incY=-3,)h(PASSED)88 2584 y(speedy.)g(make)h(zr1case)f
(r1rout=../CASES/ATL_zge)o(r1_)o(1x1_)o(1.c)41 b(xu=1)47
b(yu=1)375 2697 y(zger_0)f(:)h(39.024390)e(MFLOPS)375
2810 y(zger_0)h(:)h(38.709677)e(MFLOPS)375 2923 y(zger_0)h(:)h
(39.024390)e(MFLOPS)231 3036 y(zger_0)i(:)g(38.92)f(MFLOPS)88
3272 y Fj(6.2.2)106 b(GER)35 b(k)m(ernel)g(notes)88 3444
y Fl(As)h(in)e(GEMV,)j(GER)e(blo)s(c)m(ks)g Fe(X)43 b
Fl(so)36 b(that)g(it)f(is)g(reused)g(in)f(L1.)57 b(Since)34
b(the)i(dominan)m(t)f(direction)f(of)88 3557 y(the)f(lo)s(op)f(is)g
(exp)s(ected)h(to)g(b)s(e)f(do)m(wn)g(the)h(columns)e(of)i
Fe(A)p Fl(,)g Fg(incY)f Fl(is)f(not)i(restricted)g(to)g(1,)h(while)c
Fg(incX)88 3670 y Fl(is.)54 b(As)35 b(in)f(GEMV,)i(all)e(routines)g
(except)i(SYR2)f(blo)s(c)m(k)g(only)f(the)h(the)h Fe(X)42
b Fl(dimension,)34 b(while)f(SYR2)88 3783 y(blo)s(c)m(ks)d(b)s(oth,)g
(so)h(that)g Fe(A)f Fl(can)h(b)s(e)e(reused)h(in)f(L1.)88
4066 y Fk(7)135 b(A)44 b(quic)l(k)h(reference)h(to)g(A)-11
b(TLAS)42 b(programming)k(resources)88 4269 y Fl(A)-8
b(TLAS)33 b(has)g(a)h(quite)e(a)i(bit)e(of)h(programming)f
(infrastructure)g(whic)m(h)f(can)j(b)s(e)e(used.)49 b(The)32
b(routines)88 4382 y(in)27 b Fg(ATLAS/src/auxil)d Fl(represen)m(t)29
b(lo)m(w-lev)m(el)f(routines)f(whic)m(h)g(can)i(b)s(e)e(called)h(from)g
(an)m(ywhere)g(in)f(the)88 4495 y(A)-8 b(TLAS)30 b(co)s(de,)h(and)f
(are)h(protot)m(yp)s(ed)f(b)m(y)g(including)d(either)j
Fg(atlas)p 2475 4495 29 4 v 33 w(misc.h)f Fl(or)h Fg(atlas)p
3176 4495 V 33 w(aux.h)p Fl(.)229 4608 y(A)-8 b(TLAS)39
b(mak)m(es)g(fairly)e(hea)m(vy)i(use)f(of)h(macros)g(in)e(order)i(to)g
(ac)m(hiev)m(e)h(something)e(approac)m(hing)88 4720 y(precision)30
b(\(and)i(in)e(some)i(cases)g(t)m(yp)s(e\))h(indep)s(enden)m(t)c(co)s
(de.)45 b(An)m(y)31 b(routine)g(can)h(include)d(the)j(general)88
4833 y(macro)27 b(\014le)d Fg(atlas)p 744 4833 V 33 w(misc.h)g
Fl(in)g(order)i(to)g(get)h(access)g(to)f(these)g(macros.)40
b(Lo)m(w)26 b(lev)m(el)f(routines)f(are)i(com-)88 4946
y(piled)g(m)m(ultiple)f(times)i(with)f(di\013ering)f(mak)m(e\014le-con)
m(trolled)i(cpp)g(macros)h(\(call)f(these)h Fi(index)i(macr)-5
b(os)p Fl(\))88 5059 y(in)27 b(order)h(to)h(pro)s(duce)e(di\013ering)g
(implemen)m(tations.)38 b(The)28 b(index)f(macros)h(used)g(in)f(A)-8
b(TLAS)28 b(presen)m(tly)88 5172 y(include:)225 5342
y Fh(\017)46 b Fl(T)m(yp)s(e/precision)28 b(selection)i(macros,)h(c)m
(hoices)g(are:)1843 5591 y(31)p eop
%%Page: 32 32
32 31 bop 399 213 a Fl(1.)47 b Fg(SREAL)p Fl(:)29 b(single)g(precision)
f(real)i(is)g(exp)s(ected)399 359 y(2.)47 b Fg(DREAL)p
Fl(:)29 b(double)g(precision)f(real)i(is)g(exp)s(ected)399
505 y(3.)47 b Fg(SCPLX)p Fl(:)29 b(single)g(precision)f(complex)i(is)g
(exp)s(ected)399 651 y(4.)47 b Fg(DCPLX)p Fl(:)29 b(double)g(precision)
f(complex)i(is)g(exp)s(ected)225 839 y Fh(\017)46 b Fl(Scalar)30
b(alpha)f(case)i(selection)g(macros,)g(c)m(hoices)g(are:)399
1026 y(1.)47 b Fg(ALPHA1)p Fl(:)39 b(scalar)30 b Fe(\013)h
Fl(should)d(b)s(e)i(assumed)g(to)h(b)s(e)e(1)399 1173
y(2.)47 b Fg(ALPHAXI0)p Fl(:)37 b(only)28 b(v)-5 b(alid)27
b(for)i(complex)f(t)m(yp)s(es;)i(real)e(comp)s(onen)m(t)h(is)f(unkno)m
(wn,)g(but)g(imagi-)516 1285 y(nary)h(comp)s(onen)m(t)i(is)e(zero)399
1432 y(3.)47 b Fg(ALPHAX)p Fl(:)29 b(scalar)h(alpha)f(is)h(unkno)m(wn,)
f(and)h(m)m(ust)g(b)s(e)g(applied)e(as)i(a)h(v)-5 b(ariable)225
1619 y Fh(\017)46 b Fl(Scalar)30 b Fe(\014)35 b Fl(case)d(selection)e
(macros,)h(c)m(hoices)g(are:)399 1807 y(1.)47 b Fg(BETA0)p
Fl(:)39 b(scalar)30 b(b)s(eta)h(should)d(b)s(e)i(assumed)g(to)h(b)s(e)e
(0)399 1953 y(2.)47 b Fg(BETA1)p Fl(:)39 b(scalar)30
b(b)s(eta)h(should)d(b)s(e)i(assumed)g(to)h(b)s(e)e(1)399
2099 y(3.)47 b Fg(BETAXI0)p Fl(:)c(only)32 b(v)-5 b(alid)31
b(for)i(complex)g(t)m(yp)s(es;)h(real)e(comp)s(onen)m(t)i(is)d(unkno)m
(wn,)i(but)f(imagi-)516 2212 y(nary)d(comp)s(onen)m(t)i(is)e(zero)399
2358 y(4.)47 b Fg(BETAX)p Fl(:)29 b(scalar)h(b)s(eta)h(is)e(unkno)m
(wn,)g(and)h(m)m(ust)g(b)s(e)g(applied)e(as)j(a)g(v)-5
b(ariable)225 2546 y Fh(\017)46 b Fl(F)-8 b(or)23 b(complex)g(t)m(yp)s
(es)g(only)-8 b(,)24 b(A)-8 b(TLAS)22 b(de\014nes)g(the)h(index)f(v)-5
b(ariable)21 b Fg(Conj)p 2797 2546 29 4 v 56 w Fl(when)h(the)h
(conjugation)316 2659 y(of)30 b(the)h(transp)s(ose)f(setting)g(is)f
(needed)229 2846 y(Eac)m(h)48 b(of)f(these)h(index)d(macros)j(de\014ne)
e(a)h(n)m(um)m(b)s(er)f(of)h(help)s(er)e(macros)j(that)f(go)h(with)e
(them.)88 2959 y Fg(atlas)p 334 2959 V 33 w(misc.h)40
b Fl(should)g(b)s(e)h(examined)g(for)h(full)d(details.)74
b(F)-8 b(or)42 b(instance,)j(if)c Fg(SREAL)f Fl(or)i
Fg(DREAL)e Fl(are)88 3072 y(de\014ned,)i(the)f(t)m(yp)s(e-determinan)m
(t)g(macro)g Fg(TREAL)e Fl(is)h(de\014ned.)70 b(Similarly)-8
b(,)40 b(if)f Fg(SCPLX)g Fl(or)i Fg(DCPLX)e Fl(are)88
3185 y(de\014ned,)27 b(the)g(t)m(yp)s(e-determinan)m(t)g(macro)g
Fg(TCPLX)e Fl(is)h(de\014ned.)39 b(F)-8 b(or)27 b(a)g(simpler)e
(example,)i(the)g(precision)88 3298 y(macro)k(de\014nes)d
Fg(ATL_rone)p Fl(,)g(whic)m(h)h(corresp)s(onds)f(to)j
Fg(1.0f)d Fl(in)g(single)h(precision,)f(and)h Fg(1.0)g
Fl(in)f(double.)88 3411 y(A)g(great)h(man)m(y)f(of)g(these)h(help)s(er)
c(macros)k(are)f(designed)f(to)h(b)s(e)f(used)g(to)i(help)d(in)h
(resolving)g(names)g(in-)88 3524 y(dep)s(endan)m(t)f(of)i(t)m(yp)s(e.)
39 b(In)27 b(order)f(to)i(use)e(these)i(naming)e(macros,)i(w)m(e)g(use)
e(the)h(macro-joining)g(function)88 3637 y Fg(Mjoin\(Mac1,)45
b(Mac2\))p Fl(,)29 b(whic)m(h)g(results)g(in)h(the)g(joining)f(of)h
(the)h Fg(Mac1)e Fl(and)h Fg(Mac2)p Fl(.)229 3750 y(Y)-8
b(ou)27 b(can)f(examine)g(the)g(GEMV)h(k)m(ernel)f(implemen)m(tations)e
(for)i(examples)g(of)g(ho)m(w)g(this)f(w)m(orks.)39 b(In)88
3862 y(particular,)31 b(A)-8 b(TLAS)32 b(uses)g(the)g(same)h(implemen)m
(tation)e(for)g(single)g(and)h(double)e(precision)h(b)m(y)h(using)88
3975 y(these)g(macros,)f(and)g(recompiling)d(the)j(same)h(source)f
(with)e(di\013ering)g(index)h(macros.)43 b(Just)30 b(to)h(giv)m(e)h(a)
88 4088 y(quic)m(k)26 b(example,)g(the)g(index)e(macro)j(con)m
(trolling)d Fe(\014)31 b Fl(de\014nes)25 b(a)h(help)s(er)e(macro)i
Fg(BNM)f Fl(whic)m(h)g(corresp)s(onds)88 4201 y(to)31
b(the)g(correct)h(b)s(eta)e(name)g(for)h(the)f(gem)m(v)i(and)d(ger)i(k)
m(ernels.)40 b(Using)30 b(this)f(tric)m(k,)i(w)m(e)g(can)f(reduce:)88
4389 y Fg(#ifdef)46 b(BETA0)231 4502 y(#ifdef)h(Conj_)375
4615 y(void)f(ATL_dgemvNc_a1_x1_b0_y1)231 4728 y(#else)375
4840 y(void)g(ATL_dgemvN_a1_x1_b0_y1)231 4953 y(#endif)88
5066 y(#elif)h(defined)e(\(BETA1\))231 5179 y(#ifdef)i(Conj_)375
5292 y(void)f(ATL_dgemvNc_a1_x1_b1_y1)1843 5591 y Fl(32)p
eop
%%Page: 33 33
33 32 bop 231 213 a Fg(#else)375 326 y(void)46 b
(ATL_dgemvN_a1_x1_b1_y1)231 439 y(#endif)88 552 y(#elif)h(defined)e
(\(BETAXI0\))231 664 y(#ifdef)i(Conj_)375 777 y(void)f
(ATL_dgemvNc_a1_x1_bXi0_y1)231 890 y(#else)375 1003 y(void)g
(ATL_dgemvN_a1_x1_bXi0_y1)231 1116 y(#endif)88 1229 y(#else)231
1342 y(#ifdef)h(Conj_)375 1455 y(void)f(ATL_dgemvNc_a1_x1_bX_y1)231
1568 y(#else)375 1681 y(void)g(ATL_dgemvN_a1_x1_bX_y1)231
1794 y(#endif)88 1906 y(#endif)88 2094 y Fl(to:)88 2282
y Fg(#include)g("atlas_misc.h")88 2508 y(#ifdef)g(Conj_)231
2620 y(void)h(Mjoin\(Mjoin\(ATL_dgemvNc_a)o(1_x)o(1,BN)o(M\),_)o(y1\))
88 2733 y(#else)231 2846 y(void)g(Mjoin\(Mjoin\(ATL_dgemvN_a1)o(_x1)o
(,BNM)o(\),_y)o(1\))88 2959 y(#endif)88 3246 y Fk(8)135
b(Conclusion)88 3449 y Fl(As)29 b(y)m(ou)g(ha)m(v)m(e)g(seen,)g(this)f
(note)h(and)f(the)g(proto)s(cols)g(it)g(describ)s(es)f(ha)m(v)m(e)j
(plen)m(t)m(y)e(of)h(ro)s(om)f(for)g(impro)m(v)m(e-)88
3561 y(men)m(t.)41 b(No)m(w,)30 b(as)f(the)g(end-user)f(of)h(this)f
(function,)g(y)m(ou)h(ma)m(y)g(ha)m(v)m(e)h(a)g(naturally)d(strong)i
(and)f(negativ)m(e)88 3674 y(reaction)38 b(to)f(these)h(crude)e(mec)m
(hanisms,)i(tempting)f(y)m(ou)g(to)h(send)e(messages)i(decrying)e(m)m
(y)i(lac)m(k)f(of)88 3787 y(h)m(umanit)m(y)-8 b(,)29
b(decency)-8 b(,)29 b(and)f(legal)f(paren)m(tage)j(to)e(the)g(atlas)h
(or)f(atlas-comm)g(mailing)e(lists.)39 b(While)26 b(this)88
3900 y(is)k(quite)g(understandable,)f(k)m(eep)i(in)e(mind)g(that)i(I'm)
f(not)h(a)g(v)m(ery)g(understanding)d(guy)-8 b(,)32 b(and)e(am)g(also)
88 4013 y(a)j(gigan)m(tic)h(bab)m(y)e(that)h(p)s(outs)f(when)g(m)m(y)h
(tender)f(feelings)f(are)i(h)m(urt.)47 b(So,)34 b(the)f(prop)s(er)e
(bitc)m(h)h(format)88 4126 y(in)m(v)m(olv)m(es)225 4314
y Fh(\017)46 b Fi(First)34 b Fl(thanking)f(me)g(for)h(sp)s(ending)d(3)j
(w)m(eeks)g(in)e(hell)g(getting)j(things)d(to)j(their)d(presen)m(t)i
(crude)316 4427 y(state)225 4614 y Fh(\017)46 b Fi(Then)p
Fl(,)31 b(supplying)c(y)m(our)j(constructiv)m(e)h(ideas)229
4802 y(F)-8 b(or)29 b(a)g(higher)e(o)m(v)m(erview)i(of)f(things,)g
(scop)s(e)g(out)h(the)f(pap)s(er)f Fg(ATLAS/doc/atlas)p
3046 4802 29 4 v 31 w(over.ps)p Fl(,)g(whic)m(h)88 4915
y(is)44 b(a)g(hop)s(efully)e(so)s(on-to-b)s(e)i(published)d(A)-8
b(TLAS)44 b(pap)s(er)f(describing)f(the)i(ideas)g(b)s(ehind)d(A)-8
b(TLAS,)88 5028 y(including)27 b(sev)m(eral)k(that)g(are)g(touc)m(hed)g
(up)s(on)d(only)i(ligh)m(tly)f(in)g(this)g(note.)1843
5591 y(33)p eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF