作者justdemon (人生的转捩点)
看板C_and_CPP
标题Re: [问题] MPI Non-blocking Communication
时间Mon Nov 23 17:04:23 2009
※ 引述《justdemon (人生的转捩点)》之铭言:
: 最近使用MPI_Isend的时候发现
: 虽然他的确是nonblocking 执行完MPI_Isend之後会继续执行之後的程式
: 但是他并不会平行的运作
: 我如果传输花5秒 运算花5秒
: 总时间就是10秒 并不会因为使用Nonblocking Send而变成5秒
: 在单纯传输时 CPU使用率只有30%~40% 理论上如果使用nonblocking send
: 应该可以压榨出来剩下的70% 可是结果却和blocking send一样
: 省不了任何时间
: 上网搜寻关於MPI的资讯 却也没看到有人有跟我类似的结果
: 不过倒是搜寻到MPI有分为 single thread 和 multiple thread 不同的模式
: 可以使用 MPI_Init_thread 来启用 multiple thread 有四个层级
: 不过不管我怎麽试 甚至使用buffered mode 都还是没办法让它边运算边传输
: 最後我使出大决 写个Pthread的程式 强迫开两个thread分别运算和传输
: 结果却是让人失望 在一台双核心的平台上 开nodes=2:ppn=2让两台电脑对传
: 跑这样的程式 却会造成其中某几个跑得快 某几个跑得慢的结果
: 在MPI_Barrier之後 最慢的那个所花的时间 竟然很凑巧跟原来的时间一样
: 意思是说 还是一点都没省到时间
: 不知道板上有没有板友曾经测试过MPI_Isend 并且成功的让他同时运算与传输呢?
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 140.112.101.114
: ※ 编辑: justdemon 来自: 140.112.101.114 (11/22 16:18)
: → tinlans:你的目的是 process 间协同工作所以要吃到 100% CPU 几乎 11/22 23:50
: → tinlans:都会是有困难的,但是想完全榨出这种平行程式的效能,尽量 11/22 23:51
: → tinlans:别用什麽 barrier,然後 MPI_Irecv 尽量提前送,这样其它 11/22 23:52
: → tinlans:process 有送东西来之前还能做一些事情,多少会赚一些。 11/22 23:55
: → tinlans:简单说如果你先发 Irecv 再去忙一阵子,其它 process 用 11/23 00:04
: → tinlans:Isend 送资料时,等送 Irecv 的 process 忙完後去 test 时 11/23 00:05
: → tinlans:资料可能就已经 ready 了。 11/23 00:05
: → tinlans:这样资料传输跟运算就会同时进行。 11/23 00:07
谢谢T大的推文
可是在我测试的环境相当的简单 尽量让每个process做相同的事情
我最原始的测试的code如下
http://nopaste.csie.org/b2860
经过测试之後发现 那个sleep(5) 就真的五秒都在那里睡 背後并没有继续传输
我也试过用其他运算取代sleep 结果一样
全部的时间 就是刚好等於 传输时间+运算时间
他的行为就像是 Isend只是标示出来有个东西要传 直到wait的时候才开始传输
我也试过用MPI_Init_thread取代MPI_Init 结果也一样
不知道有没有板友方便帮我测试一下这个简单的程式呢?
谢谢 ^^
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.101.114
1F:→ tinlans:你的程式看起来都是在传而已没什麽运算啊,实际上的程式 11/23 23:49
2F:→ tinlans:并不会长这样。 11/23 23:49
3F:→ tinlans:你应该要写那种能把要处理的资料分割成 N 大块,然後传输 11/23 23:51
4F:→ tinlans:资料的量 (除了初始化分配资料) 远少於计算的量,才赚得到 11/23 23:52
5F:→ tinlans:,另外就我之前写的经验,Isend 只要碰到对面送 Irecv 就 11/23 23:52
6F:→ tinlans:会在 background 开始传输了,所以 Irecv 提前送的话, 11/23 23:53
7F:→ tinlans:只要 Isend 一被呼叫就会马上传,这样只要 Irecv 到 wait 11/23 23:53
8F:→ tinlans:之间你有做一些足够的运算量,去 wait 的时候第一次就能吃 11/23 23:54
9F:→ tinlans:到传完的资料了。 11/23 23:54