本文介绍如何在f1实例上使用OpenCL(Open Computing Language)制作镜像文件,并烧写到FPGA芯片中。
背景信息
开始操作之前,请阅读以下注意事项:
- 本教程中所有操作都必须由同一个账号在同一地域里执行。
- 强烈建议您使用RAM用户操作FaaS实例。为了防止意外操作,您需要让RAM用户仅执行必要的操作。在操作FPGA镜像及下载时,因为您需要从指定的OSS Bucket下载原始DCP工程,所以您必须为FaaS管理账号创建一个角色,并授予临时权限,让FaaS管理账号访问指定的OSS Bucket。如果需要对IP加密,必须授予RAM用户KMS相关权限。如果需要做权限检查,必须授予查看用户资源的权限。
步骤二:安装基础环境
运行以下脚本安装基础环境。
source /opt/dcp1_1/script/f1_env_set.sh
步骤三:拷贝官方的OpenCL Example
- 依次运行以下命令创建并切换到/opt/tmp目录。
mkdir -p /opt/tmp
cd /opt/tmp
此时,您位于
/opt/tmp目录下。
- 运行以下命令将Example文件拷贝至当前目录。
cp /opt/dcp1_1/opencl/exm_opencl_vector_add_x64_linux.tgz ./
- 依次运行以下命令进入vector_add目录并执行编译命令。
cd vector_add
aoc -v -g -report ./device/vector_add.cl
编译过程可能会持续数个小时,您可以再开一个会话,使用
top命令监控系统资源占用情况,确定编译状态。
步骤四:上传配置文件
- 依次运行以下命令初始化faascmd工具。
#配置环境变量
export PATH=$PATH:/opt/dcp1_1/script/
#为faascmd工具添加可执行权限
chmod +x /opt/dcp1_1/script/faascmd
#将命令中的<hereIsYourSecretId>换为您的AccessKey ID,<hereIsYourSecretKey>替换为您的AccessKey Secret
faascmd config --id=<hereIsYourSecretId> --key=<hereIsYourSecretKey>
#将命令中的<hereIsYourBucket>换为您的Bucket名称
faascmd auth --bucket=<hereIsYourBucket>
- 依次运行以下面命令进入vector_add/output_files目录并上传配置文件。
cd vector_add/output_files
此时,您应该在/opt/tmp/vector_add/vector_add/output_files目录下。
faascmd upload_object --object=afu_fit.gbs --file=afu_fit.gbs
- 运行以下命令使用gbs制作FPGA镜像。
#将命令中的<hereIsYourImageName>换为您的镜像名,将<hereIsYourImageTag>替换为您的镜像标签
faascmd create_image --object=dma_afu.gbs --fpgatype=intel --name=<hereIsYourImageName> --tags=<hereIsYourImageTag> --encrypted=false --shell=V1.1
- 运行以下命令查看镜像是否制作成功。
若返回结果中显示
"State":"success",表示镜像制作成功。请记录返回结果中显示的
FpgaImageUUID,稍后会用到。
步骤五:下载镜像到f1实例
- 运行以下命令获取FPGA ID。
#将命令中的<hereIsYourInstanceId>替换为您的FPGA实例ID
faascmd list_instances --instanceId=<hereIsYourInstanceId>
返回结果如下图所示。请记录
FpgaUUID。
- 运行以下命令下载镜像到f1实例。
#将命令中的<hereIsYourInstanceID>替换为刚刚保存的实例ID;将<hereIsFpgaUUID>替换为上一条命令中记下的FpgaUUID;将<hereIsImageUUID>替换为上一步记下的FpgaImageUUID
faascmd download_image --instanceId=<hereIsYourInstanceID> --fpgauuid=<hereIsFpgaUUID> --fpgatype=intel --imageuuid=<hereIsImageUUID> --imagetype=afu --shell=V0.11
- 运行以下命令检查是否下载成功。
# 将命令中的<hereIsYourInstanceID>替换为刚刚保存的实例ID;将<hereIsFpgaUUID>替换为上一条命令中记下的FpgaUUID
faascmd fpga_status --fpgauuid=<hereIsFpgaUUID> --instanceId=<hereIsYourInstanceID>
若返回结果中显示
"TaskStatus":"operating",说明下载成功。
步骤六:将FPGA镜像烧录到FPGA芯片
- 打开步骤二环境的窗口。如果已关闭,重新执行步骤二操作。
- 运行以下命令配置OpenCL的运行环境。
sh /opt/dcp1_1/opencl/opencl_bsp/linux64/libexec/setup_permissions.sh
- 运行以下命令返回上级目录。
cd ../..
此时,您位于/opt/tmp/vector_add目录下。
- 执行编译命令。
make
# 输出环境配置
export CL_CONTEXT_COMPILER_MODE_ALTERA=3
cp vector_add.aocx ./bin/vector_add.aocx
cd bin
host vector_add.aocx
当您看到如下输出时,说明配置完成。请注意,最后一行必须为
Verification: PASS
。
[root@iZbpXXXXXZ bin]# ./host vector_add.aocx
Matrix sizes:
A: 2048 x 1024
B: 1024 x 1024
C: 2048 x 1024
Initializing OpenCL
Platform: Intel(R) FPGA SDK for OpenCL(TM)
Using 1 device(s)
skx_fpga_dcp_ddr : SKX DCP FPGA OpenCL BSP (acl0)
Using AOCX: vector_add.aocx
Generating input matrices
Launching for device 0 (global size: 1024, 2048)
Time: 40.415 ms
Kernel time (device 0): 40.355 ms
Throughput: 106.27 GFLOPS
Computing reference output
Verifying
Verification: PASS