全部产品
阿里云办公

f2实例OpenCL开发最佳实践

更新时间:2018-07-21 10:41:55

本文介绍如何在f2实例上使用OpenCL(Open Computing Language)制作镜像文件,并烧写到FPGA芯片中。

说明

  • 本文所述所有操作都必须由同一个账号在同一地域里执行。
  • 强烈建议您使用RAM用户操作FaaS实例。为了防止意外操作,您需要让RAM用户仅执行必要的操作。您需要为FaaS管理账号创建一个角色,并授予临时权限,让FaaS管理账号能访问指定的OSS Bucket。

前提条件

操作步骤

按以下步骤在f2实例上使用OpenCL制作镜像文件,并烧写到FPGA芯片中。

步骤 1. 配置环境

按以下步骤配置环境:

  1. 远程连接f2实例

  2. 使用 vim 修改/root/xbinst_oem/setup.sh:在第5行前加一个 #,注释掉 unset XILINX_SDX,再保存退出。

    修改setup.sh文件

  3. 运行以下命令安装Screen,用于后续的持续链接。

    1. yum install screen -y
  4. 运行以下命令进入Screen。

    1. screen -S f2opencl
  5. 运行以下命令配置安全烧写环境。

    1. source /root/xbinst_oem/F2_env_setup.sh

步骤 2. 编译二进制文件

按以下步骤编译二进制文件:

  1. 进入命令目录 。

    1. cd /opt/Xilinx/SDx/2017.2/examples/vadd
  2. 运行命令 cat sdaccel.mk | grep "XDEVICE",查看 XDEVICE 配置是否为 xilinx:aliyun-ku115-f2:4ddr-xpr:4.2。如果不是,必须改为这个配置。

  3. 使用 vim 修改 common.mk 文件。

    1. vim ../common/common.mk

    将第 63 行代码(参数可能在 60-62 行,由您的文件确定)

    1. CLCC_OPT += $(CLCC_OPT_LEVEL) ${DEVICE_REPO_OPT} --platform ${XDEVICE} -o ${XCLBIN} ${KERNEL_DEFS} ${KERNEL_INCS}

    修改为

    1. CLCC_OPT += $(CLCC_OPT_LEVEL) ${DEVICE_REPO_OPT} --platform ${XDEVICE} -o ${XCLBIN} ${KERNEL_DEFS} ${KERNEL_INCS} --xp param:compiler.acceleratorBinaryContent=dcp

    说明:您必须向编译服务器提交DCP文件,而不是bit文件,所以必须添加编译参数 --xp param:compiler.acceleratorBinaryContent=dcp,使Xilinx® OpenCL™ Compiler(xocc)编译生成一个布局布线后的DCP文件,而不是bit文件。

  4. 运行以下命令编译程序。

    1. export XILINX_SDX=/opt/Xilinx/SDx/2017.2
    2. make -f sdaccel.mk xbin_hw

    如果您看到如下界面,说明二进制文件编译已经开始。编译过程可能会持续数个小时,请您耐心等待。

    二进制文件开始编译

步骤 3. 检查打包脚本

运行以下命令检查打包脚本是否存在。

  1. file /root/xbinst_oem/sdaccel_package.sh

说明:如果返回结果中包含 cannot open (No such file or directory),说明不存在该文件,您需要手动下载打包脚本。

  1. wget http://fpga-tools.oss-cn-shanghai.aliyuncs.com/sdaccel_package.sh

步骤 4. 制作镜像

