MPI หรือ Message Passing Interface เป็นการที่จะทำให้ process หรือกระบวนการทำงานในคนละเครื่อง สามารถสือสารกันได้ ทำให้โปรแกรมทำงานแบบขนานไปกันได้ งานนี้ต้องใช้ Raspberry Pi มากกว่าหนึ่งเครื่องนะครับ
โดย implement หลายเจ้าครับ เช่น MPICH แต่คราวนี้จะใช้ OpenMPI สำหรับ Raspbian สั่ง
sudo apt-get install openmpi-bin openmpi-dev
สั่งทุกเครื่อง Raspberry Pi ที่จะใช้นะครับ จากนั้นลอง Hello, world ของ OpenMPI ผมตั้งชื่อไฟล์โค้ดโปรแกรมเป็น hw.c คอมไฟล์แล้วสั่งรัน
mpicc hw.c -O3 -o hw mpirun ./hw
ก็ได้ผลครับ
คงไม่มีปัญหาถ้าจะทดลองแบบที่ใช้งานการประมวลผลแบบขนานต่อ ทดลองโค้ดแบบซับซ้อนขึ้นมาหน่อย คำนวณผลรวมของ 1/n! ซึ่งควรจะเข้าใกล้ e (ประมาณ 2.7182818) ผมใช้ไฟล์ตัวอย่างในเว็บดังกล่าว บันทึกเป็น sum1.c
mpicc sum1n.c -o sum1n -O3
เราจะได้ sum1n มาใช้งาน เปรียบเทียบการทำงาน ระหว่างใช้ Raspberry Pi สองเครื่องกับใช้เครื่องเดียว โดยระบุเครื่องที่จะใช้ด้วยออฟชัน -H 192.168.1.72 -H 192.168.1.74 ทั้งนี้อาจมีถาม password ด้วยนะครับ ก็กรอกไป
mpirun -H 192.168.1.72 -H 192.168.1.74 -np 2 ./sum1n 100000000 mpirun -np 1 ./sum1n 100000000
พบว่า เร็วกว่าเกือบสองเท่า (ใช้เวลาที่ใช้น้อยกว่าเกือบครึ่ง) เลยครับ
ตัวอย่างการนำไปใช้งาน ก็มี Planet Simulator ใช้จำลองเพื่อดูดาวเคราะห์ โดยใช้ Raspberry Pi มากกว่าหนึ่งตัวมาช่วยประมวลผล