Что происходит между 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
Просмотры: 62
Открыть в MAX Сообщить о неточности

Репосты публикации

Публикация канала

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти