changeset 13:17676e245515

add warp
author Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
date Thu, 30 Jan 2014 17:29:07 +0900
parents 500bcb11d251
children 729ec8d5a16d
files paper/benchmark/read/linear.dat paper/benchmark/read/read.dat paper/benchmark/read/read.eps paper/benchmark/read/read.plt paper/benchmark/write/linear.dat paper/benchmark/write/write.dat paper/benchmark/write/write.eps paper/benchmark/write/write.plt paper/chapter4.tex paper/images/read.pdf paper/images/read.xbb paper/images/write.pdf paper/images/write.xbb paper/master_paper.pdf paper/src/warp.hs
diffstat 15 files changed, 1566 insertions(+), 77 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/benchmark/read/linear.dat	Thu Jan 30 17:29:07 2014 +0900
@@ -0,0 +1,12 @@
+1 1
+2 2
+3 3
+4 4
+5 5
+6 6
+7 7
+8 8
+9 9
+10 10
+11 11
+12 12
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/benchmark/read/read.dat	Thu Jan 30 17:29:07 2014 +0900
@@ -0,0 +1,12 @@
+1 1
+2 1.79
+3 2.80
+4 3.82
+5 4.70
+6 5.50
+7 6.41
+8 7.38
+9 8.18
+10 9.14
+11 9.64
+12 10.77
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/benchmark/read/read.eps	Thu Jan 30 17:29:07 2014 +0900
@@ -0,0 +1,639 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: read.eps
+%%Creator: gnuplot 4.6 patchlevel 3
+%%CreationDate: Thu Jan 30 03:17:32 2014
+%%DocumentFonts: (atend)
+%%BoundingBox: 50 50 410 302
+%%EndComments
+%%BeginProlog
+/gnudict 256 dict def
+gnudict begin
+%
+% The following true/false flags may be edited by hand if desired.
+% The unit line width and grayscale image gamma correction may also be changed.
+%
+/Color false def
+/Blacktext false def
+/Solid false def
+/Dashlength 1 def
+/Landscape false def
+/Level1 false def
+/Rounded false def
+/ClipToBoundingBox false def
+/SuppressPDFMark false def
+/TransparentPatterns false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/Gamma 1.0 def
+/BackgroundColor {-1.000 -1.000 -1.000} def
+%
+/vshift -46 def
+/dl1 {
+  10.0 Dashlength mul mul
+  Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if
+} def
+/dl2 {
+  10.0 Dashlength mul mul
+  Rounded { currentlinewidth 0.75 mul add } if
+} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/doclip {
+  ClipToBoundingBox {
+    newpath 50 50 moveto 410 50 lineto 410 302 lineto 50 302 lineto closepath
+    clip
+  } if
+} def
+%
+% Gnuplot Prolog Version 4.6 (September 2012)
+%
+%/SuppressPDFMark true def
+%
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/Z {closepath} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/g {setgray} bind def
+/Gshow {show} def   % May be redefined later in the file to support UTF-8
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow {currentpoint stroke M 0 vshift R 
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R 
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+  /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def
+/DL {Color {setrgbcolor Solid {pop []} if 0 setdash}
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def
+/BL {stroke userlinewidth 2 mul setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+/AL {stroke userlinewidth 2 div setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+/UL {dup gnulinewidth mul /userlinewidth exch def
+	dup 1 lt {pop 1} if 10 mul /udl exch def} def
+/PL {stroke userlinewidth setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+3.8 setmiterlimit
+% Default Line colors
+/LCw {1 1 1} def
+/LCb {0 0 0} def
+/LCa {0 0 0} def
+/LC0 {1 0 0} def
+/LC1 {0 1 0} def
+/LC2 {0 0 1} def
+/LC3 {1 0 1} def
+/LC4 {0 1 1} def
+/LC5 {1 1 0} def
+/LC6 {0 0 0} def
+/LC7 {1 0.3 0} def
+/LC8 {0.5 0.5 0.5} def
+% Default Line Types
+/LTw {PL [] 1 setgray} def
+/LTb {BL [] LCb DL} def
+/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def
+/LT0 {PL [] LC0 DL} def
+/LT1 {PL [4 dl1 2 dl2] LC1 DL} def
+/LT2 {PL [2 dl1 3 dl2] LC2 DL} def
+/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def
+/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def
+/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def
+/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def
+/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def
+/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def
+/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def
+/Dia {stroke [] 0 setdash 2 copy vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath stroke
+  Pnt} def
+/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V
+  currentpoint stroke M
+  hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath stroke
+  Pnt} def
+/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M
+  hpt2 vpt2 neg V currentpoint stroke M
+  hpt2 neg 0 R hpt2 vpt2 V stroke} def
+/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath stroke
+  Pnt} def
+/Star {2 copy Pls Crs} def
+/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath fill} def
+/TriUF {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath fill} def
+/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath stroke
+  Pnt} def
+/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath fill} def
+/Pent {stroke [] 0 setdash 2 copy gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath stroke grestore Pnt} def
+/PentF {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath fill grestore} def
+/Circle {stroke [] 0 setdash 2 copy
+  hpt 0 360 arc stroke Pnt} def
+/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def
+/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def
+/C1 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C2 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C3 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C4 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 180 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C5 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc
+	2 copy moveto
+	2 copy vpt 180 270 arc closepath fill
+	vpt 0 360 arc} bind def
+/C6 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C7 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C8 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 270 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C9 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 270 450 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+	2 copy moveto
+	2 copy vpt 90 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C11 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 180 arc closepath fill
+	2 copy moveto
+	2 copy vpt 270 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C12 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 180 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C13 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc closepath fill
+	2 copy moveto
+	2 copy vpt 180 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C14 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 360 arc closepath fill
+	vpt 0 360 arc} bind def
+/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+	neg 0 rlineto closepath} bind def
+/Square {dup Rec} bind def
+/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def
+/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def
+/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def
+/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def
+/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill
+	exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+	2 copy vpt Square fill Bsquare} bind def
+/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def
+/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+	Bsquare} bind def
+/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+	Bsquare} bind def
+/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def
+/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+	2 copy vpt Square fill Bsquare} bind def
+/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+	2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def
+/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def
+/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def
+/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def
+/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def
+/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def
+/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def
+/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def
+/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def
+/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def
+/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def
+/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def
+/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def
+/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def
+/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def
+/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def
+/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def
+/DiaE {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath stroke} def
+/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath stroke} def
+/TriUE {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath stroke} def
+/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath stroke} def
+/PentE {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath stroke grestore} def
+/CircE {stroke [] 0 setdash 
+  hpt 0 360 arc stroke} def
+/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def
+/DiaW {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V Opaque stroke} def
+/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V Opaque stroke} def
+/TriUW {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V Opaque stroke} def
+/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V Opaque stroke} def
+/PentW {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  Opaque stroke grestore} def
+/CircW {stroke [] 0 setdash 
+  hpt 0 360 arc Opaque stroke} def
+/BoxFill {gsave Rec 1 setgray fill grestore} def
+/Density {
+  /Fillden exch def
+  currentrgbcolor
+  /ColB exch def /ColG exch def /ColR exch def
+  /ColR ColR Fillden mul Fillden sub 1 add def
+  /ColG ColG Fillden mul Fillden sub 1 add def
+  /ColB ColB Fillden mul Fillden sub 1 add def
+  ColR ColG ColB setrgbcolor} def
+/BoxColFill {gsave Rec PolyFill} def
+/PolyFill {gsave Density fill grestore grestore} def
+/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def
+%
+% PostScript Level 1 Pattern Fill routine for rectangles
+% Usage: x y w h s a XX PatternFill
+%	x,y = lower left corner of box to be filled
+%	w,h = width and height of box
+%	  a = angle in degrees between lines and x-axis
+%	 XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill {gsave /PFa [ 9 2 roll ] def
+  PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+  PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+  TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
+  clip
+  currentlinewidth 0.5 mul setlinewidth
+  /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+  0 0 M PFa 5 get rotate PFs -2 div dup translate
+  0 1 PFs PFa 4 get div 1 add floor cvi
+	{PFa 4 get mul 0 M 0 PFs V} for
+  0 PFa 6 get ne {
+	0 1 PFs PFa 4 get div 1 add floor cvi
+	{PFa 4 get mul 0 2 1 roll M PFs 0 V} for
+ } if
+  stroke grestore} def
+%
+/languagelevel where
+ {pop languagelevel} {1} ifelse
+ 2 lt
+	{/InterpretLevel1 true def}
+	{/InterpretLevel1 Level1 def}
+ ifelse
+%
+% PostScript level 2 pattern fill definitions
+%
+/Level2PatternFill {
+/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8}
+	bind def
+/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} 
+>> matrix makepattern
+/Pat1 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke
+	0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke}
+>> matrix makepattern
+/Pat2 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L
+	8 8 L 8 0 L 0 0 L fill}
+>> matrix makepattern
+/Pat3 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L
+	0 12 M 12 0 L stroke}
+>> matrix makepattern
+/Pat4 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L
+	0 -4 M 12 8 L stroke}
+>> matrix makepattern
+/Pat5 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L
+	0 12 M 8 -4 L 4 12 M 10 0 L stroke}
+>> matrix makepattern
+/Pat6 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L
+	0 -4 M 8 12 L 4 -4 M 10 8 L stroke}
+>> matrix makepattern
+/Pat7 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L
+	12 0 M -4 8 L 12 4 M 0 10 L stroke}
+>> matrix makepattern
+/Pat8 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L
+	-4 0 M 12 8 L -4 4 M 8 10 L stroke}
+>> matrix makepattern
+/Pat9 exch def
+/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def
+/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def
+/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def
+/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def
+/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def
+/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def
+/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def
+} def
+%
+%
+%End of PostScript Level 2 code
+%
+/PatternBgnd {
+  TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
+} def
+%
+% Substitute for Level 2 pattern fill codes with
+% grayscale if Level 2 support is not selected.
+%
+/Level1PatternFill {
+/Pattern1 {0.250 Density} bind def
+/Pattern2 {0.500 Density} bind def
+/Pattern3 {0.750 Density} bind def
+/Pattern4 {0.125 Density} bind def
+/Pattern5 {0.375 Density} bind def
+/Pattern6 {0.625 Density} bind def
+/Pattern7 {0.875 Density} bind def
+} def
+%
+% Now test for support of Level 2 code
+%
+Level1 {Level1PatternFill} {Level2PatternFill} ifelse
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+Level1 SuppressPDFMark or 
+{} {
+/SDict 10 dict def
+systemdict /pdfmark known not {
+  userdict /pdfmark systemdict /cleartomark get put
+} if
+SDict begin [
+  /Title (read.eps)
+  /Subject (gnuplot plot)
+  /Creator (gnuplot 4.6 patchlevel 3)
+  /Author (amothic)
+%  /Producer (gnuplot)
+%  /Keywords ()
+  /CreationDate (Thu Jan 30 03:17:32 2014)
+  /DOCINFO pdfmark
+end
+} ifelse
+end
+%%EndProlog
+%%Page: 1 1
+gnudict begin
+gsave
+doclip
+50 50 translate
+0.050 0.050 scale
+0 setgray
+newpath
+(Helvetica) findfont 140 scalefont setfont
+BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 7200.00 5040.00 BoxColFill} if
+1.000 UL
+LTb
+602 448 M
+63 0 V
+6282 0 R
+-63 0 V
+518 448 M
+( 0) Rshow
+1.000 UL
+LTb
+602 1185 M
+63 0 V
+6282 0 R
+-63 0 V
+-6366 0 R
+( 2) Rshow
+1.000 UL
+LTb
+602 1922 M
+63 0 V
+6282 0 R
+-63 0 V
+-6366 0 R
+( 4) Rshow
+1.000 UL
+LTb
+602 2660 M
+63 0 V
+6282 0 R
+-63 0 V
+-6366 0 R
+( 6) Rshow
+1.000 UL
+LTb
+602 3397 M
+63 0 V
+6282 0 R
+-63 0 V
+-6366 0 R
+( 8) Rshow
+1.000 UL
+LTb
+602 4134 M
+63 0 V
+6282 0 R
+-63 0 V
+-6366 0 R
+( 10) Rshow
+1.000 UL
+LTb
+602 4871 M
+63 0 V
+6282 0 R
+-63 0 V
+-6366 0 R
+( 12) Rshow
+1.000 UL
+LTb
+1179 448 M
+0 63 V
+0 4360 R
+0 -63 V
+0 -4500 R
+( 2) Cshow
+1.000 UL
+LTb
+2332 448 M
+0 63 V
+0 4360 R
+0 -63 V
+0 -4500 R
+( 4) Cshow
+1.000 UL
+LTb
+3486 448 M
+0 63 V
+0 4360 R
+0 -63 V
+0 -4500 R
+( 6) Cshow
+1.000 UL
+LTb
+4640 448 M
+0 63 V
+0 4360 R
+0 -63 V
+0 -4500 R
+( 8) Cshow
+1.000 UL
+LTb
+5793 448 M
+0 63 V
+0 4360 R
+0 -63 V
+0 -4500 R
+( 10) Cshow
+1.000 UL
+LTb
+6947 448 M
+0 63 V
+0 4360 R
+0 -63 V
+0 -4500 R
+( 12) Cshow
+1.000 UL
+LTb
+1.000 UL
+LTb
+602 4871 N
+602 448 L
+6345 0 V
+0 4423 V
+-6345 0 V
+Z stroke
+LCb setrgbcolor
+112 2659 M
+currentpoint gsave translate -270 rotate 0 0 M
+(speedup) Cshow
+grestore
+LTb
+LCb setrgbcolor
+3774 98 M
+(number of cpus) Cshow
+LTb
+1.000 UP
+1.000 UL
+LTb
+% Begin plot #1
+1.000 UL
+LT0
+1.00 0.00 0.00 C LCb setrgbcolor
+6296 4738 M
+(jungle read) Rshow
+LT0
+1.00 0.00 0.00 C 6380 4738 M
+399 0 V
+602 817 M
+577 291 V
+577 372 V
+576 376 V
+577 324 V
+577 295 V
+577 336 V
+577 357 V
+577 295 V
+576 354 V
+577 184 V
+577 417 V
+% End plot #1
+% Begin plot #2
+stroke
+LT1
+0.00 0.00 1.00 C LCb setrgbcolor
+6296 4598 M
+(linear) Rshow
+LT1
+0.00 0.00 1.00 C 6380 4598 M
+399 0 V
+602 817 M
+577 368 V
+577 369 V
+576 368 V
+577 369 V
+577 369 V
+577 368 V
+577 369 V
+577 368 V
+576 369 V
+577 368 V
+577 369 V
+% End plot #2
+stroke
+LTb
+602 4871 N
+602 448 L
+6345 0 V
+0 4423 V
+-6345 0 V
+Z stroke
+1.000 UP
+1.000 UL
+LTb
+stroke
+grestore
+end
+showpage
+%%Trailer
+%%DocumentFonts: Helvetica
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/benchmark/read/read.plt	Thu Jan 30 17:29:07 2014 +0900
@@ -0,0 +1,8 @@
+set terminal postscript eps
+set output "read.eps"
+
+set xrange [1:12]
+set xlabel "number of cpus"
+set ylabel "speedup"
+
+plot "read.dat" using 1:2 with lines linewidth 1 linecolor rgbcolor "red" title "jungle read", "linear.dat" using 1:2 with lines linewidth 1 linecolor rgbcolor "blue" title "linear"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/benchmark/write/linear.dat	Thu Jan 30 17:29:07 2014 +0900
@@ -0,0 +1,12 @@
+1 1
+2 2
+3 3
+4 4
+5 5
+6 6
+7 7
+8 8
+9 9
+10 10
+11 11
+12 12
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/benchmark/write/write.dat	Thu Jan 30 17:29:07 2014 +0900
@@ -0,0 +1,12 @@
+1 1
+2 1.55
+3 2.16
+4 2.62
+5 3.07
+6 3.25
+7 3.47
+8 3.44
+9 3.76
+10 3.80
+11 3.95
+12 3.87
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/benchmark/write/write.eps	Thu Jan 30 17:29:07 2014 +0900
@@ -0,0 +1,639 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: write.eps
+%%Creator: gnuplot 4.6 patchlevel 3
+%%CreationDate: Thu Jan 30 04:56:10 2014
+%%DocumentFonts: (atend)
+%%BoundingBox: 50 50 410 302
+%%EndComments
+%%BeginProlog
+/gnudict 256 dict def
+gnudict begin
+%
+% The following true/false flags may be edited by hand if desired.
+% The unit line width and grayscale image gamma correction may also be changed.
+%
+/Color false def
+/Blacktext false def
+/Solid false def
+/Dashlength 1 def
+/Landscape false def
+/Level1 false def
+/Rounded false def
+/ClipToBoundingBox false def
+/SuppressPDFMark false def
+/TransparentPatterns false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/Gamma 1.0 def
+/BackgroundColor {-1.000 -1.000 -1.000} def
+%
+/vshift -46 def
+/dl1 {
+  10.0 Dashlength mul mul
+  Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if
+} def
+/dl2 {
+  10.0 Dashlength mul mul
+  Rounded { currentlinewidth 0.75 mul add } if
+} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/doclip {
+  ClipToBoundingBox {
+    newpath 50 50 moveto 410 50 lineto 410 302 lineto 50 302 lineto closepath
+    clip
+  } if
+} def
+%
+% Gnuplot Prolog Version 4.6 (September 2012)
+%
+%/SuppressPDFMark true def
+%
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/Z {closepath} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/g {setgray} bind def
+/Gshow {show} def   % May be redefined later in the file to support UTF-8
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow {currentpoint stroke M 0 vshift R 
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R 
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+  /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def
+/DL {Color {setrgbcolor Solid {pop []} if 0 setdash}
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def
+/BL {stroke userlinewidth 2 mul setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+/AL {stroke userlinewidth 2 div setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+/UL {dup gnulinewidth mul /userlinewidth exch def
+	dup 1 lt {pop 1} if 10 mul /udl exch def} def
+/PL {stroke userlinewidth setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+3.8 setmiterlimit
+% Default Line colors
+/LCw {1 1 1} def
+/LCb {0 0 0} def
+/LCa {0 0 0} def
+/LC0 {1 0 0} def
+/LC1 {0 1 0} def
+/LC2 {0 0 1} def
+/LC3 {1 0 1} def
+/LC4 {0 1 1} def
+/LC5 {1 1 0} def
+/LC6 {0 0 0} def
+/LC7 {1 0.3 0} def
+/LC8 {0.5 0.5 0.5} def
+% Default Line Types
+/LTw {PL [] 1 setgray} def
+/LTb {BL [] LCb DL} def
+/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def
+/LT0 {PL [] LC0 DL} def
+/LT1 {PL [4 dl1 2 dl2] LC1 DL} def
+/LT2 {PL [2 dl1 3 dl2] LC2 DL} def
+/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def
+/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def
+/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def
+/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def
+/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def
+/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def
+/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def
+/Dia {stroke [] 0 setdash 2 copy vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath stroke
+  Pnt} def
+/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V
+  currentpoint stroke M
+  hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath stroke
+  Pnt} def
+/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M
+  hpt2 vpt2 neg V currentpoint stroke M
+  hpt2 neg 0 R hpt2 vpt2 V stroke} def
+/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath stroke
+  Pnt} def
+/Star {2 copy Pls Crs} def
+/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath fill} def
+/TriUF {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath fill} def
+/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath stroke
+  Pnt} def
+/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath fill} def
+/Pent {stroke [] 0 setdash 2 copy gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath stroke grestore Pnt} def
+/PentF {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath fill grestore} def
+/Circle {stroke [] 0 setdash 2 copy
+  hpt 0 360 arc stroke Pnt} def
+/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def
+/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def
+/C1 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C2 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C3 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C4 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 180 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C5 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc
+	2 copy moveto
+	2 copy vpt 180 270 arc closepath fill
+	vpt 0 360 arc} bind def
+/C6 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C7 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C8 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 270 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C9 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 270 450 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+	2 copy moveto
+	2 copy vpt 90 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C11 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 180 arc closepath fill
+	2 copy moveto
+	2 copy vpt 270 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C12 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 180 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C13 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc closepath fill
+	2 copy moveto
+	2 copy vpt 180 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C14 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 360 arc closepath fill
+	vpt 0 360 arc} bind def
+/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+	neg 0 rlineto closepath} bind def
+/Square {dup Rec} bind def
+/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def
+/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def
+/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def
+/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def
+/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill
+	exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+	2 copy vpt Square fill Bsquare} bind def
+/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def
+/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+	Bsquare} bind def
+/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+	Bsquare} bind def
+/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def
+/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+	2 copy vpt Square fill Bsquare} bind def
+/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+	2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def
+/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def
+/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def
+/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def
+/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def
+/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def
+/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def
+/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def
+/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def
+/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def
+/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def
+/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def
+/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def
+/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def
+/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def
+/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def
+/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def
+/DiaE {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath stroke} def
+/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath stroke} def
+/TriUE {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath stroke} def
+/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath stroke} def
+/PentE {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath stroke grestore} def
+/CircE {stroke [] 0 setdash 
+  hpt 0 360 arc stroke} def
+/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def
+/DiaW {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V Opaque stroke} def
+/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V Opaque stroke} def
+/TriUW {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V Opaque stroke} def
+/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V Opaque stroke} def
+/PentW {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  Opaque stroke grestore} def
+/CircW {stroke [] 0 setdash 
+  hpt 0 360 arc Opaque stroke} def
+/BoxFill {gsave Rec 1 setgray fill grestore} def
+/Density {
+  /Fillden exch def
+  currentrgbcolor
+  /ColB exch def /ColG exch def /ColR exch def
+  /ColR ColR Fillden mul Fillden sub 1 add def
+  /ColG ColG Fillden mul Fillden sub 1 add def
+  /ColB ColB Fillden mul Fillden sub 1 add def
+  ColR ColG ColB setrgbcolor} def
+/BoxColFill {gsave Rec PolyFill} def
+/PolyFill {gsave Density fill grestore grestore} def
+/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def
+%
+% PostScript Level 1 Pattern Fill routine for rectangles
+% Usage: x y w h s a XX PatternFill
+%	x,y = lower left corner of box to be filled
+%	w,h = width and height of box
+%	  a = angle in degrees between lines and x-axis
+%	 XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill {gsave /PFa [ 9 2 roll ] def
+  PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+  PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+  TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
+  clip
+  currentlinewidth 0.5 mul setlinewidth
+  /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+  0 0 M PFa 5 get rotate PFs -2 div dup translate
+  0 1 PFs PFa 4 get div 1 add floor cvi
+	{PFa 4 get mul 0 M 0 PFs V} for
+  0 PFa 6 get ne {
+	0 1 PFs PFa 4 get div 1 add floor cvi
+	{PFa 4 get mul 0 2 1 roll M PFs 0 V} for
+ } if
+  stroke grestore} def
+%
+/languagelevel where
+ {pop languagelevel} {1} ifelse
+ 2 lt
+	{/InterpretLevel1 true def}
+	{/InterpretLevel1 Level1 def}
+ ifelse
+%
+% PostScript level 2 pattern fill definitions
+%
+/Level2PatternFill {
+/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8}
+	bind def
+/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} 
+>> matrix makepattern
+/Pat1 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke
+	0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke}
+>> matrix makepattern
+/Pat2 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L
+	8 8 L 8 0 L 0 0 L fill}
+>> matrix makepattern
+/Pat3 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L
+	0 12 M 12 0 L stroke}
+>> matrix makepattern
+/Pat4 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L
+	0 -4 M 12 8 L stroke}
+>> matrix makepattern
+/Pat5 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L
+	0 12 M 8 -4 L 4 12 M 10 0 L stroke}
+>> matrix makepattern
+/Pat6 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L
+	0 -4 M 8 12 L 4 -4 M 10 8 L stroke}
+>> matrix makepattern
+/Pat7 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L
+	12 0 M -4 8 L 12 4 M 0 10 L stroke}
+>> matrix makepattern
+/Pat8 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L
+	-4 0 M 12 8 L -4 4 M 8 10 L stroke}
+>> matrix makepattern
+/Pat9 exch def
+/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def
+/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def
+/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def
+/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def
+/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def
+/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def
+/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def
+} def
+%
+%
+%End of PostScript Level 2 code
+%
+/PatternBgnd {
+  TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
+} def
+%
+% Substitute for Level 2 pattern fill codes with
+% grayscale if Level 2 support is not selected.
+%
+/Level1PatternFill {
+/Pattern1 {0.250 Density} bind def
+/Pattern2 {0.500 Density} bind def
+/Pattern3 {0.750 Density} bind def
+/Pattern4 {0.125 Density} bind def
+/Pattern5 {0.375 Density} bind def
+/Pattern6 {0.625 Density} bind def
+/Pattern7 {0.875 Density} bind def
+} def
+%
+% Now test for support of Level 2 code
+%
+Level1 {Level1PatternFill} {Level2PatternFill} ifelse
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+Level1 SuppressPDFMark or 
+{} {
+/SDict 10 dict def
+systemdict /pdfmark known not {
+  userdict /pdfmark systemdict /cleartomark get put
+} if
+SDict begin [
+  /Title (write.eps)
+  /Subject (gnuplot plot)
+  /Creator (gnuplot 4.6 patchlevel 3)
+  /Author (amothic)
+%  /Producer (gnuplot)
+%  /Keywords ()
+  /CreationDate (Thu Jan 30 04:56:10 2014)
+  /DOCINFO pdfmark
+end
+} ifelse
+end
+%%EndProlog
+%%Page: 1 1
+gnudict begin
+gsave
+doclip
+50 50 translate
+0.050 0.050 scale
+0 setgray
+newpath
+(Helvetica) findfont 140 scalefont setfont
+BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 7200.00 5040.00 BoxColFill} if
+1.000 UL
+LTb
+602 448 M
+63 0 V
+6282 0 R
+-63 0 V
+518 448 M
+( 0) Rshow
+1.000 UL
+LTb
+602 1185 M
+63 0 V
+6282 0 R
+-63 0 V
+-6366 0 R
+( 2) Rshow
+1.000 UL
+LTb
+602 1922 M
+63 0 V
+6282 0 R
+-63 0 V
+-6366 0 R
+( 4) Rshow
+1.000 UL
+LTb
+602 2660 M
+63 0 V
+6282 0 R
+-63 0 V
+-6366 0 R
+( 6) Rshow
+1.000 UL
+LTb
+602 3397 M
+63 0 V
+6282 0 R
+-63 0 V
+-6366 0 R
+( 8) Rshow
+1.000 UL
+LTb
+602 4134 M
+63 0 V
+6282 0 R
+-63 0 V
+-6366 0 R
+( 10) Rshow
+1.000 UL
+LTb
+602 4871 M
+63 0 V
+6282 0 R
+-63 0 V
+-6366 0 R
+( 12) Rshow
+1.000 UL
+LTb
+1179 448 M
+0 63 V
+0 4360 R
+0 -63 V
+0 -4500 R
+( 2) Cshow
+1.000 UL
+LTb
+2332 448 M
+0 63 V
+0 4360 R
+0 -63 V
+0 -4500 R
+( 4) Cshow
+1.000 UL
+LTb
+3486 448 M
+0 63 V
+0 4360 R
+0 -63 V
+0 -4500 R
+( 6) Cshow
+1.000 UL
+LTb
+4640 448 M
+0 63 V
+0 4360 R
+0 -63 V
+0 -4500 R
+( 8) Cshow
+1.000 UL
+LTb
+5793 448 M
+0 63 V
+0 4360 R
+0 -63 V
+0 -4500 R
+( 10) Cshow
+1.000 UL
+LTb
+6947 448 M
+0 63 V
+0 4360 R
+0 -63 V
+0 -4500 R
+( 12) Cshow
+1.000 UL
+LTb
+1.000 UL
+LTb
+602 4871 N
+602 448 L
+6345 0 V
+0 4423 V
+-6345 0 V
+Z stroke
+LCb setrgbcolor
+112 2659 M
+currentpoint gsave translate -270 rotate 0 0 M
+(speedup) Cshow
+grestore
+LTb
+LCb setrgbcolor
+3774 98 M
+(number of cpus) Cshow
+LTb
+1.000 UP
+1.000 UL
+LTb
+% Begin plot #1
+1.000 UL
+LT0
+1.00 0.00 0.00 C LCb setrgbcolor
+6296 4738 M
+(jungle write) Rshow
+LT0
+1.00 0.00 0.00 C 6380 4738 M
+399 0 V
+602 817 M
+577 202 V
+577 225 V
+576 170 V
+577 166 V
+577 66 V
+577 81 V
+577 -11 V
+577 118 V
+576 15 V
+577 55 V
+577 -30 V
+% End plot #1
+% Begin plot #2
+stroke
+LT1
+0.00 0.00 1.00 C LCb setrgbcolor
+6296 4598 M
+(linear) Rshow
+LT1
+0.00 0.00 1.00 C 6380 4598 M
+399 0 V
+602 817 M
+577 368 V
+577 369 V
+576 368 V
+577 369 V
+577 369 V
+577 368 V
+577 369 V
+577 368 V
+576 369 V
+577 368 V
+577 369 V
+% End plot #2
+stroke
+LTb
+602 4871 N
+602 448 L
+6345 0 V
+0 4423 V
+-6345 0 V
+Z stroke
+1.000 UP
+1.000 UL
+LTb
+stroke
+grestore
+end
+showpage
+%%Trailer
+%%DocumentFonts: Helvetica
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/benchmark/write/write.plt	Thu Jan 30 17:29:07 2014 +0900
@@ -0,0 +1,8 @@
+set terminal postscript eps
+set output "write.eps"
+
+set xrange [1:12]
+set xlabel "number of cpus"
+set ylabel "speedup"
+
+plot "write.dat" using 1:2 with lines linewidth 1 linecolor rgbcolor "red" title "jungle write", "linear.dat" using 1:2 with lines linewidth 1 linecolor rgbcolor "blue" title "linear"
--- a/paper/chapter4.tex	Wed Jan 29 21:46:00 2014 +0900
+++ b/paper/chapter4.tex	Thu Jan 30 17:29:07 2014 +0900
@@ -2,8 +2,8 @@
 本章では、非破壊的木構造データベース Jungle の読み込みと書き込みの性能の計測を行う。
 また、簡単な掲示板ウェブアプリケーションを作成し、Java を用いた非破壊的木構造データベースとの性能比較を行う。
 
