0

Pythonで実装し、複数のコアを利用したい単純なmap-reduceタイプのアルゴリズムがあります。

2.6 のネイティブ スレッド モジュールを使用するスレッドは複数のコアを使用しないことをどこかで読みました。本当?

スタックレス python を使用して実装しましたが、奇妙なエラーが発生しています [更新: クイック検索で、スタック レスでは複数のコアが許可されないことがわかりました。他の代替手段はありますか?]

def Propagate(start,end):
print "running Thread with range: ",start,end
def maxVote(nLabels):
    count = {}
    maxList = []
    maxCount = 0
    for nLabel in nLabels:
        if nLabel in count:
            count[nLabel] += 1
        else:
            count[nLabel] = 1
    #Check if the count is max
        if count[nLabel] > maxCount:
            maxCount = count[nLabel];
            maxList = [nLabel,]
        elif count[nLabel]==maxCount:
            maxList.append(nLabel)
    return random.choice(maxList)        

for num in range(start,end):
    node=MapList[num]
    nLabels = [Label[k] for k in Adj[node]]
    if (nLabels!=[]):
        Label[node] = maxVote(nLabels)
    else:
        Label[node]=node

ただし、上記のコードでは、ラベルに割り当てられた値、つまり辞書の変更が失われます。

上記の伝播関数は、MicroThreads (つまり、TaskLets) の呼び出し可能として使用されます。

4

1 に答える 1

1

標準ライブラリのマルチプロセッシングモジュールを使用します。モジュールのインターフェイスを模倣しthreading(既存のマルチスレッド コードの移植を容易にするため)、すべてのコアを完全に使用できます。スレッド化とスタックレスはどちらもシングルコアです (実際、スタックレスはプリエンプティブではないため、スレッド化やマルチプロセッシングのプログラミングとはまったく異なります)。

于 2010-05-25T03:00:56.950 に答える