Перейти к содержимому

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