在树莓派Zero上使用Numba时出现异常行为
问题原因分析
这是Numba在**ARMv6架构(树莓派Zero采用的架构)**下的已知兼容性bug:当启用nopython=True模式时,print函数处理浮点数存在内存/寄存器复用错误,导致第二次读取变量n时,读取到了错误的内存区域值。
临时解决方案
禁用nopython模式:将装饰器改为
@numba.jit()(移除nopython=True),此时Numba会回退到对象模式,依赖CPython原生打印逻辑,即可正常输出两次1.0。
示例代码:import numba @numba.jit() def numtesting(n): print(n) print(n) numtesting(1.0)规避重复读取同一浮点数变量:若必须使用
nopython=True,可通过临时变量重新赋值的方式绕开bug:import numba @numba.jit(nopython=True) def numtesting(n): temp = n print(temp) temp = n print(temp) numtesting(1.0)硬件/版本升级:Numba对ARMv6架构的支持本身有限,后续版本可能修复该类bug;条件允许的话,更换为ARMv7及以上架构的树莓派(如Pi 3/4),Numba在这些平台的兼容性更完善。
内容的提问来源于stack exchange,提问作者Sascha
相关产品推荐
相关产品推荐

