DirectX - ページ 8

 
Реter Konow:

昨日は、ウィンドウのキャンバス全体から独立してセルが再描画されるタンブラーの例を作りました: https://www.mql5.com/ru/forum/333652/page4

セルを別々に再描画すると、常に40fpsで再描画した場合、負荷が20%程度に抑えられることがわかります(ビデオではビデオ録画のため、より多く)。この方法による通常のタンブラーの動特性は、おおよそ5〜10%の負荷となります。

大きな面積(~500*500 px)を間髪入れずに高速で再描画した場合のみ負荷が高くなります(~40+fps)。再描画の遅延や面積の縮小は、負荷を何倍にも軽減します。

この例では、ガラスはもちろん、深さもかなり切り詰められていますね。面白いことに、スタックのレンダリングは、計算が別々のセルに分解されるので、さらにOpenCLですべてのコアで行わなければならないらしいのですが、ここで私は理論派になってしまいました。

 
Aleksey Vyazmikin:

あなたの例では、ビーカーはもちろん深さも含めてかなり切り詰められていますね。面 白いのですが、どうやらビーカーの描画は、計算がセルに分かれているので、さらにOpenCLで全コアで計算する必要があるようですが、ここで私は理論派です。

よし、細胞を増やしたビーカーを作って、もう一度確認しよう。

 
Реter Konow:

よし、細胞を増やしたビーカーを作って、もう一度確認しよう。

ただ、静的なものではなく、動的なものにしてください。

 
Rafil Nurmukhametov:

前の写真では、オープンポジションが見えますが、価格の周りのフレームはマゼンタ色で、そこではポジションは赤字です。

私の感覚では、このような画像は1〜3ミリ秒以上形成してはいけないと思います。それ以上かかるようなら、どこかにバグがあるのでしょう。
 
Rafil Nurmukhametov:

ただ、静的なものではなく、動的なものにしてください。

ダイナミックとはどういう意味ですか?すべてのセルが同時に値を変更しないように?理解できない。

 
Nikolai Semko:
私の感覚では、このような画像は1〜3ミリ秒以上形成してはいけないと思います。それ以上かかるようなら、どこかに異常があるのでしょう。

これで完成度のハードルが上がりましたね...。6〜8ミリ秒に下げたらどうでしょうか?

 
Реter Konow:

ダイナミックとはどういう意味ですか?すべてのセルが同時に値を変更しないように?理解できない。

mt5のように真ん中ではなく、セルをまたいで現在の価格が 動くようにする

 
Rafil Nurmukhametov:

mt5のカップのように真ん中ではなく、セルをまたいで現在の価格が 動くようにするため

つまり、中央集権化しないことです。さて、先物商品にはこれが本当に必要なのです。オッケーです。(これは負荷をテストするためのモックアップに過ぎません)。

 
Rafil Nurmukhametov:

これで完成度のハードルが上がりましたね...。6〜8ミリ秒に下げられないか?

が多すぎる。3でも多すぎる。30fpsの6-8は、CPU時間が20-30%です。
可能な限りArrayCopyを 使用する必要があります。また、透明性は必要な場合のみ、必要最低限にすること。
プロファイリングで実行し、最大CPUがどこに漏れているかを確認することができます。
もちろんPeterの言う通り、変更があった箇所は局所的に再描画すべきですが、毎回キャンバス全体を再描画するのはやめましょう。
また、DXを使用することで、CPUの負担を非常に軽減することができます
 

OK、エディターでガラスを作りました。2時間かかりました。そりゃあ、大騒ぎになりますよ。ツールを追加することで、4倍のスピードアップが可能です。

テストしてみました。

結果:40フレーム/秒で全セルのaskとbid、1セルの価格を一定に変化させた場合の負荷は20%以下となりました。(録画が可能になると負荷が5~7%上昇します)。


私は自分の意見を繰り返しますが、実際の状況下では、市場の動きに応じて5~10%の負荷がかかると思います。

ファイル:
GUI_Expert.ex5  600 kb