I have to partially agree
and disagree with the previous 2 posters regarding how an IPC stage affects processing.
In a nut shell IPC stage allows as to use multiple CPUs at the same time.
The important differentiation there is not the CPU usage, but that by using an IPC you have created distinct
processes. this is what actually affects the processing speed. Even on a single CPU system the performance can be improved with IPC - particularly if the source or target object processes in blocks (as can happen with various devices) so that one process can be busy working while another might be waiting on a peripheral device.
...IPC alters the "row by row" behavior ...
Actually, the IPC stage does nothing to alter the row-row behaviour of DS processing; but there is an element of pipelining introduced.
Let us take a hypothetical DS server job:
Code: Select all
sequential --> transform1 --> transform2 --> sequential
where transform1 and transform2 both do heavy processing, i.e. computing several CRC32 numbers apiece. Each transform needs 10 CPU seconds to process the input/output data.
If we simplified the model of a computer system, then
a) 1-CPU, no other busy users. The job will get 100% of the CPU and will complete in 20 seconds
b) 1-CPU, 2 other busy users. The job will get 1/3 of the total CPU and run in 60 seconds.
c) 4-CPU no other busy users. The job will 100% of the CPU and will complete in 20 seconds
d) 4-CPU, 2 other busy users. The system has 2 "free" processors, so the job will get 100% of one CPU and complete in 20 seconds
This changes when an IPC stage is put between the 2 transform stages. Now the job will be run as 2 separate OS processes. One process is everything before the IPC stage, and the other is everything after the IPC, the stage is a passive one and has no process. Using the simple model, the runtimes will change to:
a) 1-CPU, no other busy users. The job will get 100% of the CPU and will complete in 20 seconds (actually, it will complete a bit faster than before, but only marginally - or hardly noticeably in this CPU bound example)
b) 1-CPU, 2 other busy users. The job will now get 2/4 of the total CPU [4 total system processes, each getting 1/4; 2 of them are this job's] and will complete in 30 seconds.
c) 4-CPU, no other busy users. Each process gets 100% CPU so it will complete in 10 seconds.
c) 4-CPU, 2 other busy users. The system has 4 busy process each on 1 CPU, and both tranforms are running concurrently so the job will finish in 10 seconds.