发明名称 一种基于CPU和GPU协作的分子动力学加速方法
摘要 本发明公开了一种基于CPU和GPU协作的分子动力学加速方法,目的是提出一种通过协同使用CPU和GPU的加速方法,在较低成本的情况下实现分子动力学的加速。技术方案是使用配置有多核CPU和GPU的计算机,对待模拟的分子系统建立“网格-单元”结构存储分子信息,使用CPU和GPU动态申请和处理网格,在处理网格时,CPU以单元为单位处理网格,GPU则直接处理整个网格,实现CPU和GPU高效协作地完成分子动力学模拟。采用本发明可使得CPU核之间负载均衡,避免静态分配计算任务时CPU和GPU可能出现闲置等待的情况,CPU和GPU都能充分发挥自己的计算性能,提高了整个计算机系统的利用率,以低成本实现了分子动力学的加速。
申请公布号 CN102411658B 申请公布日期 2013.05.15
申请号 CN201110382005.1 申请日期 2011.11.25
申请人 中国人民解放军国防科学技术大学 发明人 廖湘科;杨灿群;吴强;陈娟;李春江;杜云飞;彭林;左克;石志才
分类号 G06F17/50(2006.01)I 主分类号 G06F17/50(2006.01)I
代理机构 国防科技大学专利服务中心 43202 代理人 郭敏
主权项 1.一种基于CPU和GPU协作的分子动力学加速方法,其特征在于包括以下步骤:第一步、构建配置有Q核CPU和GPU的计算机系统,Q&gt;=4,采用的GPU支持CUDA,通过PCI‐E接口与CPU相连,CPU的Q个核顺序编号为0,...,Q‐1;第二步、从存储于硬盘的文件中读入分子系统相关参数,包括截断半径R<sub>c</sub>和所有分子的数据量,其中截断半径R<sub>c</sub>表示每个分子与其他分子发生作用的最大距离,分子数据量包括分子总数目MN以及每个分子的编号、位置向量和速度向量;在CPU的内存中申请二维双精度浮点型数组Pos存储分子的位置向量,申请二维双精度浮点型数组Vel存储分子的速度向量;第三步、设置模拟参数,包括目标网格权重TW,目标模拟步数T和实际模拟步数t;所述目标网格权重TW和目标模拟步数T的值由模拟需求确定,TW的值为期望网格包含的分子数目,T的值为需要模拟的步数,实际模拟步数t初始化为0;第四步、使用“网格‐单元”结构表示分子系统,“网格‐单元”结构的建立过程如下:4.1使用“单元”结构表示分子系统,步骤为:4.1.1将分子系统划分为均匀组合的边长为R<sub>c</sub>的n个正方体区域,称这些正方体区域为单元,将这些单元顺序编号为0,...,n‐1;4.1.2在CPU的内存中初始化结构体数组SCell保存单元中的分子编号以及单元的邻接单元编号,称该结构体数组为“单元”结构,使用符号SCell[k]表示序号为k的单元,0≤k&lt;n;每个“单元”拥有一个变量成员和两个数组成员,分别为单元内分子数目AN、单元内分子编号数组AIdx和邻接单元编号数组NB;AIdx顺序存储单元中分子编号,NB顺序存储单元在三维空间中邻接26个单元的编号;用符号SCell[k].AN表示序号为k的单元包含的分子数目,用符号SCell[k].AIdx表示序号为k的单元中分子编号数组,用符号SCell[k].NB表示序号为k的单元邻接单元编号数组;4.2根据单元内分子数目SCell[k].AN将多个单元组成区域,称这些区域为网格,生成网格结构的步骤为:4.2.1计算每个单元的权重W<sub>0</sub>,W<sub>1</sub>,...,W<sub>n-1</sub>,其中W<sub>k</sub>的值为单元k中分子数目SCell[k].AN,初始化当前网格负载PW为0,起始单元编号S<sub>t</sub>为0,结束单元编号E<sub>d</sub>为0,初始化指针CP,使指针CP=SPatch;在CPU的内存中用链表保存网格中分子信息以及网格处理标识,链表的每一个节点称为一个“网格”结构;每个“网格”结构拥有一个指针、一个整型变量、一个布尔变量、一个整型数组和四个双精度浮点型数组,分别为后续“网格”指针Next,网格内单元数目CN,网格处理标识R,网格内单元编号数组CIdx,网格内分子位置信息数组Ppos,网格内分子速度信息数组Pvel,网格内分子受力信息数组Pforce,网格外分子位置信息数组Gpos;SPatch表示指向链表首节点的指针,称这个节点为SPatch指向的网格;用符号“→”引用节点中的元素;4.2.2将指向下一个网格的指针CP→Next初始化为NULL,CP指向的网格中单元数目CP→CN初始化为0,CP指向的网格处理标识CP→R初始化为False,CP指向的数组CP→CIdx、CP→Ppos、CP→Pvel、CP→Pforce、CP→Gpos全部初始化为0;4.2.3判断PW是否小于目标网格权重TW,若是,执行4.2.4,否则转4.2.6;4.2.4判断E<sub>d</sub>是否等于n‐1,若是,转4.2.6,否则执行4.2.5;4.2.5<maths num="0001"><![CDATA[<math><mrow><mi>PW</mi><mo>=</mo><mi>PW</mi><mo>+</mo><msub><mi>W</mi><mrow><msub><mi>E</mi><mi>d</mi></msub><mo>+</mo><mn>1</mn></mrow></msub><mo>,</mo></mrow></math>]]></maths>E<sub>d</sub>=E<sub>d</sub>+1,转4.2.3;4.2.6将编号S<sub>t</sub>,S<sub>t+1</sub>,...,E<sub>d</sub>顺序填入CP→CIdx数组中,根据SCell[a].AIdx中的分子编号将Pos和Vel数组对应分子的位置向量和速度向量顺序填入CP→Ppos和CP→Pvel中,S<sub>t</sub>≤a&lt;E<sub>d</sub>;顺序检查SCell[a].AIdx数组中的单元编号b,若b&lt;S<sub>t</sub>或b&gt;E<sub>d</sub>,则按SCell[b].AIdx中的分子编号将Pos和Vel数组对应分子的位置向量顺序填入CP→Gpos中,将CP→CN赋值为E<sub>d</sub>-S<sub>t</sub>+1;判断E<sub>d</sub>是否等于n‐1,若是,转第五步,否则执行4.2.7;4.2.7使PW=0,S<sub>t</sub>=E<sub>d</sub>+1,E<sub>d</sub>=E<sub>d</sub>+1,CP=CP→Next,转4.2.2;第五步、启动两个线程控制GPU和CPU并行的处理网格,称控制GPU的线程为0号线程,控制CPU的线程为1号线程,分别运行在CPU编号为0和1的核上;并行处理网格的方法为:0号线程初始化指针N<sub>0</sub>=SPatch,将N<sub>0</sub>→R置为True,执行第六步;1号线程初始化指针N<sub>1</sub>=SPatch→Next,将N<sub>1</sub>→R置为True,转第九步;第六步、0号线程控制GPU对N<sub>0</sub>指向的网格进行处理,具体做法为:6.1将N<sub>0</sub>指向的网格的数据拷贝到GPU的内存中;6.2启动GPU线程采用牛顿力学方程计算N<sub>0</sub>中每个分子所受的力,根据力和初始速度计算每个分子当前速度和位置,将计算结果存放在GPU的内存中;6.3将计算结果从GPU的内存拷贝到位于CPU的内存中的N<sub>0</sub>→Ppos和N<sub>0</sub>→Pvel数组中;第七步判断N<sub>0</sub>→Next是否为NULL,若是,转第十二步,否则执行第八步;第八步、使N<sub>0</sub>=N<sub>0</sub>→Next,判断N<sub>0</sub>→R是否为True,若是转第七步,否则将N<sub>0</sub>→R置为True并转第六步;第九步、1号线程根据CPU的核数Q启动Q‐2个子线程T<sub>0</sub>,T<sub>1</sub>,...,T<sub>Q-3</sub>运行于CPU的编号为2,3,...,Q‐1的核上,T<sub>c</sub>采用牛顿力学方程计算单元<img file="FDA00002908581400031.GIF" wi="534" he="155" /><img file="FDA00002908581400032.GIF" wi="1505" he="159" />中分子所受的力,0≤c&lt;Q-3;T<sub>Q-3</sub>采用牛顿力学方程计算单元<img file="FDA00002908581400033.GIF" wi="875" he="159" /><img file="FDA00002908581400034.GIF" wi="1530" he="160" />中分子所受的力;T<sub>0</sub>,T<sub>1</sub>,...,T<sub>Q-3</sub>将计算所得的力存放到N<sub>1</sub>→Pforce数组中,根据力和初始速度计算每个分子当前速度和位置,将计算结果存放到N<sub>1</sub>→Ppos和N<sub>1</sub>→Pvel数组中;用符号<img file="FDA00002908581400035.GIF" wi="79" he="78" />代表上取整;用SPatch→CIdx[x]代表网格SPatch中序号为x的单元编号,0≤x&lt;SPatch→CN;第十步、判断N<sub>1</sub>→Next是否为NULL,若是,则转第十二步,否则执行第十一步;第十一步、N<sub>1</sub>=N<sub>1</sub>→Next,判断N<sub>1</sub>→R是否为True,若是转第十步,否则置N<sub>1</sub>→R为True并转第九步;第十二步、等待0号线程和1号线程都运行到第十二步后,执行第十三步;第十三步、使t=t+1,判断t是否小于等于T,是则将并转第五步,否则转第十四步;第十四步、将计算结果包括分子系统中所有分子的位置向量和速度向量写入位于硬盘的文件中,结束。
地址 410073 湖南省长沙市开福区德雅路109号