• openfoam UPstream类探索(二)


    前言

    接上次的博文,本篇补全以下几个函数的介绍:
    Pstream::nProcs()
    Pstream::parRun()
    UPstream::exit()


    简述几个常用的函数如下:

    Pstream::nProcs()
    openfoam对其的介绍是:

    Number of processes in parallel run.

    //- Number of processes in parallel run
    static label nProcs(const label communicator = 0)
    {
    return procIDs_[communicator].size();
    }
    Foam::DynamicList<int> Foam::UPstream::myProcNo_(10);
    //- List of process IDs
    static DynamicList<List> procIDs_;

    Pstream::nProcs()与上篇我们介绍的函数Pstream::myProcNo()非常相似,
    Pstream::nProcs()的介绍是Number of processes in parallel run
    Pstream::myProcNo()的介绍是Number of this process (starting from masterNo() = 0)
    按照这个程序释义来说,Pstream::nProcs()返回的是并行计算中进程的数量,而Pstream::myProcNo()返回的是从主节点开始该进程的数量
    我这英语水平不大行,没看懂其中区别,继续从源码中寻找答案

    看看两个静态成员函数的返回值
    Pstream::nProcs()的返回值是procIDs_[communicator].size(),Pstream::myProcNo()的返回值是myProcNo_[communicator]
    procIDs_与myProcNo_的定义分别是

    //- List of process IDs
    static DynamicList<List> procIDs_;
    //- My processor number
    static DynamicList<int> myProcNo_;

    单单从成份上看,procIDs_装载的是List< int >,而myProcNo_装载的只是int
    从这个角度也更能解释他们的程序注释,Pstream::nProcs()返回的是包含列表的动态列表,Pstream::myProcNo()返回的仅仅是一个int类型的动态列表
    后续遇到再结合程序案例进行分析


    Pstream::parRun()
    openfoam对其的介绍非常明确了

    //- Is this a parallel run?
    static bool& parRun()
    {
    return parRun_;
    }

    返回的是布尔型判断,默认值是false
    而且返回值是引用类型,说明可以在程序运行时随时更改

    bool Foam::UPstream::parRun_(false);

    所以这句话也经常在判断语句中使用,如:

    if (nProcs == 0)
    {
    parRun_ = false;
    statement();
    }

    这段语句说明如果是在主节点运行,我这个标识符就置为false
    当然也这样使用

    if (doPstream && parRun())//并行处理前的判定
    {
    statement();
    }

    Pstream::exit()
    这个可以参考该链接
    之所以用exit()函数,因为他是强制关闭,类似正在开机的电脑长摁电源键几秒


    结语

    并行计算是很大的一个研究范围,这里只是简略的说了其中较为常用的几个函数和使用详情
    本文得到的结论或发现也未必正确,因而以探索为名

    授之以鱼不如授之以渔,我更提倡的是本篇文章中研究of的方法,
    咱讲实话,这么弄确实进度很慢的
    但好事多磨,看你打算理解到什么程度,如果只是为了应付毕业那完全没必要看源码
    of本身的价值远非如此是吧,不知道有没有道友也会这么想
    学习曲线就是开始很缓慢后续很陡峭,
    没办法,该花的时间要花的
    修行在个人,修行在个人

    一起探索openfoam也是相当有趣的一件事,非常欢迎私信讨论
    指正的价值要比打赏更重要,下面是个人联系方式,希望能结交到志同道合的朋友
    image

  • 相关阅读:
    Angular中的Email正则表达式翻译
    Java游戏项目之“超级玛丽”实战教程,终于可以制作属于自己的小游戏了
    LeetCode 232.用栈实现队列
    异步电机控制算法更新列表
    架构探索之路-第一站-clickhouse | 京东云技术团队
    QT常用的控件总结
    ES6高级-Promise的用法
    yolov8如何进行训练验证推理
    进博看点|数据分析管控供应链风险
    Windows 实时语音转文字|免费语音视频翻译转文字|语音会议记录方案
  • 原文地址:https://www.cnblogs.com/heloveHe/p/17154183.html