9.4 性能分析
为了展示不同的内核实现对于性能的影响,我们将这些内核都在Radeon HD 7970 GPU上执行了一遍。为了展示对不同数据大小的性能优化,我们也生成除了对应的SURF描述符和集群质心。生成的SURF描述符数量为4096,16384和65536。同时,对应质心的数量为16,64和256。我们选取数量较大的SURF特征,是因为对于一张高分辨率的图来说,通常都包含成千上万个特征。不过,对于质心来说其数量就相对较少,如果质心的数量过多会影响图像分类的准确度。
这里的性能数据是由相应的性能分析工具给出,这里我们使用了AMD公司的CodeXL,第10章中我们会对该工具进行介绍。本章主要描述对于OpenCL内核代码进行优化后的性能情况。这里还需要注意的是,目标平台的架构对于优化代码来说也有很大的影响。
9.4.1 GPU性能
我们将GPU1内核作为OpenCL内核实现的基线。在使用GPU2处理描述符和质心前,我们是用到了矩阵转置对描述符进行了转置操作。转置操作属于另外一个内核,为了避免这个因素影响我们之后优化的内核,这里将转置的时间单独列出来,在表9.1中展示。那么第二个内核,也就是直方图内核的性能数据在表9.2中展示。
表9.1 转置内核执行的时间
特征数量 | 转置内核耗时(ms) |
---|---|
4096 | 0.05 |
16,384 | 0.50 |
65,536 | 2.14 |
表9.2 直方图——不同内核实现的耗时统计
集群数量 | SURF描述符数量 | GPU1 | GPU2 | GPU3 | GPU4 | GPU5 |
---|---|---|---|---|---|---|
8 | 4096 | 0.41 | 0.27 | 0.10 | 0.17 | 0.09 |
8 | 16,348 | 3.60 | 0.28 | 0.17 | 0.69 | 0.19 |
8 | 65,536 | 15.36 | 1.05 | 0.59 | 1.31 | 0.74 |
16 | 4096 | 0.77 | 0.53 | 0.19 | 0.28 | 0.14 |
16 | 16,348 | 7.10 | 0.53 | 0.32 | 0.57 | 0.29 |
16 | 65,536 | 30.41 | 1.47 | 1.17 | 2.26 | 1.12 |
64 | 4096 | 6.00 | 3.53 | 1.34 | 1.00 | 0.43 |
64 | 16,348 | 28.28 | 2.11 | 1.20 | 2.96 | 0.86 |
64 | 65,536 | 122.09 | 5.80 | 4.65 | 9.04 | 3.87 |
128 | 4096 | 4.96 | 4.04 | 1.47 | 1.95 | 0.81 |
128 | 16,348 | 55.70 | 4.27 | 2.40 | 5.89 | 1.61 |
128 | 65.536 | 243.30 | 11.63 | 9.29 | 17.46 | 6.43 |
256 | 4096 | 10.49 | 8.06 | 2.84 | 4.35 | 1.57 |
256 | 16,348 | 109.67 | 8.62 | 4.77 | 11.44 | 3.13 |
256 | 65,536 | 488.54 | 23.28 | 18.71 | 34.73 | 13.97 |
当前内容版权归 xiaoweiChen 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 xiaoweiChen .