全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
云服务器 ECS

f2 实例 OpenCL 开发最佳实践

更新时间:2017-11-23 13:45:45

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

注意
强烈建议您使用 RAM 用户操作 FaaS 实例。为了防止意外操作,您需要让 RAM 用户仅执行必要的操作。您需要为 FaaS 账号创建一个角色,并授予临时权限,让 FaaS 账号可以访问指定的 OSS 空间。

前提条件

您已经 创建了 f2 实例

使用 RAM 用户操作 FPGA,需要 创建 RAM 用户授权创建 RAM 角色授权。您必须 获取 AccessKeyID 和 AccessKeySecret

您已经 开通 OSS 服务,并 创建了 Bucket

您已经 登录 ECS 管理控制台,在 f2 实例的详情页上,获取实例 ID。

操作步骤

按以下步骤在 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:kcu1500:4ddr-xpr:4.0。如果不是,需要修改为这个配置。
    确认XDEVICE配置

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

    1. vim ../common/common.mk

    将第 63 行代码(如下所示)

    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

    说明
    参数可能在 60-62 行,由您的文件确定。

  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 -O /root/xbinst_oem/sdaccel_package.sh
  2. chmod a+x /root/xbinst_oem/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=V1.0

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

    说明
    制作镜像比较耗时。等待一段时间后,您可以运行以下命令,查看镜像状态。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=intel --imageuuid=hereIsImageUUID --imagetype=afu --shell=V1.0

    在返回结果里,如果看到 "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_kcu1500_4ddr-xpr_4_0 。

本文导读目录