Trace Factory: Generating Workloads for Trace-Driven Simulation of Shared-Bus Multiprocessors