문제

Pyfuzzy (Python) 또는 FFLL (C ++) 라이브러리를 기반으로 퍼지 로직 컨트롤러를 구현하려고합니다.

나는 Python과 함께 일하는 것을 선호하지만, 임베디드 환경에서 성능이 허용되는지 확실하지 않습니다 (ARM 또는 내장 X86 Proc ~ 64MB의 RAM).

주요 관심사는 응답 시간이 가능한 한 빠르다는 것입니다 (5Hz+의 업데이트 속도가 이상적입니다.> 2Hz가 필요합니다). 이 시스템은 RS232 포트의 여러 (아마도 5) 센서에서 읽고 퍼지 평가 결과에 따라 2/3 출력을 제공합니다.

이 작업에서 파이썬이 너무 느리게 될까 걱정해야합니까?

도움이 되었습니까?

해결책

일반적으로 실제로 문제가되는 것을 볼 때까지 성능에 집착해서는 안됩니다. 우리는 귀하의 앱의 세부 사항을 알지 못하므로 Python에서 구현 된 경우 수행 방법을 말할 수 없습니다. 그리고 당신은 아직 그것을 구현하지 않았기 때문에, 당신도 할 수 없습니다.

가장 편한 버전을 구현하고 먼저 빠르게 구현할 수 있습니다. 그런 다음 벤치마킹하십시오. 그리고 만약에 너무 느립니다. 순서대로 수행 해야하는 세 가지 옵션이 있습니다.

  • 먼저 파이썬 코드를 최적화하십시오
  • 충분하지 않은 경우 C/C ++에서 가장 성능이 높은 기능을 작성하고 파이썬 코드에서 호출하십시오.
  • 그리고 마지막으로, 당신이 진짜 최고 성능이 필요하면 C ++로 모든 것을 다시 작성해야 할 수도 있습니다. 그러나 적어도 Python에서 작동하는 프로토 타입을 가질 수 있으며, 어떻게 구현되어야하는지에 대한 훨씬 명확한 아이디어를 얻을 수 있습니다. 피해야 할 함정이 무엇인지 알게되며 결과를 테스트하고 비교할 수있는 이미 올바른 구현이있을 것입니다.

다른 팁

파이썬은 많은 양의 비 스트링 데이터를 처리 할 때 매우 느립니다. 일부 작업의 경우 C/C ++보다 1000 배 더 느리다는 것을 알 수 있습니다. 그렇습니다. Python에서 시간 크리티컬 알고리즘을 만들기 전에이를 조사하고 필요한 벤치 마크를 수행해야합니다.

그러나 C/C ++ 코드의 모듈로 Python을 확장 할 수 있으므로 시간 크리티컬 한 가지가 빠르지 만 메인 코드에는 Python을 사용할 수 있습니다.

작동하게 한 다음 빨리 작동하게하십시오.

대부분의 런타임이 C 라이브러리에서 사용되는 경우 이러한 라이브러리를 호출하는 데 사용하는 언어는 중요하지 않습니다. 시간을 먹는 라이브러리는 어떤 언어로 작성됩니까?

설명에서 속도는 많은 관심사가되어서는 안됩니다 (그리고 C, Cython, 원하는 것을 더 빨리 만들 수 있음). 최대 64MB의 환경 (OS와 모든 것이 맞는 곳에 맞는 곳)의 경우, 파이썬이 대상 배포에 적합한 도구가 아닐 수도 있다고 생각합니다.

당신이 처리 할 비 사소한 논리가 있다면, 나는 여전히 파이썬으로 프로토 타입을 할 것입니다.

나는 Pyfuzzy의 예제의 성능을 실제로 측정하지 않았지만 새 버전 0.1.0은 FFLL과 마찬가지로 FCL 파일을 읽을 수 있습니다. 퍼지 시스템을이 형식으로 설명하고 래퍼를 작성하고 두 변형의 성능을 확인하십시오.

Pyfuzzy로 FCL을 읽으려면 Antlr Python 런타임이 필요하지만 읽기 후에는 읽기 객체를 피울 수 있으므로 대상의 Antlr 오버 헤드가 필요하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top