How is Emu1 Programmed?

Programmed in Cilk, a truly parallel language

  • Maps well to the hardware
  • Emu code generator coupled to LLVM front end
  • Mature and powerful debugging tools already exist
  • Shared data items are Dynamic Shared Objects (DSOs) that may be defined outside the programs that manipulate them and persist beyond program completion

Emu Cilk extends C for asynchronous parallel threading by adding a few new keywords

  • Cilk_spawn [ =] creates a new “child” thread running while the parent thread continues asynchronously
  • Cilk_sync causes the current function to wait until all children it has spawned have completed
  • Cilk_for () {} [grainsize = ] creates a group of new threads
Termination of a function always performs an implicit sync

How is the Overall Software Structured?

  • LINUX runs on the Stationary Cores (SCs)
  • A user process runs on an SC but schedules most work to Gossamer Cores (GCs)
  • Runtime executes on the SCs and handles service requests from the threadlets running on the GCs. These include memory allocation and release, I/O, exception handling, and performance monitoring
  • Threadlets return to the main() on an SC upon completion, which then returns to the OS