code: def gemm_fusion_kernel(
      A,
      B,
      C,
      E,  #
      M,
      N,
      K,  #
      stride_am,
      stride_ak,
      stride_bn,
      stride_bk,
      stride_cn,
      stride_ck,
      stride_em,
      stride_ek,  #
      BLOCK_M: tl.constexpr,
      BLOCK_N: tl.constexpr,
      BLOCK_K: tl.constexpr,
  ):
      pid = tl.program_id(0)
  
      a_tile_ptr = tl.make_block_ptr(
          base=A,
          shape=(M, K),
          strides=(stride_am, stride_ak),
          offsets=(pid * BLOCK_M, 0),
          block_shape=(BLOCK_M, BLOCK_K),
          order=(1, 0),
      )
      b_tile_ptr = tl.make_block_ptr(
          base=B,
          shape=(N, K),
          strides=(stride_bn, stride_bk),
          offsets=(0, 0),
          block_shape=(BLOCK_N, BLOCK_K),
          order=(1, 0),
      )
      c_tile_ptr = tl.make_block_ptr(
          base=C,
          shape=(N, K),
          strides=(stride_cn, stride_ck),
          offsets=(0, 0),
          block_shape=(BLOCK_N, BLOCK_K),
          order=(1, 0),
      )
      e_tile_ptr = tl.make_block_ptr(
          base=E,
          shape=(M, K),
          strides=(stride_em, stride_ek),
          offsets=(pid * BLOCK_M, 0),
          block_shape=(BLOCK_M, BLOCK_K),
          order=(1, 0),
      )
  
      acc_e = tl.zeros((BLOCK_M, BLOCK_K), dtype=tl.float32)
      a = tl.load(a_tile_ptr)
      for i in range(0, N, BLOCK_N):
          b = tl.load(b_tile_ptr)
          o_ab = tl.dot(a, tl.trans(b))
          c = tl.load(c_tile_ptr)
          o_ab = o_ab.to(tl.float16)
          acc_e += tl.dot(o_ab, c)
          b_tile_ptr = tl.advance(b_tile_ptr, [BLOCK_N, 0])
          c_tile_ptr = tl.advance(c_tile_ptr, [BLOCK_N, 0])
  
      acc_e = acc_e.to(tl.float16)
      tl.store(e_tile_ptr, acc_e)
  
imports: import pytest
  import torch
  import triton
  import triton.language
label_desc: Use image node_id 1 for calling a global function with example usage: gemm_fusion_kernel(A, B, C, E, M, N, K, stride_am, stride_ak, stride_bn, stride_bk, stride_cn, stride_ck, stride_em, stride_ek, BLOCK_M, BLOCK_N, BLOCK_K) without return types