错误、漏洞、问题 - 页 2162

 
Artyom Trishkin:
Enum是一个整数的枚举。
0,1,2,3...,等等。

如果一个函数模板包含

EnumToString()。

问题的发生......

 
Vladimir Pastushak:

如果函数模板包含

EnumToString()。

问题出现了...

需要一个例子。
 
Artyom Trishkin:
需要一个例子。

我做了一个超负荷的工作,其中一个是模式...

所以我可以把苍蝇和肉片分开...

 
Vladimir Pastushak:

我做了一个超负荷的工作,其中一个是模式...

所以我可以把苍蝇和肉片分开...

我知道那些苍蝇,我见过那些切糕,但没有功能代码,我看不出问题所在。
 
Renat Fatkhullin:

优化数学:尝试使用数组而不是sqrt。

因此,从一个简单的数组中按索引提取一个元素应该是一个非常快的操作,不是吗?

 
Комбинатор:

所以从一个简单的数组中按索引提取一个元素应该是一个非常快的操作,不是吗?

你在哪里看到一个简单的阵列?

这是一个具有所有控制含义的托管语言的动态阵列。而sqrt是一个单一的本地CPU指令。


欢迎来到优化的惊人发现的世界,在每一代CPU中,每一个缓存大小的差异,多任务,惩罚等情况下,大量因素的影响。

仅仅20年前,我还在486处理器上修补汇编代码,在速度上挣扎,由于指令的重新排列、对齐和简单的内存定位,速度相差几十个百分点。这似乎很疯狂,但英特尔手册和Vtune后来解释了这种情况。

但今天,优化结果 的情况早就失控了。市场上有这么多不同的处理器,有不同的缓存,你的代码可以保证以不同的速度执行。处理器缓存和处理器架构有巨大的影响。即使是动态CPU频率控制也必须关闭,以消除基准测试中百分之几十的差异。

例如:有缓存失误的原子似乎是在体面的架构或被扼杀的U模型上,即使在简单的情况下也经常显示出数倍的低结果。更多的缓存错过,再见。

 
Artyom Trishkin:
我知道那些苍蝇,我见过那些切糕,但如果没有功能代码,问题就不明显。
如果一个重载函数有一个字符串,那么在为一个整数调用它时就会出现问题...
 
Renat Fatkhullin:

你在哪里看到一个简单的阵列?

这不是设定复杂性的正确案例。数组随处可见,在指标中它们是主要的计算部分,而你现在几乎是直接承认你的数组的实现很慢。

我相信你在优化方面做得更好,但从一个普通用户的角度来看,这看起来很奇怪--你说MQL编译器生成代码的速度与C++相当,而突然发现MQL中的数组根本就不快。
 
Комбинатор:

这不是设置复杂性的正确案例。数组随处可见,在指标中它们是主要的计算部分,而你现在几乎是直接承认你的数组的实现很慢。

与直接的单一汇编命令相比?

是的,它是。你不知道的是,处理器早就内置了各种数学函数的预计算表。而昂贵的cpu数学命令使用它们来加速。

我们将在周一对他的例子做详细分析,并找出确切的原因。
 
Renat Fatkhullin:

与直接的单一汇编命令相比?

数组索引 充其量也只是一个直接的单一汇编命令,所以问题仍然存在