问题
test_shiftright_operation 使用了:
scalar_value = random.randint(1, 32)
Python randint 包含上界,所以它偶尔会返回 32。但 int32 的合法右移量是
0 <= shift < 32;一旦取到 32,TVM 会在构造 TIR 时确定性报错。
单次 pytest 通常会通过。重复执行该节点,直到随机数取到 32 即可复现:
python3 -m pytest -q \
'testing/python/language/parallel/test_tilelang_ascend_language_parallel.py::TestTileLangKernels::test_shiftright_operation'
也可以把 Python random.seed 固定为 50;此时第一次 random.randint(1, 32)
就会返回 32,可在不运行 NPU 的情况下确定性复现参数错误。
修复建议
最小修复是排除 32:
- scalar_value = random.randint(1, 32)
+ scalar_value = random.randint(1, 31)
验证结果
- shift 31 的 TIR 构造通过;
- shift 32 确定性触发原来的合法性错误;
- 改为
[1,31] 后,原节点重复测试未再失败。
问题
test_shiftright_operation使用了:Python
randint包含上界,所以它偶尔会返回 32。但 int32 的合法右移量是0 <= shift < 32;一旦取到 32,TVM 会在构造 TIR 时确定性报错。单次 pytest 通常会通过。重复执行该节点,直到随机数取到 32 即可复现:
python3 -m pytest -q \ 'testing/python/language/parallel/test_tilelang_ascend_language_parallel.py::TestTileLangKernels::test_shiftright_operation'也可以把 Python
random.seed固定为 50;此时第一次random.randint(1, 32)就会返回 32,可在不运行 NPU 的情况下确定性复现参数错误。
修复建议
最小修复是排除 32:
验证结果
[1,31]后,原节点重复测试未再失败。