We propose creating assist threads that concurrently assist an application program as it executes. Assist threads can perform many functions. They can monitor a program's execution, looking for errors, inconsistencies, or hot-spots. They can anticipate a program's flow of control, prefetching instructions or data. Current research involves ways of automatically finding and generating assist threads, as well as evaluating their effectiveness in enhancing program performance.
Modern architectures strive to exploit instruction level parallelism.
Whenever possible, independent instructions are executed in parallel. Dead values, which are no longer needed, can clog registers and limit performance. With compiler assistance, dead registers can be recognized and freed as a program executes. Errors involving pointers and array indices are especially common. Using one processor to run a program and another to monitor the program, it is possible to routinely check programs as they execute, with little or no apparent slowdown.