Prhub

#30597 fix arm test_norm.py error

原始 PR 作者 mingfeima 合并时间 2026-07-09 14:36 文件变更 1 提交数 1 评论 3 代码增减 +2 / -0

执行摘要

修复 ARM 平台 norm 测试失败

修复 #30216 合并后导致的 ARM CI 失败,原因是 AVX512 特定优化代码在非 Intel 平台上编译报错。PR body 明确说明 "Isolate avx512 specific optimizations for intel platform only."

该 PR 为典型快速修复,代码审查简单直接。建议确认 ARM CI 通过后合并。

讨论亮点

仅一条 reviewer cyb70289 的评论 "Thanks for the fix. +1",无实质性讨论。

实现拆解

  1. sgl-kernel/csrc/cpu/norm.cppnorm4d_kernel_impl 函数中,将 fast path 代码块(第 401-412 行)包裹在条件编译宏 #if defined(CPU_CAPABILITY_AVX512) ... #endif 中。
  2. 该 fast path 适用于 bfloat16 且 D 为 32/64/128/256/512 的情况,使用了 AVX512 指令优化,不应在 ARM 或非 AVX512 平台编译。
  3. 无其他文件变更,改动极其聚焦。
文件 模块 状态 重要度
sgl-kernel/csrc/cpu/norm.cpp 内核 modified 4.82

关键符号

norm4d_kernel_impl

关键源码片段

sgl-kernel/csrc/cpu/norm.cpp core-logic

核心变更文件,添加条件编译隔离 AVX512 优化代码,修复 ARM 编译错误。

// Before (partial): AVX512 fast path 无编译保护,ARM 编译失败
// After: 使用 #if defined(CPU_CAPABILITY_AVX512) 显式隔离
template <NormMode M, typename scalar_t>
void norm4d_kernel_impl(
    scalar_t* __restrict__ out,
    const scalar_t* __restrict__ input,
    const NormParams& p,
    const scalar_t* __restrict__ gate = nullptr) {
#if defined(CPU_CAPABILITY_AVX512)
  // fast path only applies to bfloat16 when D in {32, 64, 128, 256, 512}
  if constexpr (std::is_same_v<scalar_t, at::BFloat16>) {
    switch (p.D) {
      LAUNCH_PARALLEL_LOOP_HD(32);
      LAUNCH_PARALLEL_LOOP_HD(64);
      LAUNCH_PARALLEL_LOOP_HD(128);
      LAUNCH_PARALLEL_LOOP_HD(256);
      LAUNCH_PARALLEL_LOOP_HD(512);
      default:
        break;
    }
  }
#endif // 仅 Intel AVX512 平台编译此段  // generic path: 所有平台均使用
  LAUNCH_PARALLEL_LOOP(
      const scalar_t* __restrict__ gate_ptr{nullptr}; if constexpr (NormTraits<M>::has_gate) {
        gate_ptr = gate + p.output_offset(b, h, t);
      } NormReduceGeneric<M, scalar_t, false>::
          apply(out + p.output_offset(b, h, t), input + p.input_offset(b, h, t), gate_ptr, nullptr, p, p.D));
}

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险极低:变更仅添加编译隔离宏,不改变运行时逻辑。但需确认 CPU_CAPABILITY_AVX512 宏在目标平台上的定义正确,且非 AVX512 平台(如 ARM、AMD 非 AVX512)不会误定义该宏。

影响范围仅限于 ARM 平台 CI 回归,修复后 ARM 上 norm 测试应恢复正常。对 Intel 平台无影响,因为 AVX512 路径在宏定义时仍被编译。

极小改动

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论