Even More Complicated Programming Models
In the same way that software computing architectures become more complicated, advances in hardware design placed more than one processor within a computer. So, expanding on what is shown in the previous figure, you could be writing programs that execute in environments that look like this.
Four-Processor Computer
|
This figure shows four linked processors in one computer, each of which has three threads. This architecture could, in one sense, be thought of as an extension to the model having more than one computer. And, if you think of your architecture like this, there is no reason that you can not join many computers together to solve problems. The following figureshows five computers, each with four processors. Every program running on every processor has three threads, which means that altogether there are 60 user threads.
Four Processor Computer Networks
|
This figure depicts only processors and threads. It does not have any information about the nature of the programs and threads or even if the programs are the same or are different.
At any time, it is next to impossible to guess which threads are executing and what a thread is actually executing. To make matters worse, many multiprocessor programs begin by invoking a process such as mpirun or IBM's POE whose function is to distribute and control the work being performed. In this kind of environment, a program (or the program within a library) is using another program to control how it distributes work across processors.
If everything goes right, life is good. When there are problems--and there are always problems--traditional debuggers and solutions are helpless. As you will see, TotalView organizes this mass of executing procedures for you and, because operating systems can complicate things greatly, TotalView lets you distinguish between threads and processes used by the operating system and those used by your program.