A promising new application domain for coordination languages is programming protocols among threads in multi-core programs: coordination languages typically provide high-level constructs and abstractions that more easily compose into correct---with respect to a programmer's intentions---protocol specifications than do low-level synchronization constructs provided by conventional languages (e.g., locks, semaphores, etc.). In fact, not only do coordination languages simplify programming protocols, but their high-level constructs and abstractions also leave more room for compilers to perform novel optimizations in mapping protocol specifications to lower-level instructions. A crucial step toward adoption of coordination languages for multi-core protocol programming is the development of such compiler technology: programmers must have tools to generate efficient code for high-level protocol specifications. In this talk, I present ongoing work on compilation techniques for the graphical coordination language Reo. This is joint work with Farhad Arbab, Sean Halle, and Francesco Santini.