按以下步骤制作镜像文件。

  1. 运行命令配置OSS环境。
    1. # 将此处的hereIsMySecretId、hereIsMySecretKey、hereIsMyBucket分别替换为您的AccessKeyID、AccessKeySecret和Bucket名称
    2. faascmd config --id=hereIsMySecretId --key=hereIsMySecretKey
    3. faascmd auth --bucket=hereIsMyBucket
  2. 运行 ls,获取文件名。

    获取文件名

  3. 打包二进制文件。

    1. /root/xbinst_oem/sdaccel_package.sh -xclbin=/opt/Xilinx/SDx/2017.2/examples/vadd/bin_vadd_hw.xclbin

    打包完成后,在同一目录下,您会看到一个打包好的文件,如本示例中的 17_10_28-021904_SDAccel_Kernel.tar.gz

    查看打包好的文件

  4. 运行命令将打包好的文件上传到您指定的OSS Bucket中。

    1. # 将文件名改为打包好的文件名,您需要根据您的 ls 命令修改
    2. faascmd upload_object --object=bit.tar.gz --file=bit.tar.gz
  5. 运行如下命令制作镜像。

    1. # bit.tar.gz、hereIsFPGAImageName、hereIsFPGAImageTag分别替换为刚创建的压缩包文件名、镜像名和镜像的tag
    2. faascmd create_image --object=bit.tar.gz --fpgatype=xilinx --name=hereIsFPGAImageName --tags=hereIsFPGAImageTag --encrypted=false --shell=20171121

    返回结果示例如下图所示。如果出现 "State":"queued",说明这个任务已经加入队列,开始制作镜像。

    加入队列开始制作镜像

    说明:制作镜像比较耗时。等待一段时间后,运行以下命令,查看镜像状态。

    1. faascmd list_images

    返回结果里,如果出现"State":"success",说明镜制作成功。

    查看镜像状态

    记录返回结果中的FPGAImageUUID。

步骤 5. 烧写镜像

按以下步骤将镜像烧写入FPGA芯片。

  1. 运行以下命令获取FpgaUUID。

    1. # 将hereIsYourInstanceId替换为你的FPGA云服务器的实例ID
    2. faascmd list_instances --instanceId=hereIsYourInstanceId

    返回结果如下图所示。

    获取FpgaUUID

    说明:记录返回结果中的FpgaUUID。

  2. 运行以下命令下载镜像。

    1. # 将hereIsYourInstanceID替换为这个f2实例的ID,将hereIsFpgaUUID替换为您记录的FpgaUUID,将hereIsImageUUID替换为您记录的FpgaImageUUID
    2. faascmd download_image --instanceId=hereIsYourInstanceId --fpgauuid=hereIsFpgaUUID --fpgatype=xilinx --imageuuid=hereIsImageUUID --imagetype=afu --shell=20171121

    在返回结果里,如果看到 "State":"committed",说明镜像下载成功。

    镜像下载成功

    说明:您也可以运行以下命令查看镜像是否下载成功。

    1. # 将 hereIsYourInstanceID 替换为这个 f2 实例的 ID,将 hereIsFpgaUUID 替换为您记录的 FpgaUUID
    2. faascmd fpga_status --instanceId=hereIsYourInstanceID --fpgauuid=hereIsFpgaUUID

    返回结果里,如果看到 "TaskStatus":"valid",而且FpgaImageUUID和下载镜像时的FpgaImageUUID一致,说明镜像下载正常。

    查看镜像下载是否正常

步骤 6. 运行Host程序

执行以下命令运行Host程序。

  1. make -f sdaccel.mk host
  2. unset XILINX_SDX
  3. ./vadd bin_vadd_hw.xclbin

如果返回结果中出现 Test Passed,说明测试通过。

其他操作

这里介绍 FPGA 实例部分常用的操作。

任务 命令
查看帮助文档 make -f ./sdaccel.mk help
软件仿真 make -f ./sdaccel.mk run_cpu_em
硬件仿真 ake -f ./sdaccel.mk run_hw_em
只编译 host 代码 make -f ./sdaccel.mk host
编译生成可以下载的文件 make -f sdaccel.mk xbin_hw
清理工作目录 make -f sdaccel.mk clean
强力清除工作目录 make -f sdaccel.mk cleanall

说明

  • sdx2017.2在仿真时,device需要用xilinx_aliyun-ku115-f2_4ddr-xpr_4_2。
  • 仿真时只需要按照Xilinx标准流程操作,不需要配置F2_env_setup环境。
本文导读目录