I\'m try to use MPI_Scatter, sending rows of matrix(that are dynamically allocated), but it sending only one row, in others are junk. When I use static memory allocation - every
This isn't an MPI issue, it's a C and multidimensional arrays issue.
The problem is that in C there's no guarantee that your allocated matrix is actually P*P
contiguous int
s. So when you try to scatter P*P
ints starting at matrix[0][0]
, who knows what you're sending out.
This code:
matrix = new int *[P];
for(int i = 0; i < P; i ++)
matrix[i] = new int [P];
Allocates first an array of P
pointers-to-int, and then sets each one to a pointer where has been allocated P
ints. But there's no guarantee at all that matrix[1]
starts where matrix[0]
ends. If you want to do this - and you do, both for MPI and normally for multi-d arrays in technical computing applications generally - you have to manually allocate the contiguous block of memory and have matrix
point into it:
matrix = new int *[P];
int *data = new int [P*P];
for(int i = 0; i < P; i ++)
matrix[i] = &(data[P*i]);
And then the scatter should work.
Note too that you should be using delete
, not free()
, to deallocate memory allocated with new
.