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

f1 实例OpenCL开发最佳实践

更新时间:2017-12-07 17:17:18

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

注意
强烈建议您使用RAM用户操作FPGA实例。为了防止意外操作,您需要让RAM用户仅执行必要的操作。在操作及下载FPGA镜像时,因为您需要从指定的OSS空间下载原始DCP工程,所以您需要为FaaS账号创建一个角色,并授予临时权限,让FaaS账号可以访问指定的OSS空间。如果需要对IP加密,需要授予RAM用户一些KMS相关的权限。如果需要做权限检查,还需要授予查看用户资源的权限。

前提条件

您已经 创建了f1实例

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

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

操作步骤

按以下步骤在f1实例上使用OpenCL Example制作镜像文件,并烧写到FPGA芯片中。

第 1 步. 远程连接实例

远程连接Linux实例

第 2 步. 安装基础环境

运行以下脚本安装基础环境。

  1. source /opt/dcp1_0/script/f1_env_set.sh

第 3 步. 下载官方的OpenCL Example

按以下步骤下载官方的OpenCL Example。

  1. 创建并切换到/opt/tmp目录。

    1. mkdir -p /opt/tmp
    2. cd /opt/tmp

    此时,您在/opt/tmp目录下。
    查看当前目录/opt/tmp

  2. 依次执行以下命令下载并解压Example文件。

    1. wget https://www.altera.com/content/dam/altera-www/global/en_US/others/support/examples/download/exm_opencl_matrix_mult_x64_linux.tgz
    2. tar -zxvf exm_opencl_matrix_mult_x64_linux.tgz

    解压后的目录如下图所示。
    /opt/tmp目录

  3. 进入matrix_mult目录下,执行编译命令。

    1. cd matrix_mult
    2. aoc -v -g --report ./device/matrix_mult.cl

    编译过程可能会持续数个小时,您可以再开一个console窗口,使用top命令监控系统占用,确定编译状态。

第 4 步. 上传配置文件

按以下步骤上传配置文件。

  1. 运行以下命令初始化faascmd。

    1. # 如果需要,要添加环境变量及运行权限
    2. export PATH=$PATH:/opt/dcp1_0/script/
    3. chmod +x /opt/dcp1_0/script/faascmd
    4. # 将hereIsMySecretId换为您的AccessKey ID,hereIsMySecretKey替换为您的AccessKey Secret
    5. faascmd config --id=hereIsMySecretId --key=hereIsMySecretKey
    6. # 将hereIsMyBucket换为华东1区的OSS的Bucket名
    7. faascmd auth --bucket=hereIsMyBucket
  2. 进入matrix_mult/output_files,上传配置文件。

    1. cd matrix_mult/output_files # 此时您应该在/opt/tmp/matrix_mult/matrix_mult/output_files
    2. faascmd upload_object --object=afu_fit.gbs --file=afu_fit.gbs
  3. 使用gbs制作FPGA镜像。

    1. # 将hereIsFPGAImageName换为您的镜象名,将hereIsFPGAImageTag替换为您的镜像标签
    2. faascmd create_image --object=afu_fit.gbs --fpgatype=intel --name=hereIsFPGAImageName --tags=hereIsFPGAImageTag --encrypted=false --shell =V1.0
  4. 查看镜像是否制作成功:运行命令faascmd list_images
    返回结果里,如果显示 "State":"success",表示镜像制作成功。请记录返回结果里显示的FpgaImageUUID,稍后会用到。
    查看镜像是否制作成功

第 5 步. 下载镜像到f1实例

按以下步骤将镜像下载到f1实例。

  1. 运行命令获取FPGA ID。

    1. # 将hereIsYourInstanceId替换为您的FPGA实例ID
    2. faascmd list_instances --instanceId=hereIsYourInstanceId

    以下为返回结果。请记录FpgaUUID。获取FPGA ID

  2. 运行命令下载镜像到f1实例。

    1. # 将hereIsYourInstanceID替换为刚刚保存的实例ID;将hereIsFpgaUUID替换为上一条命令中记下的FpgaUUID;将hereIsImageUUID替换为上一步记下的FpgaImageUUID
    2. faascmd download_image --instanceId=hereIsYourInstanceID --fpgauuid=hereIsFpgaUUID --fpgatype=intel --imageuuid=hereIsImageUUID --imagetype=afu --shell=V1.0
  3. 运行命令检查是否下载成功。

    1. # 将hereIsYourInstanceID替换为刚刚保存的实例ID;将hereIsFpgaUUID替换为上一条命令中记下的FpgaUUID;
    2. faascmd fpga_status --fpgauuid=hereIsFpgaUUID --instanceId=hereIsYourInstanceID

如果返回结果里显示"TaskStatus":"valid",说明下载成功。
查看下载是否成功

第 6 步. 将FPGA镜像烧录到FPGA芯片

按以下步骤将FPGA镜像烧录到FPGA芯片。

  1. 打开第1步环境的窗口。如果已关闭,重新执行第1步操作。

  2. 运行命令配置OpenCL的运行环境。

    1. sh /opt/dcp1_0/opencl/dcp_opencl_bsp/linux64/libexec/setup_permissions.sh
  3. 返回上上级目录。

    1. cd ../.. # 此时您在/opt/tmp/matrix_mult
  4. 执行编译命令。

    1. make
    2. # 输出环境配置
    3. export CL_CONTEXT_COMPILER_MODE_ALTERA=3
    4. cp matrix_mult.aocx ./bin/matrix_mult.aocx
    5. cd bin
    6. host matrix_mult.aocx

    当您看到如下输出时,说明配置完成。请注意,最后一行必须为Verification: PASS

    1. [root@iZbpXXXXXZ bin]# ./host matrix_mult.aocx
    2. Matrix sizes:
    3. A: 2048 x 1024
    4. B: 1024 x 1024
    5. C: 2048 x 1024
    6. Initializing OpenCL
    7. Platform: Intel(R) FPGA SDK for OpenCL(TM)
    8. Using 1 device(s)
    9. skx_fpga_dcp_ddr : SKX DCP FPGA OpenCL BSP (acl0)
    10. Using AOCX: matrix_mult.aocx
    11. Generating input matrices
    12. Launching for device 0 (global size: 1024, 2048)
    13. Time: 40.415 ms
    14. Kernel time (device 0): 40.355 ms
    15. Throughput: 106.27 GFLOPS
    16. Computing reference output
    17. Verifying
    18. Verification: PASS
本文导读目录