Комментировать

Если вопрос был о

Если вопрос был о синхронизации нитей в варпе, то тут не уместно говорить, что запросы от полуварпа(или варпа в cc 2.x) объединяются.
Все нити варпа выполняют одну и ту же инструкцию - это означает, что для того, чтобы запрос к памяти от определённой инструкции ядра, выполнялся одновременно во всём варпе, его нити не нужно синхронизировать(вообще нити в варпе не нужно синхронизировать).

Если вопрос про coalseced, то нужно просто представить, что одна и та же инструкция ядра, в одном и том же полуварпе(или варпе), на одной итерации может делать Coalesced Access, а на другой не Coalesced, и всё это в рамках одного запуска ядра. То есть Coalesced или не Coalesced, решается уже в момент выполнения. Для меня такой подход очевиден. Если бы компилятор решал что Coalesced, а что нет, то думаю это было бы написано жирными буквами во многих местах.
Если же просто очевидности не достаточно, то вот цитата из NVIDIA CUDA C Programming Guide:
"When a warp executes an instruction that accesses global memory, it coalesces the memory accesses of the threads within the warp into one or more of these memory transactions depending on the size of the word accessed by each thread and the distribution of the memory addresses across the threads."