Mercurial > hg > Papers > 2018 > mitsuki-sigos
changeset 57:6c55961dcf0b
update
author | mir3636 |
---|---|
date | Sun, 22 Apr 2018 18:38:16 +0900 |
parents | c39c2e8eddc7 |
children | 0e42707ddeb2 |
files | Paper/pic/bitonicNetwork.pdf Paper/pic/bitonicNetwork.xbb Paper/pic/bitonicSort.pdf Paper/pic/bitonicSort.svg Paper/pic/bitonicSort.xbb Paper/pic/twice.pdf Paper/pic/twice.svg Paper/pic/twice.xbb Paper/pic/vsgo.pdf Paper/pic/vsgo.svg Paper/pic/vsgo.xbb Paper/pic/vsopenmp.pdf Paper/pic/vsopenmp.svg Paper/pic/vsopenmp.xbb Paper/sigos.pdf Paper/sigos.tex Paper/src/go.go |
diffstat | 17 files changed, 1051 insertions(+), 40 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Paper/pic/bitonicNetwork.xbb Sun Apr 22 18:38:16 2018 +0900 @@ -0,0 +1,8 @@ +%%Title: fig/bitonicNetwork.pdf +%%Creator: extractbb 20170318 +%%BoundingBox: 0 0 591 422 +%%HiResBoundingBox: 0.000000 0.000000 591.000000 422.000000 +%%PDFVersion: 1.3 +%%Pages: 1 +%%CreationDate: Sat Feb 3 19:57:43 2018 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Paper/pic/bitonicSort.svg Sun Apr 22 18:38:16 2018 +0900 @@ -0,0 +1,204 @@ +<?xml version="1.0" encoding="utf-8" standalone="no"?> +<svg + width="600" height="480" + viewBox="0 0 600 480" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" +> + +<title>Gnuplot</title> +<desc>Produced by GNUPLOT 5.2 patchlevel 2 </desc> + +<g id="gnuplot_canvas"> + +<rect x="0" y="0" width="600" height="480" fill="none"/> +<defs> + + <circle id='gpDot' r='0.5' stroke-width='0.5'/> + <path id='gpPt0' stroke-width='0.222' stroke='currentColor' d='M-1,0 h2 M0,-1 v2'/> + <path id='gpPt1' stroke-width='0.222' stroke='currentColor' d='M-1,-1 L1,1 M1,-1 L-1,1'/> + <path id='gpPt2' stroke-width='0.222' stroke='currentColor' d='M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1'/> + <rect id='gpPt3' stroke-width='0.222' stroke='currentColor' x='-1' y='-1' width='2' height='2'/> + <rect id='gpPt4' stroke-width='0.222' stroke='currentColor' fill='currentColor' x='-1' y='-1' width='2' height='2'/> + <circle id='gpPt5' stroke-width='0.222' stroke='currentColor' cx='0' cy='0' r='1'/> + <use xlink:href='#gpPt5' id='gpPt6' fill='currentColor' stroke='none'/> + <path id='gpPt7' stroke-width='0.222' stroke='currentColor' d='M0,-1.33 L-1.33,0.67 L1.33,0.67 z'/> + <use xlink:href='#gpPt7' id='gpPt8' fill='currentColor' stroke='none'/> + <use xlink:href='#gpPt7' id='gpPt9' stroke='currentColor' transform='rotate(180)'/> + <use xlink:href='#gpPt9' id='gpPt10' fill='currentColor' stroke='none'/> + <use xlink:href='#gpPt3' id='gpPt11' stroke='currentColor' transform='rotate(45)'/> + <use xlink:href='#gpPt11' id='gpPt12' fill='currentColor' stroke='none'/> + <path id='gpPt13' stroke-width='0.222' stroke='currentColor' d='M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z'/> + <use xlink:href='#gpPt13' id='gpPt14' fill='currentColor' stroke='none'/> + <filter id='textbox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'> + <feFlood flood-color='white' flood-opacity='1' result='bgnd'/> + <feComposite in='SourceGraphic' in2='bgnd' operator='atop'/> + </filter> + <filter id='greybox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'> + <feFlood flood-color='lightgrey' flood-opacity='1' result='grey'/> + <feComposite in='SourceGraphic' in2='grey' operator='atop'/> + </filter> +</defs> +<g fill="none" color="white" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M63.6,444.0 L72.6,444.0 M557.8,444.0 L548.8,444.0 '/> <g transform="translate(55.3,447.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 0</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M63.6,400.7 L72.6,400.7 M557.8,400.7 L548.8,400.7 '/> <g transform="translate(55.3,404.6)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 5</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M63.6,357.4 L72.6,357.4 M557.8,357.4 L548.8,357.4 '/> <g transform="translate(55.3,361.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 10</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M63.6,314.0 L72.6,314.0 M557.8,314.0 L548.8,314.0 '/> <g transform="translate(55.3,317.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 15</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M63.6,270.7 L72.6,270.7 M557.8,270.7 L548.8,270.7 '/> <g transform="translate(55.3,274.6)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 20</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M63.6,227.4 L72.6,227.4 M557.8,227.4 L548.8,227.4 '/> <g transform="translate(55.3,231.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 25</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M63.6,184.1 L72.6,184.1 M557.8,184.1 L548.8,184.1 '/> <g transform="translate(55.3,188.0)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 30</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M63.6,140.7 L72.6,140.7 M557.8,140.7 L548.8,140.7 '/> <g transform="translate(55.3,144.6)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 35</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M63.6,97.4 L72.6,97.4 M557.8,97.4 L548.8,97.4 '/> <g transform="translate(55.3,101.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 40</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M63.6,54.1 L72.6,54.1 M557.8,54.1 L548.8,54.1 '/> <g transform="translate(55.3,58.0)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 45</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M94.5,444.0 L94.5,435.0 M94.5,54.1 L94.5,63.1 '/> <g transform="translate(94.5,465.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >1 cpu</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M156.3,444.0 L156.3,435.0 M156.3,54.1 L156.3,63.1 '/> <g transform="translate(156.3,465.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >2 cpus</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M218.0,444.0 L218.0,435.0 M218.0,54.1 L218.0,63.1 '/> <g transform="translate(218.0,465.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >4 cpus</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M279.8,444.0 L279.8,435.0 M279.8,54.1 L279.8,63.1 '/> <g transform="translate(279.8,465.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >8 cpus</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M341.6,444.0 L341.6,435.0 M341.6,54.1 L341.6,63.1 '/> <g transform="translate(341.6,465.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >16 cpus</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M403.4,444.0 L403.4,435.0 M403.4,54.1 L403.4,63.1 '/> <g transform="translate(403.4,465.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >32 cpus</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M465.1,444.0 L465.1,435.0 M465.1,54.1 L465.1,63.1 '/> <g transform="translate(465.1,465.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >gpu</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M526.9,444.0 L526.9,435.0 M526.9,54.1 L526.9,63.1 '/> <g transform="translate(526.9,465.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >gpu(kernel only)</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M63.6,54.1 L63.6,444.0 L557.8,444.0 L557.8,54.1 L63.6,54.1 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g transform="translate(16.3,249.1) rotate(270)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >time(s)</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g transform="translate(310.7,31.0)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >bitonicSort benchmark</tspan></text> + </g> +</g> + <g id="gnuplot_plot_1" ><title>gnuplot_plot_1</title> +<g fill="none" color="white" stroke="black" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g stroke='none' shape-rendering='crispEdges'> + <polygon fill = 'rgb(224, 255, 255)' points = '79.0,444.0 110.0,444.0 110.0,85.1 79.0,85.1 '/> + </g> + <path stroke='rgb( 0, 0, 0)' d='M79.0,444.0 L79.0,85.2 L109.9,85.2 L109.9,444.0 L79.0,444.0 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g stroke='none' shape-rendering='crispEdges'> + <polygon fill = 'rgb(224, 255, 255)' points = '140.8,444.0 171.8,444.0 171.8,241.7 140.8,241.7 '/> + </g> + <path stroke='rgb( 0, 0, 0)' d='M140.8,444.0 L140.8,241.8 L171.7,241.8 L171.7,444.0 L140.8,444.0 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g stroke='none' shape-rendering='crispEdges'> + <polygon fill = 'rgb(224, 255, 255)' points = '202.6,444.0 233.6,444.0 233.6,340.3 202.6,340.3 '/> + </g> + <path stroke='rgb( 0, 0, 0)' d='M202.6,444.0 L202.6,340.4 L233.5,340.4 L233.5,444.0 L202.6,444.0 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g stroke='none' shape-rendering='crispEdges'> + <polygon fill = 'rgb(224, 255, 255)' points = '264.4,444.0 295.4,444.0 295.4,389.1 264.4,389.1 '/> + </g> + <path stroke='rgb( 0, 0, 0)' d='M264.4,444.0 L264.4,389.2 L295.3,389.2 L295.3,444.0 L264.4,444.0 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g stroke='none' shape-rendering='crispEdges'> + <polygon fill = 'rgb(224, 255, 255)' points = '326.1,444.0 357.1,444.0 357.1,415.0 326.1,415.0 '/> + </g> + <path stroke='rgb( 0, 0, 0)' d='M326.1,444.0 L326.1,415.1 L357.0,415.1 L357.0,444.0 L326.1,444.0 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g stroke='none' shape-rendering='crispEdges'> + <polygon fill = 'rgb(224, 255, 255)' points = '387.9,444.0 418.9,444.0 418.9,427.7 387.9,427.7 '/> + </g> + <path stroke='rgb( 0, 0, 0)' d='M387.9,444.0 L387.9,427.8 L418.8,427.8 L418.8,444.0 L387.9,444.0 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g stroke='none' shape-rendering='crispEdges'> + <polygon fill = 'rgb(224, 255, 255)' points = '449.7,444.0 480.7,444.0 480.7,396.9 449.7,396.9 '/> + </g> + <path stroke='rgb( 0, 0, 0)' d='M449.7,444.0 L449.7,397.0 L480.6,397.0 L480.6,444.0 L449.7,444.0 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g stroke='none' shape-rendering='crispEdges'> + <polygon fill = 'rgb(224, 255, 255)' points = '511.5,444.0 542.5,444.0 542.5,442.5 511.5,442.5 '/> + </g> + <path stroke='rgb( 0, 0, 0)' d='M511.5,444.0 L511.5,442.6 L542.4,442.6 L542.4,444.0 L511.5,444.0 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> + </g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="black" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M63.6,54.1 L63.6,444.0 L557.8,444.0 L557.8,54.1 L63.6,54.1 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +</g> +</svg> +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Paper/pic/bitonicSort.xbb Sun Apr 22 18:38:16 2018 +0900 @@ -0,0 +1,8 @@ +%%Title: fig/bitonicSort.pdf +%%Creator: extractbb 20170318 +%%BoundingBox: 0 0 600 480 +%%HiResBoundingBox: 0.000000 0.000000 600.000000 480.000000 +%%PDFVersion: 1.5 +%%Pages: 1 +%%CreationDate: Sat Feb 3 22:27:55 2018 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Paper/pic/twice.svg Sun Apr 22 18:38:16 2018 +0900 @@ -0,0 +1,189 @@ +<?xml version="1.0" encoding="utf-8" standalone="no"?> +<svg + width="600" height="480" + viewBox="0 0 600 480" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" +> + +<title>Gnuplot</title> +<desc>Produced by GNUPLOT 5.2 patchlevel 2 </desc> + +<g id="gnuplot_canvas"> + +<rect x="0" y="0" width="600" height="480" fill="none"/> +<defs> + + <circle id='gpDot' r='0.5' stroke-width='0.5'/> + <path id='gpPt0' stroke-width='0.222' stroke='currentColor' d='M-1,0 h2 M0,-1 v2'/> + <path id='gpPt1' stroke-width='0.222' stroke='currentColor' d='M-1,-1 L1,1 M1,-1 L-1,1'/> + <path id='gpPt2' stroke-width='0.222' stroke='currentColor' d='M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1'/> + <rect id='gpPt3' stroke-width='0.222' stroke='currentColor' x='-1' y='-1' width='2' height='2'/> + <rect id='gpPt4' stroke-width='0.222' stroke='currentColor' fill='currentColor' x='-1' y='-1' width='2' height='2'/> + <circle id='gpPt5' stroke-width='0.222' stroke='currentColor' cx='0' cy='0' r='1'/> + <use xlink:href='#gpPt5' id='gpPt6' fill='currentColor' stroke='none'/> + <path id='gpPt7' stroke-width='0.222' stroke='currentColor' d='M0,-1.33 L-1.33,0.67 L1.33,0.67 z'/> + <use xlink:href='#gpPt7' id='gpPt8' fill='currentColor' stroke='none'/> + <use xlink:href='#gpPt7' id='gpPt9' stroke='currentColor' transform='rotate(180)'/> + <use xlink:href='#gpPt9' id='gpPt10' fill='currentColor' stroke='none'/> + <use xlink:href='#gpPt3' id='gpPt11' stroke='currentColor' transform='rotate(45)'/> + <use xlink:href='#gpPt11' id='gpPt12' fill='currentColor' stroke='none'/> + <path id='gpPt13' stroke-width='0.222' stroke='currentColor' d='M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z'/> + <use xlink:href='#gpPt13' id='gpPt14' fill='currentColor' stroke='none'/> + <filter id='textbox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'> + <feFlood flood-color='white' flood-opacity='1' result='bgnd'/> + <feComposite in='SourceGraphic' in2='bgnd' operator='atop'/> + </filter> + <filter id='greybox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'> + <feFlood flood-color='lightgrey' flood-opacity='1' result='grey'/> + <feComposite in='SourceGraphic' in2='grey' operator='atop'/> + </filter> +</defs> +<g fill="none" color="white" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,444.0 L89.2,444.0 M556.7,444.0 L547.7,444.0 '/> <g transform="translate(71.9,447.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 0</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,379.0 L89.2,379.0 M556.7,379.0 L547.7,379.0 '/> <g transform="translate(71.9,382.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 200</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,314.0 L89.2,314.0 M556.7,314.0 L547.7,314.0 '/> <g transform="translate(71.9,317.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 400</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,249.0 L89.2,249.0 M556.7,249.0 L547.7,249.0 '/> <g transform="translate(71.9,252.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 600</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,184.1 L89.2,184.1 M556.7,184.1 L547.7,184.1 '/> <g transform="translate(71.9,188.0)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 800</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,119.1 L89.2,119.1 M556.7,119.1 L547.7,119.1 '/> <g transform="translate(71.9,123.0)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 1000</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,54.1 L89.2,54.1 M556.7,54.1 L547.7,54.1 '/> <g transform="translate(71.9,58.0)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 1200</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M110.0,444.0 L110.0,435.0 M110.0,54.1 L110.0,63.1 '/> <g transform="translate(110.0,465.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >1 cpu</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M169.5,444.0 L169.5,435.0 M169.5,54.1 L169.5,63.1 '/> <g transform="translate(169.5,465.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >2 cpus</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M229.1,444.0 L229.1,435.0 M229.1,54.1 L229.1,63.1 '/> <g transform="translate(229.1,465.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >4 cpus</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M288.7,444.0 L288.7,435.0 M288.7,54.1 L288.7,63.1 '/> <g transform="translate(288.7,465.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >8 cpus</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M348.2,444.0 L348.2,435.0 M348.2,54.1 L348.2,63.1 '/> <g transform="translate(348.2,465.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >16 cpus</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M407.8,444.0 L407.8,435.0 M407.8,54.1 L407.8,63.1 '/> <g transform="translate(407.8,465.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >32 cpus</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M467.4,444.0 L467.4,435.0 M467.4,54.1 L467.4,63.1 '/> <g transform="translate(467.4,465.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >gpu</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M526.9,444.0 L526.9,435.0 M526.9,54.1 L526.9,63.1 '/> <g transform="translate(526.9,465.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >gpu(kernel only)</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,54.1 L80.2,444.0 L556.7,444.0 L556.7,54.1 L80.2,54.1 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g transform="translate(16.3,249.1) rotate(270)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >time(ms)</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g transform="translate(318.4,31.0)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >twice benchmark</tspan></text> + </g> +</g> + <g id="gnuplot_plot_1" ><title>gnuplot_plot_1</title> +<g fill="none" color="white" stroke="black" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g stroke='none' shape-rendering='crispEdges'> + <polygon fill = 'rgb(224, 255, 255)' points = '95.1,444.0 125.0,444.0 125.0,60.1 95.1,60.1 '/> + </g> + <path stroke='rgb( 0, 0, 0)' d='M95.1,444.0 L95.1,60.2 L124.9,60.2 L124.9,444.0 L95.1,444.0 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g stroke='none' shape-rendering='crispEdges'> + <polygon fill = 'rgb(224, 255, 255)' points = '154.7,444.0 184.5,444.0 184.5,239.9 154.7,239.9 '/> + </g> + <path stroke='rgb( 0, 0, 0)' d='M154.7,444.0 L154.7,240.0 L184.4,240.0 L184.4,444.0 L154.7,444.0 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g stroke='none' shape-rendering='crispEdges'> + <polygon fill = 'rgb(224, 255, 255)' points = '214.2,444.0 244.1,444.0 244.1,338.6 214.2,338.6 '/> + </g> + <path stroke='rgb( 0, 0, 0)' d='M214.2,444.0 L214.2,338.7 L244.0,338.7 L244.0,444.0 L214.2,444.0 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g stroke='none' shape-rendering='crispEdges'> + <polygon fill = 'rgb(224, 255, 255)' points = '273.8,444.0 303.7,444.0 303.7,391.9 273.8,391.9 '/> + </g> + <path stroke='rgb( 0, 0, 0)' d='M273.8,444.0 L273.8,392.0 L303.6,392.0 L303.6,444.0 L273.8,444.0 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g stroke='none' shape-rendering='crispEdges'> + <polygon fill = 'rgb(224, 255, 255)' points = '333.3,444.0 363.2,444.0 363.2,416.1 333.3,416.1 '/> + </g> + <path stroke='rgb( 0, 0, 0)' d='M333.3,444.0 L333.3,416.2 L363.1,416.2 L363.1,444.0 L333.3,444.0 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g stroke='none' shape-rendering='crispEdges'> + <polygon fill = 'rgb(224, 255, 255)' points = '392.9,444.0 422.8,444.0 422.8,429.8 392.9,429.8 '/> + </g> + <path stroke='rgb( 0, 0, 0)' d='M392.9,444.0 L392.9,429.9 L422.7,429.9 L422.7,444.0 L392.9,444.0 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g stroke='none' shape-rendering='crispEdges'> + <polygon fill = 'rgb(224, 255, 255)' points = '452.5,444.0 482.3,444.0 482.3,402.6 452.5,402.6 '/> + </g> + <path stroke='rgb( 0, 0, 0)' d='M452.5,444.0 L452.5,402.7 L482.2,402.7 L482.2,444.0 L452.5,444.0 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g stroke='none' shape-rendering='crispEdges'> + <polygon fill = 'rgb(224, 255, 255)' points = '512.0,444.0 541.9,444.0 541.9,441.9 512.0,441.9 '/> + </g> + <path stroke='rgb( 0, 0, 0)' d='M512.0,444.0 L512.0,442.0 L541.8,442.0 L541.8,444.0 L512.0,444.0 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> + </g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="black" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,54.1 L80.2,444.0 L556.7,444.0 L556.7,54.1 L80.2,54.1 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +</g> +</svg> +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Paper/pic/twice.xbb Sun Apr 22 18:38:16 2018 +0900 @@ -0,0 +1,8 @@ +%%Title: fig/twice.pdf +%%Creator: extractbb 20170318 +%%BoundingBox: 0 0 600 480 +%%HiResBoundingBox: 0.000000 0.000000 600.000000 480.000000 +%%PDFVersion: 1.5 +%%Pages: 1 +%%CreationDate: Tue Feb 6 04:08:41 2018 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Paper/pic/vsgo.svg Sun Apr 22 18:38:16 2018 +0900 @@ -0,0 +1,174 @@ +<?xml version="1.0" encoding="utf-8" standalone="no"?> +<svg + width="600" height="480" + viewBox="0 0 600 480" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" +> + +<title>Gnuplot</title> +<desc>Produced by GNUPLOT 5.2 patchlevel 2 </desc> + +<g id="gnuplot_canvas"> + +<rect x="0" y="0" width="600" height="480" fill="none"/> +<defs> + + <circle id='gpDot' r='0.5' stroke-width='0.5'/> + <path id='gpPt0' stroke-width='0.222' stroke='currentColor' d='M-1,0 h2 M0,-1 v2'/> + <path id='gpPt1' stroke-width='0.222' stroke='currentColor' d='M-1,-1 L1,1 M1,-1 L-1,1'/> + <path id='gpPt2' stroke-width='0.222' stroke='currentColor' d='M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1'/> + <rect id='gpPt3' stroke-width='0.222' stroke='currentColor' x='-1' y='-1' width='2' height='2'/> + <rect id='gpPt4' stroke-width='0.222' stroke='currentColor' fill='currentColor' x='-1' y='-1' width='2' height='2'/> + <circle id='gpPt5' stroke-width='0.222' stroke='currentColor' cx='0' cy='0' r='1'/> + <use xlink:href='#gpPt5' id='gpPt6' fill='currentColor' stroke='none'/> + <path id='gpPt7' stroke-width='0.222' stroke='currentColor' d='M0,-1.33 L-1.33,0.67 L1.33,0.67 z'/> + <use xlink:href='#gpPt7' id='gpPt8' fill='currentColor' stroke='none'/> + <use xlink:href='#gpPt7' id='gpPt9' stroke='currentColor' transform='rotate(180)'/> + <use xlink:href='#gpPt9' id='gpPt10' fill='currentColor' stroke='none'/> + <use xlink:href='#gpPt3' id='gpPt11' stroke='currentColor' transform='rotate(45)'/> + <use xlink:href='#gpPt11' id='gpPt12' fill='currentColor' stroke='none'/> + <path id='gpPt13' stroke-width='0.222' stroke='currentColor' d='M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z'/> + <use xlink:href='#gpPt13' id='gpPt14' fill='currentColor' stroke='none'/> + <filter id='textbox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'> + <feFlood flood-color='white' flood-opacity='1' result='bgnd'/> + <feComposite in='SourceGraphic' in2='bgnd' operator='atop'/> + </filter> + <filter id='greybox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'> + <feFlood flood-color='lightgrey' flood-opacity='1' result='grey'/> + <feComposite in='SourceGraphic' in2='grey' operator='atop'/> + </filter> +</defs> +<g fill="none" color="white" stroke="black" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,422.4 L89.2,422.4 M575.0,422.4 L566.0,422.4 '/> <g transform="translate(71.9,426.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 0</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,361.0 L89.2,361.0 M575.0,361.0 L566.0,361.0 '/> <g transform="translate(71.9,364.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 200</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,299.6 L89.2,299.6 M575.0,299.6 L566.0,299.6 '/> <g transform="translate(71.9,303.5)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 400</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,238.2 L89.2,238.2 M575.0,238.2 L566.0,238.2 '/> <g transform="translate(71.9,242.1)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 600</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,176.9 L89.2,176.9 M575.0,176.9 L566.0,176.9 '/> <g transform="translate(71.9,180.8)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 800</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,115.5 L89.2,115.5 M575.0,115.5 L566.0,115.5 '/> <g transform="translate(71.9,119.4)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 1000</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,54.1 L89.2,54.1 M575.0,54.1 L566.0,54.1 '/> <g transform="translate(71.9,58.0)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 1200</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,422.4 L80.2,413.4 M80.2,54.1 L80.2,63.1 '/> <g transform="translate(80.2,444.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" > 1</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M179.2,422.4 L179.2,413.4 M179.2,54.1 L179.2,63.1 '/> <g transform="translate(179.2,444.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" > 2</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M278.1,422.4 L278.1,413.4 M278.1,54.1 L278.1,63.1 '/> <g transform="translate(278.1,444.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" > 4</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M377.1,422.4 L377.1,413.4 M377.1,54.1 L377.1,63.1 '/> <g transform="translate(377.1,444.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" > 8</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M476.0,422.4 L476.0,413.4 M476.0,54.1 L476.0,63.1 '/> <g transform="translate(476.0,444.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" > 16</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M575.0,422.4 L575.0,413.4 M575.0,54.1 L575.0,63.1 '/> <g transform="translate(575.0,444.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" > 32</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,54.1 L80.2,422.4 L575.0,422.4 L575.0,54.1 L80.2,54.1 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g transform="translate(16.3,238.3) rotate(270)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >time(ms)</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g transform="translate(327.6,471.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >CPUs</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g transform="translate(327.6,31.0)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >twice</tspan></text> + </g> +</g> + <g id="gnuplot_plot_1" ><title>"gears_poweredge"</title> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g transform="translate(507.9,76.0)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text>"gears_poweredge"</text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='rgb(148, 0, 211)' d='M516.2,72.1 L558.4,72.1 M80.2,59.9 L179.2,229.7 L278.1,322.9 L377.1,373.3 L476.0,396.2 L575.0,406.5 + '/> <use xlink:href='#gpPt1' transform='translate(80.2,59.9) scale(4.50)' color='rgb(148, 0, 211)'/> + <use xlink:href='#gpPt1' transform='translate(179.2,229.7) scale(4.50)' color='rgb(148, 0, 211)'/> + <use xlink:href='#gpPt1' transform='translate(278.1,322.9) scale(4.50)' color='rgb(148, 0, 211)'/> + <use xlink:href='#gpPt1' transform='translate(377.1,373.3) scale(4.50)' color='rgb(148, 0, 211)'/> + <use xlink:href='#gpPt1' transform='translate(476.0,396.2) scale(4.50)' color='rgb(148, 0, 211)'/> + <use xlink:href='#gpPt1' transform='translate(575.0,406.5) scale(4.50)' color='rgb(148, 0, 211)'/> + <use xlink:href='#gpPt1' transform='translate(537.3,72.1) scale(4.50)' color='rgb(148, 0, 211)'/> +</g> + </g> + <g id="gnuplot_plot_2" ><title>"go_poweredge"</title> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g transform="translate(507.9,94.0)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text>"go_poweredge"</text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='rgb( 0, 158, 115)' d='M516.2,90.1 L558.4,90.1 M80.2,363.9 L179.2,384.5 L278.1,407.0 L377.1,406.4 L476.0,405.9 L575.0,408.9 + '/> <use xlink:href='#gpPt2' transform='translate(80.2,363.9) scale(4.50)' color='rgb( 0, 158, 115)'/> + <use xlink:href='#gpPt2' transform='translate(179.2,384.5) scale(4.50)' color='rgb( 0, 158, 115)'/> + <use xlink:href='#gpPt2' transform='translate(278.1,407.0) scale(4.50)' color='rgb( 0, 158, 115)'/> + <use xlink:href='#gpPt2' transform='translate(377.1,406.4) scale(4.50)' color='rgb( 0, 158, 115)'/> + <use xlink:href='#gpPt2' transform='translate(476.0,405.9) scale(4.50)' color='rgb( 0, 158, 115)'/> + <use xlink:href='#gpPt2' transform='translate(575.0,408.9) scale(4.50)' color='rgb( 0, 158, 115)'/> + <use xlink:href='#gpPt2' transform='translate(537.3,90.1) scale(4.50)' color='rgb( 0, 158, 115)'/> +</g> + </g> +<g fill="none" color="white" stroke="rgb( 0, 158, 115)" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="black" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,54.1 L80.2,422.4 L575.0,422.4 L575.0,54.1 L80.2,54.1 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +</g> +</svg> +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Paper/pic/vsgo.xbb Sun Apr 22 18:38:16 2018 +0900 @@ -0,0 +1,8 @@ +%%Title: fig/vsgo.pdf +%%Creator: extractbb 20170318 +%%BoundingBox: 0 0 600 480 +%%HiResBoundingBox: 0.000000 0.000000 600.000000 480.000000 +%%PDFVersion: 1.5 +%%Pages: 1 +%%CreationDate: Wed Feb 28 23:36:32 2018 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Paper/pic/vsopenmp.svg Sun Apr 22 18:38:16 2018 +0900 @@ -0,0 +1,174 @@ +<?xml version="1.0" encoding="utf-8" standalone="no"?> +<svg + width="600" height="480" + viewBox="0 0 600 480" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" +> + +<title>Gnuplot</title> +<desc>Produced by GNUPLOT 5.2 patchlevel 2 </desc> + +<g id="gnuplot_canvas"> + +<rect x="0" y="0" width="600" height="480" fill="none"/> +<defs> + + <circle id='gpDot' r='0.5' stroke-width='0.5'/> + <path id='gpPt0' stroke-width='0.222' stroke='currentColor' d='M-1,0 h2 M0,-1 v2'/> + <path id='gpPt1' stroke-width='0.222' stroke='currentColor' d='M-1,-1 L1,1 M1,-1 L-1,1'/> + <path id='gpPt2' stroke-width='0.222' stroke='currentColor' d='M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1'/> + <rect id='gpPt3' stroke-width='0.222' stroke='currentColor' x='-1' y='-1' width='2' height='2'/> + <rect id='gpPt4' stroke-width='0.222' stroke='currentColor' fill='currentColor' x='-1' y='-1' width='2' height='2'/> + <circle id='gpPt5' stroke-width='0.222' stroke='currentColor' cx='0' cy='0' r='1'/> + <use xlink:href='#gpPt5' id='gpPt6' fill='currentColor' stroke='none'/> + <path id='gpPt7' stroke-width='0.222' stroke='currentColor' d='M0,-1.33 L-1.33,0.67 L1.33,0.67 z'/> + <use xlink:href='#gpPt7' id='gpPt8' fill='currentColor' stroke='none'/> + <use xlink:href='#gpPt7' id='gpPt9' stroke='currentColor' transform='rotate(180)'/> + <use xlink:href='#gpPt9' id='gpPt10' fill='currentColor' stroke='none'/> + <use xlink:href='#gpPt3' id='gpPt11' stroke='currentColor' transform='rotate(45)'/> + <use xlink:href='#gpPt11' id='gpPt12' fill='currentColor' stroke='none'/> + <path id='gpPt13' stroke-width='0.222' stroke='currentColor' d='M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z'/> + <use xlink:href='#gpPt13' id='gpPt14' fill='currentColor' stroke='none'/> + <filter id='textbox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'> + <feFlood flood-color='white' flood-opacity='1' result='bgnd'/> + <feComposite in='SourceGraphic' in2='bgnd' operator='atop'/> + </filter> + <filter id='greybox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'> + <feFlood flood-color='lightgrey' flood-opacity='1' result='grey'/> + <feComposite in='SourceGraphic' in2='grey' operator='atop'/> + </filter> +</defs> +<g fill="none" color="white" stroke="black" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,422.4 L89.2,422.4 M575.0,422.4 L566.0,422.4 '/> <g transform="translate(71.9,426.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 0</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,361.0 L89.2,361.0 M575.0,361.0 L566.0,361.0 '/> <g transform="translate(71.9,364.9)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 200</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,299.6 L89.2,299.6 M575.0,299.6 L566.0,299.6 '/> <g transform="translate(71.9,303.5)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 400</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,238.2 L89.2,238.2 M575.0,238.2 L566.0,238.2 '/> <g transform="translate(71.9,242.1)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 600</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,176.9 L89.2,176.9 M575.0,176.9 L566.0,176.9 '/> <g transform="translate(71.9,180.8)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 800</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,115.5 L89.2,115.5 M575.0,115.5 L566.0,115.5 '/> <g transform="translate(71.9,119.4)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 1000</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,54.1 L89.2,54.1 M575.0,54.1 L566.0,54.1 '/> <g transform="translate(71.9,58.0)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text><tspan font-family="Arial" > 1200</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,422.4 L80.2,413.4 M80.2,54.1 L80.2,63.1 '/> <g transform="translate(80.2,444.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" > 1</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M179.2,422.4 L179.2,413.4 M179.2,54.1 L179.2,63.1 '/> <g transform="translate(179.2,444.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" > 2</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M278.1,422.4 L278.1,413.4 M278.1,54.1 L278.1,63.1 '/> <g transform="translate(278.1,444.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" > 4</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M377.1,422.4 L377.1,413.4 M377.1,54.1 L377.1,63.1 '/> <g transform="translate(377.1,444.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" > 8</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M476.0,422.4 L476.0,413.4 M476.0,54.1 L476.0,63.1 '/> <g transform="translate(476.0,444.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" > 16</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M575.0,422.4 L575.0,413.4 M575.0,54.1 L575.0,63.1 '/> <g transform="translate(575.0,444.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" > 32</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,54.1 L80.2,422.4 L575.0,422.4 L575.0,54.1 L80.2,54.1 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g transform="translate(16.3,238.3) rotate(270)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >time(ms)</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g transform="translate(327.6,471.3)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >CPUs</tspan></text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g transform="translate(327.6,31.0)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="middle"> + <text><tspan font-family="Arial" >twice</tspan></text> + </g> +</g> + <g id="gnuplot_plot_1" ><title>"gears_poweredge"</title> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g transform="translate(507.9,76.0)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text>"gears_poweredge"</text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='rgb(148, 0, 211)' d='M516.2,72.1 L558.4,72.1 M80.2,59.9 L179.2,229.7 L278.1,322.9 L377.1,373.3 L476.0,396.2 L575.0,406.5 + '/> <use xlink:href='#gpPt1' transform='translate(80.2,59.9) scale(4.50)' color='rgb(148, 0, 211)'/> + <use xlink:href='#gpPt1' transform='translate(179.2,229.7) scale(4.50)' color='rgb(148, 0, 211)'/> + <use xlink:href='#gpPt1' transform='translate(278.1,322.9) scale(4.50)' color='rgb(148, 0, 211)'/> + <use xlink:href='#gpPt1' transform='translate(377.1,373.3) scale(4.50)' color='rgb(148, 0, 211)'/> + <use xlink:href='#gpPt1' transform='translate(476.0,396.2) scale(4.50)' color='rgb(148, 0, 211)'/> + <use xlink:href='#gpPt1' transform='translate(575.0,406.5) scale(4.50)' color='rgb(148, 0, 211)'/> + <use xlink:href='#gpPt1' transform='translate(537.3,72.1) scale(4.50)' color='rgb(148, 0, 211)'/> +</g> + </g> + <g id="gnuplot_plot_2" ><title>"openmp_poweredge"</title> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <g transform="translate(507.9,94.0)" stroke="none" fill="black" font-family="Arial" font-size="12.00" text-anchor="end"> + <text>"openmp_poweredge"</text> + </g> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='rgb( 0, 158, 115)' d='M516.2,90.1 L558.4,90.1 M80.2,323.4 L179.2,363.1 L278.1,390.7 L377.1,406.2 L476.0,412.5 L575.0,413.3 + '/> <use xlink:href='#gpPt2' transform='translate(80.2,323.4) scale(4.50)' color='rgb( 0, 158, 115)'/> + <use xlink:href='#gpPt2' transform='translate(179.2,363.1) scale(4.50)' color='rgb( 0, 158, 115)'/> + <use xlink:href='#gpPt2' transform='translate(278.1,390.7) scale(4.50)' color='rgb( 0, 158, 115)'/> + <use xlink:href='#gpPt2' transform='translate(377.1,406.2) scale(4.50)' color='rgb( 0, 158, 115)'/> + <use xlink:href='#gpPt2' transform='translate(476.0,412.5) scale(4.50)' color='rgb( 0, 158, 115)'/> + <use xlink:href='#gpPt2' transform='translate(575.0,413.3) scale(4.50)' color='rgb( 0, 158, 115)'/> + <use xlink:href='#gpPt2' transform='translate(537.3,90.1) scale(4.50)' color='rgb( 0, 158, 115)'/> +</g> + </g> +<g fill="none" color="white" stroke="rgb( 0, 158, 115)" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="black" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> + <path stroke='black' d='M80.2,54.1 L80.2,422.4 L575.0,422.4 L575.0,54.1 L80.2,54.1 Z '/></g> +<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter"> +</g> +</g> +</svg> +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Paper/pic/vsopenmp.xbb Sun Apr 22 18:38:16 2018 +0900 @@ -0,0 +1,8 @@ +%%Title: fig/vsopenmp.pdf +%%Creator: extractbb 20170318 +%%BoundingBox: 0 0 600 480 +%%HiResBoundingBox: 0.000000 0.000000 600.000000 480.000000 +%%PDFVersion: 1.5 +%%Pages: 1 +%%CreationDate: Wed Feb 28 23:36:32 2018 +
--- a/Paper/sigos.tex Sun Apr 22 17:35:03 2018 +0900 +++ b/Paper/sigos.tex Sun Apr 22 18:38:16 2018 +0900 @@ -349,55 +349,257 @@ この par goto 文は通常のプログラミングの関数呼び出しのように扱うことができる。 -\section{比較} +%\section{比較} +% +%従来のプログラミングスタイルとの比較。 +%Gears のプログラミングは関数呼出を中心とするプログラミングとはかなり異なる。 +%Gears は関数呼出を禁止しているわけではなく、使用する資源の制御に問題がないなら普通に関数呼出して良い。 +%%Linux kernel などでは関数呼出の大半はインライン展開されることを期待してプログラミングされており、 +%関数呼出で予測できないスタックの爆発やCPU資源の浪費が起きないようにプログラミングされている。 +%Gears では Gears 間のプログラミングは戻り先や使用する資源を明示する必要がある。 +% +%goto 文での引数は通常の関数呼出と異なり、スタック(環境)に積むことができない。引数に必要な情報を含むData Gearを +%持ち歩くスタイルとなる。一つのインタフェース内部では、これらは共通している。実際、これらはメタレベルでは、 +%Context というMeta Data Gear にすべて格納されている。メタレベルは、Data Gear の詳細な型は使用されない。 +%ノーマルレベルに移行する際に stub Code Gear を通して詳細な型が接続される。 +% +%インタフェースを再利用する際には、呼び出すインタフェースが持つ引数は保存される必要がある。これらは、実際には +%Context 内にあるので自動的に保存されている。ノーマルレベルの記述では、... の部分にその意味が込めれている。 +%これは、可変長引数の...と同じ意味だと考えても良い。ただ、LLVM/GCC レベルでそれを実装するのは比較的難しい。 +%なので、今回はScriptによる変換を採用している。 +% +%ノーマルレベルの記述と関数型プログラミングの記述の比較。Gear は必ず継続を渡す必要がある。これは一段の +%関数呼出を許しているのと同等である。70年代の Fortan の関数呼出は決まった場所に戻り先を格納するので +%再起呼出ができなかったのと同じである。例えば Code Gears 以下のような型を持つ。ここで t は継続の型である。 +%Stack は Stack を受けとる Stack \verb|->| t という Code Gear を継続として引数で受けとる。popStack はこの引数を +%呼び出す。 +% +%\verb|popStack : {a t : Set} -> Stack | +% +%\verb| -> (Stack -> t) -> t| +% +%つまり、Code Gear は制限された関数の形式を持っている。Data Gear は、関数型言語の直積や排他的論理和(Sum)を含むデータ型に +%対応する。しかし、一つの Context で実行される Data Gear は、一つの巨大なSumに含まれるようになっている。これを +%メタレベルでは、中の型の詳細に立ち入ることなく実行する。 +% +%%Context はノーマルレベル のData Gear の他に様々なメタ情報を持つ。例えば、メモリ管理情報や実行される CPU 、あるいは、Task の +%状態、待ち合わせている Data Gear などである。これらの情報は C やアセンブラのレベルで実装されるのと同時に、通常の Gear の +%プログラミングにも対応する。例えば、CPU をかそうてきに Gears で記述すればソフトウェア的な並列実行を実現し、実際の +%GPU を用いれば GPU による並列実行となる。この実行をモデル検査的な状態数え上げに対応させればモデル検査を実行できる。 +% +%Haskell などを実行可能仕様記述として用いる OS の検証\cite{Klein:2009:SFV:1629575.1629596,Chen:2015:UCH:2815400.2815402}と、Code Gear を用いる手法は類似>しているが、Code Gear の場合は、 +%記述を制限し、Code と仕様の対応、さらにCodeと資源の対応が明確になる利点がある。 +% +%型つきアセンブラ\cite{Yang:2010:SLI:1806596.1806610}は、より低レベルの関数型の記述であると言える。アセンブラの記述自体は小さく扱いやすいが、 +%OS レベルあるいはアプリケーションレベルからの距離が大きい。型の整合性を保証するだけでは OS の検証としては +%不十分なので、証明やモデル検査を用いることになるが、記述量が多いのが、その際に欠点となる。 +%Code Gear は、より大きな単位であり、プログラミングレベルの抽象化が可能になっているので、これらの記述の +%大きさの欠点をカバーできる可能性がある。 +% +%証明手法は、従来では Hoare Logic \cite{Chen:2015:UCH:2815400.2815402}のような Post Condition / Pre Condition を用いる方法が使われている。 +%現在のGearsは、Agda への変換は考えているが、その上の具体的な証明方法はまだ用意されていない。 +% -従来のプログラミングスタイルとの比較。 -Gears のプログラミングは関数呼出を中心とするプログラミングとはかなり異なる。 -Gears は関数呼出を禁止しているわけではなく、使用する資源の制御に問題がないなら普通に関数呼出して良い。 -Linux kernel などでは関数呼出の大半はインライン展開されることを期待してプログラミングされており、 -関数呼出で予測できないスタックの爆発やCPU資源の浪費が起きないようにプログラミングされている。 -Gears では Gears 間のプログラミングは戻り先や使用する資源を明示する必要がある。 +\section{Gears OS の評価} + +\subsection{実験環境} +今回 Twice、 BitonicSort をそれぞれ CPU、GPU環境で Gears OS の測定を行う。 + +使用する実験環境を表\ref{tab:powerEdge}、 GPU 環境を表\ref{tab:gtx1070} に示す。 +また、今回は LLVM/Clang で実装した CbC コンパイラを用いて Gears OS をコンパイルする。 -goto 文での引数は通常の関数呼出と異なり、スタック(環境)に積むことができない。引数に必要な情報を含むData Gearを -持ち歩くスタイルとなる。一つのインタフェース内部では、これらは共通している。実際、これらはメタレベルでは、 -Context というMeta Data Gear にすべて格納されている。メタレベルは、Data Gear の詳細な型は使用されない。 -ノーマルレベルに移行する際に stub Code Gear を通して詳細な型が接続される。 +\begin{table}[htbp] + \begin{center} + \begin{tabular}{|l|l|} \hline + Model & Dell PowerEdgeR630 \\ \hline + OS & CentOS 7.4.1708 \\ \hline + Memory & 768GB \\ \hline + CPU & 2 x 18-Core Intel Xeon 2.30GHz \\ \hline + \end{tabular} + \caption{実行環境} + \label{tab:powerEdge} + \end{center} +\end{table} + +\begin{table}[htbp] + \begin{center} + \begin{tabular}{|l||l|} \hline + GPU & GeForce GTX 1070 \\ \hline + Cores & 1920 \\ \hline + Clock Speed & 1683MHz \\ \hline + Memory Size & 8GB GDDR5 \\ \hline + Memory Bandwidth & 256GB/s \\ \hline + \end{tabular} + \caption{GPU 環境} + \label{tab:gtx1070} + \end{center} +\end{table} + +\subsection{Twice} +Twice は与えられた整数配列のすべての要素を2倍にする例題である。 -インタフェースを再利用する際には、呼び出すインタフェースが持つ引数は保存される必要がある。これらは、実際には -Context 内にあるので自動的に保存されている。ノーマルレベルの記述では、... の部分にその意味が込めれている。 -これは、可変長引数の...と同じ意味だと考えても良い。ただ、LLVM/GCC レベルでそれを実装するのは比較的難しい。 -なので、今回はScriptによる変換を採用している。 +Twice の Task は Gears OS のデータ並列で実行される。 +CPU の場合は配列ある程度の範囲に分割してTaskを生成する。 +これは要素毎に Task を生成するとその分の Context を生成するために時間を取ってしまうからである。 + +Twice は並列実行の依存関係もなく、データ並列での実行に適した課題である。 +そのため、 通信時間を考慮しなければ CPU よりコア数が多い GPU が有利となる。 + +要素数$2^{27}$ のデータに対する Twice の実行結果を 表\ref{tab:wice}、図\ref{fig:twice}に示す。 +CPU 実行の際は $2^{27}$ のデータを 64個のTask に分割して並列実行を行っている。 +GPU では1次元の block 数を $2^{15}$、 block 内の thread 数を $2^{10}$ で kernel の実行を行った。 +ここでの ``GPU`` は CPU、GPU 間のデータの通信時間も含めた時間、 ``GPU(kernel only)`` は kernel のみの実行時間である。 -ノーマルレベルの記述と関数型プログラミングの記述の比較。Gear は必ず継続を渡す必要がある。これは一段の -関数呼出を許しているのと同等である。70年代の Fortan の関数呼出は決まった場所に戻り先を格納するので -再起呼出ができなかったのと同じである。例えば Code Gears 以下のような型を持つ。ここで t は継続の型である。 -Stack は Stack を受けとる Stack \verb|->| t という Code Gear を継続として引数で受けとる。popStack はこの引数を -呼び出す。 +\begin{table}[htbp] + \begin{center} + \begin{tabular}{|l||l|} \hline + Processor & Time(ms) \\ \hline + 1 CPU & 1181.215 \\ \hline + 2 CPUs & 627.914 \\ \hline + 4 CPUs & 324.059 \\ \hline + 8 CPUs & 159.932 \\ \hline + 16 CPUs & 85.518\\ \hline + 32 CPUs & 43.496 \\ \hline + GPU & 127.018\\ \hline + GPU(kernel only)& 6.018 \\ \hline + \end{tabular} + \caption{$2^{27}$ のデータに対する Twice} + \label{tab:twice} + \end{center} +\end{table} -\verb|popStack : {a t : Set} -> Stack | +\begin{figure}[htbp] + \begin{center} + \includegraphics[width=70mm]{./pic/twice.pdf} + \end{center} + \caption{$2^{27}$ のデータに対する Twice} + \label{fig:twice} +\end{figure} + +ある程度の台数効果があると考えられる。 + +GPU での実行は kernel のみの実行時間は 32 CPU に比べて 約 7.2 倍の速度向上が見られた。 +しかし、通信時間を含めると 16 CPU より遅い結果となってしまった。 +CPU、GPU の通信時間かオーバーヘッドになっている事がわかる。 -\verb| -> (Stack -> t) -> t| +\subsection{BitonicSort} +BitonicSort は並列処理向けのソートアルゴリズムである。 +代表的なソートアルゴリズムである Quick Sort も並列処理 を行うことが可能であるが、 QuickSort では ソートの過程で並列度が変動するため、台数効果が出づらい。 +一方でBitonic Sort は最初から最後まで並列度が変わらずに並列処理を行う。 +図\ref{fig:bitonicNetwork} は要素数8のデータに対する BitonicSort のソートネットワークである。 + +\begin{figure}[htbp] + \begin{center} + \includegraphics[width=70mm]{./pic/bitonicNetwork.pdf} + \end{center} + \caption{要素数8の BitonicNetwork} + \label{fig:bitonicNetwork} +\end{figure} + +BitonicSort はステージ毎に決まった2点間の要素の入れ替えを並列に実行することによってソートを行う。 +Gears OS ではこのステージ毎に Output Data Gear を書き出し、 次のステージの Code Gear の Input Data Gear として記述することで BitonicSort を実現する。 -つまり、Code Gear は制限された関数の形式を持っている。Data Gear は、関数型言語の直積や排他的論理和(Sum)を含むデータ型に -対応する。しかし、一つの Context で実行される Data Gear は、一つの巨大なSumに含まれるようになっている。これを -メタレベルでは、中の型の詳細に立ち入ることなく実行する。 +要素数$2^{24}$ のデータに対する BitonicSort の実行結果を 表\ref{tab:bitonicSort}、図\ref{fig:bitonicSort}に示す。 +こちらも Twice と同じくCPU 実行の際は $2^{24}$ のデータを 64個のTask に分割して並列実行を行っている。 +つまり生成される Task は 64 * ステージ数 となる。 +GPU では1次元の block 数を $2^{14}$、 block 内の thread 数を $2^{10}$ で kernel の実行を行った。 + +\begin{table}[htbp] + \begin{center} + \begin{tabular}{|l||l|} \hline + Processor & Time(s) \\ \hline + 1 CPU & 41.416 \\ \hline + 2 CPUs & 23.340\\ \hline + 4 CPUs & 11.952\\ \hline + 8 CPUs & 6.320\\ \hline + 16 CPUs & 3.336\\ \hline + 32 CPUs & 1.872\\ \hline + GPU & 5.420\\ \hline + GPU(kernel only)& 0.163\\ \hline + \end{tabular} + \caption{$2^{24}$ のデータに対する BitonicSort} + \label{tab:bitonicSort} + \end{center} +\end{table} + +\begin{figure}[htbp] + \begin{center} + \includegraphics[width=70mm]{./pic/bitonicSort.pdf} + \end{center} + \caption{$2^{24}$ のデータに対する BitonicSort} + \label{fig:bitonicSort} +\end{figure} -Context はノーマルレベル のData Gear の他に様々なメタ情報を持つ。例えば、メモリ管理情報や実行される CPU 、あるいは、Task の -状態、待ち合わせている Data Gear などである。これらの情報は C やアセンブラのレベルで実装されるのと同時に、通常の Gear の -プログラミングにも対応する。例えば、CPU をかそうてきに Gears で記述すればソフトウェア的な並列実行を実現し、実際の -GPU を用いれば GPU による並列実行となる。この実行をモデル検査的な状態数え上げに対応させればモデル検査を実行できる。 +1 CPU と 32 CPU で 約22.12 倍 の速度向上が見られた。 +GPU では通信時間を含めると 8 CPU の約1.16倍となり、 kernel のみの実行では 32 CPU の約11.48倍となった。 +現在の Gears OS の CUDA 実装では、 Output Data Gear を書き出す際に一度 GPU から CPU へ kernel の実行結果の書き出しを行っており、その処理の時間で差が出たと考えられ +る。 +GPU で実行される Task 同士の依存関係の解決の際はCuDevicePtr などのGPU のメモリへのポインタを渡し、CPU でデータが必要になったときに初めて GPU から CPU へデータの通 +信を行うメタ計算の実装が必要となる。 + +\subsection{OpenMP との比較} +OpenMP\cite{openmp} は C、 C++ のプログラムにアノテーションを付けることで並列化を行う。 +アノテーションを Code \ref{code:openMP} のように for 文の前につけることで、ループの並列化を行う。 + +\lstinputlisting[caption=OpenMP での Twice, label=code:openMP]{./src/openMP.c} -Haskell などを実行可能仕様記述として用いる OS の検証\cite{Klein:2009:SFV:1629575.1629596,Chen:2015:UCH:2815400.2815402}と、Code Gear を用いる手法は類似>しているが、Code Gear の場合は、 -記述を制限し、Code と仕様の対応、さらにCodeと資源の対応が明確になる利点がある。 +OpenMP は既存のコードにアノテーションを付けるだけで並列化を行えるため、変更が少なくて済む。 +しかし、 ループのみの並列化ではプログラム全体の並列度が上がらずアムダールの法則により性能向上が頭打ちになってしまう。 +OpenMP はループの並列化 ではなくブロック単位での並列実行もサポートしているが、アノテーションの記述が増えてしまう。 +また、 OpenMPはコードとデータを厳密に分離していないため、データの待ち合わせ処理をバリア等のアノテーションで記述する。 + +Gears OS では Input Data Gear が揃った Code Gear は並列に実行されるため、プログラム全体の並列度を高めることが出来る。 +また 並列処理のコードとデータの依存関係を par goto 文で簡潔に記述することが出来る。 + +Gears OS と OpenMP で実装した Twice の実行結果の比較を図\ref{fig:vsopenmp} に示す。 +実行環境は 表\ref{tab:powerEdge}、 $2^{27}$ のデータに対して行い、Gears OS 側は配列を 64個のTaskに分割し、OpenMP は for 文を static スケジュールで並列実行した。 +static スケジュールはループの回数をプロセッサーの数で分割し、並列実行を行う openMP のスケジュール方法である。 + +\begin{figure}[htbp] + \begin{center} + \includegraphics[width=70mm]{./pic/vsopenmp.pdf} + \end{center} + \caption{vs OpenMP} + \label{fig:vsopenmp} +\end{figure} -型つきアセンブラ\cite{Yang:2010:SLI:1806596.1806610}は、より低レベルの関数型の記述であると言える。アセンブラの記述自体は小さく扱いやすいが、 -OS レベルあるいはアプリケーションレベルからの距離が大きい。型の整合性を保証するだけでは OS の検証としては -不十分なので、証明やモデル検査を用いることになるが、記述量が多いのが、その際に欠点となる。 -Code Gear は、より大きな単位であり、プログラミングレベルの抽象化が可能になっているので、これらの記述の -大きさの欠点をカバーできる可能性がある。 +実行結果として OpenMP は 1CPUと 32CPU で約10.8 倍の速度向上がみられた。 +一方 Gears OS では約 27.1 倍の速度向上のため、台数効果が高くなっている。 +しかし、Gears OS は 1CPU での実行時間がOpenMP に比べて大幅に遅くなっている。 + +\subsection{Go 言語との比較} +Go 言語 は Google社が開発しているプログラミング言語である。 +Go 言語によるTwice の実装例を code \ref{code:go}に示す。 + +\lstinputlisting[caption=Go 言語での Twice, label=code:go]{./src/go.go} + +Go 言語は並列実行を ``go function(argv)'' のような構文で行う。 +この並列実行を goroutine と呼ぶ。 -証明手法は、従来では Hoare Logic \cite{Chen:2015:UCH:2815400.2815402}のような Post Condition / Pre Condition を用いる方法が使われている。 -現在のGearsは、Agda への変換は考えているが、その上の具体的な証明方法はまだ用意されていない。 +Go 言語は goroutin 間のデータ送受信をチャネルというデータ構造で行う。 +チャネルによるデータの送受信は ``\textless-'' を使って行われる。 +例えばチャネルのデータ構造であるchannel に対して ``channel \textless- data'' とすると、 data を channel に送信を行う。 +``\textless- channel'' とすると、 channel から送信されたデータを1つ取り出す。 +channel にデータが送信されていない場合はchannel にデータが送信されるまで実行をブロックする。 +Go 言語はチャネルにより、データの送受信が簡潔に書ける。 +しかし、チャネルは複数の goroutine で参照できるためデータの送信元が推測しづらい。 + +Gears OS では goroutine は par goto 文とほぼ同等に扱うことが出来る。 +また、Code Gear は par goto 文で書き出す Output Data Gear を指定して実行するため、Data Gear の書き出し元が推測しやすい。 + +Go 言語での OpenMP と同様に Twice を実装しGears OS と比較を行う。 +こちらも実行環境は 表\ref{tab:powerEdge}、 $2^{27}$ のデータに対して行い、Gears OS、Go 言語両方とも配列を64個のTask、 goroutineに分割して並列実行を行った。 + +\begin{figure}[ht] + \begin{center} + \includegraphics[width=70mm]{./pic/vsgo.pdf} + \end{center} + \caption{vs Go} + \label{fig:vsgo} +\end{figure} + +実行結果として Go 言語は 1CPUと32CPU で約4.33 倍の速度向上が見られた。 + \section{結論} 本論文では Gears OS のプロトタイプの設計と実装、メタ計算である Context と stub の生成を行う Perl スクリプトの記述、並列実行機構の実装を行った。 @@ -420,12 +622,21 @@ 並列処理を行う際は Context を生成し、 Code Gear と Input/Output Data Gear を Context に設定して TaskManager 経由で各 Worker の SynchronizedQueue に送信される。 Context の設定はメタレベルの記述になるため、ノーマルレベルでは par goto 文という CbC の goto 文に近い記述で並列処理を行える。 -この par goto は通常のプ ログラミングの関数呼び出しのように扱える。 +この par goto は通常のプログラミングの関数呼び出しのように扱える。 これらのメタ計算の記述は煩雑であるため Perl スクリプトによる自動生成を行なった。 これにより Gears OS のコードの煩雑さは改善され、ユーザーレベルではメタを意識する必要がなくなった。 -今後の課題は、今回 Perl スクリプトによって Context や stub などのメタ計算の生成を行なったが、LLVM/clang 上で実装しコンパイラで直接 CbC を実行できるようにすることを目的とする。 +Twice と BitonicSort の例題の測定結果では 1CPU と 32CPU で Twice では約 27.1 倍、BitonicSort では 約 22.12 倍の速度向上が見られた。 +また、GPU 実行の測定も行い、kernel のみの実行時間では 32 CPU より Twice では約 7.2 倍、BitonicSort では約 11.48 倍の速度向上がみられ、 +GPU の性能を活かすことができた。 + +今後の課題は、 +Go、OpenMP との比較から、 Gears OS が1CPU での動作が遅いということがわかった。 +Gears OS は par goto 文を使用することで Context を生成し、並列処理を行う。 +しかし、Context はメモリ空間の確保や使用する全ての Code/Data Gear を設定する必要があり、生成にある程度の時間がかかってしまう。 +そこで、 par goto のコンパイルタイミングで実行する Code Gear のフローをモデル検査で解析し、処理が軽い場合はContext を生成せずに、関数呼び出しを行う等の最適化を行>うといったチューニングが必要である。 + \nocite{*} \bibliographystyle{ipsjunsrt}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Paper/src/go.go Sun Apr 22 18:38:16 2018 +0900 @@ -0,0 +1,19 @@ +func main() { + c := make(chan []int) + for i :=0; i < *split; i++ { + // call goroutine + go twice(list, prefix, i, c); + } + + for i :=0; i < *split; i++ { + // join twice routins + <- c + } +} + +func twice(list []int, prefix int, index int, c chan []int) { + for i := 0; i < prefix; i++ { + list[prefix*index+i] = list[prefix*index+i] * 2; + } + c <- list +}