Я пытаюсь написать код в CUDA для поиска максимального значения
для заданного набора чисел.
Предположим, у вас есть 20 чисел, а ядро работает на 2 блоках по 5 потоков. Теперь предположим, что 10 потоков сравнивают первые 10 значений одновременно, а thread 2 находит максимальное значение, поэтому поток 2 обновляет переменную max value в глобальной памяти. Пока поток 2 обновляется, что будет с оставшимися потоками (1,3-10), которые будут сравниваться с использованием старого значения?
Если я заблокирую глобальную переменную с помощью atomicCAS (), будут ли потоки (1,3-10) сравниваться с использованием старого максимального значения? Как я могу преодолеть эту проблему?