Другое

gr-clenabled: OpenCL GPU Blocks for GNU Radio

Вчера Майк (ghostop14) отправил нам по электронной почте документ, который даёт обзор его экспериментов по переписыванию нескольких блоков GNU Radio с целью использования ускорения на GPU через OpenCL. Высококачественные дискретные графические GPU на ПК — очень мощные параллельные процессоры, которые могут существенно быстрее выполнять вычисления, чем процессор общего назначения (CPU). Но только алгоритмы, которые можно распараллелить, стоит запускать на GPU, и существует дополнительная задержка на передачу данных между CPU и GPU. Это означает, что не все алгоритмы будут работать быстрее на GPU. Ускорение на GPU может стать ключом к тому, чтобы очень широкополосные SDRs могли работать на ПК.

В экспериментах Майк обнаружил, что только некоторые блоки GNU Radio можно ускорить на GPU. Многие блоки работали медленнее на GPU из-за дополнительных задержек. В конце концов блоки, которые он тестировал и которые действительно показывали ускорение, или ускорение в смесь, были следующими:

  1. Log10
  2. Complex To Arg
  3. Complex To Mag/Phase
  4. Пользовательский помощник по отношению сигнал/шум (Signal To Noise Ratio Helper), который выполняет последовательность деление -> Log10 -> Abs
  5. Mag/Phase To Complex (OpenCL дал лучшие результаты только для блоков выше 8K на 1070, и 18K для 970 и 1000M)
  6. Источник сигнала (OpenCL превосходил CPU только для 1070 при блоках 8K и выше)
  7. Квадратурная демодуляция (OpenCL лучше работал только для блоков выше 10K)

Проект называется gr-clenabled, и открытый исходный код gr-clenabled доступен на GitHub. Документ, описывающий полноценное исследование реализации и производительности блоков GNU Radio с использованием GPU, можно найти здесь. Ниже приведён фрагмент из обзора Майка (если вам нужна дополнительная информация, мы предлагаем сначала прочитать обзор, а затем полный исследовательский документ):

Примерно 4 месяца назад я решил взяться за проект, который давно хотел существовать. Учитывая весь код, доступный для использования графических карт в обработке сигналов, почему не было множества блоков с ускорением на GPU для GNURadio? По-настоящему задействуя свою новую видеокарту (NVIDIA GTX 1070), не мог ли я пропускать 80 MSPS или выше через, если бы у меня было оборудование, способное это обеспечить? (Я знаю скорости шины USB 2.0, некоторые декодеры требуют аппаратного ускорения для скорости и т. д., но SDR-энтузиаст все равно может мечтать)

Моя идея казалась достаточно простой. Почему бы не разработать версии OpenCL самых распространённых блоков, используемых в цифровой обработке данных? Я могу не достичь своей пропускной цели, но уверен, что смогу действительно ускорить мои потоковые графы. И раз уж могу придумать всё, что угодно до того, как реально начать, почему бы не сделать это ещё более масштабируемым? Почему бы не иметь возможность полноценно использовать несколько графических карт в системе, назначая разные блоки на выполнение на разных картах?

Я знаю, это много вопросов, но звучит отлично, если бы такое существовало, верно? Но я не осознавал масштабы того, чем собираюсь открыть.

Моей первой задачей было изучение OpenCL и действительно углубление в глубины кода GNURadio.

Пропускная способность блока log10 GNU Radio на различных графических процессорах при разных размерах блоков.
Пропускная способность блока log10 GNU Radio на различных GPU при разных размерах блоков.

Источник:

Подбираете SDR под задачу?

Опишите, что и где хотите принимать, — подскажем подходящие модели и где их купить.

Похожие материалы

Весь блог