基于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:\altera\14.0\quartus(根据quartus的安装路径设置)
  • ALTERAOCLSDKROOT=C:\altera\14.0\hld(根据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上有兴趣的朋友可以一起做做实验。

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

基于SoCkit的opencl实验1-基础例程的更多相关文章

  1. 面向服务体系架构(SOA)和数据仓库(DW)的思考基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台

    面向服务体系架构(SOA)和数据仓库(DW)的思考 基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台 当前业界对面向服务体系架构(SOA)和数据仓库(Data Warehouse, ...

  2. 如何基于Winform开发框架或混合框架基础上进行项目的快速开发

    在开发项目的时候,我们为了提高速度和质量,往往不是白手起家,需要基于一定的基础上进行项目的快速开发,这样可以利用整个框架的生态基础模块,以及成熟统一的开发方式,可以极大提高我们开发的效率.本篇随笔就是 ...

  3. 基于RxJava2+Retrofit2精心打造的Android基础框架

    代码地址如下:http://www.demodashi.com/demo/12132.html XSnow 基于RxJava2+Retrofit2精心打造的Android基础框架,包含网络.上传.下载 ...

  4. [笔记] 基于nvidia/cuda的深度学习基础镜像构建流程 V0.2

    之前的[笔记] 基于nvidia/cuda的深度学习基础镜像构建流程已经Out了,以这篇为准. 基于NVidia官方的nvidia/cuda image,构建适用于Deep Learning的基础im ...

  5. 基于Unity3D 的Vuforia SDK开发基础教程

    最新博客地址已转到: http://blog.csdn.net/zzlyw?viewmode=contents   ------------------------------------------ ...

  6. zigbee学习之路(十五):基于协议栈的按键实验

    一.前言 经过上次的学习,相信大家已经初步学会使用zigbee协议进行发送和接受数据了.今天,我们要进行的实验是按键的实验,学会如何在协议栈里实现按键中断. 二.实验功能 在协议栈上实现按键中断,BU ...

  7. zigbee学习之路(十三):基于协议栈的Usart 实验

    一.前言 这次实验我们来学习基于zigbee的串口通信实验,揭开zigbee神秘的面纱,让大家可以用zigbee协议编制属于自己的程序,这次实验只是串口发送数据,并没有进行无线的数据传输,为的是使大家 ...

  8. 实验楼实验——LINUX基础入门

    第一节 Linux简介 一.Linux的历史: 1965 年,Bell 实验室.MIT.GE(通用电气公司)准备开发 Multics 系统,为了同时支持 300 个终端访问主机,但是 1969 年失败 ...

  9. 基于 REST 的 Web 服务:基础

    代表性状态传输(Representational State Transfer,REST)在 Web 领域已经得到了广泛的接受,是基于 SOAP 和 Web 服务描述语言(Web Services D ...

随机推荐

  1. Sass初使用

    看慕课网materliu前辈的sass教程,http://www.imooc.com/learn/364.顺便把刚做完的项目重构一下,然后把一些笔记和心得都写在这里~ 首先安装sass,这里直接参考 ...

  2. React Native知识1-FlexBox 布局内容

    一:理论知识点 1:什么是FlexBox布局? 弹性盒模型(The Flexible Box Module),又叫Flexbox,意为“弹性布局”,旨在通过弹性的方式来对齐和分布容器中内容的空间,使其 ...

  3. iOS 10 都有什么改变?

    iOS 10 都有什么改变? 看这一个贴就够了 最全面的试用 苹果在 WWDC 2016 发布会上正式发布了 iOS 10 操作系统,iOS 与 macOS.tvOS 和 watchOS 构建了苹果四 ...

  4. 在 CentOS7 上安装 MongoDB

    在 CentOS7 上安装 MongoDB 1 通过 SecureCRT 连接至 CentOS7 服务器: 2 进入到 /usr/local/ 目录: cd /usr/local 3 在当前目录下创建 ...

  5. 使用VS2015开发跨平台APP

      VS2013开始就可以基于HTML5开发WEBAPP,并借助xamarin或者PHONEGAP实现原生APP 不过升级麻烦,直接下载VS2015CTP6,最好安装在同一个分区上,ANDROID S ...

  6. Android 热修复技术(1)---原理

    热修复技术分为几部分: 原理介绍 Android HotFix源码分析 自定义框架 1.Android分包MultiDex原理 首先Dex是什么东西? Dex就是Window里面的exe文件 也就是可 ...

  7. VSALM 动手实验 - 持续集成

    Visual Studio 应用生命周期管理(VSALM - Visual Studio Application Lifecycle Managemnet)是微软基于Visual Studio产品线所 ...

  8. Web基础知识

    这学期学了Web技术这门课,但对这门课是做什么的.有什么用处并不了解,教材是Asp.net实用网站开发,对我这样的初学者大概是深了一点,所以决定对Web技术的背景知识做下整理. 1.Web工作原理 W ...

  9. SQL SERVER错误:已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222)

    在SSMS(Microsoft SQL Server Management Studio)里面,查看数据库对应的表的时候,会遇到"Lock Request time out period e ...

  10. WinForm登陆:窗体间的数据传递

    1. 登陆逻辑 FrmMain 为主窗体(启动窗体) FrmLogin 为登陆窗体 在“主窗体”中使用ShowDialog()方法显示“登陆窗体”,并通过“登陆窗体”的DialogResult告知“主 ...