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
> 
> >> 
> 
> >>> 
> 
> >> 
> 
> >>> 
> 
> >> 
> 
> >>> 
> 
> >> 
> 
> >>> 
> 
> >> 
> 
> >>> 
> 
> >> 
> 
> >>> 
> 
> >> 
> 
> >>> 
> 
> >> 
> 
> >> 
> 
> >> 
> 
> >> 
> 
> 
> 
> 

Reply via email to