-\section{実験環境の構築}
-学科が提供するブレードサーバを用いて、実験環境を構築する。
+\section{計測環境の構築}
+学科が提供するブレードサーバを用いて、計測環境を構築する。
 ブレードサーバの仕様を表\ref{tab:server_spec}に示す。
 
 \begin{table}[!htbp]
@@ -136,6 +136,7 @@
 $ weighttp -n 1000000 -c 1000 -t 10 -k "http://bldsv12.cr.ie.u-ryukyu.ac.jp:3000"
 \end{lstlisting}
 
+起動時には対象のサーバの URL を記述する他に、いくつかのオプションを指定できる。
 \begin{itemize}
  \item n ... HTTP リクエストの総数
  \item c ... 同時に接続するコネクションの数
@@ -143,116 +144,208 @@
  \item k ... HTTP Keep-Alives を有効にする
 \end{itemize}
 
-\section{並列読み込み}
-木構造データベース Jungle の並列読み込みの実験を行う。
-\subsubsection{実験方法}
-12コア CPU のマシン上で、プログラムを実行するコア数を変更しながら並列に読み込む実験を行う。
-木構造データベース Jungle を利用し、約90万の子を持つ木構造を作成する。
-その木構造を読み込むためのTaskを1000個作成し、並列に実行する。
+\clearpage
+\section{読み込みの性能計測}
+非破壊的木構造データベース Jungle の読み込みの性能計測を行う。
 
