关于这个主题的文章不多,可能是因为这从一开始就不是一个好主意。
我想创建一个在GPU上运行的实时音频合成/处理引擎。这样做的原因是因为我还将使用在GPU上运行的物理库,并且音频输出将由物理状态决定。GPU只有音频输出,不能生成,这是真的吗?如果我读回CPU上的数据并将其输出到声卡,这是否意味着延迟的大幅增加?我希望在合成和回放之间的延迟在10到20毫秒之间。
GPU会以任何有价值的数量加速合成吗?我将让大量的合成器同时运行,我想每个合成器都可以占用它们自己的并行进程。AMD即将推出GPU音频,所以这肯定是有原因的。
发布于 2013-11-20 07:40:29
如果利用得当,在具有向量处理单元的现代CPU( x86/x64上的SSE或ARM上的NEON )上的DSP操作已经相当便宜。尤其是滤波器、卷积、FFT等,它们基本上都是基于流的操作。在某些类型的操作中,GPU也可能出类拔萃。
事实证明,软合成器中有相当多的操作不像流一样,而且,趋势是一次处理越来越小的音频块,以实现低延迟。这些都非常不适合GPU的功能。
使用GPU所涉及的努力-特别是获取数据进出-很可能远远超过您获得的任何好处。此外,便宜的个人电脑-以及平板电脑和移动设备-的能力足以满足许多数字音频应用程序AMD似乎有一个解决方案来寻找问题。可以肯定的是,现有的音乐和数字音频软件行业不会开始生产只针对有限硬件子集的软件。
发布于 2014-05-12 09:49:27
就其价值而言,我不确定这个想法是否缺乏价值。如果DarkZero关于传输时间的观察是正确的,那么将音频放到GPU上进行处理听起来不会有太多开销,即使是来自许多不同的输入通道,虽然可能有一些音频操作不太适合并行化,但许多操作是非常非常可并行化的。
例如,很明显,计算来自正弦源的128个样本的正弦值可以完全并行完成。在这种大小的块中工作将只允许大约3ms的延迟,这在大多数数字音频应用程序中是可以接受的。类似地,许多其他基本振荡器可以有效地并行化。这种振荡器的振幅调制将是微不足道的。高效的频率调制将更具挑战性,但我猜它仍然是可能的。
除了振荡器之外,FIR滤波器很容易并行化,google搜索发现了一些很有前途的研究论文(我没有费心去读这些论文),这些论文表明有合理的并行方法来实现IIR滤波器。这两种类型的滤波器是音频处理的基础,许多有用的音频操作可以理解为这种滤波器。
波形整形是数字音频中另一项令人尴尬的并行任务。
即使您不能使用任意的软件合成器并将其有效地映射到GPU,也很容易想象专门构建一个软件合成器来利用GPU的优点,并避免其缺点。一个完全依赖于我提到的组件的合成器仍然可以产生一系列奇妙的声音。
虽然marko正确地指出,现有的SIMD指令可以在CPU上进行一些并行化,但与优秀的GPU相比,它们可以同时操作的输入数量相形见绌。
简而言之,我希望你在这方面努力,并让我们知道你看到了什么样的结果!
发布于 2013-11-20 05:33:42
与GPU之间的某些MB的典型传输时间为50us。
延迟不是你的问题,但是在GPU中并行音频合成器可能是相当困难的。如果你做得不好,可能会花费更多的时间来处理数据,而不是复制数据。
如果你打算一次运行多个合成器,我建议你在一个工作组中执行每个合成器,并用可用的工作项并行合成过程。将每个合成器放在一个工作项中是不值得的,因为你不太可能有数千个合成器。
https://stackoverflow.com/questions/20080892
复制相似问题