ArcGISでマルチコア処理を最適化する方法


12

デスクトップコンピューターで利用可能なマルチコア処理能力を最大限に活用するための学習方法に興味があります。Arcは、ユーザーがバックグラウンドジオプロセシングで複数のコアを利用できると述べていますが、タスクは基本的に前のタスクが完了するまで待機する必要があります。

Arc / Pythonで並列またはマルチスレッドのジオプロセシング手法を開発した人はいますか?個々のタスクでマルチコア処理を妨げるハードウェアのボトルネックはありますか?

Stackoverflowで興味深い例が見つかりましたが、これはジオプロセシングの例ではありませんが、興味を惹きました。

from multiprocessing import Pool
import numpy

numToFactor = 976

def isFactor(x):
    result = None
    div = (numToFactor / x)
    if div*x == numToFactor:
        result = (x,div)
    return result

if __name__ == '__main__':
    pool = Pool(processes=4)
    possibleFactors = range(1,int(numpy.floor(numpy.sqrt(numToFactor)))+1)
    print 'Checking ', possibleFactors
    result = pool.map(isFactor, possibleFactors)
    cleaned = [x for x in result if not x is None]
    print 'Factors are', cleaned

1
私のArcの経験では、1)データを{コアの数}チャンクに分割し、処理して再組み立てするか、2)すべてをメモリに読み込み、x APIにスレッド処理を任せるかのいずれかです。それに注意してくださいthis is not meant to discourage
valveLondon

ありがとう、valveLondon。おそらく、より新しいIvy BridgeテクノロジーとKepler GPUにより、より洗練された処理アプローチが可能になります。
アーロン

ESRI分析およびジオプロセシングチームのプロダクトエンジニアによる、Pythonマルチプロセッシングに関する便利なブログへのリンクを次に示します。 blogs.esri.com/esri/arcgis/2011/08/29/multiprocessing
アーロン

回答:



11

私の経験では、最大の問題は安定性の管理です。1泊で6週間の処理を行うと、6週間の不可解なエラーとバグも発生します。

別のアプローチは、独立して実行でき、問題を引き起こすことなく失敗するスタンドアロンスクリプトを開発することです。

  • 1つのコアが20分未満で処理できるチャンクにデータを分割します(タスク)。
  • 単一のタスクを処理でき、可能な限り単純な(作業者)スタンドアロンArcpyスクリプトを構築します。
  • タスクを実行するメカニズムを開発します。既存のpythonソリューションがたくさんあります。または、単純なキューを使用して独自のキューを作成できます。
  • いくつかのコードを記述して、タスクが完了したことを確認します。これは、出力ファイルが書き込まれたことを確認するのと同じくらい簡単です。
  • データをマージして戻します。

1
マルチプロセッシングモジュールの使用を含むこのアプローチは良いアプローチであることがわかりました。空間分析などの一部の拡張機能は、同じ関数の複数のコピーを同時に実行している場合、あまりうまく機能しません。ユーザーが制御する形式のキューイングを許可する(つまり、これらのタスクを同時にスケジュールすることを回避するか、ファイルロックの理由で同じジオデータベースを一度に使用することを回避する)ことをお勧めします。
ニックサン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.