Written by Waipot on July 12, 2008 – 2:14 am
MPICH2 ได้มีการพัฒนาบางอย่างที่ดีกว่า MPICH (1) พูดง่ายๆ คือ เวอร์ชันใหม่ย่อมดีกว่าเวอร์ชันเก่า วันนี้ผมลองทดสอบ MPICH2 โดยเราจะปรับแต่งให้ใช้งานบนเครื่องประเภท Symmetric Multiprocessors (SMPs) อย่างเช่น Core 2 Duo ของเครื่องโน๊ตบุคของผมนั่นเอง โดยทั่วไปเครื่องแบบนี้จะเป็นเครื่องคอมพิวเตอร์เดี่ยว แต่มีหลาย cpu และแชร์หน่วยความจำร่วมกัน (Shared-memory systems)
การติดตั้ง
ผมมี Ubuntu 64-bit version บน Intel Core 2 Duo T7300 (2.0 GB) สำหรับโน๊ตบุค การติดตั้ง MPICH2 ก็ปกติเหมือนกับ MPICH ซึ่งผมเคยเขียนไว้แล้ว (ติดตามอ่านที่นี่ ) แต่มีตัวเลือกที่แตกต่างกันหลักๆ คือ การเลือก Communication Device ด้วย –with-divice=DEVICE ซึ่งผมเลือก ch3:shm ที่สนับสนุน shared-memory เพราะน่าจะเข้ากับเครื่องของผมได้ดีที่สุด มีอีกหนึ่งตัวเลือก คือ ch3:nemesis ซึ่งก็น่าจะใช้ได้ แต่ดูเหมือนมันจะยังไม่สมบูรณ์ดี ผมได้เลือก ch3:nemesis เนื่องจากพบว่าให้ประสิทธิภาพที่ดีที่สุด และสนับสนุน shared-memory ด้วย นอกจากนี้ MPICH2 ยังให้เราสามารถเลือก Process Manager ด้วย –with-pm=PMGs โดยปริยายแล้วจะเป็น mpd เรายังสามารถเลือกได้ระหว่าง smpd และ gforker ผมก็ไม่รู้ว่าอันไหนดีบ้าง แต่ผมเลือก gforker เพราะ มันบอกว่า “This is a simple process manager that creates all processes on a single machine. It is useful for both debugging and on shared memory multiprocessors.” ดังนั้นมันน่าจะเข้ากับเครื่องแบบ SMPs ของผมดีที่สุด (อ่านคู่มือแบบละเอียดได้ที่นี่ ) ก่อนลงมือทำการติดตั้งจาก ให้ดาวน์โหลด mpich2 source เสียก่อน ซึ่งคือ เวอร์ชัน 1.0.7 ในที่นี้
$tar xzf mpich2-1.0 .7 .tar .gz
$cd mpich2-1.0 .7
$./ configure --prefix= / usr/ local --with-device= ch3:shm --with-pm= gforker
$make
$sudo make install
การใช้งาน
ผมจะทดสอบการใช้งาน mpich2 (ch3:shm) โดยการรันโปรแกรมง่ายๆ คือ hello-mpi2.c ซึ่งได้มีการปรับปรุงจากคราวก่อน เล็กน้อย โดยมีโค๊ดดังนี้
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
int
main( int argc, char * argv[ ] ) {
int rank, nproc;
char * cpu_name;
MPI_Init( & argc,& argv) ;
MPI_Comm_rank( MPI_COMM_WORLD, & rank) ;
MPI_Comm_size( MPI_COMM_WORLD, & nproc) ;
cpu_name = ( char * ) calloc( 80 ,sizeof ( char ) ) ;
gethostname( cpu_name,80 ) ;
printf ( "Hello! from process %d on machine=%s, of %d CPUs\n " ,
rank, cpu_name, nproc) ;
MPI_Finalize( ) ;
return ( 0 ) ;
}
จากนั้นคอมไพล์ด้วยคำสั่ง
mpicc -o hello-mpi2 hello-mpi2.c
ที่นี้ลองมารันกันดู เริ่มจาก
$mpiexec -np 2 ./ hello-mpi2
Hello! from process 0 on machine= computin-laptop, of 2 CPUs
Hello! from process 1 on machine= computin-laptop, of 2 CPUs
จะเห็นว่าเราจะใช้ mpiexec แทน mpirun ใน MPICH2 นี้ ซึ่งได้ผลตามคาดหมายเพราะ Core 2 Duo นั้นมี 2 cpu ในตัวเดียว จากนั้นเพิ่มลองเพิ่มจำนวนโปรเซสในคำสั่งนี้ดู
$mpiexec -np 4 ./ hello-mpi2
Hello! from process 0 on machine= computin-laptop, of 4 CPUs
Hello! from process 1 on machine= computin-laptop, of 4 CPUs
Hello! from process 2 on machine= computin-laptop, of 4 CPUs
Hello! from process 3 on machine= computin-laptop, of 4 CPUs
จะเห็นว่ามันสามารถกระจายทั้งสี่โปรเซสไปบน cpu ทั้งสองได้ เปรียบสเมือนมีหลายๆ cpu ในเครื่องเดียว แต่ mpich2 ปกติได้กำหนดจำนวน cpu สูงสุดไว้ที่ 32 ซึ่งเราอาจจะสามารถเพิ่มได้
จะเห็นว่า MPICH2 นั้นสามารถทำงานได้บนเครื่อง PC แบบ SMPs อย่างเช่น Intel Core 2 Duo ซึ่งมันแปลงเครื่องธรรมดาให้สามารถโปรแกรมแบบขนานด้วย MPI ได้ ซึ่งเหมาะที่ใช้งานในการเรียนรู้ และพัฒนาโปรแกรมแบบขนานในส่วนตัวได้
Tags:
HP computing ,
mpi Posted under
Computers and Software |
3 Comments »
Written by Waipot on July 11, 2008 – 6:54 am
การเขียนโปรแกรมแบบขนาน (parallel programming) ด้วย MPI บนเครื่องคลัสเตอร์ขนาดใหญ่นั้น ดูเหมือนจะเป็นเรื่องลำบาก เนื่องจากบนระบบใหญ่ๆ จำผู้ใช้งานก็มีมาก ซึ่งต้องรอคิวสั่งงานกันนานๆ มันจึงเป็นอุปสรรคต่อการพัฒนาโปรแกรมในระยะเริ่มต้น ซึ่งต้องคอมไพล์รวมทั้งการดีบักโปรแกรมกันบ่อยครั้งด้วย ตอนแรกผมพยายามมองหาวิธีแก้ไขปัญหานี้ โดยคิดว่าจะสร้างเครื่องคลัสเตอร์เล็กๆ ส่วนตัว เพื่อใช้ในการพัฒนาโปรแกรม และ แก้บั๊ก ก่อน จนกว่าโปรแกรมจะเสถียร แล้วจึงค่อยนำไปรันบนเครื่องคลัสเตอร์ใหญ่ๆ แต่การสร้างคลัสเตอร์ต้องมีคอมพิวเตอร์มากกว่าหนึ่งเครื่อง ซึ่งมันใช้ต้นทุนสูงไป ผมค้นหาสักพัก พบว่า mpich มีโมดุลที่เรียกว่า ch_shmem ซึ่งสนับสนุนเครื่องประเภท Symmetric Multiprocessors (SMPs) อย่างเช่น Core 2 Duo ของเครื่องโน๊ตบุคของผมนั่นเอง โดยโครงสร้างของเครื่องแบบนี้คือ มี 2 cpu แต่แชร์หน่วยความจำร่วมกัน
การติดตั้ง
ผมมี Ubuntu 64-bit version บน Intel Core 2 Duo T7300 (2.0 GB) สำหรับโน๊ตบุค โดยใน Ubuntu ได้ทำไบนารีไฟล์ไว้แล้ว คือ libmpich-shmem* libmpich-shmem*-dev libmpich-shmem-bin ซึ่งสามารถติดตั้งด้วยคำสั่ง sudo apt-get install
ซึ่งพร้อมใช้งานได้ทันทีหลังจากติดตั้งเสร็จ แต่ในที่นี้ผมขอเสนอการติดตั้งจาก source เพราะสามารถปรับแต่งได้ ให้เริ่มจากการดาวน์โหลด mpich source ผมต้องการติดตั้ง mpich v1 (1.2.7p1) ในที่นี้
$tar xzf mpich.tar .gz
$cd mpich-1.2 .7p1
$./ configure --prefix= / usr/ local --with-arch= LINUX --with-device= ch_shmem \\
--with-usesysv
$make
$sudo make install
#หากต้องการถอนการติดตั้ง
$sudo / usr/ local / sbin/ mpiuninstall
การคอมไพล์ mpich นี้ค่อนข้างมาตรฐาน ยกเว้นตรงตัวเลือกใน ./configure คือ –with-arch=LINUX บอกให้รู้สถาปัตยกรรมของเครื่อง –with-device=ch_shmem เลือก DEVICE เพื่อคอมไพล์ mpich สำหรับ shared memory และ –with-usesysv เพื่อเลือกใช้ System V shared memory และ semaphore routines ซึ่งตัวเลือกเหล่านี้ได้อธิบายไว้ในคู่มือของ mpich หมดแล้ว
การใช้งาน
ผมจะทดสอบการใช้งาน mpich ch_shmem โดยการรันโปรแกรมง่ายๆ คือ hello-mpi.c ซึ่งมีโค๊ดดังนี้
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
int
main( int argc, char * argv[ ] ) {
int rank, nproc;
MPI_Init( & argc,& argv) ;
MPI_Comm_rank( MPI_COMM_WORLD, & rank) ;
MPI_Comm_size( MPI_COMM_WORLD, & nproc) ;
printf ( "Hello! from process %d of %d CPUs\n " , rank, nproc) ;
MPI_Finalize( ) ;
return ( 0 ) ;
}
จากนั้นคอมไพล์ด้วยคำสั่ง
mpicc -o hello-mpi hello-mpi.c
ที่นี้ลองมารันกันดู เริ่มจาก
$mpirun -np 2 ./ hello-mpi
Hello! from process 1 of 2 CPUs
Hello! from process 0 of 2 CPUs
ซึ่งได้ผลตามคาดหมายเพราะ Core 2 Duo นั้นมี 2 cpu ในตัวเดียว จากนั้นเพิ่มลองเพิ่มจำนวนโปรเซสในคำสั่งนี้ดู
$mpirun -np 4 ./ hello-mpi
Hello! from process 1 of 4 CPUs
Hello! from process 2 of 4 CPUs
Hello! from process 3 of 4 CPUs
Hello! from process 0 of 4 CPUs
จะเห็นว่ามันสามารถกระจายทั้งสี่โปรเซสไปบน cpu ทั้งสองได้ เปรียบสเมือนมีหลายๆ cpu ในเครื่องเดียว แต่ mpich ch_shmem ปกติได้กำหนดจำนวน cpu สูงสุดไว้ที่ 32 ซึ่งเราอาจจะสามารถเพิ่มได้ (สังเกตุว่า process 0 ซึ่งเป็น Master node มักเสร็จสิ้นทีหลัง)
สรุปแล้ว mpich ch_shmem นี้มีประสิทธิภาพพอที่จะทำให้เราเรียนรู้ และ พัฒนาโปรแกรมแบบขนานในสไตล์ของ SPMD (single program multiple data) โดยการติดตั้งบนเครื่อง SMP อย่าง Core 2 Duo ได้ ซึ่งถ้าใครมี Quad core ก็น่าจะสนุกกว่านี้ แต่อย่างไรก็ตามเมื่อพัฒนาโปรแกรมจนเสถียรแล้ว ควรจะนำไปรันบนเครื่องคลัสเตอร์ระดับใหญ่ เพื่อให้ได้ประสิทธิภาพสูงสุด อย่างเช่น เครื่อง Tera cluster ของ โครงการ ThaiGrid หรือ NECTEC HPC ซึ่งเปิดโอกาสให้บุคคลทั่วไปสมัครเป็นสมาชิกได้ ซึ่งผมมีบัญชีผู้ใช้ของเครื่อง Tera แล้ว แต่ของ NECTEC HPC ยังไม่ได้ลองสมัครเลย
Tags:
core 2 duo ,
Linux ,
mpi ,
Ubuntu Posted under
Computers and Software |
2 Comments »
Written by Waipot on July 8, 2008 – 1:36 pm
ไม่รู้ว่าเชยไปหรือเปล่า แต่ผมเพิ่งจะได้ดูหนังเรื่องนี้จาก VCD เมื่อเร็วๆ นี้ ส่วนข้อคิดที่ได้จากการดูหนังเรื่องนี้ คือ การค้นหาตัวตนของวัยรุ่นที่แสนสับสน และ ความรัก ที่มีหลายรูปแบบ ในหนังเรื่องนี้ ผมวิจารณ์หนังไม่เก่ง แต่บอกได้คำเดียวว่า เป็นหนังไทยที่ดี
MV. เพียงเธอ Ost.รักแห่งสยาม -
ปล. ช่วงนี้ waipot.com ไม่ค่อยได้เขียนเรื่องราวสาระ ด้านคอมพิวเตอร์และอินเทอร์เน็ต เหมือนที่ผ่านมา เนื่องจากเจ้าของบลอกถูกอาการงานเข้า เครียด ไม่มีเวลา เลยต้องหาความบันเทิงมาหล่อเลี้ยงจิตใจ ส่วนผู้ที่ยังติดตาม ผมก็ซาบซึ้งใจ “รักแห่งสยาม”
Tags:
Movie Posted under
Lifestyle |
1 Comment »
Written by Waipot on June 19, 2008 – 1:16 am
วันนี้เจอเหตุการณ์แบบไม่คาดฝัน ตะลึงงัน สองเหตุการณ์ ซึ่งสนับสนุนทฤษฎีความโกลาหล (Chaos Theory) ในชีวิตได้ดี เรื่องแนวนี้เคยถูกเขียนโดย kosoltalk.com แล้วเหมือนกัน
เริ่มจากเมื่อคืนนี้ผมอุตสาห์ตรากตรำอดหลับอดนอนเพื่อปั่นงาน เพราะต้องนำเสนออาจารย์ที่ปรึกษาวันนี้ตอนบ่ายสอง ขนาดเพื่อนโทรมาชวนไปกินเบียร์ ยังต้องห้ามใจ ผมทำงานเสร็จก็เกือบตีสาม
ตื่นเช้ามาวันนี้ มันก็เป็นวันธรรมดาๆ วันหนึ่ง แต่รู้สึกงัวเงียเพราะเมื่อคืนนอนดึกกว่าปกติ อาบน้ำ จิบกาแฟ แล้วเดินไปมหาวิทยาลัย พอทันทีที่เข้าไปในตึก ก็พบว่ามีเหตุการณ์ประหลาดเกิดขึ้น เพราะมีป้ายประกาศบอกให้เลื่อนชั้นเรียนแปะหน้าประตูเต็มไปหมด ทั้งตึกมีแต่ความว่างเปล่า แล้วทุกคนหายไปไหน (นึกฉากในหนัง I am Legend ) ทันใดนั้นคนดูแลตึกก็ปรากฏตัว แล้วบอกกับผมว่าไม่ให้ใครเข้าไปในตึก เพราะมีเหตุการณ์ไฟไหม้ที่ลิฟต์เกิดขึ้น ตึกนี้จึงปิดเพื่อซ่อมแซม ณ ในจุดนี้แผนการณ์ได้ถูกเปลี่ยนอย่างเสียไม่ได้ ผมจะต้องนำเสองานตอนบ่ายสอง แล้วจะทำอย่างไรต่อไป
จากนั้นผมตัดสินใจกลับมาที่อพาร์ตเมนต์ตัวเอง เพราะทั้งวันตึกนี้คงปิด นึกในใจ ก็ดีเหมือนกัน จะได้นอนพักผ่อน พอถึงบ้านสักพักแล้วผมก็ได้ยินเสียงกดกริ่ง ผมเดินไปเปิดประตู พบว่าคนที่เข้ามาหาคือ Landlord ขออธิบายศัพท์คำนี้เสียก่อน Landlord พูดง่ายๆ ก็คือ เจ้าของบ้าน หรือ อพาร์ตเมนต์ ที่ให้เราเช่าอยู่ ที่อเมริกาเวลาเช่าบ้าน ผู้เช่าต้องทำสัญญาเช่า (leased) ขั้นต่ำ 1 ปี และก่อนออกต้องทำความสะอาดเอง ให้บ้านที่เช่ากลับมาสภาพเดิม ที่ผมตกใจ เพราะ ร้อยวันพันปี ไม่เคยเห็นเขามาดู ผมก็จ่ายเงินตรงเวลาทุกเดือน พอเขามาในบ้าน เขาก็รู้สึกช็อคพอๆ กับผม เพราะเขามาเจอห้องอันรกรุงรังโดยฝีมือของกระผมนั้นเอง ที่เขามาวันนี้แค่ตั้งใจมาตรวจถังดับเพลิง แต่พอเห็นผมอยู่บ้านเลยขอเข้ามาดูเสียหน่อย ก่อนกลับไปยังกำชับว่า ก่อนผมย้ายออกให้ผมทำความสะอาดให้เรียบร้อย กรรมจริงๆ เป็นเพราะลิฟต์มันเสียนั่นเอง เลยทำให้ผมต้องอยู่บ้าน
สุดท้ายอาจารย์ที่ปรึกษาก็อีเมล์ มาบอกให้เลื่อนการประชุมจากวันนี้ตอนบ่ายสอง เป็นพรุ่งนี้ตอนสิบโมงเช้า เหตุการณ์เล็กๆ ที่เกิดขึ้นเช้าวันนี้ ทำให้ผมตะหนักว่า ชีวิตคือความโกลาหล ดังคำว่า “เด็ดดอกไม้สะเทือนถึงดวงดาว ” ซึ่งสอดคล้องกับ Chaos Theory แต่อย่างไรก็ตามนั้น ถึง Chaos Theory จะสามารถใช้ทำนายระบบที่ไม่เป็นเชิงเส้น (nonlinear system) ในทางฟิสิกส์ได้ดี แต่ ยังไม่สามารถทำนายความไม่เป็นเชิงเส้นของชีวิตจริงของมนุษย์ ที่ซับซ้อนกว่าระบบทางฟิสิกส์อย่างมาก
Tags:
Chaos Posted under
Lifestyle |
3 Comments »
Written by Waipot on June 16, 2008 – 10:06 am
มาระลึกความหลังครั้งยังเป็นวัยรุ่น ด้วย เพลง I’ll never dance again (RAPTOR)
I’ve danced with others just to show I don’t care
But my arms discovered that the true wasn’t there
Unless my arms are holding you the way I did then
ชอบท่อนนี้ที่สุด บางครั้งคุณอาจจะเคยเจอเหตุการณ์ประมาณแบบนี้ เจอคนรักเก่าอยู่กับคนอื่นแล้ว ทำใจไม่ได้ นิดหน่อย
Tags:
Song Posted under
Lifestyle |
No Comments »
Written by Waipot on June 6, 2008 – 1:02 pm
สิ่งหนึ่งที่ทำให้ผมตื่นเต้นกับ Windows Vista นั่นคือ มันได้ติดตั้งเทคโนโลยีที่ล้ำยุคมาในตัว นั่นคือ Speech Recognition ผมจินตนาการว่า โอ้ว์ มันช่างเยี่ยมยอดเหลือ ต่อไปนี้เราคงสามารถสั่งงานคอมพิวเตอร์ด้วยเสียง แทนการพิมพ์คีย์บอร์ด ต่อไปเราคงคุยกับคอมพิวเตอร์รู้เรื่อง เช่น “คอมพิวเตอร์ ทำการบ้านให้หน่อย” (ไม่ดีนะครับ อย่าเอาเป็นตัวอย่าง) ช่างเหลือล้ำจินตนการแท้ แต่พอทันทีที่ผมใด้ลองใช้ Speech Recognition นี้ บอกได้คำเดียวว่า “หมดหวัง” ดูคลิปข้างบนเป็นตัวอย่างนะครับ ถึงกระนั้นก็ตาม ผมจะรอจนมันสมบูรณ์
Tags:
Vista ,
Windows Posted under
Computers and Software |
No Comments »
Written by Waipot on May 27, 2008 – 10:17 am
ผมขอเสนอทางเลือกอีกทาง ในการสรรหาเครื่องมือคำนวณเชิงวิทยาศาสตร์ (Scientific Computing Tools) โดยใช้ซอฟต์แวร์ฟรี อย่าง Python และ NumPy ซึ่งจะทำให้เราประหยัดค่าใช้จ่าย จากการซื้อหาซอฟต์แวร์ราคาแพงๆ อย่างเช่น Matlab หรือ Mathematica ในที่นี้ผมจะขอพูดถึงการติดตั้ง Scientific Python สำหรับ Windows
Python - เป็นภาษา script แบบ interactive ในลักษณะใช้งานทั่วไป (general purpose) ซึ่งเป็นที่นิยมใช้งานกันอย่างแพร่หลายในขณะนี้ [ดาวน์โหลด และ ติดตั้ง ]
NumPy - เป็น package ซึ่งจำเป็นต่อการคำนวณเชิงวิทยาศาสตร์ด้วย Python ความสามารถที่โดดเด่น NumPy คือ การคำนวณแบบ Array ซึ่งคล้ายกับ Matlab [ดาวน์โหลด และ ติดตั้ง ] [คู่มือ ]
SciPy - เป็น package ที่สร้างต่อจาก NumPy ซึ่งได้ขยายความสามารถให้ Numerical Python โดยการรวมรวบฟังก์ชันการคำนวณทางวิทยาศาสตร์ระดับสูง เช่น statistics, optimization, numerical integration, linear algebra, Fourier transforms, signal processing, image processing, genetic algorithms, ODE solvers และ special functions เข้าไว้ด้วยกัน เป็นต้น [ดาวน์โหลด และ ติดตั้ง ] [คู่มือ ]
Matplotlib - เป็น package สำหรับ plot กราฟ และ กราฟิกส์แบบ 2D สำหรับ Python ซึ่งมีฟังก์ชันที่ใช้งานกันบ่อยๆ คือ plot() นั่นเอง [ดาวน์โหลด และ ติดตั้ง ] [คู่มือ ]
เครื่องมือฟรีเหล่านี้ ทำงานได้อย่างมีประสิทธิภาพ ไม่แพ้ ซอฟต์แวร์ราคาแพงเลยทีเดียว หากเพียงแต่ว่าต้องขยันอ่านคู่มือ และ ศึกษาอย่างจริงจัง
Tags:
Python Posted under
Computers and Software ,
Science and Technology |
5 Comments »