プログラム - 2021.1 Japanese

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2022-03-29
Version
2021.1 Japanese

ホストおよびとカーネル コードは個別にコンパイルされ、ホスト プログラム実行ファイルと FPGA バイナリ (.xclbin) が作成されます。ホスト アプリケーションを実行する際は、 clCreateProgramWithBinary API を使用して .xclbin を読み込む必要があります。

次のコード例に、標準の OpenCL API を使用して .xclbin からプログラムをビルドする方法を示します。

unsigned char *kernelbinary;
char *xclbin = argv[1];

printf("INFO: loading xclbin %s\n", xclbin);
 
int size=load_file_to_memory(xclbin, (char **) &kernelbinary);
size_t size_var = size; 

cl_program program = clCreateProgramWithBinary(context, 1, &device_id, 
					 &size_var,(const unsigned char **) &kernelbinary, 
					 &status, &err);

// Function 
int load_file_to_memory(const char *filename, char **result)
{
  uint size = 0;
  FILE *f = fopen(filename, "rb");
  if (f == NULL) {
    *result = NULL;
    return -1; // -1 means file opening fail
  }
  fseek(f, 0, SEEK_END);
  size = ftell(f);
  fseek(f, 0, SEEK_SET);
  *result = (char *)malloc(size+1);
  if (size != fread(*result, sizeof(char), size, f)) {
    free(*result);
    return -2; // -2 means file reading fail
  }
  fclose(f);
  (*result)[size] = 0;
  return size;
}

このコード例は、次を実行します。

  1. カーネルのバイナリ ファイル .xclbin をコマンド ライン引数 argv[1] で渡します。
    ヒント: コマンド ライン引数で .xclbin を渡すのも 1 つの方法ですが、ホスト プログラムにカーネル バイナリ ファイルをコード記述したり、環境変数を使用して定義したり、カスタム初期化ファイルから読み込んだりするなどの方法を使用できます。
  2. load_file_to_memory 関数を使用して、ファイルの内容をホスト マシンのメモリ空間に読み込みます。
  3. clCreateProgramWithBinary API を使用して、指定したコンテキストおよびデバイスでプログラム作成プロセスを完了します。