• 基于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所有,切勿用于商业! 若引用资料、代码、图片、文字等等请注明出处,谢谢!

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

  • 相关阅读:
    PAT (Advanced Level) 1060. Are They Equal (25)
    PAT (Advanced Level) 1059. Prime Factors (25)
    PAT (Advanced Level) 1058. A+B in Hogwarts (20)
    PAT (Advanced Level) 1057. Stack (30)
    PAT (Advanced Level) 1056. Mice and Rice (25)
    PAT (Advanced Level) 1055. The World's Richest (25)
    PAT (Advanced Level) 1054. The Dominant Color (20)
    PAT (Advanced Level) 1053. Path of Equal Weight (30)
    PAT (Advanced Level) 1052. Linked List Sorting (25)
    PAT (Advanced Level) 1051. Pop Sequence (25)
  • 原文地址:https://www.cnblogs.com/logic3/p/5321954.html
Copyright © 2020-2023  润新知