我想在Numba编译的函数中使用我的CPU内置指令,但是我很难弄清楚如何引用它们。例如,来自SSE4指令集的popcnt指令,我可以确认我使用它
llvmlite.binding.get_host_cpu_features()
,但无法调用函数本身。
我需要能够从其他nopython编译函数中调用这些函数(指令)。
理想情况下,这将尽可能与Python紧密相关,但在这种情况下,速度对可读性更为重要。
答案 0 :(得分:1)
您可以使用Cython来调用SSE内在函数,但是您不能使用Numba来执行此操作。代码通过Cython执行您想要的操作:https://gist.github.com/aldro61/f604a3fa79b3dec5436a和此处:https://gist.github.com/craffel/e470421958cad33df550
答案 1 :(得分:1)
您可以制作一个小的汇编语言DLL,并通过ctypes进行调用,根据我的经验,从Numba nopython代码中使用ctypes不会产生任何开销。或者,您也可以直接使用指令代码,例如在此blog post on jit in Python Piston JavaScript中,汇编程序可用于获取小的asm例程的机器代码。如this thread中所述,Numba允许在LLVM ir中执行小的功能,当然也可以使用llvmlite。