+\subsubsection{計測方法}
+ブレードサーバ上で、Jungle で作成した木構造を並列に読み込んで性能計測を行う。
+まず、Jungle を利用して木構造を作成する。
+並列に実行する際に、読み込みに負荷がかかるように木構造はある程度の大きさとする。
+今回は木の深さが 8、ノードの数が約 80 万の大きさの木構造を使用する。
 
-\subsubsection{実験環境}
-実験を行うサーバの仕様について表\ref{tab:server_spec_1}に示す。
-Haskell のコンパイラには、The Glasgow Haskell Compiler (GHC) の 7.63 を使用する。
+木構造を読み込み、ノードの数を数えるタスクを 1,000 個作成し並列実行する。
+非破壊的木構造は、木構造に変更を加えても他の読み込みのタスクに影響を与えない。
+そのことを確認するために、木構造は各タスクに渡す前に無作為にノードを追加する。
 
+\subsubsection{計測結果}
+非破壊的木構造データベース Jungle の読み込みの計測結果を表\ref{tab:par_read}に示す。
 
-\subsubsection{実験結果}
-並列読み込みの実験結果を表\ref{tab:par_read}に示す。
-12 CPUで動かした時に、1 CPUと比べて10.72倍の速度向上が見られる。
-また、Intel のハイパースレッディング機能を利用し24 CPUで動かした際にも僅かながら性能が向上している。
+CPUコア数を増やしていくと、実行時間が短くなっていることが分かる。
+シングルスレッドで実行した場合と比較して、2 スレッドで 1.79 倍、12 スレッドで 10.77 倍の性能向上が見られる。
+13 スレッド以上は、Intel のハイパースレッディング機能を利用して計測した。
+ハイパースレッディングは、1つのプロセッサをあたかも2つのプロセッサであるかのように扱う技術である。
+同時に演算器などを利用することはできないため性能が2倍になるわけではないが、概ね20 \%程度クロックあたりの性能が向上すると言われている。
+実際の計測では、13 スレッド以上は、12スレッドより速くなることもあるが、遅くなる場合もあるなど安定しない結果となっている。
 
 
 \begin{table}[!htbp]
