zoukankan      html  css  js  c++  java
  • 初识 PLINQ

    近几年 Microsoft 推出的并行计算编程模型,PLINQ 要占到中心位置。LINQ 是语言集成查询(Language-Integrated Query )的缩写,.NET 框架 3.5 的新特性,它试图在对象领域和数据领域之间架起了一座桥。传统上,数据是SQL的天下,而面向对象语言(如Java,C#等)在编程语言领域称雄,二者之间的沟通很费周章,在编程语言里拼接SQL字串不仅繁琐,而且还容易产生安全漏洞。这时,LINQ出现了,它说:“查询要是语言的一部分!”

    具有 Intellisense 的 LINQ 查询

    PLINQ 是 LINQ 的并行扩展,是 .NET 框架 4.0 的一部分,它的台词是:“程序员写LINQ查询,之后的并行化有我!”

    它的重要性来自一下几点:

    1. 自2005年以来,摩尔定律失效,单个CPU性能提升有限,多核成为趋势,提高并行程序设计的效率成为对平台提供者来说很紧急的问题。

    2. 两种高级并行性:数据并行与任务并行的竞争决出了结果。多年任务并行(多线程及其它)的实践证明了并发复杂性无法有效控制。而数据并行随着Google的MapReduce算法的倍受推崇而得到公认:“Many-Core 时代并行与分布式计算的解决之道”。

    3. PLINQ是挖掘数据并行性的解决方案,这种设计是因为数据并行性的众望所归。

    下面这个图简要讲解了 PLINQ 的原理:并行任务数和分配方式由数据分割决定的,也就是数据的特性决定并行计算的方式:

    image

    数据源最好IList,这样数据分割效率更高。

    下面是“判断100000000后100000个自然数是否为素数”的例子:

    三种实现方法的比较

    上述代码用到了两个辅助方法(判断素数和计时):

    辅助方法

    在双核机器上执行的结果:

    PLINQ_Result

    可见LINQ 与简单的顺许方法性能相当,而PLINQ大致得到线性加速比!

    细心的朋友可能已经注意到了,上述例子中数据源是在内存里的。如果要支持更多类型数据源,比如SQL Server,则需要相应的 LINQ Provider,比如:

    http://www.sheltonblog.com/archive/2008/07/11/list-of-linq-providers.aspx

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 传球游戏
    Java实现 蓝桥杯VIP 算法训练 Hanoi问题
    Java实现 蓝桥杯VIP 算法训练 蜜蜂飞舞
    Java实现 蓝桥杯VIP 算法训练 奇偶判断
    Java实现 蓝桥杯VIP 算法训练 传球游戏
    Java实现 蓝桥杯VIP 算法训练 Hanoi问题
    Java实现 蓝桥杯VIP 算法训练 Hanoi问题
    Java实现 蓝桥杯VIP 算法训练 蜜蜂飞舞
    Java实现 蓝桥杯VIP 算法训练 蜜蜂飞舞
    Qt: 访问容器(三种方法,加上for循环就四种了)good
  • 原文地址:https://www.cnblogs.com/foamliu/p/1636919.html
Copyright © 2011-2022 走看看