Internet & Web Application

ทดสอบการเขียนโปรแกรม MPI ด้วย MPICH

การเขียนโปรแกรมบนระบบ Parallel Processing System เพื่อช่วยให้การคำนวณเป็นไปอย่างรวดเร็ว มีมาตรฐานกลาง เพื่อให้การพัฒนาเป็นไปอย่างรวดเร็ว ซึ่งที่ได้รับความนิยมคือ Message Passing Interface (MPI)

กลุ่มคนที่ให้ความสนใจใน MPI ต่างก็ พัฒนา “ชุดพัฒนา” ขึ้น โดยชุดพัฒนาที่ได้รับความนิยมมากที่สุดนั้น .. ชื่อว่า MPICH

สุดท้าย ด้วยสามารถ Setup .. Linux Cluster … MPICH .. สำเร็จ ก็จะสามารถเขียนโปรแกรมแบบ Parallel ได้

สำหรับ Slide present จาก PSU-Grid , การติดตั้ง MPICH และการติดตั้ง rsh


Download มา Compile

สำหรับต้องการ Download มา Compile เอง .. MPICH2 .. โดยเมื่อ Compile เสร็จแล้ว ลองทำตาม โดย

  • ทดสอบโดยใช้ 2 เครื่อง
  • ทำการแก้ /etc/hosts ให้รู้จัก IP .. map IP & hostname
  • ต้องลง rsh-server ให้สมบูรณ์ก่อน , สำหรับใน debian ให้ใช้ rsh-redone-server
  • rsh ทำให้สามารถสั่งงานจากเครื่อง remote ไป exec งานบนเครื่อง host ได้
  • เนื่องจากคำสั่ง mpirun ไม่ได้ copy ตัว a.out ที่ได้จาก mpicc มาให้ ทำให้ต้อง copy ข้ามระหว่าง hosts เอง .. ทางที่ง่ายก็คือติดตั้ง nfs

ในส่วนของ mpd

  • ต้องสร้าง file เพิ่มขึ้น 2 files คือ /etc/mpd.hosts และ /etc/mpd.conf
  • mpd.hosts ให้ใช่ hostname ทุกเครื่องที่เป็น cluster .. ลง mpi
  • mpd.conf ต้องใส่ seclet word ซึ่งต้องเหมือนกันทุกเครื่อง

ต่อมาก็

Test MPD

เมื่อต้องการทดสอบ ที่ Host เดียว
MPD is the MPICH daemon, which controls/runs/stops the proccesses on the cluster nodes. Bring up the ring:

  mpd &
  mpdtrace
  mpdallexit

mpdtrace should output the hostname of your current working host. mpdallexit stops the daemon.

ทีนี้ลองทดสอบ 2 เครื่อง

Start mpd on some machines

 mpdboot -n <number of daemons to start> -f /home/username/mpd.hosts

If the current machine is not part of the cluster (not in the mpd.hosts), then you need one additional mpd (add +1).
Test:
 mpdtrace
 mpdringtest
 mpdringtest 100
 mpiexec -l -n 30 hostname

สั่งว่า mpdboot -n 2 -f /etc/mpd.hosts ผลที่ได้คือ มีการขอทำ connection กัน .. ใส่ password ตามปรกติ .. และแน่นอน เครื่องทุกเครื่องใน mpd.hosts จะ run mpdboot อัตโนมัติ …

ลองทดสอบดู .. mpirun -np 2 a.out ..

จากตัวอย่างโปรแกรมทดสอบ

#include <stdio.h>
#include <mpi.h>
#include <string.h>

main (int argc, char * argv[])
{
int my_rank, p, source, dest, tag=50;
char message[100];
char name[32];
int name_len;

MPI_Status status;

printf(“start \n”);
MPI_Init(&argc, &argv);
printf(“MPI_Init OK\n”);

MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
MPI_Comm_size(MPI_COMM_WORLD, &p);
MPI_Get_processor_name(name, &name_len);

if (my_rank != 0)
{
sprintf(message, “Greetings from process %d at %s\n”, my_rank, name);
dest = 0;

MPI_Send(message, strlen(message)+1, MPI_CHAR, dest, tag, MPI_COMM_WORLD);
}
else
{
printf(“Process %d is waiting for greeting message at %s\n”, my_rank, name);

for (source = 1; source < p; source++)
{
MPI_Recv(message, 100, MPI_CHAR, source, tag, MPI_COMM_WORLD, &status);
printf(“%s\n”, message);
}
}

MPI_Finalize();
}

Advertisements
มาตรฐาน

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s