Есть идеи почему в CUDA отсутствует поддержка глобальной барьерной синхронизации?

Как я понимаю в CUDA нет возможности для глобальной синхронизации, только внутри блока потоков. Однако CUDA-GDB может остановить все потоки во время исполнения а потом возобновить, значит помимо мульти процессоров в архитектуре видеокарты должна быть еще какая-то составная часть отвечающая за управление исполнением всех мультипроцессоров?
Дак вот я и думаю почему разработчикам не дали прямой возможности для использования глобальных барьеров?

Forums: 

Там будут проблемы, связанные

Там будут проблемы, связанные с тем, что содержимое регистров и локальной памяти нужно куда-то девать, а потом оттуда доставать (представьте себе ситуацию, когда у вас много блоков и все блоки задачи одновременно в мультипроцессоры не помещаются)

Глобальная синхронизация и "остановка того, что сейчас работает" - это разные вещи.

Благодарю

Благодарю за ответ.
Как я понимаю написание собственых барьеров с активным ожидание ставит ограничение на число блоков потоков.
Буду тогда разбивать алгоритм на керналы :-). Вроде как издержка на запуск ядра, не считая прересылки данных, 90 микросекунд.

нет управления глобальной

нет управления глобальной синхронизацией, потому что они посчитали, что раз не возникает конфликтов обращения, то этим можно управлять автоматически и давать такую возможность разработчику ни к чему. А зачем Вам управлять этим? И разве ядра не станут в очередь на исполнение, что замедлит процесс, если на них разбить алгоритм?

Ну вообще lexa ответил в

Ну вообще lexa ответил в полне почему сейчас невозможно глобальная синхронизация.
>А зачем Вам управлять этим?
:-) ответ на этот вропрос есть в любой книге по параллельным вычислениям(например Эндрюс Г.Р. основы многопоточного, параллельного и распределенного программирования. глава 3 Блокировки и барьеры).
Ядро может иметь следующие инструкции для опираций над матрицей
И1;
И2;

каждая из них может изменяет матрицу, прочем не так что 1 поток в обоих инструкциях производит операцию над одной ячейкой мартици, а каждый поток в И1 может читать и менять соседа слева, а И2 читать и меняет соседа справа. Таким образом внутри инструкции И1 и И2 по отдедльности конфликтов обращения не будет. Однако если часть потоков завершит И1 и пристуит к И2 возникнут проблемы. В таком случае идельно было бы проставть браьер бежду И1 и И2 в классическом многопоточном программировании. Я решил проблем следующим образом: разделил И1 и И2 в разные ядра(kernals).
ПС я занимаюсь расчет временного поля по заранее известной скоросной 3Д модели (для сейсморазведки).

Блокировки по глобальной

Блокировки по глобальной памяти (атомарная запись) - в CUDA есть, это пожалуйста. Требуется Compute capability 1.1 или выше т.е. на исходной G80 не работает, на более поздних - работает (даже на 8600M работает т.е. добавили почти сразу).

Они не очень эффективны (судя по тому, что в ферми их на полпорядка-порядок обещали ускорить), но есть.

Ну в моем случае атомарная

Ну в моем случае атомарная запись не могла решить всех проблем. Так например в И2 должны производится операции только когда в матрице обновленны все значения посчитанные в И1.