Блоки загрузки / хранения (LD/ST) и блоки специальных функций (SFU) для архитектуры Kepler

В техническом описании архитектуры Kepler NVIDIA утверждает, что 32 Специальные функциональные блоки (SFU) и 32 Загрузите / Сохраните Единицы (LD/ST) на SMX.

SFU предназначены для "быстрых приближенных трансцендентных операций". К сожалению, я не понимаю, что это должно означать. С другой стороны, в специальных триггерных функциях CUDA Double Precision для SFU говорится, что они работают только с одинарной точностью. Это все еще правильно на K20Xm?

Устройства LD / ST предназначены для хранения и загрузки. Требуется ли загрузка / запись памяти для выполнения одного из тезисов? И они также используются в качестве единой основы? Другими словами, может ли быть только один перекос, который в настоящее время пишет или читает?

Ура, Энди

2 ответа

Решение

СФУ предназначены для "быстрых приближенных трансцендентных операций"

SFU вычисляют такие функции, как __cosf(), __expf() и т.п.

С другой стороны, здесь сказано, что они работают только с одинарной точностью, верно ли это для K20Xm?

Согласно недавнему Руководству по программированию CUDA C, раздел G.5.1, они все еще работают только с одинарной точностью.

Это имеет некоторый смысл, поскольку, если вам нужна двойная точность, маловероятно, что вы использовали бы неточные математические функции. Вы можете обратиться к этому ответу за предложениями по арифметической оптимизации двойной точности.

Детали реализации операций двойной точности можно найти в /usr/local/cuda-5.5/include/math_functions_dbl_ptx3.h (или везде, где установлен ваш CUDA Toolkit). Например, для sin а также cos он использует сокращение аргумента Пейна-Ханека с последующим расширением Тейлора (до порядка 14).

Для расчетов с двойной точностью SFU, кажется, используются только в __internal_fast_rcp а также __internal_fast_rsqrtкоторые в свою очередь используются в acos, log, cosh и несколько других функций (см. math_functions_dbl_ptx3.h). Так что большую часть времени они останавливаются, как блоки LD/ST, если нет текущих транзакций памяти.

Требуется ли загрузка / запись памяти для прохождения одного из тезисов?

Да, каждый доступ к глобальной памяти.

И они также используются в качестве единой основы? Другими словами, может ли быть только один перекос, который в настоящее время пишет или читает?

Количество единиц ограничивает только количество инструкций, выдаваемых в каждом цикле. Т.е. в каждом тактовом цикле может быть выдано 32 инструкции чтения, и 32 результата могут быть возвращены.

Одна инструкция может считывать / записывать до 128 байтов, поэтому, если каждый поток в деформации читает 4 байта и они объединяются, тогда для всего деформирования потребуется одна инструкция загрузки / сохранения. Если доступ не коалесцирован, то должно быть выдано больше инструкций.

Кроме того, модули передаются по конвейеру, что означает, что несколько запросов на чтение / сохранение могут выполняться одновременно одним модулем.

Не принимайте это как ответ - мы надеемся, что кто-нибудь придет и ответит на ваш вопрос о трансцендентных операциях двойной точности. Я просто хотел затронуть вторую часть вашего вопроса о блоках LD/ST.

Устройства LD/ST предназначены для хранения и загрузки.

Да.

Требуется ли загрузка / запись памяти для прохождения одного из тезисов?

Да.

И они также используются в качестве единой основы?

Да, все активные потоки в деформации всегда выдают одинаковые инструкции в одном и том же тактовом цикле. Если эта инструкция является загрузкой или хранилищем, она передается единицам LD/ST. Если поток неактивен (из-за циклического или условного выполнения), соответствующий модуль LT/ST остается бездействующим.

Другими словами, может ли быть только один перекос, который в настоящее время пишет или читает?

Нет, блоки LD/ST могут принимать одну операцию загрузки или сохранения за такт, хотя задержка памяти может составлять несколько сотен циклов. Таким образом, когда одна деформация выдает команду загрузки, модули LD/ST начнут работать над получением этих данных. Инструкции в основе, которые зависят от данных, становятся недопустимыми до тех пор, пока данные не поступят. В следующем тактовом цикле деформация все еще может выполнять другие независимые инструкции (параллелизм на уровне команд). Даже другие, независимые инструкции загрузки или хранения. Другая деформация, которая может быть запланирована, может также в следующем цикле синхронизации выпустить другую инструкцию загрузки и сама перейти в состояние ожидания (параллелизм на уровне потока). В этот момент устройства LD/ST отслеживают два ожидающих результата. Из-за кэширования и объединения возможно, что данные для второй деформации поступают первыми. Когда поступают данные для деформации, они присваиваются регистрам, указанным в инструкции, и эта конкретная зависимость данных затем разрешается.

Другие вопросы по тегам