我想知道是否有人有编写利用多核处理器和/或对称多处理的 HAL AudioUnit 渲染回调的经验?
我的场景如下:
子类型的单个音频组件kAudioUnitSubType_HALOutput(连同它的渲染回调)负责附加合成n具有独立的单独变化和实时更新的幅度和相位值的正弦部分。它本身是一种相当简单的强力嵌套循环方法(每部分、每帧、每通道)。
但是,当部分数量达到一定上限时"n",处理器过载并开始产生丢包,而其他三个处理器仍处于空闲状态。
除了关于加法合成与“波表”相比“处理器昂贵”的一般讨论之外,我需要知道是否可以以正确的方式解决这个问题,这涉及在多处理器或多核机器上利用多处理?将渲染线程分解为子线程似乎不是正确的方法,因为渲染回调本身已经是一个时间约束线程,并且最终输出在延迟方面必须是样本精确的。有人在解决此类问题方面有积极的经验和有效的方法吗?
系统:10.7.x
CPU:四核i7
提前致谢,
CA
这是具有挑战性的,因为 OS X 并不是为这样的事情而设计的。有一个音频线程 - 它是操作系统中最高优先级的线程,并且无法以此优先级创建用户线程(更不用说获得系统工程师团队的支持来调整它的性能,就像音频渲染一样)线)。我并不声称了解您的算法的细节,但如果可以将其分解,以便可以在更大的样本块上并行执行某些任务(能够吸收偶尔线程饥饿的时期),那么您当然可以生成其他并行处理的高优先级线程。您需要使用某种无锁数据结构在这些线程和音频线程之间交换样本。卷积混响通常这样做是为了允许合理的延迟,同时仍然在巨大的块大小上运行。我会研究一下这些是如何实施的......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)