2017-02-09 22 views
0

Я немного смущен тем, что данные о доступе к памяти, выданные warp, зависят от данных FP64.CUDA коалесцирует доступ к данным FP64

  • Основание всегда состоит из 32 нитей независимо от того, выполняют ли эти потоки вычисления FP32 или FP64. Правильно?
  • Я читал, что каждый раз, когда нить в warp пытается читать/записывать глобальную память, warp обращается к 128 байтам (32 одноточечных поплавков). Правильно?
  • Итак, если все нити в warp считывают из памяти разные одиночные прецизионные поплавки (всего 128 байт), но в коалесцированном режиме warp выдает транзакцию с одной памятью. Правильно?

Вот теперь мой вопрос:

  • Что делать, если все нити в варп пытаются получить доступ к различной двойной точности поплавки (в общей сложности 256 байт) в слившихся образом? Будет ли warp выдавать две транзакции памяти (128 + 128)?

PS: Я в основном заинтересован в Compute Capability 2.0+ архитектуры

ответ

1

Основовязальная всегда состоит из 32 нитей, независимо от того, эти нити делают расчеты FP32 или FP64. Правильно?

Правильного

Я прочитал, что каждый раз, когда нить в перекосе пытается чтения/записи глобальной памяти , перекос доступ к 128 байтам (32 одинарная точность поплавков). Правильно?

Не совсем. Также размеры транзакций 32 байта.

Так что, если все нити в перекоса читают различную одинарной точности поплавки (в общей сложности 128 байт) из памяти, но в слившихся образом, перекос будет выдавать одну транзакцию памяти. Правильно?

Правильная

Что делать, если все нити в варп пытаются получить доступ к различной двойной точности поплавки (в общей сложности 256 байт) в слившихся образом? Будет ли warp выдавать две транзакции памяти (128 + 128)?

Да. Компилятор будет генерировать 64-разрядную команду загрузки, которая будет обслуживаться двумя 128-байтовыми транзакциями на каждый бит, когда возможен доступ к объединенной памяти.

+0

Спасибо за ваш ответ, мой друг. Я готов принять его, но я также был бы признателен, если бы вы могли прокомментировать 32-байтные транзакции. При каких обстоятельствах они происходят? Заранее спасибо. – AstrOne

+0

@AstrOne: Если каждый поток в warp должен загружать 8 или 16 бит типов, их можно обслуживать с помощью 32 байтовых транзакций. Вы также можете заставить компилятор испускать 32 байтовые транзакции, если хотите. – talonmies