Page 332 - 《软件学报》2021年第9期
P. 332

2956                                 Journal of Software  软件学报 Vol.32, No.9,  September 2021

         2.3.2    规则化
             分子动力学模拟中,以硅结晶过程为例.问题本身不一定是规则的,但是可以以尽量规则化的方法进行计
         算,在数据结构上尽量规则化.所谓规则化,就是按照向量长度是对齐,连续,大小规整                           [20] .规整是按照硬件结构来
         规整的,具体做法是:将数据结构规则化,向量宽度规则化.程序中的主要数据结构是存储例子位移、速度、加速
         度等信息,有一些非规则的部分.由于神威芯片的核是向量化的、规则化的,即硬件是规则化的,我们在设计类型
         和数据结构的时候,将数据规则存储.由于芯片的向量化、规则化,因而规则化数据结构以提升性能.本文考虑常
         温下,晶体硅的模拟.硅晶体为规则的晶胞结构,有 4 个邻居粒子.受力计算中,需分别计算 4 个邻居粒子 b,c,d,e
         与 a 粒子的距离,如图 22 所示.


                                                                    (x a,y a,z a)
                             dist =  ( a x −  b x  ) +  2  (y −  a  b y  ) +  2  ( a z −  b z    2  0 x +  2  0 y +  2  0 z  2
                                                      ) =

                                                               (x b,y b,z b)
                                         Fig.22   Distance between atoms
                                            图 22   原子间的距离
             4 次距离的计算是不凝聚的,我们针对神威核向量化的特点,考虑指令优化,进行规则化计算.三维距离是计
         算两点间 3 个维度上的差的平方和再开方,即:
                                     dist =  (x −  a  x b ) +  2  (y −  a  y b ) +  2  (z −  a  z b ) 2  (11)
             由硅粒子的规则晶胞结构可知,a 粒子的受力需计算 4 个邻居粒子与 a 粒子的距离.我们利用规则化的数据
         结构,首先将粒子三维坐标的数据结构规则化.神威的并行 C 语言上扩展的数据类型为 doublev4,由 4 个双精度
         浮点数构成.粒子坐标即定义为 doublev4 类型的数据结构,如 doublev4  a.s;表示 a 粒子的位置,它的 4 个浮点数
         分别代表三维坐标和 0.规则化的数据结构去计算 a 与 b,c,d,e 之间距离时,每两点间需进行差平方后的求和操
         作.如图 23 所示,a 与 b 间的距离首先需计算公式(12):
                                               2
                                                      2
                                          (x a −x b ) +(y a −y b ) +(z a −z b ) 2            (12)
                                      2          2           2          2
                                 (x a - x b)    (x a - x c)    (x a - x d)    (x a - x e)
                                      2          2           2          2
                                 (y a - y b)    (y a - y c)    (y a - y d)    (y a - y e)
                                      2          2           2          2
                                 (z a - z b)    (z a - z c)    (z a - z d)    (z a - z e)
                                   0           0          0           0

                              Fig.23    Vector representation of the distance between atoms
                                        图 23   原子间的距离的向量表示
             若顺序执行 4 次这样的求和指令,那么这 4 次计算是不凝聚的.考虑规则化计算,以提高访存凝聚性.规则化
         计算的方式进行指令优化,通过一个求和指令,实现 4 次求和计算.规则化的向量化求和是计算 4 个向量之和,而
         不是向量的 4 个分量之和.因而考虑将原始的 4 个向量进行转置,实现规则化计算.修改后的形式如图 24 所示.
                                      2          2           2
                                 (x a - x b)    (y a - y b)    (z a - z b)    0
                                      2          2           2
                                 (x a - x c)    (y a - y c)    (z a - z c)    0
                                      2          2           2
                                 (x a - x d)    (y a - y d)    (z a - z d)    0
                                      2          2           2

                                 (x a - x e)    (y a - y e)    (z a - z e)    0
                                  Fig.24   Distance representation after transposition
                                          图 24   转置后的距离表示
   327   328   329   330   331   332   333   334   335   336   337