• 基于SoCkit的opencl实验1-基础例程


    基于SoCkit的opencl实验1-基础例程

    准备软硬件

    • Arrow SoCkit Board
    • 4GB or larger microSD Card
    • Quartus II v14.1
    • SoCEDS v14.1
    • Altera SDK for OpenCL v14.1
    • (A license for these tools.There are 60-day evaluation licenses available via your FAE. You will need to provide a NIC ID)
    • Opencl开发资料
    • Arrow SoCKit OpenCL BSP
    • Arrow SoCKit OpenCL microSD Image
    • Arrow SoCKit OpenCL Examples

    软件安装

    到Altera官网下载Altera SDK for OpenCL v14.1,并申请一个license。

    将Altera SDK for OpenCL v14.1的安装路径设置与Quartus II v14.1的路径内部,例如:hld就是Altera SDK for OpenCL v14.1的安装文件夹,安装软件自动命名的。

    设置环境变量

        设置环境变量主要是为了OpenCL的编译,将Arrow SoCKit OpenCL BSP压缩包解压在一个文件夹,如:

    文件夹内部的文件为:

    • arm32 : 文件库
    • board_env.xml : Altera OpenCL tools,提供工具的信息;
    • arrow_c5sockit_sharedmem : 支持使用的板子的文件库;
    • driver : 驱动文件夹;

    增加系统环境变量:

    • QUARTUS_ROOTDIR=C:altera14.0quartus(根据quartus的安装路径设置)
    • ALTERAOCLSDKROOT=C:altera14.0hld(根据quartus的安装路径设置)
    • AOCL_BOARD_PACKAGE_ROOT= { Arrow SoCKit OpenCL BSP解压后的文件夹路径}
    • Path= { Arrow SoCKit OpenCL BSP解压后的文件夹路径}/bin

    启动电脑的命令输入窗口,输入:aoc --list-boards

    开发板设置

    • CLKSEL[1] = 2-3
    • CLKSEL[0] = 2-3
    • BOOTSEL[2] = 1-2
    • BOOTSEL[1] = 2-3
    • BOOTSEL[0] = 1-2
    • SW6 to 6'b100110 (labeled 6 -> 1 on the switch)

    SD卡镜像拷贝与打开串口

    解压Arrow SoCKit OpenCL microSD Image,然后拷贝到SD卡;

    板子插上SD卡,上电,使用putty.exe打开串口,设置串口号和波特率,如下;

     

    板级调试

    设置运行的环境变量

    由于板子配带的镜像里面有了两个例程,一个是hello world,一个是两个向量的相加运算;

    输入root登录

    输入ls查看文件

    输入 source./init_opencl.sh,配置系统运行的环境变量;

    输入aocl可以查看指令的使用

    测试环境变量设置情况

    输入aocl version

    测试板子的情况

    输入 aocl diagnose

    配置IP地址

    输入ifconfig eth0 192.168.168.101设置IP地址,方便将电脑上的文件传送到SD卡;

    Ifconfig查看IP设置情况;

    编译2进制文件

    进入到文件夹Helloworld

    输入aocl program /dev/acl0 hello_world.aocx编译2进制文件

    运行

    输入./hello_world返回信息如下:

    Querying platform for info:

    ==========================

    CL_PLATFORM_NAME = Altera SDK for OpenCL

    CL_PLATFORM_VENDOR = Altera Corporation

    CL_PLATFORM_VERSION = OpenCL 1.0 Altera SDK for OpenCL, Version 14.0

    Querying device for info:

    ========================

    CL_DEVICE_NAME = arrow_c5sockit_sharedmem : Arrow SoCKit Board

    CL_DEVICE_VENDOR = Arrow Electronics

    CL_DEVICE_VENDOR_ID = 4466

    CL_DEVICE_VERSION = OpenCL 1.0 Altera SDK for OpenCL, Version 14.0

    CL_DRIVER_VERSION = 14.0

    CL_DEVICE_ADDRESS_BITS = 64

    CL_DEVICE_AVAILABLE = true

    CL_DEVICE_ENDIAN_LITTLE = true

    CL_DEVICE_GLOBAL_MEM_CACHE_SIZE = 32768

    CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE = 0

    CL_DEVICE_GLOBAL_MEM_SIZE = 536870912

    CL_DEVICE_IMAGE_SUPPORT = false

    CL_DEVICE_LOCAL_MEM_SIZE = 16384

    CL_DEVICE_MAX_CLOCK_FREQUENCY = 1000

    CL_DEVICE_MAX_COMPUTE_UNITS = 1

    CL_DEVICE_MAX_CONSTANT_ARGS = 8

    CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE = 134217728

    CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS = 3

    CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS = 8192

    CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE = 1024

    CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR = 4

    CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT = 2

    CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT = 1

    CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG = 1

    CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT = 1

    CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE = 0

    Command queue out of order? = false

    Command queue profiling enabled? = true

    Using AOCX: hello_world.aocx

    Kernel initialization is complete.

    Launching the kernel...

    Thread #2: Hello from Altera's OpenCL Compiler!

    Kernel execution is complete.

    向量相加

    与hello world运行一致,返回到vectorAdd文件夹

    编译2进制文件

    运行

    软件说明

        基于SoCkit的opencl主要分为两个部分,一部分是运行在FPGA上面的OpenCL Kernel,软件代码是在工程中的.cl文件中,也就是核函数。另一部分就是运行在ARM上的主函数,主要是采用.cpp文件。

        .cl文件中出现的函数前缀加上"__kernel"关键词,指定它运行在设备(FPGA)上,使用Altera的OpenCL工具就可以编译为FPGA比特流配置文件。

        .cpp文件为主机程序,主要执行流程为:初始化平台、寻找设备、打印设备信息、创建设备上下文、在设备上下文中创建指令队列、载入设备代码、编译设备代码、创建核函数对象、设置核函数参数、运行核函数、等待核函数运行结束、清除所有对象。这是OpenCL的最基本流程,虽然比较繁琐,但熟悉之后几乎每次都是这几步,代码改动很少,真正需要用心设计的是核函数。

        前面hello_world.aocx和 helloworld两个文件,前者运行在FPGA上(OpenCL中称为核函数,Kernel),后者运行在ARM上(OpenCL中称为主机程序,Host Program)。

     

    可参考:http://bbs.eeworld.com.cn/thread-455862-1-1.html

    最近研究上基于FPGA的openCL,但是本文对于openCL还不不懂,如果有懂这方面的朋友,对将openCL移植到FPGA上有兴趣的朋友可以一起做做实验。

    大西瓜FPGA-->https://daxiguafpga.taobao.com

    博客资料、代码、图片、文字等属大西瓜FPGA所有,切勿用于商业! 若引用资料、代码、图片、文字等等请注明出处,谢谢!

    每日推送不同科技解读,原创深耕解读当下科技,敬请关注微信公众号“科乎”。

  • 相关阅读:
    B-Suffix Array
    1 or 2
    Boundary
    Fake Maxpooling
    Cover the Tree
    Omkar and Circle
    20.5.31
    Yet Another Yet Another Task
    Codeforces Round #373 (Div. 2)E. Sasha and Array +线段树+矩阵快速幂
    2018 Multi-University Training Contest 2(Naive Operations ) hdu6315
  • 原文地址:https://www.cnblogs.com/logic3/p/5321954.html
Copyright © 2020-2023  润新知