PPC uses an alti-tec vector pipeline and x86 uses SSE vector pipelines. Intel and Moto offer tools to vectorize and optimize your code for their vector units, and you have to use them (or hand code in assembler). Other than that, multicore = multiprocessor. Computers have been using multiple processors for decades now. Code that can be executed as multiple processes (or threads/subprocesses), can be scheduled and executed by the kernel across multiple cpus. The kernel manages the spin locks and mutex's to manage resource contention between the processors and threads.
Its very easy to write highly granular, threaded business or scientific software, but games are fairly difficult to break into parallel processes simply because they need very tight synchronization between the different processes. Example, you code an OpenGL rendering process, a Sound process, a Traingle/vertex process, a disk IO process, a network IO process, an event loop process, etc. Each of those has to be 100% in sync with the others or the game gets choppy.
Optimizing for a cpu is easy. Re-architecting your game so that it is threaded and parallel enough to take advantage of multiple cpus is hard.