SMP and Hyper-Threading technologies support in the visualization block of the CPU RM
The rendering block (visualization block) of the CPURM forms two or four rendering streams in order to use
capabilities of the SMP and CMP. When rendering a new frame each stream gets a certain screen part for rendering, and
further the streams work independently. It allows for the required parallelism in executing the program code.
The streams run almost independently, they do not interact with signals, semaphores etc. Each implements the same
function of drawing the scene. Each stream has its own data set, description of geometry for the rendered screen
area, and the like; and there are data shared by all the streams. Textures, a part of geometry and other types of data.
In course of the rendering the data arrays are read from the memory and the obtained pixel colors are recorded into the
screen buffer located in the system or video memory. Local variables for storing temporary parameters do not take much
memory, - just around 1 KB.
Interaction with Hyper-Threading
Contrary to the classical SMP systems with independently running CPUs, in the system supporting Hyper-Threading two
logical CPUs share one physical processor. That is why it's not allowed to have one of the streams which is not doing
useful work at the moment to be in the endless signal-waiting loop because it takes resources of the physical processor
and prevents the other logical processor from doing useful work. Such situation is averted with the function
WaitForMultipleObjects from Win32 API which puts the main stream of the program, which waits for the rendering
streams to stop working, in the special sleep state when it takes the minimal processor's time.