Нахождение максимального значения в CUDA - PullRequest
2 голосов
/ 10 марта 2011

Я пытаюсь написать код в CUDA для поиска максимального значения для заданного набора чисел.

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

Если я заблокирую глобальную переменную с помощью atomicCAS (), будут ли потоки (1,3-10) сравниваться с использованием старого максимального значения? Как я могу преодолеть эту проблему?

Ответы [ 3 ]

10 голосов
/ 10 марта 2011

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

1 голос
/ 11 августа 2017

Ссылка на библиотеку Thrust не работает.
Если кому-то будет полезно использовать его в этом случае, вы можете найти документацию здесь:
Тяга, уменьшение экстремумов

0 голосов
/ 10 марта 2011

Если вы не пытаетесь написать сокращенное ядро, самый простой способ - просто использовать CUBLAS .

...