【问题标题】:Profiling and optimizing PureData patches and externals分析和优化 PureData 补丁和外部组件
【发布时间】:2016-03-15 13:12:16
【问题描述】:

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

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

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

【问题讨论】:

    标签: optimization profiling puredata


    【解决方案1】:

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

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

    祝你好运!

    【讨论】:

      【解决方案2】:

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

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

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

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

      对于信号域,典型的问题包括重新分块到小块大小 ([block~ 1]),以及计算未使用的语音(如果它们添加到信号输出中,请使用 [switch~] 将其关闭)。

      【讨论】:

        猜你喜欢
        • 2011-06-21
        • 1970-01-01
        • 2011-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-17
        • 2010-09-06
        相关资源
        最近更新 更多