|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
今天给大侠带来Intel altera opencl 入门,话不多说,上货。
- c$ a9 L* z/ ? \$ A- C1 R; t% U$ T9 I: k6 {+ _* ^
1 n a! W/ H' b
概述 . A' \ R* D" ?2 o. {8 g1 c
* [: ^! M. W! g# o* ^2 o
: B3 h* \) O' R* b9 `+ `
Intel altera 的 OpenCL 主要面向信号处理类应用的客户,是用C语言开发FPGA的利器,开放计算语言(OpenCL)联盟著名的公司有 FPGA巨头Intel altera、两大显卡GPU巨头AMD和英伟达、CPU巨头Intel、软件和服务器巨头IBM以及全世界最大的公司Apple(苹果)等等。不过AMD和英伟达是用GPU实现的OpenCL并行运算,Intel altera是用FPGA实现并行运算。
5 V8 T9 R5 U. S0 s& R# R5 W( u, _* r
0 K9 c$ L' n# m5 J7 r" O4 e! w& F1 V/ A- Y) ?
2 C1 ^; l& N7 n/ ?
1. 系统要求+ k8 g% n- H0 U0 S$ i! Y
Microsoft 64-bit Windows 7专业版或者更高。' m+ f! ]% g6 L: `: Y
对于Windows操作系统, 要安装微软公司的Visual Studio 2010或者2012专业版(推荐)。; E$ a6 j; k5 g! e E% A, | n( y
; x9 C& i( @8 c3 U! p4 {
" o5 v! j3 p2 w; C 或者:
. S( |0 g: Q4 c* `. o
1 \6 N& p; p' ?- U2 k9 i a. z9 S3 n3 k, }3 C P2 m
Red Hat Enterprise 64-bit Linux (RHEL) 5或者6。& ~3 Y1 x7 t; D9 R
对于Linux操作系统, 安装操作系统过程中要把C编译器包括GCC勾选上。/ H. k8 g Y; f: @
! z/ j9 b4 p- C, r3 N! z2 N2 X2 P
; Q2 l. H1 |0 n
2.安装Altera的软件和搭建OpenCL环境(以Windows为例,Linux也类似):
5 T5 ?* J# X9 g! d9 J! h+ _- B# Y9 X- @8 T8 ~
安装Quartus II 13.1 Update4(或者14.0)•安装Altera OpenCL 13.1 Update4(AOCLSetup-13.1.4.182.exe)(或者14.0): C% `1 P4 R& P! O$ t
9 f6 s& L8 w5 }9 j- j
, m v7 J2 t8 P: ?+ u) t设置环境变量(基于默认的安装路径):
( J% U/ h8 b) {
9 K5 G: A1 ]- s6 O变量和值如下:ALTERAOCLSDKROOT和C:\altera\13.1\hld(或者C:\altera\14.0\hld)4 q. e) c0 F9 @) _8 v! `
PATH和C:\altera\13.1\hld\windows64\bin(或者C:\altera\14.0\hld\bin;C:\altera\14.0\hld\host\windows64\bin)
. p3 a7 |6 K8 L @( e2 h4 {LM_LICENSE_FILE和c:\altera\license.dat7 n- @/ T4 M2 V9 W6 C
7 p3 M# b& F4 ]
参考下图:
- C+ ]! v* i) k6 Q! Q7 e
" {( o, ~9 ]' [3 z2 Q4 d
6 u& W! D" a6 H5 b( T. b: J' y
2 \) R) J9 S% M: {% y! @0 l8 u( D; O! h3 R4 z x7 d$ s; q- @
. h1 U. @, O$ u) _3 A. }& O
+ }3 r( j% y1 P$ [! O: m: h `+ S2 r& R, _9 R4 c
. v( ~. @8 t9 M
9 G* }) K2 p0 h4 Y/ F! e3 V( Z0 y9 b3 s
然后在命令行里面运行where aoc,测试一下软件是否安装正确以及环境变量是否设置正确,如果正确,如下图;如果不正确,修改错误再来。
% W; t; U' j* R$ {% Y ]/ u8 h% N
! d& v7 Y1 H g8 Y
2 H6 x5 }& j; V1 E8 y
- T }" @9 W4 c% r6 |* |9 Q1 d: Q; `1 r; Q6 z* e, `& S {1 B; R
或者(14.0)
+ a) j3 {9 g, k5 N* @! F# O
6 A" d( y- ]7 u4 Y
# }9 F! H% m" ? R) Y
9 h4 u8 N* S F2 L# Z* d2 [; v- k0 `7 ~- z# N
9 h" L/ R: K! {! X0 V6 X5 f
3.开发板环境的安装和测试(以台湾友晶的DE5-Net开发板为例,不过没有开发板也可以,开发板不是必需的):
1 L* _! `+ g& V4 r! D0 N
9 o% L, ]3 @) b0 ~. a1). 准备工作:下载DE5-Net开发板的全套软件安装包,http://www.terasic.com/downloads ... 5NET_openCL_BSP.zip 136MB,把里面的terasic文件夹解压缩到C:\altera\13.1\hld\board\下。
" l1 X. y+ ? `7 n. F3 R% v6 B/ J2 H: T: N# }# q
设置DE5-Net开发板的环境变量:; U% n2 H f' U; J) L" v
2 l- k3 n2 _! s) S! Z8 i变量和值如下:# r& @: [3 |# _0 v1 I
AOCL_BOARD_PACKAGE_ROOT和C:\altera\13.1\hld\board\terasic\de5net参考下图:
9 y5 J8 H/ n: \2 y1 U3 ?; h% e$ L, f8 s; k9 s. p' d
9 y8 M/ U6 ]2 X, |; o
& ^! o0 y1 L" N: N7 J9 E
( e7 X5 y9 y P& p' ]然后在命令行里面运行aocl install来安装开发板驱动。# Q) n# v5 l' E- K9 S* y
$ X/ S4 J( E" \% e2 L' A# L% d
关闭你的PC,安装和连接开发板硬件后,重新开机,在命令行里面运行aoc --list-boards,如果硬件安装连接成功,会显示开发板名字de5net_a7,如果开发板不存在,显示none found。
* G, X* @2 W @ L2 H- t/ K7 T) A3 b4 i9 I% _5 r# P
2). 测试开发板:" O! V1 X8 W% M
& h5 n" s9 U5 |在命令行里面运行 cd C:\altera\13.1\hld\board\terasic\tests\blank,运行aocl program blank.aocx,如果开发板已经安装连接好,aocx里面的sof文件会通过PCI-E接口下载,并且会返回成功的信息,如果开发板不存在或者没有安装连接好,会自动解压缩出reprogram_temp.sof,用户可以通过USB下载电缆去下载。) n' i, Z: g) o. ^( ^9 @* c; z+ ]4 V
! X2 q, W* z' u备注:没有开发板的客户可以在设置环境变量后跳过后面的步骤,继续。! C. v! r: S) p3 p4 j" s
; W( \; A. z: b2 n( P
, X. W7 m6 i* \9 {" X; w% T4.编译和测试OpenCL工程:# a& z+ @2 _! u
9 A% }3 W6 M1 c. f9 J
7 y) h4 T# [4 |4 S/ Y1). 编译OpenCL工程:在命令行里面运行cd C:\altera\13.1\hld\board\terasic\tests\boardtest进入工程文件夹,运行aoc boardtest.cl --sw-dimm-partition开始编译,编译时间大约1个小时,最终产生的boardtest.aocx里面包含了sof文件,可以给开发板编程进去。
4 \$ N& A% _, X0 N0 T! C
5 k, G0 x8 o$ ^5 g, W2). 测试OpenCL工程(通过开发板):0 A3 i# J+ y2 f( i U( z2 `9 u$ D
3 C+ O9 p7 i) X; Z7 M0 W. m6 w在命令行里面运行 cd C:\altera\13.1\hld\board\terasic\tests\blank,运行aocl program boardtest.aocx,如果开发板已经安装连接好,aocx里面的sof文件会通过PCI-E接口下载,并且会返回成功的信息,如果开发板不存在或者没有安装连接好,会自动解压缩出reprogram_temp.sof,用户可以通过USB下载电缆去下载。: ?) P' l, U; t: _
+ v2 X+ Y0 G: J! C
提示:没有开发板的客户可以跳过上面的步骤,直接编译下面不需要开发板的例子,有开发板的客户可以直接到第五步:8 Q& L5 S# v c. D) N
下面完全脱离真实的开发板来运行Cytech_C5SOC.zip:. I+ a" d: F5 u/ R! f( @! P
6 o4 R( _% f- e2 K
) J( K5 d/ l& m
2 S! L6 s6 @4 c" ]/ Q$ g& x1 |/ d* j8 F2 |8 z. H. Z1 a) K' I" w
6 _: D6 S( u6 C( Y
设置“虚拟”板的环境变量(替换原来的环境变量):; i9 ~7 e( m, I' N
( F3 }0 x+ i3 S& k- a3 F7 B* x; Z. y
变量和值如下:
+ F! y) z$ p& T# [1 S( N0 R5 W0 Z& P) K+ B B
AOCL_BOARD_PACKAGE_ROOT和 C:\altera\13.1\hld\board\Cytech_C5SOC
1 q3 c1 {! o# @$ w参考下图:
. O1 l1 Z' C& T5 \" A# K
4 u/ A1 Y1 P6 J+ u. [
' G' m$ K8 @/ }; h$ ]3 V- V
M' s; U3 v( q
/ L0 y* Z4 S; G
' F; i3 Q+ j, w) x, r1 K' h+ r2 z5 b( n
解压缩Cytech_C5SOC.zip里面的内容到C:\altera\13.1\hld\board\(也可以是其它文件夹),把例子exm_opencl_hello_world_windows64.zip里面的hello_world.cl也复制到这个文件夹下,在命令行里面运行cd C:\altera\13.1\hld\board\,运行aoc hello_world.cl开始编译。----因为Cyclone V SOC的5CSXFC6容量比Stratix V的5SGSMD5小几倍,所以编译时间只有20分钟左右,最终产生的hello_world.aocx里面包含了sof文件,同时也产生了转换后的.V源码和整个编译后的Quartus II完整工程,包括大量的底层配套的各种IP源码。
1 ^3 \4 i* z5 |( O" }4 E) Q8 S9 j( A. c
2 ^, w3 ^- `6 O% V再演示3个不同的例子,分别是vector_add、matrix_mult和FFT,也是完全脱离真实的开发板来运行:* j0 C4 W0 E8 H+ ?
: B- U. k7 F |
- Z! E( k" A4 L! z; G8 S; r* r: D' ?+ c, _- G
不改变上面“虚拟”板的环境变量,目的是继续使用Cyclone V SOC的5CSXFC6,可以产生为这个系列优化的源码。( S9 w$ l- S& |' c
8 W1 b' Q" b/ r) p6 ?4 f1 v1 Q4 v
% u' t% }3 f) i _9 T分别解压缩3个zip例子到C:\altera\13.1\hld\board\(也可以是其它目录),然后分别在在命令行里面:
5 ^+ d5 ?& K4 `* U4 ~* h* A
* d8 u4 z) A, o1 w1.运行cd C:\altera\13.1\hld\board\vector_add\device,然后运行aoc vectorAdd.cl开始编译。
: T z! j0 \, J5 \2.运行cd C:\altera\13.1\hld\board\matrix_mult\device,然后运行aoc matrix_mult.cl开始编译。* o! V9 Y9 L+ C8 W4 Z z
3.运行cd C:\altera\13.1\hld\board\fft1d\device,然后运行aoc fft1d.cl开始编译。
# r0 O* r3 n/ [) [6 H0 X8 y: t% R0 Z: Y$ h- l
3个例子之间没有任何联系,可以单独运行,如果你的PC内存足够大,可以一起运行。
" L6 o1 T9 D) v
; \6 z- D# X5 U4 e 在产生的不同Quartus II工程中,可以找到matrix_mult.v、vectorAdd.v和fft1d.v这些转换出的源码。特别注意的是,这些最终的源码是acl_kernel_inteRFace接口,这种接口比较简单,和FIFO差不多,只不过多了几个启动结束控制线,如start,valid等等。
% Z/ L7 y4 b$ h7 A$ s# i' I* Q& L" L
备注:大家可以把这些源码复制到自己的工程中和自己写的其它逻辑模块连接起来即可。如果想产生基于Stratix V器件优化的源码,可以在环境变量的路径中把台湾友晶的DE5-Net开发板作为虚拟板(也就是恢复第三步的环境变量),然后编译cl文件即可。6 e# E! }- h. z) c9 ?3 Q
i9 A4 E% b \6 ?9 k! x
; X. L& Q7 j+ H! {- B- {
: h. C- ]+ S" x1 Z, w# t8 T; \5.编译Host程序:( g# o! C x: J! n- z
% J2 z# t3 ]% b/ ?9 f 启动Visual Studio 2012,点击“文件打开项目”,选择C:\altera\13.1\hld\board\terasic\tests\boardtest\host\boardtest.sln(或者直接在硬盘上双击这个sln文件,VS 2012会自动完成上述步骤),然后点击“生成生成解决方案”,最后在……\host\x64\Release\下产生了boardtest.exe,不过这个exe不能运行,因为缺少几个dll文件,把C:\altera\13.1\hld\windows64\bin\下的所有的6个dll文件复制过来,和这个exe放在同一个文件夹下就可以运行了。
4 d: m2 K' q, w2 I; ]( \8 w9 x. X* d
9 k* [1 Z% J! w# o
备注:没有开发板的客户可以跳过上面这个步骤。: V; O- x* U+ x- j- r; n+ A
+ i- [1 _/ ?( V! h' L4 R, ~) M# F( v- K; b
6.查看结果:3 N8 {: N7 K2 G1 S! y
. R! l2 Q0 o- ?5 }: F( X9 [
; M0 { O8 l9 N7 ]' d6 _ N* V 把第四步产生的aocx文件下载到开发板,成功后会返回信息,然后运行第五步产生的exe即可在PC屏幕上看到开发板返回的最终结果。) k, b, K" b3 D M$ |2 E7 I' I' \
# O+ K O) @! I9 \6 ?
h ?' f# M5 D/ z4 z
备注:没有开发板的客户可以跳过上面这个步骤。
3 D+ `7 W0 M5 Z' e没有开发板的客户只需要走1、2、4步即可。
8 l i. O* A8 H& P0 M& n( X参考资料、例子和其它:) ]# N. W1 c# b! c
8 k7 k6 j7 u2 W4 C: D, h) ?" E. A6 D |) W- q; W
1.参考资料:http://www.altera.com.cn/product ... l/opencl-index.html9 H, k6 U% J5 E
网页最下面3个入门文档: \/ \( G0 T" m; X4 V
面向OpenCL的Altera SDK开始设计:aocl_getting_started.pdf
c- }$ ~2 e, h& U面向OpenCL的Altera SDK编程指南:aocl_programming_guide.pdf
% L/ {! g6 D8 \- u u/ x$ o* `面向OpenCL的Altera SDK优化指南:aocl_optimization_guide.pdf
) j$ }" r1 i0 v2 T( p" B其中13.1版本对应的aocl_getting_started.pdf第8页是错的,PATH应该是C:\altera\13.1\hld\windows64\bin,14.0里面改正了。* J7 L6 S5 f7 ~3 U
L% G; b8 S6 w: q/ o1 V- e! z7 q
5 C- M4 E/ d! r( m2.Altera目前有13个OpenCL的例子在http://www.altera.com.cn/support/examples/opencl/opencl.html 里面,上面第4步用到的exm_opencl_hello_world_windows64.zip例子就来自于这个网页。- b0 Z8 g1 b- w5 |3 f; `
$ p8 _2 j, _' c c
4 a! z4 d3 j( ?* P$ d
3.Cl文件是OpenCL的源码文件,aocx是cl文件编译后的编程文件,里面包括sof文件。PC机那边的Host软件不是必需的,做host软件仅仅是为了和开发板通信来获取开发板运行openCL的信息。没有开发板的用户只要写一个cl文件然后自己建立一个Quartus II工程就可以编译了,最后产生了转换后的.V源码和整个编译后的Quartus II完整工程,包括大量的底层配套的各种IP源码。" H$ f* G0 _1 N8 {
$ \4 m H5 s: z' i4.因为事先设置了环境变量的缘故,所以cl文件放到任何路径下都可以编译,编译后会在cl文件所在的文件夹里面产生完整的Quartus II整个工程,里面就有转换后的.v文件。, |# P% q1 r8 Z) [" C* g
* @, I; n( R* [9 `- x! T) @5 ]3 _" G
|
|