对于传统的数据分布不均匀(unstructured grid)的应用在GPU上跑的话,会造成workload分布不均匀从而产生memory latency比较严重不一最终影响到GPU的性能。基于这样的motivation,文章提出一种改进的可以达到硬件高利用率和更有效的内存读取的目的的算法。
文章中研究的应用是计算流体力学应用CFD,举了一个简单的例子:一个每条边上有4个点的三角形网格,每个点有数个参数,每个点根据自身的参数和其他点的参数迭代计算出一个最终的值。没经优化的算法的缺点是因为计算过程中读取数据的随机性导致存储模式局部空间性小cachmiss高最终造成性能的损失。
文章提出的改进优化方案是合理计算出block中的线程数和warp数(尽可能接近硬件指标的上线)的基础上,发现未优化的算法运行过程中相邻线程读取的数据存放位置是随机的,通过交换数据存放的位置使得相邻线程读取的数据存储位置也是相邻的(因为GPU中SIMT的特性,一个WARP的线程如果同时读位于连续地址内存,memory latency会很低)。最后测试显示优化后的效果还是不错的。
这个研究方向是结合某一种特定的算法在GPU上的优化,而且现在这个方向的趋势是偏向不规则应用的优化研究(学长提到因为这更容易找到性能瓶颈)。个人觉得做这个方向要对某类应用特别有钻研(额,窝还是没有对哪类应用特别感兴趣),小超好像就是做这个方向的(他对图类的应用很有研究也立志在这类应用进行优化,TAT真羡慕已经找准方向的人)。
参考:
[1] Solano-Quinde L, Wang Z J, Bode B, et al. Unstructured grid applications on GPU: performance analysis and improvement[C]//Proceedings of the Fourth Workshop on General Purpose Processing on Graphics Processing Units. ACM, 2011: 13.