.NET 中对多核心 CPU 的编程优化

前段时间在看 MapReduce 的实现时,突然想到的,我以前编程都是按照传统的编程方式进行的,别人说的什么针对多(核)CPU 优化等,对于我来说,就像浮云一样。我想,我是搞 .NET 开发的,所编写出来的程序是运行在那个沙箱里面,至于资源的分配调度等,它应该会帮我完成。

 

但是在看了 MapReduce 之后,我对他的伪分布式实现比较感兴趣,就是在单台机子上将计算拆分,然后启动N(N=CPU数量)个线程分别来执行。

 

但是,在 .NET 中,这样做真的能提升运算效率么?

 

于是,我做了一个简单的测试。

 

编写了两个程序,一个按照传统方式编程,一个根据伪分布式计算来进行优化,两个程序执行的算法和运算量相同。

于是,跑出了以下的数据:

传统方式:

1.482 ms

2.481 ms

3.477 ms

4.481 ms

5.523 ms -

6.475 ms

7.473 ms

8.477 ms

9.472 ms -

10.482 ms

 

平均时间:478.5 ms

 

伪分布式(多核CPU优化):

1.332 ms

2.359 ms -

3.311 ms -

4.345 ms

5.337 ms

6.355 ms

7.328 ms

8.325 ms

9.359 ms -

10.335 ms

 

平均时间:336.7 ms

 

(PS:一般的,双核CPU启动2个线程,但是如果双核CPU启动4个线程来执行相同计算工作量的代码,效率不会进一步提升了)

 

如果在计算工作量相当大的情况下,我相信第二个程序具有相当的优势。

 

看来,在某些方面,我以后的编程方式得做出一定的改变了。

 

最后附带3个测试程序。

SingleThread 是传统编程方式。

MultiThread 是针对双核优化的程序。

Multi2Thread 是用来测试继续拆分工作到多个线程(4个),是否还能提升效率。(他在双核下,将会和第二个程序达到差不多的效率,不过似乎还要稍微慢一些,但是如果你是4核CPU,那么,这个最快!)

 

点击这里下载

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值