1

我一直在研究用 Pd 构建的合成器,并在BeagleBone Black上运行它。为此,我编写了许多抽象和两个外部。现在合成器是单声道的,并且在启动时使用 100% 的 CPU,导致许多可听见的咔嗒声和伪像。大约 5 秒后,它“稳定”到 75% 的 CPU 并且延迟和声音相当不错。

现在,我需要使合成器复音,因此必须为其他声音释放 CPU 时间。为此,我正在考虑使用调试符号构建 Pd 并通过诸如 Callgrind/KCacheGrind 之类的分析器运行我的补丁,以尝试找出大多数 CPU 消耗发生在哪里并围绕它进行优化。

任何人都可以分享任何用于优化 Pd 补丁和外部的技术或技巧吗?是否有任何专门针对 Pd 的工具来完成此类任务?为什么我的方法行得通或行不通?

4

2 回答 2

1

您的补丁执行起来似乎很繁重。这意味着您在运行合成器的任何时候都在进行大量计算。它是什么样的合成器?

通常是降低计算成本的一种方法,它是固定值,首先计算,一劳永逸。(例如,如果您总是使用相同的值,那么在数组上读取它而不是随时计算它可能会很有趣)。您可以告诉我们更多关于您的程序架构的信息,也许我们将能够更具体地为您提供帮助。

祝你好运 !

于 2016-11-19T11:18:39.400 回答
0

使用完整的分析器工具当然是一种选择。主要的缺点是,它们会大大降低系统速度,因此您可能需要一个完全自动化的测试用例(而不是依赖于环境的实时性)。

至于补丁内分析,最好的 Pd 提供的[realtime]对象是您可以用来测量在消息域中执行特定操作所需的时间(挂钟时间,而不是应该为零的逻辑时间)的对象。但是,这不适用于信号对象!

这是一个分析子树(在子[pd complicated]补丁内)和一些选择对象(在子[pd complex]补丁内)的完整执行的示例

分析补丁

根据您的描述,您的补丁似乎在初始化期间花费了大量时间(最大化 CPU,因此需要一段时间才能降至 100% 以下),这很可能表明消息域中存在问题。

至于信号域,典型的问题包括重新分块到小块大小[block~ 1][switch~]

于 2016-03-17T21:22:06.610 回答