一种基于自适应线程束的GPU并行粒子群优化方法与流程

文档序号:12122784阅读:来源:国知局

技术特征:

1.一种基于自适应线程束的GPU并行粒子群优化方法,其特征在于,

将每个粒子的维度划分为若干个线程束,使用线程块来包含所述线程束,使得一个线程块中对应一个或多个粒子;

其中,所述线程束是SM调度和执行的基本单位。

2.根据权利要求1所述的一种基于自适应线程束的GPU并行粒子群优化方法,其特征在于,基于以下公式调整粒子所对应的线程束的个数WarpNum以及线程块所对应的粒子数ParticleNum:

WarpNum=DivUp(D,WarpSize) (8)

ThreadNum=WarpNum*WarpSize (9)

ParticleNum=

DivDown(BlockSize,ThreadNum) (10)

式中,D表示求解问题的维度,WarpSize表示CUDA架构中一个线程束的大小;DivUp函数的功能是将D除以WarpSize得到的商做向上取整,以得到粒子所对应Warp的个数WarpNum;ThreadNum用来表示每个粒子实际用到的线程总数;BlockSize表示CUDA架构中一个Block的大小,DivDown函数的功能是将BlockSize除以ThreadNum得到的商做向下取整,以得到Block所对应的粒子数ParticleNum。

3.根据权利要求1所述的一种基于自适应线程束的GPU并行粒子群优化方法,其特征在于,在调用核函数之前,

基于自适应线程束算法,利用以下公式计算并初始化每个核函数的线程块的个数BlockNum以及网格的个数GridNum:

BlockNum=TreadNum*ParticleNum;

GridNum=DivUp(N,ParticleNum);

式中,ThreadNum用来表示每个粒子实际用到的线程总数;ParticleNum为线程块所对应的粒子数;N为粒子群中粒子的总个数。

4.根据权利要求1所述的一种基于自适应线程束的GPU并行粒子群优化方法,其特征在于,

定义三个CUDA核函数,分别用于并行计算粒子的速度和位置、粒子的适应度值及下一代粒子自身所找到的最好适应度值及其对应的解、整个粒子群到目前为止找到的最好适应度值及其对应的解。

5.根据权利要求4所述的一种基于自适应线程束的GPU并行粒子群优化方法,其特征在于,具体包括以下步骤:

步骤2.1:计算粒子的速度和位置内核,每个GPU线程按照分配好的线程块个数BlockNum和网格个数GridNum,通过粒子群算法的计算公式对应的计算每个问题某一维度对应的速度和位置;

步骤2.2:计算粒子的适应度值及下一代粒子自身所找到的最好适应度值及其对应的解内核,按照分配好的BlockNum和GridNum并行计算每个粒子每个维度的适应度值,再根据每个维度的适应度值通过并行规约算法,得到每个粒子的适应度值,最后根据得到的适应度值,更新粒子的适应度值及其所对应的解;

步骤2.3:计算整个粒子群到目前为止找到的最好适应度值及其对应的解内核,通过使用CUBLAS的cublasI<t>amin()函数(t为操作对象的数据类型)在GPU上求得整个粒子群到目前为止找到的最好适应度值及其对应的解。

6.根据权利要求1所述的一种基于自适应线程束的GPU并行粒子群优化方法,其特征在于,基于以下公式初始化问题函数:

<mrow> <msub> <mi>f</mi> <mrow> <mi>S</mi> <mi>p</mi> <mi>h</mi> <mi>e</mi> <mi>r</mi> <mi>e</mi> </mrow> </msub> <mrow> <mo>(</mo> <mi>x</mi> <mo>)</mo> </mrow> <mo>=</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>d</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>D</mi> </munderover> <msubsup> <mi>x</mi> <mi>d</mi> <mn>2</mn> </msubsup> <mo>,</mo> <msub> <mi>x</mi> <mi>d</mi> </msub> <mo>&Element;</mo> <mo>&lsqb;</mo> <mo>-</mo> <mn>100</mn> <mo>,</mo> <mn>100</mn> <mo>&rsqb;</mo> <mo>;</mo> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>)</mo> </mrow> </mrow>

<mrow> <mtable> <mtr> <mtd> <mrow> <msub> <mi>f</mi> <mrow> <mi>R</mi> <mi>a</mi> <mi>s</mi> <mi>t</mi> <mi>r</mi> <mi>i</mi> <mi>g</mi> <mi>r</mi> <mi>i</mi> <mi>n</mi> </mrow> </msub> <mrow> <mo>(</mo> <mi>x</mi> <mo>)</mo> </mrow> <mo>=</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>d</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>D</mi> </munderover> <mo>&lsqb;</mo> <msubsup> <mi>x</mi> <mi>d</mi> <mn>2</mn> </msubsup> <mo>-</mo> <mn>10</mn> <mi>c</mi> <mi>o</mi> <mi>s</mi> <mrow> <mo>(</mo> <mn>2</mn> <msub> <mi>&pi;x</mi> <mi>d</mi> </msub> <mo>)</mo> </mrow> <mo>+</mo> <mn>10</mn> <mo>&rsqb;</mo> </mrow> </mtd> </mtr> <mtr> <mtd> <mrow> <mo>,</mo> <msub> <mi>x</mi> <mi>d</mi> </msub> <mo>&Element;</mo> <mo>&lsqb;</mo> <mo>-</mo> <mn>5.12</mn> <mo>,</mo> <mn>5.12</mn> <mo>&rsqb;</mo> </mrow> </mtd> </mtr> </mtable> <mo>;</mo> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>2</mn> <mo>)</mo> </mrow> </mrow>

