Pregunta

Estoy mirando la implementación de un controlador de lógica difusa basado en cualquiera de las bibliotecas PyFuzzy (Python) o FFLL (C ++).

Yo prefiero trabajar con Python, pero estoy seguro si el rendimiento será aceptable en el entorno integrado que funcionará en (ya sea ARM o x86 proc incrustado tanto ~ 64Mbs de RAM).

La principal preocupación es que los tiempos de respuesta son tan rápido como sea posible (una tasa de actualización de 5 Hz + sería ideal> Se requiere 2 Hz). El sistema estaría leyendo desde múltiples (probablemente 5) sensores de un puerto RS232 y proporcionar 2/3 salidas sobre la base de los resultados de la evaluación fuzzy.

¿Debo preocuparme de que Python será demasiado lento para esta tarea?

¿Fue útil?

Solución

En general, no debería obsesionarse con el rendimiento hasta que haya visto realmente que se convierta en un problema. Dado que no conocemos los detalles de su aplicación, no podemos decir lo que sería realizar si se aplican en Python. Y puesto que no se ha implementado todavía, tampoco vosotros.

Implementar la versión que está más cómodo, y puede poner en práctica más rápida, en primer lugar. Luego de referencia ella. Y si es demasiado lento, que tiene tres opciones que deben hacerse en orden:

  • En primer lugar, optimizar el código Python
  • Si eso no es suficiente, escribir las funciones más críticos para el rendimiento en C / C ++, y llamar a que a partir de su código Python
  • Y por último, si realmente necesitan el máximo rendimiento, es posible que tenga que volver a escribir todo el asunto en C ++. Pero entonces por lo menos usted tiene un prototipo de trabajo en Python, y usted tendrá una idea mucho más clara de cómo debe ser implementada. Vas a saber qué trampas a evitar, y que tendrá una implementación correcta ya para probar en contra y comparar los resultados a.

Otros consejos

Python es muy lento en el manejo de grandes cantidades de datos que no son cadenas. Para algunas operaciones, es posible que vea que es 1000 veces más lento que C / C ++, así que sí, se debe investigar en esto y hacer los puntos de referencia necesarios antes de realizar algoritmos de tiempo crítico en Python.

Sin embargo, puede ampliar con módulos de Python en el código C / C ++, por lo que las cosas son críticos en el tiempo rápido, sin dejar de ser capaz de utilizar Python para el código principal.

Hacer que funcione, a continuación, hacer que funcione rápido.

Si la mayor parte de su tiempo de ejecución se gasta en las bibliotecas de C, el lenguaje que se utiliza para llamar a estas bibliotecas no es importante. Qué idioma están las bibliotecas de tiempo de comer escritos en?

A partir de su descripción, la velocidad no debe ser parte de una preocupación (y se puede utilizar C, Cython, lo que usted quiere que sea más rápido), pero la memoria sería. Para entornos con 64 Mb máximo (en el que el sistema operativo y todos deben ajustarse tan bien, ¿verdad?), Creo que hay una buena probabilidad de que pitón puede no ser la herramienta adecuada para el despliegue de destino.

Si usted tiene lógica no trivial de manejar, aun así prototipo en Python, sin embargo.

En realidad nunca mide el rendimiento de los ejemplos de pyfuzzy, pero a medida que la nueva versión 0.1.0 puede leer archivos FCL como lo hace en llenar. Simplemente describa su sistema difuso en este formato, escribir algunas envolturas, y comprobar el rendimiento de ambas variantes.

Para leer FCL con pyfuzzy que necesita el tiempo de ejecución antlr pitón, pero después de leer debe ser capaz de estibar el objeto de lectura, por lo que no es necesario la sobrecarga antlr en el objetivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top