f3实例OpenCL开发最佳实践
本文介绍如何在f3实例上使用OpenCL(Open Computing Language)制作镜像文件,并烧录到FPGA芯片中。
前提条件
- 已注册阿里云账号。如还未注册,请先完成账号注册。
- 已创建f3实例并为实例分配公网IP。
若尚未创建,请参见创建f3实例。
说明 f3实例只能使用阿里云共享给您的镜像。 - 已在f3实例所在安全组中添加规则并放行SSH(22)端口。
- 已在ECS控制台f3实例的详情页上,获取实例ID。
- 已创建一个OSS Bucket专门用于FaaS服务。
Bucket与f3实例必须属于同一个账号、同一个地域。若尚未创建,请参见创建一个OSS Bucket。
- 使用RAM用户操作FPGA,必须先完成以下操作:
- 创建RAM用户并为RAM用户授权。
您需要为RAM用户授予的权限为:AliyunECSReadOnlyAccess、AliyunOSSFullAccess和AliyunRAMFullAccess。
- 授权FaaS服务角色。
- 获取AccessKey ID和AccessKey Secret。
- 创建RAM用户并为RAM用户授权。
背景信息
开始操作之前,您需要了解以下注意事项。
- 本文所述所有操作都必须由同一个账号在同一地域里执行。
- 建议您使用RAM用户操作FaaS实例。您需要为FaaS管理账号创建一个角色,并授予临时权限,让FaaS管理账号能访问指定的OSS Bucket。
- 本文的示例步骤和命令均基于2018.2版本Sdaccel开发环境。若您使用其他版本Sdaccel开发环境,步骤和命令可能会稍有差异。
操作步骤
在f3实例上,使用OpenCL制作镜像文件,并烧写到FPGA芯片中的操作步骤如下:
步骤一:配置环境
步骤二:编译二进制文件
完成以下步骤,编译vadd二进制文件和kernel_global_bandwidth二进制文件:
- 示例一 :编译vadd二进制文件
- 复制example目录。
cp -rf /opt/Xilinx/SDx/2018.2/examples ./
- 进入vadd目录。
cd examples/vadd/
- 运行命令cat sdaccel.mk | grep "XDEVICE="查看XDEVICE的值,确保其配置为
XDEVICE=xilinx_aliyun-f3_dynamic_5_0
。 - 按以下步骤修改common.mk文件。
- 运行vim ../common/common.mk命令打开该文件。
- 在第 61行代码(参数可能在 60~62 行,视您的文件而定)的末尾添加编译参数--xp param:compiler.acceleratorBinaryContent=dcp,修改后的代码如下:
CLCC_OPT += $(CLCC_OPT_LEVEL) ${DEVICE_REPO_OPT} --platform ${XDEVICE} ${KERNEL_DEFS} ${KERNEL_INCS} --xp param:compiler.acceleratorBinaryContent=dcp
说明 由于您必须向编译服务器提交DCP文件,所以需要添加--xp param:compiler.acceleratorBinaryContent=dcp编译参数,使得Xilinx® OpenCL™ Compiler(xocc)编译生成一个布局布线后的DCP文件,而不是bit文件。
- 运行以下命令编译程序。
make -f sdaccel.mk xbin_hw
如果您看到如下界面,说明二进制文件编译已经开始。编译过程可能会持续数个小时,请您耐心等待。
- 复制example目录。
- 示例二:编译kernel_global_bandwidth二进制文件
- 依次运行以下命令克隆
xilinx 2018.2 example
。git clone https://github.com/Xilinx/SDAccel_Examples.git
cd SDAccel_Examples/
git checkout 2018.2
说明 git分支必须为2018.2版本。 - 运行cd getting_started/kernel_to_gmem/kernel_global_bandwidth/命令进入目录。
- 按以下步骤修改Makefile文件。
- 运行vim Makefile命令打开该文件。
- 设置
DEVICES=xilinx_aliyun-f3_dynamic_5_0
。 - 在第33行代码中添加编译参数--xp param:compiler.acceleratorBinaryContent=dcp,修改后的代码如下:
CLFLAGS +=--xp "param:compiler.acceleratorBinaryContent=dcp" --xp "param:compiler.preserveHlsOutput=1" --xp "param:compiler.generateExtraRunData=true" --max_memory_ports bandwidth -DNDDR_BANKS=$(ddr_banks)
- 运行以下命令编译程序。
make TARGET=hw
如果您看到该界面,说明二进制文件编译已经开始。编译工程可能会持续数小时,请您耐心等待。
- 依次运行以下命令克隆
步骤三:检查打包脚本
运行以下命令检查打包脚本是否存在。
file /root/xbinst_oem/sdaccel_package.sh
如果返回结果中包含cannot open (No such file or directory),说明不存在该文件,您需要运行以下命令手动下载打包脚本。
wget http://fpga-tools.oss-cn-shanghai.aliyuncs.com/sdaccel_package.sh
步骤四:制作镜像
步骤五:下载镜像
您可以采用脚本化流程或者单步操作流程来上传网表文件,并下载FPGA镜像。
- 脚本化流程:仅适用于配备单块FPGA卡的f3实例。
- 运行以下命令上传并生成镜像文件。
sh /root/xbinst_oem/tool/faas_upload_and_create_image.sh <bit.tar.gz需要上传的压缩包文件名>
- 运行以下命令下载镜像文件。
sh /root/xbinst_oem/tool/faas_download_image.sh <bit.tar.gz压缩包的文件名> <0/1> #最后的数字<0/1>为实例中fpga的序号
说明 0为FaaS实例中的第一个FPGA。单芯片实例序号一律为0;多芯片实例,例如,4芯片实例的序号为0,1,2,3。如果需要对多个FPGA下载同一个镜像,可以在命令的末尾添加相应的序号。例如,对4芯片FPGA下载同一镜像的命令如下:sh /root/xbinst_oem/tool/faas_download_image.sh <bit.tar.gz压缩包的文件名> 0
sh /root/xbinst_oem/tool/faas_download_image.sh <bit.tar.gz压缩包的文件名> 1
sh /root/xbinst_oem/tool/faas_download_image.sh <bit.tar.gz压缩包的文件名> 2
sh /root/xbinst_oem/tool/faas_download_image.sh <bit.tar.gz压缩包的文件名> 3
- 运行以下命令上传并生成镜像文件。
- 单步操作流程:使用faascmd工具操作。工具详情,请参见使用faascmd工具。
- 依次运行以下命令,将压缩包上传到您个人的OSS Bucket,再将存放在您个人OSS Bucket中的gbs上传到FaaS管理单元的OSS Bucket中。
faascmd upload_object --object=bit.tar.gz --file=bit.tar.gz
faascmd create_image --object=bit.tar.gz --fpgatype=xilinx --name=<hereIsFPGAImageName> --tags=<hereIsFPGAImageTag> --encrypted=false --shell=<hereIsShellVersionOfFPGA>
- 运行以下命令查看FPGA镜像是否处于可下载状态。
faascmd list_images
返回结果中:- 如果FPGA镜像的"State"为"compiling",表示FPGA镜像处于编译状态,您需要继续等待。
- 如果FPGA镜像的"State"为"success",表示FPGA镜像已可以下载,您需要找到并记录FpgaImageUUID。
- 运行以下命令在返回结果中,找到并记录FpgaUUID。
faascmd list_instances --instanceId=<hereIsYourInstanceId> #将<hereIsYourInstanceId>替换为f3实例ID
- 运行以下命令下载FPGA镜像。
#将<hereIsYourInstanceId>替换为f3的实例ID,<hereIsFpgaUUID>替换为您获取的FpgaUUID,<hereIsImageUUID>替换为您获取的FpgaImageUUID faascmd download_image --instanceId=<hereIsYourInstanceId> --fpgauuid=<hereIsFpgaUUID> --fpgatype=xilinx --imageuuid=<hereIsImageUUID> --imagetype=afu --shell=<hereIsShellVersionOfFpga>
- 运行以下命令查看镜像是否下载成功。
faascmd fpga_status --fpgauuid=<hereIsFpgaUUID> --instanceId=<hereIsYourInstanceId> #将<hereIsFpgaUUID>替换为您获取的FpgaUUID,<hereIsYourInstanceId>替换为f3实例ID。
以下为返回结果示例。如果显示的FpgaImageUUID与您获取的FpgaImageUUID一致,并且显示"TaskStatus":"valid",说明镜像下载成功。
- 依次运行以下命令,将压缩包上传到您个人的OSS Bucket,再将存放在您个人OSS Bucket中的gbs上传到FaaS管理单元的OSS Bucket中。
步骤六:运行Host程序
其他操作
这里介绍FPGA实例部分常用的操作。
任务 | 命令 |
---|---|
查看帮助文档 | make -f ./sdaccel.mk help |
软件仿真 | make -f ./sdaccel.mk run_cpu_em |
硬件仿真 | make -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 |
说明
- 仿真时只需要按照Xilinx标准流程操作,不需要配置F3_env_setup环境。
- SDAccel runtime和SDAccel开发平台已在阿里云f3官方镜像中提供。 您也可以点击后面的链接直接下载SDAccel runtime和SDAccel开发平台。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论