テンプレートの部分特殊化 - 2021.2 日本語

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

Document ID
UG1483
Release Date
2021-10-22
Version
2021.2 日本語

1 つのテンプレート パラメーターを特殊化し、ほかのパラメーターは変更できるテンプレートを作成するには、テンプレートの部分特殊化を使用できます。Model Composer では、AIE Class Kernel ブロックを使用して、部分特殊化を含むクラス カーネルをインポートできます。クラス class_a が非タイプ テンプレート パラメーターで部分特殊化される次の例を考えます。

partial_specialization.h

#include <adf.h>
template<typename T,int N>
class class_a
{
};
 
template<typename T>
class class_a<T,2> {
   int m_count;
   T var;
public:
   class_a(T q_var1);
       
   void func_mem(input_stream<T>  *i1,
                      output_stream<T> *o1,
                      output_stream<int> *o2);
 
    static void registerKernelClass()
    {
        REGISTER_FUNCTION(class_a::func_mem);
    }
    
};

関数 func_mem は、registerKernelClass() メソッドに登録されます。AIE Class Kernel ブロックを使用してカーネル関数をブロックとして Model Composer にインポートしようとすると、ブロックの [Block Parameters] ダイアログ ボックスの [Kernel Class] タブは次のようになります。

図 1. AIE Class Kernel ブロックの [Block Parameters] ダイアログ ボックス

クラスは、非タイプ テンプレート パラメーターを使用して部分特殊化されるので、[Kernel Class Template Parameters] の N パラメーターを編集することはできません。ただし、テンプレート タイプ パラメーターの値は、任意の有効なデータ型に変更できます。