init: raw cpuid/rdtsc access via ctypes
This commit is contained in:
commit
fa82965ab5
15 changed files with 437 additions and 0 deletions
59
README.md
Normal file
59
README.md
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
# rawcpu
|
||||
|
||||
[](https://github.com/ImSavsis/rawcpu/actions/workflows/ci.yml)
|
||||
[](https://codecov.io/gh/ImSavsis/rawcpu)
|
||||
[](https://pypi.org/project/rawcpu/)
|
||||
[](https://pypi.org/project/rawcpu/)
|
||||
[](https://pypi.org/project/rawcpu/)
|
||||
[](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, юзермодом не достать без драйвера
|
||||
Loading…
Add table
Add a link
Reference in a new issue