# rawcpu [![CI](https://github.com/ImSavsis/rawcpu/actions/workflows/ci.yml/badge.svg)](https://github.com/ImSavsis/rawcpu/actions/workflows/ci.yml) [![Coverage](https://codecov.io/gh/ImSavsis/rawcpu/branch/master/graph/badge.svg)](https://codecov.io/gh/ImSavsis/rawcpu) [![pypi](https://img.shields.io/pypi/v/rawcpu.svg)](https://pypi.org/project/rawcpu/) [![downloads](https://img.shields.io/pypi/dm/rawcpu.svg)](https://pypi.org/project/rawcpu/) [![versions](https://img.shields.io/pypi/pyversions/rawcpu.svg)](https://pypi.org/project/rawcpu/) [![license](https://img.shields.io/github/license/ImSavsis/rawcpu.svg)](https://github.com/ImSavsis/rawcpu/blob/master/LICENSE) прямой доступ к инструкциям `CPUID`/`RDTSC` из питона — то, что нормально делает только C++, а чистый питон вообще никак. крошечная нативная dll под капотом + ctypes сверху, никакого Python C API. ```mermaid sequenceDiagram App->>rawcpu: cpuid(1) / rdtsc() rawcpu->>DLL: ctypes call DLL->>CPU: инструкция CPUID/RDTSC напрямую CPU-->>DLL: сырые регистры / счётчик тактов DLL-->>App: tuple(int) / int ``` ## установка ``` pip install rawcpu ``` пока только windows x64. ## юзать ```python import rawcpu print(rawcpu.vendor()) # 'GenuineIntel' / 'AuthenticAMD' print(rawcpu.brand()) # 'AMD Ryzen 9 ...' print(rawcpu.has_feature("avx2")) # True/False, без запуска кода который может упасть на старом CPU start = rawcpu.rdtsc() # твой код end = rawcpu.rdtsc() print(end - start, "тактов") # точнее чем time.perf_counter(), считает реальные такты CPU ``` ## документация - [quickstart](docs/quickstart.md) - [api](docs/api.md) ## фичи - сырой `cpuid(leaf, subleaf)` — регистры eax/ebx/ecx/edx как есть - `rdtsc()` — счётчик тактов CPU напрямую, без ОС-абстракции - `has_feature()` — проверка sse/avx/avx2/aes/fma и т.д. по битам без падений на неподдерживающем CPU - typed, питон 3.10–3.13 ## чего нет - linux/mac — только windows пока - запись в регистры / что-то в духе MSR — это уже ring 0, юзермодом не достать без драйвера