4

私は、イメージを表すGPを生成しようとするGenetic Programmingプロジェクトに取り組んでいます。私のアプローチは、画像を別々の独立したセクションに分割し、別々のスレッドを使って画像を展開することです。JGAPでマルチスレッドを使用することに関して、私が知っておくべき「悩み」がありますか?

物事は非同期になるので、自然にオブジェクトを独立させたいと思っています。問題は、JGAPの特定のオブジェクトが実際に共有変数であることに気がついたため、スレッド間で共有されることになり、多くの問題が発生します。たとえば、同じ名前のVariablesがすべて同じであることに気づきました。つまり、複数のIGPプログラムを同時に評価したい場合は、変数をロックする必要があり、パフォーマンスが大幅に低下する可能性があります。

また、複数のGPConfigurationを作成しようとすると、プログラムを最初にリセットする必要があることに気付きました。だから、これは私にはすべてのGPConfigurationsが共有されているようです(つまり、複数のスレッドで同時に複数の構成を作成することはできません)。これは、GPProblemsの作成に時間がかかり、GPProblems作業を複数のスレッドに分割する時間を短縮することを望んでいました。

JGAPとスレッドを扱う際に知っておく必要がある「問題」がありますか?残念ながら、JGAPのドキュメントではマルチスレッドにはあまり触れられていないので、JGAPを経験したことのある人からアドバイスを受けたいと思っていました。

答えて

2

いくつかの変数をスレッド間で共有しないようにするには、コードをマルチスレッドに対応させるために小さな変更を加えます。私はJGAPと私のプロジェクトに取り組んでいたと私はので、私は非常によく覚えていない月以来それを終えましたが、一般的に、私はいくつかを見つけたので、それは今しばらくしているThreadLocal.

When and how should I use a ThreadLocal variable?

+0

ありがとう、これは非常に有用な情報ですが、JGAPで作業していたのはずいぶん前に終わっていますが、将来はマルチスレッドで使用すると良いでしょう。 – 9a3eedi

3

FAQによると、JGAPは「マルチスレッド計算をサポートしています」。ただし、これはAPI /オブジェクトグラフ全体がスレッドセーフであることを意味するものではありません。あなたが持っている問題を示すコードサンプルがありますか?私はあなたの質問を少し洗練させることなく、標準的な答えを得るつもりはないと思います。

JGAP distributionジップにexamples/src/examples/simpleBooleanThreadedというスレッドの例があります。

+0

を使用することができますマルチスレッドを妨害していた共有変数があります。私はそれらをロックするか、可能であればそれらをインスタンス化する方法を見つけました。それは多くのことで物事を遅くした。マルチスレッドの例を読むことは本当に助けになりました。 – 9a3eedi

関連する問題