Having successfully demonstrated that speculative execution can be used to automate I/O hint generation, we are working on refining our design to better handle data-dependent applications like Gnuld. We discovered that even a simple, ad-hoc mechanism - disabling speculative execution for a brief time after some number of cancel requests have been issued - was sufficient to eliminate the performance penalty of performing speculative execution in Gnuld when the I/O system offered no parallelism. We are exploring more generic methods for limiting the number of erroneous hints generated, and for reducing the negative impact of erroneous hinting.
We are also investigating how speculative execution can be effectively employed in the range of possible multiprogramming/multithreaded scenarios. In particular, we are developing methods for evaluating the effectiveness of any particular speculation and for using this evaluation to decide what speculation, if any, should be scheduled and allowed to consume shared machine resources.
Multiprocessor environments offer another exciting possibility. One of the
biggest challenges for proponents of multiprocessors is how they will enable
non-parallelized applications to utilize the additional processing resources.
By performing speculative execution in parallel with normal execution,
disk-bound applications that cannot be automatically parallelized using
compiler techniques may still be able to take advantage of the additional
processing capabilities of a multiprocessor.