Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
SWIFTsim
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
SWIFT
SWIFTsim
Commits
fdef9841
Commit
fdef9841
authored
9 years ago
by
Pedro Gonnet
Browse files
Options
Downloads
Patches
Plain Diff
don't use local buffers for async send/recv. doh.
parent
17eac24a
No related branches found
No related tags found
2 merge requests
!136
Master
,
!117
Engine exchange strays
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/proxy.c
+29
-19
29 additions, 19 deletions
src/proxy.c
src/proxy.h
+3
-0
3 additions, 0 deletions
src/proxy.h
with
32 additions
and
19 deletions
src/proxy.c
+
29
−
19
View file @
fdef9841
...
...
@@ -195,13 +195,14 @@ void proxy_parts_exch1(struct proxy *p) {
#ifdef WITH_MPI
/* Send the number of particles. */
int
buff_out
[
2
]
=
{
p
->
nr_parts_out
,
p
->
nr_gparts_out
};
if
(
MPI_Isend
(
buff_out
,
2
,
MPI_INT
,
p
->
nodeID
,
p
->
buff_out
[
0
]
=
p
->
nr_parts_out
;
p
->
buff_out
[
1
]
=
p
->
nr_gparts_out
;
if
(
MPI_Isend
(
p
->
buff_out
,
2
,
MPI_INT
,
p
->
nodeID
,
p
->
mynodeID
*
proxy_tag_shift
+
proxy_tag_count
,
MPI_COMM_WORLD
,
&
p
->
req_parts_count_out
)
!=
MPI_SUCCESS
)
error
(
"Failed to isend nr of parts."
);
/
/
message( "isent particle count
(
%i
)
from node %i to node %i." ,
// p->nr_parts
_out
, p->mynodeID , p->nodeID ); fflush(stdout);
/
*
message( "isent particle count
s [%i,
%i
]
from node %i to node %i." ,
p->buff_out[0], p->buff
_out
[1]
, p->mynodeID , p->nodeID ); fflush(stdout);
*/
/* Send the particle buffers. */
if
(
p
->
nr_parts_out
>
0
)
{
...
...
@@ -211,11 +212,7 @@ void proxy_parts_exch1(struct proxy *p) {
MPI_Isend
(
p
->
xparts_out
,
sizeof
(
struct
xpart
)
*
p
->
nr_parts_out
,
MPI_BYTE
,
p
->
nodeID
,
p
->
mynodeID
*
proxy_tag_shift
+
proxy_tag_xparts
,
MPI_COMM_WORLD
,
&
p
->
req_xparts_out
)
!=
MPI_SUCCESS
||
MPI_Isend
(
p
->
gparts_out
,
sizeof
(
struct
gpart
)
*
p
->
nr_gparts_out
,
MPI_BYTE
,
p
->
nodeID
,
p
->
mynodeID
*
proxy_tag_shift
+
proxy_tag_gparts
,
MPI_COMM_WORLD
,
&
p
->
req_gparts_out
)
!=
MPI_SUCCESS
)
MPI_COMM_WORLD
,
&
p
->
req_xparts_out
)
!=
MPI_SUCCESS
)
error
(
"Failed to isend part data."
);
// message( "isent particle data (%i) to node %i." , p->nr_parts_out ,
// p->nodeID ); fflush(stdout);
...
...
@@ -224,17 +221,21 @@ void proxy_parts_exch1(struct proxy *p) {
p->parts_out[k].id, p->parts_out[k].x[0], p->parts_out[k].x[1],
p->parts_out[k].x[2], p->parts_out[k].h, p->nodeID);*/
}
if
(
p
->
nr_gparts_out
>
0
)
{
if
(
MPI_Isend
(
p
->
gparts_out
,
sizeof
(
struct
gpart
)
*
p
->
nr_gparts_out
,
MPI_BYTE
,
p
->
nodeID
,
p
->
mynodeID
*
proxy_tag_shift
+
proxy_tag_gparts
,
MPI_COMM_WORLD
,
&
p
->
req_gparts_out
)
!=
MPI_SUCCESS
)
error
(
"Failed to isend part data."
);
// message( "isent gpart data (%i) to node %i." , p->nr_parts_out ,
// p->nodeID ); fflush(stdout);
}
/* Receive the number of particles. */
int
buff_in
[
2
];
if
(
MPI_Irecv
(
buff_in
,
2
,
MPI_INT
,
p
->
nodeID
,
if
(
MPI_Irecv
(
p
->
buff_in
,
2
,
MPI_INT
,
p
->
nodeID
,
p
->
nodeID
*
proxy_tag_shift
+
proxy_tag_count
,
MPI_COMM_WORLD
,
&
p
->
req_parts_count_in
)
!=
MPI_SUCCESS
)
error
(
"Failed to irecv nr of parts."
);
p
->
nr_parts_in
=
buff_in
[
0
];
p
->
nr_gparts_in
=
buff_in
[
1
];
// message( "irecv particle count on node %i from node %i." , p->mynodeID ,
// p->nodeID ); fflush(stdout);
#else
error
(
"SWIFT was not compiled with MPI support."
);
...
...
@@ -245,6 +246,10 @@ void proxy_parts_exch2(struct proxy *p) {
#ifdef WITH_MPI
/* Unpack the incomming parts counts. */
p
->
nr_parts_in
=
p
->
buff_in
[
0
];
p
->
nr_gparts_in
=
p
->
buff_in
[
1
];
/* Is there enough space in the buffer? */
if
(
p
->
nr_parts_in
>
p
->
size_parts_in
)
{
do
{
...
...
@@ -275,14 +280,19 @@ void proxy_parts_exch2(struct proxy *p) {
MPI_COMM_WORLD
,
&
p
->
req_parts_in
)
!=
MPI_SUCCESS
||
MPI_Irecv
(
p
->
xparts_in
,
sizeof
(
struct
xpart
)
*
p
->
nr_parts_in
,
MPI_BYTE
,
p
->
nodeID
,
p
->
nodeID
*
proxy_tag_shift
+
proxy_tag_xparts
,
MPI_COMM_WORLD
,
&
p
->
req_xparts_in
)
!=
MPI_SUCCESS
||
MPI_Irecv
(
p
->
gparts_in
,
sizeof
(
struct
gpart
)
*
p
->
nr_gparts_in
,
MPI_BYTE
,
p
->
nodeID
,
p
->
nodeID
*
proxy_tag_shift
+
proxy_tag_gparts
,
MPI_COMM_WORLD
,
&
p
->
req_gparts_in
)
!=
MPI_SUCCESS
)
MPI_COMM_WORLD
,
&
p
->
req_xparts_in
)
!=
MPI_SUCCESS
)
error
(
"Failed to irecv part data."
);
// message( "irecv particle data (%i) from node %i." , p->nr_parts_in ,
// p->nodeID ); fflush(stdout);
}
if
(
p
->
nr_gparts_in
>
0
)
{
if
(
MPI_Irecv
(
p
->
gparts_in
,
sizeof
(
struct
gpart
)
*
p
->
nr_gparts_in
,
MPI_BYTE
,
p
->
nodeID
,
p
->
nodeID
*
proxy_tag_shift
+
proxy_tag_gparts
,
MPI_COMM_WORLD
,
&
p
->
req_gparts_in
)
!=
MPI_SUCCESS
)
error
(
"Failed to irecv gpart data."
);
// message( "irecv gpart data (%i) from node %i." , p->nr_gparts_in ,
// p->nodeID ); fflush(stdout);
}
#else
error
(
"SWIFT was not compiled with MPI support."
);
...
...
This diff is collapsed.
Click to expand it.
src/proxy.h
+
3
−
0
View file @
fdef9841
...
...
@@ -59,6 +59,9 @@ struct proxy {
int
nr_parts_in
,
nr_parts_out
;
int
size_gparts_in
,
size_gparts_out
;
int
nr_gparts_in
,
nr_gparts_out
;
/* Buffer to hold the incomming/outgoing particle counts. */
int
buff_out
[
2
],
buff_in
[
2
];
/* MPI request handles. */
#ifdef WITH_MPI
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment