blob: 77f1d4b468ab1c11aa2cd2176c363ee94bfd4d1a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
#include "definitions.h"
#include "App_Info.h"
App_Info::App_Info(int app_num, int app_size, int *world_ranks)
{
int world_size;
app_num_ = app_num;
app_size_ = app_size;
world_ranks_ = copy_int_list(app_size, world_ranks);
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
relative_ranks_ = (int *) malloc(sizeof(int)*world_size);
for(int i=0; i < world_size; i++)
relative_ranks_[i] = -1;
for(i=0; i < app_size_; i++)
relative_ranks_[world_ranks_[i]] = i;
intra_comm_ = NULL;
combine_count_ = 0;
#ifdef DEBUG
printf("Creating an new App Info object\n");
printf("App_num = %d App_size = %d\n", app_num_, app_size_);
printf("Ranks relative: world: world-relative\n");
for(int j=0;j<app_size_;j++)
printf(" %d %d %d\n", j, world_ranks_[j],
relative_ranks_[world_ranks_[j]]);
#endif
}
App_Info::~App_Info()
{
if (world_ranks_ != NULL) free(world_ranks_);
if (relative_ranks_ != NULL) free(relative_ranks_);
if (intra_comm_ != NULL)
{
MPI_Comm_free(intra_comm_);
free(intra_comm_);
intra_comm_ =NULL;
}
world_ranks_ = NULL;
relative_ranks_ = NULL;
}
int App_Info::app_num(){ return app_num_;}
int App_Info::app_size(){ return app_size_;}
int App_Info::get_master(){ return world_ranks_[0];}
int App_Info::world_rank(int relative_rank)
{
return world_ranks_[relative_rank];
}
int App_Info::relative_rank(int world_rank)
{
return relative_ranks_[world_rank];
}
void App_Info::set_intra_comm(MPI_Comm *intra_comm)
{
intra_comm_ = intra_comm;
}
MPI_Comm* App_Info::intra_comm()
{
return intra_comm_;
}
void App_Info::inc_combine_count()
{
combine_count_++;
}
int App_Info::combine_count()
{
return combine_count_;
}
void App_Info::reset_combine_count()
{
combine_count_ = 0;
}
int* App_Info::world_ranks(){
return world_ranks_;
}
void App_Info::world_ranks(int *ret_list)
{
for(int i=0; i < app_size_; i++)
ret_list[i] = world_ranks_[i];
}
|