评估CPU内核的优化 - 页 11

 
Aleksey Vyazmikin:

问题出现了,效果如何--当然,我从代码中看到,事实上他们已经删除了 "如果"?但我希望得到一个评论,因为不清楚在更快的逻辑方面的收益是什么。

直观的解决方案--将大的代码移到函数中(最好是在单独的include中),去掉if、increment和break。

我对获得要分析的变量的值也非常困惑。在测试例子中,这些是随机的,但在现实中呢?我已经将纯布尔值留在那里,以检查(bool_a>10.0)而不是(double_a)。

 
Igor Zakharov:

新的构建,新的测试器,新的编译器...汇总表中缺少 "build mt5 "一栏

到目前为止,结果是稳定的--昨天检查过了,所以不要指望在不同的构建中出现性能跳跃。

 
Andrey Khatimlianskii:

直观的解决方案是把大的代码放到一个函数中(或者更好的是放到一个单独的inlude中),然后摆脱if、increment和break。

事实上,它已经是一个函数了,所以不清楚为什么会有这样的性能提升!"。

我在工作代码中使用了inlude,但这是纯粹的代码迁移,你建议如何组织它?布雷大大增加了性能--我怎样才能摆脱它,使我不至于失去速度?

安德烈-哈蒂姆连斯基

我对获得被分析变量的值也非常困惑。在测试的例子中,它是随机的,但在现实中呢?我已经将纯布尔值留在那里,所以我可以检查(bool_a>10.0)而不是(double_a)。

实际上,它和double是一样的--数据取自一个外部文件,在初始化时完全读入缓冲区。所以我不明白到底如何把它们变成一个bool。

 
Maxim Romanov:
3800x在流媒体的性能方面几乎赶上了i7 8700。而且它是从2700型车上下来的。
这可能是由于内存延迟的减少和两倍的高速缓存。
结论:对于mt5来说,决定性因素是内存访问延迟和内存读取速度。
这也可以从2990 wx线程上的低性能得到证明。尽管有4个通道和特定的缓存处理,它们的内存延迟还是很高。
因此,内核本身的速度并不那么重要。
也许这就是它的作用。

而3800X不应该脱离2700?

 
Aleksey Vyazmikin:

那么我将假设在优化过程中,频率仅仅是通过意识形态下降。出于兴趣,对任何EA做一次较长时间的运行--不是16次,而是说160次--我想知道它如何改变通过的时间--差别应该很小--在1秒之内。

F


PS 也许你有一个加载RAM的测试?

 
Pavel Verveyko:

F


PS 也许你有一个加载RAM的测试?

谢谢,平均数与16次传球差不多--我们会认为这是正确的数据。

不幸的是,对于记忆,公共领域中没有合适的东西。

 
Pavel Verveyko:

3800X不是应该脱离2700吗?

它应该有,我提出了一些理由,以便在选择硬件时有所依据。
 
Maxim Romanov:
我应该这样做,我假设了原因,这样我将来选择铁的时候就有了依据。

明白了,谢谢。

 
Aleksey Vyazmikin:

布雷大大增加了性能--我怎样才能摆脱它,从而不损失速度?

用回车来代替,就像我的例子中一样。


阿列克谢-维亚兹米 金。

在现实中,它也是双重的--数据来自外部文件,在初始化过程中被完全读入缓冲区。这就是为什么我不明白究竟如何把它变成一个bool。

而不是

int Povtor_High_M1 = X;

if ( Povtor_High_M1>=0 ) ***

if ( Povtor_High_M1< 0 ) ***

做出

bool Povtor_High_M1 = (X >= 0);

if ( Povtor_High_M1 ) ***

if ( !Povtor_High_M1 ) ***
 
Andrey Khatimlianskii:

像我的例子一样,用退伍军人代替。


而不是

做出

不幸的是,我并不聪明,但X>=0可能比其他任何数字都大--有许多组合--你不可能预见代码中的一切,代码会因各种组合而增长许多数量级。