2011-08-23 9 views
11

Scalaには、Javaに比べて多くの機能と改善があるようです。私はScalaについて最初に学びたいものを分離するのに苦労しています。例えば、ループを行い、複数のスレッドやプロセスを実行させたい場合、Googleで何を探すべきですか?私はGPUコンピューティングのバックグラウンドから来ています。そこでは、物事をより速く走らせる方法についての高水準の見解を得ることは本当に簡単でした。マルチスレッドに焦点を当てたScalaチュートリアルの検索

答えて

21
  • Scalaの並列コレクションは特に簡単です。整数i <- 1 to 10を超える高価な操作f(i)を並列化することは、同じくらい簡単です

    (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はデッドロックなどのエラーの可能性を減らす、より単純な同時実行モデルです。複数のスレッドが相互に互換性がないことが判明した共有状態で何らかの処理を行うと、一連の通信操作を単一の同期ブロックにグループ化して失敗し、ロールバックすることができます。おそらく、利便性のために支払うべきパフォーマンスコストがあります。私は、STMが多数のスレッドにどれくらいうまく伸びているのかよくわかりません。

  • Spark frameworkはクラスタコンピューティングに対応しており、MapReduceの一般化されたようです。

  • ScalaからのGPUプログラミングについては、ScalaCLがあります。 Java bindingsを使用することもできます。

  • スタンフォードとEPFLのラボ間の共同作業として、非常に興味深い言語仮想化作業が行われています。 This pageには論文へのリンクがあり、さらに多くのリンクを持つcourse at Stanfordがあります。 GPUを含む異種コンピューティング環境での高性能コンピューティングのためのDSLの開発には、いくつかのエキサイティングなアプリケーションがあります。

更新。 Daniel SobralもTools and Libraries wikiを提案しました。

+0

STMのおかげで、それについて知らなかった。期待しているようだ。 –

+0

この回答は本当にFTWです。あなたはライブラリとツールのwikiへのリンクを貼り付けていたはずです... –

+0

@ダニエル、更新、ありがとう。 –

関連する問題