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

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

Document ID
UG1483
Release Date
2022-05-26
Version
2022.1 日本語

異なるデータ型に使用可能な汎用関数が必要な場合があります。テンプレートを使用すると、データ型をパラメーターとして渡すことが可能です。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>
template<typename T, int N>
void myFunc(input_window<T>  *i1,
            output_window<T> *o1
            );
 
#endif // ifndef _AIE_TEMP_KERNELS_H

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

kernel.cpp:

#include "kernel.h"
 
template<typename T, int N>
void
myFunc(input_window<T>  *i1,
       output_window<T> *o1
       )
{
   for(int i = 0;i<8;i++)
   { 
       T val = window_readincr(i1);
       val *= N;
       window_writeincr(o1, val);
    }
}

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

Kernel header file
kernels/include/kernel.h
Kernel function
myFunc
Kernel Init function
空のまま
Kernel source file
kernels/source/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 セクションまでスクロールダウンし、次の図に示すように、設定パラメーターを入力します。

図 2. AIE Kernel の [Block Parameters] ダイアログ ボックスの Port attributes セクション

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

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