读书人

[议论]发现计算连续加法串行效率要比

发布时间: 2012-09-10 22:20:12 作者: rapoo

[讨论]发现计算连续加法,串行效率要比并行的高?
我设计了一个串行和并行的连续加法运算,比较了一下运算时间,发现串行的比并行的要高,加法运算为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的自动集成单元测试很方便,它也可以列出单元测试运行的时间(最左边的窗格)。

读书人网 >C#

热点推荐