From 6dd6de8e052da23ebd254828437f47d2d610a9c5 Mon Sep 17 00:00:00 2001 From: Rob van Nieuwpoort <nieuwpoort@astron.nl> Date: Wed, 24 Jun 2009 13:27:27 +0000 Subject: [PATCH] Bug 1198: performance results --- .gitattributes | 1 - doc/papers/2010/SPM/Makefile | 2 +- .../2010/SPM/figures/correlation-triangle.fig | 88 -- .../2010/SPM/figures/correlation-triangle.pdf | Bin 6558 -> 9631 bytes .../2010/SPM/figures/correlation-triangle.svg | 1043 +++++++++-------- doc/papers/2010/SPM/spm.tex | 156 +-- 6 files changed, 604 insertions(+), 686 deletions(-) delete mode 100644 doc/papers/2010/SPM/figures/correlation-triangle.fig diff --git a/.gitattributes b/.gitattributes index 35b3d0bdb39..00f10aea77e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1526,7 +1526,6 @@ doc/papers/2009/SC-09/transpose.fig -text doc/papers/2010/SPM/IEEEbib.bst -text doc/papers/2010/SPM/Makefile -text doc/papers/2010/SPM/figures/LBA-small.jpg -text -doc/papers/2010/SPM/figures/correlation-triangle.fig -text doc/papers/2010/SPM/figures/correlation-triangle.pdf -text doc/papers/2010/SPM/figures/correlation-triangle.svg -text doc/papers/2010/SPM/figures/pastedpic_11252008_163347.png -text diff --git a/doc/papers/2010/SPM/Makefile b/doc/papers/2010/SPM/Makefile index 8368724ca36..eba742c283b 100644 --- a/doc/papers/2010/SPM/Makefile +++ b/doc/papers/2010/SPM/Makefile @@ -2,7 +2,7 @@ TEX_SOURCES = spm.tex BIB_SOURCES = spm.bib -FIG_SOURCES = figures/correlation-triangle.fig +FIG_SOURCES = JGR_SOURCES = diff --git a/doc/papers/2010/SPM/figures/correlation-triangle.fig b/doc/papers/2010/SPM/figures/correlation-triangle.fig deleted file mode 100644 index 2f05d430cde..00000000000 --- a/doc/papers/2010/SPM/figures/correlation-triangle.fig +++ /dev/null @@ -1,88 +0,0 @@ -#FIG 3.2 Produced by xfig version 3.2.5 -Landscape -Center -Inches -Letter -100.00 -Single --2 -1200 2 -0 32 #c0ffc0 -0 33 #ffffc0 -0 34 #c0c0ff -0 35 #c0c0c0 -0 36 #f0c0c0 -2 1 0 3 0 35 40 -1 -1 0.000 0 0 -1 1 0 2 - 2 1 3.00 150.00 150.00 - 6000 9075 6675 9075 -2 1 0 3 0 35 40 -1 -1 0.000 0 0 -1 1 0 2 - 2 1 3.00 150.00 150.00 - 9900 4275 9900 3600 -2 1 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 3 - 2400 8100 2400 7500 9000 7500 -2 1 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 3 - 3000 8100 3000 6900 9000 6900 -2 1 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 3 - 3600 8100 3600 6300 9000 6300 -2 1 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 3 - 4800 8100 4800 5100 9000 5100 -2 1 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 3 - 5400 8100 5400 4500 9000 4500 -2 1 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 3 - 6000 8100 6000 3900 9000 3900 -2 1 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 3 - 7200 8100 7200 2700 9000 2700 -2 1 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 3 - 7800 8100 7800 2100 9000 2100 -2 1 0 2 0 7 40 -1 -1 0.000 0 0 -1 0 0 3 - 8400 8100 8400 1500 9000 1500 -2 1 0 5 0 7 40 -1 -1 0.000 0 0 -1 0 0 3 - 4200 8100 4200 5700 9000 5700 -2 1 0 5 0 7 40 -1 -1 0.000 0 0 -1 0 0 3 - 6600 8100 6600 3300 9000 3300 -2 3 0 5 0 31 60 -1 20 0.000 0 0 -1 0 0 27 - 9000 8100 9000 900 8400 900 8400 1500 7800 1500 7800 2100 - 7200 2100 7200 2700 6600 2700 6600 3300 6000 3300 6000 3900 - 5400 3900 5400 4500 4800 4500 4800 5100 4200 5100 4200 5700 - 3600 5700 3600 6300 3000 6300 3000 6900 2400 6900 2400 7500 - 1800 7500 1800 8100 9000 8100 -2 2 0 5 0 4 50 -1 20 0.000 0 0 -1 0 0 5 - 6600 3300 9000 3300 9000 5700 6600 5700 6600 3300 -4 1 0 40 -1 18 30 0.0000 4 360 360 2100 7950 A\001 -4 1 0 40 -1 18 30 0.0000 4 360 360 2700 7350 A\001 -4 1 0 40 -1 18 30 0.0000 4 360 360 3300 6750 A\001 -4 1 0 40 -1 18 30 0.0000 4 360 360 3900 6150 A\001 -4 1 0 40 -1 18 30 0.0000 4 360 360 4500 5550 A\001 -4 1 0 40 -1 18 30 0.0000 4 360 360 5100 4950 A\001 -4 1 0 40 -1 18 30 0.0000 4 360 360 5700 4350 A\001 -4 1 0 40 -1 18 30 0.0000 4 360 360 6300 3750 A\001 -4 1 0 40 -1 18 30 0.0000 4 360 360 6900 3150 A\001 -4 1 0 40 -1 18 30 0.0000 4 360 360 7500 2550 A\001 -4 1 0 40 -1 18 30 0.0000 4 360 360 8100 1950 A\001 -4 1 0 40 -1 18 30 0.0000 4 360 1605 5100 9225 station\001 -4 1 0 40 -1 16 30 0.0000 4 345 270 2100 8625 0\001 -4 1 0 40 -1 16 30 0.0000 4 345 270 2700 8625 1\001 -4 1 0 40 -1 16 30 0.0000 4 345 270 3900 8625 3\001 -4 1 0 40 -1 16 30 0.0000 4 345 270 4500 8625 4\001 -4 1 0 40 -1 16 30 0.0000 4 345 270 5100 8625 5\001 -4 1 0 40 -1 16 30 0.0000 4 345 270 5700 8625 6\001 -4 1 0 40 -1 16 30 0.0000 4 345 270 6300 8625 7\001 -4 1 0 40 -1 16 30 0.0000 4 345 270 6900 8625 8\001 -4 1 0 40 -1 16 30 0.0000 4 345 270 7500 8625 9\001 -4 1 0 40 -1 16 30 0.0000 4 345 540 8100 8625 10\001 -4 1 0 40 -1 16 30 0.0000 4 345 270 3300 8625 2\001 -4 1 0 40 -1 18 30 1.5708 4 360 1605 10050 5175 station\001 -4 0 0 40 -1 16 30 0.0000 4 345 270 9225 7950 0\001 -4 0 0 40 -1 16 30 0.0000 4 345 270 9225 7350 1\001 -4 0 0 40 -1 16 30 0.0000 4 345 270 9225 6150 3\001 -4 0 0 40 -1 16 30 0.0000 4 345 270 9225 4950 5\001 -4 0 0 40 -1 16 30 0.0000 4 345 270 9225 4350 6\001 -4 0 0 40 -1 16 30 0.0000 4 345 270 9225 3750 7\001 -4 0 0 40 -1 16 30 0.0000 4 345 270 9225 3150 8\001 -4 0 0 40 -1 16 30 0.0000 4 345 270 9225 2550 9\001 -4 0 0 40 -1 16 30 0.0000 4 345 270 9225 5550 4\001 -4 0 0 40 -1 16 30 0.0000 4 345 270 9225 6750 2\001 -4 0 0 40 -1 16 30 0.0000 4 345 540 9225 1950 10\001 -4 0 0 40 -1 16 30 0.0000 4 345 540 9225 1350 11\001 -4 1 0 40 -1 16 30 0.0000 4 345 540 8700 8625 11\001 -4 1 0 40 -1 18 30 0.0000 4 360 360 8700 1350 A\001 diff --git a/doc/papers/2010/SPM/figures/correlation-triangle.pdf b/doc/papers/2010/SPM/figures/correlation-triangle.pdf index 7f09c44dd1adee0b07988f8c0ea05f589a5150fa..72721e6fd0f263fa4515e0c9fee7fc035c9ce1f8 100644 GIT binary patch literal 9631 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 literal 6558 zcmY!laB<T$)HC5yJ^rSD5tpfgfkJ*#7MG2UzE5gidP#<YnSy~rkiJ`HPDyH!g1%c$ zVo9n?YI1%`s+}EIaY<2XVlG$3oVTIA`ND<*dw+-ja0|-ZE?51hl!a4KQSa=!BaDR( zt;-fH(a2T(XZKiAfA_sMXF+y8jnGeNf3F#TezsUWx9Y;Onpf|?2FAWybkAO6)9)um zPD_q|uWmgTEi3eDu|q!3tL7rh?GnsJe0i<8Njb^gvD;X0^Ju?ePJSPLW0OAj&ZA}< z^*!=hC)P3^6J`6x%AnhJV&9^C#cMp#87li#x!yc_*0kxGy-4=z^8A0Nzw7+WySiYB z;>yn!^4}Oc-1fcOFVb0GY_vj{^F42*`?>>;6OV8oa6j7ZJ7KH7>qg6#CcdVI#}6Mb zH?V#&`CMhy8`US@#eem=EMB$wQc2vpuYog~cP)ze)_eM@?PPVEV%t>h@c%boZ$B@< zy1Dy`w8XD~T~l?Z%gzn_8y*qizxGn>Id!fl7w&xbR$q2QrrTrcxvBa_Ynd|itskFg zEAI2yxW72?qTb{$OH)&u#Lu2S9P{zOUcD)<*STFkC<H6bd3u1u^Mk_TaL;bdl%S){ zXVy-brmV9hMEOzJnk7g77_WTfXy)mgyD_9irDB3<h-Y{2ktJR1Hxnm&e6|t}I`C30 zX!3Rs-@=UnDpf1&Di36T>0YbW_)}}zOtGV$jSqem*Irrg_N#u{mfos8E2UXY9QyAy z_HA^xmAm@vY1yB!MT_=-{JcN4Ol-sVW3TyQU)ajq*wj`1`So|5O#C~I@RRG9OZG0! zoPOOt=ghY5DT|7CH0s`EUdCVec-iv2X5%l$=4TAf8Jso9w>~p7;a<bdI+^=gTJs;C zSaZaLGw#T{u2(aH{onfLv-;@#{3)}HOL3Xqxvz$;X=<?!Iz>@B*CX~NwjJy0ohqd* z&MlPs(Ql%jzLytkRFg=I*P}{N4);qJXMJEOj8wFo+4^BGZ)#3DoA~#y9=G3l{biYB z`eb5iUJ5j|rsk!9QaC7GgK2X!E~t<RBJqb*7NqJ2B&Mh8`=+L3COYL;C`2157$}$; zfUrp{mwrHEQEFa^f-xw2aOnr77U!21C8rkK*yslo<tGQHmPG3ZxVS0khon}N#B%Ao zR+P90mn4>?Di|6;w7BKxl_(fO^xN5S={x7=m89mC6f1!8U=Wv`9n4uEB_NmD*eK|O z+@%0^Sh0e>cV<elLNpi1*+E>f3i{6Zr641bv>KxNNI~B@u_Q4kKOJTS$mk$0ec#lQ z#FWI6L<K`os36;Ij%onH8(jMS0lo@`c6QLP1N#c%O8p>nE|9(;gcrcxgvlBja2bNa zGDttjg3AIF7)T015>SOsiN&d)K+<>eaCC9?()LKrDN8NMOit7XiMpf~Cl_TFl;jsF z7=pYR1P&Xp6qmkRW>Im8b4Fs3f{BH`Pa>3UYOWuinNpHb9L;5FYNkL021Q(6a(+r? zUb=pGW}ahSai%MbA6%ML0!k&IC^1C%0OTQb4}^vW1%x{xJfQ28pOXT1Dv~cOK_P+N z6K19ePZ%1S!F-`$ZUjn8pdiDFxv+{Vz(u(Xz+nLAgJq1&K|X+pnHd@?m>C*E%>jj% zv9U23VFHdIXrO?C3(f0bu3utqD)yLma>}oWHc-$tGFC7(GEgu#u#5%OL+Ql|W~QcQ z7F_y{#mS(oXl`K1rSF_r;E|e{o>2l)$E6PnUyz)xkujIPXGvmCX0l^mdQPf>0hfMo zNosDGg1I@DzHer6ab{jRIB_T#nOkt_gVIiLYKewE*ew0D%(7JdwEWT{{k+V)RQ>$C zRQ=-AveZ2N;>-&Dl8mC%RQ;0jeEq7_qI^xTZ`?9-QjHZ1!C4cLHo$ynI6!JtkVjw@ zDwjS=l5&RCz=nn<=5}__(yL-l=%iYo;Bbj!=a&}jWZLDpv!mgT^;r=erl;PkHG2#M zJ+vdXu&^C=(hkuN$ZULAax-bp?Bo5qfj4;A*bF7^DjBqDKKPKVl;^zsN1<b9_S)c< z%sZ35&pIr>+hbbl|2>w^ZQq~#{N%fx$fqw3BCbDEB3h!l4@YIq+PQK`fEU;231V6s zoU^K?zTYbFa+cirqjg+wp5K&uR;j|U?^AnhzQf(w9*%+XZ|o<9rLJDTZQ4}pA054I zdpxFUz1rUwwfN!()vy2eeRv=B=GrE&y3U#vTRB3vad|IIHl45L&)u|jioWox+^1#t zQp}>y7~k(vJGg18|8}mh*=tu#>-Xq>@;E8^>glJGcASd}3`%}p>^rqA?zps0s%g{8 zU-iB%6Z|iAO`R1{8dKw><n%evAgaM>f<2dmmq<s1NJ~vBONU$Oin&o<rUB<|o>kqj zStgRNS$2T)jitX-K}SKTO#aW<B~@~c+oKh0wYF}!-RQZ~QQ+DmQ?beGEcWU#3X2Kf zU#yv4GPh09@d!_gpB+12(^dbDqO)w#^IC7Sube(_?*Zo>xBq;NYWp$S<=aCCzmS-+ zYg)bkekEUj5UQ@u{YWhHl;_;3TB623ZoWLl;^`@@dvmUzQcsHd=PB=+cDYYr=S)aV z<DIvMx6E+C;ki%S_7=@tKWB>5Qp-0U{<k%4&NL`FsxTh0kMkCpnVY)(9)I}0m{h&9 z7uzN*&@}yUz<*~WZ@Ay1i<h)#>9rYLIB@T!uHShb4L@Jq7n1w#T`!)k{CD1|>FW;O znX0|1_-g0P>Bo<=>+jqVS=-Fv{C$Prcb@r-9!aw~ip^yO#6F%qclmnVj*D-O97y`G zc7OJ+w0&#r7arx|jNLY+K;?!kZ{y+GT=DZo)t*`FvN*3j_Kme(Z!DmZn<&q-w%0Ra zxxbH5+{^<0e?|Yd-sw>33fV4gb%!fsI%DdiH>b|Bx>mW1sC|~)l-;AD$TiKDLG?|` zhgtSq^?dj5%)dOZQF86`BbK6u6BaFcI`Lv_a01KYot>T6&%{3szVIT*VeyvvbML*c zn!5j9v_i;TKA~-MFIJxSu~=&SUBgqE{XxUzx$~Umf4xj;|NQ4O_rdx&3;U+IKf3-d zT6y`(%yJXv)rH5xip#b>ef;SBWeM@x1>a9U?p?d~ZhAj&LR!v+36pj|wT+b&pX{y_ zmUHTcYm&GJlP&kAuY7NIh$|GnE2-@CPmu1&VZOWZeD<dO7Mgj@hHjxZeixaG`^%fi z+`F^o>y=ygPpLm$qFec@MWDR0{!*de&qvpj?|-|`(^$FM%|jz{&LY)S=MTkx+4rtF zm-oI&`PVJ6M|vvOy_oyw7uV<ZIe&!{`|I>STa^k}YQ3DLDKXiw$I-}pQtX63-(M(Y z22V5JX`K6^>sy<=dt{KWvuVudS*CA96pwj&u1?k2HgiMOg<~%j*8l$Ua^L$|DN8#K zu5rzO{vz~bYi#n?P4AC=ZC@R=t#<#%X$ES)<No~7k6^3$Vk|T*{#T$Y=XE~TxC`Fr zi??{`o?VcCZR@2)=bhs}a@+53Z~ya5=?nj+iKf>;?Gb1x1g-QzRTi{33jtMysP!_q zAOsidxa&WpvfbRkSi#%~UbY(=8yXszAPRRQ)WRLaC0w{08knM$?xqF?T>25vD#FwR zWN1cW5xA&#)KApU)X&q;*DuyDK`F+;Ei$BH9K?tEoA_ef!q61C6c4QS2o997D=#j0 zzMgeTb@83P#?xL)**m2s{gl{y#^dx0$2GZUuikAg+q{-%j#$d_<<q*2*3aB)a%jSV zSu^)?XnFnD?Cy9qUrEDh)qUCJi;R^P)${HDJokOgpMCEi2Q+aN%9z(p3|>>}mA6}W z_YHNcM;CZfjh6caYG!6B9o0&f^OcIa_AOE7;_6Pjhc$0fjbsd+Dr{KP6-<w_es}k( z`FFu=`)apCGgpU&`OmjBel2fgZEr81&-J(V;L>vqx1SyrGrMBtI{*ITFJ7MuIg`5= z-R_G`IuS2?z^wi7%Z~c!T;aLV8?Wl_`db&TdroI&-}5uGOs!|jexA15cJ?;*f~9Ar z51cNj`Tbv@WkT7)>*5n~@>-TH;@ZL#x-fKwgs!7inyl&qr7InB#ZT|pg>KRcznR{V zt7f#MLD28?1l3|MVISc|C9~LyDymwZI&fD={d{@R!OWh4XC3omhwxAG4_6&qz%X&D zjK`-_C;1r<yB!b?{w1%q_fUUane5eNJ$A45fBSN9sjj#07hUJNOvTKP!K-xRUa#LU zJLpqf#>^HLsUJL2@3@prn8Oa|KHcT;S$E3f)GNPQl{6am7(Pf))H(adkNYh93O9+p znZDaYri<!E7#o?HS$w*a6VRp-a4<ZeFi<VzXv>u5F0Txxx_1U=6|81W%U+rlzWPR7 zb{_vW(>u2~Kd%m6f5rXP$+Ej*$NN<E@{3hcR%PG4z3aPD^5^!<N4twoD4##EH@Mce z);2wVlA=-2<@j5Ur`dvKCl+v9F5Z1bncrroOhom8l!on>%zu1qtp0oau;oGlBaLN} z*XAVtYCHdS``-8Otgc*2{k7!o-77oneM)9aM=eg<A;_QjBA-M2#yimo%fhT~wdBsN z_M60QC2^@~)eF6?0jHaavT_U#rtJHf_xxqzqTRK2Pq<9qtjacFKim@WTKn)yi;!5? zv<bZGb7KF!TWj7F_^IKJrMZDeP5UABvX=_o%Ud4^a=nrEx?a8e*SfhA-@E%<Ox}Ce zoqt}|%#?<_YcI47iu@nxy;<Yc^*HsDp+A#xa>``KS0PoY8dI*9ewr|Y<E7_>3ZM1u zUmpJ|<oL_R_M_Duv*ZDHRG?W9T=c-YFo;G}gs%_01!ZE2$a^;S6$OdO*{LN8NvY|X zdA92BckfqM$V{<S4>$ES@GWpo&B*kqDoPEm@(W3>%1*XSQMb3_vawH0$xlkvtw=1; zO#=^x6f2|_C)+AH2l==uffQ6&Rpb`rrj{fsROII56<bx<s)Myy<rQ0jg!R=Gz)DK8 zZPg=u0~AW~^K-H@OB9UsEcFa^4UKga(uxvuQ_J&<vK0*V%+&3;Y>HCStb$zJpavGD zq}i%xl#~=$>Fbx5m+O@q>*W`v>l<2HTIw4Z=^Gj87Nw-=7FXt#Bv$C=6)USl^<_rD zwdED-f!(B+oS&<o8KG~eXP^(W2vnMaI#ikYc?uwl6O-~wOKjCsO;XL14NcN?EiF=v zbPWwtEp-hH3=DKlEmD(BQd3hbk`2vZHWeVb5XGv3lr()qJ!5@!g@TkctAL{Xl+xtX zB3pI$03QYSjQrvfNMBCDLeI=ZT_5UmDmbVjw*b4}D-sK!p0}yUEwJ*<PsvQHbV)2p zwKFm>u+%j$(={>)F*LR^wXiZa)iyA)GBB{wM^niK*6Li83K|k4LMxI=B(3>HA^G_^ zc4?XEMk%Rf3Sp^5#h@54)-zHFNGwUt$Vn|r%~3Fg*bX)Vs>4Pf6iY~fM8#lBEb#Tk zA8@(3p!5t<XXTQgT$-DjSK{eHWNM*e1g9j!omo&?lmpHXDarb&IjJBQ73&-78S1Mm zq$FFV<rn29me{H%78K-UCMT9;=I7}bq@=0a*`y>}m1LIWq}qYAn`2H1gprd8%05;( ziFxU^>J_>vscDI&IVI|#h$<~gE!I!YFDgpS0UM-SQk0np>Q(BcWu`--B`4Dk!T_76 zkFX;p*(w>7V)Bb1)&!>(LKr!jc18I~4rTe3iRr0D3Nac%`AG_8iFpcsnW?4a1^M|! zB|17fF`5u#;pT(&gUpAUiX~Zqg@Rn%?6_?7D`3Tx9hU-?0QC$)l+CGmDYok6ppqA3 z<PJ3E0WJDrC5Z;Mf<%)`ADmw@^YcJCTf@Z)l(!Acj7$uTO)bFLTHU}vU6V`SH$R1d ziV#o=(MZco#~b%B8}o}mO7Z4rO)h=M(vpn)A`PNqT@yagR#B9i#$}*jXwC&Hh9MX< z5Mpeqkfs0=v$Ql&081(4!Ng20K%+1qL4=rrrLiHpIs<bH47~;hhNhV6%rNvC8kl0J zGc?9jXKZL}jBcKxp_w^`n3*xAn1Q7khB`wdOfgFX4EGruWBSd+$lMZPUP)16W=?7m z7ig?CII}8M!O&bmKPW%HL;*a;sG#qemzJ*pN`XOK`kpQd(KZHdj+Q3IMvevsmS!eS wZsw*Yj?PX-1_q8shDL@4Muv8TRm6fuY>P`0i%P(eYi3|(%B8C6>hHz{006{;!2kdN diff --git a/doc/papers/2010/SPM/figures/correlation-triangle.svg b/doc/papers/2010/SPM/figures/correlation-triangle.svg index 8c07803588b..981cb9c2397 100644 --- a/doc/papers/2010/SPM/figures/correlation-triangle.svg +++ b/doc/papers/2010/SPM/figures/correlation-triangle.svg @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Creator: fig2dev Version 3.2 Patchlevel 5 --> -<!-- CreationDate: Tue Nov 25 14:11:34 2008 --> +<!-- CreationDate: Wed Jun 24 14:57:21 2009 --> <!-- Magnification: 1.000 --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" @@ -10,16 +10,16 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="6.4in" - height="6.5in" - viewBox="1746 1446 7719 7794" + width="6.9in" + height="7.0in" + viewBox="1746 846 8319 8394" id="svg2" sodipodi:version="0.32" inkscape:version="0.46" sodipodi:docname="correlation-triangle.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape"> <metadata - id="metadata143"> + id="metadata121"> <rdf:RDF> <cc:Work rdf:about=""> @@ -30,18 +30,18 @@ </rdf:RDF> </metadata> <defs - id="defs141"> + id="defs119"> <inkscape:perspective sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 292.5 : 1" + inkscape:vp_x="0 : 315 : 1" inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="576 : 292.5 : 1" - inkscape:persp3d-origin="288 : 195 : 1" - id="perspective145" /> + inkscape:vp_z="621 : 315 : 1" + inkscape:persp3d-origin="310.5 : 210 : 1" + id="perspective123" /> </defs> <sodipodi:namedview - inkscape:window-height="1125" - inkscape:window-width="1920" + inkscape:window-height="726" + inkscape:window-width="645" inkscape:pageshadow="2" inkscape:pageopacity="0.0" guidetolerance="10.0" @@ -52,495 +52,546 @@ pagecolor="#ffffff" id="base" showgrid="false" - inkscape:zoom="1.5264957" - inkscape:cx="288" - inkscape:cy="292.5" + inkscape:zoom="0.78412698" + inkscape:cx="310.5" + inkscape:cy="315" inkscape:window-x="0" - inkscape:window-y="25" + inkscape:window-y="49" inkscape:current-layer="svg2" /> - <rect - id="rect2449" - style="fill:#6c6753;stroke:#000000;stroke-width:60;stroke-linecap:butt;stroke-linejoin:miter" - rx="0" - height="1800" - width="1200" - y="4497.5557" - x="4803.749" /> - <rect - id="rect2447" - style="fill:#c8c4b7;stroke:#000000;stroke-width:60;stroke-linecap:butt;stroke-linejoin:miter" - rx="0" - height="600" - width="600" - y="3892.5679" - x="5421.3672" /> - <rect - id="rect6" - style="fill:#6c6753;stroke:#000000;stroke-width:60;stroke-linecap:butt;stroke-linejoin:miter" - rx="0" - height="1800" - width="1200" - y="6300" - x="7200" /> - <rect - id="rect8" - style="fill:#6c6753;stroke:#000000;stroke-width:60;stroke-linecap:butt;stroke-linejoin:miter" - rx="0" - height="1800" - width="1200" - y="6300" - x="6000" /> - <rect - id="rect10" - style="fill:#6c6753;stroke:#000000;stroke-width:60;stroke-linecap:butt;stroke-linejoin:miter" - rx="0" - height="1800" - width="1200" - y="6300" - x="4800" /> - <rect - id="rect12" - style="fill:#6c6753;stroke:#000000;stroke-width:60;stroke-linecap:butt;stroke-linejoin:miter" - rx="0" - height="1800" - width="1200" - y="6300" - x="3600" /> - <polygon - id="polygon14" - style="fill:#c8c4b7;stroke:#000000;stroke-width:60;stroke-linecap:butt;stroke-linejoin:miter" - points="2400,8100 2400,6900 3000,6900 3000,6300 3600,6300 3600,8100 2400,8100 " /> - <rect - id="rect16" - style="fill:#c8c4b7;stroke:#000000;stroke-width:60;stroke-linecap:butt;stroke-linejoin:miter" - rx="0" - height="600" - width="600" - y="7500" - x="1800" /> - <polygon - id="polygon18" - style="fill:#c8c4b7;stroke:#000000;stroke-width:60;stroke-linecap:butt;stroke-linejoin:miter" - points="3600,6300 3600,5700 4200,5700 4200,5100 4800,5100 4800,6300 3600,6300 " /> - <rect - id="rect24" - style="fill:#6c6753;stroke:#000000;stroke-width:60;stroke-linecap:butt;stroke-linejoin:miter" - rx="0" - height="1800" - width="1200" - y="4500" - x="6000" /> - <rect - id="rect26" - style="fill:#6c6753;stroke:#000000;stroke-width:60;stroke-linecap:butt;stroke-linejoin:miter" - rx="0" - height="1800" - width="1200" - y="4500" - x="7200" /> - <rect - id="rect28" - style="fill:#6c6753;stroke:#000000;stroke-width:60;stroke-linecap:butt;stroke-linejoin:miter" - rx="0" - height="1800" - width="1200" - y="2700" - x="7200" /> - <polygon - id="polygon30" - style="fill:#c8c4b7;stroke:#000000;stroke-width:60;stroke-linecap:butt;stroke-linejoin:miter" - points="6000,4500 6000,3300 6600,3300 6600,2700 7200,2700 7200,4500 6000,4500 " /> - <polygon - id="polygon32" - style="fill:#c8c4b7;stroke:#000000;stroke-width:60;stroke-linecap:butt;stroke-linejoin:miter" - points="7200,2700 7200,2100 7800,2100 7800,1500 8400,1500 8400,2700 7200,2700 " /> - <polyline - id="polyline34" - style="stroke:#000000;stroke-width:30;stroke-linecap:butt;stroke-linejoin:miter" - points="6000,9075 6525,9075 " /> - <polygon - id="polygon36" - style="fill:#000000;stroke:#000000;stroke-width:30" - points="6490,9150 6678,9075 6490,9000 6528,9075 6490,9150 " /> - <polyline - id="polyline38" - style="stroke:#000000;stroke-width:30;stroke-linecap:butt;stroke-linejoin:miter" - points="9300,4275 9300,3749 " /> - <polygon - id="polygon40" - style="fill:#000000;stroke:#000000;stroke-width:30" - points="9375,3784 9300,3597 9225,3784 9300,3747 9375,3784 " /> - <polyline - id="polyline42" - style="stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter" - points="3000,6900 3000,8100 " /> - <polyline - id="polyline44" - style="stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter" - points="2400,7500 8400,7500 " /> - <polyline - id="polyline46" - style="stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter" - points="3000,6900 8400,6900 " /> - <polyline - id="polyline48" - style="stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter" - points="4200,5700 4200,8100 " /> - <polyline - id="polyline50" - style="stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter" - points="5400,4500 5400,8100 " /> - <polyline - id="polyline52" - style="stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter" - points="6600,3300 6600,8100 " /> - <polyline - id="polyline54" - style="stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter" - points="7800,2100 7800,8100 " /> - <polyline - id="polyline56" - style="stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter" - points="4200,5700 8400,5700 " /> - <polyline - id="polyline60" - style="stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter" - points="6000,3900 8400,3900 " /> - <polyline - id="polyline62" - style="stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter" - points="5400,4500 6000,4500 " /> - <polyline - id="polyline64" - style="stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter" - points="6600,3300 8400,3300 " /> - <polyline - id="polyline66" - style="stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter" - points="7800,2100 8400,2100 " /> - <text - style="font-size:360px;font-style:normal;font-weight:bold;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text68" - font-size="360" - font-weight="bold" - font-style="normal" - y="7950" - x="2100" - xml:space="preserve">A</text> - <text - style="font-size:360px;font-style:normal;font-weight:bold;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text70" - font-size="360" - font-weight="bold" - font-style="normal" - y="7350" - x="2700" - xml:space="preserve">A</text> - <text - style="font-size:360px;font-style:normal;font-weight:bold;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text72" - font-size="360" - font-weight="bold" - font-style="normal" - y="6750" - x="3300" - xml:space="preserve">A</text> - <text - style="font-size:360px;font-style:normal;font-weight:bold;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text74" - font-size="360" - font-weight="bold" - font-style="normal" - y="6150" - x="3900" - xml:space="preserve">A</text> - <text - style="font-size:360px;font-style:normal;font-weight:bold;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text76" - font-size="360" - font-weight="bold" - font-style="normal" - y="5550" - x="4500" - xml:space="preserve">A</text> - <text - style="font-size:360px;font-style:normal;font-weight:bold;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text78" - font-size="360" - font-weight="bold" - font-style="normal" - y="4950" - x="5100" - xml:space="preserve">A</text> - <text - style="font-size:360px;font-style:normal;font-weight:bold;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text80" - font-size="360" - font-weight="bold" - font-style="normal" - y="4350" - x="5700" - xml:space="preserve">A</text> - <text - style="font-size:360px;font-style:normal;font-weight:bold;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text82" - font-size="360" - font-weight="bold" - font-style="normal" - y="3750" - x="6300" - xml:space="preserve">A</text> - <text - style="font-size:360px;font-style:normal;font-weight:bold;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text84" - font-size="360" - font-weight="bold" - font-style="normal" - y="3150" - x="6900" - xml:space="preserve">A</text> - <text - style="font-size:360px;font-style:normal;font-weight:bold;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text86" - font-size="360" - font-weight="bold" - font-style="normal" - y="2550" - x="7500" - xml:space="preserve">A</text> - <text - style="font-size:360px;font-style:normal;font-weight:bold;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text88" - font-size="360" - font-weight="bold" - font-style="normal" - y="1950" - x="8100" - xml:space="preserve">A</text> - <text - style="font-size:360px;font-style:normal;font-weight:bold;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text90" - font-size="360" - font-weight="bold" - font-style="normal" - y="9225" - x="5100" - xml:space="preserve">station</text> <g - style="stroke:#000000;stroke-width:0.025in" - id="g92" - transform="matrix(-3.6732199e-6,-1,1,-3.6732199e-6,9450,5175)"> - <text - style="font-size:360px;font-style:normal;font-weight:bold;text-anchor:middle;fill:#000000;stroke:#000000;font-family:Helvetica" - id="text94" + style="stroke-width:.025in; stroke:black; fill:none" + id="g4"> +<!-- Line --> <polygon + points="9000,8100 9000,900 8400,900 8400,1500 7800,1500 7800,2100 7200,2100 7200,2700 6600,2700 6600,3300 6000,3300 6000,3900 5400,3900 5400,4500 4800,4500 4800,5100 4200,5100 4200,5700 3600,5700 3600,6300 3000,6300 3000,6900 2400,6900 2400,7500 1800,7500 1800,8100 9000,8100 " + style="stroke:#000000;stroke-width:60; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffd600; " + id="polygon6" /> +<!-- Line: box --> <rect + x="6600" + y="3300" + width="2400" + height="2400" + rx="0" + style="stroke:#000000;stroke-width:60; stroke-linejoin:miter; stroke-linecap:butt; fill:#ff0000; " + id="rect8" /> +<!-- Line --> <polyline + points="6000,9075 6525,9075 " + style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " + id="polyline10" /> +<!-- Arrowhead on XXXpoint 6000 9075 - 6720 9075--> <polygon + points="6490 9150 6678 9075 6490 9000 6528 9075 6490 9150 " + style="stroke:#000000;stroke-width:30; fill:#000000;" + id="polygon12" /> +<!-- Line --> <polyline + points="9900,4275 9900,3749 " + style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " + id="polyline14" /> +<!-- Arrowhead on XXXpoint 9900 4275 - 9900 3555--> <polygon + points="9975 3784 9900 3597 9825 3784 9900 3747 9975 3784 " + style="stroke:#000000;stroke-width:30; fill:#000000;" + id="polygon16" /> +<!-- Line --> <polyline + points="2400,8100 2400,7500 9000,7500 " + style="stroke:#000000;stroke-width:15; stroke-linejoin:miter; stroke-linecap:butt; " + id="polyline18" /> +<!-- Line --> <polyline + points="3000,8100 3000,6900 9000,6900 " + style="stroke:#000000;stroke-width:15; stroke-linejoin:miter; stroke-linecap:butt; " + id="polyline20" /> +<!-- Line --> <polyline + points="3600,8100 3600,6300 9000,6300 " + style="stroke:#000000;stroke-width:15; stroke-linejoin:miter; stroke-linecap:butt; " + id="polyline22" /> +<!-- Line --> <polyline + points="4800,8100 4800,5100 9000,5100 " + style="stroke:#000000;stroke-width:15; stroke-linejoin:miter; stroke-linecap:butt; " + id="polyline24" /> +<!-- Line --> <polyline + points="5400,8100 5400,4500 9000,4500 " + style="stroke:#000000;stroke-width:15; stroke-linejoin:miter; stroke-linecap:butt; " + id="polyline26" /> +<!-- Line --> <polyline + points="6000,8100 6000,3900 9000,3900 " + style="stroke:#000000;stroke-width:15; stroke-linejoin:miter; stroke-linecap:butt; " + id="polyline28" /> +<!-- Line --> <polyline + points="7200,8100 7200,2700 9000,2700 " + style="stroke:#000000;stroke-width:15; stroke-linejoin:miter; stroke-linecap:butt; " + id="polyline30" /> +<!-- Line --> <polyline + points="7800,8100 7800,2100 9000,2100 " + style="stroke:#000000;stroke-width:15; stroke-linejoin:miter; stroke-linecap:butt; " + id="polyline32" /> +<!-- Line --> <polyline + points="8400,8100 8400,1500 9000,1500 " + style="stroke:#000000;stroke-width:15; stroke-linejoin:miter; stroke-linecap:butt; " + id="polyline34" /> +<!-- Line --> <polyline + points="4200,8100 4200,5700 9000,5700 " + style="stroke:#000000;stroke-width:60; stroke-linejoin:miter; stroke-linecap:butt; " + id="polyline36" /> +<!-- Line --> <polyline + points="6600,8100 6600,3300 9000,3300 " + style="stroke:#000000;stroke-width:60; stroke-linejoin:miter; stroke-linecap:butt; " + id="polyline38" /> +<!-- Text --> <text + xml:space="preserve" + x="2100" + y="7950" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="bold" + font-size="360" + text-anchor="middle" + id="text40">A</text> +<!-- Text --> <text + xml:space="preserve" + x="2700" + y="7350" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="bold" + font-size="360" + text-anchor="middle" + id="text42">A</text> +<!-- Text --> <text + xml:space="preserve" + x="3300" + y="6750" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="bold" + font-size="360" + text-anchor="middle" + id="text44">A</text> +<!-- Text --> <text + xml:space="preserve" + x="3900" + y="6150" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="bold" + font-size="360" + text-anchor="middle" + id="text46">A</text> +<!-- Text --> <text + xml:space="preserve" + x="4500" + y="5550" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="bold" + font-size="360" + text-anchor="middle" + id="text48">A</text> +<!-- Text --> <text + xml:space="preserve" + x="5100" + y="4950" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="bold" + font-size="360" + text-anchor="middle" + id="text50">A</text> +<!-- Text --> <text + xml:space="preserve" + x="5700" + y="4350" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="bold" + font-size="360" + text-anchor="middle" + id="text52">A</text> +<!-- Text --> <text + xml:space="preserve" + x="6300" + y="3750" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="bold" + font-size="360" + text-anchor="middle" + id="text54">A</text> +<!-- Text --> <text + xml:space="preserve" + x="6900" + y="3150" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="bold" font-size="360" + text-anchor="middle" + id="text56">A</text> +<!-- Text --> <text + xml:space="preserve" + x="7500" + y="2550" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" font-weight="bold" + font-size="360" + text-anchor="middle" + id="text58">A</text> +<!-- Text --> <text + xml:space="preserve" + x="8100" + y="1950" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="bold" + font-size="360" + text-anchor="middle" + id="text60">A</text> +<!-- Text --> <text + xml:space="preserve" + x="5100" + y="9225" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="bold" + font-size="360" + text-anchor="middle" + id="text62">station</text> +<!-- Text --> <text + xml:space="preserve" + x="2100" + y="8625" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="middle" + id="text64">0</text> +<!-- Text --> <text + xml:space="preserve" + x="2700" + y="8625" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="middle" + id="text66">1</text> +<!-- Text --> <text + xml:space="preserve" + x="3900" + y="8625" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="middle" + id="text68">3</text> +<!-- Text --> <text + xml:space="preserve" + x="4500" + y="8625" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="middle" + id="text70">4</text> +<!-- Text --> <text + xml:space="preserve" + x="5100" + y="8625" + stroke="#000000" + fill="#000000" + font-family="Helvetica" font-style="normal" - y="0" - x="0" - xml:space="preserve">station</text> + font-weight="normal" + font-size="360" + text-anchor="middle" + id="text72">5</text> +<!-- Text --> <text + xml:space="preserve" + x="5700" + y="8625" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="middle" + id="text74">6</text> +<!-- Text --> <text + xml:space="preserve" + x="6300" + y="8625" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="middle" + id="text76">7</text> +<!-- Text --> <text + xml:space="preserve" + x="6900" + y="8625" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="middle" + id="text78">8</text> +<!-- Text --> <text + xml:space="preserve" + x="7500" + y="8625" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="middle" + id="text80">9</text> +<!-- Text --> <text + xml:space="preserve" + x="8100" + y="8625" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="middle" + id="text82">10</text> +<!-- Text --> <text + xml:space="preserve" + x="3300" + y="8625" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="middle" + id="text84">2</text> +<!-- Text --> <g + transform="translate(10050,5175) rotate(-90.00021046)" + id="g86"> + <text + xml:space="preserve" + x="0" + y="0" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="bold" + font-size="360" + text-anchor="middle" + id="text88">station</text> + </g> +<!-- Text --> <text + xml:space="preserve" + x="9225" + y="7950" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="start" + id="text90">0</text> +<!-- Text --> <text + xml:space="preserve" + x="9225" + y="7350" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="start" + id="text92">1</text> +<!-- Text --> <text + xml:space="preserve" + x="9225" + y="6150" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="start" + id="text94">3</text> +<!-- Text --> <text + xml:space="preserve" + x="9225" + y="4950" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="start" + id="text96">5</text> +<!-- Text --> <text + xml:space="preserve" + x="9225" + y="4350" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="start" + id="text98">6</text> +<!-- Text --> <text + xml:space="preserve" + x="9225" + y="3750" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="start" + id="text100">7</text> +<!-- Text --> <text + xml:space="preserve" + x="9225" + y="3150" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="start" + id="text102">8</text> +<!-- Text --> <text + xml:space="preserve" + x="9225" + y="2550" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="start" + id="text104">9</text> +<!-- Text --> <text + xml:space="preserve" + x="9225" + y="5550" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="start" + id="text106">4</text> +<!-- Text --> <text + xml:space="preserve" + x="9225" + y="6750" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="start" + id="text108">2</text> +<!-- Text --> <text + xml:space="preserve" + x="9225" + y="1950" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="start" + id="text110">10</text> +<!-- Text --> <text + xml:space="preserve" + x="9225" + y="1350" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="start" + id="text112">11</text> +<!-- Text --> <text + xml:space="preserve" + x="8700" + y="8625" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="normal" + font-size="360" + text-anchor="middle" + id="text114">11</text> +<!-- Text --> <text + xml:space="preserve" + x="8700" + y="1350" + stroke="#000000" + fill="#000000" + font-family="Helvetica" + font-style="normal" + font-weight="bold" + font-size="360" + text-anchor="middle" + id="text116">A</text> </g> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text96" - font-size="360" - font-weight="normal" - font-style="normal" - y="7950" - x="8625" - xml:space="preserve">0</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text98" - font-size="360" - font-weight="normal" - font-style="normal" - y="7350" - x="8625" - xml:space="preserve">1</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text100" - font-size="360" - font-weight="normal" - font-style="normal" - y="6150" - x="8625" - xml:space="preserve">3</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text102" - font-size="360" - font-weight="normal" - font-style="normal" - y="4950" - x="8625" - xml:space="preserve">5</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text104" - font-size="360" - font-weight="normal" - font-style="normal" - y="4350" - x="8625" - xml:space="preserve">6</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text106" - font-size="360" - font-weight="normal" - font-style="normal" - y="3750" - x="8625" - xml:space="preserve">7</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text108" - font-size="360" - font-weight="normal" - font-style="normal" - y="3150" - x="8625" - xml:space="preserve">8</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text110" - font-size="360" - font-weight="normal" - font-style="normal" - y="2550" - x="8625" - xml:space="preserve">9</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text112" - font-size="360" - font-weight="normal" - font-style="normal" - y="5550" - x="8625" - xml:space="preserve">4</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text114" - font-size="360" - font-weight="normal" - font-style="normal" - y="6750" - x="8625" - xml:space="preserve">2</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:start;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text116" - font-size="360" - font-weight="normal" - font-style="normal" - y="1950" - x="8625" - xml:space="preserve">10</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text118" - font-size="360" - font-weight="normal" - font-style="normal" - y="8625" - x="2100" - xml:space="preserve">0</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text120" - font-size="360" - font-weight="normal" - font-style="normal" - y="8625" - x="2700" - xml:space="preserve">1</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text122" - font-size="360" - font-weight="normal" - font-style="normal" - y="8625" - x="3900" - xml:space="preserve">3</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text124" - font-size="360" - font-weight="normal" - font-style="normal" - y="8625" - x="4500" - xml:space="preserve">4</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text126" - font-size="360" - font-weight="normal" - font-style="normal" - y="8625" - x="5100" - xml:space="preserve">5</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text128" - font-size="360" - font-weight="normal" - font-style="normal" - y="8625" - x="5700" - xml:space="preserve">6</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text130" - font-size="360" - font-weight="normal" - font-style="normal" - y="8625" - x="6300" - xml:space="preserve">7</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text132" - font-size="360" - font-weight="normal" - font-style="normal" - y="8625" - x="6900" - xml:space="preserve">8</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text134" - font-size="360" - font-weight="normal" - font-style="normal" - y="8625" - x="7500" - xml:space="preserve">9</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text136" - font-size="360" - font-weight="normal" - font-style="normal" - y="8625" - x="8100" - xml:space="preserve">10</text> - <text - style="font-size:360px;font-style:normal;font-weight:normal;text-anchor:middle;fill:#000000;stroke:#000000;stroke-width:0.025in;font-family:Helvetica" - id="text138" - font-size="360" - font-weight="normal" - font-style="normal" - y="8625" - x="3300" - xml:space="preserve">2</text> - <polyline - transform="translate(0.8238523,-608.65589)" - id="polyline2453" - style="stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter" - points="4200,5700 8400,5700 " /> </svg> diff --git a/doc/papers/2010/SPM/spm.tex b/doc/papers/2010/SPM/spm.tex index 6f59ccb2820..e38bf8b8dfd 100644 --- a/doc/papers/2010/SPM/spm.tex +++ b/doc/papers/2010/SPM/spm.tex @@ -586,126 +586,82 @@ that share a cache should be tailored accordingly. On GPUs, for example, this can be done by \emph{coalescing} memory accesses. This means that different concurrent threads read subsequent memory locations. This can be counter-intuitive, since traditionally, it was -better to have linear memory access patterns within a thread. -In the next section, we explain the techniques described above by applying them to the correlator application. +better to have linear memory access patterns within a thread. In the +next section, we explain the techniques described above by applying +them to the correlator application. \section{Optimizing the correlator} +% TODO add text about mapping from alg to arch + +\begin{figure}[t] +\begin{center} +\includegraphics[width=4.2cm]{figures/correlation-triangle.pdf} +\end{center} +\vspace{-0.5cm} +\caption{An example correlation triangle.} +\label{fig-correlation} +\end{figure} +Although in reality the receivers are dual-polarized, and the samples are complex numbers, +we use single-polarized real samples in the following example for simplicity. An unoptimized correlator would read the samples from two receivers and -multiply them, requiring two memory reads for one complex multiplication. +multiply them, requiring two memory loads for one multiplication. The correlator can be optimized by reusing a sample that is read from memory as often as possible, by using it for multiple correlations (see -Figure~\ref{fig:correlator-triangle}). +Figure~\ref{fig-correlation}). +The figure is triangular, because we compute +the correlation of each pair of receivers only once. The squares labeled \emph{A} are +autocorrelations. + For example, the samples from receivers 8, 9, 10, and 11 can be correlated with the samples from receivers 4, 5, 6, and 7 (the red square in the figure), -using each fetched sample for four complex multiplications. -This way, eight memory accesses are required for sixteen complex +reusing each fetched sample four times. +This way, eight samples are read from memory for 16 multiplications, reducing the amount of memory operations already by a factor of four. -Correlating even higher numbers of receivers at one go would reduce the +Correlating even higher numbers of receivers simultaneously would reduce the memory bandwidth usage further, but the maximum number of receivers that can -be correlated this way is quite limited by the size of the register file. -The accumulated correlations are best kept in registers, and the number of +be correlated this way is limited by the number of registers that an architecture has. +The accumulated correlations are also best kept in registers, and the number of required registers grows rapidly with the number of receiver inputs. -The example above already requires sixteen complex accumulators. -Additional registers are needed to load samples from memory. +The example above already requires 16 accumulators. +Additional registers are needed to load samples from memory (8 in this case). To obtain good performance, it is important to tune the tile size to the architecture. -Caches and memory prefetch units can also improve the performance. -However, a cache-size dependent tradeoff must be made. +%Caches and memory prefetch units can also improve the performance. +%However, a cache-size dependent tradeoff must be made. %On the one hand, correlating and integrating over long periods of time %is good for pipelined FPU operation, on the other hand, the - -%- optimaliseren van het algorithme: tiles, etc - -% TODO add text about mapping from alg to arch - -\begin{figure}[t] -\begin{center} -\includegraphics[width=4.2cm]{figures/correlation-triangle.pdf} -\end{center} -\vspace{-0.5cm} -\caption{An example correlation triangle.} -\label{fig-correlation} -\end{figure} - -An important optimization that we implemented is the reduction -of memory loads by the correlator. -A sample can be used multiple times by correlating it -with the samples from multiple other receivers in the same loop iteration. -For example, a sample from receiver A in the X polarization -that is loaded into a register pair can be correlated with the X and -Y polarizations of receivers B, C and D, using it six times. -Figure~\ref{fig-correlation} shows how we correlate multiple -receivers at the same time. Each square represents the XX, XY, -YX, and YY correlations of the receivers as indicated by row and -column number. The figure is triangular, because we compute -the correlation of each pair of receivers only once. The squares labeled \emph{A} are -autocorrelations, which can be treated specially since they require only half -the amount of computations. -The triangle is divided into larger tiles, in this case -2x3 tiles (the dark gray boxes), but arbitrary sizes are possible. -A tile is correlated as a unit. For example, the lower -right-hand-side rectangle correlates receivers 9 and 10 with receivers -0, 1, and 2. - -It is important to tune the tile size to the architecture. We want to -make the tile size as large as possible, while still fitting in the -register file. This offers the highest level of data reuse. -If we have a $w \times h$ tile size, the number of operations is given by $flops = 32wh$. -The number of bytes that has to loaded from memory is $16(w+h)$. -The minimum number of registers that is required is $4 (1 + min(w,h)) + 8 w h$. -This is the total number of registers, including accumulators, while reusing -registers if a value is no longer needed (hence the $min$ operation). However, -this formula does not count additional registers that could be needed for data prefetching, -address calculations and loop counters. -The number of registers is expressed in single-precision float registers. If an architecture has vector -registers, the result can be divided by the vector length. -Table~\ref{tile-size-table} shows the properties of different tile sizes. - -Despite the division of the correlation triangle in tiles, there -still is opportunity for additional data reuse \emph{between} tiles. -The tiles +Even when dividing the correlation triangle in tiles there still is +opportunity for additional data reuse \emph{between} tiles. The tiles within a row or column in the triangle still need the same samples. -In -addition to registers, caches can thus also be used to increase data -reuse. Since we know exactly what data can be reused at what moment, we -found it is important to have direct influence on the caches and the thread scheduler. This -way, we can make sure that tiles in same row or column are calculated -at the same time by different threads. -Because the algorithm is -extremely data intensive, the resulting optimized implementation on -many-cores is typically limited by the architecture's memory -bandwidth. The memory aspects of the algorithm are twofold. -There is an algorithmic part, the tile size, which is limited -by the number of registers. The second aspect is architectural in nature: the cache -sizes, cache hierarchy and hit ratio. Together, these two aspects dictate the -memory bandwidth that is needed to keep the FPUs busy. - -\begin{table} -\begin{center} -{\small -\begin{tabular}{l|r|r|r|r} -tile & floating point & memory loads & arithmetic & minimum nr. \\ -size & operations & (bytes) & intensity & registers (floats) \\ -\hline -1x1 & 32 & 32 & 1.00 & 16 \\ -1x2 & 64 & 48 & 1.33 & 24 \\ -2x2 & 128 & 64 & 2.00 & 44 \\ -3x2 & 192 & 80 & 2.40 & 60 \\ -3x3 & 288 & 96 & 3.00 & 88 \\ -4x3 & 384 & 112 & 3.43 & 112 \\ -4x4 & 512 & 128 & 4.00 & 148 \\ -\end{tabular} -} %\small -\end{center} -\vspace{-0.5cm} -\caption{Properties of different tile sizes.} -\label{tile-size-table} -\end{table} +In addition to registers, caches can thus also be used to increase +data reuse. + +%% \begin{table} +%% \begin{center} +%% {\small +%% \begin{tabular}{l|r|r|r|r} +%% tile & floating point & memory loads & arithmetic & minimum nr. \\ +%% size & operations & (bytes) & intensity & registers (floats) \\ +%% \hline +%% 1x1 & 32 & 32 & 1.00 & 16 \\ +%% 1x2 & 64 & 48 & 1.33 & 24 \\ +%% 2x2 & 128 & 64 & 2.00 & 44 \\ +%% 3x2 & 192 & 80 & 2.40 & 60 \\ +%% 3x3 & 288 & 96 & 3.00 & 88 \\ +%% 4x3 & 384 & 112 & 3.43 & 112 \\ +%% 4x4 & 512 & 128 & 4.00 & 148 \\ +%% \end{tabular} +%% } %\small +%% \end{center} +%% \vspace{-0.5cm} +%% \caption{Properties of different tile sizes.} +%% \label{tile-size-table} +%% \end{table} It is important to realize that the correlator itself is \emph{trivially parallel}, since tens of thousands of -- GitLab