-\caption{並列読み込みの実験結果}
+\caption{読み込みの計測結果}
 \label{tab:par_read}
 \begin{center}
 \begin{tabular}{|c||r|} \hline
 CPU数 & 実行時間 \\ \hline
-1 コア& 59.72 s\\ \hline
-2 コア& 33.77 s\\ \hline
-4 コア& 15.95 s\\ \hline
-6 コア& 10.72 s\\ \hline
-8 コア& 8.10 s\\ \hline
-10 コア& 6.56 s\\ \hline
-12 コア& 5.57 s\\ \hline
-24 コア& 4.80 s\\ \hline
+1 & 59.77 s\\ \hline
+2 & 33.36 s\\ \hline
+4 & 15.63 s\\ \hline
+8 & 8.10 s\\ \hline
+12 & 5.55 s\\ \hline
+16 & 5.65 s\\ \hline
+20 & 5.23 s\\ \hline
+24 & 5.77 s\\ \hline
+\end{tabular}
+\end{center}
+\end{table}
+
+性能向上率のグラフを図\ref{fig:benchmark_read}に示す。
+線形に近い形で性能が向上していることが分かる。
+12 スレッドで実行した場合の並列化率は 98.96 \%で、非破壊的木構造データベース Jungle は読み込みにおいてスケールするデータベースであることが分かる。
+
+\begin{figure}[!htbp]
+ \caption{読み込みの性能向上率}
+ \begin{center}
+  \includegraphics[width=90mm]{./images/read.pdf}
+ \end{center}
+ \label{fig:benchmark_read}
+\end{figure}
+
+\clearpage
+\section{書き込みの性能計測}
+非破壊的木構造データベース Jungle の書き込みの性能計測を行う。
+
+\subsubsection{計測方法}
+ブレードサーバ上で、Jungle に木構造を並列に書き込んで性能計測を行う。
+木の深さが 6、ノードの数が約 1 万の大きさの木構造を作成しJungle に登録するタスクを 1,000 個作成し、並列に実行する。
+書き込んだ木構造はノードの数が整合しているかどうか確認する。その後正確に書き込まれてるタスクの数を出力する。
+Haskell は遅延評価のため、出力などを挟むことで評価が行われるようにしなければならない。
+
+\subsubsection{計測結果}
+非破壊的木構造データベース Jungle の書き込みの計測結果を表\ref{tab:par_write}に示す。
+
+CPUコア数を増やしていくと、実行時間が短くなっていることが分かる。
+シングルスレッドで実行した場合と比較して、2 スレッドで 1.55 倍、12 スレッドで 3.86 倍の性能向上が見られる。
+読み込みと比べ、書き込みはルートノードの更新作業があるため並列化率が下がり、性能向上率が低いことが分かる。
+またハイパースレッディングは効果がなく、13 スレッド以上では実行時間が遅くなっている。
+
+
+\begin{table}[!htbp]
+\caption{書き込みの計測結果}
+\label{tab:par_write}
+\begin{center}
+\begin{tabular}{|c||r|} \hline
+CPU数 & 実行時間 \\ \hline
+1 & 52.68 s\\ \hline
+2 & 33.92 s\\ \hline
+4 & 20.11 s\\ \hline
+8 & 15.31 s\\ \hline
+12 & 13.62 s\\ \hline
+16 & 14.92 s\\ \hline
+20 & 18.62 s\\ \hline
+24 & 16.63 s\\ \hline
 \end{tabular}
 \end{center}
 \end{table}
 
