Split-RPC
This recipe provides a split architecture for the popular remote procedure call (RPC) framework, gRPC. The basic idea is to partition RPC applications into two communicating components: one dedicated to user-implemented business logic, and one dedicated to RPC infrastructure processing. Once the RPC application is split, the business logic component can run on a host CPU and the infrastructure component can be run on an IPU. The recipe includes a plugin for the gRPC compiler that automatically generates the partitioned application, a novel algorithm for efficient data copies, called linearization, and a high-performance data structure that allows concurrent reads and writes from several processes.

The code is organized into three major components:
- The compliler plugin
- A library used by the code generated by the plugin
- A library that provides communication between the two processes