How would we determine whether trace-driven simulator or execution-driven simulator is better for the software and hardware we are testing? What are the benefits and drawbacks of each?
In general, trace-drive simulations are more consistent (just replay the trace) and faster to run. Execution-driven simulations give more detail. Often you will just select one of the existing simulators that let you adjust the thing being tested with a preference for trace-driven simulation, so that you can iterate through the problem space faster.
Now that said, certain tests require execution-drive simulation. IF the thing that you are testing could change the "trace", then you cannot use a trace. For example, suppose you want to test "branch on random" (http://dl.acm.org/citation.cfm?doid=1356058.1356070) with an instruction trace, the instructions following this branch will change depending on the branch, thus a trace does not capture the behavior and could not be used.