NRECV(3PVM)

πŸ“¦ version 3.4.6, in debian bookworm, ubuntu jammy

πŸ’Œ NRECV(3PVM) β€” the non-blocking receive bestie πŸ’Œ

okay so we're in the PVM Version 3.4 manual, and this page is NRECV, aka pvm_nrecv, aka the function that peeks at your mailbox and goes "mmm not yet" instead of standing there waiting forever. iconic behavior honestly. πŸ¦‹


✨ NAME ✨

pvm_nrecv β€” non-blocking receive. that's it, that's the whole vibe. πŸ’…


🌸 SYNOPSIS 🌸

C    int bufid = pvm_nrecv( int tid, int msgtag )

Fortran   call pvmfnrecv( tid, msgtag, bufid )

πŸŽ€ PARAMETERS πŸŽ€

  • tid β€” Integer task identifier of the sending process, and yes you supply it. like, it's on you bestie. 🫢
  • msgtag β€” Integer message tag, also supplied by you. heads up: msgtag should be >= 0. (the negative numbers are doing something else, we'll get there πŸ‘€)
  • bufid β€” Integer that returns the value of the new active receive buffer identifier. anything less than zero means something went wrong, so like, error energy. 😭

πŸ’– DESCRIPTION πŸ’–

The routine pvm_nrecv checks to see if a message with label msgtag has arrived from tid. and also clears the current receive buffer if any. If a matching message has arrived, pvm_nrecv immediately places the message in a new active receive buffer, and returns the buffer identifier in bufid. no waiting, no drama, straight to business. ✨

If the requested message has not arrived, then pvm_nrecv immediately returns with a 0 in bufid. literally just "nope, nothing yet, go touch grass." If some error occurs, bufid will be < 0. πŸ’€

A -1 in msgtag or tid matches anything. wildcard mode, main character energy. This allows you the following options:

  • If tid = -1 and msgtag is defined by the user, then pvm_nrecv will accept a message from any process which has a matching msgtag.
  • If msgtag = -1 and tid is defined by the user, then pvm_nrecv will accept any message that is sent from process tid.
  • If tid = -1 and msgtag = -1, then pvm_nrecv will accept any message from any process. chaos mode, we love her. 🌈

The PVM model guarantees the following about message order. If task 1 sends message A to task 2, then task 1 sends message B to task 2, message A will arrive at task 2 before message B. Moreover, if both messages arrive before task 2 does a receive, then a wildcard receive will always return message A. so like, first come first served, no cutting the line. πŸ‘‘

pvm_nrecv is non-blocking in the sense that the routine always returns immediately either with the message or with the information that the message has not arrived at the local pvmd yet. pvm_nrecv can be called multiple times to check if a given message has arrived yet. In addition the blocking receive pvm_recv can be called for the same message if the application runs out of work it could do before the data arrives. so like, you can keep checking, and if you're out of side quests, you can go full pvm_recv and just wait. 🀝

If pvm_nrecv returns with the message, then the data in the message can be unpacked into the user's memory using the unpack routines. that's the payoff bestie, go get your data. 🎁


🌟 EXAMPLES 🌟

C:

tid = pvm_parent();
msgtag = 4 ;
arrived = pvm_nrecv( tid, msgtag );
if ( arrived > 0)
     info = pvm_upkint( tid_array, 10, 1 );
else
     /* go do other computing */

Fortran:

CALL PVMFNRECV( -1, 4, ARRIVED )
IF ( ARRIVED .gt. 0 ) THEN
   CALL PVMFUNPACK( INTEGER4, TIDS, 25, 1, INFO )
   CALL PVMFUNPACK( REAL8, MATRIX, 100, 100, INFO )
ELSE
*       GO DO USEFUL WORK
ENDIF

see how the ELSE branch is literally just "go do useful work"? that's the whole point of non-blocking, you're not sitting there refreshing. 🧚


😭 ERRORS 😭

These error conditions can be returned by pvm_nrecv.

  • PvmBadParam β€” giving an invalid tid value or msgtag. bestie. why. πŸ™ˆ
  • PvmSysErr β€” pvmd not responding. the daemon ghosted you, that's rough. πŸ’€

πŸ”₯ SEE ALSO πŸ”₯

pvm_bufinfo(3PVM), pvm_getminfo(3PVM), pvm_recv(3PVM), pvm_unpack(3PVM), pvm_send(3PVM), pvm_mcast(3PVM)


and that's the page!! this one dropped on 30 August, 1993 and it lives in PVM Version 3.4 β€” yes the queen has been serving since '93 and she has NOT missed a day. periodt. πŸ’…βœ¨πŸŽ€

πŸ“¦ where this page comes from