-\section{並列書き込み}
-木構造データベース Jungle の並列書き込みの実験を行う。
-\subsubsection{実験方法}
+性能向上率のグラフを図\ref{fig:benchmark_write}に示す。
+書き込みは並列化率が低く、性能向上が 4 倍程度で止まっている。
+12 スレッドで実行した場合の並列化率は 80.8 \%である。
+
+\newpage
+\begin{figure}[!htbp]
+ \caption{書き込みの性能向上率}
+ \begin{center}
+  \includegraphics[width=90mm]{./images/write.pdf}
+ \end{center}
+ \label{fig:benchmark_write}
+\end{figure}
+
+非破壊的木構造データベース Jungle は、書き込みは並列化率が低くなってしまい並列実行に向いていない。
+読み込みが高速なため、書き込みより読み込みが多用されるシステムに向いているといえる。
+
+ブログや、Wiki、SNSなどはそうしたシステムである。
+本研究では、簡単な掲示板ウェブアプリケーションを開発しての実験も行った。
+
+\clearpage
+
+\section{ウェブアプリケーションに組み込んでの性能評価}
+
+\subsubsection{簡単な掲示板ウェブアプリケーション}
+木構造データベース Jungle と Haskell の HTTP サーバ Warp を用いて簡易掲示板システムを作成する。
+
+\subsubsection{Warp を用いたウェブアプリケーションの構築}
+Warp は、軽量・高速な HTTP サーバである。
+Haskell の軽量スレッドを活かして書かれている。
+Haskell のウェブフレームワークである Yesod のバックエンドとして用いられており、現在も開発が続けられている。
+
+Warp を用いてウェブアプリケーションを構築する方法について説明する。
 
