Sunday, October 9, 2016

Эрдмийн ажлын зураг, графикийг нээлттэй эх үүсвэр ашиглаж боловсруулах /Scientific art work by open sources/

Эрдмийн ажлын зургийн ажлыг нээлттэй програм ашиглан гүйцэтгэх
Нюфлот (Gnuplot) ба Имижмажик (Imagemagick)

"Гурвадугаар хэсэг"
Шинжлэх ухаан, инженерчлэлийн тайлан, төсөл, өгүүллэгийн зураг, графикийг өндөр чанартай сайн боловсруулах ёстой гээд л өмнөх хоёр цуврал дээр бичсэн учир дахин давтаад яахав. График зураг боловсруулах эхний, дэд өгүүллэгүүдийг уншаарай.
Гэхдээ бас хэдэн зүйл нэммээр санагдлаа. Аливаа зүйл хүний нүдэнд маш аятайхан харагдаж байвал харж уншиж буй хүндээ илүү их мэдээллийг өгөх болно. Тиймээс шинжлэх ухааны графикч бай түүнийг урлаг, уран зураг мэт харж харьцаж ажиллах хэрэгтэй. Мэдрэмж их чухал шүү. Харагдац муутай зураглал уг ажлын мөн чанар, чансааг бууруулдаг, ажиллаж буй хүмүүсийг чадваргүй мэт харагдуулдаг тал бий. Нөгөө хүнийг царайгаар нь угтаж, ухаанаар нь үднэ гэдэг шиг л..
За энэ өгүүллээр баганан график байгуулах, зургуудыг хооронд нь нийлүүлэх гэх мэт ажлыг яаж хийх тухай авч үзнэ. Графикийг бол нюфлот бол ямар л бол ямар л хэлбэр, загвараар үйлдвэрлэж гаргах боломжтой бол Имижмажик бол зургийг болон зургуудыг яаж л бол яаж л янзалж чадах хоёулаа нээлттэй, үнэгүй, коммандын мөрөөр ажилладаг програм хангамж юм. Нээлттэй үүсвэрийн нэг дутагдал нь хэрэглэгчийн санал хүсэлтийг тусгаж шинэ хувилбар гарах гэж уддаг. Түүнээс бол ямар нэгэн зохиогчийн эрхийн асуудал зөрчигдөхгүй, чадвар өндөртэй програмууд юм.
1. Хоёр зүйлийг харьцуулсан баганан график байгуулах
Хоёр зүйлийг хэд хэдэн тохиолдолд харьцуулж харуулах шаарлага гарна. Энэ тохиолдолд жишээ болгож цуваа ба зэрэгцээ кодоор өөр өөр хөрвүүлэгч дээр тооцоо хийж харцуулсаныг харуулая. График байгуулах нюфлот код нь:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
reset
set term postscript color enhanced font "Times-New-Roman, 30"
set output "Compare.esp"

set xtics ("PGI Fortran" 0.25, "Intel Fortran" 1.75, "CUDA Fortran" 3.25,)

set boxwidth 0.5
set style fill solid
set ylabel "Elapsed time (ms)"
set xlabel "Compilers"

set label 1 "1058.39" at -0.2,1100 font ",20"
set label 2 "461.52" at 0.3,500 font ",20"

set label 3 "301.61" at 1.3,350 font ",20"
set label 4 "93.75" at 1.8,140 font ",20"

set label 5 "80.45" at 2.8,120 font ",20"
set label 6 "15.74" at 3.3,80 font ",20"

plot 'data.dat' every 2    using 1:2 with boxes ls 1 lc rgb 'red' title "Entropic (KBC)",\
     'data.dat' every 2::1 using 1:2 with boxes ls 2 lc rgb 'blue' title "Standard (BGK)"

set term win
unset output
Энд ашиглаж байгаа мэдээ нь:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
0     1058.396
0.5   461.5206


1.5   301.6094
2     93.75


