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加速器,有兴趣的童鞋可以进一步交流。 码字不易,申请加精。 (完结) |
Powered by Discuz! X3
© 2001-2013 Comsenz Inc.