私は(基本的にはその場で2次元配列を編集)のOpenMPを使用してFloyd-Warshallアルゴリズムを並列化しようとしているが、私は、私はここに、最善の方法でそれについてつもりだことを疑うが、私がこれまで持っているものです。C、OpenMP:どのようにしてこのトリプルループの並列化を改善できますか?
#pragma omp parallel for private(i, j, k) shared(g)
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
for (k = 0; k < n; k++) {
g->A[j][k] = imin(g->A[j][k], g->A[j][i] + g->A[i][k]);
}
}
}
私はより良いのOpenMPを利用することができますどのように任意のアイデア?ランタイムの半分になった瞬間、確かにそれを改善することができます。
また、並列化のために使用される他の技術のための任意の提案として誰場合、私はすべての耳です。私はMPIについて考えましたが、私は全部main
関数を並列にする必要がありますか?
ありがとうございました。
EDIT
上記のコードは動作しません、以下の答えは、なぜ表示されます。
クールリンク –
感謝してくれてありがとうございました。チャールズ、私の頭の中で少し上手く解析するのを助けてくれますか?私が理解しているように、行をR/Nチャンクに分割します。ここでRは数または行で、Nはスレッド/プロセッサの数です。次に、「エッジ」行を他のプロセスにブロードキャストします。私はこれを正しく理解しており、これはOpenMPでも可能ですか?ありがとう。 – Griffin
これは可能です。あなたが必要とするテクニックを使うようなOpenMPコード(別の問題を解決する)についてはhttp://stackoverflow.com/q/6030658/341362を参照してください。 – Charles