c**********w 发帖数: 1746 | 1 发信人: chairmanmeow (chairmanmeow), 信区: Programming
标 题: 哪位帮忙看一个极为简单的 MPI 程序,感谢拉!
发信站: BBS 未名空间站 (Sat Jul 17 13:59:56 2010, 美东)
这个程序就是想测试一下ISEND和IRECV。启动四个线程,每个把一个数字发到rank+1的
下一个thread上,最后一个rank为3的发回到rank=0的线程,用WAIT_ALL等待,然后把
结果打印出来,已经编译成功,发现四个线程也都启动,但却不能通讯。测试条件为
quad-core, linux, openMP
程序:
program hello
USE mpi
integer rank, size, ierror, status(MPI_STATUS_SIZE)
integer dest,tag, ierr,tag2, req(2), src
REAL*8 res, msg, ans,sout
integer status_array(MPI_STATUS |
h**********c 发帖数: 4120 | 2 尽管没太理解您的目的,但没看到monitor,semaphore 之类的关键字,
所以最好从一个现成的例题入手,每次只做很小改动较好,
另外您用的是什么语言? |
r*******y 发帖数: 1081 | 3 seems fortran
【在 h**********c 的大作中提到】 : 尽管没太理解您的目的,但没看到monitor,semaphore 之类的关键字, : 所以最好从一个现成的例题入手,每次只做很小改动较好, : 另外您用的是什么语言?
|
m********v 发帖数: 11 | 4 The tag for the same message must be the same on both the sender and the
receiver. I don't see that happen in the code. tag2 is not assigned a value. |
c**********w 发帖数: 1746 | 5 您是说fortran过时了还是mpi过时了,现在科学计算好像FORTRAN还是主流吧
【在 h**********c 的大作中提到】 : 尽管没太理解您的目的,但没看到monitor,semaphore 之类的关键字, : 所以最好从一个现成的例题入手,每次只做很小改动较好, : 另外您用的是什么语言?
|
c**********w 发帖数: 1746 | 6 把TAG2改成TAG了,现在程序仍然是stuck,连
what I send out 110.000000000000
what I received 0.000000000000000E+000
这两句也不出现了。奇怪阿,没法理解
value.
【在 m********v 的大作中提到】 : The tag for the same message must be the same on both the sender and the : receiver. I don't see that happen in the code. tag2 is not assigned a value.
|
c**********w 发帖数: 1746 | 7 搞定了,irecv那个改成MPI_ANY_TAG就成了
误打误撞弄明白了一个看using MPI里confused的问题,以为TAG是用来传个信息的,谢
谢你!!
value.
【在 m********v 的大作中提到】 : The tag for the same message must be the same on both the sender and the : receiver. I don't see that happen in the code. tag2 is not assigned a value.
|
b******v 发帖数: 1493 | 8 tag确实是用来标记信息的
我觉得你程序的问题在于
tag = rank * 100
这一句
这样,在不同的processor那里的tag分别是0, 100, 200, 300
从而,processor 1发送的消息tag是100,但是processor 2在等tag为200的消息
所以出问题了
【在 c**********w 的大作中提到】 : 搞定了,irecv那个改成MPI_ANY_TAG就成了 : 误打误撞弄明白了一个看using MPI里confused的问题,以为TAG是用来传个信息的,谢 : 谢你!! : : value.
|
g****t 发帖数: 31659 | 9 fortran肯定还是主流.一来以前留下的东西太多.
二来C因为什么原因慢,我不记得了.
【在 c**********w 的大作中提到】 : 您是说fortran过时了还是mpi过时了,现在科学计算好像FORTRAN还是主流吧
|
h**********c 发帖数: 4120 | 10 我想可能是因为compiler对floating point 运算的青睐程度吧,
有一个bordering algorithm, 我当时想,用c写singaling
然后把fortran code做一个库来调,
记得还有有个fortran2c,评价非常烂。
后来bordering algorithm有人做出来了,没轮到我。
fortran mpi推出的时间好像不是很长。
【在 g****t 的大作中提到】 : fortran肯定还是主流.一来以前留下的东西太多. : 二来C因为什么原因慢,我不记得了.
|
b**g 发帖数: 335 | 11 C has unrestricted pointer aliasing, but Fortran does not,
so C compiler cannot generate highly efficient code.
http://en.wikipedia.org/wiki/Restrict
C99 has "restrict" keyword to address this issue.
(F90 has pointers, and by design they are all restrict)
【在 h**********c 的大作中提到】 : 我想可能是因为compiler对floating point 运算的青睐程度吧, : 有一个bordering algorithm, 我当时想,用c写singaling : 然后把fortran code做一个库来调, : 记得还有有个fortran2c,评价非常烂。 : 后来bordering algorithm有人做出来了,没轮到我。 : fortran mpi推出的时间好像不是很长。
|
h**********c 发帖数: 4120 | 12 http://www.ibiblio.org/pub/languages/fortran/ch1-2.html
【在 b**g 的大作中提到】 : C has unrestricted pointer aliasing, but Fortran does not, : so C compiler cannot generate highly efficient code. : http://en.wikipedia.org/wiki/Restrict : C99 has "restrict" keyword to address this issue. : (F90 has pointers, and by design they are all restrict)
|