Florent Werbrouck
Published © MIT

12 AIE-ML kernel vectorization

In this tutorial we are looking at how to use the AI Engine API to vectorize an AI Engine kernel to take advantage of the vector unit

IntermediateProtip1 hour98
12 AIE-ML kernel vectorization

Things used in this project

Software apps and online services

Vitis Unified Software Platform
AMD Vitis Unified Software Platform

Story

Read more

Code

Vectorized kernel

C/C++
/*
* Copyright (C) 2025 Florent Werbrouck. All Rights Reserved.
* SPDX-License-Identifier: MIT
*/
/* A simple kernel
 */
#include <adf.h>
#include "include.h"
#include "aie_api/aie.hpp"

alignas(aie::vector_decl_align)  const int16_t coeff[16] = { 1, 1, 0, 0, 1, -1, 0, 0, 0, 0, 1, 1, 0, 0, 1, -1};

void simple(adf::input_buffer<cint16> & in, adf::output_buffer<cint16> & out) {

  aie::vector<int16, 16> data_int;
  aie::vector<int16, 16> coeff_block;
  aie::vector<int16, 16> data_int_o;

  auto data_i = aie::begin_vector<8>(in);
  auto data_o = aie::begin_vector<8>(out);

  aie::mmul<4, 4, 4, int16, int16> matrixMul;

  coeff_block = aie::load_v<16>(coeff);
  
  for (unsigned i=0; i<NUM_SAMPLES/8; i++) {
      data_int = aie::vector_cast<int16>(*data_i++);
      matrixMul.mul(data_int, coeff_block);
      data_int_o = matrixMul.to_vector<int16>(0);
      *data_o++ = aie::vector_cast<cint16>(data_int_o);
  }
}

AI Engine Basic Projects

Repository which contains projects to follow hackster.io articles

TE0950 Designs Repository

Credits

Florent Werbrouck
12 projects • 9 followers
Passionate about FPGA devices

Comments