我想在 Numba 编译函数中使用我的 CPU 的内置指令,但在弄清楚如何引用它们时遇到了麻烦。例如,来自 SSE4 指令集的 popcnt 指令,我可以确认我使用它
llvmlite.binding.get_host_cpu_features()
,但无法调用函数本身。
我需要能够从其他 nopython 编译函数中调用这些函数(指令)。
理想情况下,这将尽可能接近 Python,但在这种情况下,速度比可读性更重要。
您可以使用 Cython 调用 SSE 内在函数,但不能使用 Numba 来执行此操作。通过 Cython 做你想做的代码在这里:https ://gist.github.com/aldro61/f604a3fa79b3dec5436a 在这里:https ://gist.github.com/craffel/e470421958cad33df550
您可以制作一个小型汇编语言 DLL 并通过 ctypes 调用它,根据我的经验,在 Numba nopython 代码中使用时没有任何开销。或者,您可以直接使用指令代码,如这篇 关于 jit in Python Piston JavaScript的博客文章 中的指令代码,可能用于获取小型 asm 例程的机器代码。Numba 允许在 LLVM ir 中创建小函数,如本线程中所述。当然也可以使用 llvmlite。