Compilers are an essential component in supporting speculative multi-threaded, multi-core processors.
Very aggressive compiler optimizations are needed to wring out thread-level parallelism
in general-purpose applications. New analysis approaches such as profiling allows data
dependences, aliases and control dependences to be obtained efficiently to support such aggressive
optimizations and speculation. Recovery code also needs to be generated
to guarantee the correctness of execution when mis-speculation occurs.
Compiler optimizations could also been done at
runtime when more information about the application program could be obtained, so called dynamic
optimizations. Special considerations and techniques, such as phase detection, overhead reduction
through efficient sampling and code cache management, are needed to support such dynamic schemes.
The targeted languages are C and Fortran.
Multi-threaded, multi-core processors are on the road map of all major microprocessors,
and even embedded processors vendors.
The low communication latency on a chip allows such systems to exploit finer-grained parallelism
in general-purpose (i.e. integer-intensive) applications for a better performance
and lower power consumption. However, more advanced architectural and compiler support,
such as speculation, are required to achieve the stated goals.
Superthreaded architectures allow multiple threads to be executed concurrently with
thread-level control speculation and runtime data dependence check to speed up single
program execution. The detailed execution-driven simulator for this novel architecture
can be downloaded here.
Operating system design in conjunction with middleware development is crucial to multi-core
embedded systems because of their small on-chip memories as well as low power
and real time requirements.
On the other hand, virtualization could be used to support many system requirements, but might
incur too much overhead. Virtualization "on demand" seems a way to address such issues.