後は、互いのプロセスのメモリを直接参照出来ない(=TCP/IPと同じ)のと、
全てのプロセスの出力内容はすべて同一のウィンドウに表示されることに
留意しながら、MPI_Send()&MPI_Recv() を繰り返し書いていくだけです。
(各プロセスの処理時間)>>(プロセス間通信の時間)のようにプログラムを組めば、
ほかの関数群(MPI_Barrier,MPI_Bcast,etc)を用いなくても、それほど実行時間に
影響しないと思います。
#それよりも、使う関数が多すぎて混乱して失敗、という悪循環の方が心配です。

ただし、MPI_Send()&MPI_Recv() は、処理が終了するまで制御が戻らない
(マルチスレッドでは無い)ということに注意してください。メッセージの宛先や、
サイズ、タグが一つでも違うと、動作不良(たとえばフリーズしたり)になったと思います。

プロセス1 MPI_Send(宛先:プロセス2 メッセージタグ:0x0001)
プロセス2 MPI_Recv(宛先:プロセス1 メッセージタグ:0x0002)
↑この処理(タグが違う)が同時に起こるのは避けるべきです。

それと、構造体を送る場合は、MPI_CHAR + sizeof(struct HOGE) で送れます。
長文&不正確な内容でスマソ。本選の方がんばってくださいませ!
#で、私は東工大目指して頑張っている訳だがorz