7

スカラ並列処理を使用して実行時間を短縮しようとしています。

したがって、Java ArrayList を不変のものに変換するには、次を使用します。

var imList = scala.collection.JavaConversions.asScalaBuffer(normalQLFolderList)

次に、反復時に複数のコアを利用するために、次を使用します。

for (i <- imList .par) {
}

正しい方法でスカラ並列処理を利用していますか? この場合、リストを反復処理します。asScalaBuffer に大きなパフォーマンス ヒットがありますか?

4

1 に答える 1

5

一定時間内に対応する並列オブジェクトに変換できるコレクションには、可変および不変のハッシュ マップとハッシュ セット、範囲、ベクトル、および配列が含まれます。Java からのコレクションのラッパーを含む、他のすべてのコレクション タイプの場合、呼び出しparにより、コレクションの内容が並列化により適した形式にコピーされます。

これについては、ここで詳しく説明します。

http://docs.scala-lang.org/overviews/parallel-collections/conversions.html

ただし、コレクションの大きさとforブロックのコストによっては、この変換に料金を支払うのが妥当な場合もあります。並列forブロックが各要素ごとに処理を行うほど、変換のコストが償却されます。

各要素ごとの計算に自明でないもの (少なくとも新しいオブジェクトを作成するなど) が含まれる場合、変換にお金を払うことは理にかなっていますが、呼び出しを含む逐次バージョンと並列バージョンのパフォーマンスの違いを測定することをお勧めします。par:

http://docs.scala-lang.org/overviews/parallel-collections/performance.html

于 2013-02-22T13:08:48.123 に答える