なぜ次の答えが同じではないのですか?階乗(パラレルとノーマル)の答えが同じではありません
ノーマルコーディング:
long sum = 0;
for (long i = 1; i <= 10; i++)
{
long result = 1;
for (long j = 1; j <= i; j++)
{
result = result*j;
}
sum = sum + result;
}
パラレルコーディング:
long sum = 0;
Parallel.For(1, 10, delegate(int i)
{
long result = 1;
Parallel.For(1, i, delegate(int j)
{
result = result*j;
});
sum = sum + result;
});
くれ
for (long i = 1; i <= 5; i++)
{
sum = sum * i;
}
と
Parallel.For(1, 5, delegate(int i)
{
sum = sum * i;
});
正しい方法を提示してください
sum
と
result
にアクセスし、異なるスレッドによって修正されるので、並列の
結果= 120 =正常
"int"で計算可能な任意のサイズの値の場合、呼び出した並列オーバーヘッドが実際の算術を支配し、スピードアップは見られません。あなたがbignumパッケージを必要とするiの値を主張するなら、スピードアップが見込まれるでしょう。 (あなたのアルゴリズムはかなり非効率的です:それぞれのj> kに対して繰り返しkを繰り返します; kをキャッシュする方が良いでしょう!) –