与Java相比,Scala似乎具有大量的功能和改进。我很难隔离想要首先了解有关Scala的内容。例如,如果我只想进行循环并使其在多个线程或进程上运行,我应该在Google上寻找什么?我来自GPU计算背景,从那里可以很简单地高层了解如何使事情运行得更快。

最佳答案

  • Scala的并行集合特别容易。在整数f(i)上并行化一个昂贵的操作i <- 1 to 10很简单,
    (1 to 10).par.map(i => f(i))
    

    Scala将尝试分配与系统中可用内核/处理器数量相当的工作线程数量。这是一个具有更多详细信息的视频:http://days2010.scala-lang.org/node/138/140
  • Akka framework是一种成熟的,主要基于参与者的并发方法,它允许在线程或远程进程之间并行化。参与者基本上是可以传递消息而不是共享状态的线程。新成立的Typesafe公司正在开发Scala语言和Akka。
  • 您也可以尝试Scala的软件事务存储(STM)库的draft release。该库旨在包含在标准Scala发行版中。与手动管理的线程相比,STM是一种更简单的并发模型,可以减少诸如死锁之类的错误。它通过将通信操作序列分组到单个同步块(synchronized block)中来工作,如果多个线程在共享状态下执行某些操作却互不兼容,则该同步块(synchronized block)可能会失败并回滚。为了方便起见,大概需要付出一些性能成本。我不确定STM可以很好地扩展到大量线程。
  • Spark framework解决群集计算问题,并且似乎是MapReduce的概括。
  • 对于Scala的GPU编程,有ScalaCL。您也可以使用Java bindings
  • 斯坦福大学和EPFL实验室之间的共同努力也完成了非常有趣的语言虚拟化工作。 This page包含论文链接,还有一个course at Stanford包含更多链接。有多种激动人心的应用程序可用于开发DSL,以在包括GPU在内的异构计算环境上进行高性能计算。

  • 更新。丹尼尔·索布拉尔(Daniel Sobral)也建议使用Tools and Libraries wiki

    09-25 21:53
    查看更多