24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
Во многих случаях производительность действительно можно повысить в тысячи раз, и это не преувеличение. В качестве примера исследователи приводят перемножение двух матриц 4096×4096. Они начали с реализации на Python как одного из самых популярных языков высокого уровня. Например, вот реализация в четыре строки на Python 2:
for i in xrange(4096): for j in xrange(4096): for k in xrange(4096): C[j] += A[k] * B[k][j]
Но оказывается, что этот наивный подход слишком неэффективно использует вычислительную мощность. На современном компьютере он будет выполняться около семи часов, как показано в таблице ниже.
Переход на более эффективный язык программирования уже кардинально повышает скорость выполнения кода. Например, программа на Java будет выполняться в 10,8 раз быстрее, а программа на С — ещё в 4,4 раза быстрее, чем на Java. Таким образом, переход с Python на C означает повышение скорости выполнения программы в 47 раз.
И это только начало оптимизации. Если писать код с учётом особенностей аппаратного обеспечения, на котором он будет выполняться, то можно повысить скорость ещё в 1300 раз. В данном эксперименте код сначала запустили параллельно на всех 18 ядрах CPU (версия 4), затем использовали иерархию кэшей процессора (версия 5), добавили векторизацию (версия 6) и применили специфические инструкции Advanced Vector Extensions (AVX) в версии 7. Последняя оптимизированная версия кода выполняется уже не 7 часов, а всего 0,41 секунды, то есть более чем в 60 000 раз быстрее оригинального кода на Python.
Знаете почему софт сейчас медленное говно? Потому что его пишут питоне.
>>226089554 (OP) Табличка малополезна, потому что не понятно о каком конкретно процессоре идёт речь. Вообще задача перемножения матриц довольно удобна для выжимания максимально возможного количества флопов.
Но с выводом согласен, хоть он и неполон. В нём должен быть не только питон, но и жс.
>>226090007 Ну и да, в табличке тоже мелкая подтасовка: если уж сравнивать, то эквивалентные версии алгоритмов, а не наивный с блочным перемножением, например.
Че за высер, на питоне не перемножение матриц в основном пишут, а используют готовые модули для всяких СУБД, бэкэндов, сложных библиотек с нейронками, эти модули уже написаны на С++ и питон вызывает лишь обёртку. Если ты хочешь писать какой-то низкоуровневый софт в духе йоба-операций с матрицами, офк твоя задача это максимально оптимизировать свой модуль, чтобы потом смузихлёб парой строк мог использовать его.
>>226091130 Ну, люди зачем-то это написали, и это пользуется спросом. Чтобы в каждой программе не городить свой оптимизированный велосипед, а использовать готовый
>>226091179 Так и Python на чистом Си написан, что его не использовать теперь? Ты когда компьютер включаешь не думаешь откуда электричество, и как электроны работают в твоём процессоре, почему тут должен думать на чем библиотека написана?
>>226089554 (OP) Потому что РЫНОЧЕК, в современных реалях нужно быстро написать прогу что бы конкуренты не опередили и не собрали все деньги (после чего твоя версия проги нахуй никому не упадет). Ну и отсюда вытекает: 1. Никто тебе не даст оптимизировать функцию неделю и давать на написание калькулятора пару лет чтоб калькулятор работал на 20% быстрее аналога на электроне например 2. Если все оптимизировать как ты хочешь то цена продукта будет в 100 раз выше (нужно больше погромисто-часов), а из-за этого мало кто будет покупать твой продукт т.к. он быстрее на 20% но дороже на 10000% Типа вот что ты выберешь купить винду 11 за касарь но для которого нужна среднепека или за 100к но которая будет работать на говне из нулевых? 3. Там где надо все оптимизированно, типа какие нибудь проги для военных/космоса оптимизированны почти максимально
>>226093479 >Можешь кратко объяснить в чем его ущербность? Нету фигурных скобок, непонятно где операция началась и где заканчивается при большой вложенности. Нету строгой типизации, непонятно с какими данными работаешь.
кудах кудах, матрицы долго вычисляются, хули они ноют, им дали cuda - перемножай не хочу, нет блядь, хочу на питоне без библиотек и типов данных перемножать
>>226094489 Двачую. Сейчас просто полно долбоёбов, которые хотят чтобы всё было ультраоптимизированно, но они при этом не понимают, что на это придётся потратить в десятки раз больше времени и средств. Но в быту это нахер не нужно, в быту нужно чтобы решение было выполнено как можно дешевле и быстрее, а отимизированность должна быть лишь приемлемой, но не самой лучшей.
>>226094735 и чё? ну написана и написана, удобно написана, нахуя мне толкать руку в говно в си ради перемножения матриц если могу юзать сладкий как мёд питон?
>>226098735 >что на это придётся потратить в десятки раз больше времени и средств Значит этой проблемой должно заниматься государство, если частным корпорациям это не выгодно.
>>226100088 То есть ты согласен на то, чтобы на твои доходы ещё процентов 20 налога повесили на такое дело и те ресурсы, которые бы ты мог потратить на что угодно тратились бы на сверхоптимизированные програмки? Если да, то ты дебил.
>>226103320 >чтобы на твои доходы ещё процентов 20 налога повесили Кроме налогов есть еще доход от продажи ресурсов, не обязательно туда тратить налоги.
>>226089554 (OP) А как же тензорные ядра и глубокое обучени. Либы все на питоне и юзают их, как раз для перемножения матриц. Дело не в языке, а то что либы не заюзали в нем.
>>226103815 Ну то есть тебе норм будет, если те деньги с продажи ресурсов, которые уходили, там, на пусть и довольно хреновые в наших реалиях, но всё же образование, медицину, дороги и всё такое теперь будут идти на ультраоптимизированные программы?
А, ну и если открывать глаза людям на медленность и тормознутость софта + -дохера оперативы, то это потому что подавляющее большинство софта написано с использованием електрона (это такая херня на основе хромиума для того, чтобы на разных осях твоя прилажка выглядела одинаково). Т.е. во всем виноват js, держу в курсе
for i in xrange(4096):
for j in xrange(4096):
for k in xrange(4096):
C[j] += A[k] * B[k][j]
Но оказывается, что этот наивный подход слишком неэффективно использует вычислительную мощность. На современном компьютере он будет выполняться около семи часов, как показано в таблице ниже.
Переход на более эффективный язык программирования уже кардинально повышает скорость выполнения кода. Например, программа на Java будет выполняться в 10,8 раз быстрее, а программа на С — ещё в 4,4 раза быстрее, чем на Java. Таким образом, переход с Python на C означает повышение скорости выполнения программы в 47 раз.
И это только начало оптимизации. Если писать код с учётом особенностей аппаратного обеспечения, на котором он будет выполняться, то можно повысить скорость ещё в 1300 раз. В данном эксперименте код сначала запустили параллельно на всех 18 ядрах CPU (версия 4), затем использовали иерархию кэшей процессора (версия 5), добавили векторизацию (версия 6) и применили специфические инструкции Advanced Vector Extensions (AVX) в версии 7. Последняя оптимизированная версия кода выполняется уже не 7 часов, а всего 0,41 секунды, то есть более чем в 60 000 раз быстрее оригинального кода на Python.
Знаете почему софт сейчас медленное говно? Потому что его пишут питоне.