Используя инструкцию процессора непосредственно из Numba

Я хотел бы использовать встроенные инструкции моего процессора из скомпилированных функций Numba, но у меня возникли проблемы с выяснением, как ссылаться на них. Например, инструкция popcnt из набора инструкций SSE4, я могу подтвердить, что она у меня есть, используя llvmlite.binding.get_host_cpu_features(), но не имеют возможности вызывать сами функции.

Мне нужно иметь возможность вызывать эти функции (инструкции) из других скомпилированных функций nopython.

В идеале это должно быть сделано как можно ближе к Python, но в этом случае скорость важнее, чем удобочитаемость.

2 ответа

Решение

Вы можете использовать Cython для вызова встроенных функций SSE, но вы не можете использовать Numba для этого. Код, делающий то, что вы хотите через Cython, находится здесь: https://gist.github.com/aldro61/f604a3fa79b3dec5436a и здесь: https://gist.github.com/craffel/e470421958cad33df550

Вы можете создать небольшую библиотеку DLL на ассемблере и вызывать ее через ctypes, которые, по моему опыту, не требуют никаких дополнительных затрат при использовании из кода Numba nopython. Или же вы можете использовать коды инструкций непосредственно, как в этом сообщении в блоге о jit в Python. Piston JavaScript- ассемблер может использоваться для получения машинных кодов для небольшой процедуры asm. Numba позволяет создавать небольшие функции в LLVM, как описано в этой теме. Конечно, можно использовать и llvmlite.

Другие вопросы по тегам