問題タブ [shared-memory]
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.
multithreading - 共有メモリ コンピューター上のマルチスレッド FFTW 3.1.2
Fortran でFFTW 3.1.2を使用して、実数から複素数、および複素数から実数の FFT を実行します。1つのスレッドで完全に機能します。
残念ながら、32 CPU 共有メモリ コンピュータでマルチスレッド FFTW を使用すると、いくつかの問題が発生します。9 つの実数から複素数への FFT 用と 9 つの複素数から実数への FFT (各実数フィールドのサイズ: 512*512) の 2 つの計画があります。私は Fortran を使用ifort
し、次のライブラリにリンクするコードを (を使用して)コンパイルします。
プログラムは正しくコンパイルされているようで、関数sfftw_init_threads
はゼロ以外の整数値 (通常は 65527) を返します。
ただし、プログラムは完全に実行されますが、スレッドが 1 つよりも 2 つ以上あると遅くなります。top
コマンドは、100% を超える (および n_threads*100 よりもはるかに大きい) 奇妙な CPU 負荷を示します。コマンドは、1 つのプロセッサ (番号 1 としましょう) がプログラムで 100% の負荷で動作しているhtop
ことを示していますが、番号 1 を含む他のすべてのプロセッサは、このまったく同じプログラムで、負荷 0%、メモリ 0% で動作しています。そして0回。
誰かがここで何が起こっているのか知っているなら...どうもありがとう!
c++ - C ++用の分散共有メモリライブラリ?
私はC++で分散アプリケーションフレームワークを書いています。要件の1つは、分散共有メモリの提供です。自分でゼロから書く(そして潜在的に車輪の再発明をする)のではなく、既存のオープンソースライブラリがあるかどうかを確認すると思いました。グーグルですばやく検索しても、何も役に立ちませんでした。
ここにいる誰かが、彼らが推奨できる優れたC ++ DSMライブラリの経験を持っていますか?
ライブラリはMRMW(複数のリーダー/複数のライター)をサポートするのが理想的ですが、必要に応じてMRSW(複数のリーダー、単一のライター)で対応できます。私はLinuxで開発しています。
c++ - 接続とそこからのデータを複数のプロセスと共有する最速の方法は?
それぞれがサーバーに接続し、サーバーからデータを受信する複数のアプリプロセスがあります。多くの場合、接続されているサーバーと取得されているデータはプロセス間で重複しています。そのため、ネットワーク全体でデータが不必要に重複し、必要以上の接続が発生し(サーバーに負担がかかります)、データがアプリのメモリに冗長的に保存されることになります。
1つの解決策は、複数のアプリプロセスを1つのプロセスに結合することですが、ほとんどの場合、それらは実際には論理的に異なり、何年もの作業になる可能性があります。
残念ながら、レイテンシーは非常に重要であり、データの量は膨大です(1つのデータはそれほど大きくない場合がありますが、クライアントがリクエストを行うと、サーバーはデータの変更に応じて更新の高速ストリームを送信します。 20MB /秒。これらはすべて、可能な限り最短の遅延で要求元のアプリに提供する必要があります)。
頭に浮かぶ解決策は、アプリプロセスがデータを要求するローカルデーモンプロセスをコーディングすることです。デーモンは、適切なサーバーへの接続がすでに存在するかどうかを確認し、存在しない場合は接続を確立します。次に、データを取得し、共有メモリを使用して(遅延の懸念があるため、それ以外の場合はソケットを使用します)、要求元のアプリにデータを渡します。
冗長な接続のみを解決する短期的な簡単なアイデアは、unixドメインソケット(これはunix OSで実行されますが、可能な場合はクロスプラットフォームライブラリに固執することを好みます)を使用して、すべてのプロセスなので、単一の接続を共有します。これに関する問題はバッファを消費することです-私はすべてのプロセスがソケットを介して来るすべてを見るようにしたいです、そして私がこのアプローチで正しく理解するならば、ソケットで1つのプロセスを読み込むと他のプロセスが彼らの同じデータを見るのを防ぎます次の読み取り(共有記述子内のオフセットがバンプされます)。
c++ - 共有メモリからのC++読み取り
アプリケーションが共有メモリを介して提供するステータス情報を読みたい。その名前付き共有メモリのコンテンツを読み取り、C#クラスからpinvokeで呼び出すために、C++を使用したいと思います。
ソフトウェアから、私はそれが特定のファイル構造を持っていることを知っています:STATUS_DATA
の4つの構造体の配列を持つ構造体SYSTEM_CHARACTERISTICS
。
私は(まだ)C ++に精通していないので、基本的にmsdnをフォローしようとしました。マップするファイルのサイズを見つけるために、以下のコードに示されているように、構造体メンバーのサイズを追加しました。これにより、アクセスが拒否されたため、構造体に基づく結果が高すぎると考えました。使用するとsizeof(STATUS_DATA)
(ソースに構造体を追加しました)、それでもACCESSDENIEDになります。1024バイトなど、もっと低いものを試してみると、デバッグ中に表示されるpbuf
のは、だけです。<
これは私がこれまでに得たものです:
また、そのヒントに従うことで、この共有メモリが「存在する」ことを確認しました。誰かが私にヒントを教えてもらえますか、私が欠けているものは何ですか?ありがとう!
multithreading - アトミック操作は、スレッド間で行うのと同じようにプロセス間で機能しますか?
明らかに、アトミック操作により、異なるスレッドが値を上書きしないことが保証されます。しかし、共有メモリを使用する場合、これはプロセス間でも当てはまりますか? プロセスがOSによって異なるコアで実行されるようにスケジュールされている場合でも? それとも、異なる異なる CPU 間ですか?
編集:また、安全でない場合は、スケジューラの観点からプロセスとスレッドが同じであるLinuxのようなオペレーティングシステムでも安全ではありませんか?
c++ - 原因不明の Linux System V IPC 共有メモリ セグメントが破棄対象としてマークされる
Linux System V IPC 共有メモリ セグメントがあり、1 つのプロセスによって読み込まれ、他の多くのプロセスによって読み取られます。すべてのプロセスは、コンストラクタ/デストラクタ メソッドの一部としてセグメントのルックアップ、アタッチ、およびデタッチを処理するクラスの形式で、共有メモリ セグメントへのインターフェイスを使用します。
ここでの問題は、セグメントが「分割」されていることがときどき見られることです。ここで言いたいのは、「ipcs -m -s」の出力を見ると、2 つのセグメントがリストされていることがわかるということです。セグメントにアタッチするためのすべての新しい試みを取得します。ただし、カーネルにセグメントの破棄を実際に要求しているわけではありません。ここで何が起こっているのですか?!
注意すべきもう 1 つのことは、残念ながら、これが実行されているシステムは、メモリ部門で深刻にオーバーコミットされていることです。1 GB の物理メモリがあり、スワップはなく、/proc/meminfo の Committed_AS は約 2.5 GB のコミット済みメモリを報告しています。幸いなことに、システム プロセスは実際にはこれほど多くのメモリを使用していません...単に要求しているだけです (vmstat で報告されているように、まだ約 660MB の「空き」メモリがあります)。これが理想からかけ離れていることは承知していますが、当面の間、オーバーコミットされたメモリについて私にできることは何もありません。ただし、kernel/libc ソースを参照すると、ユーザーの要求以外の理由で共有メモリ セグメントを削除するようにマークするものは何も表示されません (ただし、どこかに隠されているのを見逃した可能性があります)。
参考までに、共有メモリ インターフェイス クラスのコンストラクタを次に示します。
Linux 2.6.18-5-686 #1 SMP Fri Jun 1 00:47:00 UTC 2007 i686 GNU/Linux
shared-memory - 共有メモリと分散メモリ、およびマルチスレッドとマルチプロセス
並列プログラミングを独学で学んでいます。分散メモリは常にマルチプロセスで、マルチスレッドは常に共有メモリなのだろうか? マルチプロセスが分散メモリと共有メモリの両方に使用できる場合は? よろしくお願いします!
winapi - Interlocked *機能は共有メモリで役立ちますか?
2つのWindowsプロセスには、同じ共有ファイルがメモリマップされています。ファイルがカウンターで構成されている場合、Interlocked*
関数(などInterlockedIncrement
)を使用してそれらのカウンターを更新するのは適切ですか?それらはプロセス間でアクセスを同期しますか?または、ミューテックスなど、より重いものを使用する必要がありますか?あるいは、共有メモリメカニズム自体が一貫したビューを保証するかもしれません。
c - Solaris 上の共有メモリ オブジェクトを名前別に一覧表示する
ipcs(1) を使用して、Solaris 10 ボックス上のアクティブな共有メモリ オブジェクトを一覧表示できますが、キーごとに一覧表示されます。ただし、shm_open(3) を介してオブジェクトを開いています。これは、オブジェクトを識別するための名前として文字列を取ります。共有メモリ オブジェクトを名前で一覧表示する方法、または単にキー <-> 名前のマッピングを取得する方法はありますか? コマンド ラインから実行するものに主に関心がありますが、これを行うための API も問題ありません。ありがとう!