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)

루프가 컴파일될 때마다 호출될 컴파일링 훅을 설정합니다.

호출 가능 객체(callable)는 pypyjit.JitLoopInfo 객체와 함께 호출됩니다. 자세한 내용은 해당 문서를 참조하십시오.

JIT 훅(hook)은 재진입(reentrant)이 불가능하다는 점에 유의합니다. 이는 JIT 훅 내부의 코드가 그 자체로 JIT화(JIT-compiled)되어 있다면 해당 코드는 컴파일되지만, 그 코드에 대해서는 JIT 훅이 호출되지 않는다는 것을 의미합니다.

operations=False인 경우, 오퍼레이션 목록을 사용할 수 없습니다. 훅이 매우 가벼워야 할 때 유용합니다.

set_abort_hook(hook)

어떤 이유로든 트레이싱이 중단될 때마다 호출될 훅(콜러블)을 설정합니다.

훅은 다음 시그니처로 호출됩니다: hook(jitdriver_name, greenkey, reason, oplist)

Reason는 문자열이며, 다른 인자들의 의미는 JitLoopInfo 객체의 속성과 동일합니다

set_trace_too_long_hook(hook)

트레이스가 너무 길어서 트레이싱을 중단할 때마다 호출될 훅(callable)을 설정합니다.

이 훅(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 부동소수점 카운터로, 특히 TRACING과 JIT BACKEND에서 소요된 시간을 나타냅니다.
  • loop_run_times는 루프가 실행된 횟수를 세는 카운터이며, enable_debug가 호출된 경우에만 작동합니다.
class JitLoopInfo

컴파일된 루프에 대한 정보를 담고 있는 클래스입니다. 사용 가능한 속성:

  • operations - 요청된 경우 연산(operation) 목록
  • jitdriver_name - 이 루프와 연관된 jitdriver의 이름
  • greenkey - 루프가 컴파일된 지점을 나타내는 키(예: 코드 위치, is_being_profiled, 파이썬 jitdriver의 pycode 튜플)
  • loop_no - 루프 일련번호
  • bridge_no- fail descr의 id
  • type - “entry bridge”, “loop” 또는 “bridge”
  • asmaddr - 어셈블러가 위치한 원시 메모리의 주소
  • asmlen - 어셈블러가 연결된 원시 메모리의 길이

JIT 재설정

releaseall()

현재 모든 머신 코드 객체를 해제 준비 상태로 표시합니다. 다음 GC 시점에 해제됩니다(스레드 중 하나의 스택에서 현재 사용 중이지 않는 한). pypyjit.releaseall(); gc.collect()를 실행하는 것은 JIT를 대략 새로 시작된 PyPy 상태로 강제로 되돌리는 강력한 수단입니다.

set_param(*args, **keywords)

조정 가능한 JIT 매개변수를 설정합니다. 매개변수 이름은 Jit Help에 나열되어 있습니다:

  • set_param(name=value, ...)를 키워드 인자로 사용
  • 사용자가 제공하는 문자열 형태의 set_param("name=value,name=value")
  • set_param("off")는 JIT를 비활성화합니다
  • set_param("default")는 모든 기본값을 복원합니다