問題タブ [parallel-collections]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - Scala アクターを使用した階乗計算
Scala アクターを使用して階乗を計算する方法は?
たとえば、
どうもありがとう。
scala - Scala ParArray パターン マッチング
検討
bしかし、例えば以下のようなパターンマッチングでは、
したがって、パターンマッチの方法はParArray?
前もって感謝します。
scala - Scala のさまざまな並列構造
Scala と単純なコレクションで並列コレクションをテストしました。これが私のコードです。
並列収集は約 3 倍高速化されます。並行してさらに高速化するために、Scala で他にどのようなオプションがありますか。喜んでテストし、結果をここに記載します。
multithreading - Scala 並列コレクションによる配列の更新
以下のように定義された HashMap のこの配列があります
今、私は300要素の並列コレクションを持っています
上記で定義されたforeachループ内で計算集約型のタスクを実行しています。columnArray計算が完了したら、各スレッドがdistinctElementsDefinitionMap配列の特定のエントリを更新するようにします。各スレッドは、それを実行するスレッドに固有の特定のインデックス値のみを更新します。複数のスレッドが同時に書き込みを行う可能性があるため、配列のエントリのこの更新が安全かどうかを知りたいですか? そうでない場合、synchronizedそれを行う方法があるので、スレッドセーフですか? ありがとう!
更新: これは実際には安全な方法ではないようです。java.util.ConcurrentModificationException
並列コレクションを使用しているときにこれを回避する方法についてのヒントを取得しています。
scala - 並列配列はどのように再利用できますか?
Scala の並列コレクションを使用して、いくつかの計算を並列にディスパッチしようとしています。入力データが多いため、可変配列を使用してデータを格納し、GC の問題を回避しています。これは私が取った最初のアプローチです:
aParallelArrayの基礎となる配列を安全に再利用できる (つまり、変更して、別の の基礎となる構造として使用するParallelArray) ことができるとすれば、上記の抜粋は期待どおりに機能するはずです。ただし、実行するとメモリ エラーでクラッシュします。
これは、並列コレクションが作成元の配列を直接使用するという事実に表向きは関連しています。おそらく、範囲外になったときにこの配列を解放しようとしています。いずれにしても、メモリの制約により、各ループで新しい配列を作成することはできません。var parInputData = inputData.parループの内側と外側の両方を明示的に作成するwhileと、同じダブルフリー エラーが発生します。
順番に入力する必要があるため、単純に並列コレクションにすることはできませんinputData(並列バージョンへの割り当てを試みたところ、割り当てが順番に実行されていないことに気付きました)。aVectorを外部データ構造として使用すると、比較的小さな入力サイズ (< 1000000 入力配列) では機能するように見えますが、大きな入力では GC オーバーヘッドの例外が発生します。
私が取ったアプローチはVector[Vector[Array[Int]]]、使用されている並列スレッドの数に等しい長さを持つ外側のベクトルを使用して、 を作成することでした。次に、入力データ配列のチャンクを各サブに手動でVector入力し、外側のベクトルに対して並列マップを実行しました。
この最後のアプローチは機能しますが、手動で入力をチャンクに分割し、それらのチャンクを別のレベルの並列コレクションに追加するのは面倒です。Scala が可変配列を並列操作に再利用できるようにする方法はありますか?
編集: 同期キューを使用して手動で並列化されたソリューションに対して上記の並列ベクトル ソリューションをベンチマークすると、並列ベクトルが約 50% 遅くなることが示されました。Vectorこれは単なる抽象化のオーバーヘッドなのか、それともsではなく並列配列を使用することでこのギャップを減らすことができるのか疑問に思っています。これは、s に対して配列を使用することのさらに別の利点につながりますVector。
list - Scala - パー シーケンスの並べ替え
toListパーシーケンスをソートするときにどうすれば削除できますか?