Psyduck - 可達鴨 之 鴨力山大2


Server : LiteSpeed
System : Linux premium217.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User : alloknri ( 880)
PHP Version : 8.1.34
Disable Function : NONE
Directory :  /opt/alt/python313/include/python3.13/internal/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //opt/alt/python313/include/python3.13/internal/pycore_backoff.h
#ifndef Py_INTERNAL_BACKOFF_H
#define Py_INTERNAL_BACKOFF_H
#ifdef __cplusplus
extern "C" {
#endif

#ifndef Py_BUILD_CORE
#  error "this header requires Py_BUILD_CORE define"
#endif

#include <assert.h>
#include <stdbool.h>
#include <stdint.h>


typedef struct {
    union {
        struct {
            uint16_t backoff : 4;
            uint16_t value : 12;
        };
        uint16_t as_counter;  // For printf("%#x", ...)
    };
} _Py_BackoffCounter;


/* 16-bit countdown counters using exponential backoff.

   These are used by the adaptive specializer to count down until
   it is time to specialize an instruction. If specialization fails
   the counter is reset using exponential backoff.

   Another use is for the Tier 2 optimizer to decide when to create
   a new Tier 2 trace (executor). Again, exponential backoff is used.

   The 16-bit counter is structured as a 12-bit unsigned 'value'
   and a 4-bit 'backoff' field. When resetting the counter, the
   backoff field is incremented (until it reaches a limit) and the
   value is set to a bit mask representing the value 2**backoff - 1.
   The maximum backoff is 12 (the number of value bits).

   There is an exceptional value which must not be updated, 0xFFFF.
*/

#define UNREACHABLE_BACKOFF 0xFFFF

static inline bool
is_unreachable_backoff_counter(_Py_BackoffCounter counter)
{
    return counter.as_counter == UNREACHABLE_BACKOFF;
}

static inline _Py_BackoffCounter
make_backoff_counter(uint16_t value, uint16_t backoff)
{
    assert(backoff <= 15);
    assert(value <= 0xFFF);
    _Py_BackoffCounter result;
    result.value = value;
    result.backoff = backoff;
    return result;
}

static inline _Py_BackoffCounter
forge_backoff_counter(uint16_t counter)
{
    _Py_BackoffCounter result;
    result.as_counter = counter;
    return result;
}

static inline _Py_BackoffCounter
restart_backoff_counter(_Py_BackoffCounter counter)
{
    assert(!is_unreachable_backoff_counter(counter));
    if (counter.backoff < 12) {
        return make_backoff_counter((1 << (counter.backoff + 1)) - 1, counter.backoff + 1);
    }
    else {
        return make_backoff_counter((1 << 12) - 1, 12);
    }
}

static inline _Py_BackoffCounter
pause_backoff_counter(_Py_BackoffCounter counter)
{
    return make_backoff_counter(counter.value | 1, counter.backoff);
}

static inline _Py_BackoffCounter
advance_backoff_counter(_Py_BackoffCounter counter)
{
    if (!is_unreachable_backoff_counter(counter)) {
        return make_backoff_counter((counter.value - 1) & 0xFFF, counter.backoff);
    }
    else {
        return counter;
    }
}

static inline bool
backoff_counter_triggers(_Py_BackoffCounter counter)
{
    return counter.value == 0;
}

/* Initial JUMP_BACKWARD counter.
 * This determines when we create a trace for a loop.
* Backoff sequence 16, 32, 64, 128, 256, 512, 1024, 2048, 4096. */
#define JUMP_BACKWARD_INITIAL_VALUE 16
#define JUMP_BACKWARD_INITIAL_BACKOFF 4
static inline _Py_BackoffCounter
initial_jump_backoff_counter(void)
{
    return make_backoff_counter(JUMP_BACKWARD_INITIAL_VALUE,
                                JUMP_BACKWARD_INITIAL_BACKOFF);
}

/* Initial exit temperature.
 * Must be larger than ADAPTIVE_COOLDOWN_VALUE,
 * otherwise when a side exit warms up we may construct
 * a new trace before the Tier 1 code has properly re-specialized.
 * Backoff sequence 64, 128, 256, 512, 1024, 2048, 4096. */
#define COLD_EXIT_INITIAL_VALUE 64
#define COLD_EXIT_INITIAL_BACKOFF 6

static inline _Py_BackoffCounter
initial_temperature_backoff_counter(void)
{
    return make_backoff_counter(COLD_EXIT_INITIAL_VALUE,
                                COLD_EXIT_INITIAL_BACKOFF);
}

/* Unreachable backoff counter. */
static inline _Py_BackoffCounter
initial_unreachable_backoff_counter(void)
{
    return forge_backoff_counter(UNREACHABLE_BACKOFF);
}

#ifdef __cplusplus
}
#endif
#endif /* !Py_INTERNAL_BACKOFF_H */
Name
Size
Permissions
Options
mimalloc
--
drwxr-xr-x
pycore_abstract.h
1.87 KB
-rw-r--r--
pycore_asdl.h
2.964 KB
-rw-r--r--
pycore_ast.h
30.781 KB
-rw-r--r--
pycore_ast_state.h
6.62 KB
-rw-r--r--
pycore_atexit.h
1.399 KB
-rw-r--r--
pycore_backoff.h
3.811 KB
-rw-r--r--
pycore_bitutils.h
5.885 KB
-rw-r--r--
pycore_blocks_output_buffer.h
8.566 KB
-rw-r--r--
pycore_brc.h
2.053 KB
-rw-r--r--
pycore_bytes_methods.h
3.841 KB
-rw-r--r--
pycore_bytesobject.h
4.979 KB
-rw-r--r--
pycore_call.h
5.991 KB
-rw-r--r--
pycore_capsule.h
0.388 KB
-rw-r--r--
pycore_cell.h
1.032 KB
-rw-r--r--
pycore_ceval.h
10.9 KB
-rw-r--r--
pycore_ceval_state.h
3.829 KB
-rw-r--r--
pycore_code.h
19.398 KB
-rw-r--r--
pycore_codecs.h
2.407 KB
-rw-r--r--
pycore_compile.h
3.662 KB
-rw-r--r--
pycore_complexobject.h
0.574 KB
-rw-r--r--
pycore_condvar.h
2.641 KB
-rw-r--r--
pycore_context.h
1.154 KB
-rw-r--r--
pycore_critical_section.h
7.781 KB
-rw-r--r--
pycore_crossinterp.h
11.844 KB
-rw-r--r--
pycore_descrobject.h
0.53 KB
-rw-r--r--
pycore_dict.h
11.977 KB
-rw-r--r--
pycore_dict_state.h
0.715 KB
-rw-r--r--
pycore_dtoa.h
1.687 KB
-rw-r--r--
pycore_emscripten_signal.h
0.669 KB
-rw-r--r--
pycore_emscripten_trampoline.h
3.105 KB
-rw-r--r--
pycore_exceptions.h
0.879 KB
-rw-r--r--
pycore_faulthandler.h
2.192 KB
-rw-r--r--
pycore_fileutils.h
9.246 KB
-rw-r--r--
pycore_fileutils_windows.h
2.649 KB
-rw-r--r--
pycore_floatobject.h
1.46 KB
-rw-r--r--
pycore_flowgraph.h
1.454 KB
-rw-r--r--
pycore_format.h
0.469 KB
-rw-r--r--
pycore_frame.h
10.62 KB
-rw-r--r--
pycore_freelist.h
4.697 KB
-rw-r--r--
pycore_function.h
1.502 KB
-rw-r--r--
pycore_gc.h
12.663 KB
-rw-r--r--
pycore_genobject.h
0.839 KB
-rw-r--r--
pycore_getopt.h
0.479 KB
-rw-r--r--
pycore_gil.h
2.145 KB
-rw-r--r--
pycore_global_objects.h
3.018 KB
-rw-r--r--
pycore_global_objects_fini_generated.h
115.043 KB
-rw-r--r--
pycore_global_strings.h
26.08 KB
-rw-r--r--
pycore_hamt.h
3.654 KB
-rw-r--r--
pycore_hashtable.h
4.259 KB
-rw-r--r--
pycore_identifier.h
0.503 KB
-rw-r--r--
pycore_import.h
7.55 KB
-rw-r--r--
pycore_importdl.h
3.96 KB
-rw-r--r--
pycore_initconfig.h
6.226 KB
-rw-r--r--
pycore_instruction_sequence.h
2.11 KB
-rw-r--r--
pycore_instruments.h
2.276 KB
-rw-r--r--
pycore_interp.h
14.71 KB
-rw-r--r--
pycore_intrinsics.h
1.715 KB
-rw-r--r--
pycore_jit.h
0.515 KB
-rw-r--r--
pycore_list.h
1.815 KB
-rw-r--r--
pycore_llist.h
2.363 KB
-rw-r--r--
pycore_lock.h
8.338 KB
-rw-r--r--
pycore_long.h
9.732 KB
-rw-r--r--
pycore_memoryobject.h
0.417 KB
-rw-r--r--
pycore_mimalloc.h
1.599 KB
-rw-r--r--
pycore_modsupport.h
3.272 KB
-rw-r--r--
pycore_moduleobject.h
1.535 KB
-rw-r--r--
pycore_namespace.h
0.425 KB
-rw-r--r--
pycore_object.h
27.28 KB
-rw-r--r--
pycore_object_alloc.h
2.125 KB
-rw-r--r--
pycore_object_stack.h
2.328 KB
-rw-r--r--
pycore_object_state.h
0.92 KB
-rw-r--r--
pycore_obmalloc.h
26.775 KB
-rw-r--r--
pycore_obmalloc_init.h
1.89 KB
-rw-r--r--
pycore_opcode_metadata.h
82.736 KB
-rw-r--r--
pycore_opcode_utils.h
2.072 KB
-rw-r--r--
pycore_optimizer.h
8.108 KB
-rw-r--r--
pycore_parking_lot.h
3.272 KB
-rw-r--r--
pycore_parser.h
2.04 KB
-rw-r--r--
pycore_pathconfig.h
0.643 KB
-rw-r--r--
pycore_pyarena.h
2.795 KB
-rw-r--r--
pycore_pyatomic_ft_wrappers.h
7.867 KB
-rw-r--r--
pycore_pybuffer.h
0.498 KB
-rw-r--r--
pycore_pyerrors.h
4.844 KB
-rw-r--r--
pycore_pyhash.h
2.747 KB
-rw-r--r--
pycore_pylifecycle.h
4.36 KB
-rw-r--r--
pycore_pymath.h
8.398 KB
-rw-r--r--
pycore_pymem.h
4.367 KB
-rw-r--r--
pycore_pymem_init.h
3.438 KB
-rw-r--r--
pycore_pystate.h
9.73 KB
-rw-r--r--
pycore_pystats.h
0.41 KB
-rw-r--r--
pycore_pythonrun.h
0.74 KB
-rw-r--r--
pycore_pythread.h
5.304 KB
-rw-r--r--
pycore_qsbr.h
4.812 KB
-rw-r--r--
pycore_range.h
0.338 KB
-rw-r--r--
pycore_runtime.h
12.856 KB
-rw-r--r--
pycore_runtime_init.h
12.739 KB
-rw-r--r--
pycore_runtime_init_generated.h
45.723 KB
-rw-r--r--
pycore_semaphore.h
1.69 KB
-rw-r--r--
pycore_setobject.h
0.929 KB
-rw-r--r--
pycore_signal.h
2.862 KB
-rw-r--r--
pycore_sliceobject.h
0.36 KB
-rw-r--r--
pycore_stackref.h
5.064 KB
-rw-r--r--
pycore_strhex.h
0.989 KB
-rw-r--r--
pycore_structseq.h
0.94 KB
-rw-r--r--
pycore_symtable.h
8.468 KB
-rw-r--r--
pycore_sysmodule.h
1.149 KB
-rw-r--r--
pycore_time.h
11.518 KB
-rw-r--r--
pycore_token.h
2.931 KB
-rw-r--r--
pycore_traceback.h
3.544 KB
-rw-r--r--
pycore_tracemalloc.h
4.427 KB
-rw-r--r--
pycore_tstate.h
1.322 KB
-rw-r--r--
pycore_tuple.h
0.801 KB
-rw-r--r--
pycore_typeobject.h
8.669 KB
-rw-r--r--
pycore_typevarobject.h
0.902 KB
-rw-r--r--
pycore_ucnhash.h
0.936 KB
-rw-r--r--
pycore_unicodeobject.h
12.959 KB
-rw-r--r--
pycore_unicodeobject_generated.h
129.043 KB
-rw-r--r--
pycore_unionobject.h
0.725 KB
-rw-r--r--
pycore_uop_ids.h
10.026 KB
-rw-r--r--
pycore_uop_metadata.h
38.544 KB
-rw-r--r--
pycore_warnings.h
0.82 KB
-rw-r--r--
pycore_weakref.h
3.253 KB
-rw-r--r--