問題タブ [barrier]

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.

0 投票する
1 に答える
111 参照

java - Java Thread.suspend の正確なセマンティック

この質問は、Thread.suspend の代替案に関するものではありません。これは、Thread.suspend を使用してバイアス ロックを実装する可能性に関するものです。これは、Thread.interrupt または同様の代替手段では実装できない (と私は信じています)。

Thread.suspend が非推奨であることは知っています。

しかし、Thread.suspend の正確なセマンティクスを知りたいです。

thread1.suspend() を呼び出すと、thread1 が完全に停止するまでブロックされることが保証されますか? thread1.resume() を呼び出した場合、この呼び出しは他のスレッドに順不同で表示されますか?

さらに、スレッドの中断に成功した場合、このスレッドはある程度安全な時点で中断されますか? その中間状態を確認できますか (Java は適切に同期されていないプログラムでも薄い空気の値を禁止しているため、これが許可されているとは思いません)、それとも異常な状態を確認しますか (サスペンドが非同期要求である場合は、確実に確認できます)そういうこと)?

Java 内におもちゃの非対称ロック (HotSpot の BiasedLock など) を実装したいので、これらを知りたいです。Thread.suspend を使用すると、ストアの負荷バリアなしで Dekker のようなロックを実装できます (そして負担をまれなパスに移すことができます)。私の実験では動作することが示されていますが、Thread.sleep はリモート コンテキスト スイッチを待機するのに十分であるため、これが保証された動作であるかどうかはわかりません。

ところで、リモート バリアを強制 (または検出) する他の方法はありますか? たとえば、Web を検索すると、FlushProcessWriteBuffers を使用したり、アフィニティを変更してスレッドを各コアにバインドしたりする人がいます。これらのトリックは Java 内で実行できますか?

編集

私はアイデアを思いつきました。少なくとも 2 つのスレッドしかない場合は、GC とファイナライザーを使用してバイアス付きロックを実装できるかもしれません。残念ながら、遅いパスでは明示的な gc() 呼び出しが必要になる場合がありますが、これは実際には実用的ではありません。

GC が正確でないと、デッドロックが発生する可能性があります。GC があまりにもスマートで、参照を無効にする前にオブジェクトを収集する場合 (おそらく、コンパイラはスタック変数を再利用できますが、コンパイラは取得フェンスとロード フェンスを無視して、ヒープ変数に対してこの種のことを実行できますか?)、破損したデータになってしまいます。

編集

オプティマイザーがオブジェクトの最後の参照を上に移動するのを防ぐために、いわゆる「到達可能性フェンス」が必要なようです。残念ながらどこにもありません。

0 投票する
1 に答える
122 参照

parallel-processing - ブロック内の最大値を見つける OpenCL バリア

Nvidia の開発者サイトで OpenCL カーネル サンプル コードの一部を見つけました。目的の関数maxOneBlockは、配列の最大値を見つけてmaxValuemaxValue[0] に格納することです。

ループ部分については完全に理解していましたが、unroll次の部分については混乱していました。各ステップが完了した後にアンロール部分でスレッドを同期する必要がないのはなぜですか?

例: 1 つのスレッドが localId と localId+32 の比較を行った場合、他のスレッドがその結果を localId+16 に保存したことをどのように確認しますか?

カーネルコード:

0 投票する
1 に答える
2448 参照

openmp - omp バリアがブロックしている

私はコードをもっている:

そして出力:

2 を 8 に変更すると、機能します。しかし、for ループに 2 が必要です。

ループの前に omp_set_num_threads(2) を使用せずにコードを機能させる方法は? (これを入れても動作します)

0 投票する
1 に答える
1715 参照

algorithm - Matlab のバリア関数

Matlab のバリア関数の実装はどこにありますか? アルゴリズムinterior-pointがどのように実装されているかを確認しようとしていますが、これが最後に見つけたものですfmincon.m

だから私は障壁に何が失敗したかを見たいです。

私が得た: ここに画像の説明を入力

0 投票する
1 に答える
237 参照

ios - migratePersistentStore と同時に実行される te​​mporaryContext を防ぐ方法

呼び出すコード部分があり、同時に何かを実行migratePersistentStoreできないようにしたいのですが、どうすればよいですか?temporaryContext

semaphore私の考えは aと aに基づいていdispatch_groupます。

コード A:

コード B:

あなたはそれについてどう思いますか?何か良い解決策はありますか?dispatch_barrier_asyncこの場合、利用は可能ですか?

0 投票する
1 に答える
681 参照

c++ - MPI コードは 2 つのノードでは機能しませんが、1 つのノードでは機能します

スーパー編集:

ブロードキャスト ステップを追加するとncols、マスター ノードによって 2 つのプロセスによって出力されるようになります (そこから出力を確認できます)。しかし、なぜ?つまり、ブロードキャストされるすべての変数には、宣言の行にすでに値があります!!! (トピック外の画像)。


この例に基づいたコードがいくつかあります。

この単純なプログラムを使用して、クラスター構成が問題ないことを確認しました。このプログラムは、実行されるマシンの IPも出力しました。

これにより、すべてのマシンの IP が 2 回出力されました。


EDIT_2

例のようにグリッド (のみ) を印刷すると、1 台のコンピューターに対して取得されます。

そして2つの場合:

0 投票する
1 に答える
313 参照

scala - 複数ノードのバリア

プロセス間通信のバリアと同じ機能を取得しようとしていますが、現在は分散ノード用です。

私の問題は、ノード上に複数の分散プロセスがあることです。それらにはいくつかの非決定論的なセットアップがあり、セットアップ後に同時に実行を開始したいと考えています。

Scala でこれを行うための簡単なフレームワークはありますか?