日期:2014-05-17  浏览次数:20758 次

[讨论]发现计算连续加法,串行效率要比并行的高?
我设计了一个串行和并行的连续加法运算,比较了一下运算时间,发现串行的比并行的要高,加法运算为1+2+...+1000000000,貌似随着项数增多,并行的算法没有凸显它的优势的?

并行代码(分奇数项和偶数项两个线程来求)
C# code

            Thread T1 = new Thread(new ThreadStart(aa));//aa算奇数项和的函数,返回sum1
            T1.Start();

            Thread T2 = new Thread(new ThreadStart(bb)); //bb算偶数项和的函数,返回sum2
            T2.Start();

            while (T1.IsAlive || T2.IsAlive)
            {
                Thread.Sleep(1);
            }

            T1.Abort();
            T2.Abort();

            double sum = sum1 + sum2;  //相加



串行代码
C# code

            aa();  //aa算奇数项和的函数,返回sum1
            bb();  //bb算奇数项和的函数,返回sum2
            double sum = sum1 + sum2;



讨论:是不是我的并行程序设计得其实就没有并行的效果呢?我看CPU二者是有区别的哦。

------解决方案--------------------
我们知道多条线程访问同一个变量会发生共享冲突
类似的,多个cpu核心访问同一快内存空间也会发生共享冲突
为了消除这些共享冲突,就需要付出额外的代价。

你的a,b大概是这么实现的
C# code
        private void bad_a()
        {
            sum1 = 0;
            for (int i = 1; i <= Max; i += 2)
            {
                sum1 += i;
            }           
        }

------解决方案--------------------

一个60毫秒,一个146毫秒,处理器AMD Athlon 64 X2 5200+ 2.7GHz
顺便说下,VS2012的自动集成单元测试很方便,它也可以列出单元测试运行的时间(最左边的窗格)。