帆布很酷! - 页 16

 

在目前的处理器水平上,你可以忘记双重数学的刹车。没有滞后性。

而通过转换为整数来进行优化的方法已经真的过时了。你在转换上的损失将比你在数学上的收获多很多倍。


考虑到64位代码和我们的编译器,你应该忘记基于双倍计算的任务类别中的整数。

以下是尼古拉以前的优化尝试样本:https://www.mql5.com/ru/forum/1111/page2164#comment_6796332

编译器设法将来自不同表达式 的两个64位双根的计算合并为一个128位的汇编命令。在处理双数数学时,强烈不建议跳转/转换为整数类型。转换时有疯狂的CPU开销(不是我们的)。

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

你不需要把任何东西圆起来。

这里有一个脚本作为例子。

首先用默认参数运行它(有抗锯齿的圆,坐标和尺寸类型为双倍)。

然后用参数typ = not_smoothed_circles来运行它(带有未平滑的圆,坐标和尺寸为int类型--来自CCanvas类)。

这样做的效果很好。

在2100x550像素的画布上,我在没有抗锯齿的情况下得到347帧,在抗锯齿的情况下得到97帧。

供参考,我们有一个500fps的窗口更新率限制器。这表明在图形方面可以取得多大的性能。

 
Renat Fatkhullin:

在目前的处理器水平上,你可以忘记双重数学的制动。没有刹车。

而通过转换为整数来进行优化的方法已经真的过时了。你在转换上的损失将比你在数学上的收获多很多倍。


考虑到64位代码和我们的编译器,你应该忘记基于双倍计算的任务类别中的整数。

以下是尼古拉以前的优化尝试样本:https://www.mql5.com/ru/forum/1111/page2164#comment_6796332

编译器已经设法将来自不同表达式 的两个64位双根的计算合并到一个128位的汇编命令中。在处理双数数学时,强烈不建议跳转/转换为整数类型。转换时有疯狂的CPU开销(不是我们的)。

我几乎可以肯定,如果我们把刻度线变成整数,测试器将开始工作得更快。

 
Artyom Trishkin:

不,那不是变形。说它是变形的,是一种延伸。


实际上,我太懒了,没有自己做一个真正的东西--我在例子文件夹里找到了它。

蜕变,字面意思是--蜕变。

 
fxsaber:

几乎可以肯定的是,如果你把刻度变成整数,测试器就会开始工作得更快。

对马来说,这很清楚,正如叶莲娜-尤里耶夫娜所说。

 
Nikolai Semko:

基于Doom和@fxsaber的 建议。

我使用了这个网站 的算法,并做了一些轻微的修改。

真的很酷!

你用什么来制作照片,尼古拉?

 
fxsaber:

几乎可以肯定的是,如果你把刻度变成整数,测试器将开始工作得更快。

没有。

对于初学者来说,要意识到这一点。

  1. 所有的东西都必须转换为整数。
  2. 在数据转换时有很多滞后现象
  3. 获得狂野的内存消耗
  4. 在每个操作中获得100%的溢出机会,并使系统完全死亡。
  5. 漠视那些被提出来阅读他们的指标并以比特为单位工作而不是杜比的开发者。
  6. 而且,在速度上,Dubs和Ints之间已经没有区别。很难相信,但是是的。
我在上面举出的证据不是没有道理的。在那里,尼古拉试图通过预先计算的根表来应用优化方法,结果输给了过程中掺杂根的rltime计算。
 
Алексей Тарабанов:

蜕变,字面意思是--死亡。

不值得在这里讨论,但Morphing变形)你在哪里看到死人,清醒的...

 
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的速度是双倍的两倍

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