设为首页 加入收藏

TOP

C指针原理(55)-C语言-pvm并行计算(二)
2014-11-23 20:15:57 来源: 作者: 【 】 浏览:20
Tags:指针 原理 语言 -pvm 并行 计算
口分离。系统 还实现了通信缓冲区的动态管理机制,每个消息所需的缓冲区由PVM运行时动态申请,消息长度只受结点上可用存储空间的限制。 PVM提出了进程组的概念,可以把一些进程组成一个进程组,一个进程可属于多个进程组,而且可以在执行时动态改变。 支持异构计算机联网构成并行虚拟计算机系统且易于安装、配置。PVM支持的异构性分为三层:机器层、应用层和网络层。也就是说,PVM允许应用任务充分利 用网络中适于求解问题的硬件结构;PVM处理所有需要的数据转换任务;PVM允许虚拟机内的多个机器用不同的网络(FDDI,Token RING和Ethernet等)相连。 具有容错功能,当发现一个结点出故障时,PVM会自动将之从虚拟机中删除。 结构紧凑。整个系统只占3M左右的空间,并且该软件系统是免费提供的

麦好的AI乐园博客所有内容是原创,如果转载请注明来源

http://blog.csdn.net/myhaspl/


示例:

1、主进程 testpvm1,发送字符串,接收大写化的字符串

C代码 收藏代码

#include "pvm3.h"

#include

int main(int argc,char *argv[]){

int RetCode,MessageId;

int PTid,Tid;

char Message[100];

char Result[100];

printf("testpvm1 get ptid.....\n");

PTid=pvm_mytid();//返回调用进程的任务标识符

if (PTid==PvmSysErr) perror("pvm_mytid() error:PvmSysErr\n");

printf("spawn testpvm2.....\n");

//深未来技术 deepfuture.iteye.com

RetCode=pvm_spawn("testpvm2",NULL,PvmTaskHost,"deepfuture-laptop",1,&Tid);

//启动一个新的PVM子进程testpvm2,用来接收和处理Message消息,转化为大写,Tid为新的任务标识

if (RetCode==1){

MessageId=1;//指明当前消息

strcpy(Message,"deepfuture.iteye.com");

pvm_initsend(PvmDataDefault);//初始化消息缓冲区

pvm_pkstr(Message);//对变量Message的内容进行打包

pvm_send(Tid,MessageId);//将消息缓冲区的消息发送,MessageId简单指明正在发送的消息

pvm_recv(Tid,MessageId);//接收消息

pvm_upkstr(Result);//将消息缓冲区的接收到的内容放到一个数组中。

printf("send:%s\n",Message);

printf("recv:%s\n",Result);

pvm_exit();

return 0;

}

else{

printf("不能启动新进程\n");

pvm_exit();

return 1;

}

}

2、从进程 testpvm2,将字符串转化为大写,然后返回给主进程

C代码 收藏代码

#include "pvm3.h"

#include

int main(int argc,char *argv[]){

int RetCode,MessageId;

int PTid;

char Message[100];

char myc[100];

int i=0;

printf("testpvm2 get ptid.....\n");

PTid=pvm_parent();//返回调用进程的任务标识符

if (PTid==PvmNoParent) perror("PvmNoParent error\n");

else if (PTid==PvmSysErr) perror("PvmSysErr error\n");

printf("testpvm2 run.....\n");

MessageId=1;//指明当前消息

pvm_recv(PTid,MessageId);//接收消息

//深未来技术 deepfuture.iteye.com

pvm_upkstr(Message);//对变量Message的内容进行解包

while (Message[i]!='\0'){ //将小写转化成大写

if (islower(Message[i]))

myc[i]=toupper(Message[i]);

else

myc[i]=Message[i];

i++;

}

myc[i]='\0';

pvm_initsend(PvmDataDefault);//初始化消息缓冲区

pvm_pkstr(myc);//对变量Message的内容进行打包

pvm_send(PTid,MessageId);//将消息缓冲区的消息发送,MessageId简单指明正在发送的消息

pvm_exit();

return 0;

}

3、makefile

深未来技术 deepfuture.iteye.com

Makefile代码 收藏代码

testpvm:testpvm1 testpvm2

sudo cp /home/deepfuture/private/mytest/pvmtest/testpvm1 /usr/lib/pvm3/bin/LINUX/testpvm1

sudo cp /home/deepfuture/private/mytest/pvmtest/testpvm2 /usr/lib/pvm3/bin/LINUX/testpvm2

testpvm1:

gcc -o /home/deepfuture/private/mytest/pvmtest/testpvm1 -lpvm3 /home/deepfuture/private/mytest/testpvm1.c

testpvm2:

gcc -o /home/deepfuture/private/mytest/pvmtest/testpvm2 -lpvm3 /home/deepfuture/private/mytest/testpvm2.c

clean:

rm /home/deepfuture/private/mytest/pvmtest/testpvm*

sudo rm /usr/lib/pvm3/bin/LINUX/testpvm*

4、二进制文件存放目录 为

$PVM_ROOT/bin/$PVM_ARCH

本机为/usr/lib/pvm3/bin/LINUX/

5、启动pvmd

pvmd &

6、运行testpvm1

deepfuture@deepfuture-laptop:/usr/lib/pvm3/bin/LINUX$ ./testpvm1

testpvm1 get ptid.....

spawn testpvm2.....

send:deepfuture.iteye.com

recv:DEEPFUTURE.iteye.com

7、在pvm控制台运行testvpm1

deepfuture@deepfuture-laptop:/us

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇数据结构程序设计――C语言学生管.. 下一篇C指针原理(56)-Ncurses-文本终端..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: