本文介绍如何在F3实例上使用OpenCL(Open Computing Language)制作镜像文件,并烧录到FPGA芯片中。
前提条件
- 已创建F3实例。若尚未创建F3实例,具体操作,请参见创建F3实例。说明 F3实例请使用阿里云的社区镜像(社区镜像ID:m-uf62gw9ckos5os056xum)。
- 已在F3实例所在的安全组中添加安全组规则,并放行SSH(22)端口。具体操作,请参见添加安全组规则。
- 已登录ECS管理控制台,并在F3实例的详情页上获取实例ID。
- 已创建一个OSS Bucket专门用于FaaS服务。若尚未创建OSS Bucket,具体操作,请参见创建一个OSS Bucket。
- 已获取命令行工具faasutil。若尚未获取faasutil工具,具体操作,请参见获取faasutil。
- 使用RAM用户操作FPGA时,必须先完成以下操作:
- 创建RAM用户并为RAM用户授权。具体操作,请参见创建RAM用户和为RAM用户授权。
您需要为RAM用户授予
AliyunOSSFullAccess
权限。 - 获取AccessKey ID和AccessKey Secret。具体操作,请参见创建AccessKey。
- 创建RAM用户并为RAM用户授权。具体操作,请参见创建RAM用户和为RAM用户授权。
注意事项
- 本文中所有操作都必须由同一个账号在同一地域里执行。
- 如果您为普通用户,建议管理员将镜像中/root/xbinst_oem目录拷贝至用户根目录下。
- 如果您为普通用户,请联系管理员给普通用户添加/dev/virtio-ports/FaaS.agent的使用权限。
- 建议您使用RAM用户操作FaaS实例。您需要为FaaS管理账号创建一个角色,并授予临时权限,让FaaS管理账号能访问指定的OSS Bucket。
- 本文以2018.2版本的SDAccel开发环境为例,若您使用其他版本的SDAccel开发环境,步骤和命令可能会稍有差异。
步骤一:配置环境
- 远程连接F3实例。说明 后面步骤中的编译工程可能会持续数小时,建议您使用screen或者nohup等方式登录,防止ssh超时退出。
- 运行以下命令安装screen。
yum install screen -y
- 运行以下命令进入screen。
screen -S f3opencl
- 运行以下命令配置环境。
sudo source /home/user1/xbinst_oem/F3_env_setup.sh xocl #每打开一个终端窗口就需要执行该命令一次
配置环境时,请注意以下说明:- 配置环境主要包括安装xocl驱动、设置vivado环境变量、检查vivado license、检测aliyun-f3 sdaccel平台、授予2018.2 runtime配置。
- 如果您要运行vivado的仿真,请勿运行以上命令配置环境,您只需要单独设置vivado环境变量即可。
- 推荐您使用Makefile方式仿真。
- 前往Xilinx,下载并安装补丁
y2k22_patch-1.2.zip
。说明 该补丁用于修复Xilinx年限溢出缺陷。
步骤二:编译二进制文件
编译vadd二进制文件和kernel_global_bandwidth二进制文件的操作如下所示:
示例一:编译vadd二进制文件
- 复制examples目录。
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文件。
- 运行以下命令编译程序。
make -f sdaccel.mk xbin_hw
如果您看到如下界面,说明二进制文件编译已经开始。编译过程可能会持续数个小时,请您耐心等待。
示例二:编译kernel_global_bandwidth二进制文件
- 依次运行以下命令克隆
xilinx 2018.2 examples
。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文件。
- 运行以下命令编译程序。
make TARGET=hw
如果您看到该界面,说明二进制文件编译已经开始。编译过程可能会持续数小时,请您耐心等待。
步骤三:检查打包脚本
运行以下命令检查打包脚本是否存在。
file /home/user1/xbinst_oem/sdaccel_package.sh
如果返回结果中包含cannot open (No such file or directory),说明不存在该文件,您需要运行以下命令手动下载打包脚本。
wget http://fpga-tools.oss-cn-shanghai.aliyuncs.com/sdaccel_package.sh
步骤四:制作镜像
- 初始化faasutil工具并配置OSS环境。
- 运行ls,获取后缀为
.xclbin
的文件名。 - 运行以下命令,打包好二进制文件。
/home/user1/xbinst_oem/sdaccel_package.sh -xclbin=/opt/Xilinx/SDx/2018.2/examples/vadd/bin_vadd_hw.xclbin
打包完成后,您会在同一目录下看到一个打包好的文件,如下图所示。
步骤五:下载镜像
本步骤介绍如何使用faasutil工具上传网表文件并下载FPGA镜像。关于faasutil命令的用法,请参见使用faasutil。
- 依次运行以下命令,将压缩包上传到您个人的OSS Bucket,再将存放在您个人OSS Bucket中的压缩包上传到FaaS管理单元的OSS Bucket中。
faasutil put_object --object=bit.tar.gz --file=bit.tar.gz #--object(Object file in oss bucket) --file(Local file need to put) faasutil create_image --object=bit.tar.gz --fpgatype=xilinx --name=<HereIsFPGAImageName> --tags=<HereIsFPGAImageTag> --encrypted=false --shell=<hereIsShellVersionOfFPGA> #<HereIsFPGAImageTag>可选(镜像Tag) encrypted可选,镜像加密 <HereIsShellVersionOfFPGA>默认版本
- 运行以下命令,查看FPGA镜像是否处于可下载状态。
faasutil list_images
在返回结果中:- 如果FPGA镜像的"State"为"compiling",表示FPGA镜像处于编译状态,您需要继续等待。
- 如果FPGA镜像的"State"为"success",表示FPGA镜像已经可以下载,您需要找到并记录FpgaImageUniqueId,用于后续下载镜像(download_image)时使用。
- 运行以下命令,在命令返回结果中,找到并记录fpga bdf。
faasutil list_instances
- 运行以下命令,下载FPGA镜像。
faasutil download_image --bdf=<fpga_bdf> --fpgaImageUniqueId=<image_uuid> #<fpga_bdf>由上一步所得 <image_uuid>镜像uuid
- 运行以下命令,查看镜像是否下载成功。
faasutil fpga_status --bdf=<fpga_bdf>
以下为返回结果示例。如果显示的imageuuid与您获取的FpgaImageUniqueId一致,并且fpgaStatus参数显示valid,说明镜像下载成功。
步骤六:运行Host程序
- 运行以下命令配置环境。
sudo source /home/user1/xbinst_oem/F3_env_setup.sh xocl #每打开一个终端窗口就需要执行该命令一次
- 配置sdaccel.ini文件。在host二进制文件所在目录下,运行vim sdaccel.ini命令,创建sdaccel.ini文件并输入下列内容。
[Debug] profile=true [Runtime] runtime_log = "run.log" hal_log = hal.log ert=false kds=false
- 运行host。
- vadd运行命令如下:
make -f sdaccel.mk host
sudo ./vadd bin_vadd_hw.xclbin
- kernel_global_bandwidth运行命令如下:
sudo ./kernel_global
如果返回结果中出现Test Passed,说明测试通过。 - vadd运行命令如下:
常用操作
这里介绍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开发平台。