# Cooperative Kernels: GPU Multitasking for Blocking Algorithms

**Authors:** T. Sorensen, H. Evrard, A. F. Donaldson  
**Venue:** FSE, 2017 (Distinguished Paper Award)  
**PDF:** [fse2017.pdf](../fse2017.pdf) | **Full Markdown:** [fse2017.md](../markdown/fse2017.md)

This paper proposes cooperative kernels, an extension to the GPU programming model that enables fair scheduling of workgroups and supports multitasking for blocking algorithms.

## Key Contributions

- **Cooperative kernel model**: Workgroups are fairly scheduled and can cooperate with the scheduler through language extensions, enabling blocking algorithms on GPUs.
- **GPU multitasking**: Kernels can flexibly resize to share the GPU with other workloads (e.g., graphics rendering).
- **OpenCL 2.0 prototype**: Implemented and evaluated with blocking GPU applications ported to cooperative kernels.

## Summary

Irregular data-parallel algorithms increasingly target GPUs but require blocking synchronization that demands fair scheduling. GPU programming models don't mandate fair scheduling. Cooperative kernels provide a principled solution through a small set of language extensions enabling kernel-scheduler cooperation, supporting both fair scheduling and GPU multitasking.
