Skip to content

Commit 6e63499

Browse files
committed
Add tests for isend and some wait/test methods
1 parent e373f90 commit 6e63499

File tree

3 files changed

+94
-7
lines changed

3 files changed

+94
-7
lines changed

src/mpi-base.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,8 @@ function Recv!{T}(buf::Array{T}, src::Integer, tag::Integer,
265265
end
266266

267267
function Recv{T}(::Type{T}, src::Integer, tag::Integer, comm::Comm)
268-
buf = Ref{T}
269-
stat = Recv!(buf, src, tag, comm)
268+
buf = Ref{T}()
269+
stat = Recv!(buf, 1, src, tag, comm)
270270
(buf[], stat)
271271
end
272272

@@ -389,10 +389,10 @@ function Testany!(reqs::Array{Request,1})
389389
ccall(MPI_TESTANY, Void,
390390
(Ptr{Cint}, Ptr{Cint}, Ptr{Cint}, Ptr{Cint}, Ptr{Cint}, Ptr{Cint}),
391391
&count, reqvals, ind, flag, stat.val, &0)
392-
if flag[] == 0
392+
index = Int(ind[])
393+
if flag[] == 0 || index == MPI_UNDEFINED
393394
return (false, 0, nothing)
394395
end
395-
index = Int(ind[])
396396
reqs[index].val = reqvals[index]
397397
reqs[index].buffer = nothing
398398
(true, index, stat)

test/test_sendrecv.jl

Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,21 @@ stats = MPI.Waitall!([sreq, rreq])
3030
@test MPI.Get_tag(stats[2]) == src+32
3131
@test isapprox(norm(recv_mesg-recv_mesg_expected), 0.0)
3232

33-
(done,stats) = MPI.Testall!([sreq, rreq])
34-
@test done
33+
rreq = nothing
34+
sreq = nothing
35+
gc()
36+
37+
if rank == 0
38+
MPI.send(send_mesg, dst, rank+32, comm)
39+
recv_mesg = recv_mesg_expected
40+
elseif rank == size-1
41+
(recv_mesg, _) = MPI.recv(src, src+32, comm)
42+
else
43+
(recv_mesg, _) = MPI.recv(src, src+32, comm)
44+
MPI.send(send_mesg, dst, rank+32, comm)
45+
end
3546

47+
@test isapprox(norm(recv_mesg-recv_mesg_expected), 0.0)
3648

3749
rreq = nothing
3850
sreq = nothing
@@ -48,6 +60,49 @@ else
4860
MPI.send(send_mesg, dst, rank+32, comm)
4961
end
5062

51-
@test isapprox(norm(recv_mesg-recv_mesg_expected), 0.0)
63+
send_mesg = Float64(rank)
64+
recv_mesg = Array(Float64, N)
65+
recv_mesg_expected = Array(Float64, N)
66+
67+
fill!(recv_mesg_expected, Float64(src))
68+
69+
rreq = nothing
70+
sreq = nothing
71+
gc()
72+
73+
send_mesg = Float64(rank)
74+
recv_mesg = Array(Float64, N)
75+
recv_mesg_expected = Array(Float64, N)
76+
77+
fill!(recv_mesg_expected, Float64(src))
78+
79+
if rank == 0
80+
MPI.Send(send_mesg, dst, rank+32, comm)
81+
recv_mesg = recv_mesg_expected
82+
elseif rank == size-1
83+
(recv_mesg, _) = MPI.Recv(Float64,src, src+32, comm)
84+
else
85+
(recv_mesg, _) = MPI.Recv(Float64,src, src+32, comm)
86+
MPI.Send(send_mesg, dst, rank+32, comm)
87+
end
88+
89+
rreq = nothing
90+
sreq = nothing
91+
gc()
92+
93+
recv_mesg = Array(Float64, N)
94+
rreq = MPI.Irecv!(recv_mesg, src, src+32, comm)
95+
sreq = MPI.Isend(send_mesg, dst, rank+32, comm)
96+
97+
(inds, stats) = MPI.Waitsome!([sreq, rreq])
98+
req_arr = [sreq,rreq]
99+
for i in inds
100+
(done, status) = MPI.Test!( req_arr[i] )
101+
@test done
102+
end
103+
104+
rreq = nothing
105+
sreq = nothing
106+
gc()
52107

53108
MPI.Finalize()

test/test_test.jl

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using Base.Test
2+
using MPI
3+
4+
MPI.Init()
5+
6+
comm = MPI.COMM_WORLD
7+
size = MPI.Comm_size(comm)
8+
rank = MPI.Comm_rank(comm)
9+
10+
dst = mod(rank+1, size)
11+
src = mod(rank-1, size)
12+
13+
N = 32
14+
15+
send_mesg = Array(Float64, N)
16+
recv_mesg = Array(Float64, N)
17+
recv_mesg_expected = Array(Float64, N)
18+
fill!(send_mesg, Float64(rank))
19+
fill!(recv_mesg_expected, Float64(src))
20+
21+
rreq = MPI.Irecv!(recv_mesg, src, src+32, comm)
22+
sreq = MPI.Isend(send_mesg, dst, rank+32, comm)
23+
24+
(ind,stats) = MPI.Waitsome!([sreq, rreq])
25+
(done, ind, stats) = MPI.Testany!([sreq, rreq])
26+
arr = [sreq,rreq]
27+
if done
28+
onedone = MPI.Test!(arr[ind])
29+
@test onedone
30+
end
31+
32+
MPI.Finalize()

0 commit comments

Comments
 (0)