启用Numba SVML但矩阵向量乘法因内存冲突无法向量化
Numba结合SVML优化矩阵-向量乘法时LLVM提示内存冲突无法向量化
尝试用Numba结合SVML优化一个简单的矩阵-向量乘法函数,执行python test.py | grep svml检查SVML向量化情况时,LLVM返回错误提示。已通过GitHub issue中的代码验证SVML可正常运行,能检测到SVML指令。
最小复现代码
import numpy as np import numba import llvmlite.binding as llvm llvm.set_option("", "--debug-only=loop-vectorize") @numba.njit(parallel=True, fastmath=True) def njit_generate_data(y, S, x, noise, n_observation, support, noise_level=0.1): x[support] = np.random.randn(len(support)) for i in numba.prange(n_observation): y[i] = S[i] @ x + noise[i] * noise_level return S, x, y i8 = numba.types.int8 f32 = numba.types.float32 b = numba.types.bool_ njit_generate_data.compile((f32[:], f32[:, :], f32[:], f32[:], i8, b[:], f32)) print(njit_generate_data.inspect_asm(njit_generate_data.signatures[0]))
LLVM错误信息
LV: Can't vectorize due to memory conflicts
系统信息
- Python 3.10
- Numba 0.60.0
numba -s | grep SVML输出:__SVML Information__ SVML state, config.USING_SVML : True SVML library found and loaded : True llvmlite using SVML patched LLVM : True SVML operational : True
已尝试的操作
- 移除并行化
prange - 手动展开矩阵乘法(无效)
- 切换
parallel=True/False和fastmath=True/False - 为x、y和S添加
ascontiguousarray
是否忽略了Numba或LLVM中导致该冲突的向量化逻辑?
内容的提问来源于stack exchange,提问作者zsl000
相关产品推荐
相关产品推荐

