3

main_parallel.pyというpythonスクリプトを使用しています。フォームmpi4pyを使用して時間を測定できますが、cProfile に似たプロファイルを作成するにはどうすればよいですか? コードの各部分の呼び出し回数を見るのが好きです。cProfile はシリアル コード専用なので使用できません。timecli

ありがとう!

4

2 に答える 2

5

Rob Lathamが言ったように、cProfile を使用できます。各プロセスからの出力を別のファイルに保存できます。関数をプロファイリングしたい場合は、次のようなデコレータを使用できます。

from mpi4py import MPI
import cProfile

def profile(filename=None, comm=MPI.COMM_WORLD):
  def prof_decorator(f):
    def wrap_f(*args, **kwargs):
      pr = cProfile.Profile()
      pr.enable()
      result = f(*args, **kwargs)
      pr.disable()

      if filename is None:
        pr.print_stats()
      else:
        filename_r = filename + ".{}".format(comm.rank)
        pr.dump_stats(filename_r)

      return result
    return wrap_f
  return prof_decorator

@profile(filename="profile_out")
def my_function():
  # do something

各プロセスの出力は、snakevizを使用して視覚化できます

于 2016-08-25T09:10:09.677 に答える