OpenCL GPU Audio

Там не так много на эту тему, возможно, потому, что это не очень хорошая идея в первую очередь.

Я хочу создать механизм синтеза/обработки звука в реальном времени, который запускается на графическом процессоре. Причина этого в том, что я также буду использовать библиотеку физики, которая будет работать на графическом процессоре, а аудиовыход будет определяться физическим состоянием. Правда ли, что GPU несет только аудиовыход и не может его генерировать? Это означало бы значительное увеличение латентности, если бы я должен был прочитать данные на CPU и вывести их на звуковую карту? Я ищу задержку между 10 и 20 мс с точки зрения времени между синтезом и воспроизведением.

Будет ли GPU ускорять синтез любой ценой? Я собираюсь запустить сразу несколько синтезаторов, каждый из которых, я думаю, мог бы выполнить свой собственный параллельный процесс. AMD выпускает видео с GPU, поэтому для этого должно быть что-то.

Ответ 1

Операции DSP на современных процессорах с блоками векторной обработки (SSE на x86/x64 или NEON на ARM) уже довольно дешевы, если их использовать должным образом. Это особенно касается фильтров, сверток, БПФ и т.д., Которые в основном основаны на потоках. Существует тип операций, в которых может также превосходить графический процессор.

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

Усилия, связанные с использованием графического процессора - в частности, при вводе и выводе данных, скорее всего, значительно превысят любую выгоду. Кроме того, возможности недорогих персональных компьютеров, а также планшеты и мобильные устройства - более чем достаточно для многих цифровых аудио-приложений, у AMD, похоже, есть решение, ищущее проблему. Разумеется, существующая индустрия музыкального и цифрового аудиопрограмм не собирается запускать программное обеспечение, предназначенное только для ограниченного подмножества оборудования.

Ответ 2

Для чего это стоит, я не уверен, что эта идея не имеет заслуг. Если наблюдение DarkZero относительно времени передачи правильное, звучит не так, как было бы слишком много накладных расходов на получение звука на GPU для обработки, даже из многих разных входных каналов, и, хотя есть, вероятно, аудио-операции, которые не очень подходят для распараллеливания, многие из них очень ОЧЕНЬ параллелизуемы.

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

В дополнение к осцилляторам фильтры FIR просты для распараллеливания, а поисковый поиск Google показал некоторые перспективные исследовательские документы (которые я не затруднял для чтения), которые предполагают наличие разумных параллельных подходов к реализации фильтра IIR, Эти два типа фильтров имеют основополагающее значение для обработки звука, и многие полезные звуковые операции можно понимать как такие фильтры.

Волновая обработка - еще одна задача в цифровом аудио, которая неловко параллельна.

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

В то время как марко верно, чтобы указать, что существующие SIMD-инструкции могут выполнять некоторую распараллеливание на CPU, количество входов, с которыми они могут работать одновременно, бледнеет по сравнению с хорошим графическим процессором.

Короче говоря, я надеюсь, что вы поработаете над этим и сообщите нам, какие результаты вы видите!

Ответ 3

Типичное время передачи для некоторого MB в/из GPU принимает 50us.

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

Если вы собираетесь запускать сразу несколько синтезаторов, я бы рекомендовал вам выполнить каждый синтезатор в рабочей группе и распараллелить процесс синтеза с доступными рабочими элементами. Не стоит иметь каждый синтезатор в одном рабочем элементе, так как маловероятно, что у вас будет тысяча.

Ответ 5

Вы можете проверить проект NESS, который связан с синтезом физического моделирования. Они используют графические процессоры для аудио-рендеринга, потому что этот процесс включает в себя симуляцию акустического 3D-пространства для любого звука и вычисления того, что происходит с этим звуком в виртуальном трехмерном пространстве (и, по-видимому, графические процессоры хорошо работают с такими данными). Обратите внимание, что это не синтез реального времени, потому что он требует обработки. http://www.ness-music.eu/overview/large-scale-synthesis-on-gpus