Chinaunix首页 | 论坛 | 博客
  • 博客访问: 57462
  • 博文数量: 13
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 151
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-10 15:31
文章分类

全部博文(13)

文章存档

2014年(13)

我的朋友

分类: WINDOWS

2014-05-07 12:00:57

做了一个关于FORTRAN中MPI_CHARACTER的有趣测试:
(环境:CVF+F90+MPICH2)

点击(此处)折叠或打开

  1. program main
  2. !USE MPI
  3. include 'mpif.h'
  4. character*50 message
  5. integer myid,numprocs,ierr
  6. integer status(MPI_STATUS_SIZE)

  7. message="hello process 1"
  8. call MPI_INIT(ierr)
  9. call MPI_COMM_RANK(MPI_COMM_WORLD,myid,ierr)
  10. call MPI_COMM_SIZE(MPI_COMM_WORLD,numprocs,ierr)

  11. if (myid==0) then
  12.    call MPI_SEND(message,1,MPI_CHARACTER,1,99,MPI_COMM_WORLD,ierr)
  13. else if(myid==1) then
  14.   call MPI_RECV(message,1,MPI_CHARACTER,0,99,MPI_COMM_WORLD,ierr,status)
  15.    WRITE(*,*) message
  16. end if

  17. call MPI_FINALIZE(ierr)

  18. end
结果显示:

如果增大message的长度,改为:hello process 1!hello process 1!hello process 1!hello process 1!

点击(此处)折叠或打开

  1. program main
  2. !USE MPI
  3. include 'mpif.h'
  4. character*50 message
  5. integer myid,numprocs,ierr
  6. integer status(MPI_STATUS_SIZE)

  7. message="hello process 1!hello process 1!hello process 1!hello process 1!"
  8. call MPI_INIT(ierr)
  9. call MPI_COMM_RANK(MPI_COMM_WORLD,myid,ierr)
  10. call MPI_COMM_SIZE(MPI_COMM_WORLD,numprocs,ierr)

  11. if (myid==0) then
  12.    call MPI_SEND(message,1,MPI_CHARACTER,1,99,MPI_COMM_WORLD,ierr)
  13. else if(myid==1) then
  14.   call MPI_RECV(message,1,MPI_CHARACTER,0,99,MPI_COMM_WORLD,ierr,status)
  15.    WRITE(*,*) message
  16. end if

  17. call MPI_FINALIZE(ierr)

  18. end
运行结果则为:


由上对比可知:
1、MPI确实是以数据的个数来计数的,而不是以数据字节大小来计数
   call MPI_SEND(message,1,MPI_CHARACTER,1,99,MPI_COMM_WORLD,ierr)
   call MPI_RECV(message,1,MPI_CHARACTER,0,99,MPI_COMM_WORLD,ierr,status)

2、MPI_CHARACTER最大支持50个字节的字符串
有兴趣可以做做其他类型数据的测试。
阅读(872) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~