What I see people doing is running a SPMD model ... the same program running on the cores. RCCE_send() is a blocking call, so you issue one at a time. RCCE_recv() is also a blocking call. It returns when the message arrives. You can use RCCE_recv_test() instead of RCCE_recv(). RCCE_recv_test() returns right away. It has an additional parameter that becomes 1 when the message arrives.
I'm not sure what you mean by while receiving. I see people running one process on a core. You specify the core from which you want to receive in the recv call.
Here's the output form a very simple test program. I attached the program.
tekubasx@marc101:/shared/tekubasx/NCM$ rccerun -nue 3 -f rc.hosts hello
pssh -h PSSH_HOST_FILE.2447 -t -1 -p 3 /shared/tekubasx/NCM/mpb.2447 < /dev/null
 16:45:15 [SUCCESS] rck00
 16:45:15 [SUCCESS] rck01
 16:45:15 [SUCCESS] rck02
pssh -h PSSH_HOST_FILE.2447 -t -1 -P -p 3 /shared/tekubasx/NCM/hello 3 0.533 00 01 02 < /dev/null
rck00: Core 0: hello from RCCE ... I am 1.0.13.x
rck01: Core 1: hello from RCCE ... I am 1.0.13.x
Core 1: Hello from Core 0
Core 1: Hello from Core 2
rck02: Core 2: hello from RCCE ... I am 1.0.13.x
 16:46:17 [SUCCESS] rck00
 16:46:17 [SUCCESS] rck01
 16:46:17 [SUCCESS] rck02
RCCE_hello.c.zip 920 bytes
1 of 1 people found this helpful
As an example you have cores 0 and 1 sending mesages to core 2. What does core 2 do?
Receives are blocking. So if core 2 does a blocking receive on a message form Core 0, it's blocked until that message arrives. If instead you want to service the message from core 2, you can use use RCE_recv_test(). These are non-blocking receives. What they do is set a supplied variable to 1 when the message is ready.
This seems pretty basic. Is there an aspect to your question that I'm missing?