問題タブ [seq]
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.
f# - F# PSeq.iter はすべてのコアを使用していないようです
私は F# で計算集約的な作業を行ってきました。.Net Task Parallel Library を使用するようなArray.Parallel.map
関数は、非常に最小限の労力で私のコードを指数関数的に高速化しました。
ただし、メモリの問題により、コードのセクションを作り直して、シーケンス式内で遅延評価できるようにしました (これは、格納して渡す情報が少なくなることを意味します)。評価する時が来たとき、私は以下を使用しました:
それ以外の:
Array.Parallel 関数のいずれかを使用すると、コンピューターのすべてのコアがギアを上げていることがはっきりとわかります (~100% の CPU 使用率)。ただし、追加のメモリが必要になるということは、プログラムが終了しないことを意味します。
プログラムを実行したときの PSeq.iter バージョンでは、約 8% の CPU 使用率 (および最小限の RAM 使用率) しかありません。
では、PSeq バージョンの実行速度がこれほど遅いのには何か理由があるのでしょうか? 遅延評価のせいですか?私が見逃している魔法の「平行になる」ものはありますか?
ありがとう、
その他のリソース、両方のソース コード実装 (.NET では異なる Parallel ライブラリを使用しているようです):
https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/array.fs
https://github.com/fsharp/powerpack/blob/master/src/FSharp.PowerPack.Parallel.Seq/pseq.fs
編集:コード例と詳細に詳細を追加
コード:
シーケンス
/li>配列
/li>
詳細:
- 中間アレイ バージョンの保存は 10 分未満で (クラッシュする前に取得できる限り) 高速に実行されますが、クラッシュする前に ~70GB の RAM を使用します (64GB 物理、残りはページング)。
- seq バージョンは 34 分以上かかり、RAM の一部 (約 30GB のみ) を使用します。
- 私が計算している〜十億の値があります。したがって、10 億倍 (それぞれ 64 ビット) = 7.4505806GB です。より複雑な形式のデータがあります...そしていくつかの不要なコピーをクリーンアップしているため、現在大量の RAM が使用されています。
- はい、アーキテクチャは良くありません。遅延評価は、プログラムを最適化したり、データを小さなチャンクにまとめたりする最初の部分です。
- より小さいデータセットでは、コードの両方のチャンクが同じ結果を出力します。
- @pad、私はあなたが提案したことを試しました.PSeq.iterはCalculation []を供給されたときに適切に動作するように見えました(すべてのコアがアクティブです)が、まだRAMの問題があります(最終的にクラッシュしました)
- コードの要約部分と計算部分の両方が CPU を集中的に使用します (主にデータ セットが大きいため)。
- Seq バージョンでは、一度だけ並列化することを目指しています
scala - 一致がIndexedSeqを受信したが、LinearSeqを受信しなかった場合のMatchError
match
に対して書かれたものが型での動作と型でのSeq
動作が異なる理由はありますか?私には、以下のコードは入力タイプに関係なくまったく同じことを行う必要があるように思われます。もちろん、そうではないか、私は尋ねないでしょう。IndexedSeq
LinearSeq
これを2.9.1finalで実行すると、次の出力が得られます。
List-yの場合は正常に実行されますが、Vector-yの場合は失敗します。私は何かが足りないのですか?これはコンパイラのバグですか?
のscalac -print
出力はm
次のようになります。
scala - 各 Tuple の 1 つの要素を使用して Tuple3 の Seq をフィルタリングする
私はSeq
のTuple3
要素を持っています。各タプルの2 番目の要素で構成された結果のコレクション (おそらく a Set
) が必要です。
例えば
何か案が?私はたくさん検索しましたが、私が見つけたのは、タプル内ではなく、タプルのフィルタリングに関係しています。
私はまだ Scala にまったく慣れていません。学習は長いプロセスです :) 助けてくれてありがとう。
scala - ScalaはSeqをsbt.Project.Setting[_]のk、vに変換します
Play 2.0のBuild.sbtは、その魔法を実行するために、ピンポンされたプロジェクト定義を使用します。追加する必要のある追加設定は、手動で入力する必要がありますk := v
。一般的なケースでは正常に機能しますが、特定のケースでは機能しません。つまり、常にであるsbt-pluginの設定を設定する必要がある場合ですSeq[Settings[_]]
。これが予想通りに機能する例です
次に、Seq [Settings [_]]をk、vペアに変換して、名前で再生を呼び出す方法を説明します。
実際に動作しますか?!!
私はプレイユーザーに質問しましたが、幸運を祈ります。あそこの動物園、フレームワークが軌道に乗っており、コア開発者は明らかに彼らの耳に届いています...
r - 最小限のコードで乗算表を印刷する
Rでは、乗算表を印刷する最速の方法(最短コード)は何ですか? 関数 seq rep と bind 関数が役立ちますが、これを行うためのコードの最短行を探しています。
1 から 6 まで (横方向) に印刷します。これをよりコンパクトな方法で実行する方法を知っている人はいますか?
list - Scala の Seq とリストの違い
多くの例で、Seq が使用されている場合もあれば、List が使用されている場合もあります...
前者が Scala 型であり、List が Java からのものである以外に違いはありますか?
performance - なぜ Seq.iter と Seq.map はとても遅いのですか?
F# で次のコードを検討してください。
iter
モジュールのandmap
関数が同等のandモジュールSeq
よりもずっと遅いのはなぜですか?Array
List
map - Create seq of maps from two or more seqs
I'm new to Clojure and I was wondering if there's a way to create a sequence of maps from two or more sequences.
Let's say you have:
If you merged those I'd like to get what would be an array of hashes in Ruby, or in Clojure a sequence of maps?
thanks!
haskell - Haskell: deepseq を使用したより厳密な折り畳み
ページFoldr Foldl Foldl'で について説明foldl'
し、次のように定義しています。
これは、スペース リークを回避するために行われます。つまりfold'
、一定のサイズの結果が一定のスペースのみを使用するようにします。
ただし、ここで指摘されているように、これは必ずしも機能するとは限りません。
関連
seq
する関数は、最上位のコンストラクターのみを評価します。アキュムレータがより複雑なオブジェクトである場合fold'
でも、未評価のサンクが構築されます。
明らかな解決策は、次のように変更seq
するdeepseq
ことです ( を使用していると仮定しますNFData
)。
しかし、ループを通過するたびに構造全体をトラバースする必要があるため、これは非常に非効率的であると感じてdeepseq
います (コンパイラーがこれが不要であることを静的に証明できない限り)。
次に、これを試しました:
しかし、この問題があることがわかりました。以下は、3 を返す必要がある場合に失敗します。
だからfold_stricter
厳しすぎる。リストは厳密である必要はありません。スペースリークを防ぐために重要なことは、アキュムレータが厳密であることです。fold_stricter
行き過ぎて、リストも厳密になり、上記が失敗します。
に戻りfold_strict
ます。deepseq
サイズのデータ構造で繰り返し実行すると時間n
がかかりますか、それとも初回とそれ以降の時間O(n)
だけですか? (以下のコメントでdbaupが示唆しているように)O(n)
O(1)
haskell - Haskellのサンクは評価に関して変更可能ですか?
並列プログラミングとその後の評価戦略を検討しているときに、サンクが可変であるかどうかという疑問が浮かびました。例を挙げると、次のコードがあるとします。
評価seq
時に呼び出すと、が評価され、正規形の値が得られます。この評価も影響しますか?つまり、の値はまだですか、それとも評価後ですか?bar
foo
bar
3
foo
foo
1+2
3
bar