当前位置:首页 > 新闻资讯 > FPGA之家动态 >

OpenCL浅析(1)-GPU和FPGA平台搭建

时间:2025-04-16      来源:FPGA_UCY 关于我们 0

简介

是由非盈利性组织 Group组织发布的针对异构设备进行并行化计算的一套开源的API以及程序语言。

它提供两种并行化的模式,包括任务并行以及数据并行,目前针对GPU的引用,主要是以数据并行为主。 API是按照 C API定义的,由C和C++封装而成。使用 C语言编写的代码可以在支持的设备上运行。 C是C99语言的子集,并适当地扩展到众多异构设备上执行数据并行代码的能力。

所谓异构设备,就是指底层硬件架构有较大不同的设备,比如CPU与GPU,FPGA(可编程门阵列),CPU中负责分支预测及跳转的控制单元和cache占据较大的面积,而ALU(算术逻辑单元)占据的比重远远小于GPU中的ALU面积比重,换句话说,CPU强于控制,弱于计算,而GPU强于计算,弱于控制。

FPGA开发_开发fpga芯片一个月多少钱_开发fpa

上图中,绿色部分是逻辑计算单元,红色的存储单元,橙黄色的是控制单元。

而FPGA近几年在深度学习、数据中心的部署,让它渐渐崭露头角。它的内部结构不像CPU和GPU那样把电路结构固化在芯片中,而是由LUT(查找表)、寄存器等基本器件构成,然后通过内部密集的互联线连接到IO。使用时,通过USB接口向设备传输一个二进制文件(位流),将其内部基本器件集合设置成针对某个应用的具体的电路结构。简单来讲,这相当于FPGA内部有数量及其庞大的开关,然后我们输入一股有规律的电流,将涉及到的开关拉高,并且暂时固定位置,而一旦开关都设置好以后,电路可以执行一定的功能。

开发fpga芯片一个月多少钱_FPGA开发_开发fpa

现在的主流的两大FPGA厂商Intel(本质上是,被Intel收购了)和,他们都提供了针对标准开发的软件套件,目的就是避开传统FPGA开发中,使用硬件描述语言(或VHDL)开发中周期长、流程复杂的缺点,使用高级语言(例如C语言)开发FPGA应用,降低了使用FPGA开发的门槛。

基本上,现在主流的异构计算架构都是主-从架构,主机通常是CPU,而从设备是GPU或FPGA,二者通过PCIe接口通信。

开发环境安装

平台和设备

一个平台通常对应一个供应商。它负责为其设备提供实现。例如,具有i7-4790 intel cpu的机器将会有一个平台,大概命名为“intel ”,该平台将包括两个设备:一个是intel cpu本身,另一个是intel hd 4600 GPU。这个“intel ”平台正在为这两个设备提供实现,并负责管理它们。

让我们再来一个例子,但这次是从生态系统外面。运行os x的和intel iris pro gpu和专用的卡都将显示一个名为“apple”的平台。两个gpus和cpu将显示为属于此平台的设备。这是因为“苹果”平台是为所有三种设备提供实现的平台

但请记住:

1、平台可以有一个或多个设备。

2、相同的设备可以具有来自不同供应商的一个或多个实现。换句话说,设备不仅可以属于一个平台。

3、该平台的版本不一定与设备的版本相同。

ICD和ICD

1、icd(可安装的客户端驱动程序),它是针对某个特定设备的专门的实现,也就是运行时。可以在.so/dll或.so/dll这样的文件中找到它。它是指允许多个平台共存的模型。它并不是核心功能,而是的扩展。

2、icd (在.dll / .so中): (ICD) 是实现应用程序与各硬件厂商提供的驱动()之间隔离的中间库。它用于管理同一系统中的多个icds

icd只是一个可选的扩展,标识符是。当你安装了某个厂商的SDK,就会在操作系统的注册表上添加相应的注册表项。 icd 允许应用程序调用HR函数获取所有已经安装的平台的列表,从中选择一个平台,并将 api调用发送到底层实现。 注册表中提供了icd加载程序库的源代码。

注意,一台机器可以有几个平台,每个平台都有自己的驱动程序和版本,总是只有一个icd加载程序。 icd加载器充当所有安装的平台的主管,并为所有调用提供了唯一的入口点。基于平台ID,它将主机调用分配到正确的驱动程序。

