正午ごろ、これの第一稿を書いてたらブレーカーが落ちました。
なので、これを書くの二度目です。
頼むから今度は落ちないでくれ。ブレーカー……

んで、うちのチームが使った方法ですが、

>>125-126とは違う方法で並列化しました。
各CPUにそれぞれ別のピクセルを処理させるのではなく、一つのピクセルを全てのCPUを使って処理するようにしています。
どうやっているかというと、例えば、hardness20のピクセルを処理する場合、hardness+(0〜2^20)の値についてしらべなければいけません。
そこで、この2^20個の値を、64×CPUごとにブロック分けします。
(CPU数4個の場合、第一ブロックは、hardness+(0〜255) 、第二ブロックはhardness+(256〜511)、第三ブロックはhardness+(512〜767)、という風に)
そして、全CPUを使って一つのブロックを処理します。
(最初に処理するのは第一ブロックですが、その時各CPUは、4で割ると「0余る値」「1余る値」「2余る値」「3余る値」をそれぞれ処理します)
各ブロックの処理が終わるごとに、MPI通信を行って答えが求まっているか否かを調べます。そして、答えが求まっていた場合、全プロセスで答えを共有します。(全プロセスで共有するのは、>>126で書かれている処理2を、MPI通信をする事なく行うため)
以上の方法は、Hardnessが大きくなれば、うまく機能するでしょう。

……ちなみに、hardnessが低い時には、この方法は無茶苦茶遅くなります。
その事に気付いたのは、表彰式前日の夜でした。

その他の工夫については、また今度。
長文駄文失礼しました。