[mpich-discuss] Error: "MPIR_Get_contextid_sparse_group(1193): Too many communicators (0/2048)"
Rajeev Thakur
thakur at mcs.anl.gov
Fri May 23 12:29:38 CDT 2014
I don't fully understand your use case, but:
The window memory passed to MPI_Win_create on each process must be a contiguous memory. You can internally manage it in whatever way.
If you create a datatype on a process, the datatype is local to that process. Other processes can't use that datatype.
Also the MPI standard says the following about the target datatype passed to put/get/accumulate (MPI-3, pg 420, line 33):
"The target datatype must contain only relative displacements, not absolute addresses."
Rajeev
On May 23, 2014, at 9:44 AM, Ted Sariyski <tsariysk at craft-tech.com> wrote:
> I need a little bit more help. My question relates to the structure of the array (referred below as A), for which a window object will be created.
>
> Let say that particles are of type particle_t:
>
> type particle_t
> integer :: host, id,...
> real,pointer :: data(:)=>null()
> end type particle_t
>
> I built two corresponding mpi types, one with data allocated, mpi_particles_t, and mpi_particles_null_t, when p%data=>null().
>
> What I want to do is the following:
> • All processes allocates an array of type particles_t for all particles, but data is allocated only if a particle is assigned to the domain:
> allocate(A(tot_num_particles))
> do n=1,tot_num_particles
> if ( particle(n)%host == myid) allocate(particle(n)%data(data_size))
> enddo
>
> 2. All processes create their mpi data type mpi_A_t:
>
> do n=1,tot_num_particles
>
> if ( particle(n)%host == myid) then
> blockcounts(n) = 1 ; oldtypes(n) = mpi_particles_t
> else
> blockcounts(n) = 1 ; oldtypes(n) = mpi_particles_null_t
> endif
> call MPI_GET_ADDRESS(A(n), offsets(n), ierr)
> enddo
>
> call mpi_type_create_struct(tot_num_particles,blockcounts,offsets,oldtypes,mpi_A_myid_t,ierr)
> call mpi_type_commit(mpi_A_myid_t,ierr)
>
> I gave a try but it fails. Before I proceed I want to make sure that there is nothing fundamentally wrong with this approach. Besides, even if it is correct, I am not sure that this is the 'best' solution. I will highly appreciate your comments.
>
> Thanks in advance,
> --Ted
>
>
>
>
>
> On 05/22/2014 03:31 PM, Ted Sariyski wrote:
>> I see. Thanks a lot.
>> --Ted
>>
>>
>> On 05/22/2014 03:15 PM, Rajeev Thakur wrote:
>>>> What do you mean with: "Why can’t all processes open one large window?" I guess I miss something.
>>> If each process has an array of objects that belong to it (called array A say) , then with a single call to MPI_Win_create you can create a window object that has everyone's A arrays in it.
>>>
>>> Rajeev
>>>
>>>
>>>
>>> On May 22, 2014, at 9:46 AM, Ted Sariyski <tsariysk at craft-tech.com> wrote:
>>>
>>>> It is about MPI_win. Here is the problem as it relates to MPI (it is a Boltzmann type equation).
>>>>
>>>> There are N particles interacting with each other. Interaction is directional, so that a particle interacts only with those particles, which are within a narrow cone. The first step is to segregate the initial set of N particles into subsets of particles (I called it 'objects'), which interact with each other. Here is what I do:
>>>> • Assign each object to a process.
>>>> • The process which owns a object:
>>>> • Makes a guess for the maximum number of particles expected in this object.
>>>> • Allocates memory for it.
>>>> • Opens a shared window.
>>>> • All processes
>>>> • Each particle identify which object it belongs to, and PUTs its data there.
>>>> • After assembly is done, objects are passed to a solver.
>>>> • Repeat
>>>> What do you mean with: "Why can’t all processes open one large window?" I guess I miss something.
>>>> Thanks,
>>>> --Ted
>>>>
>>>>
>>>> On 05/21/2014 11:03 PM, Balaji, Pavan wrote:
>>>>> On May 21, 2014, at 6:02 PM, Ted Sariyski <tsariysk at craft-tech.com>
>>>>> wrote:
>>>>>
>>>>>> Memory limitations. With one large window all processes have to allocate memory for the objects they own as well as for objects assigned to other process.
>>>>>>
>>>>> Are we talking about the same thing here? I’m referring to an MPI_Win. What objects do processes need to keep track of?
>>>>>
>>>>> — Pavan
>>>>>
>>>>> _______________________________________________
>>>>> discuss mailing list
>>>>> discuss at mpich.org
>>>>>
>>>>> To manage subscription options or unsubscribe:
>>>>>
>>>>> https://lists.mpich.org/mailman/listinfo/discuss
>>>> _______________________________________________
>>>> discuss mailing list discuss at mpich.org
>>>> To manage subscription options or unsubscribe:
>>>> https://lists.mpich.org/mailman/listinfo/discuss
>>> _______________________________________________
>>> discuss mailing list discuss at mpich.org
>>> To manage subscription options or unsubscribe:
>>> https://lists.mpich.org/mailman/listinfo/discuss
>>
>>
>
> _______________________________________________
> discuss mailing list discuss at mpich.org
> To manage subscription options or unsubscribe:
> https://lists.mpich.org/mailman/listinfo/discuss
More information about the discuss
mailing list