現在、2つの要素の最大の差を計算するための並列アルゴリズムを実装しています。私はこれを達成するためにtb30ライブラリからparallel_invokeを使用しています。最大差を計算する並列アルゴリズム
int calculateMaxDiff(int *src, int start, int end){
int maxVal = -1;
int maxRight = src[end -1];
for(int i = end - 2; i >= start; i--){
if(src[i] > maxRight){
maxRight = src[i];
}else{
int diff = maxRight - src[i];
if(diff > maxVal){
maxVal = diff;
}
}
}
return maxVal;
};
int compute_max_diff(int *src, int size)
{
int half1_diff;
int half2_diff;
parallel_invoke([&]{ half1_diff = calculateMaxDiff(src, 0, size/2);},
[&]{ half2_diff = calculateMaxDiff(src, size/2, size);});
int maxDiff = half1_diff + half2_diff;
return maxDiff;
}
以下今はサンプルアレイ上記サンプルについて
int src[] = {12, 9, 18, 3, 7, 11, 6, 15, 6, 1, 10};
int size = 11;
として以下を使用しています上記のコード・セグメントの出力または最大差は12である必要があるが、私が見えるように、私の実装であります私はアルゴリズムを逐次実行し、期待される結果を得ました。しかし、私が一度紹介したらparallel_invoke私は正しい結果を得ていないようです。
これは並列性の非効率的な使用のように思われる –
ですが、私はparallel_invokeを使用するのに制限があります。なぜ出力がオフになっているのですか? – RRP
並列を実行する前に、2つの半分のアルゴリズムを連続的に試してください。つまり、parallel_invoke/lambdaの定型文を消去して、calculateMaxDiffを2回連続して呼び出します。何を手に入れますか?また、デバッグした後、アルゴリズムがこの4要素入力{0、0、100、100}をどのように処理するかを検討することもできます。 –