ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
また更新してしまいました。
前から書こうと思っていたのですが忘れていたのでCDR(Common Data Representation)での変換にどの程度の時間がかかるのかを実験しておきたいと思います。CDRについては他に説明しているサイトがあるようなので説明は省略します。OpenRTM-aistのデータポートによる通信ではデータをバイト列に変換して通信するわけですが、その表現方法にCORBAのCDRと言う形式を使っています。
さてOpenRTM-aist-PythonのどこでCDRによる符号化、復号化をしているかというと、ソースコードを読んだ限りではOutPortConnector.pyのcdr_data = cdrMarshal(any.to_any(data).typecode(), data, self._endian)で符号化、InPortPushConnector.pyの_data = cdrUnmarshal(any.to_any(self._dataType).typecode(),data,self._endian)で復号化しているみたいに見えます。
とりあえずOutPortConnector.py、InPortPushConnector.pyに時間を計測するコードを書いて、適当に通信してみました。
とりあえず500KBのデータを通信した結果です。データの遅延時間はwrite関数の直前からデータを受け取った時のコネクタコールバックが呼び出されるまでの時間を計測しています。
遅延時間(同一プロセス):1.713[ms]
遅延時間(別プロセス):7.287[ms]
符号化:0.608[ms]
復号化:0.302[ms]
ちなみに500回実験した結果の平均値です。
なんだか同一プロセスの通信が速いのか、別プロセスの通信が遅いのかは知りませんが結果が違うような気がします。確かC++版で計測したときには2倍ぐらいの差しか無かったような気がしますが、Python版だとこうなるのですかね?入念にソースコードを調べたのですが特に間違っている所はなさそうなので、多分あっているとは思います。誰か検証してください。
それはさておきCDRの符号化、複合化ですが、同一プロセスでの通信では53%を締めているみたいですね・・・・本当だろうか?やっぱり結果が怪しいように思います。
何だか怪しいので50KBでも実験してみました。
遅延時間(同一プロセス):0.599[ms]
遅延時間(別プロセス):1.523[ms]
符号化:0.0992[ms]
復号化:0.0448[ms]
比率が24%まで下がりました。やはり怪しいので誰か検証してください。
よくわからないのでデータサイズと比率の関係を調べてみました。
各データサイズで何百回も試行した平均を出すのは面倒なので1回しか計測していません。
こうして見るとデータサイズが大きくなるほど符号化、復号化の比率が大きくなっているように見えます。
どうやらC++版だとOutPortConnector.hのdata >>= m_cdr;の部分が符号化、ConnectorListener.hのdata <<= cdr;が復号化のように見えます。誰か試せる人は試してください。
というか何でこんな事を調べていたかと言うと、何か別の方式の通信を実装してみたいと思ったからです。共有メモリとかで通信するにしても、一旦CDRで符号化して送信先で復号化すれば色々なデータ型が通信できると思います。まあ別に共有メモリが使いたいわけではないですが。なんでもHRTMというRTM実装では同一プロセス内通信の場合、アドレス参照でデータをコピーするとからしいのですね。論文読んだ限りでは従来の方法ではデータ変換処理が通信の大部分を占めているような事を書いてあるので、他の方法で通信するにしてもCDRでの変換を組み込むかどうかは考えた方が良いかもしれないです。
たしかこのソフトウェアは独自のデータ型でもデータの記録、再生ができるらしいですが、CDRで保存しているかららしいです。上手い使い方するなあ(小並感)
そういえば、この本ってどんな内容なのでしょうね?
レビューが酷いので購入したくはないのですが、酷いだけに内容が気になります。
別にRTMの本ならばはじめてのコンポーネント指向ロボットアプリケーション開発を読めば良いと思いますけどね。ただ、ちょっと内容が古くなりつつあるのが問題かもしれないです。
UMLとRTミドルウェアによるモデルベースロボットシステム開発はちょっとUML関連の内容が多すぎてRTM関連の内容が薄いような印象です。この本もamazonのレビューが酷いな。確かにRTMの本だと思って読んでみたらUMLの事ばっかり書いててガッカリしたのですが、最初からUMLの本だと思って読めば悪い本ではないはずです。
というかRTM関連の本って何年も出てないので、そろそろ誰か書いてください。もしかして、RTM本出しても全然売れないから出ないとか・・いやあまり考えないでおこう。少なくとも僕は買うのでお願いします。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
前から書こうと思っていたのですが忘れていたのでCDR(Common Data Representation)での変換にどの程度の時間がかかるのかを実験しておきたいと思います。CDRについては他に説明しているサイトがあるようなので説明は省略します。OpenRTM-aistのデータポートによる通信ではデータをバイト列に変換して通信するわけですが、その表現方法にCORBAのCDRと言う形式を使っています。
さてOpenRTM-aist-PythonのどこでCDRによる符号化、復号化をしているかというと、ソースコードを読んだ限りではOutPortConnector.pyのcdr_data = cdrMarshal(any.to_any(data).typecode(), data, self._endian)で符号化、InPortPushConnector.pyの_data = cdrUnmarshal(any.to_any(self._dataType).typecode(),data,self._endian)で復号化しているみたいに見えます。
とりあえずOutPortConnector.py、InPortPushConnector.pyに時間を計測するコードを書いて、適当に通信してみました。
とりあえず500KBのデータを通信した結果です。データの遅延時間はwrite関数の直前からデータを受け取った時のコネクタコールバックが呼び出されるまでの時間を計測しています。
遅延時間(同一プロセス):1.713[ms]
遅延時間(別プロセス):7.287[ms]
符号化:0.608[ms]
復号化:0.302[ms]
ちなみに500回実験した結果の平均値です。
なんだか同一プロセスの通信が速いのか、別プロセスの通信が遅いのかは知りませんが結果が違うような気がします。確かC++版で計測したときには2倍ぐらいの差しか無かったような気がしますが、Python版だとこうなるのですかね?入念にソースコードを調べたのですが特に間違っている所はなさそうなので、多分あっているとは思います。誰か検証してください。
それはさておきCDRの符号化、複合化ですが、同一プロセスでの通信では53%を締めているみたいですね・・・・本当だろうか?やっぱり結果が怪しいように思います。
何だか怪しいので50KBでも実験してみました。
遅延時間(同一プロセス):0.599[ms]
遅延時間(別プロセス):1.523[ms]
符号化:0.0992[ms]
復号化:0.0448[ms]
比率が24%まで下がりました。やはり怪しいので誰か検証してください。
よくわからないのでデータサイズと比率の関係を調べてみました。
各データサイズで何百回も試行した平均を出すのは面倒なので1回しか計測していません。
こうして見るとデータサイズが大きくなるほど符号化、復号化の比率が大きくなっているように見えます。
どうやらC++版だとOutPortConnector.hのdata >>= m_cdr;の部分が符号化、ConnectorListener.hのdata <<= cdr;が復号化のように見えます。誰か試せる人は試してください。
というか何でこんな事を調べていたかと言うと、何か別の方式の通信を実装してみたいと思ったからです。共有メモリとかで通信するにしても、一旦CDRで符号化して送信先で復号化すれば色々なデータ型が通信できると思います。まあ別に共有メモリが使いたいわけではないですが。なんでもHRTMというRTM実装では同一プロセス内通信の場合、アドレス参照でデータをコピーするとからしいのですね。論文読んだ限りでは従来の方法ではデータ変換処理が通信の大部分を占めているような事を書いてあるので、他の方法で通信するにしてもCDRでの変換を組み込むかどうかは考えた方が良いかもしれないです。
たしかこのソフトウェアは独自のデータ型でもデータの記録、再生ができるらしいですが、CDRで保存しているかららしいです。上手い使い方するなあ(小並感)
そういえば、この本ってどんな内容なのでしょうね?
レビューが酷いので購入したくはないのですが、酷いだけに内容が気になります。
別にRTMの本ならばはじめてのコンポーネント指向ロボットアプリケーション開発を読めば良いと思いますけどね。ただ、ちょっと内容が古くなりつつあるのが問題かもしれないです。
UMLとRTミドルウェアによるモデルベースロボットシステム開発はちょっとUML関連の内容が多すぎてRTM関連の内容が薄いような印象です。この本もamazonのレビューが酷いな。確かにRTMの本だと思って読んでみたらUMLの事ばっかり書いててガッカリしたのですが、最初からUMLの本だと思って読めば悪い本ではないはずです。
というかRTM関連の本って何年も出てないので、そろそろ誰か書いてください。もしかして、RTM本出しても全然売れないから出ないとか・・いやあまり考えないでおこう。少なくとも僕は買うのでお願いします。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
この記事にコメントする