Intel® ArBB Two-Phase Compilation

Intel ArBB runtime-dynamic (JIT) compilation process

Intel ArBB programs are provided as functions, either general functions or element-wise operating "mapped" functions (kernels). The statements building the ArBB "code" are regular C++ statements. These statements are even compiled the "regular" way using one of the supported ISO-compliant C++ compilers.

To explain the runtime-dynamic execution one need to know the two different execution modes of Intel ArBB:

  • ArBB is in immediate execution mode (ARBB_OPT_LEVEL=O0), then the expected behavior is taking immediate effect
  • ArBB is in non-immediate mode, i.e. producing optimized code specific for the execution target (ARBB_OPT_LEVEL=O2|O3)

In the latter shown case runtime-dynamic execution is involved. ArBB statements are "recorded", or executed "as-if". The statements contribute to an intermediate representation (IR) which is picked-up by the just-in-time (JIT) compiler. JIT compilation is usually "triggered" by using the call() operator/function. This is the default way to get your ArBB code running is using call() which does the following in one step:

  • C++ ArBB statements are executed "as-if" and recorded into an intermediate representation (IR)
  • Just-in-time (JIT) compilation is triggered to generate optimized target-specific code
  • Optimized code is executed

The figure below shows the ArBB execution model as a work flow. Moreover, the mechanism shows how the execution is intercepted in order to inspect the state of an ArBB program using a standard debugger (immediate execution mode using ARBB_OPT_LEVEL=O0).

workflow.png

For more complete information about compiler optimizations, see our Optimization Notice.