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.

Lev Dymchenko

© 2002—2003, RightMark Gathering. All rights reserved. *** © 2002, designed by const.