已合并
inductor: use simt_template as kernel default compile_mode #40035
stonexxx创建于 7月3日
inductor: use simt_template as kernel default compile_mode #40035
已合并
共 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}" |
| 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) | ||
🟡 Medium Priority diff 删除了 后果:
修复方向:恢复 建议:将第 69-76 行的测试代码移回独立的 ![]() ![]() | |||
| 74 | 77 | ||
| 75 | 78 | ||
| 76 | if __name__ == "__main__": | 79 | if __name__ == "__main__": |
| @@ -3,6 +3,11 @@ from torch._inductor.codegen.common import DeviceOpOverrides, register_device_op | |||
| 3 | 3 | ||
| 4 | class NewNPUDeviceOpOverrides(DeviceOpOverrides): | 4 | class 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 = None | 1422 | self.golden_var_list = None |
| 1423 | self.reduce_analysis = None | 1423 | self.reduce_analysis = None |
| 1424 | self.load_store_indexing = None | 1424 | self.load_store_indexing = None |
| 1425 | - self.npu_kernel_type = NPUKernelType.SIMD | 1425 | + 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_linter | 1429 | self.current_subblock_axis = set() # noqa: set_linter |
| 1427 | self.node_schedule = self.features.node_schedule | 1430 | 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, |


🟠 High Priority
NewNPUDeviceOpOverrides.import_get_raw_stream_as的实现(device_op_overrides.py第 5-6 行)始终返回: 但测试中设置的 expected 值有两个分支:f"from torch._C import _npu_getCurrentRawStream as {test_name}"— 模块名错误(torch._C应为torch_npu._C)。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。