2013-02-10 6 views
1

Я хотел бы сначала подтвердить следующее: Простейшая транзакция глобальной памяти для общей памяти - это 32 байта, 64 или 128 байтов, но только если доступ к памяти может быть объединен. Задержки транзакций прецедента равны. Это правильно?cuda memory coalescing

Второй вопрос: если считывание данных не может быть объединено, каждый поток читает только 4 байта (это правда?) Будут ли все образы доступа к потокам последовательно выполняться?

+0

Возможно, вы захотите ознакомиться с некоторыми веб-семинарами, доступными [здесь] (https://developer.nvidia.com/gpu-computing-webinars). В частности, есть веб-семинары, которые охватывают оперативные операции с памятью и объединены для [глобальной памяти] (http://developer.download.nvidia.com/CUDA/training/cuda_webinars_GlobalMemory.pdf) (и [видео] (http: // разработчик. download.nvidia.com/CUDA/training/globalmemoryusage_june2011.mp4)) и [общая память (видео)] (http://developer.download.nvidia.com/CUDA/training/sharedmemoryusage_july2011.mp4) Операции памяти происходят с размером от 32 или 128 байт. –

ответ

1

Это зависит от архитектуры, над которой вы работаете. Однако, Ферми и Kepler у вас есть: сделки

  • памяти всегда 32byte или 128byte называемых сегменты
  • сегменты 32byte используются, когда используются только кэш L2, сегменты 128byte когда L2 + L1.
  • Если два потока одного и того же деформирования попадают в один и тот же сегмент, данные доставляются в одной трансакции
  • Если, с другой стороны, есть данные в сегменте, который вы получаете, что ни одна нить не запрашивалась - она ​​все равно считывается и вы (возможно) ширина полосы отходов
  • Целые сегменты делятся на L1 & кэша L2 и может уменьшить давление полосы пропускания, когда ваши соседи перекосы нужно в том же сегменте
  • L1 & L2 достаточно малы по сравнению с количеством нитей, они обычно поставляют для , Вот почему вы не должны ожидать, что часть данных останется в кеше долго (в отличие от программирования ЦП)
  • Вы можете отключить кеширование L1, которое может помочь, если вы переусердствовали в произвольных шаблонах доступа к памяти.

Как вы можете видеть, существует несколько переменных, которые определяют, сколько времени займет ваш доступ к памяти. Общее эмпирическое правило: чем плотнее ваш шаблон доступа, тем лучше! Стрельба или несогласованность сейчас не так дорогостоящие, как в прошлом, поэтому не беспокойтесь об этом, если только вы не делаете оптимизацию на поздней стадии.

Смежные вопросы