Advanced computer architecture: parallelism, scalabilty, programmability