2009-09-30 4 views
5

저는 PyFuzzy (Python) 또는 FFLL (C++) 라이브러리를 기반으로 퍼지 로직 컨트롤러를 구현하는 방법을 모색 중입니다.비용이 많이 드는 Python 성능?

저는 파이썬으로 작업하기를 원하지만 임베디드 환경에서 성능이 수용 가능한지 확신 할 수 없습니다 (ARM 또는 임베디드 x86 proc 모두 ~ 64Mb RAM).

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

파이썬이이 작업을하기에는 너무 느려야 할까?

+5

특정 플랫폼에서 간단한 프로토 타입으로 테스트하는 것이 좋습니다. –

+0

5 Hz는 장치와 사람이 상호 작용해야하는 경우 정확히 빠른 응답 시간이 아닙니다. –

답변

35

일반적으로 실제로 문제가 될 때까지 성능에 집착해서는 안됩니다. 앱의 세부 사항을 알지 못하기 때문에 Python으로 구현하면 어떻게 동작하는지 말할 수 없습니다. 아직 구현하지 않았으므로 어느 쪽도 할 수 없습니다.

가장 편한 버전을 구현하고 가장 먼저 가장 먼저 구현할 수 있습니다. 그런 다음 벤치 마크하십시오. 그리고, 당신은 순서대로 수행해야합니다 세 가지 옵션이 너무 느린가되어 경우 :

  • 첫째,이 충분하지 않으면
  • 를 파이썬 코드를 최적화, C에서 가장 성능이 중요한 기능을 쓰기/C++을 호출하여 파이썬 코드에서 호출하십시오.
  • 그리고 마지막으로 이 실제로 일 때 C++로 모든 것을 다시 작성해야 할 수도 있습니다. 하지만 적어도 파이썬에서 작동하는 프로토 타입을 사용하게되면 구현 방법을 훨씬 명확하게 알 수 있습니다. 피해야 할 함정이 무엇인지 알게 될 것이며 결과를 비교하고 비교하기 위해 이미 올바른 구현을해야합니다.
+14

+1 조숙 한 최적화는 모든 악의 뿌리입니다. –

+4

그것은 모든 악의 근원이며, 스택 오버플로가 끝난 것입니다. – FogleBird

+1

모든 점에 대해 Jalf와 동의하십시오. 또한 라이브러리 호출을 통해 대부분의 작업이 수행되는 경우 C 또는 Python에서 라이브러리를 호출하는지 여부는 중요하지 않습니다. 파이썬 및 C 라이브러리 모듈의 내장 언어 기능을 사용하면 파이썬의 성능에 주목할 수 없을 수도 있습니다. 네이티브 파이썬 또는 그와 비슷한 것으로 FFT를 작성하려고하면 끔찍한 성능을 보게 될 것입니다. Python을 사용하여 정말 높은 수준의 부분을 작성하고 Python 및 C 라이브러리가 무거운 것을 수행하도록하십시오. – steveha

11

많은 양의 문자열이 아닌 데이터를 처리하는 데 Python이 매우 느립니다. 일부 작업에서는 C/C++보다 1000 배 느리다는 것을 알 수 있습니다. 그렇기 때문에 파이썬에서 시간 결정적 알고리즘을 만들기 전에이를 조사하고 필요한 벤치 마크를 수행해야합니다.

그러나 파이썬을 C/C++ 코드로 확장하면 시간이 중요한 일들이 빠르지 만 여전히 주 코드에 파이썬을 사용할 수 있습니다.

+4

+1 기본 라인으로 파이썬으로 작성하고 필요한 경우 저속 부품을 C로 교체하려고합니다. –

5

빨리 작동하도록하십시오.

+1

중간 단계 "잊지 말고 올바르게 작동 시키십시오." – JasCav

+0

나는 나의 정의에 done을 올바르게했다. 하지만 당신 말 들려요. – KevDog

1

대부분의 런타임이 C 라이브러리에서 소비되는 경우이 라이브러리를 호출하는 데 사용하는 언어는 중요하지 않습니다. 시간을 먹는 도서관은 어떤 언어로 쓰여 있습니까?

0

귀하의 설명에서 속도가 중요하지 않아야하며 (C, cython을 사용하면 더 빨리 만들고 싶을 수 있습니다), 메모리는 그렇습니다. OS와 모든 것이 잘 맞아야하는 64Mb의 환경에서는 파이썬이 목표 배포에 적합한 도구가 아닐 수도 있습니다.

당신이 다루기 힘든 논리를 가지고 있다면, 나는 여전히 파이썬으로 프로토 타입을 만들 것이다.

0

필자는 pyfuzzy의 예제 성능을 실제로 측정하지 못했지만 새로운 버전 0.1.0에서는 FFLL과 마찬가지로 FCL 파일을 읽을 수 있습니다. 퍼지 시스템을이 형식으로 설명하고, 래퍼를 작성하고, 두 변종의 성능을 확인하십시오.

pyfuzzy로 FCL을 읽으려면 antlr python 런타임이 필요하지만 읽기 후에는 읽은 객체를 피클 할 수 있어야하므로 대상에 antlr 오버 헤드가 필요하지 않습니다.

관련 문제