图形处理单元上细粒度算法实现及格子玻尔兹曼方法并行模拟
1. 细粒度算法在图形处理单元上的实现
1.1 细胞自动机模拟
每个细胞有 0 和 1 两种状态,细胞阵列被分解为 2×2 细胞的奇数和偶数方块。模拟过程由迭代组成,一次迭代包括所有偶数方块的同步旋转,然后是所有奇数方块的同步旋转。每个方块独立旋转,方向由伪随机数决定。
该细胞自动机(CA)的实现有两个特殊性质:
- 需要伪随机数(PRN)来计算新的细胞状态,计算所有细胞的新状态所需的 PRN 数量等于细胞数量的一半。
- 为计算新的细胞状态,需要两次生成线程网格,计算量不增加,但全局内存访问量增加,计算时间相应增长。
1.2 伪随机数生成
为生成大周期的 PRN,使用两种类型的生成器:64 位线性同余生成器(LCG)和 32 位梅森旋转算法(MT)。运行 N/K 个 GPU 线程来生成 N 个数字,每个线程生成 K 个数字。K 值较小时,线程初始化占大部分时间;K 值较大时,线程数量少,无法充分发挥 GPU 性能,最佳 K 值通过实验选择。
两种生成器的主要区别在于所需操作数量和操作数类型:
- LCG 使用 64 位操作数。
- MT 使用 32 位操作数,但需要执行更多操作。
不同 GPU 版本下,两种生成器的性能关系不同,为获得更好的数字生成性能,应选择合适的生成器。
1.3 异步细胞自动机(ACA)
以扩散 ACA 为例,模拟过程分为多个步骤,每个步骤随机选择一个细胞,然后将其状态与随机选择的相邻细胞状态交换。由于 ACA 是概率性的,计算新值需