Python не существует: что на самом деле выполняет ваш процессор
HEX 1000
0:00 / 0:00
Python не существует: что на самом деле выполняет ваш процессор
1 087 просмотров · 8 дней назад
HEX 1000
171 подписчик
1 087 просмотров · 8 дней назад
Ваш процессор никогда не выполнял ни одной строки кода Python. Ни одной. Так что же на самом деле происходит, когда вы вызываете функцию Python?
Сначала мы открываем процессор: регистры, исполнительные блоки, декодер, указатель инструкций и цикл, который он повторяет миллиарды раз в секунду: выборка, декодирование, выполнение. Затем мы доказываем это в коде. dis показывает байт-код, который Python создает из трехстрочной функции. Та же самая инструкция BINARY_OP складывает целые числа, объединяет строки и выдает ошибку TypeError, потому что интерпретатор проверяет типы во время выполнения программы. Начиная с версии 3.11, Python также специализирует эту инструкцию на лету (BINARY_OP_ADD_INT). Один вызов занимает 38 наносекунд на моей машине: более ста тактов процессора. Затем та же функция на C: gcc -O0 выдает девять инструкций, -O2 — две (lea и ret), а objdump показывает всю функцию в виде четырех байтов: 8d 04 11 c3.
Выгода от ИИ: умножение матрицы 200 x 200 равно 8 миллионам операций умножения-сложения. На моем компьютере чистый Python справился с этим за 335 мс, numpy — за 0,29 мс, что более чем в тысячу раз быстрее, потому что numpy передает математические вычисления скомпилированному машинному коду. Один слой нейронной сети — это умножение матрицы, а плотная языковая модель выполняет около двух математических операций на каждый параметр для каждого токена. Модель с 7 миллиардами параметров: около 14 миллиардов операций на токен.
РАЗДЕЛЫ
0:00 Ваш процессор никогда не запускал Python
0:15 Процессор только читает числа
0:54 Внутри ядра процессора
1:47 Выборка, декодирование, выполнение
2:29 НОВИЧОК: самая скучная функция
2:44 НОВИЧОК: байт-код, лежащий в её основе
3:48 СРЕДНИЙ УРОВЕНЬ: кто запускает байт-код?
4:38 СРЕДНИЙ УРОВЕНЬ: Python специализируется на лету
5:16 СРЕДНИЙ УРОВЕНЬ: сколько стоит один вызов
5:42 СРЕДНИЙ УРОВЕНЬ: цикл против sum()
6:14 ПРОДВИНУТЫЙ УРОВЕНЬ: та же функция на C
7:15 ПРОДВИНУТЫЙ УРОВЕНЬ: -O2, две инструкции
8:27 ПРОДВИНУТЫЙ УРОВЕНЬ: четыре байта машинного кода
9:09 Как ЦП обрабатывает эти четыре байта
9:54 ВЫГОДА ИИ: 8 миллионов операций умножения-сложения
10:53 ВЫГОДА ИИ: слой — это умножение матриц
11:16 14 миллиардов операций на токен
11:57 Что на самом деле делает графический процессор
12:19 Итак, Python реален?
ЗАМЕТКИ ПО КОДУ
В этом видео используется Python 3.14. Названия байт-кода меняются между версиями, поэтому в более старых версиях отображаются другие инструкции.
dis.dis(..., adaptive=True) требует Python 3.11 или новее.
numpy не встроен: pip install numpy
C: gcc (MinGW-w64 в Windows). В Windows первые два целочисленных аргумента передаются в формате rcx и rdx. В Linux они передаются в формате rdi и rsi, поэтому одна и та же функция компилируется в 8d 04 37 c3.
Все измерения времени выполнены на моем ПК. Ваши могут отличаться.
УПОМИНАЕТСЯ В ЭТОМ ВИДЕО
A01 · Двоичный код: Как компьютер хранит что-либо? → • Why Do Computers Only Use 0 and 1? Binary,...
A02 · Что происходит при нажатии Enter? → • What Happens When You Press Enter? How the...
B02 · Строки → • Why Can't Python Strings Change? Immutabil...
Следующий в серии A: A04 · Память: где живут ваши переменные
HEX 1000 обучает информатике и искусственному интеллекту с самых основ. Две серии, одна цель: к моменту окончания обучения магия перестанет быть магией.
Логика, лежащая в основе кода.
#cpu #pythonprogramming #computerscience