|
3#

楼主 |
发表于 2015-7-23 09:40:40
|
只看该作者
Open CL编译输出报告中给出了资源占用情况:
+--------------------------------------------------------------------+
; Estimated Resource Usage Summary ;
+----------------------------------------+---------------------------+
; Resource + Usage ;
+----------------------------------------+---------------------------+
; Logic utilization ; 83% ;
; Dedicated logic registers ; 46% ;
; Memory blocks ; 57% ;
; DSP blocks ; 25% ;
+----------------------------------------+---------------------------;
可见,逻辑资源、存储器资源消耗较为明显,而DSP资源并未用尽,说明还有优化的空间。
编译主程序需要使用SoCEDS,我用的版本为14.0.2.274,也是命令行方式,在工程目录下执行make,结束后得到可执行文件cnn。
将这两个文件拷贝到SD卡,按照前面的博客对板子进行设置,将CNN的模型、CIFAR10数据也拷贝到SD卡中,板子上电,mount SD卡到/mnt,执行cnn,得到输出如下:
<div class="blockcode"><blockquote>Please input the number of images(1~100):100
Loading data...OK!
Constructing CNN...OK!
Begin calculation...Elapsed Time = 141.861 s.
Real Label = 3(cat), Calc Label = 3(cat), error count = 0
Real Label = 8(ship), Calc Label = 8(ship), error count = 0
Real Label = 8(ship), Calc Label = 8(ship), error count = 0
Real Label = 0(airplane), Calc Label = 0(airplane), error count = 0
Real Label = 6(frog), Calc Label = 6(frog), error count = 0
Real Label = 6(frog), Calc Label = 6(frog), error count = 0
Real Label = 1(automobile), Calc Label = 1(automobile), error count = 0
Real Label = 6(frog), Calc Label = 6(frog), error count = 0
Real Label = 3(cat), Calc Label = 3(cat), error count = 0
Real Label = 1(automobile), Calc Label = 1(automobile), error count = 0
Real Label = 0(airplane), Calc Label = 0(airplane), error count = 0
Real Label = 9(truck), Calc Label = 9(truck), error count = 0
Real Label = 5(dog), Calc Label = 5(dog), error count = 0
Real Label = 7(horse), Calc Label = 7(horse), error count = 0
Real Label = 9(truck), Calc Label = 9(truck), error count = 0
Real Label = 8(ship), Calc Label = 8(ship), error count = 0
Real Label = 5(dog), Calc Label = 5(dog), error count = 0
Real Label = 7(horse), Calc Label = 7(horse), error count = 0
Real Label = 8(ship), Calc Label = 8(ship), error count = 0
Real Label = 6(frog), Calc Label = 6(frog), error count = 0
Real Label = 7(horse), Calc Label = 7(horse), error count = 0
Real Label = 0(airplane), Calc Label = 2(bird), error count = 1
Real Label = 4(deer), Calc Label = 4(deer), error count = 1
Real Label = 9(truck), Calc Label = 9(truck), error count = 1
Real Label = 5(dog), Calc Label = 4(deer), error count = 2
Real Label = 2(bird), Calc Label = 3(cat), error count = 3
Real Label = 4(deer), Calc Label = 4(deer), error count = 3
Real Label = 0(airplane), Calc Label = 0(airplane), error count = 3
Real Label = 9(truck), Calc Label = 9(truck), error count = 3
Real Label = 6(frog), Calc Label = 6(frog), error count = 3
Real Label = 6(frog), Calc Label = 6(frog), error count = 3
Real Label = 5(dog), Calc Label = 5(dog), error count = 3
Real Label = 4(deer), Calc Label = 4(deer), error count = 3
Real Label = 5(dog), Calc Label = 5(dog), error count = 3
Real Label = 9(truck), Calc Label = 9(truck), error count = 3
Real Label = 2(bird), Calc Label = 3(cat), error count = 4
Real Label = 4(deer), Calc Label = 7(horse), error count = 5
Real Label = 1(automobile), Calc Label = 9(truck), error count = 6
Real Label = 9(truck), Calc Label = 9(truck), error count = 6
Real Label = 5(dog), Calc Label = 5(dog), error count = 6
Real Label = 4(deer), Calc Label = 4(deer), error count = 6
Real Label = 6(frog), Calc Label = 6(frog), error count = 6
Real Label = 5(dog), Calc Label = 5(dog), error count = 6
Real Label = 6(frog), Calc Label = 6(frog), error count = 6
Real Label = 0(airplane), Calc Label = 0(airplane), error count = 6
Real Label = 9(truck), Calc Label = 9(truck), error count = 6
Real Label = 3(cat), Calc Label = 5(dog), error count = 7
Real Label = 9(truck), Calc Label = 9(truck), error count = 7
Real Label = 7(horse), Calc Label = 7(horse), error count = 7
Real Label = 6(frog), Calc Label = 6(frog), error count = 7
Real Label = 9(truck), Calc Label = 9(truck), error count = 7
Real Label = 8(ship), Calc Label = 8(ship), error count = 7
Real Label = 0(airplane), Calc Label = 2(bird), error count = 8
Real Label = 3(cat), Calc Label = 3(cat), error count = 8
Real Label = 8(ship), Calc Label = 8(ship), error count = 8
Real Label = 8(ship), Calc Label = 8(ship), error count = 8
Real Label = 7(horse), Calc Label = 7(horse), error count = 8
Real Label = 7(horse), Calc Label = 7(horse), error count = 8
Real Label = 4(deer), Calc Label = 3(cat), error count = 9
Real Label = 6(frog), Calc Label = 3(cat), error count = 10
Real Label = 7(horse), Calc Label = 7(horse), error count = 10
Real Label = 3(cat), Calc Label = 5(dog), error count = 11
Real Label = 6(frog), Calc Label = 6(frog), error count = 11
Real Label = 3(cat), Calc Label = 3(cat), error count = 11
Real Label = 6(frog), Calc Label = 6(frog), error count = 11
Real Label = 2(bird), Calc Label = 2(bird), error count = 11
Real Label = 1(automobile), Calc Label = 1(automobile), error count = 11
Real Label = 2(bird), Calc Label = 2(bird), error count = 11
Real Label = 3(cat), Calc Label = 3(cat), error count = 11
Real Label = 7(horse), Calc Label = 9(truck), error count = 12
Real Label = 2(bird), Calc Label = 2(bird), error count = 12
Real Label = 6(frog), Calc Label = 6(frog), error count = 12
Real Label = 8(ship), Calc Label = 8(ship), error count = 12
Real Label = 8(ship), Calc Label = 8(ship), error count = 12
Real Label = 0(airplane), Calc Label = 0(airplane), error count = 12
Real Label = 2(bird), Calc Label = 2(bird), error count = 12
Real Label = 9(truck), Calc Label = 0(airplane), error count = 13
Real Label = 3(cat), Calc Label = 3(cat), error count = 13
Real Label = 3(cat), Calc Label = 2(bird), error count = 14
Real Label = 8(ship), Calc Label = 8(ship), error count = 14
Real Label = 8(ship), Calc Label = 8(ship), error count = 14
Real Label = 1(automobile), Calc Label = 1(automobile), error count = 14
Real Label = 1(automobile), Calc Label = 1(automobile), error count = 14
Real Label = 7(horse), Calc Label = 7(horse), error count = 14
Real Label = 2(bird), Calc Label = 2(bird), error count = 14
Real Label = 5(dog), Calc Label = 7(horse), error count = 15
Real Label = 2(bird), Calc Label = 2(bird), error count = 15
Real Label = 7(horse), Calc Label = 7(horse), error count = 15
Real Label = 8(ship), Calc Label = 8(ship), error count = 15
Real Label = 9(truck), Calc Label = 9(truck), error count = 15
Real Label = 0(airplane), Calc Label = 0(airplane), error count = 15
Real Label = 3(cat), Calc Label = 4(deer), error count = 16
Real Label = 8(ship), Calc Label = 8(ship), error count = 16
Real Label = 6(frog), Calc Label = 6(frog), error count = 16
Real Label = 4(deer), Calc Label = 4(deer), error count = 16
Real Label = 6(frog), Calc Label = 6(frog), error count = 16
Real Label = 6(frog), Calc Label = 6(frog), error count = 16
Real Label = 0(airplane), Calc Label = 2(bird), error count = 17
Real Label = 0(airplane), Calc Label = 0(airplane), error count = 17
Real Label = 7(horse), Calc Label = 7(horse), error count = 17
Classify Score = 83 %.
上面的执行流程是这样的,首先输入测试样本数目(1到100),由于DE1板子FPGA端SDRAM容量较小,难以加载全部测试数据(10000张图片),故每次最多装入100张图片。之后载入数据到HPS内存,然后开始构建CNN模型,构建过程中也实现了Open CL的初始化。构建完毕,将输入图像依次通过CNN,得到一系列分类结果,与标签进行对比,统计错误分类个数,计算分类准确率。
经过测试,分类准确率达到83%,与Caffe测试结果一致。
经过以上测试,可以得到结论:
(1)使用Open CL可以很方便地移植高级语言编写的算法;
(2)CNN在移植过程中需要考虑实际硬件,定制合适的模型和数据;
(3)Cyclone 5逻辑资源较少(85K,Open CL kernel占用了83%),如果希望进一步提高计算速度,一方面可以选用高性能器件(如Stratix V、Arria 10),另一方面可以使用RTL自己搭建计算系统。
我目前正在Stratix V上用RTL搭建并行+流水线CNN加速器,有兴趣的童鞋可以进一步交流。
码字不易,申请加精。
(完结) |
|