基于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:\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-基础例程的更多相关文章
- 面向服务体系架构(SOA)和数据仓库(DW)的思考基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台
面向服务体系架构(SOA)和数据仓库(DW)的思考 基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台 当前业界对面向服务体系架构(SOA)和数据仓库(Data Warehouse, ...
- 如何基于Winform开发框架或混合框架基础上进行项目的快速开发
在开发项目的时候,我们为了提高速度和质量,往往不是白手起家,需要基于一定的基础上进行项目的快速开发,这样可以利用整个框架的生态基础模块,以及成熟统一的开发方式,可以极大提高我们开发的效率.本篇随笔就是 ...
- 基于RxJava2+Retrofit2精心打造的Android基础框架
代码地址如下:http://www.demodashi.com/demo/12132.html XSnow 基于RxJava2+Retrofit2精心打造的Android基础框架,包含网络.上传.下载 ...
- [笔记] 基于nvidia/cuda的深度学习基础镜像构建流程 V0.2
之前的[笔记] 基于nvidia/cuda的深度学习基础镜像构建流程已经Out了,以这篇为准. 基于NVidia官方的nvidia/cuda image,构建适用于Deep Learning的基础im ...
- 基于Unity3D 的Vuforia SDK开发基础教程
最新博客地址已转到: http://blog.csdn.net/zzlyw?viewmode=contents ------------------------------------------ ...
- zigbee学习之路(十五):基于协议栈的按键实验
一.前言 经过上次的学习,相信大家已经初步学会使用zigbee协议进行发送和接受数据了.今天,我们要进行的实验是按键的实验,学会如何在协议栈里实现按键中断. 二.实验功能 在协议栈上实现按键中断,BU ...
- zigbee学习之路(十三):基于协议栈的Usart 实验
一.前言 这次实验我们来学习基于zigbee的串口通信实验,揭开zigbee神秘的面纱,让大家可以用zigbee协议编制属于自己的程序,这次实验只是串口发送数据,并没有进行无线的数据传输,为的是使大家 ...
- 实验楼实验——LINUX基础入门
第一节 Linux简介 一.Linux的历史: 1965 年,Bell 实验室.MIT.GE(通用电气公司)准备开发 Multics 系统,为了同时支持 300 个终端访问主机,但是 1969 年失败 ...
- 基于 REST 的 Web 服务:基础
代表性状态传输(Representational State Transfer,REST)在 Web 领域已经得到了广泛的接受,是基于 SOAP 和 Web 服务描述语言(Web Services D ...
随机推荐
- input输入框限制仅能输入数字且规定数字长度(使用与输入手机号)
现在越来越多的账户名使用手机号来登录,为了减少前后端的交互,需要用户在输入时就要进行格式的判断, 目前的常规办法是,在输入完成后进行判断. 下面的方法是在输入时就规定只能输入数字,其他格式的字符是无法 ...
- SharePoint 2013 图文开发系列之计时器任务
SharePoint的计时器任务,又称TimerJob,由服务里的Timer服务执行,在管理中心管理,是一个类似于Windows任务计划的功能,方便定时执行一些需要的功能,以免影响服务器性能. 在Sh ...
- 解决xcode升级之后安装的插件失效
title: 解决xcode升级之后安装的插件失效date: 2015-08-23 11:07:53categories: 编辑工具 tags: xcode 我的博客:http://daycoding ...
- iOS Class 使用NSProxy和NSObject设计代理类的差异
经常发现在一些需要使用消息转发而创建代理类时, 不同的程序员都有着不同的使用方法, 有些采用继承于NSObject, 而有一些采用继承自NSProxy. 二者都是Foundation框架中的基类, 并 ...
- 敏捷开发与jira
项目背景 项目是基于一套公司自主研发的平台做企业信息化的项目管理业务,经过两个里程碑的交付,已经在客户现场使用,每次版本都能按期交付,延迟较少,客户满意度也高. 项目开发过程采用的敏捷的方法,用类Sc ...
- 利用split
java.lang.string.splitsplit 方法将一个字符串分割为子字符串,然后将结果作为字符串数组返回.stringObj.split([separator,[limit]])strin ...
- Java中GC的工作原理
转文: 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率,才能提高整个 ...
- 此实现不是 Windows 平台 FIPS 验证的加密算法的一部分的解决办法方案
最近操作系统不断地报异常或错误,可能是用得太久了,而刚好工作比较多又不想重新安装系统,但用一段时间后(一天大概有两次)系统就出现各种问题导致无法继续使用真是痛苦万分啊,今天又来了这样的错误: 此实现不 ...
- SortedMap基本特性
特性: 继承与Map. 提供对key(自然排序顺序或者SortedMap创建时提供的Comparator)的全排序. key必须实现Comparable接口,以便于进行相互比较. 应用于对map的遍历 ...
- Zend Studio安装详解
本篇文章介绍Zend Stuido安装 PHP安装请参考 http://www.cnblogs.com/azhe-style/p/php_new_env_build.html 一.下载 百度Zend ...