程序 - 2023.2 简体中文

Vitis 统一软件平台文档 应用加速开发 (UG1393)

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 简体中文

主机与内核代码分别进行编译,以创建独立的可执行文件:即主机程序可执行文件和 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. 从命令行实参 argv[1] 传入内核二进制文件 .xclbin
    提示: 通过命令行实参来传递 .xclbin 只是其中一种方法。您也可以在主机程序中对内核二进制文件进行硬编码,使用环境变量来定义此文件,从定制初始化文件来读取它,或者也可以采用其他合适的机制。
  2. load_file_to_memory 函数用于在主机存储器空间中加载文件内容。
  3. clCreateProgramWithBinary API 用于在指定关联环境和器件中完成程序创建进程。