-12コア CPU のマシン上で、プログラムを実行するコア数を変更しながら並列に書き込む実験を行う。
-木構造データベース Jungle を利用し、1000個ほどの子を持つ木構造を並列に作成する。
-木構造を作成するTaskの数は1000であり、それを各コアで分割して実行する。
+% Source Codeは実行可能な状態でsrcに置いてある 
+% firstline, lastlineで、どの範囲を表示するか指定できる
+\lstinputlisting[label=warp_sample, caption=Warpを用いたウェブアプリケーションの例, firstline=9]{src/warp.hs}
+
+ソースコード \ref{warp_sample}は、URLによって出力する結果を変更するウェブアプリケーションである。
+/hello/worldへアクセスがあった場合は、インクリメントされる counter が表示される。
+
+\paragraph*{main}
+HTTP サーバを起動するには、Warp の run 関数を利用する。
+run 関数は、利用する Port 番号と、application というリクエストを受けて何かしらのレスポンスを返す関数の2つを引数として受け取る。
+
+関数型言語では、関数を第一級オブジェクトとして扱える。
+また、今回は Haskell のカリー化された関数の特性を利用し、main 内で作成した IORef 型の counter を部分適用させている。
+
+IORef を用いることで、Haskell で更新可能な変数を扱うことができる。
+参照透過性を失うようにみえるが、Haskell は IO モナドを利用することで純粋性を保っている。
+IORef 自体が入出力を行うわけではなく、単なる入出力操作の指示にすぎない。
+IO モナドとして糊付けされた単一のアクションに main という名前を付けて実行することで処理系が入出力処理を行う。
+
+\paragraph*{application 及び routes , findRoute}
+application の実装では、routes という関数を独自に定義して、URL によって出力を変更している。
+application に渡されるリクエストはデータ型で様々な情報が含まれている。
+その中のひとつに pathInfo という、URL から hostname/port と、クエリを取り除いたリストがある。
+この情報を routes という関数に渡すことで、routeSetting というリストから一致する URL がないか調べる。
+routeSetting は、URL のリストとレスポンスを返す関数のタプルのリストである。
+
+\paragraph*{notFound 及び hello}
+レスポンスを返す関数は、いくつか定義されている。
+その中で利用されている responseLBS は文字列からレスポンスを構築するためのコンストラクタである。
+
+\paragraph*{world 及び incCount}
+world は、インクリメントされる counter を表示するための関数である。
+IORef 内のデータは直接触ることができないため、incCount 内で atomicModifyIORef を利用してデータの更新を行なっている。
+atomicModifyIORef は、データの更新をスレッドセーフに行うことができる。
+また、responseLBSで構築したレスポンスは、Resource Tというリーソスの解放を安全に行うために使われるモナドに包まれている。
+lift 関数を用いて、incCountの型を持ち上げ調整している。\\
 
 
-\subsubsection{実験環境}
-実験を行うサーバの仕様については並列読み込みの実験時と同じである。
+実際にプログラムを例にして説明したが、Warp は容易にプログラムに組み込むことができる。
+非破壊的木構造データベース Jungle と Warp を組み合わせて、簡単な掲示板ウェブアプリケーションを開発する。
+掲示板としての機能を関数として実装し、routeSetting に登録することでリクエストによって関数を実行する。
 
