JIT 훅¶
pypyjit 모듈에는 프로그램을 실행하는 동안 PyPy의 JIT가 무엇을 하는지 이해하는 데 도움이 될 만한 여러 훅(hook)이 있습니다:
-
dont_trace_here(next_instr, is_being_profiled, pycode)¶
-
get_jitcell_at_key(next_instr, is_being_profiled, pycode)¶
-
get_stats_asmmemmgr()¶ JIT 백엔드가 현재 사용 중인 원시 메모리(raw memory)를 (total_memory_allocated, memory_in_use) 쌍으로 반환합니다.
-
residual_call(callable, *args, **keywords)¶ 테스트용입니다. callable(…)을 호출하지만, JIT가 그 호출을 따라가지 못하게 합니다.
-
set_compile_hook(callable, operations=True)¶ 루프가 컴파일될 때마다 호출될 컴파일 훅을 설정합니다.
이 호출 가능 객체는
pypyjit.JitLoopInfo객체를 인자로 받아 호출됩니다. 자세한 내용은 해당 객체의 문서를 참조하십시오.JIT 훅은 재진입이 불가능하다는 점에 유의하십시오. 즉, JIT 훅 내부의 코드 자체가 JIT 컴파일되는 경우 그 코드는 컴파일되지만, 이에 대해서는 JIT 훅이 호출되지 않습니다.
operations=False이면 연산 목록을 사용할 수 없습니다. 훅이 매우 가벼워야 하는 경우에 유용합니다.
-
set_abort_hook(hook)¶ 어떤 이유로든 트레이싱이 중단될 때마다 호출될 훅(callable)을 설정합니다.
훅은 다음 시그니처로 호출됩니다:
hook(jitdriver_name, greenkey, reason, oplist)reason은 문자열이며, 다른 인자들의 의미는 JitLoopInfo 객체의 속성과 같습니다
-
set_trace_too_long_hook(hook)¶ 트레이스가 너무 길어서 트레이싱을 중단할 때마다 호출될 훅(호출 가능 객체)을 설정합니다.
이 훅은 다음 시그니처로 호출됩니다:
hook(jitdriver_name, greenkey)
-
enable_debug()¶ get_stats_snapshot에서 사용할 디버깅 카운터의 기록을 시작합니다현재 비활성화되어 있습니다.
-
disable_debug()¶ get_stats_snapshot용 디버깅 카운터 기록을 중단합니다현재 비활성화되어 있습니다.
-
get_stats_snapshot()¶ 특정 시점의 JIT 상태를 가져옵니다. 이 함수는 즉시(eager) 평가된다는 점에 유의하십시오. 속성 접근은 지연(lazy)되지 않으므로 새로운 통계가 필요하면 이 함수를 다시 호출해야 합니다. 더 많은 정보를 얻으려면
enable_debug를 호출하는 것이 좋습니다.JitInfoSnapshot의 인스턴스를 반환합니다.
-
class
JitInfoSnapshot¶ 현재 스냅숏을 나타내는 클래스입니다. 사용할 수 있는 속성은 다음과 같습니다:
counters- 내부 JIT 정수 카운터counter_times- 내부 JIT float 카운터로, 특히 트레이싱과 JIT 백엔드에서 소요된 시간을 나타냅니다loop_run_times- 루프가 실행된 횟수를 세는 카운터입니다.enable_debug가 호출된 경우에만 작동합니다.
-
class
JitLoopInfo¶ 컴파일된 루프에 대한 정보를 담고 있는 클래스입니다. 사용할 수 있는 속성은 다음과 같습니다:
operations- 요청한 경우 반환되는 연산 목록입니다jitdriver_name- 이 루프와 연관된 jitdriver의 이름greenkey- 루프가 컴파일된 지점을 나타내는 키(예: 코드 위치, is_being_profiled, python jitdriver의 경우 pycode 튜플)loop_no- 루프 일련번호bridge_no- fail descr의 idtype- “진입 브리지(entry bridge)”, “루프” 또는 “브리지(bridge)”asmaddr- 어셈블러 코드가 위치한 원시(raw) 메모리상의 주소asmlen- 어셈블러 코드가 연결된 원시 메모리의 길이