腾讯高性能图计算框架Plato代码阅读 进程启动及环境初始化

Posted archimekai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了腾讯高性能图计算框架Plato代码阅读 进程启动及环境初始化相关的知识,希望对你有一定的参考价值。

腾讯高性能图计算框架Plato代码阅读(一) 进程启动及环境初始化

archimekai archimekai@163.com

引言

Plato是腾讯开源的高性能分布式图计算框架。Plato吸收了Gemini和KnightKing两个学术界系统的优秀思想,常见算法的执行性能可以比Spark GraphX快一到两个数量级,同时内存消耗比Spark GraphX降低一到两个数量级。

接下来我同大家一起阅读plato源代码,学习其中的设计方法和编程技巧。

进程启动及环境初始化

进程启动命令

进程启动命令在 run_pagerank.sh 中,可以看到,其中使用了mpiexec.hydra 进行了pagerank任务的启动,简化后的启动命令为:
mpiexec.hydra -n 4 ./pagerank --threads 4

mpiexec.hydra为Intel提供的MPI作业启动命令,命令手册
-n 4 为local hydra options,其含义为,启动4个MPI进程,4个MPI进程协同执行./pagerank作业。

集群场景下,可以通过mpiexec.hydra提供的 -hostfile全局参数指定要执行任务的机器。

集群信息初始化

./pagerank作业所对应的main函数在pagerank.cc

集群信息需要使用initialize方法初始化,如下:

auto& cluster_info = plato::cluster_info_t::get_instance();
cluster_info.initialize(&argc, &argv);
核心操作在cluster_info_t.initialize()方法中,关键代码如下 :

  void initialize(int* argc, char*** argv) 

    install_oneshot_signal_handlers();

    MPI_Init_thread(argc, argv, MPI_THREAD_MULTIPLE, &provided);
    MPI_Comm_size(MPI_COMM_WORLD, &partitions_);
    MPI_Comm_rank(MPI_COMM_WORLD, &partition_id_);

    threads_ = numa_num_configured_cpus();

    omp_set_dynamic(0);
    omp_set_num_threads(threads_);

    sockets_ = numa_num_configured_nodes();

    initialized = true;
  

这个函数主要做了以下几件事:

  1. 通过install_oneshot_signal_handlers()屏蔽大部分信号
  2. 初始化MPI环境,以当前所使用的MPI进程数作为partitions_,也即有几个MPI进程,就将图切分为几个分区,以当前进程所处的MPI rank作为进程负责加载和处理的图分区编号。
  3. 通过numa_num_configured_cpus()获取当前系统中CPU的数目(核数),参考 https://linux.die.net/man/3/numa
  4. 初始化OpenMP环境,omp_set_dynamic(0) 表示禁用动态调节线程数的功能,omp_set_num_threads(threads_)表示将OpenMP的线程数设置为当前系统中CPU的数目。这一设置会影响后面标记了#pragma omp parallel的代码区域,在这些区域中, 会按照上述设置并行执行计算。
  5. 通过numa_num_configured_nodes()获取当前系统中memory nodes的数量,保存在sockets_变量中,可以简单理解为numa系统中物理上安装了几个CPU。sockets_变量会用在后面的numa亲和计算中。

集群信息初始化完毕后,就进入图加载和图切分的环节,我们下回再讲。

以上是关于腾讯高性能图计算框架Plato代码阅读 进程启动及环境初始化的主要内容,如果未能解决你的问题,请参考以下文章

腾讯高性能图计算框架Plato代码阅读 进程启动及环境初始化

腾讯高性能图计算框架Plato代码阅读 图加载

腾讯高性能图计算框架Plato代码阅读 图加载

腾讯高性能图计算框架Plato代码阅读 图加载

腾讯开源进入爆发期,Plato助推十亿级节点图计算进入分钟级时代

Nebula Graph + Plato调研总结