-\subsubsection{実験結果}
-並列読み込みの実験結果を表\ref{tab:par_write}に示す。
-速度向上が8コアあたりで止まってしまっている。
-ルートノードの更新や、木の作成がIO操作であり、大量に作成更新するためボトルネックになっていると考えられる。
-
+掲示板におけるデータベースへの書き込みは、板の作成と、板への書き込みがある。
+Jungle において、板の作成は新しい木構造の作成、板への書き込みは木構造へのノードの追加で表現する。
+掲示板へ実装した機能を表\ref{tab:bbs_func}に示す。
 
 \begin{table}[!htbp]
-\caption{並列書き込みの実験結果}
-\label{tab:par_write}
+\caption{簡単な掲示板ウェブアプリケーションへ実装した機能一覧}
+\label{tab:bbs_func}
 \begin{center}
-\begin{tabular}{|c||r|} \hline
-CPU数 & 実行時間 \\ \hline
-1 コア& 50.36 s\\ \hline
-2 コア& 32.04 s\\ \hline
-4 コア& 19.32 s\\ \hline
-6 コア& 17.99 s\\ \hline
-8 コア& 14.81 s\\ \hline
-10 コア& 17.74 s\\ \hline
-12 コア& 14.72 s\\ \hline
-24 コア& 14.84 s\\ \hline
+\begin{tabular}{|c||c|} \hline
+  関数名 & 概要 \\ \hline \hline
+  showBoard & 板の一覧を表示 \\ \hline
+  createBoard & 板の作成 \\ \hline
+  showBoardMessage & 板への書き込みの一覧を表示 \\ \hline
+  createBoardMessage & 板への書き込み \\ \hline
+  editMessage & 板への書き込みの編集 \\ \hline
 \end{tabular}
 \end{center}
 \end{table}
 
