15.6_源代码

15.6 源代码

在优化归一化互相关程序时,我们发现这并不容易,并且很易出错。第15.1节中转换加和信息为相关系数时,我们必须要注意浮点型与整型数据精度不同(浮点型具有更大的动态范围,但只有24位的精度)。有一个很好的做法就是制作一些独立的子程序,这些子程序会报告计算相关系数时出错的原因(加和信息计算出错,还是计算方法出错,导致的不正确的系数)。此外,加和信息可以按位与CPU计算的结果作比较,而浮点值系数必须使用 ε\varepsilon 容忍值进行模糊比对。

不同的相关性实现方法被分放在不同的头文件(.cuh)之中,内核函数计算的加和信息和相关性系数也被分放在不同的地方。

测试程序normalizedCrossCorrelation.cu不仅可以测试内核程序的功能,也可以评价其性能。默认情况下,它加载coins.pgm并检测到

$ normalizedCrossCorrelation --padWidth 1024 --padHeight 1024
-wTemplate 16 -hTemplate 16
corrTexTex2D: 54.86 Mpix/s 14.05Gtpix/s
corrTemplate2D: 72.87 Mpix/s 18.65Gtpix/s
corrShared: 69.66 Mpix/s 17.83Gtpix/s
corrSharedSM: 78.66 Mpix/s 20.14Gtpix/s
corrShared4: 97.02 Mpix/s 24.84Gtpix/s

图中右下角的镍币。镍币的坐标为(210,148),占用 52×5252 \times 52 像素。该程序还将性能测量结果写入到stdout,例如:
该程序支持下列命令行选项:
--input:指定输入文件名(默认:coins.pgm)。
--output:指定输出文件名(可选)。如果指定,那么程序会将包含灰度图(类似图15-3)的PGM文件写入到此文件中
--padWidth(width): 补齐的图像宽度。
--padHeight:补齐的图像高度。
--xTemplate: 指定模板左上角的X坐标。
--yTemplate=value>: 指定模板左上角的Y坐标。
--wTemplate=value>:指定模板的宽度。
--hTemplate=value>: 指定模板的高度。

15.6_源代码 - The CUDA Handbook | OpenTech