Not all subtasks of a job can be performed in parallel, some parts have to wait for the results of other parts. Look at your programs, you write them sequential, w.o.w filling just one processor, other processors may perform system housekeeping functions but these will probably not a produce 100% load. Modern compilers try to optimize programs, not all can be done.