Урок 8: Узкое место — compute-bound против memory-bound
Перед оптимизацией — вы спрашиваете: что на самом деле тормозит? Каждое ядро либо compute-bound (ограничено FLOPs, GPU вычисляет на полную мощность), либо memory-bound (ограничено пропускной способностью памяти, GPU ждёт данные). Оптимизировать без этого диагноза — это гадание. В этом уроке мы научи
Compute-bound — это быстрый повар, который ждёт, потому что не хватает духовок — узкое место в самой работе. Memory-bound — это простаивающие духовки, но ингредиенты, которые не поступают со склада достаточно быстро — узкое место в доставке. Каждая проблема требует своего решения.
- Compute-bound
- Ядро ограничено вычислениями (FLOPs). GPU полностью загружен; чтобы ускорить — понизьте точность или используйте лучшие ядра.
- Memory-bound
- Ядро ограничено пропускной способностью памяти. GPU ждёт данные; чтобы ускорить — слияние и меньше обращений к памяти.
- Арифметическая интенсивность
- Отношение FLOPs к количеству прочитанных/записанных байтов. Низкое → memory-bound; высокое → compute-bound.