Finally, the port conflict was solved by following c code in asmpub.c around
line 158.
The rank 0 processor use default port, others use a port specified by os.
if(ctype == MPI_TYPE)
{
if(rank == 0)
{
pub_arg->care_about_port = 1;
}
else
{
pub_arg->care_about_port = 0;
pub_arg->port = -1;
}
}
else
pub_arg->care_about_port = 1;
Now AMS works well for parallel environment.
>
> I'll take a look at this but it may take a little time. It could be some of
> the examples are out of date.
>
>
>
>
>
> Barry
>
>
>
> On Aug 7, 2012, at 5:25 AM, Gong Ding <gdiso at ustc.edu> wrote:
>
>
>
> > Some more bugs about AMS_Comm_publish for parallel situation. even the AMS
> > mpi example can not work.
>
> >
>
> > 1) parameter mismatch
>
> > asmpub.c line 88
>
> > mysetport = *(int *) va_arg(args, int *);
>
> > It seems author wants to add another argument as int * to AMS_Comm_publish
> > function for parallel situation. which not appears in the manual.
>
> > I just comment line 88 and line 130-131,
>
> > if (mysetport != -1) {
>
> > AMS_port = mysetport;
>
> > }
>
> >
>
> > 2) extra check of port number
>
> > asmpub.c line 149
>
> > /* Create publisher arguments */
>
> > err = AMSP_New_Pub_Arguments(AMS_port, &pub_arg);
>
> > CheckErr(err);
>
> >
>
> > AMSP_New_Pub_Arguments function will check the value of AMS_port. A port
> > number of -1 or 0 will return a error.
>
> >
>
> >
>
> > 3) AMSP_start_publisher_func seems require a port number -1 to force socket
> > bind function to allocate a new port, which conflict with
> > AMSP_New_Pub_Arguments check.
>
> >
>
> > nettcppub.c line 66
>
> > if (*port == -1)
>
> > *port = 0;
>
> > at line 94, a bind function is called.
>
> >
>
> >
>
> > I have to set pub_arg->port = -1 as follows.
>
> >
>
> > if(ctype == MPI_TYPE)
>
> > {
>
> > pub_arg->care_about_port = 0;
>
> > pub_arg->port = -1;
>
> > }
>
> > else
>
> > pub_arg->care_about_port = 1;
>
> >
>
> >
>
> > Barry, will you please check it?
>
> >
>
> >
>
> >>
>
> >>
>
> >> On Aug 6, 2012, at 10:17 PM, "Gong Ding" <gdiso at ustc.edu> wrote:
>
> >>
>
> >>
>
> >>
>
> >>> Thanks, Barry. It is really a wonderful tool.
>
> >>
>
> >>
>
> >>
>
> >> Thanks
>
> >>
>
> >>
>
> >>
>
> >>> PS: The C STRING support of AMS is a bit strange. At very beginning, I
> >>> can't understand the mechanism of STRING. So I added a CHAR data type to
> >>> AMS for an alternate of STRING.
>
> >>
>
> >>>
>
> >>
>
> >>> Hope the AMS manual have some more detailed description to parallel usage
> >>> and data types.
>
> >>
>
> >>
>
> >>
>
> >> Maybe you can help write it. We really don't have any one
> >> maintaining/improving the AMS which is a pity. You can access the
> >> repository with
>
> >>
>
> >>
>
> >>
>
> >> hg clone http://petsc.cs.iit.edu/petsc/ams-dev
>
> >>
>
> >>
>
> >>
>
> >>
>
> >>
>
> >> Barry
>
> >>
>
> >>
>
> >>
>
> >>>
>
> >>
>
> >>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>> On Aug 6, 2012, at 9:36 AM, "Gong Ding" <gdiso at ustc.edu> wrote:
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>> Hi,
>
> >>
>
> >>>>
>
> >>
>
> >>>>> I am trying to use AMS as data communicator between computational code
> >>>>> and user monitor. The AMS works well for serial situation, however, I
> >>>>> don't know how to use it for parallel environment. The manual has
> >>>>> little information, too.
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>> You need to build AMS with the same MPI that you will use in the
> >>>> parallel program.
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>> I'd like to know some thing about data synchronization.
>
> >>
>
> >>>>
>
> >>
>
> >>>>> Does AMS process data synchronization in MPI environment automatically?
> >>>>> Should I call AMS_Comm_publish on every MPI processor, and create
> >>>>> memory with AMS_Memory_create for my variables on each processor?
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>> There are different types of variables you can publish.
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>> AMS_Comm_publish() takes an argument AMS_Comm_type which would be
> >>>> MPI_TYPE like in your case.
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>> AMS_Memory_add_field() takes an argument AMS_Shared_type which can be
> >>>> AMS_COMMON, AMS_DISTRIBUTED or AMS_REDUCED and if it is reduced the
> >>>> AMS_Reduction_type is AMS_SUM, AMS_MAX, AMS_MIN, or AMS_NONE. See the
> >>>> manual page for AMS_Memory_add_field() .
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>> If AMS_Shared_type is AMS_COMMON then AMS assumes that the values in
> >>>> those locations are identical on all processes (and it brings over to
> >>>> the accessor one set of those values), if distributed then each process
> >>>> has an array of different values (and it brings over all those values,
> >>>> in a long array, on the accessor) if reduce that it brings back the
> >>>> values after applying the reduction operator across all the processes;
> >>>> so with sum it beings back the sum of the values over all the processes.
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>> If so, the accessor will see how many TCP/IP port? Or accessor only
> >>>>> communicate with MPI processor 0 and processor 0 will broadcast the
> >>>>> information to all the others?
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>> AMS completely manages the fact there are multiple "publishers", the
> >>>> accessor transparently handles getting stuff from all the publisher
> >>>> nodes.
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>> If not, should I only create AMS object on processor 0, and processor 0
> >>>>> should broadcast what AMS get?
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>> Nope, you do not need to do this.
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>> Barry
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>> Gong Ding
>
> >>
>
> >>>>
>
> >>
>
> >>>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>>>
>
> >>
>
> >>
>
> >>
>
> >>
>
>
>
>