5. 得到正解
得到正确的计算结果是我们的最初目的,但是使用CUDA这种并行编程模型是很容易出错的,这时我们就需要一些方法和工具来帮助我们验证计算结果的正确性,同时,在CUDA编程中也有一些值得我们注意的问题。
5.1 正确性验证
正确性验证主要有两种方法:
1、引用比较(Reference Comparison)
引用比较的核心思想是使用未并行化代码产生的一些具有代表性的结果与并行化后的程序运行结果,当它们的绝对差在可接受范围内时,就认为并行化的结果是正确的。注意,改写前和改写后代码运行结果的不一致是由浮点数表示的不确切性造成的。
第一步完成后,我们使用APOD(Assess、Parallelize、Optimize、Deployment)过程对并行化代码实施进一步优化,我们只要保证每一步优化的引用比较结果正确,那么对于最终的并行化程序,其结果的正确性是可以得到保证的。
2、单元测试(Unit Testing)
单元测试与引用比较的方法是相辅相成的。单元测试是指开发人员在编写代码时就将项目代码组织成单元级别,然后运用一定的技术手段对各个单元分别测试其正确性。在CUDA中,我们可以把内核(kernels)写成一系列小的__device__函数的