テンプレートの特殊化 - 2023.2 日本語

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

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

特定のタイプを別の方法で処理するためにデフォルトのテンプレート インプリメンテーションをオーバーライドする必要がある場合、Vitis Model Composer でテンプレートの特殊化がサポートされます。クラス MyClass にジェネリック MyClass とは異なる 2 つのインターフェイスがある次の例を考えます。1 つの特殊化バージョンは cint16 型をインプリメントするよう宣言され、もう 1 つのバージョンは uint32 型をインプリメントするよう宣言されています。

template_specialization.h

#include <adf.h>
template<typename T,int N>
class MyClass
{
};
 
template<>
class MyClass<cint16,1> {
   int m_count;
   int16 var_1;
   int16 var_2;
   int16 var_3;
   uint16 var_4;
public:
   MyClass();
   MyClass(int16 q_var1,int16 q_var2,int16 q_var3,uint16 q_var4);
   MyClass(int16 q_var1,int16 q_var2);
   MyClass(int16 q_var1,int16 q_var2,int16 q_var3);
    
   void func_mem(input_stream<cint16>  *i1,
                 output_stream<cint16> *o1,
                 output_stream<int> *o2);
 
    static void registerKernelClass()
    {
        REGISTER_FUNCTION(MyClass::func_mem);
    }
    
};
 
template<>
class MyClass<uint32,2> {
   int m_count;
   int16 var;
public:
   MyClass(uint32 q_var1);
       
   void func_mem(input_stream<uint32>  *i1,
                 output_stream<uint32> *o1,
                 output_stream<int> *o2);
 
    static void registerKernelClass()
    {
        REGISTER_FUNCTION(MyClass::func_mem);
    }
    
};

2 つの関数が個別に 2 つの特殊化クラスで登録されています。AIE Class Kernel ブロックを使用して func_mem カーネルをブロックとして Vitis Model Composer にインポートしようとすると、ブロックの [Block Parameters] ダイアログ ボックスの Kernel Class タブは次のようになります。

図 1. クラス バリアント

[Kernel Class Variants] セクションでいずれかのカーネル クラス バリアントを選択すると、それに応じて [Class Template Parameters] のリストがアップデートされます。対応するクラス バリアントのカーネル クラス コンストラクターのリストがアップデートされ、リストから選択できるようになります (次の図を参照)。

図 2. カーネル クラス コンストラクター
注記: カーネル クラス コンストラクター パラメーターの値の指定には、MATLAB 変数を使用できます。