linux下面一个简单ps的实现

      理解重点:要清楚/proc目录下放的东西,数字目录的意思代表的就是相应的进程,stat里面的放置的就是该进程的讯息,你要理解stat里面放置的每一个信息代表的含义

      核心思想:很简单,就是进入到相应文件去把里面的信息对应的提取出来

      (1)进入/proc

      (2)判断是否是进程文件

      (3)从文件的stat里面提取信息

        我这里做了一个简单的实现,仅仅实现ps,记得判断是否是一个终端,后面还会再次更新,就不把代码贴上来了。

        实现过程中我参考了下面这位的博客,我只是把他的代码整合了一下然后修改了一小部分,大部分还是这位写的。

http://blog.csdn.net/lijunfan1994/article/details/45171497

         如果要参考代码的话可以从她的哪里进行学习。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了编一个MPI实现PS-Worker算法,我们需要先了解PS-Worker算法是什么以及它的工作原理。PS-Worker算法是一种分布式机器学习算法,它是由Google开发的,用于训练大规模模型。该算法是基于参数服务器和工作节点的架构设计的。 参数服务器(Parameter Server)是一个分布式系统,用于存储和管理模型的参数。工作节点(Worker)是执行训练任务的节点。在PS-Worker算法中,工作节点从参数服务器中获取模型参数,并使用这些参数进行训练。训练结束后,工作节点将更新后的模型参数传回参数服务器。 下面一个简单Linux系统下的用MPI实现PS-Worker算法的示例: ``` #include <stdio.h> #include <mpi.h> int main(int argc, char** argv) { int rank, size; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); // 执行PS-Worker算法的代码 MPI_Finalize(); return 0; } ``` 上面的代码使用MPI库初始化了一个MPI环境,并获取了当前进程的rank和进程总数。接下来,我们需要编PS-Worker算法的具体实现。 在PS-Worker算法中,工作节点需要从参数服务器获取模型参数。我们可以使用MPI的Send和Recv函数来实现这个功能。假设参数服务器的rank为0,我们可以使用以下代码从参数服务器获取模型参数: ``` if (rank != 0) { // 工作节点从参数服务器获取模型参数 double* params; int n_params; MPI_Recv(&n_params, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); params = (double*) malloc(n_params * sizeof(double)); MPI_Recv(params, n_params, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); } ``` 在训练过程中,工作节点需要使用获取到的模型参数执行训练任务。训练结束后,工作节点需要将更新后的模型参数传回参数服务器。我们同样可以使用MPI的Send和Recv函数来实现这个功能。假设参数服务器的rank为0,我们可以使用以下代码将更新后的模型参数传回参数服务器: ``` if (rank != 0) { // 工作节点将更新后的模型参数传回参数服务器 double* new_params; int n_params; // 执行训练任务,获取更新后的模型参数 // ... MPI_Send(&n_params, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); MPI_Send(new_params, n_params, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD); } ``` 在参数服务器上,我们需要编一个循环来接收所有工作节点传回的更新后的模型参数,并将它们合并成一个模型参数。假设工作节点的rank从1到N-1,我们可以使用以下代码来实现这个功能: ``` if (rank == 0) { // 参数服务器接收所有工作节点传回的更新后的模型参数,并合并它们成一个模型参数 double* params; int n_params = 0; for (int i = 1; i < size; i++) { int worker_n_params; MPI_Recv(&worker_n_params, 1, MPI_INT, i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); params = (double*) realloc(params, (n_params + worker_n_params) * sizeof(double)); MPI_Recv(params + n_params, worker_n_params, MPI_DOUBLE, i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); n_params += worker_n_params; } // 更新模型参数 // ... } ``` 最后,我们需要在每个进程结束时调用MPI_Finalize函数来关闭MPI环境。 PS-Worker算法的具体实现可能会因为不同的应用场景而有所不同,上面的示例只是一个简单的参考。如果需要更详细的实现,请参考MPI库的官方文档或者相关论文。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值