28 ธันวาคม 2008MPI Programming : ตอนที่ 2

Blocking Communication

อันนี้เป็น Prototype ของ MPI_Send และ MPI_Recv ซึ่งเป็นการสื่อสารแบบ Blocking ครับ (มันมี Non-blocking ด้วยไว้ค่อยมาคุยกันอีกทีว่ามันต่างกันยังไงในวันหลังนะครับ)

ที่ยกเรื่องนี้มาให้ดูก่อน เพราะตอนหน้าเราจะส่งข้อมูลข้าม Process โดยใช้ MPI (Send & Recv) กันแล้วคร้าบผม

int MPI_Send( void *buf,
              int count,
              MPI_Datatype datatype,
              int dest,
              int tag,
              MPI_Comm comm
);

int MPI_Recv( void *buf,
              int count,
              MPI_Datatype datatype,
              int source,
              int tag,
              MPI_Comm comm,
              MPI_Status *status
);

ซึ่งจาก Prototype ข้างบนแล้ว…

void* buf คือข้อมูลที่ต้องการรับและส่ง (ใส่เป็นตัวแปร)

int count ก็คือขนาดของ Data นั้นมันกว้างเท่าไหร่ เช่นกี่อักขระ หรือเป็น กี่ช่อง

Datatype คือชนิดของข้อมูล เช่น MPI_INT , MPI_FLOAT, MPI_BYTE

source ข้อมูลจะต้องมาจาก Process หมายเลขไหน

dest จะบอกว่า จะส่งข้อมูลไปให้ใคร

tag ก็จะเหมือน port ก็คือต้องตรงกัน

เท่านี้แหละครับที่สำคัญ

การทำงานแบบย่อๆ ก็คือ  เมื่อเรียก MPI_Send แล้ว Process จะ Block รอจนกว่าจะ copy ข้อมูลจาก  user buffer  ไปยัง  kernel buffer เสร็จครับ (หยุด Block เมื่อ ข้อมูลบิตสุดท้ายออกจาก User Space buffer ครับ)

ส่วน MPI_Recv เมื่อเรียกใช้แล้วจะ Block รอตั้งแต่ตอนข้อมูลยังมาไม่ถึง จนข้อมูลถูก Copy จาก Kernel Buffer มาหมดแล้วจึงหยุด Block

หรือจะหาข้อมูลแบบละเอียดได้ที่ google.com ได้เลยครับ เพราะผมจะพูดแบบไม่ละเอียดครับ เอาไว้เรียนรู้กันแบบ In Action เลยดีกว่า

วิธีเรียกใช้ว่ามันจะเรียกยังไง ก็รอ In Action ตอนหน้าครับผม

Related Blogs


Tags:
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...
blog comments powered by Disqus
Get Adobe Flash playerPlugin by wpburn.com wordpress themes