キャンバスがカッコいい! - ページ 16

 

現在のプロセッサレベルでは、二重計算のブレーキは忘れることができます。ラグがない。

また、整数値への変換による最適化の方法は、すでに本当に時代遅れです。数学で得をするよりも、変換で何倍も損をすることになる。


64ビットコードと我々のコンパイラを考慮すると、二重計算に基づくタスクのクラスでは、整数のことは忘れるべきでしょう。

以下は、Nikolaiの最適化の試みの過去のサンプルです: https://www.mql5.com/ru/forum/1111/page2164#comment_6796332

コンパイラは、64ビットの2つの二重根を異なる式から 計算し、128ビットの1つのアセンブラコマンドにまとめることに成功した。二重計算をする場合、整数型にジャンプ/変換することは強くお勧めしません。変換には野生のCPUオーバーヘッドがあります(私たちのものではありません)。

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2018.03.11
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Nikolai Semko:

何も丸くしなくてもいいんです。

以下、例としてスクリプトを紹介します。

まず、デフォルトのパラメータ(アンチエイリアスのかかった円、座標と寸法がdouble型)で実行します。

を実行し、パラメータ typ = not_smoothed_circles (非平滑化円、座標とサイズは int 型 - CCanvas クラスのもの) を指定して実行します。

それはとてもうまくいった。

2100x550ピクセルのキャンバスでアンチエイリアシングなしで347fps、アンチエイリアシングありで97fpsでした。

ちなみに、ウィンドウの更新レートリミッターは500fpsを設定しています。これは、グラフィックスでどれだけのパフォーマンスを発揮できるかを示しています。

 
Renat Fatkhullin:

現在のプロセッサのレベルでは、二重計算のブレーキを忘れることができます。ブレーキがないんです。

また、整数値への変換による最適化の方法は、すでに本当に時代遅れです。数学で得をするよりも、変換で何倍も損をすることになる。


64ビットコードと我々のコンパイラを考慮すると、二重計算に基づくタスクのクラスでは、整数のことは忘れるべきでしょう。

以下は、Nikolaiの最適化の試みの過去のサンプルです: https://www.mql5.com/ru/forum/1111/page2164#comment_6796332

コンパイラは、異なる式からの 2つの64ビット二重根の計算を1つの128ビットアセンブラコマンドにまとめることに成功した。二重計算をする場合、整数型にジャンプ/変換することは強くお勧めしません。変換には野生のCPUオーバーヘッドがあります(私たちのものではありません)。

ティックを整数ベースにすれば、Testerの動作が速くなることはほぼ間違いないでしょう。

 
Artyom Trishkin:

いいえ、それはモーフィングではありません。モーフィングと呼ぶには無理がありますね。


実は、自分で実物を作るのが面倒で、例のフォルダの中にあったんです。

モーフィング、文字通り、憮然としている。

 
fxsaber:

ティックを整数化すれば、テスターの動作が格段に速くなることはほぼ間違いないでしょう。

エレーナ・ユリエヴナが言ったように、馬に明らかだ。

 
Nikolai Semko:

Doomをベースに、@fxsaberさんの アドバイスで。

アルゴリズムは、このサイトの ものを少し修正して使いました。

本当にカッコイイ!

ニコライさんは、何を使って絵を描いているのですか?

 
fxsaber:

刻みを整数化すれば、Testerの動作が格段に速くなることはほぼ間違いないでしょう。

いいえ。

まずは、そのことに気づいてください。

  1. はすべてintsに変換する必要があります。
  2. データ変換時のラグが大きい
  3. メモリ消費を抑える
  4. 各操作で100%の確率でオーバーフローが発生し、システムが完全に死亡する。
  5. インジケータを読み、ダブりなくイントで動作するように提供された開発者を無視するようになる。
  6. そして、ダブとイントの速度の差はもうありません。信じがたいが、そうだ。
無駄に上の根拠を挙げたりはしてません。そこでニコライは、あらかじめ計算されたルートテーブルを使って最適化手法を適用しようとしたが、プロセス上でダブルルートをリアルタイムに計算することに負けた。
 
Алексей Тарабанов:

モーフィング、文字通り「死」です。

ここで議論するほどのことでもないが、モーフィング変身) 死んだ人をどこで見るのか、酔いを覚ますのか...。

 
Artyom Trishkin:

ここで議論するほどのことでもないが、モーフィングmorphing- 変身) 死んだ人を見るところ - 酔いを覚ます...。

形態素解析は、死んだ細胞の解析である。まず殺して、顕微鏡で観察するんです。

 
Renat Fatkhullin:

いいえ。

#define  BENCH(A)                                                              \
{                                                                             \
  const ulong StartTime = GetMicrosecondCount();                              \
  A;                                                                          \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \
}  

template <typename T>
T Tester( const int Amount = 1 e7 )
{
  T Sum = 1;
  T Price = 1;
  
  for (int i = 0; i < Amount; i++)
  {
    Price = 1 - Price;
    
    Sum += (Sum > Price) ? 1 : 0;
  }
  
  Print(Sum);
  
  return(Sum);
}

void OnStart()
{
  BENCH(Tester<int>());
  BENCH(Tester<double>());
}


ダブルintはダブルの2倍の速度

10000001
Time[Tester<int>()] = 25523
10000001.0
Time[Tester<double>()] = 51253
理由: