怎样在f3实例上使用OpenCL制作镜像文件

怎样在f3实例上使用OpenCL制作镜像文件?

前提条件
已创建f3实例。
已在ECS控制台f3实例的详情页上,获取实例ID。
使用同一个账号创建了与f3实例在同一地域的OSS Bucket。详细信息参见开通OSS服务和创建一个OSS Bucket。
如果您使用RAM用户操作FPGA,确保已经完成以下操作:
创建RAM用户并授权。
创建RAM角色并授权。
获取AccessKey ID和AccessKey Secret。

操作步骤
步骤 1. 配置环境
1、远程连接f3实例。
2、运行以下命令安装Screen。
yum install screen -y
3、运行以下命令进入Screen。
screen -S f3opencl
4、运行以下命令配置环境。
source /root/xbinst_oem/f3_env_setup.sh xocl #每打开一个终端窗口就需要执行该命令一次

步骤 2. 编译二进制文件
示例一 :vadd
1、复制example目录。
cp -rf /opt/Xilinx/SDx/2018.2/examples ./
2、进入vadd目录。
cd examples/vadd/
3、运行命令cat sdaccel.mk | grep "XDEVICE=" 查看XDEVICE的值,确保其配置为XDEVICE=xilinx_aliyun-f3_dynamic_5_0。
4、按以下步骤修改common.mk文件。
运行vim ../common/common.mk命令打开该文件。
在第 61 行代码(参数可能在 60-62 行,视您的文件而定)的末尾添加编译参数 --xp param:compiler.acceleratorBinaryContent=dcp,修改后的代码为:
CLCC_OPT += $(CLCC_OPT_LEVEL) ${DEVICE_REPO_OPT} --platform ${XDEVICE} -o ${XCLBIN} ${KERNEL_DEFS} ${KERNEL_INCS} --xp param:compiler.acceleratorBinaryContent=dcp
5、运行以下命令编译程序。
make -f sdaccel.mk xbin_hw
示例二:kernel_global_bandwidth
1、克隆 xilinx 2018.2 example。
git clone /Xilinx/SDAccel_Examples.git
cd SDAccel_Examples/
git checkout 2018.2
2、运行cd getting_started/kernel_to_gmem/kernel_global_bandwidth/命令进入目录。
3、按以下步骤修改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)
4、运行以下命令编译程序。
make TARGET=hw

步骤 3. 检查打包脚本
您需要运行以下命令检查打包脚本是否存在。
file /root/xbinst_oem/sdaccel_package.sh
如果返回结果中包含 cannot open (No such file or directory),说明不存在该文件,您需要运行以下命令手动下载打包脚本。
wget /sdaccel_package.sh

步骤 4. 制作镜像
1、运行以下命令配置OSS环境。
faascmd config --id=hereIsYourSecretId --key=hereIsYourSecretKey #将hereIsYourSecretId和hereIsYourSecretKey替换为您的RAM用户AK信息
faascmd auth --bucket=hereIsYourBucket # 将hereIsYourBucket替换为您创建的OSS Bucket名称
2、运行ls,获取后缀为.xclbin的文件名。
3、打包二进制文件。
/root/xbinst_oem/sdaccel_package.sh -xclbin=/opt/Xilinx/SDx/2017.4.op/examples/vadd/bin_vadd_hw.xclbin
打包完成后,您会在同一目录下看到一个打包好的文件。

步骤 5. 下载镜像
1、脚本化流程:仅适用于配备单块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
2、单步操作流程:使用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
在返回结果中,如果 State为 compiling,表示FPGA镜像处于编译状态,您需要继续等待。如果 State 为 success,表示FPGA镜像已经可以下载。您需要找到并记录FpgaImageUUID。
运行以下命令。在命令返回结果中,您需要找到并记录FpgaUUID。
faascmd list_instances --instanceId=hereIsYourInstanceId # 将hereIsYourInstanceId替换为f3实例ID
运行以下命令下载FPGA镜像。
faascmd download_image --instanceId=hereIsYourInstanceId --fpgauuid=hereIsFpgaUUID --fpgatype=xilinx --imageuuid=hereIsImageUUID --imagetype=afu --shell=hereIsShellVersionOfFpga
# hereIsYourInstanceId替换为f3的实例ID,hereIsFpgaUUID替换为您获取的FpgaUUID,hereIsImageUUID替换为您获取的FpgaImageUUID
运行以下命令查看镜像是否下载成功。
faascmd fpga_status --fpgauuid=hereIsFpgaUUID --instanceId=hereIsYourInstanceId # hereIsFpgaUUID替换为您获取的FpgaUUID,hereIsYourInstanceId替换为f3实例ID。
以下为返回结果示例。如果显示的FpgaImageUUID与您获取的FpgaImageUUID一致,并且显示 "TaskStatus":"valid",说明镜像下载成功。

步骤 6. 运行Host程序
1、运行以下命令配置环境。
source /root/xbinst_oem/f3_env_setup.sh xocl #每打开一个终端窗口就需要执行该命令一次
2、配置sdaccel.ini文件。
在Host二进制文件所在目录下,运行 vim sdaccel.ini命令创建sdaccel.ini 文件并输入下列内容。
[Debug]
profile=true
[Runtime]
runtime_log = "run.log"
hal_log = hal.log
ert=false
kds=false
3、运行host。
vadd运行命令为:
make -f sdaccel.mk host
./vadd bin_vadd_hw.xclbin
kernel_global_bandwidth 运行命令为:
./kernel_global
如果返回结果中出现Test Passed,说明测试通过。

标签