MPI Programming : ตอนที่ 2

 - by NAzT

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

เรื่องที่เกี่ยวข้อง