噪音影响大量物理和生物现象的行为,例如基因表达[Kaern等人。2005; Keren等人。2015]神经冲动的传递[Deco等人。2009; 费萨尔等人。2008],以及电子电路的动力学[Darabi和Abidi2000; Kaern等人。2005; Scholten等人。2003]. 受噪声影响的系统通常使用随机微分方程组(SDE)进行建模[Allen等人。2008]. 在这种模型中,每个方程表示系统变量(例如电压)随时间的变化率,并且可以依赖于一个或多个参数(例如电容)。此外,一个或多个方程也受到噪声过程的影响。它$\hat{\rm o}$一阶耦合SDE系统的形式为
\开始{方程式}dX_i(t)=f_i(t,\mathbf{X}(t),\mathbf{p})\,dt+\sum_{j=1}^{m} 克_{ij}(t,\mathbf{X}(t),\mathbf{p})\,dW_j(s),\end{方程}
哪里$t\ge t_0$是时间;$\mathbf{X}=\left(X_1,\ldots,X_n\right)$是状态向量;$\mathbf美元{十} _0(0)=\mathbf{X}(t_0)$指定系统的初始状态;$\mathbf{p}=\left(p_1,\ldots,p_d\right)$是参数值的矢量;$\lbrace W_1(t),\ldots,W_m(t)\rbrace$是独立的标量维纳过程;和功能$\lbrace f_i(t,\mathbf{X},\mathbf{p}):1 \lei \len \rbrace$和$\lbrace g_{ij}(t,\mathbf{X},\mathbf{p}):1 \le i \le n,1 \le j \le m \rbrace$分别是漂移系数和扩散系数[Higham2001; Kloeden和Platen2011; 烤盘1999]. 设置扩散系数$g_{ij}$0将系统简化为一组确定性的常微分方程(ODE)。
通过改变参数$\mathbf{p}$SDE系统(方程式(1))可以观察到不同类别的动力学行为(例如,神经模型中爆发和峰值之间的转换)。然而,在许多情况下,这些参数很难通过实验来测量。因此,通常采用优化方法来找到最能重现感兴趣系统的实验测量行为的特定参数组合【Paláncz等人。2016]. 以稳健、系统的方式执行该参数优化步骤是构建和分析生物模型的关键步骤[Akman等人。2008,2010,2012; 阿夫拉米迪斯和阿克曼2017; Doherty等人。2017; 利拉奇和坎马什2010]因为确定最佳参数值可以对替代模型进行排序,并制定可通过实验测试的预测[Ashyraliyev等人。2009; 阿夫拉米迪斯和阿克曼2017; Cedersund和Roll2009; Cullen等人。1996; 约翰逊和奥姆兰2004; Lillacci和Khammash2010; Slezak等人。2010; Sun等人。2012]. 然后可以严格评估在构建给定模型时所做的假设,并了解如何修改模型,以提高其预测的准确性[Ashyraliyev等人。2009; 阿夫拉米迪斯和阿克曼2017; Cedersund和Roll2009; 利拉奇和坎马什2010; Slezak等人。2010].
然而,优化参数$\mathbf{p}$方程中所示系统的(1)可能会产生较高的计算成本,具体取决于f_i美元$和$g_{ij}$、系统大小n美元$,以及噪声项的数量百万美元$大型系统(高n美元$值),多噪声过程(高百万美元$值)和计算要求的漂移和扩散项(例如,包含超越函数的项)都会大大增加计算成本。此外,额外的成本与生成模拟噪声过程所需的随机数有关。使用特定的参数优化方法也可以显著增加计算成本;例如,当使用基于群体的方法,如进化算法(EA)或粒子群优化算法(PSO)时,必须在不同的参数值上对方程进行多次积分,以探索潜在的适应度景观[Cedersund等人。2016; 他和姚明2001; 威特2008]. 此外,可能需要重新采样方法来减轻模型评估中噪声和不确定性的影响,从而进一步增加计算负载[Doherty等人。2017; 现场发送2015].
一般来说,对上述优化方法的SDE模型的评估涉及到没有相互依赖或沟通的单个任务。因此,可以直接将这些任务并行化;因此,优化问题被称为尴尬或令人愉快的平行问题[Navarro等人。2014].
这种令人尴尬的并行任务的巨大计算需求意味着高性能计算(HPC)集群(即多台连接的计算机)需要在合理的时间范围内获得结果。最近,提供6到16个物理内核的竞争性CPU型号已经上市。在工作站CPU的情况下,现在有32核的型号。
此外,当前的GPU模型通常用于个人计算机和工作站中的图形生成,也可以用于科学计算[Mantas和Castro2016; Papadrakakis等人。2011]. 它们包含大量的处理单元,与CPU内核相比,每个处理单元都相对较慢,并且针对单指令多数据(SIMD)处理进行了优化。这使得它们非常适合大规模并行化。事实上,对于某些任务,GPU的总体处理能力可以超过单个CPU的处理能力。此外,根据主板型号,可以在一台台式机/工作站计算机上安装多个GPU,从而进一步提高潜在的处理能力。
在之前的研究中,我们证明了带有GPU的台式计算机能够使用多目标EA(Avramidis和Akman2017]. 作为这项工作的一部分,我们表明优化过程中计算密集度最高的部分是模型在多参数组合上的数值积分,包括每一代的EA群体[Avramidis和Akman2017]. 此任务可以以令人尴尬的并行方式执行,从而可以利用异构HPC架构的当前趋势。因此,在我们的尖峰神经元模型中,数值积分在GPU上执行,而所有EA操作(变异、交叉、适应度评估等)都在CPU上执行[Avramidis和Akman2017]. 以这种方式使用GPU可将速度提高到大约$\$20,与高端CPU相比。
在GPU上执行的程序必须使用特定的编程框架编写。最常用的两个框架是计算统一设备架构(CUDA)和开放计算语言(OpenCL)[Demidov等人。2013]. CUDA框架是专为在NVIDIA计算设备上运行而设计的专有体系结构。相比之下,OpenCL是跨CPU和GPU的通用并行编程的免版税标准,为软件开发人员提供了便携和高效的访问这些异构处理平台的能力[Khronos OpenCL工作组2015]. OpenCL包括用于编写函数(内核)的跨平台中间语言,这些函数在OpenCL支持的设备上执行,以及用于协调这些设备之间并行计算的应用程序编程接口(API)。一个简单的OpenCL程序包括以下步骤:识别OpenCL设备,编译将在设备上运行的OpenCL-代码,将数据复制到设备,执行计算,并将结果从设备复制回来。
配备OpenCL功能的软件库可以使用CPU和GPU,无需为每种处理器类型开发不同的库。
在这里,我们介绍了SODECL,这是一个C++库,它使用OpenCL以令人尴尬的并行方式计算SDE(或ODE)系统的多个轨道。我们重点介绍了求解SDE模型的库,其中的轨道是使用Euler-Maruyama方法计算的[Higham2001; 斋藤和三井1996]. ODE轨道可以使用以下任何一种积分方法计算:Euler、Runge-Kutta、隐式Euler或隐式中点。SODECL以前被用于将SDE和ODE版本的眼动控制模型与实验记录的时间序列相匹配2015; 阿夫拉米迪斯和阿克曼2017].
在下面的部分中,我们将描述SODECL库的设计原则、其组织以及所使用的数值算法。此外,我们还描述了用于测量不同计算设备(即CPU和GPU)的SODECL执行速度以及评估SDE解算器的数值稳定性和准确性的实验协议。作为速度测试实验的一部分,我们将SODECL在高端多核CPU上的性能与MATLAB程序进行了比较,该程序还使用相同的积分方法(即Euler–Maruyama)并行计算多个SDE轨道。最后,我们概述了图书馆未来的发展方向。
我们选择使用OpenCL实现SODECL,因为它对所使用的计算机硬件没有显著的限制。如上所述,虽然用户必须在NVIDIA GPU上运行CUDA可执行文件,但OpenCL可执行文件可以在NVIIDA GPU和AMD/Intel GPU上同时运行。此外,OpenCL可执行文件可以在英特尔和AMD CPU上运行。这使得OpenCL在传播研究方法和结果以及促进科学合作方面比CUDA具有关键优势。
我们将SODECL设计为相对便携、模块化和易于扩展。我们在以下操作系统上测试了我们的库:Windows 10 64位;Ubuntu 18.04 64位;macOS Sierra(10.12)。通过包含库的主标头并将其链接到OpenCL库,SODECL库可以轻松集成到任何C++源代码中。此外,SODECL可以通过为其他SDE集成方法(例如Milstein方法[Platen1999]). 源代码根据MIT许可证发布,并受版本控制吉特在https://github.com/avramidis/sodecl.
SODECL的主要算法包括数值积分方法、噪声发生器、运行时生成OpenCL代码的过程以及计算多个SDE轨道的执行方案。现在依次描述每一个。
2.2.1 集成方法。SODECL使用Euler-Maruyama方法[Higham2001; 斋藤和三井1996]在方程式中整合方程式(1). Euler-Maruyama近似$\lbrace\mathbf{X}^k=(X_1^k,\ldots,X_n^k):k\ge 1\rbrace$找到真正的解决方案$\lbrace\mathbf{X}(t):\mathbf}(t_0)=\mathbf{十} _0(0),t\ge t_0\r痕迹$由递归定义
\开始{等式}X^{k+1}_i=X^k_i+f_i(t,\mathbf{X}^{k},\mathbf{p})\Delta t+\sum_{j=1}^{m} 克_{ij}(t,\mathbf{X}^{k},\mathbf{p})\sqrt{\Delta t}N_j(0,1),\end{方程}
哪里$\mathbf{X}^{1}=\mathbf{十} _0(0)$,$\增量t$是时间步长(因此$\mathbf{X}^{k}$是的近似值$\mathbf{X}((k-1)\增量t)$对于$k\gt 1美元$)、和$N_j(0,1)$是具有零均值和单位方差的独立正态分布随机变量。
2.2.2 噪声发生器。生成噪波变量$N_j(0,1)$用于方程式的每个步骤(2),SODECL使用Random123库[Salmon等人。2011]. Random123生成均匀分布的随机数,然后使用Box-Muller算法将其转换为正态分布的随机数字[Box和Muller1958]:
\begin{align}\begin{array}{lcc}r_1=\sqrt{-2\ln U_1}\cos(2\pi U_2),\\r_2=\sqrt{-2\in-U_1}\sin(2\πU_2。\结束{数组}\end{对齐}
在这里,$\l种族U_1、U_2\r种族$是[0,1]上的两个独立的均匀分布随机变量,以及$\l种族r_1、r_2\r种族$是两个独立的正态分布随机变量,平均值和单位方差为零。在以下情况下$j\gt 2美元$,方程中的方程(三)多次调用。
2.2.3 OpenCL代码生成。SODECL在运行时创建并构建OpenCL源代码字符串。这允许用户更改f_i美元$和$g_{ij}$方程式中的函数(1)无需编译源代码。此外,SODECL允许实现包装器,例如,对于MATLAB或Python,使用运行SODECL可执行文件的脚本/函数,或使用MATLAB.mex文件而不重新编译。形成OpenCL源代码字符串的过程通过下面概述的四个步骤执行。
第1步。最初,SODECL将五个命名常量的定义附加到空OpenCL源代码字符串的开头(参见表1). 这些常数的值取决于SDE系统的一般属性(方程数、噪声项和参数)、积分器的时间步长以及积分器在每个OpenCL内核调用中要执行的步骤数。这些值由用户传递给SODECL库。OpenCL源代码字符串的其余部分是使用位于三个单独文件中的代码生成的,如下面的步骤2-4所述。
表1。
SODECL OpenCL函数使用的命名常量列表
命名常量 |
描述 |
_数字_ |
SDE系统中的方程式数量 |
_努姆诺伊_ |
SDE系统中的噪声变量数量 |
_numpar公司_ |
SDE系统中的参数数量 |
_m_dt(m_dt)_ |
SDE积分器时间步长(秒) |
_numsteps(步数)_ |
每个OpenCL内核调用的SDE集成器步骤数 |
第2步第一个文件,积分器调用器.cl,包含主机调用以在OpenCL设备上运行的内核函数。此功能如图所示1。内核函数的参数是指针,显示数组在设备全局内存中的位置。这些数组包含SDE系统的时间点,用于近似求解,SDE系统因变量的值以及要计算不同轨道的参数组合。另一个计数器数组被传递给内核,供Random123库使用。内核生成SDE系统集成所需的独立、正态分布的数字。随后,相同的内核调用集成SDE系统的函数一个时间步长(参见步骤3)。调用总数由常量定义_numsteps(步数)_.已集成SDE系统_numsteps(步数)_次,内核将最后的集成状态值复制到OpenCL设备的全局内存中,以便在下一个内核步骤中使用并由主机访问。
步骤3。创建OpenCL源时使用的第二个文件名为随机euler.cl。它包含函数系统集成器(如图所示2),它实现了Euler-Muryama集成方法。系统集成器它调用计算SDE系统确定性和随机性组件的函数(参见步骤4)。一旦对这些进行了评估,随机euler.cl在下一个时间步计算所有因变量的值。
第4步。第三个文件包含两个名为草皮系统和sode_system_stoch公司计算漂移和扩散项${f_i}$和$g_{ij}$在数值格式中(2)分别是。它们的定义如图所示三,并且必须由用户指定(图中显示了一个示例5).
2.2.4 SDE积分器执行算法。SODECL集成执行算法的逻辑流主要是一个循环。在每次循环迭代期间,所有轨道的因变量的相应值都会复制到主机设备,并且复制的值会并行保存到数组中,为下一次内核调用做准备。调用OpenCL内核来集成模型_numsteps(步数)_长度步数_m_dt(m_dt)_,这意味着集成的输出每(_numsteps(步数)_ $\次$ _m_dt(m_dt)_)积分时间的秒数。这允许以以下频率存储数据$1/$(_numsteps(步数)_ $\次$ _m_dt(最小值)_)赫兹。一旦完成所有参数组合在所需时间跨度内的积分,算法结束。循环迭代次数,千美元$,使用以下公式计算
\开始{align}k=t_{\rm总计}/(\Delta t\cdot s),结束{align{
哪里$t_{\rm总计}$是积分的时间跨度,$\增量t$是积分器时间步长,并且%s美元$是积分器在每个OpenCL内核调用中执行的步骤数(即并行操作的数量,其可以包括多个参数组合和/或初始条件)。的值$t_{\rm总计}$,$\增量t$、和%s美元$由用户提供。
与CPU相比,结果的存储频率在GPU提供的加速中起着重要作用。这是由于与GPU内存之间的传输造成的瓶颈,以及将数据存储在主机内存中以供进一步分析所需的时间。低频(250–1000 Hz)可避免主机内存中的大量数据存储。此外,模型大小也是一个重要因素,因为它设置了要保存在计算机RAM上的模型集成数量。此外,返回的数据点数量越多,分析时间就会越长;然而,数量少可能不足以进行准确的分析[阿夫拉米迪斯和阿克曼2017].
2.2.5 Python接口。SODECL的Python包接口函数如图所示4,而表2描述了函数传递给SODECL可执行文件的参数。Python库pybind11(https://github.com/pybind/pybind11)用于实现接口。SODECL还提供了一个MATLAB函数接口,但需要注意的是,这目前是实验性的。
表2。
SODECL Python接口的参数
自变量 |
变量 |
描述 |
1 |
平台 |
OpenCL平台编号 |
2 |
装置 |
所选平台的OpenCL设备号 |
三 |
内核 |
OpenCL函数定义SDE系统的文件路径 |
4 |
初始化x |
SDE系统每个轨道的初始条件 |
5 |
参数 |
所有轨道的SDE系统参数集 |
6 |
解算器 |
SDE积分器 |
7 |
轨道 |
要计算的轨道数 |
8 |
枇杷 |
SDE系统的方程式数量 |
9 |
nparams(非参数化参数) |
SDE系统的参数数量 |
10 |
nnoi公司 |
噪声过程数量 |
11 |
日期 |
SDE解算器时间步长 |
12 |
西班牙 |
集成时间跨度 |
13 |
ksteps公司 |
每个OpenCL内核调用中执行的SDE积分器步骤数 |
14 |
本地组大小 |
OpenCL本地组大小 |
2.3.1 协议。为了评估SODECL的执行速度,我们使用了成熟的Kuramoto模型的随机变量来描述弱耦合相位振荡器种群的动力学[Acebrón等人。2005; Bick等人。2011; 大岛1992; Nakao公司2016; 斯特罗加茨2000]. Kuramoto模型通常用于模拟生物振荡器的同步[Acebrón等人。2005; Bick等人。2011]并且实现和定制相对简单(例如,振荡器种群大小可以很容易地改变)。我们在这里使用的SDE Kuramoto系统具有以下形式
\开始{方程式}d\theta_i(t)=\omega_i+\frac{K}{N}\sum_{j=1}^{N}\sin(\theta_j(t)-\theta-i(t))+p_i dW_i(t),结束{方程式{
哪里$\lbrace\theta_1,\ldots,\theta_N:-\pi\le\theta_i\lt\pi\rbrace$指定每个振荡器的相位;$\欧米茄_i$是的自由运行频率1美元$th振荡器;$\lbrace W_1(t),\ldots,W_N(t$是独立的标量维纳过程;$p_i$控制噪声对1美元$th振荡器;和千美元$是平均场耦合的强度。因此,系统参数为$\mathbf{p}=(K,\omega _1,\ldot,\omega_N,p_1,\ ldot,p_N)$.每个相位变量的初始值$\θ_i$被认为是均匀分布的$[-\pi,\pi)$,频率$\欧米茄_i$均匀分布在[0.01,0.03]和噪声强度上$p_i$均匀分布在[0.001,0.003]上。以下方程定义了方程的积分方案(5)使用Euler-Maruyama方法(参见方程式(2)以上):
\开始{align}\theta ^{k+1}_i&=\theta^{k} _ i+\左(\omega_i+\压裂{K}{N}\sum_{j=1}^{N}\sin\左(\theta^{k} _j(_j)-\θ^{k} _ i\右)\右)\增量t+p_i\sqrt{\增量t}N_i(0,1)。\结束{对齐}
我们设置耦合常数千美元$在方程式中(5)1,并将400秒的模型与时间步长集成$\增量t$0.05秒。此外,我们使用了双精度浮点数据类型以获得更好的准确性。随机Kuramoto模型的SODECL实现如图所示5.
我们比较了使用不同多核和多核计算设备时SODECL的执行速度与仅使用HPC CPU的一个核时的执行速度。表中列出了用于评估SODECL性能的计算设备三。ID为I4790K的CPU是高端台式机CPU,而2X6142是具有两个多核CPU的HPC节点。W8100和P100是工作站/服务器GPU,具有科学计算所需的高双精度计算能力。为了更好地理解SODECL运行时如何受到系统大小的影响,我们改变了Kuramoto模型中方程的数量(即,我们改变振荡器的数量亿美元$网络中)。此外,我们还研究了轨道数百万美元$集成会影响SODECL在不同计算设备上的性能。针对每个选项执行八次独立的求解器运行N美元$和百万美元$.
表3。
用于速度评估测试的硬件
身份证件 |
类型 |
模型 |
I4790公里 |
中央处理器 |
英特尔酷睿i7-4790K |
2X6142型 |
中央处理器 |
2 x Intel Xeon Gold 6142 |
W8100型 |
通用分组 |
AMD Firepro W8100公司 |
第100页 |
通用分组 |
NVIDIA特斯拉P100-PCIE |
我们还将SODECL在桌面CPU上的执行速度与在同一CPU上运行的等效并行MATLAB实现进行了比较。为了进一步加速此实现,如图所示6,我们使用MATLAB编码器将MATLAB函数转换为C++代码。MATLAB的并行化是通过OpenMP(Open Multi-Processing)自动执行的,OpenMP是一个应用程序编程接口,用于使用CPU和协处理器内核的并行应用程序[Dagum和Menon1998].
2.3.2 结果。图中显示了使用SODECL与不同计算设备、轨道数和系统大小获得的比较执行速度和加速比7(见表S1(第一阶段)–第6页对应数值)。对于每个计算设备,加速比是相对于2X6142节点的一个内核计算的(即,2X6142-单核运行时与计算设备运行时的比率)。用于每个设备和系统大小的本地组大小(N美元$)如表所示4。本地组大小是将并行运行并可以通信的工作项的数量。在令人尴尬的并行应用程序的情况下,尽管没有通信,但组大小可能会对运行时产生影响。显示的值是通过探索性测试发现的,因为据我们所知,没有计算最佳局部组大小的分析公式。
模型尺寸,N美元$ |
I4790公里 |
2X6142型 |
W8100型 |
第100页 |
5 |
8 |
32 |
256 |
8 |
10 |
8 |
32 |
16 |
8 |
15 |
8 |
32 |
32 |
8 |
对于测试的CPU,结果表明,当使用2X6142节点的所有32个内核时,SODECL介于$\大约$1.12和大约$\$在不同的系统尺寸和轨道数下,比同一节点的一个内核快6.65倍。相比之下,当使用I4790K CPU的所有内核并将其速度与2X6142的一个内核进行比较时,我们观察到从大约$\$0.69至大约$\$2.66随着系统规模从5增加到15,轨道数从512增加到163840。2X6142总体上获得了更高的加速比,这是因为其内核数量更多,体系结构更新。
对于测试的GPU,SODECL与使用一个2X6142内核相比,其加速比在0.6-4.5范围内,这取决于Kuramoto模型的大小和轨道数。更多的模型方程和轨道允许更多地使用GPU资源,这意味着提高了速度。当将GPU运行时间与使用2X6142的所有内核时获得的运行时间进行比较时,可以看出GPU通常较慢。例如,这可能是由于较高的初始化时间开销造成的。
最后,图8比较了I4790K CPU上Kuramoto模型求解器的SODECL和MATLAB实现所获得的运行时间(相应的数值在表中给出第7部分–第9部分). 对于最小的系统尺寸和最少的轨道数,MATLAB实现只比SODECL快(见图8(B) (E)和(H))。在所有其他情况下,SODECL$\大约$速度提高5.8倍。
2.4.1 协议。为了评估SODECL的准确性和数值稳定性,我们使用N=100美元$,$\omega_i\sim\mathcal{U}(0.2,0.4)$,$\phi_i(0)\sim\mathcal{U}(-\pi,\pi)$、和$p_i\sim\mathcal{U}(0.01,0.03)$对于两个值$K_1=0.02$和$K_2=0.2$整体耦合强度的千美元$这些值被选在连续极限下确定性系统中发生的Kuramoto跃迁的任一侧($N\rightarrow\infty(右箭头)$)在$K=K_c=\压裂{2}{5\pi}\近似值$0.1273. 作为千美元$通过这个临界值增加,宏观相互夹带(MME)-一个共同频率的集体同步节律-在振荡器群中观察到[Daido1992; 斯特罗加茨2000]. 对于的两个值千美元$,使用以下积分时间步长,在400 s内进行了64次独立积分(平均周期20.94 s的约19个周期):$\增量t=\压裂{2^{l-5}}{5},1\le l\le 5$对于每个实现,使用复数阶参数[Nakao量化模拟振荡器群的同步程度2016; 斯特罗加茨2000]定义如下:
\开始{方程式}r(t)e^{i\Phi(t)}=\frac{1}{N}\sum_{j=1}^{N} e(电子)^{iθj(t)}。\结束{方程式}
在上述方程式中,半径美元(吨)$测量相位相干性和美元\菲律宾比索$测量集体阶段,使用美元$值0和1分别对应于总体的完全去同步和完全同步[Nakao2016; 斯特罗加茨2000]. 在确定性模型的连续极限下,增加耦合强度千美元$通过临界值K_c美元$导致稳态相干$\lim_{t\rightarrow\infty}r(t)$随着人口全球同步,从0迅速增加到1[Acebrón等人。2005; Nakao公司2016; 斯特罗加茨2000]. 对于有限N美元$,的值千美元$小于K_c美元$产量$\mathcal{O}(N^{-1/2})$波动美元(吨)$,while值为千美元$大于K_c美元$导致美元(吨)$饱和到某个值$\lim_{t\rightarrow\infty}r(t)\lt 1$,使用$\mathcal{O}(N^{-1/2})$波动[斯特罗加茨]2000].
我们描述了SODECL的设计和性能,这是一个开源C++库,它使用OpenCL以令人尴尬的并行方式计算SDE系统的多个轨道。SODECL的优点是可以使用多核CPU和GPU的并行功能来减少计算时间,从而允许同时执行大量仿真。当使用基于人群的元启发式方法(如遗传算法)进行模型校准时,此功能至关重要,因为它有助于在实际时间框架内优化和分析SDE模型【Adams等人。2013]. SODECL被设计为在Windows、Linux和macOS操作系统上编译和运行,以便用户友好、快速且相当容易扩展。
虽然在我们的SODECL设计中,执行速度不是主要优先考虑的问题,但我们表明,与并行MATLAB实现相比,集成随机Kuramoto系统在几乎所有情况下都更快。我们还表明,当SODECL使用GPU或多核CPU时,与高端台式机CPU相比,速度有相当大的提高。然而,加速可能会受到正在集成的SDE系统的类型和大小的影响。因此,获取其他典型随机模型的性能基准将具有指导意义。
在我们之前的工作中2017],SODECL实现了大约$\$W8100 GPU上的20与I4790K CPU的所有内核相比。相比之下,在本研究中,相同GPU对I4790K的最大加速比为大约$\$1.16. 我们认为,我们以前和现在的研究在加速方面的差异在于阿夫拉米迪斯和阿克曼的工作[2017]由于以下原因,SODECL OpenCL代码无法有效矢量化以促进更好地利用CPU。首先,该系统是一个具有六个异质方程(即包含不同函数形式的方程)的确定性模型。如果矢量化,类似的方程可以更有效地并行运行。其次,其中两个方程包含一个案例数学函数。Case函数由一个或多个实现如果导致分支分歧的语句。大多数情况下,分支发散是无法预测的,编译器也无法矢量化每种情况下实现不同数学运算的分支的代码。第三,对于模型的数值积分,使用了隐式中点欧拉方法。该方法包括一个迭代次数可变的循环。所有上述因素都阻碍了编译器在并行设备上高效地矢量化代码的执行。
我们没有研究SODECL的许多方面,这可能会为未来的工作提供有趣的途径。首先,我们只使用双精度数据类型而不是单精度浮点数据类型来测量SODECL的执行速度。如果不需要高精度,则可以使用单精度,其优点是,当使用较低精度时,计算设备的执行速度显著提高。其次,我们没有在SODECL中测量OpenCL的初始化和最终确定时间。这将表明不同的计算设备是否需要更多的时间来完成这些任务,也许可以解释为什么MATLAB实现在少量轨道上与SODECL相当。第三,我们没有使用Euler-Maruyama方法评估分支发散对不同计算设备的影响。这可能会显示哪些设备受影响较小。然而,为了评估具有许多分支的方程对性能的影响程度,需要进行更广泛的研究,涉及更广泛的SDE模型。最后,我们没有检查不同轨道数和型号大小的内存需求。后续研究可以检查大型模型(即100多个方程)的高内存需求对不同计算设备性能的影响。
我们注意到,SODECL的未来发展将包含用于数字集成SDE系统的其他方法,如Milstein和Runge-Kutta方案1999]. 在这里,我们实现了Euler-Maruyama数值积分格式,尽管它很简单,但仍被广泛使用,部分原因是相对容易实现。然而,我们注意到,与更复杂的数值方案相比,Euler-Maruyama方法的低效性被多个CPU内核或GPU计算单元并行计算轨迹所带来的显著加速所抵消。合并其他解算器将涉及修改SODECL系统集成器以实现所选方案(见图2).
此外,还可以探索GPU和CPU的其他优化,例如使用更新版本的OpenCL。这可能会进一步加速某些设备上的SODECL。此外,我们认为将集成算法拆分到多个OpenCL内核上也可能提高执行速度。
表S1。
随机Kuramoto模型的运行时间(秒)与系统大小轨道数的函数$N=5$,当使用不同的并行计算机硬件实现时
轨道 |
2X6142(1C) |
2X6142(32C) |
I4790K(4C) |
W8100型 |
第100页 |
512 |
0.504 |
0.449 |
0.728 |
0.552 |
0.201 |
5,120 |
0.746 |
0.401 |
0.898 |
0.617 |
0.363 |
25,600 |
2.373 |
0.814 |
1.612 |
1.424 |
0.935 |
40,960 |
3.602 |
1.163 |
2.254 |
1.973 |
1.400 |
81,920 |
6.869 |
1.961 |
3.800 |
3.573 |
2.512 |
163,840 |
13.390 |
3.623 |
6.779 |
6.772 |
4.719 |
每种情况下使用的硬件如表所示三. |
表S2。
随机Kuramoto模型的运行时间(秒)与系统大小轨道数的函数$N=10$,当使用不同的并行计算机硬件实现时
轨道 |
2X6142(1C) |
2X6142(32C) |
I4790K(4C) |
W8100型 |
第100页 |
512 |
0.441 |
0.301 |
0.714 |
0.708 |
0.280 |
5,120 |
1.444 |
0.499 |
1.138 |
0.864 |
0.513 |
25,600 |
5.956 |
1.385 |
3.160 |
2.784 |
1.714 |
40,960 |
9.676 |
2.042 |
4.746 |
4.211 |
2.566 |
81,920 |
18.308 |
3.821 |
8.784 |
7.981 |
4.828 |
163,840 |
36.641 |
7.471 |
16.939 |
15.589 |
9.315 |
每种情况下使用的硬件如表所示三. |
表S3。
随机Kuramoto模型的运行时间(秒)与系统大小轨道数的函数N=15美元$,当使用不同的并行计算机硬件实现时
轨道 |
2X6142(1C) |
2X6142(32C) |
I4790K(4C) |
W8100型 |
第100页 |
512 |
0.8247 |
0.495 |
0.772 |
1.271 |
0.323 |
5,120 |
2.8846 |
0.759 |
1.605 |
1.679 |
0.672 |
25,600 |
12.6576 |
2.223 |
5.256 |
5.968 |
2.940 |
40,960 |
19.9707 |
3.288 |
7.987 |
9.128 |
4.566 |
81,920 |
39.6412 |
6.185 |
15.279 |
17.736 |
9.056 |
163,840 |
79.5124 |
11.953 |
29.882 |
34.700 |
17.656 |
每种情况下使用的硬件如表所示三. |
表S4。
随机Kuramoto模型的速度随系统尺寸轨道数的变化$N=5$,使用表中列出的每个计算设备时三
轨道 |
2X6142型 |
I4790公里 |
W8100型 |
第100页 |
512 |
1.122 |
0.692 |
0.914 |
2.498 |
5,120 |
1.861 |
0.831 |
1.209 |
2.051 |
25,600 |
2.915 |
1.471 |
1.666 |
2.537 |
40,960 |
3.095 |
1.597 |
1.826 |
2.572 |
81,920 |
3.501 |
1.807 |
1.922 |
2.733 |
163,840 |
3.696 |
1.975 |
1.977 |
2.837 |
速度计算为2X6142 CPU的一个内核的运行时间除以计算设备的运行时间。对于CPU(2X6142和I4790K),使用了所有内核。 |
表S5。
随机Kuramoto模型的速度随系统尺寸轨道数的变化$N=10$,使用表中列出的每个计算设备时三
轨道 |
2X6142型 |
I4790公里 |
W8100型 |
第100页 |
512 |
1.462 |
0.617 |
0.622 |
1.574 |
5,120 |
2.895 |
1.269 |
1.671 |
2.814 |
25,600 |
4.301 |
1.884 |
2.139 |
3.474 |
40,960 |
4.738 |
2.039 |
2.298 |
3.771 |
81,920 |
4.791 |
2.084 |
2.294 |
3.792 |
163,840 |
4.905 |
2.163 |
2.350 |
3.934 |
速度计算为2X6142 CPU的一个核心的运行时间除以计算设备的运行时间。对于CPU(2X6142和I4790K),使用了所有内核。 |
表S6。
随机Kuramoto模型的速度随系统尺寸轨道数的变化N=15美元$,使用表中列出的每个计算设备时三
轨道 |
2X6142型 |
I4790公里 |
W8100型 |
第100页 |
512 |
1.664 |
1.068 |
0.649 |
2.552 |
5,120 |
3.796 |
1.796 |
1.718 |
4.289 |
25,600 |
5.692 |
2.408 |
2.121 |
4.305 |
40,960 |
6.073 |
2.500 |
2.188 |
4.373 |
81,920 |
6.409 |
2.594 |
2.235 |
4.377 |
163, 840 |
6.652 |
2.661 |
2.291 |
4.503 |
速度计算为2X6142 CPU的一个内核的运行时间除以计算设备的运行时间。对于CPU(2X6142和I4790K),使用了所有内核。 |
表S7。
随机Kuramoto模型的运行时间与系统尺寸轨道数的函数$N=5$,在I4970K CPU的所有内核上使用SODECL和并行MATLAB实现
轨道 |
SODECL公司 |
MATLAB软件 |
MATLAB/SODECL语言 |
512 |
0.728 |
0.131 |
0.180 |
5,120 |
0.898 |
1.229 |
1.369 |
25,600 |
1.612 |
6.149 |
3.813 |
40, 960 |
2.254 |
9.841 |
4.364 |
81,920 |
3.800 |
19.588 |
5.154 |
163,840 |
6.779 |
39.213 |
5.784 |
运行时间以秒为单位。最后一列(MATLAB/SODECL)显示了MATLAB和SODECL实现的运行时比率(加速比)。加速值大于1表示SODECL更快。 |
表S8。
随机Kuramoto模型的运行时间与系统尺寸轨道数的函数$N=10$,在I4970K CPU的所有内核上使用SODECL和并行MATLAB实现
轨道 |
SODECL公司 |
MATLAB软件 |
MATLAB/SODECL软件 |
512 |
0.714 |
0.297 |
0.415 |
5,120 |
1.138 |
2.875 |
2.525 |
25,600 |
3.161 |
14.362 |
4.543 |
40,960 |
4.747 |
23.005 |
4.846 |
81,920 |
8.780 |
45.837 |
5.218 |
163,840 |
16.939 |
91.111 |
5.378 |
运行时间以秒为单位。最后一列(MATLAB/SODECL)显示了MATLAB和SODECL实现的运行时比率(加速比)。加速值大于1表示SODECL速度更快。 |
表S9。
随机Kuramoto模型的运行时间与系统尺寸轨道数的函数N=15美元$,在I4970K CPU的所有内核上使用SODECL和并行MATLAB实现
轨道 |
SODECL公司 |
MATLAB软件 |
MATLAB/SODECL软件 |
512 |
0.772 |
0.529 |
0.686 |
5,120 |
1.606 |
5.050 |
3.144 |
25,600 |
5.256 |
25.322 |
4.817 |
40,960 |
7.987 |
40.642 |
5.087 |
81,920 |
15.279 |
80.467 |
5.266 |
163,840 |
29.882 |
161.250 |
5.396 |
运行时间以秒为单位。最后一列(MATLAB/SODECL)显示了MATLAB和SODECL实现的运行时比率(加速比)。加速值大于1表示SODECL速度更快。 |
出版历史:2019年4月收到;2020年2月修订;2020年2月验收