

英语原文共 11 页,剩余内容已隐藏,支付完成后下载完整资料
GPU加速二维和三维伊辛模型的蒙特卡洛模拟
作者:Tobias Preis, Peter Virnau, Wolfgang Paul, Johannes J. Schneider
出处:Journal of Computational Physics
关键词
蒙特卡洛模拟;GPU计算;伊辛模型;相变;有限尺度
概要
CUDA是以图形处理单元(GPU)作为数据并行计算设备进行科学计算的一种编程技术,它的程序接口允许使用标准C语言的扩展实现算法。随着具有高内存带宽内核数量的不断增加,最近的GPU为通用计算提供了难以置信的资源。首先,我们运用这项新技术对二维铁磁性方格点阵伊辛模型进行蒙特卡洛模拟。通过实现棋盘算法的一种变体,在GPU上获得结果的速度比在当前CPU内核上快60倍。而在GPU上实现三维铁磁立方点阵伊辛模型得到结果的速度比在当前的CPU内核上生成结果快35倍。为了证明这个论点,我们使用有限尺寸缩放方法计算了二维和三维伊辛模型的临界温度。二维伊辛模型的理论结果和以前的三维伊辛模型模拟结果可以再现。
- 引言
以Ising命名的伊辛模型【1】是一个标准的统计物理模型,是对铁磁性进行微观描述的简化模型。它被用来解释铁磁性物质从高温下的顺磁相到低于居里温度的铁磁相的相变。统计物理中的各种技术和方法最初是为伊辛模型而提出的,但后来被推广和应用于相关的模型和问题【2】。伊辛以他的一维自旋链的研究结果为基础,首次在他的博士论文中提出,模型在更高维度上也没有相变,但这是一个错误的结论。1944年,Onsager对无外磁场情况下二维方格点阵上的伊辛模型进行了解析求解【3】。对于二维模型,可以用解析方法确定有序相和无序相之间发生二阶相变的临界温度()【3】。尽管付出了很大的努力,三维伊辛模型的解析解仍然是统计物理中的一大挑战。然而,计算机模拟与有限尺寸缩放技术【4-7】相结合,能够以良好的精度确定【2】和相图的其余性质。自1944年以来,伊辛模型不仅在主流物理学中很受欢迎,而且在各种跨学科的领域也很受欢迎,如在经济物理学中【8-10】。除此之外,文中提出了一个简单的基于伊辛模型的模拟人工股票市场的方法【11】,在该方法中,可以重现金融市场的特定特性,如放牧行为的后果。
几十年来,得益于不断增加的计算资源,以蒙特卡罗模拟对伊辛模型的临界现象、标度和普适性特性进行的研究一直在不断提高计算精度【2】。这种计算要求不仅是蒙特卡罗模拟所必需的,而且在计算物理中的各种其他任务,包括分子动力学模拟【12-15】或随机优化【16】,都需要大量高性能的计算资源。这种高性能的计算资源包括最新的基于共享内存的多核计算架构,而OpenMP【17】或MPI【18】可以访问这些架构。为了使应用程序并行化,可以使用具有同构或异构节点结构的分布式计算集群的解决方案。此外,超级计算中心提供了对现代大规模并行计算体系结构的访问。计算机科学和相关领域的一个最新趋势是在图形处理单元(GPU)上使用通用计算。可以发现在计算物理中任务所需处理时间的显著减少【19,20,12,21】。在图形处理单元的通用计算开始时,GPU程序必须使用C类编程环境进行内核执行,例如OpenGL着色语言【22】或CG语言【23】。Nvidia发布的CUDA【24】是一种新的编程技术,它采用了Nvidia提供的最新GPU的统一着色设计。程序接口允许程序员在不了解本机环境的情况下,使用带有CUDA扩展的标准C语言实现算法。高级微设备公司(Advanced Micro Devices Inc.)为ATI显卡引入了相似概念“Close To the Metal”(CTM)【25】。值得注意的是,最近消费级显卡的计算能力超过了中央处理器(CPU)的数量级。传统的CPU每秒提供大约次浮点运算(flops)的峰值性能【12】,而当前的消费级显卡Nvidia GeForce GTX 280的理论性能达到次浮点运算的峰值。但在这种情况下,还应考虑电源要求。GeForce GTX 280显卡峰值功耗为236W【26】,而最新的Intel四核CPU功耗大约是100W。
我们将此通用图形处理单元技术应用于二维方格和三维立方格伊辛模型的蒙特卡罗模拟。一个基于GPU的伊辛模型实现已经在【20】中提出,通过将程序迁移到GPU,该实现可以将伊辛模型的计算速度提高30倍。在本文中,我们将证明可以获得更好的加速度系数。我们将通过计算二维和三维伊辛模型中相变的临界温度来证明我们的实现是有效的。
本文的结构安排如下:在第2节的简要概述中,提供了图形处理单元体系结构的关键事实和进一步特性,以明确接下来各节实现的限制条件。第3节讲述了在GPU设备上蒙特卡罗模拟的准备步骤中伪随机数的生成。在第4节中,我们会提供二维铁磁方格点化模型的实现细节,包括加速度系数和通过标度理论确定临界温度。在第5节中,会将伊辛模型实现扩展到三维,并提供加速系数和临界温度。我们的结论总结在第6节。
- GPU设备架构
本节简要总结了GPU设备体系结构的一些关键事实,以提供和讨论有关蒙特卡洛模拟的GPU实现细节。正如引言中所提到的,我们使用Nvidia发布的CUDA。CUDA允许使用带有CUDA特定扩展的标准C语言实现算法。因此,CUDA在以GPU作为数据并行计算设备上分配和管理计算资源。现代GPU采用了显卡体系结构,它由一个可扩展的所谓流式多处理器阵列组成【24】。其中一个多处理器包含八个标量处理器内核、一个多线程指令单元和共享内存。Nvidia GeForce GTX 200系列还为每个多处理器提供一个双精度内核,以支持双精度浮点数字操作。当使用CUDA扩展并在CPU内核上运行的C程序调用GPU内核时,这个内核的大量副本(称为线程)被分发到可用的多处理器上,在那里执行它们。对于这种分布,内核网格可以细分为块,每个块又细分为不同的线程。线程和块ID可以通过内置变量在标准C语言中访问。线程块的所有线程都在可用的多处理器中并行执行算法。为了管理大量的线程,使用了单指令多线程(SIMT)单元。多处理器将每个线程映射到一个标量处理器内核,每个标量线程独立地开始执行程序。线程由这个SIMT单元以32条一组创建、管理、调度和执行程序。一组32条线程成一个warp。一个warp的线程在同一个多处理器上处理。如果给定warp的线程因数据引发的条件分支而分离,则warp的每个分支都将依序执行,并且给定warp的处理时间由分支的处理时间之和组成,这是必须避免的。如图1所示,每个多处理器包含每个处理器的本地32位寄存器和共享内存,这些寄存器由多处理器的所有标量处理器内核共享。此外,常量和纹理缓存可供程序员使用。为了整合所涉及的多处理器的计算结果,可以使用GPU全局内存,这在所有多处理器之间是共享的。CPU内核上运行的主C函数也可以访问它。GPU的全局内存大约是目前标准个人电脑主内存的10倍。表1中列出了应用的消费级显卡Nvidia GeForce GTX 280的详细情况。该卡的工作站版本属于Nvidia Tesla系列,提供高达4GB的GPU全局内存,但也相当昂贵。值得注意的是,比GeForce GTX 200系列更早的显卡只支持单精度浮点运算,此外,IEEE-754标准没有完全实现【24】,我们可以在其中发现一些偏离IEEE标准的数值,特别是在舍入操作中。当使用双精度浮点运算进行计算时,必须注意每个多处理器只有一个双精度处理内核。因此,对于此类操作,理论峰值性能大约降低一个数量级。有关GPU设备属性以及如何实现CUDA的更多信息,请参见【24】。我们将CUDA(版本2.0)与NVIDIA图形卡驱动程序(驱动程序版本177.73)结合使用。如果使用了过多的全局内存,Nvidia GeForce GTX 200系列显卡驱动程序的早期版本会显示一个错误。然而,这个问题最近得到了解决。为了比较CPU和GPU的算法实现,我们使用Intel Core 2 Quad CPU(Q6700),其缓存大小为2.66 GHz和4096 kb,并只使用一个内核。在主机上执行的标准C源代码是用带有option–O3(版本4.2.1)的GCC编译器编译的。其他编译器结合更复杂的编译器option可以进一步提高CPU的处理时间。
图1 包含多处理器、片上共享存储器和本地寄存器的GPU设备的示意图可视化【27】
表1 消费类显卡Nvidia GeForce GTX 280的关键事实和特性
|
GeForce GTX 280 |
|
|
全局内存 |
1024MB |
|
多处理器数量 |
30 |
|
芯数 |
240 |
|
恒定内存 |
64kB |
|
每个块共享内存 |
16kB |
|
翘曲尺寸 |
32 |
|
时钟频率 |
1.30GHz |
- 随机数生成
在第4节和第5节中,用蒙特卡罗方法模拟二维铁磁方格点阵和三维铁磁方格点阵伊辛模型时,如何有效创建随机数至关重要。为此,我们使用了一组线性同余随机数生成器(LCRNGs),它应用了最古老和最著名的伪随机数生成算法之一【16】。从种子值开始,随机数序列可以用递推关系得到,其中属于LCRNG j
, (1)
其中a、c和m是整数系数。等式(1)中这些系数的适当选择对产生的随机数 的质量有影响。如【28】所示,我们用和。为了利用GPU设备提供的本地32位体系结构,模块操作M的参数被设置为,因为32位体系结构的结果被截断为最末的32位。因此,可以获得伪随机数,但为了得到区间内均匀分布的伪随机数必须规范化,根据。当我们并行使用一组线性同余随机数生成器时,该数组的每个LCRNG j都由另一个LCRNG通过
(2)
其中。
在GPU实现中,线程块的每个线程处理自己的线性同余随机数生成器。将s表示为所涉及的线程块数,表示为每个块的线程数,在一个GPU内核中, LCRNGs的值是并行确定的。每个LCRNG计算S个伪随机数。因此,总共创建了个伪随机数。在图2中,,以及根据所涉及的块的数量s,比较了在GPU设备上和在CPU内核上计算的随机数生成的处理时间。在CPU上,以相同的个伪随机数进行比较。加速度系数,如插图所示,由关系式确定
(3)
得到了的最大加速度系数,它对应于Nvidia GeForce GTX 280消费类显卡,如表1所示。在这个GPU设备上,可以同时执行多达30组单线性同余随机数生成器。如果s大于30,则30个可用的多处理器只能并行执行前30个块,这样就必须在第二步中处理剩余的个线性同余随机数生成器组。因此,当使用s=31而不是s=30时,GPU设备上的处理时间增加了一倍。请注意,如果s不是GPU设备上多处理器数量的倍数,则GPU上的计算将变得效率低下,因为在计算结束时,某些多处理器处于空闲状态(参见图2的插图)。LCRNG种子值的分配和内存传输的GPU处理时间分数可以忽略不计。请注意,在GPU设备上实现有效创建伪随机数还有许多其他可能性。例如,在【12】中,为了在GPU设备上并行生成一组伪随机数,提出了一种算法,该伪随机数发生器具有一个线性同余随机数发生器,并根据一个序列规则确定伪随机数集。一种基于CUDA的Mersenne Twister随机数生成器【29】也能够并行生成伪随机数。
图2 在GPU和CPU上计算每个块的S=和512个线程的伪随机数的处理时间取决于所涉及的线程块的数量。GPU上的总处理时间分为分配时间、内存传输时间和主处理时间。加速度系数如插图所示。对于s=30,可以获得大约130的最大加速度系数,这与我们的GPU设备上的多处理器数量相对应。请注意,如果S不是GPU设备上多处理器数量的倍数,则GPU上的计算将变得效率低下,因为在计算结束时,某些多处理器处于空闲状态(请参见插图)。
- 二维伊辛模型
在这一部分中,我们提出了一个二维铁磁方格点化模型在GPU上的实现。简单伊辛模型是最简单的格点模型之一,它由一组自旋组成,这些自旋位于格点上,仅取值 1和-1【30】。这些自旋与晶格上最近的自旋相互作用,相互作用常数Jgt;0。此模型的哈密顿量
您可能感兴趣的文章
- 饮用水微生物群:一个全面的时空研究,以监测巴黎供水系统的水质外文翻译资料
- 步进电机控制和摩擦模型对复杂机械系统精确定位的影响外文翻译资料
- 具有温湿度控制的开式阴极PEM燃料电池性能的提升外文翻译资料
- 警报定时系统对驾驶员行为的影响:调查驾驶员信任的差异以及根据警报定时对警报的响应外文翻译资料
- 门禁系统的零知识认证解决方案外文翻译资料
- 车辆废气及室外环境中悬浮微粒中有机磷的含量—-个案研究外文翻译资料
- ZigBee协议对城市风力涡轮机的无线监控: 支持应用软件和传感器模块外文翻译资料
- ZigBee系统在医疗保健中提供位置信息和传感器数据传输的方案外文翻译资料
- 基于PLC的模糊控制器在污水处理系统中的应用外文翻译资料
- 光伏并联最大功率点跟踪系统独立应用程序外文翻译资料