-\section{Web アプリケーションに組み込んでの性能評価}
-\subsubsection{実験方法}
-木構造データベース Jungle と Haskell の HTTP サーバ Warp を用いて簡易掲示板システムを作成する。
+
+\subsection{読み込み}
+\subsection{書き込み}
+\subsection{Javaを用いた非破壊的木構造データベースとの比較}
+\subsubsection{評価方法}
 Warp とは ~~ である。
-weightttpを用いて負荷をかける。
-weighttpの説明
 10スレッドから、1スレッドあたり100並列に1000回リクエストを投げる。
 負荷をかけるマシンおよび、かけられるマシンは共に12コアのコア数の多いマシンを用いる。
 
-\subsubsection{実験環境}
-
-負荷をかけるマシンおよび、負荷をかけられるマシンの仕様を表\ref{tab:server_spec_2}に示す。
-同じ仕様のサーバを2台用いる。
-
-\begin{table}[!htbp]
-\caption{サーバの仕様}
-\label{tab:server_spec_2}
-\begin{center}
-\begin{tabular}{|c||c|} \hline
-名前 & 概要 \\ \hline \hline
-CPU & Intel(R) Xeon(R) CPU X5650@2.67GHz * 2\\ \hline
-物理コア数 & 12 \\ \hline
-論理コア数 & 24 \\ \hline
-Memory & 126GB \\ \hline
-OS & Fedora 14 \\ \hline
-GHC & 7.63 \\ \hline
-\end{tabular}
-\end{center}
-\end{table}
-
 \subsubsection{実験結果}
 
 読み込みが止まってしまう時、1秒あたり35000 reqほど
 webサーバのボトルネックにかかってる?
 \begin{table}[!htbp]
 \caption{読み込み}
-\label{tab:par_write}
+\label{tab:par_write2}
 \begin{center}
 \begin{tabular}{|c||r|} \hline
 CPU数 & 実行時間 \\ \hline
@@ -270,7 +363,7 @@
 
 \begin{table}[!htbp]
 \caption{書き込み}
-\label{tab:par_write}
+\label{tab:par_write3}
 \begin{center}
 \begin{tabular}{|c||r|} \hline
 CPU数 & 実行時間 \\ \hline
Binary file paper/images/read.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/images/read.xbb	Thu Jan 30 17:29:07 2014 +0900
@@ -0,0 +1,8 @@
+%%Title: ./read.pdf
+%%Creator: extractbb 20130405
+%%BoundingBox: 0 0 360 252
+%%HiResBoundingBox: 0.000000 0.000000 360.000000 252.000000
+%%PDFVersion: 1.4
+%%Pages: 1
+%%CreationDate: Thu Jan 30 03:20:22 2014
+
Binary file paper/images/write.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/images/write.xbb	Thu Jan 30 17:29:07 2014 +0900
@@ -0,0 +1,8 @@
+%%Title: ./write.pdf
+%%Creator: extractbb 20130405
+%%BoundingBox: 0 0 360 252
+%%HiResBoundingBox: 0.000000 0.000000 360.000000 252.000000
+%%PDFVersion: 1.4
+%%Pages: 1
+%%CreationDate: Thu Jan 30 04:56:55 2014
+
Binary file paper/master_paper.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/warp.hs	Thu Jan 30 17:29:07 2014 +0900
@@ -0,0 +1,38 @@
+{-# LANGUAGE OverloadedStrings #-}
+import Network.Wai
+import Network.HTTP.Types (status200, status404)
+import Network.Wai.Handler.Warp (run)
+import Control.Monad.Trans (lift)
+import Data.IORef (newIORef, atomicModifyIORef)
+import Data.ByteString.Lazy.UTF8 (fromString)
+
+application counter request = function counter
+  where
+    function = routes $ pathInfo request
+
+routes path = findRoute path routeSetting
+
+findRoute path [] = notFound
+findRoute path ((p,f):xs)
+    | path == p = f
+    | otherwise = findRoute path xs
+
+routeSetting = [(["hello"], hello),
+                (["hello","world"], world)]
+
+notFound _ = return $
+    responseLBS status404 [("Content-type", "text/html")] $ "404"
+
+hello _ = return $
+    responseLBS status200 [("Content-type", "text/html")] $ "hello"
+
+world counter = do
+    count <- lift $ incCount counter
+    return $ responseLBS status200 [("Content-type", "text/html")] $
+      fromString $ show count
+
+incCount counter = atomicModifyIORef counter (\c -> (c+1, c))
+
+main = do
+  counter <- newIORef 0
+  run 3000 $ application counter