C/C++ カーネルでは、カーネルは Vitis コンパイラのコマンド ラインで v++ --kernel
オプションを使用すると識別されます。ただし、OpenCL コードの場合は、__kernel
キーワードでカーネルが識別されます。1 つの .cl
ファイル内で複数のカーネルを定義でき、Vitis コンパイラは --kernel
オプションでどのカーネルをコンパイルするか指定している場合を除き、カーネルをすべてコンパイルします。
__kernel __attribute__ ((reqd_work_group_size(1, 1, 1)))
void apply_watermark(__global const TYPE * __restrict input,
__global TYPE * __restrict output, int width, int height) {
{
...
}
ヒント: 上記のカーネル関数
apply_watermark
の完全なコードは、Vitis Accel Examples GitHub リポジトリの Global Memory Two Banks (CL) にあります。上記の例の場合、ウォーターマーク カーネルに input
と output
という 2 つのポインター タイプの引数と、width
と height
という 2 つのスカラー タイプの int 引数が含まれています。
C/C++ カーネルではこれらの引数に HLS INTERFACE
プラグマを使用する必要がありますが、OpenCL カーネルでは Vitis コンパイラおよび Vitis HLS でカーネル引数が認識され、必要に応じてポインター引数は m_axi
インターフェイスに、スカラー引数は s_axilite
インターフェイスにコンパイルされます。