1

すべてのノードに id (ノード番号)、子のリスト、負債インジケーターがあるノード ツリーがあります。次に、債務を見つけるノードのリストが与えられます。これを行うには、再帰関数を使用します。

これはすべて問題なくダンディですが、プロセスをスピードアップしたいと思います。マルチプロセッシングについて調べてみたのですが、他のプロセスをまったく使わない場合に比べて、実行するたびに計算時間が増えます (プロセス数が多いほど、実行時間が長くなります)。

私のコードは、多くの異なる例を理解しようとしているがらくたのように見えるので、代わりにこの疑似コードを投稿してください。

class Node:
    id = int
    children = int[]
    debth = int

function makeNodeTree() ...

function find(x, node):
    for c in node.children:
        if c.id == x: return c
        else:
            if find(x, c) != None: return result
    return None

function main():
    search = [nodeid, nodeid, nodeid...]

    timerstart
    for x in search: find(x, rootNode)
    timerstop

    timerstart
    <split list over number of processes>
    <do some multiprocess magic>
    <get results>
    timerstop

    compare the two

あらゆる種類のツリーサイズを試して、利益があるかどうかを確認しましたが、そのようなケースをまだ見つけていないため、何か間違ったことをしていると思います。私が求めているのは、マルチプロセッシングを使用して、パフォーマンスを向上させてこのトラバーサルを行う例/方法だと思います。

このタスクを簡単にするためにノードを整理する方法がたくさんあることは知っていますが、可能であれば (?) パフォーマンスの向上を確認したいと思います。

4

1 に答える 1

0

プロセスを追加するたびにセットアップに時間がかかるため、マルチプロセッシングにはオーバーヘッドがあります。また、標準の Python スレッドを使用している場合、すべてのスレッドが 1 つのプロセッサで実行されるため、速度が向上する可能性はほとんどありません。では、3 つの考え (1) は、スピードアップする必要があるほど大きなものですか? (2) spawn サブプロセス (3) 各ノードで並列処理を使用せず、オーバーヘッドを最小限に抑えるために上位のいくつかのレベルでのみ使用します。

于 2012-09-05T17:34:20.953 に答える