2016-10-18 14 views
5

EPFLの並列プログラミングコースでは、データ並列性のための4つの抽象概念、すなわちIterator,Builder,CombinerおよびSplitterが挙げられます。Builder、Combiner、およびSplitterとは何ですか?

私はIteratorに精通していますが、他の3つは一度も使用していません。私はBuilderCombiner、およびSplitterscala.collectionパッケージの下で見ました。しかし、私は現実世界の開発、特にListArrayParArrayなどのような他のコレクションとのコラボレーションでそれらを使用する方法を考えています。誰でも私にいくつかの指針と例を教えてください。

ありがとうございます!

+0

残念ながら、私は現実の世界ではあまり使われていないと思います。並列コレクションライブラリは非常に厄介な位置にあります。本当に大規模なデータセットの場合、Sparkなどの分散処理フレームワークを使用して複数のマシン間でそれらを処理します。シングルマシンの場合、異なるスレッド/コア間の同期のオーバーヘッドを克服するのに十分なデータセットが必要です([この記事](https://www.jayway.com/2011/10/02/experimenting-with-scala -parallel-collections /))。そのような特殊なケースでは、ストリーミングアプローチを使用する方がメモリ使用量の面ではるかに優れています。 –

+0

ライブラリ内のすべてのコンポーネントが使用されているとはかぎりません。一部の(実際にはほとんどの)コンポーネントは、決して相互作用しないと考えられています。 –

答えて

6

2つの特性IteratorBuilderは、並列性に固有のものではありませんが、CombinerSplitterの基礎を提供します。

  • あなたは既にIteratorは方法hasNextnextを提供することにより、連続的なコレクションを反復処理であなたを助けることができることを知っています。 SplitterIteratorの特別なケースであり、コレクションを複数のサブセットのサブセットに分割する際に役立ちます。アイデアは、分割後、これらのサブセットを並行して処理できるということです。 .splitterを呼び出すことによって、並列コレクションからSplitterを入手することができます。
    • remaining: Int:現在のコレクション、またはその数の少なくとも近似の要素の数を返す次のようにSplitter形質の二つの重要な方法です。この情報は、コレクションを分割する価値があるかどうかを判断するために重要な情報です。コレクションに少量の要素しか含まれていない場合、コレクションをさらに小さなサブセットに分割するのではなく、これらの要素を順番に処理する必要があります。
    • split: Seq[Splitter[A]]:現在のコレクションを実際に分割するメソッド。 (Splitterで表される)分離されたサブセットを返します。再帰的に再帰的に分割できるのは、それが価値がある場合です。サブセットが十分に小さい場合、それらは部分的に処理(例えば、フィルタリングまたはマッピング)され得る。
  • Builderは、新しい(順次)コレクションを作成するために内部的に使用されます。 Combinerは、Builderの特別なケースであり、同時に、Splitterの対応物を表す。 Splitterは、コレクションを並列処理する前にコレクションを分割しますが、Combinerは後で結果をまとめます。 .newCombinerを呼び出して、並列コレクション(サブセット)からCombinerを取得できます。これは、次の方法で行います。
    • combine(that: Combiner[A, B]): Combiner[A, B]:現在のコレクションと別のコレクションを組み合わせて、両方をCombinerにマージします。結果は新しいCombinerであり、最終結果を表すか、別のサブセットと組み合わされます(ちなみに、タイプパラメータABは、要素タイプと型または結果のコレクションを表します)。

事はあなたが実装、あるいは新しい並列コレクションを定義しない場合は、直接これらのメソッドを使用する必要がないことです。アイデアは、新しい並列コレクションを実装する人々はスプリッタとコンバイナを定義するだけで、その操作が既に実装されているためスプリッタとコンバイナを利用するため、他の操作を無料で行うことができます。

もちろん、これは、それらの仕組みがどのように機能するかについての表面的な説明に過ぎません。さらに読むために、私はArchitecture of the Parallel Collections LibraryCreating Custom Parallel Collectionsと読むことをお勧めします。

関連する問題