为什么串行代码比并行快得多?

时间:2015-12-18 21:14:41

标签: c# parallel-processing

我为Goldbach的猜想编写了这个串行和并行代码,但串行代码比并行代码快。有人可以帮我吗? 有没有办法更快地并行?

这是序列号:

class GoldbachSerial
{
    public  bool IsPrime(long number)
    {
        double maxCheck = Math.Sqrt(number);

        for (long i = 2; i <= maxCheck; i++)
        {
            if (number % i == 0) return false;
        }
        return true;
    }

    public string GetTwoPrimeNumbers(long number)
    {
        for (long i = 2; i <= number / 2; i++)
        {
            if (IsPrime(i) && IsPrime(number - i))
            {
                return string.Format("{0}={1}+{2}", number.ToString("N0"), i.ToString("N0"), (number - i).ToString("N0"));
            }
        }
        return "not found";
    }
}

这是并行代码:

class GoldbachParallel
{
    ParallelOptions parallelOptions = new ParallelOptions
    {
        MaxDegreeOfParallelism = Environment.ProcessorCount
    };


    private bool IsPrime(long number)
    {
        long maxCheck = (long)Math.Sqrt(number);
        bool result = true;

        Parallel.For(2, maxCheck + 1, parallelOptions, (i, loopState) =>
        {
            if (loopState.IsStopped) return;

            if (number % i == 0)
            {
                result = false;
                loopState.Stop();
            }
        });

        return result;
    }
    //   private static int atomic = 0;
    public string GetTwoPrimeNumbers(long number)
    {
        string result = "not found ";

       // ParallelLoopResult r = 
        Parallel.For(2, (number / 2) + 1, parallelOptions, (i, loopState) =>
        {
            if (loopState.IsStopped) return;

            if (IsPrime(i) && IsPrime(number - i))
            {
                //  Interlocked.Increment(ref atomic);
                //  loopState.Break();
                result = string.Format("{0}={1}+{2}", number.ToString("N0"), i.ToString("N0"), (number - i).ToString("N0"));
                loopState.Stop();
            }
        });
        return result;
    }
}

1 个答案:

答案 0 :(得分:4)

您认为哪个会更快,自己将10对单位数字加在一起,或者找到10个其他人,给他们添加一对数字,让他们都添加这些数字,然后给你回复回答?让更多人参与工作会更快吗?

现在,如果你有一个更难的问题让对方解决这样的问题,那么你可以获得更多时间同时完成高效工作,而不是在人员(或CPU)之间转移工作的时间损失。那将是有益的。

同样,有些问题不适合并行,虽然这不是你的问题。毕竟,9个女人一个月内不能生孩子。没有多少并行性会减少该活动的时间。