@triton.jit
def triton_batched_dense_vec_jagged_2d_matmul(jagged_tensor_ptr, dense_ptr,
    jagged_offset, thread_block_col_size: tl.constexpr, dense_row_stride,
    jagged_value_row_stride, D, H: tl.constexpr, output_ptr) ->None:
    pid = tl.program_id(0)
    GRID_DIM_COL = (D + thread_block_col_size - 1) // thread_block_col_size
    output_row_idx = pid // GRID_DIM_COL
    jagged_offset_id = output_row_idx // H
    D_refer_idx = output_row_idx % H
    group_id = pid % GRID_DIM_COL
    offset = group_id * thread_block_col_size + tl.arange(0,
        thread_block_col_size)
    begin = tl.load(jagged_offset + jagged_offset_id)
    end = tl.load(jagged_offset + (jagged_offset_id + 1))
    dense_ptr += output_row_idx * dense_row_stride
    jagged_tensor_ptr += begin * jagged_value_row_stride + D_refer_idx * D
    output_ptr += D * output_row_idx
    num_row = tl.minimum(end - begin, dense_row_stride)
    acc = tl.zeros((thread_block_col_size,), dtype=tl.float32)
    mask = offset < D
    for i in range(num_row):
        val1 = tl.load(dense_ptr + i)
        val2 = tl.load(jagged_tensor_ptr + offset, mask=mask, other=0.0)
        result = val1 * val2
        acc += result
        jagged_tensor_ptr += jagged_value_row_stride
    tl.store(output_ptr + offset, acc, mask=mask)
