Полный Дзен Пайтона в одном канале
Разместить рекламу: @tproger_sales_bot
Правила общения: https://tprg.ru/rules
Другие каналы: @tproger_channels
Сайт: https://tprg.ru/site
Регистрация в перечне РКН: https://tprg.ru/xZOL
Post #4936
1.37K
Что происходит между
🔘
🔘
🔘 реестр встроенных ufunc порождается скриптом
🔘 циклы собираются в нескольких вариантах под наборы инструкций (
Какой вариант реально работает у вас, покажет
@zen_of_python
np.add(a, b) и SIMD-циклом: разбор пути одного вызоваnp.add не функция Python, а объект C-типа numpy.ufunc с 22 сигнатурами в np.add.types. Файт Хеллер прослеживает, что происходит с вызовом для dd->d, двух массивов float64.🔘
ufunc_generic_vectorcall и ufunc_generic_fastcall проверяют overrides и конвертируют аргументы;🔘
promote_and_get_ufuncimpl и resolve_descriptors выбирают реализацию и dtype результата;🔘 реестр встроенных ufunc порождается скриптом
generate_umath.py в файл __umath_generated.c; для add bool-цикл переиспользует logical_or, а object-массивы уходят в PyNumber_Add;🔘 циклы собираются в нескольких вариантах под наборы инструкций (
X86_V2, X86_V3, NEON, ASIMD), и нужный выбирается при импорте.Какой вариант реально работает у вас, покажет
numpy.lib.introspect.opt_func_info(func_name="add", signature="float64").@zen_of_python
- ❤ 2






