2009-09-30 6 views
5

私は、PyFuzzy(Python)またはFFLL(C++)ライブラリに基づいてファジー論理コントローラを実装する方法を検討しています。費用がかかるPythonのパフォーマンス?

私はPythonで作業するのが好きですが、パフォーマンスがコンパイル環境で受け入れられるかどうかは確かです(ARMまたは組み込みx86プロセッサのどちらでも〜64MbのRAMで動作します)。

主な懸念事項は、応答時間ができるだけ速いことです(更新レートは5hz +が理想的です> 2Hzが必要です)。システムは、RS232ポートから複数(おそらく5つ)のセンサーから読み取り、ファジィ評価の結果に基づいて2/3の出力を提供します。

このタスクではPythonが遅すぎるのではないかと心配すべきでしょうか?

+5

特定のプラットフォームで簡単なプロトタイプを使用してテストすることをお勧めします。 –

+0

5 Hzは、デバイスと人為的なやりとりが必要な場合、正確には速い応答時間ではありません。 –

答えて

35

実際には問題が発生するまで、パフォーマンスに戸惑うべきではありません。あなたのアプリの詳細はわからないので、Pythonで実装されているとどのように動作するのかはわかりません。まだ実装していないので、どちらもできません。

最も快適なバージョンを実装し、最も速く、最初に実装することができます。そしてそれをベンチマークします。そして、それはあなたが順番に行われるべき3つのオプション持って、遅すぎる場合:

  • まず、/それが十分でない場合は、Cの中で最もパフォーマンスが重要な関数を作成
  • あなたのPythonコードを最適化C++でPythonコードから呼び出す
  • 最後に、の場合、実際にには最高のパフォーマンスが必要な場合は、C++ですべてを書き直す必要があります。しかし、少なくともあなたはPythonで動作するプロトタイプを持っています。そして、それをどのように実装すべきかについてもっと明確な考え方があります。あなたは落とし穴を避けるべきであることを知っているでしょうし、結果をテストしたり比較したりするためには、すでに正しく実装されています。
+14

+1早すぎる最適化はすべての悪の根源です。 –

+4

それはすべての悪の根源であり、スタックオーバーフローのすべてです。 – FogleBird

+1

すべての点でjalfと同意してください。また、多くの作業がライブラリ呼び出しによって行われる場合でも、ライブラリをCかPythonから呼び出すかどうかは重要ではありません。 PythonおよびCライブラリモジュールの組み込み言語機能を使用すると、Pythonのパフォーマンスが低下することに気付くことさえありません。あなた自身のFFTをネイティブのPythonなどで書くと、恐ろしい性能が見えます。 Pythonを使って本当に高レベルの部分を書いて、PythonとCライブラリが重い作業をさせるようにしてください。 – steveha

11

Pythonは大量の非文字列データを処理するのが非常に遅いです。いくつかの操作では、C/C++よりも1000倍遅いことがわかります。したがって、Pythonでタイムクリティカルなアルゴリズムを作成する前に、これを調べて必要なベンチマークを行う必要があります。

しかし、C/C++コードでモジュールを使ってPythonを拡張することができます。そのため、タイムクリティカルなものは高速ですが、メインコードにはまだPythonを使用できます。

+4

+1また、ベースラインとして、Pythonで記述し、必要に応じて遅い部分をCに置き換えようとします。 –

5

すぐに動作させるようにしてください。

+1

途中で「正しく動作させる」ということを忘れないでください。 – JasCav

+0

私は自分の定義でdoneを正しく動作させるようにしました。しかし、私はあなたのことを聞きます。 – KevDog

1

ランタイムのほとんどがCライブラリで費やされている場合、これらのライブラリを呼び出すために使用する言語は重要ではありません。時間を食べる図書館はどの言語で書かれていますか?

0

あなたの説明から、スピードはそれほど心配するべきではありません(そしてC、cython、それをもっと速くしたいのですが)。 64Mバイト以下の環境(OSとすべてのものが適合しなければならないのでしょうか?)では、Pythonがターゲットの展開に適したツールではない可能性が高いと思います。

扱うことが簡単なロジックがない場合、私はまだPythonでプロトタイプを作成します。

0

pyfuzzyの例のパフォーマンスは決して測定されませんでしたが、新しいバージョン0.1.0ではFFLLのようにFCLファイルを読み取ることができました。ファジィシステムをこの形式で記述し、いくつかのラッパーを記述し、両方のバリアントのパフォーマンスをチェックしてください。

pyfuzzyでFCLを読むには、antlr pythonランタイムが必要ですが、読み込み後に読み込みオブジェクトをpickleできなければならないので、ターゲットにantlrオーバーヘッドは必要ありません。

関連する問題