問題タブ [smp]
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.
c - プロセスが実行されているコアをどのように知ることができますか?
私は現在、Linux環境でプロセスを1つのコアに設定するプロジェクトに取り組んでいます。私はsched_setaffinityを使用してこの仕事をしていますが、プロセスが実行されているコアを取得するためにLinuxによって提供される関数があるかどうか疑問に思います。topコマンドを使用すると、jオプションを使用してこの情報を取得できることがわかりました。したがって、ユーザースペースでこの情報を取得する方法はいくつかあると確信しています。
caching - TLB シュートダウンとは何ですか?
SMP での TLB シュートダウンとは何ですか?
この概念に関する多くの情報を見つけることができません。どんな良い例でも大歓迎です。
erlang - テストには Erlang を使用します。
4 コア以上の単一コア erlang プログラムを搭載したコンピューターでテストできますか?
パラメーターを使用せずに開始すると、erlang smp は次のように 2:2 を想定します。
Erlang R14A (erts-5.8) [smp: 2:2] [rq: 2] [async-threads: 0]
Pentium 4 を使用していますが、コアが 2 つあるということですか?
multithreading - Linux SMP でのスレッドのブーストと存在しないスピードアップ
boost::thread を使用して、小さなサンプル C++ プログラムを作成しました。215行なので代わりにペーストビンに投稿しました
このプログラムは多数の float (現在は 1gb) を作成し、最初は順番に、次に多数のスレッド (device_matrix クラス内でホストされている) を使用してそれらを加算します。マシンが SMP であると仮定すると、コードのスピードアップが期待できます。また、私の Windows マシンでは、4 つの device_matrix インスタンスを使用すると、4 倍のスピードアップが見られます (デュアルコア ハイパースレッディング Intel Core2 CPU で 4 つのスレッドを指定)。Windows での出力は次のとおりです。
ただし、利用可能な Ubuntu マシンで同じコードをコンパイルすると、次の出力が表示されます。
ここでは、速度の向上は見られません (実際、かなり遅くなります)。
私が使用しているUbuntuマシンには、次のuname -a出力があります
hwinfo -short を実行すると、次の出力が得られます。
私はこれを 8 コア (まあ、HT を備えたクアッド コア) を持つマシンと読みました
次の行を使用して、Windows でプログラムをコンパイルしています。
Ubuntu では、次の行を使用します。
上記の行を実行したときの出力は、誰にでもわかるようにhttp://pastebin.com/Gj6W3pcsです。
私は Linux での開発に慣れていないので、何を探すべきかわかりません。実際の同時スレッドを取得するために、GCC に渡す必要があるフラグや、どこかで有効にする必要がある設定はありますか?
私は、boost::thread を使用したサンプル プログラムをネットで調べました。これにより、ベンチマークの対象となる可能性がありますが、「重い」ものを処理する必要のない小さなプロデューサー/コンシューマーの例しか見つかりません。
さらに、1 つのスレッドで time コマンドを使用すると、次の時間が得られます (boost::timer が不安定な場合に備えて)。
8 スレッドを使用すると、次のようになります。
とにかく、これはより速い実行を示しているようには見えません。
また、私は通常のユーザー アカウントを使用しており、自分自身でブーストを構築したことにも言及する必要があります (したがって、Linux でこの目的のために「通常の」フォルダーの外でブーストをリンクしています)。何をインストールできるかなど、スレッドに何らかの形で適用される同様の制限はありますか?
multithreading - ネットワーク接続を扱うときにマルチコアを利用する方法はありますか?
ネットワーク プログラミングを行う場合、マルチプロセス、マルチスレッド、または選択/ポーリング (epoll) を使用していても、同じポートで接続を受け入れるプロセス/スレッドは 1 つしかありません。また、マルチコアを利用したい場合は、ワーカー プロセス/スレッドを作成する必要があります。しかし、境界はネットワーク接続を扱っているのでしょうか? ネットワーク接続を扱うときにマルチコアを利用する方法はありますか?
いくつかの資料を見つけました。そして、これを完成させるのは難しいようです。スリーウェイ ハンド シェイクは、カーネルによって暗黙的に行われます。また、smp 構造では、オペレーティング システムはいくつかのクリティカル ゾーンに分割されます。同じクリティカル ゾーンを複数のコアで同時に実行することはできません。
cloud - 大容量の RAM 要件とクラスター/クラウド
これは実際にはバイオインフォマティクスの問題ですが、できる限り一般的なものにします。半仮説的な状況は次のとおりです。
クラスターやクラウドにさえアクセスできるとしましょう。このクラスター/クラウドでいくつかの非常に特定のプログラムを実行したいと考えています (正確には、ゲノム/トランスクリプトーム アセンブリ プログラム)。問題は、これらのプログラム (Velvet/Oases、Trinity など) が大量の RAM (控えめに言っても 100 GB 以上) を必要とし、クラスター/クラウドの最大ノードが 32 GB しかないと予想していることです。
MPI/Hadoop ベースのプログラム (ABySS など) に切り替えるか、独自のプログラムを作成するか、新しいコンピューターを購入する以外に、実行可能なオプションは何ですか? クラスター/クラウドの複数のノードで共有メモリを使用して分散オペレーティング システム (MOSIX、Kerrighed など) を使用しようとした人はいますか? 仮想 SMP はどうですか? ほかに何か?
助けてくれてありがとう!
明確化のために編集: 上記のプログラム (Velvet/Oases および Trinity) には、大きな RAM プールを備えた単一のシステムが必要であるとしましょう。一言で言えば、単一のプロセスが単一のシステムのようにすべてのノードからすべての RAM にアクセスできる 1 つの仮想スーパーノードに多数のノードをまとめて「貼り付ける」実行可能な方法を探しています。このようなものはおそらくパフォーマンスにかなりの影響を与えることを知っていますが、必ずしも効率的ではない可能性のあるものを探しています。
ps私の用語が混乱を招いている場合は申し訳ありません。私はこれの多くに少し慣れていません。
linux - アフィニティマスクを使用する以外に、Linuxでスレッドアフィニティを見つける方法は?
SMP Linux(2.6.18)を実行する組み込みMIPS2コアプロセッサがあります。
メインGUIスレッドのアフィニティを2つのコアの一方に割り当て、もう一方のコアをドライバー/データパス処理に使用することを計画しています。
ただし、どのスレッドがどのコアにあるかをどのように判断するのかという質問があります。
アフィニティマスクは問題なく取得できますが、どのスレッドがどのコアにあるかを判断する他の方法(/ procシステムなど)はありますか?
ありがとう。
linux - LinuxはハイパースレッディングコアIDを見つけます
私は今朝、どのプロセッサIDがハイパースレッドコアであるかを判断する方法を見つけようとして過ごしましたが、運がありませんでした。
set_affinity()
この情報を見つけて、プロセスをハイパースレッドスレッドまたは非ハイパースレッドスレッドにバインドして、そのパフォーマンスのプロファイルを作成するために使用したいと思います。
synchronization - 異なるプロセッサの 2 つのプロセスがまったく同時にロックを取得しようとするとどうなりますか
わかりましたので、同期について読んでいます。競合状態を回避するために、スピンロック、セマフォ、ミューテックスなどのさまざまなアルゴリズムを読みました。
ただし、これらのアルゴリズムでは、複数のプロセスがまったく同時にデータにアクセスする場合、SMP の競合状態を防ぐことはできません。
たとえば、プロセッサ A のスレッド 1 が lock(mutex1); を実行するとします。撤回(1000); ロックを解除 (mutex1);
プロセッサ B のスレッド 2 は lock(mutex1) を実行します。預金(1000); 預金(1000); ロックを解除 (mutex1);
両方のスレッドが正確に同時に実行される場合、両方のスレッドが同時にクリティカル セクションになります。
唯一の解決策 (ハードウェア レベルである必要があります) は、各プロセッサを互いに少しずらして実行することですが、並列処理の目的を無効にします。
複数のプロセッサがまったく同時にロックを取得しようとする状況を回避するためのハードウェア レベルのサポートはありますか?
(これはアトミック性の問題ではなく、正確な並列性の問題であり、SMP がそれをどのように処理するのか疑問に思います)。
multithreading - マルチスレッドアプリケーションと比較して、マルチプロセスシステムの予想されるオーバーヘッドはどれくらいですか?
一部のオペレーティングシステム(OpenBSDなど)では、スレッドはユーザーランドのみであり、ほとんどの場合、互換性のために存在します。そのタイプの実装を無視すると、カーネルレベルのスレッドの使用はマルチプロセス設計とどのように比較されますか?それぞれのセキュリティへの影響は何ですか?パフォーマンスはどうですか?開発の複雑さ?