Below C level ...
I guess it all depends on where you jump into the fray with this parallelism stuff. In the server world, most of the applications are concerned with transaction throughput and the number of simultaneous user requests that can be successfully processed. So various schemes are concocted to deal with the load of simultaneous user requests. So multicore configurations have an obvious application at the server level. In the application world, things are not always so clear, but requirements for concurrency pop up.For instance, my DVD burning application and CD ripping application are one in the same. I have multiple drives, so ripping a CD while simultaneously burning a DVD shouldn't prevent me from using the same software to browse my selection of files to backed up as soon as the DVD is finished burning right? Surely this application will be multithreaded and if multiple processors are available, then all the better. Then there is the parallelism that basic operating systems will deploy at any given time. The operating system is running all sorts of background processing, daemons, subroutines, and processes. In a single-processor environment, the operating system has to totally depend on time slicing and swapping so that each process gets it fair share of the CPU. Although this time slicing and swapping doesn't go away in a multicore environment, there are more CPUs to divide the work between. This is a very different kind of parallel programming than what happens in a multithreaded single-user application. The parallel programming that goes on in a multithreaded single-user application is a very different kind of programming than what happens with multi-user, server-based applications. Although many of the mechanisms are the same, they are applied in very different ways.
But our foray into parallelism is for the moment focused on applying parallelism to goal-driven agents. That is, we have certain problem solving agents that we would like to solve their given problem in an acceptable time frame. Because the problems we give the agents are, shall we say AI-complete, then the agent have fairly a heavy burden to bear. The agents typically have one problem to solve or question to answer. Again, the questions although deceptively simple are extremely hard for the agents to answer. The same goes with the problems they are asked to solve. We are hoping that parallelism and multicore will help to ease the burden. Hoping... Remember our question:
Which tastes better coke or pepsi?
We forgot to mention that we give this question to our agents audibly.