没有毛主席思想,如何指导中国革命!
没有GPU开发思想,如何开发异构程序!
什么是GPU开发思想呢?你可以有一套,我也有一套,下面是我推荐的思想:
天马行空的想,一开始就想3000个计算单元怎么并行,里面的标准差是否可以并行,太急躁。不必这么着急地考虑如何写我们的内核程序,这样的结果往往让自己的思维禁锢了,什么意思——很简单的理解就是GPU开发要先看大局,再看局部;之前我看了一个图像处理的博客,在整个图像上理解并行的意义远远大于在一个排序或者取中位数等局部算法上并行来的大,优先花大量心思考虑细节往往得不偿失,做什么事情都是这样,也许这点对于异构开发一个大型应用程序而言显得格外突出。
给出我们开发异构程序的一个核心思想是——并行粒度分析由大到小,逐步迭代。
试想这样的收获是最明显的:
第一个开发周期我们提速了50%;
第二个开发周期对内部的某模块进行了并行计算,又提高了75%;
第三个开发周期我们对某个并行计算模块进行了深度优化,又提高了20%;
……
这样的好处是,我们每一个阶段的优化程序都是可以运行的,都是正确的结果,都可以作为一个版本,都可以记录程序的效率,都可以和之前的版本进行比对,都可以看到程序在逐步提高速度。这个过程叫精益求精!这个过程最大的好处是让没有很多开发经验的异构程序员在每个版本的过程中,提高自己对并行计算的认知度和cuda开发的水平。所以,我建议,不要一步到位的开发异构程序,我们需要循序渐进、精益求精的迭代开发过程。