这样你就可以编译icd(上的.dll或者linux上的.so),而不是直接给所有可能的驱动程序编译。在运行时,应用程序将搜索icd并加载它。 icd依次在注册表()或特殊目录(linux)中查找注册的驱动程序。您的软件的每个调用将由icd解决,这将进一步调度请求到所选的平台。

ICD 在上如何枚举?

在上,和厂商想关的库文件是设定在注册表中的。ICD 会扫描注册表项\\\\的值,当DWORD中的每个值都为0时,ICD 打开由名称指定的动态链接库,使用的值。例如,如果注册表[\\\\]包含下列值"c:\\ a\\.dll"=dword:,那么ICD 将打开"c:\ a\.dll"库文件

添加

在成功加载了一个厂商ICD库后,ICD 会从库文件中查询下列函数HR, , 和.如果其中任意一个函数不存在,则ICD 会关闭并且忽略这个厂商的ICD库。

接下来,ICD 查询可用的ICD- 平台,这个过程使用库中的HR函数。 对于每一种平台上,ICD加载器查询 平台的扩展字符串来验证的 支持,然后使用函数查询平台的厂商ICD扩展后缀 ,函数使用参数, 如果其中任何一个步骤失败,ICD 将忽略 厂商ICD并继续到下一个。

配置 开发环境: AMD GPU平台

说明,以下的是针对Win7 AMD APP SDK 2.9版本的开发环境搭建

1、环境变量

安装完AMD APP SDK 2.9后,系统会自动添加$()环境变量,值是安装时指定的路径。

2、添加头文件

在项目->属性->配置属性->C/C++->附加包含目录中添加

$()/

(C:\Users\\AMD APP SDK\2.9-1\和C:\Users\\AMD APP SDK\2.9-1\\可添可不添)

3、添加库目录

在项目->属性->配置属性->链接器->附加库目录中添加

$()\lib\x86(win32项目配置)或:\$()\lib\(x64项目配置)

4、添加库输入

使用AMD SDK平台时,需要配置.lib文件,具体方法:项目->属性->配置属性->连接器->输入->附件依赖库->编辑,添加.lib

5、主机代码

在主机程序代码中添加#

Intel FPGA平台

说明,以下的是针对Win7 14.0版本的开发环境搭建

安装顺序:Intel FPGA -> Intel FPGA SDK for ->FPGA PCIe 驱动 -> 2012 ->

Intel FPGA 和Intel FPGA SDK for 下载地址

注意:Intel FPGA SDK for 需要,不然无法编译内核设计文件。同时,把相应开发板的BSP(板级开发包),复制到Intel FPGA 的目录下。BSP里面包含FPGA板子.xml描述文件,这个文件指出设备的名字、链接器输入库的名字以及相应驱动程序所在目录等信息。

1、环境变量

安装完Intel FPGA 和Intel FPGA SDK for 后,环境变量中会自动添加 ,其值为相应平台安装后的路径。另外,还需要添加OOT 这个环境变量,它的值为相应BSP的路径

2、设置解决方案的配置

因为 Intel 的 只支持 64 位的系统,所以在这里没有了 32位和 64 位之分,项目->属性->活动解决方案平台->新建->键入或选择新平台,选择 x64 作为当前解决方案的平台。

3、添加头文件

在项目->属性->配置属性->C/C++->附加包含目录中添加

$()\host\

4、添加库目录

在项目->属性->配置属性->链接器->附加库目录中添加

$()\host\\lib 和$(OOT)\\\lib

5、添加库输入

项目->属性->配置属性->连接器->输入->附件依赖库->编辑,添加

alterahalmmd.lib
terasic_apb_14_0_mmd.lib
alteracl.lib
acl_emulator_kernel_rt.lib
pkg_editor.lib
libelf.lib
acl_hostxml.lib

至此,面向的软件开发平台安装完成~


注明:本内容来源网络,不用于商业使用,禁止转载,如有侵权,请来信到邮箱:429562386ⓐqq.com 或联系本站客服处理,感谢配合!

用户登陆

    未注册用户登录后会自动为您创建账号

提交留言