2011-07-21 36 views
1

我正在做一个国际象棋动作生成器,我有机会用许多'if语句'替换'while/for loops',并且我想知道如果添加〜3000条线会如何改进性能或者只是使算法是太大而不能存储在CPU缓存缓存中应该存储多少算法? (需要线索)

我知道这取决于缓存大小的(我有一个的AMD Phenom 8650三核2.3),但我真的没有IDEA

+0

过早优化是万恶之源(三)Knuth。并阅读什么是cpu中的缓存和它的用途 –

+0

没有关于代码的更多信息,推测是毫无意义的。 –

回答

2

首先,你可能有几MB的缓存,所以我怀疑它会填满整个缓存。

除此之外,CPU忙于在代码旁边做很多事情,所以我怀疑整个缓存将仅用于您的代码。除此之外,RAM(你可能有几GB)到缓存之间的移动是相当可以忽略不计的。

所以,是的,删除循环(如果它是一个恒定长度的循环),并用明确的行替换它应该给你一个改进。
在这种情况下,改进的数量或百分比实际上取决于语言和编译器,而不是硬件。
注意,有语言和情况,这可能甚至需要更长的时间(例如解释性语言)

免责声明
这种类型的优化是没有太大的使用,主要是因为它并没有多大改善(通常情况下)。
尝试寻找其他地方(或其他方式)来改善。

+0

感谢您的回答!我知道有很多东西需要改进,但循环展开/展开不会改变移动生成器的策略......也是一种技术,所以它不会浪费许多大脑循环= P – matias

0

它不应该让你的代码变大并且占用更大的内存空间。例如,如果要使用最后一个if,那么它将类似于while循环中的最后一次迭代....但是,如果满足条件,则仍然可以使用诸如break或终止循环之类的内容,这与之类似到有多个if循环。

通过优化其他部件和性能分析,使代码更快。

相关问题