Использование инструкций ЦП непосредственно из Numba

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

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

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


person Sam Ragusa    schedule 03.05.2018    source источник


Ответы (2)


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

person John Zwinck    schedule 03.05.2018
comment
Хотя я ценю это, я верю, что это возможно сделать из Numba. Я говорю это в основном из-за этих документов: llvmlite.pydata.org/en/latest/user-guide/binding/ - person Sam Ragusa; 04.05.2018
comment
@SamRagusa: Ну, это трудно доказать, не так ли? Если вы твердо верите, что это возможно, я бы посоветовал вам выяснить, как это сделать, и опубликовать это здесь в качестве ответа. - person John Zwinck; 06.05.2018
comment
Хотя это может беспокоить меня больше всего, это далеко не мое текущее узкое место. В какой-то момент я попытаюсь вернуться к нему, и, конечно, если я в конечном итоге найду лучшее (или просто интересное) решение, я соответствующим образом обновлю сообщение! - person Sam Ragusa; 12.05.2018

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

person as691454    schedule 20.07.2018
comment
Лучше публиковать важную информацию по ссылкам в самом ответе - person CertainPerformance; 20.07.2018