問題タブ [fork-join]

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 に答える
171 参照

java - フォークする必要がある場合、Java 7 ForkJoin がフリーズする

背景:私は脱出パニックのシミュレーションを実行しています。人々が部屋や建物の廊下などからどのように脱出するかです。人口が多い場合、各人がお互いから「社会的力」を計算する必要があるため (つまり、2000 人)、大量の計算が必要になります。 = 2000^2 計算)

コード:この計算を分割するために fork join メカニズムを実装しようとしました。"people" はクラス "Pedestrian" の配列リストです。シミュレーションの各人物は、このクラスのインスタンスです。これは、frok/join を実装した関数です。

人 (people.get(i)) ごとに、timeStepBridge 関数を呼び出します。この関数は、他のすべての人をループし、位置を読み取り、距離と力を計算します。

問題:人数がしきい値 (ここでは 300) 未満の場合、プログラムは問題なく実行されます。ただし、人数がしきい値を超えると、プログラムは java.lang.StackOverflowError をスローします。スタック サイズを増やしたところ、プログラムがフリーズして応答しなくなりました。

私はこれを数日間いじってみましたが、どこにも行けません。誰かがアイデアを持っているなら、私はそれを感謝します

0 投票する
2 に答える
509 参照

java - 再帰的なフォーク/ジョインで立ち往生

ポイントのセットを返すメソッドがあります。このメソッドの for ループ部分は、スレッドごとにポイントのセットを返す RecursiveTask に分割できると確信しています。

いろいろ試してみましたがだめでした。そこにJavaの天才はいますか?

私の既存の方法:

更新#1:

これを再帰タスクに分割しようとする試みは次のとおりです。エクステント 1 (27 ポイントに等しい) -1、0、+1、= 3 ポイント、3 の 3 乗 = 27 で問題なく動作するようです。たとえば、範囲 2 は 125 ポイントを返す必要があります。-2、-1、0、+1、+2 = 5 ポイント、5 キューブ = 125。

Main.java:

ForkPoints.java:

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

system-verilog - 「run()」タイプの関数と SystemC を使用した SystemVerilog fork/join

メモリ コントローラーの SystemVerilog モデルを SystemC に移植しようとしてrun()いますが、fork と join で生成された型の関数 (つまり、連続処理を行う永久ループ) を SystemC に変換する最良の方法は何か疑問に思っています。これらのrun()関数は通常、シミュレーションの開始時に生成されます。私の混乱は、SystemC がスポーン スレッド、フォーク、ジョインをサポートしていることですが、この言語の意図はSC_THREADこの種の機能を提供することだと思います。コメントするのに十分な両方の言語の経験がある人はいますか?

注:この質問は、技術的に正しいか間違っているかという解決策よりも、慣例に関係していると思います。おそらく、複数の方法で実行できます。

0 投票する
4 に答える
853 参照

java - Java ForkJoin マルチスレッドはシングルスレッドより遅い

私は Java ForkJoin フレームワークを試していて、画像のピクセルをランダムな色に設定する簡単なテスト プログラムを作成しました。たとえば、疑似ノイズを生成します。

しかし、パフォーマンスをテストしているときに、実際には複数のスレッドで実行するよりもシングル スレッドで実行する方が高速であることがわかりました。高いしきい値を渡すことで、シングル スレッドで実行します。

これはクラス ワーカー クラスです。

6000 * 6000 のイメージを生成すると、結果は次のように なり
ます

マルチスレッド バージョンが遅いのはなぜですか?
これを修正するにはどうすればよいですか?

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

java - Java Fork / Joinフレームワークでワークスティーリングが発生することをどのように示すことができますか?

私のfork/joinの小さな例を改善して、Java Fork/Joinフレームワークの実行中に作業の盗用が発生することを示したいと思います。

次のコードにどのような変更を加える必要がありますか?例の目的:複数のスレッド間で作業を分割する値の線形調査を行うだけです。

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

java - fork-join、compute()メソッドがしばらくするとクラッシュします

UDPソケットを開き、いくつかのUDPパケットを受信する小さなプログラムを作成しました。私が試したのは、各パケットがfork-joinを使用して独自のスレッドによって処理され(バイトの順序が変更され)、変更されたパケットがudpによって別のシステムに転送されることです。

コードは次のとおりです。

プログラムはコンパイルされて正常に実行されますが、約5分後に次のエラーメッセージが表示されて停止します。

CwStreamSwitcher.java:126は次のメソッド呼び出しです:protected void Compute(){

これを引き起こす原因は何ですか?

0 投票する
2 に答える
7897 参照

system-verilog - System Verilog fork の混乱、fork と begin の間で実行されるステートメント

ここで簡略化されたサンプル コードを参照してください。

私の混乱は、への呼び出しarr_obj1s[j].run()が決して返されないことです (それらは永遠にループを実行します)。そして、その呼び出しが begin/end ブロックの外側に配置されることの意味を完全には理解していません。永久run()に実行されるプロセスはどれですか?また、返されないawait()プロセスが実行されている場合、各呼び出しが返されるのはrun()どうしてでしょうか?

編集:ここにいくつかの詳細があります。完全なコードを投稿するとページとページになりますが、この余分なビットが役立つことを願っています.

obj1 のrun()関数は次のようになります。

例として、run_a基本的には次のようになります (すべて類似しています)。

しかし、obj2 のrun()関数は基本的に次のようになります。

例として、run_d()次のようになります。

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

java - Java ForkJoinPool の並列処理のレベルは?

ForkJoinPoolこの:のコンストラクターに出くわしたとき、Fork/Join フレームワークに関する Oracle ドキュメントを調べていましたForkJoinPool(int parallelism)。ドキュメントによると、これは並列処理のレベルであり、デフォルトでは利用可能なプロセッサの数に等しい. それを使用してプログラムの速度と効率を向上させる方法を誰か教えてもらえますか?

0 投票する
3 に答える
23392 参照

java - スレッド「メイン」の例外java.lang.OutOfMemoryError:EclipseのJavaヒープスペース

fork and join フレームワークを使用してこのプログラムを実行しようとしています。小さいサイズの JPEG 画像をこのプログラムにフィードすると正常に動作しますが、4 MB を超えるサイズの画像を与えると、以下の例外がスローされます。

私はEclipse Helios IDEを使用しています。

サイズが 50 MB を超える大きな画像でも機能するようにしたい

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

java - Javaの非フォークジョインエグゼキュータサービスにisQuiescentに相当するものはありますか?

ForkJoinとFixedSizeThreadPoolで問題の2つの実装を行い、それらのパフォーマンスを比較したいと思います。私の問題では、各タスクがいくつかのサブタスクを作成し、それらをエグゼキュータサービスに再度送信します。fork-joinの実装では、fork()を使用し、もう1つの実装ではexecute()を使用します。

明らかに、私のメインスレッドはすべての作業が終了するまで待つ必要があります。フォークジョインでは、isQuiescent()プロパティを適切にチェックして、すべてが終了したことを確認できますが、それ以外の場合は、作成したタスクの数と終了したタスクの数を手動で数える以外に何も考えられません。このソリューションは機能しますが、共有変数が犠牲になり、明らかにパフォーマンスが低下します。

サブタスクがスケジュールされないため、shutdown()を使用することはできません(RejectedExecutionExceptionが発生します)。

タスクを数えるよりも良い解決策を知っている人はいますか?