Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
pp-heatmap
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Björn Fischer
pp-heatmap
Commits
8520a4d8
Commit
8520a4d8
authored
Dec 30, 2015
by
Björn Fischer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
makefile and init refactor
parent
b3eedfc5
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
35 additions
and
54 deletions
+35
-54
proj
proj
+0
-0
proj.c
proj.c
+30
-53
project.h
project.h
+5
-1
No files found.
proj
View file @
8520a4d8
No preview for this file type
proj.c
View file @
8520a4d8
...
@@ -8,13 +8,11 @@
...
@@ -8,13 +8,11 @@
#include <sys/time.h>
#include <sys/time.h>
#include "project.h"
#include "project.h"
double
eps
=
0
.
001
;
double
delta_t
=
0
.
000001
;
double
alpha
=
1
;
MPI_Datatype
MPI_process_info
;
int
main
(
int
argc
,
char
**
argv
)
int
main
(
int
argc
,
char
**
argv
)
{
{
double
eps
=
0
.
001
;
double
delta_t
=
0
.
000001
;
double
alpha
=
1
;
MPI_Init
(
&
argc
,
&
argv
);
MPI_Init
(
&
argc
,
&
argv
);
int
m
,
n
;
int
m
,
n
;
double
**
root_field
;
// complete field owned by root
double
**
root_field
;
// complete field owned by root
...
@@ -25,12 +23,11 @@ int main(int argc, char **argv)
...
@@ -25,12 +23,11 @@ int main(int argc, char **argv)
int
pro_per_dim
[
2
];
int
pro_per_dim
[
2
];
int
cell_per_pro
[
2
];
int
cell_per_pro
[
2
];
MPI_Comm
cart_comm
;
MPI_Comm
cart_comm
;
int
matrix_size
[
2
];
Create_MPI_Type_t_process_info
(
&
MPI_process_info
);
Process_Args
(
argc
,
argv
,
&
m
,
&
n
,
&
eps
,
&
delta_t
);
Process_Args
(
argc
,
argv
,
&
m
,
&
n
,
&
eps
,
&
delta_t
);
int
rank
,
num_p
;
int
rank
,
cart_cluster_size
;
if
(
MPI_Comm_rank
(
MPI_COMM_WORLD
,
&
rank
))
{
if
(
MPI_Comm_rank
(
MPI_COMM_WORLD
,
&
rank
))
{
fprintf
(
stderr
,
"Cannot fetch rank
\n
"
);
fprintf
(
stderr
,
"Cannot fetch rank
\n
"
);
exit
(
1
);
exit
(
1
);
...
@@ -51,37 +48,21 @@ int main(int argc, char **argv)
...
@@ -51,37 +48,21 @@ int main(int argc, char **argv)
pi
=
Calculate_Process_Info
(
cart_comm
,
rank
,
m
,
n
,
cell_per_pro
);
pi
=
Calculate_Process_Info
(
cart_comm
,
rank
,
m
,
n
,
cell_per_pro
);
int
matrix_size
[
2
];
matrix_size
[
0
]
=
pi
.
end_m
-
pi
.
start_m
+
3
;
matrix_size
[
0
]
=
pi
.
end_m
-
pi
.
start_m
+
3
;
matrix_size
[
1
]
=
pi
.
end_n
-
pi
.
start_n
+
3
;
matrix_size
[
1
]
=
pi
.
end_n
-
pi
.
start_n
+
3
;
if
(
MPI_Comm_size
(
cart_comm
,
&
num_p
))
{
if
(
MPI_Comm_size
(
cart_comm
,
&
cart_cluster_size
))
{
fprintf
(
stderr
,
"Cannot fetch size of cart
\n
"
);
fprintf
(
stderr
,
"Cannot fetch size of cart
\n
"
);
exit
(
1
);
exit
(
1
);
}
}
if
(
rank
==
0
)
{
Print_Process_Info
(
pi
);
infos
=
malloc
(
sizeof
(
t_process_info
)
*
num_p
);
}
if
(
MPI_Gather
(
&
pi
,
1
,
MPI_process_info
,
infos
,
1
,
MPI_process_info
,
0
,
cart_comm
))
{
infos
=
Gather_Process_Info
(
&
pi
,
rank
,
cart_cluster_size
,
cart_comm
);
fprintf
(
stderr
,
"Gather failed
\n
"
);
exit
(
1
);
}
int
i
,
j
;
if
(
rank
==
0
)
{
if
(
rank
==
0
)
{
for
(
i
=
0
;
i
<
num_p
;
i
++
)
{
for
(
int
i
=
0
;
i
<
cart_cluster_size
;
i
++
)
{
printf
(
"rank: %d->(%d,%d) from (%d, %d) to (%d,%d)
\n
"
,
Print_Process_Info
(
infos
[
i
]);
infos
[
i
].
rank
,
infos
[
i
].
coord0
,
infos
[
i
].
coord1
,
infos
[
i
].
start_m
,
infos
[
i
].
start_n
,
infos
[
i
].
end_m
,
infos
[
i
].
end_n
);
}
}
}
}
...
@@ -116,7 +97,7 @@ int main(int argc, char **argv)
...
@@ -116,7 +97,7 @@ int main(int argc, char **argv)
MPI_Request
sync_requests
[
9
];
// 2 for each edge + 1 completion
MPI_Request
sync_requests
[
9
];
// 2 for each edge + 1 completion
// set to MPI null for waitany -- only needed once as others are overwritten with every iteration
// set to MPI null for waitany -- only needed once as others are overwritten with every iteration
for
(
i
=
0
;
i
<
9
;
i
++
)
{
for
(
i
nt
i
=
0
;
i
<
9
;
i
++
)
{
sync_requests
[
i
]
=
MPI_REQUEST_NULL
;
sync_requests
[
i
]
=
MPI_REQUEST_NULL
;
}
}
...
@@ -139,30 +120,30 @@ int main(int argc, char **argv)
...
@@ -139,30 +120,30 @@ int main(int argc, char **argv)
//init edges
//init edges
if
(
neighbor_dim1_left
==
MPI_PROC_NULL
)
{
if
(
neighbor_dim1_left
==
MPI_PROC_NULL
)
{
for
(
i
=
pi
.
start_m
;
i
<=
pi
.
end_m
;
i
++
)
{
for
(
i
nt
i
=
pi
.
start_m
;
i
<=
pi
.
end_m
;
i
++
)
{
partial_field
[
i
-
pi
.
start_m
+
1
][
1
]
=
(
double
)
i
/
(
m
-
1
);
partial_field
[
i
-
pi
.
start_m
+
1
][
1
]
=
(
double
)
i
/
(
m
-
1
);
partial_field_tmp
[
i
-
pi
.
start_m
+
1
][
1
]
=
(
double
)
i
/
(
m
-
1
);
partial_field_tmp
[
i
-
pi
.
start_m
+
1
][
1
]
=
(
double
)
i
/
(
m
-
1
);
}
}
}
}
if
(
neighbor_dim1_right
==
MPI_PROC_NULL
)
{
if
(
neighbor_dim1_right
==
MPI_PROC_NULL
)
{
for
(
i
=
pi
.
start_m
;
i
<=
pi
.
end_m
;
i
++
)
{
for
(
i
nt
i
=
pi
.
start_m
;
i
<=
pi
.
end_m
;
i
++
)
{
partial_field
[
i
-
pi
.
start_m
+
1
][
matrix_size
[
1
]
-
2
]
=
1
-
(
double
)
i
/
(
m
-
1
);
partial_field
[
i
-
pi
.
start_m
+
1
][
matrix_size
[
1
]
-
2
]
=
1
-
(
double
)
i
/
(
m
-
1
);
partial_field_tmp
[
i
-
pi
.
start_m
+
1
][
matrix_size
[
1
]
-
2
]
=
1
-
(
double
)
i
/
(
m
-
1
);
partial_field_tmp
[
i
-
pi
.
start_m
+
1
][
matrix_size
[
1
]
-
2
]
=
1
-
(
double
)
i
/
(
m
-
1
);
}
}
}
}
if
(
neighbor_dim0_left
==
MPI_PROC_NULL
)
{
if
(
neighbor_dim0_left
==
MPI_PROC_NULL
)
{
for
(
i
=
pi
.
start_n
;
i
<=
pi
.
end_n
;
i
++
)
{
for
(
i
nt
i
=
pi
.
start_n
;
i
<=
pi
.
end_n
;
i
++
)
{
partial_field
[
1
][
i
-
pi
.
start_n
+
1
]
=
(
double
)
i
/
(
n
-
1
);
partial_field
[
1
][
i
-
pi
.
start_n
+
1
]
=
(
double
)
i
/
(
n
-
1
);
partial_field_tmp
[
1
][
i
-
pi
.
start_n
+
1
]
=
(
double
)
i
/
(
n
-
1
);
partial_field_tmp
[
1
][
i
-
pi
.
start_n
+
1
]
=
(
double
)
i
/
(
n
-
1
);
}
}
}
}
if
(
neighbor_dim0_right
==
MPI_PROC_NULL
)
{
if
(
neighbor_dim0_right
==
MPI_PROC_NULL
)
{
for
(
i
=
pi
.
start_n
;
i
<=
pi
.
end_n
;
i
++
)
{
for
(
i
nt
i
=
pi
.
start_n
;
i
<=
pi
.
end_n
;
i
++
)
{
partial_field
[
matrix_size
[
0
]
-
2
][
i
-
pi
.
start_n
+
1
]
=
1
-
(
double
)
i
/
(
n
-
1
);
partial_field
[
matrix_size
[
0
]
-
2
][
i
-
pi
.
start_n
+
1
]
=
1
-
(
double
)
i
/
(
n
-
1
);
partial_field_tmp
[
matrix_size
[
0
]
-
2
][
i
-
pi
.
start_n
+
1
]
=
1
-
(
double
)
i
/
(
n
-
1
);
partial_field_tmp
[
matrix_size
[
0
]
-
2
][
i
-
pi
.
start_n
+
1
]
=
1
-
(
double
)
i
/
(
n
-
1
);
}
}
}
}
int
*
completions
=
malloc
(
sizeof
(
int
)
*
num_p
);
int
*
completions
=
malloc
(
sizeof
(
int
)
*
cart_cluster_size
);
int
k
=
0
;
int
k
=
0
;
/*
/*
...
@@ -175,12 +156,12 @@ int main(int argc, char **argv)
...
@@ -175,12 +156,12 @@ int main(int argc, char **argv)
k
++
;
k
++
;
maxdiff
=
0
;
maxdiff
=
0
;
for
(
for
(
i
=
(
neighbor_dim0_left
==
MPI_PROC_NULL
)
?
2
:
1
;
// catch edges
i
nt
i
=
(
neighbor_dim0_left
==
MPI_PROC_NULL
)
?
2
:
1
;
// catch edges
i
<
pi
.
end_m
-
pi
.
start_m
+
((
neighbor_dim0_right
==
MPI_PROC_NULL
)
?
1
:
2
);
i
<
pi
.
end_m
-
pi
.
start_m
+
((
neighbor_dim0_right
==
MPI_PROC_NULL
)
?
1
:
2
);
i
++
i
++
)
{
)
{
for
(
for
(
j
=
(
neighbor_dim1_left
==
MPI_PROC_NULL
)
?
2
:
1
;
// catch edges
int
j
=
(
neighbor_dim1_left
==
MPI_PROC_NULL
)
?
2
:
1
;
// catch edges
j
<
pi
.
end_n
-
pi
.
start_n
+
((
neighbor_dim1_right
==
MPI_PROC_NULL
)
?
1
:
2
);
j
<
pi
.
end_n
-
pi
.
start_n
+
((
neighbor_dim1_right
==
MPI_PROC_NULL
)
?
1
:
2
);
j
++
j
++
)
{
)
{
...
@@ -206,11 +187,11 @@ int main(int argc, char **argv)
...
@@ -206,11 +187,11 @@ int main(int argc, char **argv)
fprintf
(
stderr
,
"Alltoall failed
\n
"
);
fprintf
(
stderr
,
"Alltoall failed
\n
"
);
exit
(
1
);
exit
(
1
);
}
}
for
(
i
=
0
;
i
<
num_p
;
i
++
)
{
for
(
i
nt
i
=
0
;
i
<
cart_cluster_size
;
i
++
)
{
printf
(
"rank %d: %d -> %d
\n
"
,
rank
,
i
,
completions
[
i
]);
printf
(
"rank %d: %d -> %d
\n
"
,
rank
,
i
,
completions
[
i
]);
}
}
int
all_completed
=
1
;
int
all_completed
=
1
;
for
(
i
=
0
;
i
<
num_p
;
i
++
)
{
for
(
i
nt
i
=
0
;
i
<
cart_cluster_size
;
i
++
)
{
if
(
!
completions
[
i
])
{
if
(
!
completions
[
i
])
{
all_completed
=
0
;
all_completed
=
0
;
break
;
break
;
...
@@ -235,7 +216,7 @@ int main(int argc, char **argv)
...
@@ -235,7 +216,7 @@ int main(int argc, char **argv)
//memcpy(&(dim1_own_edge_values[2*(matrix_size[0]-2) + matrix_size[1] - 2]), &(partial_field[matrix_size[0]-2][1]), sizeof(double) * (matrix_size[1] - 2));
//memcpy(&(dim1_own_edge_values[2*(matrix_size[0]-2) + matrix_size[1] - 2]), &(partial_field[matrix_size[0]-2][1]), sizeof(double) * (matrix_size[1] - 2));
}
}
if
(
neighbor_dim1_left
!=
MPI_PROC_NULL
)
{
if
(
neighbor_dim1_left
!=
MPI_PROC_NULL
)
{
for
(
i
=
0
;
i
<
matrix_size
[
0
]
-
2
;
i
++
)
{
for
(
i
nt
i
=
0
;
i
<
matrix_size
[
0
]
-
2
;
i
++
)
{
dim1_own_edge_values
[
i
]
=
partial_field
[
i
+
1
][
1
];
dim1_own_edge_values
[
i
]
=
partial_field
[
i
+
1
][
1
];
}
}
MPI_Isend
(
&
(
dim1_own_edge_values
[
0
]),
matrix_size
[
0
]
-
2
,
MPI_DOUBLE
,
neighbor_dim1_left
,
0
,
cart_comm
,
&
(
sync_requests
[
2
]));
MPI_Isend
(
&
(
dim1_own_edge_values
[
0
]),
matrix_size
[
0
]
-
2
,
MPI_DOUBLE
,
neighbor_dim1_left
,
0
,
cart_comm
,
&
(
sync_requests
[
2
]));
...
@@ -243,7 +224,7 @@ int main(int argc, char **argv)
...
@@ -243,7 +224,7 @@ int main(int argc, char **argv)
}
}
if
(
neighbor_dim1_right
!=
MPI_PROC_NULL
)
{
if
(
neighbor_dim1_right
!=
MPI_PROC_NULL
)
{
int
right_edge_index
=
matrix_size
[
1
]
-
2
;
int
right_edge_index
=
matrix_size
[
1
]
-
2
;
for
(
i
=
0
;
i
<
matrix_size
[
0
]
-
2
;
i
++
)
{
for
(
i
nt
i
=
0
;
i
<
matrix_size
[
0
]
-
2
;
i
++
)
{
dim1_own_edge_values
[
matrix_size
[
0
]
-
2
+
i
]
=
partial_field
[
i
+
1
][
right_edge_index
];
dim1_own_edge_values
[
matrix_size
[
0
]
-
2
+
i
]
=
partial_field
[
i
+
1
][
right_edge_index
];
}
}
MPI_Isend
(
&
(
dim1_own_edge_values
[
matrix_size
[
0
]
-
2
]),
matrix_size
[
0
]
-
2
,
MPI_DOUBLE
,
neighbor_dim1_right
,
0
,
cart_comm
,
&
(
sync_requests
[
3
]));
MPI_Isend
(
&
(
dim1_own_edge_values
[
matrix_size
[
0
]
-
2
]),
matrix_size
[
0
]
-
2
,
MPI_DOUBLE
,
neighbor_dim1_right
,
0
,
cart_comm
,
&
(
sync_requests
[
3
]));
...
@@ -257,19 +238,19 @@ int main(int argc, char **argv)
...
@@ -257,19 +238,19 @@ int main(int argc, char **argv)
break
;
break
;
}
}
if
(
current
==
6
)
{
if
(
current
==
6
)
{
for
(
i
=
0
;
i
<
matrix_size
[
0
]
-
2
;
i
++
)
{
for
(
i
nt
i
=
0
;
i
<
matrix_size
[
0
]
-
2
;
i
++
)
{
partial_field
[
i
+
1
][
0
]
=
dim1_neighbor_egde_values
[
i
];
partial_field
[
i
+
1
][
0
]
=
dim1_neighbor_egde_values
[
i
];
}
}
}
}
if
(
current
==
7
)
{
if
(
current
==
7
)
{
int
right_edge_index
=
matrix_size
[
1
]
-
1
;
int
right_edge_index
=
matrix_size
[
1
]
-
1
;
for
(
i
=
0
;
i
<
matrix_size
[
0
]
-
2
;
i
++
)
{
for
(
i
nt
i
=
0
;
i
<
matrix_size
[
0
]
-
2
;
i
++
)
{
partial_field
[
i
+
1
][
right_edge_index
]
=
dim1_neighbor_egde_values
[
matrix_size
[
0
]
-
2
+
i
];
partial_field
[
i
+
1
][
right_edge_index
]
=
dim1_neighbor_egde_values
[
matrix_size
[
0
]
-
2
+
i
];
}
}
}
}
if
(
current
==
8
)
{
if
(
current
==
8
)
{
int
all_completed
=
1
;
int
all_completed
=
1
;
for
(
i
=
0
;
i
<
num_p
;
i
++
)
{
for
(
i
nt
i
=
0
;
i
<
cart_cluster_size
;
i
++
)
{
if
(
!
completions
[
i
])
{
if
(
!
completions
[
i
])
{
all_completed
=
0
;
all_completed
=
0
;
break
;
break
;
...
@@ -294,9 +275,9 @@ int main(int argc, char **argv)
...
@@ -294,9 +275,9 @@ int main(int argc, char **argv)
//Send_To_Root(partial_field, pi.end_m - pi.start_m + 2, pi.end_n - pi.start_n + 2);
//Send_To_Root(partial_field, pi.end_m - pi.start_m + 2, pi.end_n - pi.start_n + 2);
MPI_Send
(
partial_field
[
0
],
matrix_size
[
0
]
*
matrix_size
[
1
],
MPI_DOUBLE
,
0
,
0
,
cart_comm
);
MPI_Send
(
partial_field
[
0
],
matrix_size
[
0
]
*
matrix_size
[
1
],
MPI_DOUBLE
,
0
,
0
,
cart_comm
);
if
(
rank
==
0
)
{
if
(
rank
==
0
)
{
MPI_Request
*
requests
=
malloc
(
sizeof
(
MPI_Request
)
*
num_p
);
MPI_Request
*
requests
=
malloc
(
sizeof
(
MPI_Request
)
*
cart_cluster_size
);
double
**
allocation
=
malloc
(
sizeof
(
double
*
)
*
num_p
);
double
**
allocation
=
malloc
(
sizeof
(
double
*
)
*
cart_cluster_size
);
for
(
i
=
0
;
i
<
num_p
;
i
++
)
{
for
(
i
nt
i
=
0
;
i
<
cart_cluster_size
;
i
++
)
{
allocation
[
i
]
=
malloc
(
sizeof
(
double
)
*
(
infos
[
i
].
end_m
-
infos
[
i
].
start_m
+
3
)
*
(
infos
[
i
].
end_n
-
infos
[
i
].
start_n
+
3
));
allocation
[
i
]
=
malloc
(
sizeof
(
double
)
*
(
infos
[
i
].
end_m
-
infos
[
i
].
start_m
+
3
)
*
(
infos
[
i
].
end_n
-
infos
[
i
].
start_n
+
3
));
MPI_Irecv
(
allocation
[
i
],
MPI_Irecv
(
allocation
[
i
],
(
infos
[
i
].
end_m
-
infos
[
i
].
start_m
+
3
)
*
(
infos
[
i
].
end_n
-
infos
[
i
].
start_n
+
3
),
(
infos
[
i
].
end_m
-
infos
[
i
].
start_m
+
3
)
*
(
infos
[
i
].
end_n
-
infos
[
i
].
start_n
+
3
),
...
@@ -307,13 +288,9 @@ int main(int argc, char **argv)
...
@@ -307,13 +288,9 @@ int main(int argc, char **argv)
&
requests
[
i
]
&
requests
[
i
]
);
);
}
}
for
(
i
=
0
;
i
<
num_p
;
i
++
)
{
for
(
i
nt
i
=
0
;
i
<
cart_cluster_size
;
i
++
)
{
int
current
;
int
current
;
MPI_Waitany
(
num_p
,
requests
,
&
current
,
MPI_STATUS_IGNORE
);
MPI_Waitany
(
cart_cluster_size
,
requests
,
&
current
,
MPI_STATUS_IGNORE
);
for
(
j
=
0
;
j
<
16
;
++
j
)
{
//printf("%.10lf\n", allocation[current][j]);
}
printf
(
"
\n
"
);
printf
(
"
\n
"
);
Insert_Array_In_Matrix
(
Insert_Array_In_Matrix
(
root_field
,
root_field
,
...
...
project.h
View file @
8520a4d8
...
@@ -29,4 +29,8 @@ void Optimize_Cart_Cluster(int dim0_size, int dim1_size, MPI_Comm comm, int rank
...
@@ -29,4 +29,8 @@ void Optimize_Cart_Cluster(int dim0_size, int dim1_size, MPI_Comm comm, int rank
MPI_Comm
Create_MPI_Cart_Cluster
(
MPI_Comm
comm
,
int
rank
,
int
*
pro_per_dim
);
MPI_Comm
Create_MPI_Cart_Cluster
(
MPI_Comm
comm
,
int
rank
,
int
*
pro_per_dim
);
// pi.c
// pi.c
t_process_info
Calculate_Process_Info
(
MPI_Comm
cart_comm
,
int
rank
,
int
dim0_size
,
int
dim1_size
,
int
*
cell_per_pro
);
t_process_info
Calculate_Process_Info
(
MPI_Comm
cart_comm
,
int
rank
,
int
dim0_size
,
int
dim1_size
,
int
*
cell_per_pro
);
\ No newline at end of file
void
Print_Process_Info
(
t_process_info
pi
);
// pid0.c
t_process_info
*
Gather_Process_Info
(
t_process_info
*
pi
,
int
rank
,
int
cluster_size
,
MPI_Comm
cart_comm
);
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment