2013-06-10 7 views
0

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

Мне было интересно, что люди думают об этом для программ CUDA, я знаю, что разработка для графических процессоров отличается от разработки для процессоров и является GPU n00b. Я бы хотел, чтобы более осведомленные люди дали мне свое мнение по этому вопросу.

Спасибо, Gabriel

+0

Если люди собираются голосовать за закрытие или вниз, не так ли? есть смысл объяснить, почему человеку, который спросил? – Grundlefleck

+0

Не могли бы вы уточнить, какой ответ вы ожидаете? У вас есть конкретный пример? – Simon

+0

Привет, это более общий вопрос, я не ожидаю предельно точного ответа, а скорее имею открытую дискуссию о плюсах, минусах, может быть, это не имеет смысла (если да, почему) и т. Д. – Gabriel

ответ

1

В программировании CUDA, неизменность также полезно, а иногда даже нужно.

По блочным сообщениям непреложность может позволить вам пропустить __syncthreads().

По сетчатой ​​связи нет никакой синхронизации синхронизации всей сетки. Вот почему в общем случае, чтобы гарантировать, что изменение одного блока видимо другим блоком, требует завершения ядра. Это связано с тем, что блоки могут планироваться таким образом, что они фактически выполняются последовательно (например, слабый графический процессор, неспособный к параллельной работе большего количества блоков).

Частичное сообщение, однако, возможно благодаря атомным операциям и __threadfence(). Вы можете реализовать, например, очереди задач, разрешая блоки для безопасного получения новых настроек. Однако такие операции должны выполняться редко, поскольку атомистика может занять много времени (хотя при глобальном кэшировании L2 она лучше, чем на более старых графических процессорах)

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