問題タブ [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.
.net - CPU を集中的に使用する .NET アプリを並列化するための現在の最適なオプションは何ですか?
これは自由回答形式の質問です。どのようなアプローチを検討する必要がありますか?
multicore - 明日のメニーコアプロセッサを活用するために、今日どの並列プログラミングモデルをお勧めしますか?
今日、新しいアプリケーションを最初から作成していて、明日スローできるすべてのコアに拡張したい場合、どの並列プログラミングモデル/システム/言語/ライブラリを選択しますか?なんで?
私はこれらの軸に沿った答えに特に興味があります:
- プログラマーの生産性/使いやすさ(人間はそれをうまく使うことができますか?)
- ターゲットアプリケーションドメイン(どのような問題が(得意ではない)得意ですか?)
- 同時実行スタイル(タスク、パイプライン、データ並列処理、メッセージをサポートしていますか...?)
- 保守性/将来性(20年後もまだ使用されている人はいますか?)
- パフォーマンス(どの種類のハードウェアでどのように拡張できますか?)
さまざまなアプリケーションに役立つ一般的な回答が得られることを期待して、アプリケーションの性質について意図的に曖昧にしています。
multithreading - 並列コーディングに切り替える
私たちは皆、シングルプロセッサ用のコードを書いています。いつ私たち全員がマルチプロセッサでコードを書くことができるのだろうか?
この切り替えには何が必要ですか(ソフトウェアツール、ロジック、アルゴリズム)?
編集:私の見解では、私たちは多くのタスクを並行して行うので、同じ方法でそれらの実際のソリューション(アルゴリズム)をコンピューター言語に変換する必要があります。OOPコーディングが手続き型コーディングに対して行ったのと同じように。OOPは、手続き型よりも実際のコーディングスタイルです。だから私はそのような解決策を望んでいます。
f# - 将来、F# が他の .Net 言語よりも最適化される可能性はありますか?
Microsoft は、VM の実行時、またはおそらくコンパイル時に、プログラムが関数型言語で構築されたことを検出し、自動的にそれをより適切に並列化できるように F# プログラムを作成できるようになる可能性はありますか?
現在、シングルスレッドプログラムとして構築されたプログラムをマルチスレッドプログラムとして自動的に実行しようとするような努力はないと思います。
つまり、開発者は単一のスレッド化されたプログラムをコーディングします。そして、コンパイラは、必要に応じてミューテックスと同期を備えたマルチスレッドのコンパイル済みプログラムを吐き出します。
これらの最適化は、タスク マネージャーのプロセス スレッド カウントで表示されますか、それともそれよりも低いレベルでしょうか?
parallel-processing - 最適な MPI 実装は何ですか
クラスターに MPI システムを実装する必要があります。ここに MPI (MPICH/OpenMPI) の経験がある場合は、どちらが優れているか、x86_64 ボックスのクラスターでパフォーマンスを向上させる方法を知りたいです。
parallel-processing - マルチコアのMPI?
マルチコア プログラミングに関する最近の話題で、MPIを使用する可能性を探っている人はいますか?
unit-testing - NUnit (および MSTest) は、静的/共有変数を変更するテストをどのように処理しますか?
共有ゲートウェイ パターンを使用してコントロール コンテナーの反転を実装するコードがあります。この IOC を使用するコードを実行する数百の NUnit 単体テストがあります。それらはすべて (私のマシンで!) 動作しますが、これらのテストは負荷がかかると失敗するのではないかと心配しています。NUnit (および MSTest) が複数のスレッドでテストを並行して実行しようとしたことを覚えているようですが (これにより、静的/共有ゲートウェイで競合状態が確実にトリガーされます)、実際に何が起こるかを示すドキュメントが見つかりません。私の経験では、NUnit はテストを順番に実行しているようです。私の質問は、NUnit (または MSTest) が単体テストを並行して実行することはありますか? もしそうなら、どのような条件で?そして、ある種の構成オプションを介してこれをオフにすることはできますか?
sql - SQL Server 2005 で複数の SQL タスクを生成する
サーバー上で同時に実行したい多数のストアド プロシージャがあります。理想的には、外部クライアントへの接続に依存せずに、すべてサーバー上で実行します。
これらすべてを起動して同時に実行するには、どのようなオプションがありますか (追加の作業を行うためにすべてのプロセスが完了するまで待つ必要さえありません)。
私は考えました:
- クライアントから複数の接続を開始し、それぞれが適切な SP を開始する。
- 各 SP のジョブを設定し、SQL Server 接続または SP からジョブを開始します。
- xp_cmdshell を使用して、osql またはその他と同等の追加の実行を開始する
- SSIS - より多くの SP を処理するためにパッケージを動的に記述できるかどうかを確認する必要があります。クライアントが本番環境にどの程度アクセスするかわからないためです。
ジョブとコマンドシェルのケースでは、おそらく DBA から許可レベルの問題に遭遇するでしょう...
SPリストをテーブル駆動できる場合、SSISは良い選択肢かもしれません。
これはデータ ウェアハウスの状況であり、作業はほとんど独立しており、NOLOCK は恒星で広く使用されています。このシステムは 8 ウェイ 32 GB のマシンなので、問題が発生した場合はロード ダウンしてスケール バックします。
私は基本的に3つのレイヤーを持っています.レイヤー1には少数のプロセスがあり、基本的にすでに読み込まれているすべての事実/次元に依存しています. 2 にはレイヤー 1 の一部またはすべてに依存するプロセスがいくつかあり、レイヤー 3 にはレイヤー 2 の一部またはすべてに依存するプロセスがいくつかあります。それらはレイヤー内で直交しているため、同時に特定のレイヤーでプロシージャーを実行します。
multithreading - どの並列プログラミング API を使用していますか?
最近のマルチコアおよびマルチプロセッシング ハードウェアの非常に重要性を考慮して、人々が実際に並列コードをどのように書いているかを把握しようとしています。私には、支配的なパラダイムは pthreads (POSIX スレッド) のように見えます。これは Linux でネイティブで、Windows で利用できます。HPC の人々は OpenMP や MPI を使用する傾向がありますが、ここ StackOverflow にはあまりないようです。それとも、移植可能な標準ではなく、Java スレッド化、Windows スレッド化 API などに依存していますか? あなたの意見では、並列プログラミングを行うための推奨される方法は何ですか?
それとも、Erlang、CUDA、RapidMind、CodePlay、Oz、または親愛なる古い Occam などのよりエキゾチックなものを使用していますか?
明確化: Linux、さまざまな UNIX、さまざまなホスト アーキテクチャなどのプラットフォームに移植可能で適用可能なソリューションを探しています。Windows は、サポートしてよかった稀なケースです。したがって、C# と .net はここでは狭すぎます。CLR はクールなテクノロジですが、Linux ホスト用にリリースして、JVM、Python、Erlang、またはその他の移植可能な言語と同じくらい普及するようにしてください。
C++ または JVM ベース: JVM はパフォーマンスを隠す傾向があるため、おそらく C++ です。
MPI: HPC 関係者でさえ、これを使いにくいツールと見なしていることには同意しますが、128000 プロセッサで実行する場合、map/reduce が適用されない問題に対する唯一のスケーラブルなソリューションです。ただし、メッセージ パッシングは、ローカル メモリ/AMP、共有メモリ/SMP、分散ランタイム環境に適切に拡張できる唯一のプログラミング スタイルであるため、非常に洗練されています。
興味深い新しい候補はMCAPIです。しかし、それを実際に経験する時間があった人はまだいないと思います。
全体として、私が知らなかった多くの興味深い Microsoft プロジェクトがあり、Windows API または pthreads が実際に最も一般的な実装であるという状況のようです。
php - PECL HTTP クラスを使用した PHP での並列 HTTP リクエスト [回答: HttpRequestPool クラス]
HttpRequestPoolクラスは解決策を提供します 。これを指摘してくれた人々に感謝します。
簡単なチュートリアルはhttp://www.phptutorial.info/?HttpRequestPool-constructにあります。
問題
PHP で同時/並列/同時 HTTP リクエストを作成したいと思います。次のような連続したリクエストを避けたい:
- 一連の要求が完了するまでに時間がかかりすぎます。リクエストが多いほど長くなる
- セットの途中で 1 つのリクエストがタイムアウトすると、それ以降のリクエストが作成されない場合があります (スクリプトに実行時間制限がある場合)。
cURL を使用して PHP で同時に [sic] HTTP リクエストを作成する方法の詳細を見つけることができましたが、可能であればPHP のHTTP 関数を明示的に使用したいと考えています。
具体的には、データを一連の URL に同時に POST する必要があります。データが投稿される URL は、私の管理外です。それらはユーザー設定です。
応答を処理する前に、すべての要求が完了するのを待つ必要があるかどうかは気にしません。各リクエストに 30 秒のタイムアウトを設定し、リクエストが同時に行われた場合、すべてのリクエストが完了するまで最大 30 秒 (おそらくもう少し) 待たなければならないことがわかります。
これがどのように達成されるかについての詳細は見つかりません。しかし、私は最近、PHP5+ が同時 HTTP リクエストを処理できるという PHP のマニュアルで言及されていることに気付きました。
単一のリクエストの例 (正常に動作します)
同時リクエストの例 (不完全、明確)
どんな考えでも大歓迎です!
明確化 1 : PECL HTTP 関数に固執したい:
- 彼らは素晴らしいOOPインターフェースを提供します
- それらは問題のアプリケーションで広く使用されており、すでに使用されているものに固執することは、メンテナンスの観点から有益であるはずです
- 一般に、cURL を使用する場合と比較して、PECL HTTP 関数を使用して HTTP 要求を行うために記述するコードの行数が少なくて済みます。コードの行数が少ないことは、メンテナンスの観点からも有益です。
明確化 2 : PHP の HTTP 関数が組み込まれていないことに気付きました。おそらく、間違った表現をしたので、訂正します。人々が余分なものをインストールしなければならないという心配はありません。これは配布されるアプリケーションではなく、それ自体がサーバーを持つ Web アプリケーションです。
明確化 3 : PECL HTTP はこれを行うことができないと誰かが正式に述べている場合、私は完全に満足しています。