因为比较常用的是 TCP 协议,所以在 opal/mca/btl/tcp/btl_tcp.h 头文件中找到对应的 struct mca_btl_tcp_component_t { mca_btl_base_component_3_0_0_t super; /**< base BTL component */ uint32_t tcp_addr_count; /**< total number of addresses */ uint32_t tcp_num_btls; /**< numb…
0x.00 前言 项目工程化系列文章链接如下,推荐按照顺序阅读文章 . 1️⃣ 源码剖析之工程化(一):项目概览.package.json.npm script 2️⃣ 源码剖析之工程化(二):项目构建.MD解析 3️⃣ 源码剖析之工程化(三):打包配置 前文对项目目录结构.package.json.npm script各命令任务内容和执行过程进行了概述.书接上文,build 目录下定义了许多项目构建脚本和配置(开发,打包,部署,持续集成). npm script各命令作为入口,会调用 buil…
OpenMPI的底层实现: 我们知道,OpenMPI应用起来还是比较简单的,但是如果让我自己来实现一个MPI的并行计算,你会怎么设计呢?————这就涉及到比较底层的东西了. 回想起我们最简单的代码,通过comm_rank来决定做不同的事情,那么这个comm_rank是怎么得到的呢? 源代码从哪里看起?在百度,谷歌都没有找到关于源码剖析的一些资料,只能先找找头文件 mpi.h搜索找到了在ompi/include/mpi.h.in中的一个文件,查找一下最简单的函数 MPI_Comm_size 和 M…
MPI中的网络通信的原理,需要解决以下几个问题: 1. MPI使用什么网络协议进行通信? 2.中央数据库是存储在哪一台机器上? 3.集群中如果有一台机器挂掉了是否会影响其他机器? 参考: https://aosabook.org/en/openmpi.html 根据MCA, 每个框架下的模块是可变的,例如, btl (字节传输层)框架下有N多个网络协议模块: 既然是可变的,但是我们运行的时候都没有传入对应的选择参数,也就是说明有默认值. 官方文档也说了,工程师和科学家尽可能帮我们选择一个合理的默…
PluginSDK中的点主要有二维和三维两种类型,分别用来描述平面和立体点.其类图如下. 这两个类比较简单.其字段成员主要用来描述点对象在各坐标轴上的分量. 属性Length用来返回二维和三维点的距离坐标原点的长度. 二维点定义了点积运算dot,三维点同时定义了点积dot/dotProduct和叉积运算cross. Norm.norm2.normalize分别完成了二阶范数.平方二阶范数.规范化操作. 三维点的unit_normal方法用于计算由三个按右手遍历的有序输入点构成的平面的单位规范化方…
上一篇文章中说道,我们在 rte.h 中发现了有价值的说明: 我们一块一块来分析,首先看到第一块,关于 Process name Object: * (a) Process name objects and operations // 进程名Object * 1. Definitions for integral types ompi_jobid_t and ompi_vpid_t. * The jobid must be unique for a given MPI_COMM_WORLD ca…
一.CacheManager总览 如果需要Spring缓存可以正常工作,必须配置一个CacheManager. CacheManager实现类你可以配置Spring-context本身提供的SimpleCacheManager和ConcurrentMapCacheManager等.或者使用RedisCacheManager将缓存内容存放到Redis中.下面类图中RedisCacheManager来自于spring-data-redis  jar包中,AbstractTransactionSupp…
ITERATOR 迭代器 template<class InputIterator,class T> InputIterator find(InputIterator first,InputIterator last,const T& value) { while(first != last && *first != value) ++first; return first; } 代码示例 #include <iostream> #include <v…
接着上一篇的疑问,我们说道,会执行 try_kill_peers 函数,它的函数定义在 ompi_mpi_abort.c 下: // 这里注释也说到了,主要是杀死在同一个communicator的进程(不包括自己) /* * Local helper function to build an array of all the procs in a * communicator, excluding this process. * * Killing a just the indicated pe…
上一篇文章说道,初始化失败会有一个函数调用: ompi_mpi_errors_are_fatal_comm_handler(NULL, NULL, message); 所以这里简单地进入了 ompi_mpi_errors_are_fatal_comm_handler 函数:看到其头文件 errhandler_predefined.h : #ifndef OMPI_ERRHANDLER_PREDEFINED_H #define OMPI_ERRHANDLER_PREDEFINED_H #inclu…