A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Try new fix for rget_testall.
[simgrid.git]
/
teshsuite
/
smpi
/
macro-partial-shared-communication
/
macro-partial-shared-communication.c
diff --git
a/teshsuite/smpi/macro-partial-shared-communication/macro-partial-shared-communication.c
b/teshsuite/smpi/macro-partial-shared-communication/macro-partial-shared-communication.c
index
2a93238
..
cfada13
100644
(file)
--- a/
teshsuite/smpi/macro-partial-shared-communication/macro-partial-shared-communication.c
+++ b/
teshsuite/smpi/macro-partial-shared-communication/macro-partial-shared-communication.c
@@
-1,5
+1,4
@@
-/* Copyright (c) 2009-2015. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2017. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
@@
-11,16
+10,16
@@
#include <assert.h>
// Set the elements between buf[start] and buf[stop-1] to (i+value)%256
#include <assert.h>
// Set the elements between buf[start] and buf[stop-1] to (i+value)%256
-
void set(uint8_t *buf, int start, in
t stop, uint8_t value) {
- for(
in
t i = start; i < stop; i++) {
+
static void set(uint8_t *buf, size_t start, size_
t stop, uint8_t value) {
+ for(
size_
t i = start; i < stop; i++) {
buf[i] = (i+value)%256;
}
}
// Return the number of times that an element is equal to (i+value)%256 between buf[start] and buf[stop-1].
buf[i] = (i+value)%256;
}
}
// Return the number of times that an element is equal to (i+value)%256 between buf[start] and buf[stop-1].
-
int count_all(uint8_t *buf, int start, in
t stop, uint8_t value) {
-
in
t occ = 0;
- for(
in
t i = start ; i < stop ; i++) {
+
static int count_all(uint8_t *buf, size_t start, size_
t stop, uint8_t value) {
+
size_
t occ = 0;
+ for(
size_
t i = start ; i < stop ; i++) {
if(buf[i] == (i+value)%256) {
occ ++;
}
if(buf[i] == (i+value)%256) {
occ ++;
}
@@
-29,18
+28,18
@@
int count_all(uint8_t *buf, int start, int stop, uint8_t value) {
}
// Return true iff the values from buf[start] to buf[stop-1] are all equal to (i+value)%256.
}
// Return true iff the values from buf[start] to buf[stop-1] are all equal to (i+value)%256.
-
int check_all(uint8_t *buf, int start, in
t stop, uint8_t value) {
-
in
t occ = count_all(buf, start, stop, value);
+
static int check_all(uint8_t *buf, size_t start, size_
t stop, uint8_t value) {
+
size_
t occ = count_all(buf, start, stop, value);
return occ == stop-start;
}
// Return true iff "enough" elements are equal to (i+value)%256 between buf[start] and buf[stop-1].
return occ == stop-start;
}
// Return true iff "enough" elements are equal to (i+value)%256 between buf[start] and buf[stop-1].
-
int check_enough(uint8_t *buf, int start, in
t stop, uint8_t value) {
+
static int check_enough(uint8_t *buf, size_t start, size_
t stop, uint8_t value) {
int page_size = 0x1000;
int page_size = 0x1000;
-
in
t size = stop-start;
+
size_
t size = stop-start;
if(size <= 2*page_size) // we are not sure to have a whole page that is shared
return 1;
if(size <= 2*page_size) // we are not sure to have a whole page that is shared
return 1;
-
in
t occ = count_all(buf, start, stop, value);
+
size_
t occ = count_all(buf, start, stop, value);
return occ >= size - 2*page_size;
}
return occ >= size - 2*page_size;
}
@@
-49,16
+48,16
@@
int main(int argc, char *argv[])
MPI_Init(&argc, &argv);
int rank;
int size;
MPI_Init(&argc, &argv);
int rank;
int size;
-
int mem_size = 0x10
000000;
-
in
t shared_blocks[] = {
- 0, 0x123456
7
,
- 0x130000
0, 0x1300010
,
- 0x345678
9, 0x3457890
,
- 0x444444
4, 0x5
555555,
- 0x555556
5, 0x560
0000,
- 0x800000
0, 0x10
000000
+
size_t mem_size = 0x1
000000;
+
size_
t shared_blocks[] = {
+ 0, 0x123456,
+ 0x130000
, 0x130001
,
+ 0x345678
, 0x345789
,
+ 0x444444
, 0x
555555,
+ 0x555556
, 0x56
0000,
+ 0x800000
, 0x1
000000
};
};
- int nb_blocks = (sizeof(shared_blocks)/sizeof(
in
t))/2;
+ int nb_blocks = (sizeof(shared_blocks)/sizeof(
size_
t))/2;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
//Let's Allocate a shared memory buffer
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
//Let's Allocate a shared memory buffer
@@
-71,8
+70,8
@@
int main(int argc, char *argv[])
// Even processes write their rank in private blocks
if(rank%2 == 0) {
for(int i = 0; i < nb_blocks-1; i++) {
// Even processes write their rank in private blocks
if(rank%2 == 0) {
for(int i = 0; i < nb_blocks-1; i++) {
-
in
t start = shared_blocks[2*i+1];
-
in
t stop = shared_blocks[2*i+2];
+
size_
t start = shared_blocks[2*i+1];
+
size_
t stop = shared_blocks[2*i+2];
set(buf, start, stop, rank);
}
}
set(buf, start, stop, rank);
}
}
@@
-88,10
+87,10
@@
int main(int argc, char *argv[])
// Odd processes verify that they successfully received the message
if(rank%2 == 1) {
for(int i = 0; i < nb_blocks-1; i++) {
// Odd processes verify that they successfully received the message
if(rank%2 == 1) {
for(int i = 0; i < nb_blocks-1; i++) {
-
in
t start = shared_blocks[2*i+1];
-
in
t stop = shared_blocks[2*i+2];
+
size_
t start = shared_blocks[2*i+1];
+
size_
t stop = shared_blocks[2*i+2];
int comm = check_all(buf, start, stop, rank-1);
int comm = check_all(buf, start, stop, rank-1);
- printf("[%d] The result of the (normal) communication check for block (0x%
x, 0x%
x) is: %d\n", rank, start, stop, comm);
+ printf("[%d] The result of the (normal) communication check for block (0x%
zx, 0x%z
x) is: %d\n", rank, start, stop, comm);
}
memset(buf, rank, mem_size);
}
}
memset(buf, rank, mem_size);
}
@@
-99,22
+98,22
@@
int main(int argc, char *argv[])
MPI_Barrier(MPI_COMM_WORLD);
// Then, even processes send a sub-part of their buffer their successor
MPI_Barrier(MPI_COMM_WORLD);
// Then, even processes send a sub-part of their buffer their successor
- // Note that the
part (0, 0x10000) which is not sent is a shared part, so we do not care
+ // Note that the
last block should not be copied entirely
if(rank%2 == 0) {
if(rank%2 == 0) {
- MPI_Send(buf+0x10000, mem_size-0x
1
0000, MPI_UINT8_T, rank+1, 0, MPI_COMM_WORLD);
+ MPI_Send(buf+0x10000, mem_size-0x
a0
0000, MPI_UINT8_T, rank+1, 0, MPI_COMM_WORLD);
}
else {
}
else {
- MPI_Recv(buf+0x10000, mem_size-0x
1
0000, MPI_UINT8_T, rank-1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+ MPI_Recv(buf+0x10000, mem_size-0x
a0
0000, MPI_UINT8_T, rank-1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
}
// Odd processes verify that they successfully received the message
if(rank%2 == 1) {
for(int i = 0; i < nb_blocks-1; i++) {
}
// Odd processes verify that they successfully received the message
if(rank%2 == 1) {
for(int i = 0; i < nb_blocks-1; i++) {
-
in
t start = shared_blocks[2*i+1];
-
in
t stop = shared_blocks[2*i+2];
+
size_
t start = shared_blocks[2*i+1];
+
size_
t stop = shared_blocks[2*i+2];
int comm = check_all(buf, start, stop, rank-1);
int comm = check_all(buf, start, stop, rank-1);
- printf("[%d] The result of the (shifted) communication check for block (0x%
x, 0x%
x) is: %d\n", rank, start, stop, comm);
+ printf("[%d] The result of the (shifted) communication check for block (0x%
zx, 0x%z
x) is: %d\n", rank, start, stop, comm);
}
}
}
}