.. _jit-hooks: JIT 후크 ======== ``pypyjit`` 모듈에는 프로그램을 실행하는 동안 PyPy의 JIT가 무엇을 하고 있는지 이해하는 데 도움이 될 수 있는 여러 훅(hook)이 있습니다: .. function:: dont_trace_here(next_instr, is_being_profiled, pycode) .. function:: get_jitcell_at_key(next_instr, is_being_profiled, pycode) .. function:: get_stats_asmmemmgr() JIT 백엔드가 현재 사용 중인 원시 메모리(raw memory)를 (total_memory_allocated, memory_in_use) 쌍으로 반환합니다. .. function:: residual_call(callable, *args, **keywords) 테스트용입니다. callable(...)을 호출하지만, JIT가 그 호출을 따라가지 못하게 합니다. .. function:: set_compile_hook(callable, operations=True) 루프가 컴파일될 때마다 호출될 컴파일링 훅을 설정합니다. 호출 가능 객체(callable)는 ``pypyjit.JitLoopInfo`` 객체와 함께 호출됩니다. 자세한 내용은 해당 문서를 참조하십시오. JIT 훅(hook)은 재진입(reentrant)이 불가능하다는 점에 유의합니다. 이는 JIT 훅 내부의 코드가 그 자체로 JIT화(JIT-compiled)되어 있다면 해당 코드는 컴파일되지만, 그 코드에 대해서는 JIT 훅이 호출되지 않는다는 것을 의미합니다. operations=False인 경우, 오퍼레이션 목록을 사용할 수 없습니다. 훅이 매우 가벼워야 할 때 유용합니다. .. function:: set_abort_hook(hook) 어떤 이유로든 트레이싱\ 이 중단될 때마다 호출될 훅(콜러블)을 설정합니다. 훅은 다음 시그니처로 호출됩니다: ``hook(jitdriver_name, greenkey, reason, oplist)`` Reason\ 는 문자열이며, 다른 인자들의 의미는 JitLoopInfo 객체의 속성과 동일합니다 .. function:: set_trace_too_long_hook(hook) 트레이스가 너무 길어서 트레이싱을 중단할 때마다 호출될 훅(callable)을 설정합니다. 이 훅(hook)은 다음과 같은 시그니처로 호출됩니다: ``hook(jitdriver_name, greenkey)`` .. function:: enable_debug() ``get_stats_snapshot``\ 를 위한 디버깅 카운터 기록을 시작합니다 현재 비활성화되어 있습니다. .. function:: disable_debug() ``get_stats_snapshot``\ 에 대한 디버깅 카운터 기록 중지 현재\ 비활성화되어\ 있습니다. .. function:: 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 재설정 ========== .. function:: releaseall() 현재 모든 머신 코드 객체를 해제 준비 상태로 표시합니다. 다음 GC 시점에 해제됩니다(스레드 중 하나의 스택에서 현재 사용 중이지 않는 한). ``pypyjit.releaseall(); gc.collect()``\ 를 실행하는 것은 JIT를 대략 새로 시작된 PyPy 상태로 강제로 되돌리는 강력한 수단입니다. .. function:: set_param(*args, **keywords) 조정 가능한 JIT 매개변수를 설정합니다. 매개변수 이름은 :ref:`Jit Help`\ 에 나열되어 있습니다: * ``set_param(name=value, ...)``\ 를 키워드 인자로 사용 * 사용자가 제공하는 문자열 형태의 ``set_param("name=value,name=value")`` * ``set_param("off")``\ 는 JIT를 비활성화합니다 * ``set_param("default")``\ 는 모든 기본값을 복원합니다