Ёмкость VRAM описывает размещение данных, а bandwidth — их перенос за время. Задача может помещаться, но медленно получать данные; высокая скорость памяти не делает произвольное большое выделение памяти допустимым.
Почему это важно
Пропускную способность без определения объёма данных и времени трудно использовать. Сначала укажите, учитываются ли чтения и записи, где проходят данные и какие кеши участвуют. Затем измерьте завершённую работу на репрезентативном размере: короткий тест из кеша или CPU-таймер без ожидания может отвечать совсем на другой вопрос.
Что подтверждено
CUDA Best Practices определяет effective bandwidth через сумму полезных байтов чтения и записи, делённую на время операции. Нужно явно задать границу учёта: число обработанных элементов само по себе не сообщает, сколько байтов программа прочитала и записала.
Граница применимости: Методика Effective Bandwidth Calculation CUDA 12.6; полезные байты обращений не тождественны фактическому физическому трафику DRAM.
Теоретическую пропускную способность интерфейса памяти рассчитывают из его параметров. Это предел модели передачи, а не обещание, что конкретный kernel достигнет его на своих обращениях, зависимостях и размерах данных.
Граница применимости: CUDA 12.6 Best Practices, theoretical versus effective bandwidth; конкретные аппаратные параметры и режимы должны быть установлены отдельно.
В расчёте bandwidth нельзя смешивать биты, байты и разные масштабы единиц. GB — это 10⁹ байт, GiB — 2³⁰ байт; числитель и знаменатель сравниваемых измерений должны использовать одну явно указанную систему.
Граница применимости: CUDA Best Practices, единицы расчёта bandwidth; перевод единиц не является дополнительной производительностью устройства.
CUDA объединяет обращения потоков к global memory в транзакции по правилам архитектуры. Удобное взаимное расположение адресов помогает уменьшить число транзакций для нужных данных; разбросанные обращения могут переносить больше байтов, чем использует программа.
Граница применимости: CUDA 12.6 Best Practices, coalesced access to global memory; точные размеры и выравнивание транзакций зависят от устройства.
В повторяемом тесте часть данных может обслуживаться кешами. Effective bandwidth программы тогда не следует автоматически называть скоростью внешней DRAM: для такого вывода нужно учитывать рабочий набор, cache behavior и наблюдаемый уровень памяти.
Граница применимости: CUDA Best Practices, memory hierarchy и различие requested/actual memory traffic; тест должен указывать, какую границу он измеряет.
Bandwidth и задержка отдельного зависимого доступа — разные свойства. Много независимых обращений могут поддерживать большой суммарный поток данных, хотя одна цепочка, ожидающая каждый предыдущий результат, продолжает чувствовать задержку.
Граница применимости: Редакторское сопоставление bandwidth measurement и latency hiding в CUDA; не утверждение о фиксированной задержке конкретной GPU.
Для измерения CUDA-операции нужно фиксировать её реальное завершение, например согласованной парой CUDA events с ожиданием конечного события. Одновременно фиксируют объём данных и условия запуска; время вызова со стороны CPU без ожидания не является временем переноса или kernel.
Граница применимости: CUDA 12.6 Best Practices, timing GPU operations; измеряемая работа находится между выбранными событиями, а посторонняя работа и прогрев учитываются в описании процедуры.
Не путать
Задержка описывает время выбранной операции или доступа, bandwidth — суммарный перенос за время. GPU может скрывать часть задержки переключением на другую готовую работу, но это не превращает задержку одной зависимой цепочки в ноль.
Что проверить
- Определите, какая граница измеряется: полезные обращения, трафик DRAM или внешний transfer.
- Посчитайте байты чтения и записи для одной операции, а не только размер входа.
- Укажите GB/s либо GiB/s и используйте те же единицы во всех сравнениях.
- Проверьте, как адреса потоков объединяются в транзакции памяти.
- Зафиксируйте рабочий набор, прогрев и влияние кешей на повторные проходы.
- Измеряйте завершённую работу GPU с корректными событиями или синхронизацией.
- Повторите замер на размерах и рисунке обращений целевой задачи.
Первоисточники
CUDA C++ Best Practices Guide
NVIDIA · CUDA C++ Best Practices Guide, CUDA 12.6, страница открыта 7 сентября 2026 года
Открыт редактором 7 сентября 2026 года, заголовок документа сверен.
Открыть первоисточникCUDA C++ Programming Guide
NVIDIA · CUDA C++ Programming Guide, CUDA 12.6, страница открыта 7 сентября 2026 года
Открыт редактором 7 сентября 2026 года, заголовок документа сверен.
Открыть первоисточник