関数テンプレートを含む AI エンジン カーネルのインポート - 2023.2 日本語

Vitis Model Composer ユーザー ガイド (UG1483)

Document ID
UG1483
Release Date
2023-11-15
Version
2023.2 日本語

異なるデータ型に使用可能な汎用関数が必要な場合があります。テンプレートを使用すると、データ型をパラメーターとして渡すことが可能です。Vitis Model Composer では、関数テンプレートを含む AI エンジン カーネルのインポートがサポートされています。これには、先ほどと同じ AIE Kernel ブロックを使用して、通常の C++ 関数をインポートします。

テンプレートを含むカーネル関数をインポートする例として、関数テンプレートの宣言を含む次のようなヘッダー ファイル kernel.h があるとします。このテンプレートには、typename テンプレート パラメーター T と非タイプ (整数) テンプレート パラメーター N が含まれています。

kernel.h

#ifndef _AIE_TEMP_KERNELS_H_
#define _AIE_TEMP_KERNELS_H_

#include <adf.h>

using namespace adf;

template<typename T, int N>
void myFunc(input_buffer<T> *i1,
 output_buffer<T> *o1
 );

#endif // ifndef _AIE_TEMP_KERNELS_H

関数テンプレートの定義は、次に示すように、ソース ファイル kernel.cpp に含まれます。

kernel.cpp

#include "kernel.h"

template<typename T, int N>
void myFunc(input_buffer<T> *i1, output_buffer<T> *o1)
{
     auto pIn  = aie::begin(i1);
     auto pOut = aie::begin(o1);

     for(int i = 0; i < 8; i++)
     { 
          *pOut++ *= *pIn++;
     }
}

カーネル出力計算での非タイプ テンプレート パラメーター N が使用されています。テンプレート関数をブロックとして Model Composer にインポートするには、AIE Kernel ブロックをダブルクリックし、パラメーターを次のようにアップデートします。

Kernel header file
kernel.h
Kernel function
myFunc
Kernel Init function
空のまま
Kernel source file
kernel.cpp
Kernel search path
空のまま
Preprocessor options
空のまま

Block Parameters ダイアログ ボックスで Import ボタンをクリックすると、Function タブが表示されます。Function Template Parameters セクションに、次の図に示すように、テンプレート タイプ パラメーター T の値とテンプレート非タイプ パラメーターの整数値を入力します。該当する編集可能なフィールドをダブルクリックし、値を入力します。また、Function declaration セクションでテンプレート関数の宣言を確認できます。

図 1. AIE Kernel の [Block Parameters] ダイアログ ボックスの Function declaration セクション

サポートされるタイプ テンプレート パラメーターは、次のとおりです。

  • int8、int16、int32、int64
  • uint8、uint16、uint32、uint64
  • float、double
  • cint16、cint32、cfloat

Function タブの Port attributes セクションまでスクロールダウンし、次の図に示すように、設定パラメーターを入力します。

[Function] タブで適切な値を入力したら、Apply をクリックします。AIE Kernel ブロックは次の図に示すようになります。

図 2. アップデートされた AIE Kernel ブロック