3     80.4576
3.5   15.7372
Мэдээний эхний мөр нь харьцуулж буй тохиолдлуудын үгнүүдэд зориулсан тоонууд юм. График нь дараах байдлаар гарна. 
Өөрөөр хэлбэл мэдээний 0 гэсэн тооны оронд PGI Fortran гэсэн үг байна гэх мэтчилэн оноож бичихийг кодны 5 дахь мөрөнд бичсэн байна. Нюфлотоор зураг үйлдэхдээ график бол ихэвчлэн Гостскриптээр хэвлэж гаргавал өндөр нягтаршилтай байна. Зураг тохиолдолд png jpg tiff гэх мэт өргөтгөлийн терминал ашиглаж болно. Ямар терминал ашиглахыг кодны 2-р мөр дээр бичсэн байна. Багана тус бүрийн орой дээр тоон утгыг бичихдээ тэмдэглэгээ маягаар бичиж болно. үүнийг кодны 12-19 дүгээр мөрөнд бичсэн байгааг хараарай. Кодны 21 ба 22 мөрөн дээр гол график босгох комманд байна. Энд байх шинэ комманд нь every гэж байх ба энэ нь алгасах мөрийг зааж өгнө. 2 мөр хоосон алгасаж графикаа зураарай гэсэн үг. 
every I:J:K:L:M:N
ILine increment
JData block increment
KThe first line
LThe first data block
MThe last line
NThe last data block
every 2plot every 2 line
every ::3skip the first 3 lines
every ::3::5plot from the 4-th to 6-th lines
every ::0::0plot the first line only
every 2::::6plot the 1,3,5,7-th lines
every :2plot every 2 data block
every :::5::8plot from 5-th to 8-th data blocks
Дээрх боломжит хувилбарууд байх нь байна. Ингээд бусад нь зурагтайгаа тааруулаад харвал ойлгогдох бай. Коднууд нь ихэвчлэн үгнүүдийн эхний үсэг байдаг гэдгийг санаарай. Тухайлбал ls гэдэг нь line style гэсэн үг болно. Постскрифт терминаль нь бусад терминаалаас илүү олон өнгө, загварын сонголттой байдаг. 

2. Олон тохиолдлыг баганан графикаар харуулах
Жишээ нь нэг өрхийн малын тоог таван хошуу малын төрлөөр гаргая гэвэл энэ төрлийн график зурах хэрэгтэй болно. Бид энэ тохиолдолд ЛБА-ын дэд програмууд тооцоонд хэрхэн цаг зарцуулдаг вэ гэдгийг байгуулая.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
reset
set term postscript color enhanced font "Times-New-Roman, 30"
set output "Compare1.esp"

set xlabel "Kernels in ELBM"    #set x and y label
set xtics ("Ini" 0, "Equi" 1, "Ent" 2, "Coll" 3, "Str" 4, "Boun" 5, "Macr" 6,)
set ylabel "Elapsed times by percent (%)"
#set xrange [-0.5:4.5]    #set x and y range
#set yrange [0:40]
set style fill solid    #set plot style
set boxwidth 0.5
unset key
plot "kernel1.txt" using 1:2 with boxes lc rgb 'red',\
     "kernel1.txt" using 1:($2+2):2 with labels
Энэ кодонд дуудагдаж байгаа kernel1.txt файл нь дараах байдалтай байна. 

1
2
3
4
5
6
7
0 3.31
1 6.51
2 41.46
3 15.33
4 9.02
5 3.49
6 20.86
Мэдээж тоогоор л график зурах учир үгнүүдээ тоогоор орлуулна. Ямар график зурагдсаныг харвал:
Энд 0 - ээс 6 хүртэлх нь хэвтээ чиглэлд байгаа Ini, Equi, Ent гэх мэт тохиолдол/төрлүүдэд харгалзах юм. ҮҮнийг кодны 6-р мөрөнд коммандыг нь оруулж өгсөн байна. Энэ кодонд баганууд дээр тэдгээрийн утгуудыг автоматаар байрлуулахаар 14-р мөрөнд зааж өгсөн байна. Өмнөх графикт бид өөрсдөө бичсэн бол энэ удаад автоматаар зайгаа тааруулж гарч ирэх нь байна. 1:($2+2):гэдгийн доллах 2 дээр нэмэх нь 2 гэдэг нь баганын дээд ирмэгээс хэр зайд байрлахын зааж өгнө. 

3. Хоёр босоо тэнхлэгтэй, хэвтээ тэнхлэг дээрээ тоо бус аргументтай шугаман график байгуулах
Энэ нийтлэлд хэвтээ ба босоо аль нэг тэнхлэг нь тоо бус үг байх тохиолдлын графикууд юм. Хоёр хэмжээст график нь ихдээ 4-н тэнхлэгтэй байх боломжтой. 2 хэвтээ, хоёр босоо тэнхлэгтэй байж болно. Энд хоёр босоо тэнхлэгийг нэг хэвтээ тэнхлэгтэй яаж байгуулах талаар авч үзье.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
reset
set term postscript landscape color enhanced font "Times-New-Roman, 30"
set size 1.2,1.0
set output "Compare2.esp"

