Palabos转为GPU并行运行

AcceleratedLattice

AcceleratedLattice3D 类似于MultiBlockLattice3D。同理,AtomicAcceleratedLattice3D也是类比于BlockLattice3D。
在原有grid上定义的

Cell<T,Descriptor> *rawData;
Cell<T,Descriptor> ***grid;

成为了

T *populations, *tmpPopulations;
T ****populationGrid, ****tmpPopulationGrid;
External *externalScalars;
External **externalScalarGrid;
Dynamics<T,Descriptor>
dynamicsArray;
Dynamics<T,Descriptor>
***dynamicsGrid;

在碰撞迁移的时候,从populations里面读取数据,再碰撞迁移到tmpPopulations。当迭代完成后,populations和tmpPopulations的值会互换。

程序使用

在使用时,代码之前需要添加更多库。

#include "atomicBlock/acceleratedDefinitions.h"
#define ACCELERATOR PAR_ALG
//#define ACCELERATOR OMP_HOMOGENEOUS

#include "palabos3D.h"
#include "palabos3D.hh"

然后将MultiBlockLattice3D换成AcceleratedLattice3D。当然这么做的话,数据处理器是无法在AcceleratedLattice3D上运作的,因为Palabos的数据是array-of-structure,而structure-of-array数据更适合GPU。

由此思路是前后处理可以用MultiBlockLattice,但是碰撞和迁移用AcceleratedLattice。可通过AcceleratedLattice3D<T, DESCRIPTOR> accLattice(lattice);将MultiBlockLattice3D的lattice的数据复制到AcceleratedLattice3D中。再通过accLattice.writeBack(lattice);写入回去。

Dynamics<T,DESCRIPTOR> *dyn = new BGKdynamics<T,DESCRIPTOR>(omega);
MultiBlockLattice3D<T, DESCRIPTOR> lattice (nx, ny, nz, dyn); // Set up a non-accelerated multi-block lattice
simulationSetup(lattice); // Do all pre-processing on the multi-block lattice

AcceleratedLattice3D<T, DESCRIPTOR> accLattice(lattice); // Copy all data to an accelerated lattice
for (plint iT=0; iT<tmax; ++iT) {
    if (doOutput) {
        accLattice.writeBack(lattice); // Copy back to the multi-block lattice
        writeVTK(lattice); // Perform output from the multi-block lattice
    }
    accLattice.collideAndStream(); // Collision-streaming is done on the accelerated lattice
}

更多

如果想要在gpu加速的block上执行数据处理器,那么还需要更多调整,可参考原链接:
https://gitlab.com/unigehpfs/palabos/-/tree/master/examples/80days

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值