我正在考虑实现基于 PyFuzzy (Python) 或 FFLL (C++) 库的模糊逻辑控制器。
我更喜欢使用 python,但不确定在嵌入式环境中性能是否可以接受(ARM 或嵌入式 x86 proc 都 ~64Mbs 的 RAM)。
主要问题是响应时间尽可能快(需要 5hz+ 的更新率是理想的 >2Hz)。该系统将从 RS232 端口的多个(可能 5 个)传感器读取数据,并根据模糊评估的结果提供 2/3 输出。
我是否应该担心 Python 对于这项任务来说太慢了?
我正在考虑实现基于 PyFuzzy (Python) 或 FFLL (C++) 库的模糊逻辑控制器。
我更喜欢使用 python,但不确定在嵌入式环境中性能是否可以接受(ARM 或嵌入式 x86 proc 都 ~64Mbs 的 RAM)。
主要问题是响应时间尽可能快(需要 5hz+ 的更新率是理想的 >2Hz)。该系统将从 RS232 端口的多个(可能 5 个)传感器读取数据,并根据模糊评估的结果提供 2/3 输出。
我是否应该担心 Python 对于这项任务来说太慢了?
一般来说,在你真正看到它成为一个问题之前,你不应该沉迷于性能。由于我们不知道您的应用程序的详细信息,因此我们无法说明如果用 Python 实现它会如何执行。既然你还没有实现它,你也不能。
首先实施您最熟悉并且可以最快实施的版本。然后对其进行基准测试。如果它太慢,你有三个选项应该按顺序完成:
Python 在处理大量非字符串数据方面非常慢。对于某些操作,您可能会看到它比 C/C++ 慢 1000 倍,所以是的,在使用 Python 制作时间关键型算法之前,您应该对此进行调查并进行必要的基准测试。
但是,您可以使用 C/C++ 代码中的模块扩展 python,以便时间关键的事情很快,同时仍然能够将 python 用于主要代码。
让它工作,然后让它快速工作。
如果您的大部分运行时都花在 C 库中,那么您用来调用这些库的语言并不重要。你的吃时间的图书馆是用什么语言写的?
根据您的描述,速度应该不是什么大问题(您可以使用 C、cython 以及任何您想要让它更快的东西),但内存会是。对于最大 64 Mb 的环境(操作系统和所有环境也应该适合,对吗?),我认为 python 很有可能不是目标部署的正确工具。
不过,如果你有不平凡的逻辑要处理,我仍然会在 python 中进行原型设计。
我从未真正测量过 pyfuzzy 示例的性能,但由于新版本 0.1.0 可以像 FFLL 一样读取 FCL 文件。只需以这种格式描述您的模糊系统,编写一些包装器,并检查两种变体的性能。
要使用 pyfuzzy 读取 FCL,您需要 antlr python 运行时,但在读取后您应该能够腌制读取的对象,因此您不需要目标上的 antlr 开销。