set xlabel "Grid resolutions"    #set x and y label
set xtics ("300x100" 0, "600x200" 2, "1200x400" 4, "2400x800" 6,)
set ylabel "Performance (GFLOP/s)"
set y2label "Memory bandwidth (GB/s)"
set y2tics (1.0,1.1,1.2,1.3,1.4)
set ytics nomirror
#set yrange [180:280]
set ytics (180,200,220,240,260)
#set yrange [0:40]
set key top right
plot "band.dat" using 1:2 with lp lt 10 lw 4 lc rgb 'red' axes x1y1 title "Computational throughput",\
     "band.dat" u 1:3 with lp lt 11 lw 4 lc rgb "blue" axes x1y2 title "Effective bandwidth"
set term win
unset output
Энэ кодонд ашиглагдсан мэдээ нь:
1
2
3
4
0  186.0266720914353  0.9673386948754638
2   211.9123067968700   1.101943995343724 
4   235.3015140803687   1.223567873217917
6   262.0016457724636  1.362408558016811
Гурван мөрний эхний мөр нь хэвтээ тэнхлэгийн үгнүүдэд буюу төрлүүдэд, хоёр дахь нь зүүн гар талын босоо тэхлэгт, гурав дахь нь баруун гар талын босоо тэнхлэгт тус бүр зориулагдана. Зурагдсан график нь:
Хоёр график давхацсан байгаа учир нэг шугам шиг гарсан байна. Кодны 16-р мөрийн кодыг харвал банд гэсэн мэдээний 1:2-р мөрийг ашиглах ба тйи тийм зураасны төрөл өргөнтэй байхаар улаан өнгөөр тэнхлэг axes x1y1 дээр зурна гэсэн байна. 17-р мөрөнд тэгвэл axes x1y2 гэж бичигдэх нь ойлгомжтой. Иймэрхүү маягийн график зурж болох нь байна. Нэг гол зүйл нь ворд энэ тэрлүү зургаа оруулахад *.esp файл орж ирэхгүй учир png эсвэл jpg рүү хувиргах хэрэгтэй болно. Харин ЛАТЕХ ашиглах тохиолдолд хувиргах шаардлагагүй шууд дуудаж оруулах боломжтой. Аливаа зургийн өргөтгөлийг сольж хөрвүүлэхэд имижмажик хэрэглэгдэнэ. 
Тухайлбал хамгийн сүүлийн "Compare2.esp" графикийг хөрвүүлэхдээ:
1
convert -units PixelsPerInch -density 400 Compare1.esp Comp.jpg
Энэ коммандыг уншвал: хөрвүүлэхдээ нэгжийг нь нэг инчид ногдох пиксэлээр авч үзэх ба нягтрашилыг нь 400 байлгаад эх файлыг comp.jpg болгож өөрчил гэсэн байна. 


4. Олон зургийг хооронд нь нийлүүлэх
Хоёр ба түүнээс олон зүйлсийг харьцуулах, эсвэл цаг хугацааны дараалалтай харуулах тохиолдолд зургуудыг бөөр бөөрөөр нь нийлүүлэх шаардлага гардаг. Ворд дээр хүснэгтэлж байгаад эдгээр зургуудыг хийгээд янзалж болох ч бүгдийх нь хэмжээ адилхан болохгүй, том жижиг харагдах магадлалтай байна. Тухайлбал дараах гурван зургийг авч үзье. 
Энэ гурван тусдаа зургийг нэг болгоод нэгтгэхдээ цуваа байдлаар нэгтгэе.


1
2
montage -units PixelsPerInch -density 400 128ga.jpg 256ga.jpg 512ga.jpg -tile 3x1 -geom
etry 1000x1000+1+1 montage.jpg
Зургуудыг эхнээс нь нэрлэх ба хэвтээ чиглэлийн дагуу нэрлэж эхэлнэ. 4 мөр, 3 баганатай зураг болгох байлаа гэж бодоход эхний мөрний зургуудыг нэрлэж дуусаад 2 дахь баганаруу орох жишээний. Дээрх коммандад -tile 3x1 гэдэг нь 3 багана нэг мөр зургийн байрлал үүсгэнэ гэсэн үг юм. 4 мөр х 3 баганаар гэвэл -tile 3x4 гэнэ. Үүний дараа геометрийг -geometry нь зааж өгөхдөө эхлээ хэвтээ босоо пикселийг 1000x1000 дараа нь зураг бүрийн хоорондох зайн хэмжээг +1+1 заана. Гарсан зураг нь дараах байдалтай байна. 
Гэх мэтээр хэдэнч зургуудыг хүснэгтэлж нийлүүлж болно. өндөр нарийвчлалтай байлгахын тулд -density гэдэг коммандыг ашиглаж байгаа юм. Энэ нь тухайн зургийн dpi -ийг тохируулж байгаа юм. 

No comments:

Post a Comment