<mrow> <mtable> <mtr> <mtd> <mrow> <msub> <mi>f</mi> <mrow> <mi>R</mi> <mi>o</mi> <mi>s</mi> <mi>e</mi> <mi>n</mi> <mi>b</mi> <mi>r</mi> <mi>o</mi> <mi>c</mi> <mi>k</mi> </mrow> </msub> <mrow> <mo>(</mo> <mi>x</mi> <mo>)</mo> </mrow> <mo>=</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>d</mi> <mo>=</mo> <mn>1</mn> </mrow> <mrow> <mi>D</mi> <mo>-</mo> <mn>1</mn> </mrow> </munderover> <mo>&lsqb;</mo> <mn>100</mn> <msup> <mrow> <mo>(</mo> <msub> <mi>x</mi> <mrow> <mi>d</mi> <mo>+</mo> <mn>1</mn> </mrow> </msub> <mo>-</mo> <msubsup> <mi>x</mi> <mi>d</mi> <mn>2</mn> </msubsup> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup> <mrow> <mo>(</mo> <msub> <mi>x</mi> <mi>d</mi> </msub> <mo>-</mo> <mn>1</mn> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>&rsqb;</mo> </mrow> </mtd> </mtr> <mtr> <mtd> <mrow> <mo>,</mo> <msub> <mi>x</mi> <mi>d</mi> </msub> <mo>&Element;</mo> <mo>&lsqb;</mo> <mo>-</mo> <mn>10</mn> <mo>,</mo> <mn>10</mn> <mo>&rsqb;</mo> </mrow> </mtd> </mtr> </mtable> <mo>;</mo> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>3</mn> <mo>)</mo> </mrow> </mrow>

其中,fSphere为问题函数Sphere的求解公式,fRastrigrin为问题函数Rastrigrin的求解公式,fRosenbrock为问题函数Rosenbrock的求解公式,x为问题函数变量,D为问题函数的维度。

7.根据权利要求6所述的一种基于自适应线程束的GPU并行粒子群优化方法,其特征在于,基于以下公式更新粒子群的公式:

<mrow> <mtable> <mtr> <mtd> <mrow> <msub> <mi>V</mi> <mrow> <mi>i</mi> <mi>d</mi> </mrow> </msub> <mrow> <mo>(</mo> <mi>t</mi> <mo>+</mo> <mn>1</mn> <mo>)</mo> </mrow> <mo>=</mo> <msub> <mi>wV</mi> <mrow> <mi>i</mi> <mi>d</mi> </mrow> </msub> <mrow> <mo>(</mo> <mi>t</mi> <mo>)</mo> </mrow> <mo>+</mo> <msub> <mi>c</mi> <mn>1</mn> </msub> <msub> <mi>r</mi> <mn>1</mn> </msub> <mrow> <mo>(</mo> <msubsup> <mi>P</mi> <mrow> <mi>i</mi> <mi>d</mi> </mrow> <mi>b</mi> </msubsup> <mo>(</mo> <mi>t</mi> <mo>)</mo> <mo>-</mo> <msub> <mi>X</mi> <mrow> <mi>i</mi> <mi>d</mi> </mrow> </msub> <mo>(</mo> <mi>t</mi> <mo>)</mo> <mo>)</mo> </mrow> </mrow> </mtd> </mtr> <mtr> <mtd> <mrow> <mo>+</mo> <msub> <mi>c</mi> <mn>2</mn> </msub> <msub> <mi>r</mi> <mn>2</mn> </msub> <mrow> <mo>(</mo> <msubsup> <mi>P</mi> <mi>d</mi> <mrow> <mi>g</mi> <mi>b</mi> </mrow> </msubsup> <mo>(</mo> <mi>t</mi> <mo>)</mo> <mo>-</mo> <msub> <mi>X</mi> <mrow> <mi>i</mi> <mi>d</mi> </mrow> </msub> <mo>(</mo> <mi>t</mi> <mo>)</mo> <mo>)</mo> </mrow> </mrow> </mtd> </mtr> </mtable> <mo>;</mo> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>4</mn> <mo>)</mo> </mrow> </mrow>

Xid(t+1)=Xid(t)+Vid(t); (5)

其中,Vid表示每个粒子的速度,t表示当前的迭代代数,w表示粒子群的惯性权重系数,c1和c2表示粒子群的加速因子,r1和r2是[0,1]区间中均匀分布的随机数,表示该粒子的个体极值,表示整个粒子群的全局极值,Xid表示该粒子的当前位置(解);

基于以下公式更新粒子群参数w和C1/C2:

w=1/(2*ln(2)); (6)

c1=c2=0.5+ln(2); (7)。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1