0

並行して実行すると、サブグループのパラメーターに接続できますが、サブグループの未知数を接続できませんParallelGroup()。問題の原因となっているコード (わかりやすくするために名前を変更しています) を以下に示します。このコードは、より大きな構造のグループ内にありますが、MPI が使用されている唯一の場所です。

for i in range(0, nTasks):
        self.connect('comp_a.output%i' % i, 'parallel_group.sub_group%i.param_a' % i)
        self.connect('input_param%i' % i, 'parallel_group.sub_group%i.param_b' % i)
        self.connect('parallel_group.sub_group%i.output' % i, 'comp_b.input%i' % i)

最初の 2 つの接続は正常に動作しているように見えますが、最後の接続ではエラーがスローされます。

NameError: Source 'parallel_group.sub_group0.output' cannot be connected to target 'comb_b.input0': 'parallel_group.sub_group0.output' does not exist.

また、問題のある行をコメントアウトすると、ループの最初の行が 2 番目のプロセスで失敗し、同じエラー メッセージが表示されます。

NameError: Source 'comp_a.output1' cannot be connected to target 'parallel_group.sub_group1.param_a': 'parallel_group.sub_group1.param_a' does not exist.

シリアル バージョンのコードでは、すべての接続が正常に機能します。シリアル バージョンは、sub_groups がラップされるのではなく、このコードが含まれるグループに直接追加されることを除いて同じですparallel_group

チュートリアルと例を調べてみましたが、何が問題なのかわかりませんでした。何を確認すべきか、または何が間違っている可能性があるかについての提案をいただければ幸いです。完全なコード サンプルを投稿できなくて申し訳ありません。

4

1 に答える 1

1

少しわかりにくいですが、並列バージョンのコードに「parallel_group」という名前の新しいグループを追加したようです。これを行ったとき、そのグループから何か (またはすべて) を宣伝しましたか? その場合、並列グループを接続の変数名パスに追加しないでください。

それがあなたをつまずかせる可能性のある唯一のことのようです。ここに投稿できる問題を示すサンプルコードを思いつくことができれば、もう少しデバッグを試みることができます。

于 2015-12-08T23:01:21.177 に答える