カーネルの準備 - 2023.2 日本語

AI エンジン カーネルおよびグラフ プログラミング ガイド (UG1079)

Document ID
UG1079
Release Date
2023-12-04
Version
2023.2 日本語

カーネルは、データフロー グラフ仕様の基本的な構築ブロックとなる演算関数です。カーネルは void を返す通常の C/C++ 関数として宣言され、引数として特殊なデータ型を使用できます。各カーネルは、個別のソース ファイルで定義する必要があります。これが、再利用のしやすさとコンパイルの高速化のため推奨されます。また、個別にコンパイルできるように、カーネル ソース ファイルに関連のヘッダー ファイルをすべて含める必要があります。

注記: AI エンジン カーネルで AI エンジン API を使用するには、カーネル ソース コードに次のファイルを含めます。
  • #include "aie_api/aie.hpp"
  • #include "aie_api/aie_adf.hpp"

ヘッダー ファイル (この資料では kernels.h) では、グラフ内で使用されるすべてのカーネルの関数プロトタイプを宣言することを推奨します。次に例を示します。

#ifndef FUNCTION_KERNELS_H
#define FUNCTION_KERNELS_H

void simple(input_buffer<int16> & __restrict in, 
            output_buffer<int16> & __restrict out);

#endif

この例には、インクルード ファイルが確実に一度だけ含まれるように (C/C++ の推奨事項)、#ifndef#endif があります。

kernels.cc ファイルは、simple 関数のインプリメンテーション ファイルです。カーネル インプリメンテーションでは、data() メンバー関数を使用して入力バッファーと出力バッファーの基準値をそれぞれ指す 2 つの int 16 変数 (in_t および out_t) が使用されます。


/* A simple kernel */
#include <adf.h>
#include "kernels.h"

void simple(input_buffer<int16> & __restrict in,
            output_buffer<int16> & __restrict out)
{
    int16* __restrict in_t = in.data();
    int16* __restrict out_t = out.data();
    for (unsigned i=0; i<NUM_SAMPLES; i++) {
        *out_t++ = 1 + *in_t++;
    }
}