Использование атомарных арифметических операций в многопроцессорном или многопроцессорном CUDA Unified Memory

Я пытаюсь реализовать программу CUDA, использующую унифицированную память. У меня есть два объединенных массива, и иногда их нужно обновлять атомарно.

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

Вопрос: пример cuda atomicAdd не дает правильного вывода

У меня есть 4 Tesla K20, если вам нужна эта информация, и все они обновляют часть тех массивов, которые должны выполняться атомарно.

Буду признателен за любую помощь / рекомендации.

1 ответ

Решение

Чтобы обобщить комментарии в ответ:

  • Вы можете выполнить такую ​​атомарную операцию в адресном пространстве, используя atomicAdd_system
  • Однако вы можете сделать это только на устройствах с вычислительной возможностью 6.x или новее (7.2 или новее при использовании Tegra).
  • в частности, это означает, что вам необходимо выполнить компиляцию для правильных вычислительных возможностей, таких как -arch=sm_60 или похожие
  • В вопросе вы заявляете, что используете карты Telsa K20 - это вычислительные возможности 3.5 и не поддерживают какие-либо элементарные функции всей системы.

Как всегда, эта информация аккуратно резюмирована в соответствующем разделе Руководства по программированию.

Другие вопросы по тегам