E-mail パスワード
次回から自動ログインする    
パスワード紛失  新規登録      
   ホーム | フォーラム | ブログ | Wiki | 用語集 | マイアルバム | カレンダー | リンク | サイト内検索 |  

Re: 公開Data集/Hint集/演算時間削減/分岐削減

  • このフォーラムはコメント用フォーラムです。新規トピックはたてられません
  • このフォーラムではゲスト投稿が許可されています
対象モジュール Wiki
件名 d3diary開発日記/2015-03-29 [ 2015/3/29 ver0.46.1 ]
要旨 指定された投稿にアクセスできません "d3diary開発日記/2015-03-29" is deleted.

投稿ツリー


前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008/3/30 19:06 | 最終変更
i-brown  一人前 居住地: 兵庫県  投稿数: 131

こんばんわ。珍しく突っ込み側に回ります。
選択分岐を使う例」ですが、いくつか高速化できる箇所があると思います。演算時間減少幅はQ173の場合です。
1. G10はY/Nトランジションで絶対に遷移する(待ちは発生しない)ので、F0の内容はG10の遷移条件の中に移せる。F+G→G単独で▲6.12
2. G30とP1は不要で、直接P0へジャンプすればよい。▲139.68
※ マニュアルに「選択分岐+結合」で書いてあるので本当のところは分かりませんが、
  選択結合で時間を取られるのであれば、
 「上限値オーバー」→「CHGV K1 K10000」
 「適正範囲」→「CHGV K1 #2000L」として、
  選択結合せずにP0へジャンプさせる方法があります。
3. 超「>」を未満「<」に変更すると▲0.48

いずれにせよ、分岐を使わない方が速いことには変わりないと思いますが、「上下限リミット」をかけると微妙かもしれません。
(マニュアルに演算時間が書いていないので計算しようがありませんね)

この方法は選択分岐
DOUT,DIN,SET,+,*で置き換えているので、使用するCPUによって効果が変わりそうですね。
論理値を数値に置き換えられないか困っていたので、トピックの内容が大変役に立ちました。

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008/3/31 8:09 | 最終変更
なーお  長老 居住地: 千葉県香取市  投稿数: 258

i-brownさん、どうもです。 :-)
1.については、あえて分かりやすいように書いたつもりですが、2.の「G30とP1は不要で、直接P0へジャンプすればよい。」はご指摘のとおりですね。(汗) G30を削ったものを、横に追加しておきました。

選択結合では、結合時の待ちあわせ処理が無いので時間の消費はないと思っています。 (活性ステップが分岐して増えているわけではなく、1ルートのままなので。)

今回のこのTipsは、最後にどうしても困ったとき、こんな方法で選択分岐を数値演算に置き換えることもできる、というもので、どうぞ引き出しに仕舞っておいていただき、いざというときに取り出して応用してみてください。  :-D

では。

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008/3/31 22:22 | 最終変更
i-brown  一人前 居住地: 兵庫県  投稿数: 131

こんばんわ。
上の図を改めて眺めていたのですが、
選択分岐あり」の例でやはりY/Nトランジションの後は
選択結合しない方が、「上限を超過した場合」の移行回数が1回減り、代入も1回減る分速くなりそうです。
選択分岐なし」の例ですがここまでくるとG箱1個だけで済みそうです。タスクを起動するといきなり演算が始まりますが、もともと演算をしたくてイベントを起動しているので、M0を「演算開始フラグ」ではなく「演算続行フラグ」だと考えれば良いのではないでしょうか?

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008/4/1 21:41 | 最終変更
なーお  長老 居住地: 千葉県香取市  投稿数: 258
  • brownさん、どうも。
    引用:
    選択分岐あり」の例でやはりY/Nトランジションの後は
    選択結合しない方が、「上限を超過した場合」の移行回数が1回減り、代入も1回減る分速くなりそうです。

そうですね。仰るとおりだと思います。
ただ一点、メンテナンス性も考えたほうが良いですね。
工場などの現場では、トラブルの時に慣れていない人が見たりする場合があります。 その時の可読性を考えると、一旦代入してからその値でCHGVをかけたほうが、(選択STEPモニタですぐに値を見れるし)良さそうですね。 デジタルオシロでも確認できますし。 Gで分岐後の夫々の箱で一旦代入して、その値でCHGVをかけ、結合なしでJUMPさせるような感じです。
 → 結局、Fを減らして結合してジャンプさせるように変更しておきました。 ジャンプが多いと横に広がるので、この方が見やすいと思います。

引用:
選択分岐なし」の例ですがここまでくるとG箱1個だけで済みそうです。タスクを起動するといきなり演算が始まりますが、もともと演算をしたくてイベントを起動しているので、M0を「演算開始フラグ」ではなく「演算続行フラグ」だと考えれば良いのではないでしょうか?

こちらは実際のプログラムにどのように組み込まれるかによって変わってきますので、説明としては今のままのほうが要点が掴み易いですし比較もしやすいと思いますので、このままにしておきます。

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2008/4/6 12:26 | 最終変更
i-brown  一人前 居住地: 兵庫県  投稿数: 131

なーおさん、こんにちわ。
もう一度「分岐使用なし」の方を眺めていたのですが、
G箱1つにするメリットとして、
連続移行数を2以上にしても問題なくなる」点があると思います。
ポインタでループさせると、「演算を続行する限りは移行条件が成立」するので、連続移行数は1である必要がありますが、
G箱1つにして、最後のフラグを「演算終了フラグ」としてENDにつないでしまえば、「演算を続行する限りは、移行条件が成立しない」ので、連続移行数を何に設定しても1回しか演算しなくなると思います。

本来の話からはだいぶ外れましたが、いかがでしょう?

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2008/4/6 18:00 | 最終変更
なーお  長老 居住地: 千葉県香取市  投稿数: 258

i-brownさん、どうも?。

いやいや、そうなんですね。 i-brownさんに言われるまで、「演算時間とイベント割り込み時間の関係」と混同していました。 おっしゃるように、右下の図でG箱1つで移行条件を「!M0」にして止めておけば、連続移行数が多くても1回しか計算しません。 先ほど念のため実SFCを廻して確認しました。 (元図のFS+Gの移行条件で止めていても同様に1回だけ。)

混同していたのは、演算時間が3.5msだったとして、イベントを割り込みを1.7msにした時、同じようにG箱内に演算式を書いて移行条件止めだったとき。 この場合は、演算周期に関わらずイベント毎にG箱の演算も入ります。

この辺は、折をみてきちんと記事に追記しておいたほうが良さそうですね。 ありがとうございました。 :-)

**
昔の初期のAモーションのSFCの時代から使ってきていると、Y/Nトランジションの件もそうですが、OSの処理を信用していない部分が多く、この件のようなOS実装により結果が変わりそうな使い方はグレーゾーンとして避けていたので、どんどん頭が固くなってしまったようです。 少しほぐさないと。。 :-P

投票数:0 平均点:0.00
  条件検索へ


メインメニュー