は次の素数を見つけるための戦略を考え出すしようとすると並行処理は連続処理より高速ではありませんか?</p> <p>アルゴ#1(パラレル):
private static int NextPrime(int p)
{
int nextP = 2 * p; // there is always a prime between n & 2*n !
Enumerable.Range(p + 1, p)
.AsParallel()
.ForAll(g =>
{
bool prime = true;
for (int i = 2; i <= Math.Sqrt(g); i++)
{
if (g % i == 0)
{
prime = false;
break;
}
}
if (prime)
{
if (g < nextP)
nextP = g;
return;
}
});
return nextP;
}
アルゴ#2(シーケンシャル):
private static int NextPrimeNonParallel(int p)
{
int nextP = 2 * p; // there is always a prime between n & 2*n !
foreach (var g in Enumerable.Range(p + 1, p))
{
bool prime = true;
for (int i = 2; i <= Math.Sqrt(g); i++)
{
if (g % i == 0)
{
prime = false;
break;
}
}
if (prime)
{
if (g < nextP)
nextP = g;
return nextP;
}
}
return 0;
}
シーケンシャルよりも大幅に高速でありますパラレル:)なぜ?それとも、私の平行したアルゴは本当によく書かれていますか?
ありがとうございます!
並列プログラムは、並列計算のためのスレッドまたはプロセスをさらに作成するために時間がかかることに注意してください。また、私はこの関数がどのように動作するのか分かりませんが、データが壊れてしまうのを防ぐために内部にあるミューテックスやセマフォがあると、並列プログラムを取得せず、オーバーヘッドで時間を無駄にします... – Odinn
どのような番号の範囲はあなたがテストですか?大きい数字の場合は並列化するほうが良いかもしれませんが、小さいものは – thumbmunkeys