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