問題タブ [parallel-processing]
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.
concurrency - 並列/並行アーキテクチャの使用を促進するのはどのような課題ですか?
私は、スタックレス pythonやerlangなど、並列処理や並行処理が組み込まれている言語を使用できる可能性に非常に興奮しています。スケーラビリティとパフォーマンスを実現するための良い/簡単な方法です。
ただし、私は線形/シリアル/OOP/機能的な方法でソリューションを考えることに慣れているため、同時実行を使用する価値のある方法でドメインの問題をキャストするのに苦労しています。多くのことを忘れる必要があるだけだと思いますが、次のことを尋ねると思いました。
- スタックレスやアーランなどでかなり大きなものを実装しましたか?
- なぜそれが良い選択だったのですか?良い選択でしたか?もう一度やりますか?
- あなたの問題のどのような特徴が、並行/並列が正しかったことを意味していますか?
- 並行性/並列性を利用するために、既存の問題を再キャストしましたか? と
- もしそうなら、どのように?
彼らが喜んで共有したい経験はありますか?
parallel-processing - 並列処理ミドルウェア
比較的粗粒度の並列処理 (データ転送は 100 Mbit イーサネット ネットワークで実行できます) の場合、Windows と Linux で利用できるミドルウェアはどれが最適だと思いますか? コルバ?MPI1? MPI2? XML-RPC/SOA/WSDL? カスタム ネットワーク プロトコル? ジャバRPC?パイソン RPC? その他?
multithreading - pthreads - ジョブを並列化する方法
n プロセッサ システムで使用するために、単純なパスワード クラッカーを並列化する必要があります。私の考えは、n個のスレッドを作成し、それらが終了するにつれて、それらにますます多くの仕事を与えることです。
スレッドがいつ終了したかを知る最良の方法は何ですか? ミューテックス?他のスレッドが実行されている間、このミューテックスを常にチェックするのは高価ではありませんか?
ruby - Rubyで大量のWebページを高速にダウンロードするには? ダウンロードの並列化?
(scrAPI を使用して) 400 以上の Web ページの ruby をスクレイピングする必要があります。実際のコードは非常に連続しています。
実際、コードは少し異なります (例外処理など)。
どうすれば速くなりますか?ダウンロードを並列化するにはどうすればよいですか?
c++ - C++用のプラットフォームに依存しない並行プログラミングライブラリ
私は、このための多くのツールを提供するJavaでの並行プログラミングに精通しています。ただし、C++並行プログラミングは使い始めるのがそれほど簡単ではありません。
C ++で同時にプログラミングを開始するための最良の方法は何ですか?並行プログラミングプリミティブをラップし、より高レベルの構造を提供する優れたライブラリはありますか?
優れたMapReduce機能を提供するQtConcurrentを試しましたが、Qtを使用した並行計算に大きく偏っているため、Qtを使用したくない場合は適切な選択ではありません。
他に同様のライブラリはありますか?人々はここで何を使用しますか?
事前にご協力いただきありがとうございます、sneg
scheduling - GNU make での相互排他的なジョブ スケジューリング?
GNU make を使用して、「--jobs」オプションを使用すると、同時にスケジュールされない一連のターゲットを作成できますか?
バックグラウンド:
これをもう少し具体的にするために、次の形式のメイクファイルを検討してください。
私がする必要がある主なことは、e1、e2、および e3 が同時に処理されないようにすることです。これは、リソースが限られている組み込みデバイスで何らかの作業を行うためです。それらの複数のものが同時に実行されている場合、それらはクラッシュします。p1、p2、および p3 は、任意の e* ジョブを含む任意のものと並行して実行できます。
実際のメイクファイルには、約 10 レベルの深さの依存関係ツリーを持つ数千のターゲットがあることに注意してください。そのため、(a) make を連続して実行する必要がなく、(b) の利点を保持する方法があることを願っています。メイクファイルで依存関係ツリーをエンコードします。
performance - 小さな純粋関数を並列化するには?
現在の形式ではシングルスレッドであり、このプログラムの外側のループの反復ごとに内側のループで同じ純粋な関数を約 10 ~ 100 回呼び出す D2 プログラムがあります。呼び出し間にデータの依存関係はありません。つまり、他の呼び出しの結果を使用する呼び出しはありません。全体として、この関数は何百万回も呼び出されており、私のプログラムの主なボトルネックになっています。パラメータはほぼ毎回一意であるため、キャッシュは役に立ちません。
一見すると、これは並列化に最適な候補のように見えます。唯一の問題は、関数が呼び出しごとに約 3 マイクロ秒しかかからず、新しいスレッドを作成する待ち時間よりもはるかに短く、タスク プールにジョブを追加するオーバーヘッド (つまり、ミューテックスの取得、メモリの割り当て) をはるかに上回っていないことです。タスクに関する情報を保持し、タスク プールのキューで起こりうる競合に対処するなど)。このきめの細かい並列処理を利用する良い方法はありますか?
multithreading - マルチコアマシンでの基本的なデータ構造の高速化?
私はしばらくの間、この質問を熟考してきました:
複数の CPU があるという事実を利用して、マルチコア マシン上でより高速な基本データ構造 (つまり、リンク リスト、ハッシュ テーブル、セット、スキップリスト、ブルーム フィルター、レッド ブラック ツリーなど) を構築できますか?
pthread で予備実験を行ったところ、pthread_create() は 30us 程度かかることがわかりましたが、単純な hash_map の挿入は、シングル コアの場合よりもはるかに短い時間で済みました。したがって、同期プリミティブとスレッドの作成が非常に遅いため、より高速な hash_map<> を作成することを想像するのが難しくなりました。ツリーのトラバーサルとバランシングを並行して行うことも想像できますが、やはり、同期プリミティブはランタイムを短くするのではなく、長くするように見えます。
「CPUが増えたので、もっと速くできるはずだ」というのは今でも直感的に感じますが、その声明の証明または反証に頭を悩ませることはできません. 私は C++ でかなりの実験をしてきましたが、他の言語がこのタスクに対してより良い解決策 (erlang?) を提供するのではないかと疑っています。考え?
編集の詳細: 頻繁に使用されるプログラミング/データ構造パラダイムがいくつかあり、高速化できる可能性があると思います。たとえば、基本的に次のようなコードを頻繁に書いていることに気付きます (実際のデータは "rand()" に置き換えられています)。
この種のパラダイムは、名前と値の設定と構成データ、バッチ処理などによく使用されます。10 倍 (またはそれ以上) の検索/挿入比により、従来の hash_map<> はこの種の操作に理想的です。
これは、挿入フェーズと検索フェーズで簡単に半分に分割できます。並行世界では、2 つの半分の間に「フラッシュ キュー」操作が存在する場合があります。より難しいのは、インターリーブされた挿入 + ルックアップ バージョンです。
そのシナリオでは、各ルックアップの前に挿入キューがフラッシュされている限り、挿入は非同期である可能性があり、LOOKUP_RATIO が十分に大きい場合 (たとえば、>1000)、上記のバッチの例と非常に似ていますが、いくつかのキューイングがあります。ただし、キューイングは同期プリミティブを意味します。
次のスニペットを想像してみてください。
したがって、ルックアップは次の方法で「並列」に実行できます。
c# - アプリケーションの一部で完全な並列処理が必要なシナリオでは、F#はC#よりも優れていますか?
アプリケーションの一部で完全な並列処理が必要なシナリオでは、F#はC#よりも優れていますか?
私の主な言語はC#であり、アプリの上に構築されたコア機能(C#)が非常に並列である必要があり、計画されているアプリを作成しています。
これらのクラスをF#で実装する方が良いですか?
c# - C# には副作用検証のための機能が含まれていますか (または含まれる予定ですか)?
C# が多くの並列プログラミングをサポートしていることは知っていますが、私の知る限り、副作用を検証するための構成要素はまだありませんよね?
C# が既にレイアウトされている今では、よりトリッキーだと思います。しかし、これを入れる予定はありますか?それとも、F# は、副作用検証のための構造を持つ唯一の .NET 言語ですか?