我一直在研究用Pd构建的合成器并在BeagleBone Black上运行它。为此,我写了一些抽象和两个外部。现在合成器是单声道的,启动时使用100%的CPU,导致许多可听到的咔嗒声和瑕疵。大约5秒后,它“稳定”到75%的CPU,延迟和声音非常好。
现在,我需要制作合成复音,因此必须释放CPU时间以获得额外的声音。为此,我正在考虑使用调试符号构建Pd并通过诸如Callgrind / KCacheGrind之类的分析器运行我的补丁,以试图找出大多数CPU消耗发生的位置并围绕它进行优化。
任何人都可以分享用于优化Pd补丁和外部的任何技术或技巧吗?对于这类任务,是否有针对Pd的特定工具?为什么我的方法有效还是无效?
答案 0 :(得分:1)
你的补丁似乎很难执行。这意味着您在运行合成器时随时都要进行大量计算。它是什么样的合成器?
通常一种降低计算成本的方法,就是先修复价值,先计算一次,一次性计算。 (例如,如果你总是使用相同的值,那么在数组上读取它而不是随时计算它可能会很有趣)。 您可以告诉我们有关您的计划架构的更多信息,也许我们可以更具体地帮助您。
祝你好运!答案 1 :(得分:0)
使用完整的剖析器工具当然是一种选择。 主要的缺点是,它们会大大减慢系统速度,因此您可能需要一个完全自动化的测试用例(而不是依赖于环境的实时性)。
对于补丁内分析,最佳Pd提供的是[realtime]
对象,您可以使用它来测量所需的时间(挂钟时间,而不是逻辑时间< / em>应该为零)在消息域中执行特定操作。但是,这不适用于 signal 对象!!
以下是一个示例,用于分析子树的完整执行(在[pd complicated]
子补丁中)和一些选择对象(在[pd complex]
子补丁中)
根据您的描述,您的补丁似乎在初始化期间花费了大量时间(最大化CPU,因此需要一段时间才能降至100%以下),这很可能表明消息域中存在问题。
对于信号域,典型问题涉及重新锁定到小块大小([block~ 1]
),并计算未使用的语音(如果它们添加到信号输出,则用[switch~]
关闭它们。)< / p>