CUDA: большие проблемы в темах - PullRequest
1 голос
/ 14 апреля 2011

Почти весь пример кода CUDA описывает выполнение почти атомарных операций с большими наборами данных.Какие практические ограничения связаны с размером проблемы, которую может решить каждый поток?

Например, у меня есть еще один вопрос , открытый в минуту, который включает решение матрицы для каждого потока.Это слишком большая вещь, чтобы помещать ее в каждый поток?

Ответы [ 2 ]

3 голосов
/ 14 апреля 2011

CUDA - это модель программирования , параллельная данным , для эффективной архитектуры SIMD, поэтому она не такая гибкая, как универсальная многопоточная или MIMD-архитектура.Конечно, ядра могут быть намного более сложными, чем простые арифметические операции.

В своей собственной работе я часто использую CUDA для решения уравнений в частных производных (то есть методов конечных элементов, конечных разностей и конечных объемов), в которых каждый поток обрабатывает ячейку или элемент из дискретного континуума.При таком расчете существует множество FLOP на поток на ячейку / элемент.

Ключевая область, о которой следует помнить, - дивергенция ветвей.Поскольку это внутренняя архитектура SIMD, код с большим количеством ветвлений в пределах потока (который по сути является шириной SIMD) будет страдать от снижения производительности.Но расхождение ветвей и сложность кода не обязательно должны быть синонимами, вы можете написать очень «ветвистый» и «зацикленный» код, который будет работать хорошо, если потоки в пределах любой данной деформации не слишком часто расходятся.В тяжелых алгоритмах FLOP и IOP это обычно не так сложно достичь.

1 голос
/ 16 апреля 2011

Я просто хочу повторить слова и сказать, что нет реального ограничения на «размер» ядра в количестве операций.Пока вычисления параллельны, CUDA будет эффективен!

Что касается практических соображений, я бы просто добавил несколько небольших заметок

  • долго работающие ядра могут зависеть в зависимостиОС (или при профилировании с cudaProf).Возможно, вам придется где-то изменить настройку, чтобы увеличить максимальное время выполнения ядра.
  • долго работающие ядра в системах без выделенного gpu могут заморозить отображение (прерывая пользовательский интерфейс).
  • деформации выполняются асинхронно - одна деформация может получить доступ к памяти, а другая выполняет арифметику для эффективного использования тактовых циклов.долго работающие ядра могут выиграть от внимания к этому виду оптимизации.я не совсем уверен в этом последнем.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...