假設速度位操作的我有有位運營商
x &(num-1)
其中x是爲unsigned long long和num定期int和&是按位與操作。
隨着num值的增加,我得到了顯着的減速。這是正常的行爲嗎?
這些都是影響
int* hash = new int[num]
假設速度位操作的我有有位運營商
x &(num-1)
其中x是爲unsigned long long和num定期int和&是按位與操作。
隨着num值的增加,我得到了顯着的減速。這是正常的行爲嗎?
這些都是影響
int* hash = new int[num]
我不認爲按位運算速度放緩代碼的其他部分,我想你使用它很多次。可能它甚至不需要花費太長時間的按位操作,但其他任何事情你也可以做更多次。
使用分析器。
該數字不是任何循環或迭代器的一部分......它僅用於分配更多堆空間 – Jake 2011-05-08 23:18:10
如果你在一個緊密的循環中執行代碼,那麼很可能你會看到性能降低了較高的數字,我是猜測你的C++編譯器無法找到本機指令執行&與一個無符號long long - 如你所說你得到一個兩個冪的放緩然後我希望從&產生的代碼重複「除以num」2,直到它爲零執行和逐位。
另一種可能性是,您正在運行的CPU是跛腳的,並且在固定數量的週期內不執行AND操作。
你見過這樣的CPU嗎? – 2011-05-08 23:43:35
@ralu - 不是我所知道的,儘管他們確實存在這樣的CPU,即使他們只是在舊ZX81的attic閒置。 – 2011-05-08 23:45:29
...我站在更正,ZX81(與Z80 CPU)採取一致的7個週期執行與。 :) – 2011-05-08 23:53:30
問題已解決。它必須處理CPU緩存和局部性。
你是如何測量的?請發佈您的時間碼。 – 2011-05-08 23:04:26
什麼樣的減速?當num的大小達到特定的水平時,速度是否突然增加,例如, >「什麼可以用一個字節表示」? – 2011-05-08 23:06:45
代碼太長..它是一個更大的程序(哈希表)的一部分,包含該操作。這只是當我增加n的冪數爲2時,程序變慢...很多 – Jake 2011-05-08 23:07:19