已合并
inductor: use simt_template as kernel default compile_mode #40035
inductor: use simt_template as kernel default compile_mode #40035
已合并
stonexxx创建于 7月3日
3 个文件变更+16-5
@@ -66,11 +66,14 @@ class TestNpuDevice(TestCase):
66 excepted = "torch.npu.set_device(0)"66 excepted = "torch.npu.set_device(0)"
67 self.assertEqual(result, excepted)67 self.assertEqual(result, excepted)
68 68 
69- def test_import_get_raw_stream_as(self):
70 overrides = NewNPUDeviceOpOverrides()69 overrides = NewNPUDeviceOpOverrides()
71- result = overrides.import_get_raw_stream_as("test_name")70+ test_name = "test_name_npu"
72- excepted = "from torch_npu._C import _npu_getCurrentRawStream as test_name"71+ result = overrides.import_get_raw_stream_as(test_name)
73- self.assertEqual(result, excepted)72+ expected = f"from torch._C import _npu_getCurrentRawStream as {test_name}"
atomgit-bot
atomgit-botatomgit-bot7月3日

🟠 High Priority

NewNPUDeviceOpOverrides.import_get_raw_stream_as 的实现(device_op_overrides.py 第 5-6 行)始终返回: 但测试中设置的 expected 值有两个分支:

  1. 默认分支(第 72 行):f"from torch._C import _npu_getCurrentRawStream as {test_name}" — 模块名错误(torch._C 应为 torch_npu._C)。
  2. torch_npu._C_npu_getCurrentRawStreamNoWait 属性时(第 75 行):f"from torch_npu._C import _npu_getCurrentRawStreamNoWait as {test_name}" — 函数名错误(_npu_getCurrentRawStreamNoWait 应为 _npu_getCurrentRawStream)。

两个分支的 expected 值都无法匹配实际返回值,测试在任一路径下均会失败。

修复方向:将 expected 修正为 f"from torch_npu._C import _npu_getCurrentRawStream as {test_name}",与实现一致。如果确实存在需要区分 _npu_getCurrentRawStreamNoWait 的场景,应同步修改 import_get_raw_stream_as 的实现。

建议:将第 72、75 行的 expected 值修正为与 import_get_raw_stream_as 实现一致的 f"from torch_npu._C import _npu_getCurrentRawStream as {test_name}",或同步修改 import_get_raw_stream_as 的实现以支持 _npu_getCurrentRawStreamNoWait

改动建议
72
- expected = f"from torch._C import _npu_getCurrentRawStream as {test_name}"
72
+ expected = f"from torch_npu._C import _npu_getCurrentRawStream as {test_name}"
应用建议
likedislike
73+ import torch_npu
74+ if hasattr(torch_npu._C, "_npu_getCurrentRawStreamNoWait"):
75+ expected = f"from torch_npu._C import _npu_getCurrentRawStreamNoWait as {test_name}"
76+ self.assertEqual(result, expected)
atomgit-bot
atomgit-botatomgit-bot7月3日

🟡 Medium Priority

diff 删除了 def test_import_get_raw_stream_as(self): 方法定义(旧第 69 行),并将该方法的测试代码以相同缩进级别放在了 test_set_device 方法体内(新第 69-76 行)。

后果:

  1. import_get_raw_stream_as 不再有独立可发现的测试方法,测试框架(如 pytest/unittest)将不会运行对该方法的测试。
  2. 合并后的断言逻辑是错误的(见下一发现),但即使断言正确,混在 test_set_device 中的测试代码也会导致:测试失败时无法快速定位到 import_get_raw_stream_asset_device 测试和 import_get_raw_stream_as 测试无法独立运行/跳过。

修复方向:恢复 def test_import_get_raw_stream_as(self): 方法定义,并将第 69-76 行移回该独立方法内。

建议:将第 69-76 行的测试代码移回独立的 def test_import_get_raw_stream_as(self): 方法中,同时修正预期值(见下一发现)。

likedislike
74 77 
75 78 
76if __name__ == "__main__":79if __name__ == "__main__":
@@ -3,6 +3,11 @@ from torch._inductor.codegen.common import DeviceOpOverrides, register_device_op
3 3 
4class NewNPUDeviceOpOverrides(DeviceOpOverrides):4class NewNPUDeviceOpOverrides(DeviceOpOverrides):
5 def import_get_raw_stream_as(self, name):5 def import_get_raw_stream_as(self, name):
6+ import torch_npu
7+ from torch._inductor.config import max_autotune
8+ 
9+ if not max_autotune and hasattr(torch_npu._C, "_npu_getCurrentRawStreamNoWait"):
10+ return f"from torch_npu._C import _npu_getCurrentRawStreamNoWait as {name}"
6 return f"from torch_npu._C import _npu_getCurrentRawStream as {name}"11 return f"from torch_npu._C import _npu_getCurrentRawStream as {name}"
7 12 
8 def set_device(self, device_idx):13 def set_device(self, device_idx):
@@ -1422,7 +1422,10 @@ class NPUIndexTritonKernel(TritonKernel):
1422 self.golden_var_list = None1422 self.golden_var_list = None
1423 self.reduce_analysis = None1423 self.reduce_analysis = None
1424 self.load_store_indexing = None1424 self.load_store_indexing = None
1425- self.npu_kernel_type = NPUKernelType.SIMD1425+ if npu_config.is_ascend950:
1426+ self.npu_kernel_type = NPUKernelType.SIMT_TEMPLATE
1427+ else:
1428+ self.npu_kernel_type = NPUKernelType.SIMD
1426 self.current_subblock_axis = set() # noqa: set_linter1429 self.current_subblock_axis = set() # noqa: set_linter
1427 self.node_schedule = self.features.node_schedule1430 self.node_schedule = self.features.node_schedule
1428 # Independent set to track only genuine reduction result variables,1431 # Independent set to track only genuine reduction result variables,