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