Использование атомарных арифметических операций в многопроцессорном или многопроцессорном CUDA Unified Memory
Я пытаюсь реализовать программу CUDA, использующую унифицированную память. У меня есть два объединенных массива, и иногда их нужно обновлять атомарно.
В приведенном ниже вопросе есть ответ для среды с одним графическим процессором, но я не уверен, как расширить ответ, указанный в вопросе, для адаптации к платформам с несколькими графическими процессорами.
Вопрос: пример cuda atomicAdd не дает правильного вывода
У меня есть 4 Tesla K20, если вам нужна эта информация, и все они обновляют часть тех массивов, которые должны выполняться атомарно.
Буду признателен за любую помощь / рекомендации.
1 ответ
Решение
Чтобы обобщить комментарии в ответ:
- Вы можете выполнить такую атомарную операцию в адресном пространстве, используя
atomicAdd_system
- Однако вы можете сделать это только на устройствах с вычислительной возможностью 6.x или новее (7.2 или новее при использовании Tegra).
- в частности, это означает, что вам необходимо выполнить компиляцию для правильных вычислительных возможностей, таких как
-arch=sm_60
или похожие - В вопросе вы заявляете, что используете карты Telsa K20 - это вычислительные возможности 3.5 и не поддерживают какие-либо элементарные функции всей системы.
Как всегда, эта информация аккуратно резюмирована в соответствующем разделе Руководства по программированию.