pvm3.h

Go to the documentation of this file.
00001 
00002 /* $Id: pvm3.h 3881 2007-09-06 10:12:38Z ritt $ */
00003 
00004 /*
00005  *         PVM version 3.4:  Parallel Virtual Machine System
00006  *               University of Tennessee, Knoxville TN.
00007  *           Oak Ridge National Laboratory, Oak Ridge TN.
00008  *                   Emory University, Atlanta GA.
00009  *      Authors:  J. J. Dongarra, G. E. Fagg, M. Fischer
00010  *          G. A. Geist, J. A. Kohl, R. J. Manchek, P. Mucci,
00011  *         P. M. Papadopoulos, S. L. Scott, and V. S. Sunderam
00012  *                   (C) 1997 All Rights Reserved
00013  *
00014  *                              NOTICE
00015  *
00016  * Permission to use, copy, modify, and distribute this software and
00017  * its documentation for any purpose and without fee is hereby granted
00018  * provided that the above copyright notice appear in all copies and
00019  * that both the copyright notice and this permission notice appear in
00020  * supporting documentation.
00021  *
00022  * Neither the Institutions (Emory University, Oak Ridge National
00023  * Laboratory, and University of Tennessee) nor the Authors make any
00024  * representations about the suitability of this software for any
00025  * purpose.  This software is provided ``as is'' without express or
00026  * implied warranty.
00027  *
00028  * PVM version 3 was funded in part by the U.S. Department of Energy,
00029  * the National Science Foundation and the State of Tennessee.
00030  */
00031 
00032 /*
00033  *      pvm3.h
00034  *
00035  *      Libpvm3 includes.
00036  *
00037  * $Id: pvm3.h 3881 2007-09-06 10:12:38Z ritt $
00038  *
00039  */
00040 
00041 #ifndef _PVM3_H_
00042 
00043 #define _PVM3_H_
00044 
00045 /*
00046 *       Release version
00047 */
00048 
00049 #define PVM_VER                         "3.4.2"
00050 #define PVM_MAJOR_VERSION       3
00051 #define PVM_MINOR_VERSION       4
00052 #define PVM_PATCH_VERSION       2
00053 
00054 #ifndef WIN32
00055 #include        <sys/time.h>
00056 #else
00057 #include "pvmwin.h"
00058 #include <sys/timeb.h>
00059 #include <time.h>
00060 #endif
00061 
00062 /*
00063 *       Data packing styles for pvm_initsend()
00064 */
00065 
00066 #define PvmDataDefault  0       /* XDR encoding */
00067 #define PvmDataRaw              1       /* Raw data copy */
00068 #define PvmDataInPlace  2       /* Raw data, left in place */
00069 #define PvmDataFoo              PvmDataDefault  /* Internal use */
00070 #define PvmDataTrace    4       /* User-Defined Trace Encoding */
00071 
00072 /*
00073 *       pvm_spawn options
00074 */
00075 
00076 #define PvmTaskDefault  0
00077 #define PvmTaskHost             1       /* specify host */
00078 #define PvmTaskArch             2       /* specify architecture */
00079 #define PvmTaskDebug    4       /* start task in debugger */
00080 #define PvmTaskTrace    8       /* process generates trace data */
00081 /* for MPP ports */
00082 #define PvmMppFront             16      /* spawn task on service node */
00083 #define PvmHostCompl    32      /* complement host set */
00084 /* for parent-less spawning */
00085 #define PvmNoSpawnParent        64
00086 
00087 /*
00088 *       pvm_notify kinds
00089 */
00090 
00091 #define PvmTaskExit             1       /* on task exit */
00092 #define PvmHostDelete   2       /* on host fail/delete */
00093 #define PvmHostAdd              3       /* on host startup */
00094 #define PvmRouteAdd             4       /* new task-task route opened */
00095 #define PvmRouteDelete  5       /* task-task route closed */
00096 
00097 /* flags combined with notify kind */
00098 
00099 #define PvmNotifyCancel 256     /* cancel (complete immediately) notifies */
00100 
00101 /*
00102 *       for pvm_setopt and pvm_getopt
00103 */
00104 
00105 #define PvmRoute                        1       /* routing policy */
00106 #define         PvmDontRoute            1       /* don't allow direct task-task links */
00107 #define         PvmAllowDirect          2       /* allow direct links, but don't request */
00108 #define         PvmRouteDirect          3       /* request direct links */
00109 #define PvmDebugMask            2       /* debugmask */
00110 #define PvmAutoErr                      3       /* auto error reporting */
00111 #define PvmOutputTid            4       /* stdout destination for children */
00112 #define PvmOutputCode           5       /* stdout message tag */
00113 #define PvmTraceTid                     6       /* trace destination for children */
00114 #define PvmTraceCode            7       /* trace message tag */
00115 #define PvmTraceBuffer          8       /* trace buffering for children */
00116 #define PvmTraceOptions         9       /* trace options for children */
00117 #define         PvmTraceFull            1       /* do full trace events */
00118 #define         PvmTraceTime            2       /* only do PVM routine timings */
00119 #define         PvmTraceCount           3       /* only do PVM routine profiling */
00120 #define PvmFragSize                     10      /* message fragment size */
00121 #define PvmResvTids                     11      /* allow reserved message tids and codes */
00122 #define PvmSelfOutputTid        12      /* stdout destination for task */
00123 #define PvmSelfOutputCode       13      /* stdout message tag */
00124 #define PvmSelfTraceTid         14      /* trace destination for task */
00125 #define PvmSelfTraceCode        15      /* trace message tag */
00126 #define PvmSelfTraceBuffer      16      /* trace buffering for task */
00127 #define PvmSelfTraceOptions     17      /* trace options for task */
00128 #define PvmShowTids                     18      /* pvm_catchout prints task ids with output */
00129 #define PvmPollType                     19      /* shared memory wait method */
00130 #define         PvmPollConstant         1
00131 #define         PvmPollSleep            2
00132 #define PvmPollTime                     20      /* time before sleep if PvmPollSleep */
00133 #define PvmOutputContext        21      /* stdout message context */
00134 #define PvmTraceContext         22      /* trace message context */
00135 #define PvmSelfOutputContext    23      /* stdout message context */
00136 #define PvmSelfTraceContext     24      /* trace message context */
00137 #define PvmNoReset                      25      /* do not kill task on reset */
00138 
00139 /*
00140 *       for pvm_[sg]ettmask
00141 */
00142 
00143 #define PvmTaskSelf             0       /* this task */
00144 #define PvmTaskChild    1       /* (future) child tasks */
00145 
00146 /*
00147 *       Need to have PvmBaseContext defined
00148 */
00149 
00150 #define PvmBaseContext  0
00151 
00152 /*
00153 *       for message mailbox operations: pvm_putinfo and pvm_recvinfo
00154 */
00155 
00156 #define PvmMboxDefault                  0       /* put: single locked instance */
00157                                                                         /* recv: 1st entry */
00158                                                                         /* start w/index=0 */
00159 #define PvmMboxPersistent               1       /* entry remains after owner exit */
00160 #define PvmMboxMultiInstance    2       /* multiple entries in class */
00161 #define PvmMboxOverWritable             4       /* can write over this entry */
00162 #define PvmMboxFirstAvail               8       /* select 1st index >= specified */
00163 #define PvmMboxReadAndDelete    16      /* atomic read / delete */
00164                                                                         /* requires read & delete rights */
00165 #define PvmMboxWaitForInfo              32      /* for blocking recvinfo */
00166 
00167 
00168 #define PVMNORESETCLASS         "###_PVM_NO_RESET_###"
00169 
00170 #define PVMHOSTERCLASS          "###_PVM_HOSTER_###"
00171 
00172 #define PVMTASKERCLASS          "###_PVM_TASKER_###"
00173 
00174 #define PVMTRACERCLASS          "###_PVM_TRACER_###"
00175 
00176 #define PVMRMCLASS                      "###_PVM_RM_###"
00177 
00178 /*
00179 *       Libpvm error codes
00180 */
00181 
00182 #define PvmOk                   0       /* Success */
00183 #define PvmBadParam             -2      /* Bad parameter */
00184 #define PvmMismatch             -3      /* Parameter mismatch */
00185 #define PvmOverflow             -4      /* Value too large */
00186 #define PvmNoData               -5      /* End of buffer */
00187 #define PvmNoHost               -6      /* No such host */
00188 #define PvmNoFile               -7      /* No such file */
00189 #define PvmDenied               -8      /* Permission denied */
00190 #define PvmNoMem                -10     /* Malloc failed */
00191 #define PvmBadMsg               -12     /* Can't decode message */
00192 #define PvmSysErr               -14     /* Can't contact local daemon */
00193 #define PvmNoBuf                -15     /* No current buffer */
00194 #define PvmNoSuchBuf    -16     /* No such buffer */
00195 #define PvmNullGroup    -17     /* Null group name */
00196 #define PvmDupGroup             -18     /* Already in group */
00197 #define PvmNoGroup              -19     /* No such group */
00198 #define PvmNotInGroup   -20     /* Not in group */
00199 #define PvmNoInst               -21     /* No such instance */
00200 #define PvmHostFail             -22     /* Host failed */
00201 #define PvmNoParent             -23     /* No parent task */
00202 #define PvmNotImpl              -24     /* Not implemented */
00203 #define PvmDSysErr              -25     /* Pvmd system error */
00204 #define PvmBadVersion   -26     /* Version mismatch */
00205 #define PvmOutOfRes             -27     /* Out of resources */
00206 #define PvmDupHost              -28     /* Duplicate host */
00207 #define PvmCantStart    -29     /* Can't start pvmd */
00208 #define PvmAlready              -30     /* Already in progress */
00209 #define PvmNoTask               -31     /* No such task */
00210 #define PvmNotFound             -32     /* Not Found */
00211 #define PvmExists               -33     /* Already exists */
00212 #define PvmHostrNMstr   -34     /* Hoster run on non-master host */
00213 #define PvmParentNotSet -35     /* Spawning parent set PvmNoSpawnParent */
00214 
00215 /*
00216 *       crusty error constants from 3.3, now redefined...
00217 */
00218 #define PvmNoEntry              PvmNotFound     /* No such entry */
00219 #define PvmDupEntry             PvmDenied       /* Duplicate entry */
00220 
00221 /*
00222 *       Data types for pvm_reduce(), pvm_psend(), pvm_precv()
00223 */
00224 
00225 #define PVM_STR                 0       /* string */
00226 #define PVM_BYTE                1       /* byte */
00227 #define PVM_SHORT               2       /* short */
00228 #define PVM_INT                 3       /* int */
00229 #define PVM_FLOAT               4       /* real */
00230 #define PVM_CPLX                5       /* complex */
00231 #define PVM_DOUBLE              6       /* double */
00232 #define PVM_DCPLX               7       /* double complex */
00233 #define PVM_LONG                8       /* long integer */
00234 #define PVM_USHORT              9       /* unsigned short int */
00235 #define PVM_UINT                10      /* unsigned int */
00236 #define PVM_ULONG               11      /* unsigned long int */
00237 
00238 /*
00239 *       returned by pvm_config()
00240 */
00241 
00242 struct pvmhostinfo {
00243    int hi_tid;                  /* pvmd tid */
00244    char *hi_name;               /* host name */
00245    char *hi_arch;               /* host arch */
00246    int hi_speed;                /* cpu relative speed */
00247    int hi_dsig;                 /* data signature */
00248 };
00249 
00250 /*
00251 *       returned by pvm_tasks()
00252 */
00253 
00254 struct pvmtaskinfo {
00255    int ti_tid;                  /* task id */
00256    int ti_ptid;                 /* parent tid */
00257    int ti_host;                 /* pvmd tid */
00258    int ti_flag;                 /* status flags */
00259    char *ti_a_out;              /* a.out name */
00260    int ti_pid;                  /* task (O/S dependent) process id */
00261 };
00262 
00263 /*
00264 *       for pvm_getminfo(), pvm_setminfo()
00265 */
00266 
00267 struct pvmminfo {
00268    int len;                     /* message length */
00269    int ctx;                     /* context */
00270    int tag;                     /* tag */
00271    int wid;                     /* wait id */
00272    int enc;                     /* encoding */
00273    int crc;                     /* crc checksum */
00274    int src;                     /* source tid */
00275    int dst;                     /* destination tid */
00276 };
00277 
00278 /*
00279 *       returned by pvm_getmboxinfo()
00280 */
00281 
00282 struct pvmmboxinfo {
00283    char *mi_name;               /* class name */
00284    int mi_nentries;             /* # of entries for this class */
00285    int *mi_indices;             /* mbox entry indices */
00286    int *mi_owners;              /* mbox entry owner tids */
00287    int *mi_flags;               /* mbox entry flags */
00288 };
00289 
00290 #ifdef __ProtoGlarp__
00291 #undef __ProtoGlarp__
00292 #endif
00293 #if defined(__STDC__) || defined(__cplusplus)
00294 #define __ProtoGlarp__(x) x
00295 #else
00296 #define __ProtoGlarp__(x) ()
00297 #endif
00298 
00299 #ifdef __cplusplus
00300 extern "C" {
00301 #endif
00302 
00303    int pvm_addhosts __ProtoGlarp__((char **, int, int *));
00304    int pvm_addmhf __ProtoGlarp__((int, int, int, int (*)(int)));
00305    int pvm_archcode __ProtoGlarp__((char *));
00306    int pvm_barrier __ProtoGlarp__((char *, int));
00307    int pvm_bcast __ProtoGlarp__((char *, int));
00308    int pvm_bufinfo __ProtoGlarp__((int, int *, int *, int *));
00309 #if defined(EOF)
00310    int pvm_catchout __ProtoGlarp__((FILE *));
00311 #endif
00312    int pvm_config __ProtoGlarp__((int *, int *, struct pvmhostinfo **));
00313    int pvm_delhosts __ProtoGlarp__((char **, int, int *));
00314    int pvm_delinfo __ProtoGlarp__((char *, int, int));
00315    int pvm_delmhf __ProtoGlarp__((int));
00316    int pvm_exit __ProtoGlarp__((void));
00317    int pvm_export __ProtoGlarp__((char *));
00318    int pvm_freebuf __ProtoGlarp__((int));
00319    int pvm_freecontext __ProtoGlarp__((int));
00320    int pvm_gather __ProtoGlarp__((void *, void *, int, int, int, char *, int));
00321    int pvm_getcontext __ProtoGlarp__((void));
00322    int pvm_getfds __ProtoGlarp__((int **));
00323    int pvm_getinst __ProtoGlarp__((char *, int));
00324    int pvm_getminfo __ProtoGlarp__((int, struct pvmminfo *));
00325    int pvm_getnoresets __ProtoGlarp__((int **, int *));
00326    int pvm_getopt __ProtoGlarp__((int));
00327    int pvm_getrbuf __ProtoGlarp__((void));
00328    int pvm_getsbuf __ProtoGlarp__((void));
00329    int pvm_gettid __ProtoGlarp__((char *, int));
00330    int pvm_gsize __ProtoGlarp__((char *));
00331    int pvm_halt __ProtoGlarp__((void));
00332    int pvm_hostsync __ProtoGlarp__((int, struct timeval *, struct timeval *));
00333    int pvm_initsend __ProtoGlarp__((int));
00334    int pvm_joingroup __ProtoGlarp__((char *));
00335    int pvm_kill __ProtoGlarp__((int));
00336    int pvm_lvgroup __ProtoGlarp__((char *));
00337    int pvm_getmboxinfo __ProtoGlarp__((char *, int *, struct pvmmboxinfo **));
00338    int pvm_mcast __ProtoGlarp__((int *, int, int));
00339    int pvm_mkbuf __ProtoGlarp__((int));
00340    int pvm_mstat __ProtoGlarp__((char *));
00341    int pvm_mytid __ProtoGlarp__((void));
00342    int pvm_newcontext __ProtoGlarp__((void));
00343    int pvm_notify __ProtoGlarp__((int, int, int, int *));
00344    int pvm_nrecv __ProtoGlarp__((int, int));
00345    int pvm_packf __ProtoGlarp__((const char *, ...));
00346    int pvm_parent __ProtoGlarp__((void));
00347    int pvm_perror __ProtoGlarp__((char *));
00348    int pvm_pkbyte __ProtoGlarp__((char *, int, int));
00349    int pvm_pkcplx __ProtoGlarp__((float *, int, int));
00350    int pvm_pkdcplx __ProtoGlarp__((double *, int, int));
00351    int pvm_pkdouble __ProtoGlarp__((double *, int, int));
00352    int pvm_pkfloat __ProtoGlarp__((float *, int, int));
00353    int pvm_pkint __ProtoGlarp__((int *, int, int));
00354    int pvm_pklong __ProtoGlarp__((long *, int, int));
00355    int pvm_pkshort __ProtoGlarp__((short *, int, int));
00356    int pvm_pkstr __ProtoGlarp__((char *));
00357    int pvm_pkuint __ProtoGlarp__((unsigned int *, int, int));
00358    int pvm_pkulong __ProtoGlarp__((unsigned long *, int, int));
00359    int pvm_pkushort __ProtoGlarp__((unsigned short *, int, int));
00360    int pvm_precv __ProtoGlarp__((int, int, void *, int, int, int *, int *, int *));
00361    int pvm_probe __ProtoGlarp__((int, int));
00362    int pvm_psend __ProtoGlarp__((int, int, void *, int, int));
00363    int pvm_pstat __ProtoGlarp__((int));
00364    int pvm_putinfo __ProtoGlarp__((char *, int, int));
00365    int pvm_recv __ProtoGlarp__((int, int));
00366    int (*pvm_recvf __ProtoGlarp__((int (*)(int, int, int)))) ();
00367    int pvm_recvinfo __ProtoGlarp__((char *, int, int));
00368    int pvm_reduce __ProtoGlarp__((void (*)(int *, void *, void *, int *, int *),
00369                                   void *, int, int, int, char *, int));
00370 
00371 /*
00372 *       Predefined pvm_reduce functions
00373 */
00374    void PvmMax __ProtoGlarp__((int *, void *, void *, int *, int *));
00375    void PvmMin __ProtoGlarp__((int *, void *, void *, int *, int *));
00376    void PvmSum __ProtoGlarp__((int *, void *, void *, int *, int *));
00377    void PvmProduct __ProtoGlarp__((int *, void *, void *, int *, int *));
00378 
00379    int pvm_reg_hoster __ProtoGlarp__((void));
00380    int pvm_reg_rm __ProtoGlarp__((struct pvmhostinfo **));
00381    int pvm_reg_tasker __ProtoGlarp__((void));
00382    int pvm_reg_tracer __ProtoGlarp__((int, int, int, int, char *, int, int));
00383    int pvm_scatter __ProtoGlarp__((void *, void *, int, int, int, char *, int));
00384    int pvm_send __ProtoGlarp__((int, int));
00385    int pvm_sendsig __ProtoGlarp__((int, int));
00386    int pvm_setcontext __ProtoGlarp__((int));
00387    int pvm_setminfo __ProtoGlarp__((int, struct pvmminfo *));
00388    int pvm_setopt __ProtoGlarp__((int, int));
00389    int pvm_setrbuf __ProtoGlarp__((int));
00390    int pvm_setsbuf __ProtoGlarp__((int));
00391    int pvm_siblings __ProtoGlarp__((int **));
00392    int pvm_spawn __ProtoGlarp__((char *, char **, int, char *, int, int *));
00393    int pvm_start_pvmd __ProtoGlarp__((int, char **, int));
00394    int pvm_tasks __ProtoGlarp__((int, int *, struct pvmtaskinfo **));
00395    int pvm_tickle __ProtoGlarp__((int, int *, int *, int *));
00396    int pvm_tidtohost __ProtoGlarp__((int));
00397    int pvm_trecv __ProtoGlarp__((int, int, struct timeval *));
00398    int pvm_unexport __ProtoGlarp__((char *));
00399    int pvm_unpackf __ProtoGlarp__((const char *, ...));
00400    int pvm_upkbyte __ProtoGlarp__((char *, int, int));
00401    int pvm_upkcplx __ProtoGlarp__((float *, int, int));
00402    int pvm_upkdcplx __ProtoGlarp__((double *, int, int));
00403    int pvm_upkdouble __ProtoGlarp__((double *, int, int));
00404    int pvm_upkfloat __ProtoGlarp__((float *, int, int));
00405    int pvm_upkint __ProtoGlarp__((int *, int, int));
00406    int pvm_upklong __ProtoGlarp__((long *, int, int));
00407    int pvm_upkshort __ProtoGlarp__((short *, int, int));
00408    int pvm_upkstr __ProtoGlarp__((char *));
00409    int pvm_upkuint __ProtoGlarp__((unsigned int *, int, int));
00410    int pvm_upkulong __ProtoGlarp__((unsigned long *, int, int));
00411    int pvm_upkushort __ProtoGlarp__((unsigned short *, int, int));
00412    char *pvm_version __ProtoGlarp__((void));
00413 
00414 /*
00415 *       these are going away in the next version.
00416 *       use the replacements
00417 */
00418 
00419 #ifdef  PVM33COMPAT
00420    int pvm_getmwid __ProtoGlarp__((int));
00421    int pvm_setmwid __ProtoGlarp__((int, int));
00422 #endif
00423 
00424 /* made backwards compatible -> now use mbox interface... */
00425    int pvm_delete __ProtoGlarp__((char *, int));
00426    int pvm_insert __ProtoGlarp__((char *, int, int));
00427    int pvm_lookup __ProtoGlarp__((char *, int, int *));
00428 
00429 #ifdef __cplusplus
00430 }
00431 #endif
00432 #endif  /*_PVM3_H_*/

Midas DOC Version 3.0.0 ---- PSI Stefan Ritt ----
Contributions: Pierre-Andre Amaudruz - Sergio Ballestrero - Suzannah Daviel - Doxygen - Peter Green - Qing Gu - Greg Hackman - Gertjan Hofman - Paul Knowles - Exaos Lee - Rudi Meier - Glenn Moloney - Dave Morris - John M O'Donnell - Konstantin Olchanski - Renee Poutissou - Tamsen Schurman - Andreas Suter - Jan M.Wouters - Piotr Adam Zolnierczuk