- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序的并发性和进程交互原语-程序设计语言原理
MPI MPI是一种基于消息传递模型的并行编程接口,目前已经发展成为消息传递模型的代表和事实上的工业标准,而不是一门具体的语言。迄今为止,所有的并行计算机制造商都提供对MPI的支持,因而从理论上说任何一个正确的MPI程序可以不加修改地在所有并行计算机上运行。 MPI只是一个并行编程语言标准,要编写基于MPI的并行程序,还必须借助某一MPI具体实现。MPICH是Linux平台下最重要的一种MPI实现, 是一个与MPI规范同步发展的版本。每当MPI标准推出新的版本时,MPICH就会有相应的实现版本。LAM(Local Area Multicomputer)是Linux平台下另一免费的MPI实现。它由Ohio州立大学开发,主要用于异构的网格计算并行系统。 MPI MPI--Message Passing Interface: /mpi 支持Xwindow的MPICH: /mpi/mpich XMPI: XMPI - A Run/Debug GUI for MPI /lam/lam/xmpi.html 并行程序示例 /*====================* * mpi_hello.c - demo program of mpich. * *====================*/ #include #include “mpi.h” int main(int argc, char **argv) { int myrank, nprocs, namelen; char processor_name[mpi_max _processor_name]; mpi_init(argc, argv); mpi_comm_size(mpi_comm_ world, nprocs); mpi_comm_rank(mpi_comm _world, myrank); mpi_get_processor_name(processor_name, namelen); printf(“hello world! i’m rank %d of %d on %s\n”, myrank, nprocs, processor_name); mpi_finalize(); return 0; } 并行程序示例 Master.c #include “pvm3.h” #define SLAVE1 “slave1” #define SLAVE2 “slave2” Main() { int mytid,tids1[2],tids2;… pvm_spawn(SLAVE1,char(**)0,0,””,nproc1,tids1); pvm_spawn(SLAVE2,char(**)0,0,””,nproc2,tids2);… pvm_initsend(PvmDataRaw); pvm_pkint(n,1,1); pvm_mcast(tids1,nporc1,0);… pvm_send(tids2.0); pvm_recv(-1,msgtype);… pvm_exit(); } Slave1.c, slave2.c Java对并行的支持 以synchronized控制模块的同步 支持多线程编程 以synchronized控制模块的同步 Java使用监控器(Monitor)作为线程同步的机制。每一个对象都有一个监控器与之相对应。可以用synchronized关键字请求得到某个对象的监控器。在任何时刻,只能有一个线程可以拥有某个对象的监控器。如果有多个线程申请某个对象的监控器,系统会阻塞这些线程。如果监控器的使用者释放了监控器的拥有权,系统就会唤醒某个申请该监控器的阻塞线程。 Java对并行的支持 支持多线程编程 线程的状态 初始态:线程对象被创建但没有被运行时的状态; 运行态:线程对象被启动,进入CPU的调度队列,开始执行另外的运行线索; 阻塞态:线程对象由于某种原因,不能继续执行,CPU不再为它分配时间片。但是,这时的线程仍然是有生命的,一旦条件满足,它能够再次进入运行态,继续执行剩余的任务; 死亡态:线程执行完任务,或者被强行结束。进入死亡态后,该线程不能再次返回运行态。 Java对并行的支持 Java线程状态的转化: Java的线程也是对象,由java.lang.Thread类继承而来。Thread 类中有run方法,子类线程覆盖这个方法,将需要执行的语句 填入run方法中。这样,当该线程被启动时,它会自动执行run 方法中的语句。 线程原语。java.lang.Thread类中有如下方法: sta
文档评论(0)