Руководство по программированию CUDA утверждает, что
__ syncthreads () разрешено в условном коде, но только если
условно оценивает одинаково
по всему блоку потока,
в противном случае выполнение кода вероятно
повесить или изготовить непреднамеренную сторону
эффекты.
Итак, если мне нужно синхронизировать потоки с условным ветвлением в блоке, некоторые из которых могут или не могут брать ветвь, включающую вызов __syncthreads()
, означает ли это, что он не будет работать?
Я представляю, что могут быть всевозможные случаи, когда вам может понадобиться это сделать; например, если у вас есть бинарная маска и вам нужно условно применить определенную операцию к пикселям. Скажем, if (mask(x, y) != 0)
, затем выполните код, который включает __syncthreads()
, иначе ничего не делайте. Как это будет сделано?