Canvasでクラウドソーシングのプロジェクトを作る - ページ 19

 

.

公開を約束した動画はこちらです。画質は悪いですが、応答遅れを見ることができないわけではありません。

実際、端末の遅延は少なくなっています。レコーダーをつけると、すべてが2倍遅くなる。プロセッサーの読み込みも格段に向上しています。

そのため、この動画から反応速度を完全に客観的に把握することはできませんが、ウィンドウの更新速度とウィンドウサイズとの間にパターンがあることは明らかです。

(そのため、大きさの違う窓をいくつか作りました)。

画像のレスポンスが悪くなる原因が正確にわかった気がします。ColorToARGB() 数の定数呼び出し である。イベントごと、ピクセルごとに、この関数を呼び出す。一度計算した色をすぐに使うのではなく、常に再計算しています。

ここがポイントだと思うんです。

追伸:追記し忘れましたが、全ウィンドウのオブジェクトの総数は35個です。

 
Реter Konow:

.

公開を約束した動画はこちらです。画質は悪いですが、応答遅れを見ることができないわけではありません。

実際、端末の遅延は少なくなっています。レコーダーをつけると、すべてが2倍遅くなる。プロセッサーの読み込みも格段に向上しています。

したがって、この映像から反応速度を完全に客観的に把握することはできませんが、ウィンドウの更新速度とウィンドウサイズとの間にパターンがあることははっきりとわかります。

(そのため、大きさの違う窓をいくつか作りました)。

画像のレスポンスが遅くなる原因がはっきりした気がします。ColorToARGB() 数の定数呼び出し である。イベントごと、ピクセルごとに、この関数を呼び出す。一度計算した色をすぐに使うのではなく、常に再計算しています。

そこがポイントだと思うんです。

追伸:追記し忘れましたが、全ウィンドウのオブジェクトの総数は35個です。

ソースを見ることは可能なのでしょうか?自分のため......自分のため......経験のため......。
 
Vladimir Pastushak:
ソースコードを見ていただくことは可能でしょうか?自分にとって、自分の経験にとって。
はい、このページでは、これらのウィンドウをすべてまとめて描画する関数のブロックを掲載しています。https://www.mql5.com/ru/forum/92113/page16。
Делаем краудсорсовый проект по Canvas
Делаем краудсорсовый проект по Canvas
  • www.mql5.com
Приветстсвую кодеров. Есть интересная задача сделать действительно что-то полезное, и думаю что краудсорс будет хорошим вариантом...
 
遅延反応の問題を解決しました。溶液は以下の通りであった。

画像は一度だけ作成されます。なぜなら、画像は多くのパーツから構成されており、各パーツの描画は描画関数の呼び出しであり、それぞれがパーツを循環して配列の値を初期化するからである。

何が問題だったのかを説明します。

以前は、画像の細部を描画する際に、画像領域全体をループしていたため、遅延が発生していました。500×500ピクセルのウィンドウの場合、1回のリペイントで約300個のパーツを再描画する必要があり、1回のリペイントで(500×500×300×描画関数数)サイクルのインタラクションが発生することになりました。これには、コンピュータでも時間がかかることがわかりました。
解決策はこうでした。画像内の特定のディテールの再描画を必要とするイベントごとに画像を再描画するのではなく、一度画像を描画し、次の再描画時にResourceReadImage() を使って配列に返します。

そして、画像全体をループさせずに、画像配列の中の画像部分のピクセル位置を特殊な計算式で計算して、その部分だけ再描画しています。そうすれば、無駄な統合は行われない。また、描画機能を1つに統合し、機構の効率化も図りました。





 
OpenCLを使用してCanvasのレンダリングを高速化することは現実的ですか?
 
Timur Gatin:
OpenCLでCanvasのレンダリングを高速化するのは現実的か?


OCLは、並列処理能力+ベクトル演算能力を持っているので、レンダリングやオーバーレイの処理速度が速くなるんですね。

ベクトルの使い方については、Mathematicsの記事 https://www.mql5.com/ru/articles/407 をご覧ください。

OpenCL: от наивного кодирования - к более осмысленному
OpenCL: от наивного кодирования - к более осмысленному
  • 2012.06.05
  • Sceptic Philozoff
  • www.mql5.com
В данной статье продемонстрированы некоторые возможности оптимизации, открывающиеся при хотя бы поверхностном учете особенностей "железа", на котором исполняется кернел. Полученные цифры весьма далеки от предельных, но даже они показывают, что при том наборе возможностей, который имеется здесь и сейчас (OpenCL API в реализации разработчиков терминала не позволяет контролировать некоторые важные для оптимизации параметры - - в частности, размер локальной группы), выигрыш в производительности в сравнении с исполнением хостовой программы очень существенен.
 
Igor Volodin:


OCLは並列処理が可能で、ベクトルも扱えるので、描画やレイヤリングの速度が上がります。

ベクトルの使い方については、Mathematicsの記事 https://www.mql5.com/ru/articles/407 をご覧ください。

CCanvasのErase()と OpenClで作ったPixelSet() ループの速度を比較しましたか ?理論上、高速化を図れば、中間結果をキャッシュするなどの複雑な処理をしなくても、ダサい描画コードを作ることができるのです。

ちなみに、この配合でレイヤーを混ぜるのですか?


 

はい、計算式はwikipediaのもので、各色成分 について 結果=背景+(前景-背景)*アルファです。

ところで、OCLのEraseには問題があります。memsetのアナログはありません(CUDAとは異なります)。そのため、ホストでEraseを行い、CLBufferWriteでクリーンアップされたアレイをコピーする必要がありますが、これは単純なEraseより高速ではありません。
一方、作業単位に1点ずつ書き込むタスク配列を作ってみましたが、速度は思い出せません。以前の方法より遅かったような気がします。

そして、OCL 1.2 では、それを行うclEnqueueFillBuffer() あります=> MQL 構文によれば CLBufferFill() があるはずです

しかし、このラッパーは(バージョン1.1が移植されたため)実装されていません。

 
Igor Volodin:

はい、計算式はwikipediaのもので、各色成分 について 結果=背景+(前景-背景)*アルファです。

ところで、OCLのEraseには問題があります。memsetのアナログはありません(CUDAと異なります)。そのため、ホストでEraseを行い、CLBufferWriteでクリーンアップされたアレイをコピーする必要がありますが、これは単純なEraseより高速ではありません。
一方、作業単位に1点ずつ書き込むタスク配列を作ってみましたが、スピードは思い出せず、前の方法より遅かったような気がします。

そして、OCL 1.2 では、それを行うclEnqueueFillBuffer() あります=> MQL 構文によれば CLBufferFill() があるはずです

しかし、このラッパーは(バージョン1.1が移植されたため)実装されていません。

英語版wikiでは、半透明のレイヤーを2つ混ぜるという、より面白い配合になっています。これにより、半透明のインターフェイスなどを作ることができます。
 
Timur Gatin:
イングリッシュビックでは、半透明の層を2つ混ぜるという面白い処方になっています。半透明のインターフェイスなど、きれいなものを作ることが可能です。

私の場合、これは必要なく、すべてが正しくブレンドされます。A層より下にあるものは、たとえB層が上にあったとしても、基板とみなすことができ、それを通して基板そのものが光り輝く。