The use of WAM as a target language for compilation of Prolog, and the direct execution of WAM code (using an emulator) can lead to interesting performance results--but still leaving a margin of difference w.r.t. the performance of languages based on different programming paradigms (e.g., C). This is mainly due to the existence of an intermediate interpretation step (execution of WAM code), which translates to overhead during execution.
Two main approaches have been followed trying to tackle this issue: