OpenMPのorderedは何者なのか

http://codezine.jp/article/detail/4914

ここにある並列バブルソートにバグがあるということで、私も調べてみました。
ソート結果を検証するコードを追加すると・・・たしかに、ソートできていない場合がある。
コードをみると、ループに


#pragma omp parallel for ordered


と指定されている。
「ordered」を調べると、ループを順次処理と同じ順番で処理するらしいことがわかった。
素直に考えると、並列処理が指定されているループに対して、並列処理しないように指定しているように見える。
実際に
http://msdn.microsoft.com/ja-jp/library/cbt9k4s0.aspx
ここのサンプルをみると、そうなっているように見える。


それを踏まえて、問題のコードをみると、並列化されている部分がなく、無駄にロック(#pragma omp critical)がかかるだけのように見える。
それだけなら、時間はかかるけど、ソートは正常に実行されるはず・・・
問題のコードが、どのような順番で動作しているか調べると・・・あれ?並列処理されてる!
見事に外側のループが並列に処理されている、これではソート結果が正常になるわけがない(^^;


ここで疑問が生じたわけです。
じゃーorderedは何者なのか?
msdnのサンプルをみると、解釈は正しいようにも見える・・・
私が試したのは、VS2005 std+SDKという変則的な環境。

解釈が正しいなら未実装な機能??? >VS2010なら正常に動作する???
それとも解釈がおかしいだけ???
後者だと思うのですが、どう解釈すればいいのかよくわからない。
誰か、orderedが何者なのか教えてもらえないでしょうか?

VS2010入れればわかるんだろうけど・・・家のPCには入れたくないし、会社のPCには入れれないし(^^;
景気が悪いからVS2010を導入してもらうのも無理っぽいし(^^;;;;;
VS2005でも、特に困ってないから、強く要求もできんw


あっ、謎ついでに、今回のように多重ループで内側のループにもパラレル指定してみたんだけど・・・変化なかった。
この辺、なにか制限あったりするのかな?