https://hgpu.org/?p=3151
Ocelot: a dynamic optimization framework for bulk-synchronous applications in heterogeneous systems