Buffer Interprocess Sharing: Examples - C++
| Buffer Interprocess Sharing | |
|---|---|
| BIPS Basics | |
|
|
|
| Getting Started | |
|
|
|
| User Manual | |
|
|
|
| Examples | |
|
|
|
| Performance | |
|
|
|
| Contact Us | |
|
|
Introduction
The C++ examples take into account two possible cases:
- One-to-one communication
- One-to-many in broadcast communication
The example binaries are compiled after building. If the build directory is build:
├── src
└── examples
└── one-to-one
├── consumer
└── producer
Executable options
Both executables have the same CLI options. Please, take them into account:
Usage:
consumer/producer [OPTION]...
Optional arguments:
-h, --help: Display this message and exit
--backend BACKEND: Use the specified inter-process shared memory
backend; BACKEND can be 'shm' or 'nvsci'. Default: 'shm'
--channel CHANNEL: Connect to the specified shared memory channel.
CHANNEL preferably starts with a '/' character
followed by up to 255 characters, none of which
are slashes. Default: channel
--num-buffers NUM_BUFFERS: Indicate how many shared memory buffers
to create; NUM_BUFFERS can be a positive
integer. Default: 10
--buffer-size BUFFER_SIZE: Indicate the size in bytes of a shared
memory buffer; BUFFER_SIZE can be a
positive integer. Default 33 MB
--exec-order ORDER: Follow execution order for buffer processing
specified in ORDER; ORDER can be 'in-order' or
'out-of-order'. Default 'in-order'
--process-size PROCESS_SIZE: Indicate the size in bytes of data to
write to/read from shared memory
during execution; PROCESS_SIZE can be
a integer smaller than BUFFER_SIZE. Default:
same as BUFFER_SIZE
--timeout TIMEOUT: Indicate how long to wait for available buffers
before throwing a timeout error; TIMEOUT is
measured in seconds and can be a positive
integer. Default: 15 secs
--num-iterations NUM-ITERATIONS: Indicate how long many buffer
processing iterations to run before exiting;
NUM-ITERATIONS can be a positive integer. Default: 100
--logfile LOGFILE: Indicate name of file to log to. Default: consumer.log
or producer.log
You can use the defaults.
Note: It is recommended to match the configurations in both executables except in the logfile. |
Running the examples
One-to-one example
1. Open two different terminals: one for the producer and another for the consumer.
2. In terminal 1, execute the producer:
./producer
3. In terminal 2, execute the consumer:
./consumer
One-to-many example
1. Open two different terminals: one for the producer and another for the consumer.
2. In terminal 1, execute the producer:
./producer
3. In terminal 2, execute two consumers:
./consumer --logfile consumer1.log & ./consumer --logfile consumer2.log
You can execute these two consumers in two different consoles as well.