草庐IT

c - 移动内存页面的方法比 mremap() 更快?

我一直在试验mremap()。我希望能够高速移动虚拟内存页面。至少比复制它们的速度更高。我对算法有一些想法,可以利用能够非常快速地移动内存页面。问题是下面的程序显示mremap()非常慢-至少在我的i7笔记本电脑上-与实际逐字节复制相同的内存页面相比。测试源代码是如何工作的?mmap()256MBRAM,比CPU上的缓存大。迭代200,000次。在每次迭代中,使用特定的交换方法交换两个随机内存页。使用基于mremap()的页面交换方法运行一次。使用逐字节复制交换方法再次运行并计时。事实证明,mremap()每秒只管理71,577次页面交换,而逐字节复制每秒管理高达287,879次页面交

c++ - 为什么 Strassen 矩阵乘法比标准矩阵乘法慢得多?

我用C++、Python和Java编写了矩阵乘法程序,并测试了它们对两个2000x2000矩阵相乘的速度(参见post)。标准ikj实现-在中-拍摄:C++:15秒(Source)Python:6分13秒(Source)现在我已经实现了Strassenalgorithmformatrixmultiplication-位于-在Python和C++中,就像在维基百科上一样。这些是我的时间:C++:45分钟(Source)Python:10小时后被杀死(Source)为什么Strassen矩阵乘法比标准矩阵乘法慢很多?想法:一些缓存效果实现:错误(生成的2000x2000矩阵是正确的)nul

c++ - 为什么 Strassen 矩阵乘法比标准矩阵乘法慢得多?

我用C++、Python和Java编写了矩阵乘法程序,并测试了它们对两个2000x2000矩阵相乘的速度(参见post)。标准ikj实现-在中-拍摄:C++:15秒(Source)Python:6分13秒(Source)现在我已经实现了Strassenalgorithmformatrixmultiplication-位于-在Python和C++中,就像在维基百科上一样。这些是我的时间:C++:45分钟(Source)Python:10小时后被杀死(Source)为什么Strassen矩阵乘法比标准矩阵乘法慢很多?想法:一些缓存效果实现:错误(生成的2000x2000矩阵是正确的)nul

c++ - O(N) 算法比 O(N logN) 算法慢

在数字数组中,每个数字出现偶数次,只有一个数字出现奇数次。我们需要找到那个数字(这个问题之前讨论过onStackOverflow)。这是一个用3种不同方法解决问题的解决方案——两种方法是O(N)(hash_set和hash_map),一种是O(NlogN)(排序)。然而,对任意大的输入进行分析表明排序更快,并且随着输入的增加而变得越来越快(相比之下)。实现或复杂性分析有什么问题,为什么O(NlogN)方法更快?#include#include#include#include#include#include#include#include#includeusingstd::cout;us

c++ - O(N) 算法比 O(N logN) 算法慢

在数字数组中,每个数字出现偶数次,只有一个数字出现奇数次。我们需要找到那个数字(这个问题之前讨论过onStackOverflow)。这是一个用3种不同方法解决问题的解决方案——两种方法是O(N)(hash_set和hash_map),一种是O(NlogN)(排序)。然而,对任意大的输入进行分析表明排序更快,并且随着输入的增加而变得越来越快(相比之下)。实现或复杂性分析有什么问题,为什么O(NlogN)方法更快?#include#include#include#include#include#include#include#include#includeusingstd::cout;us

python - 为什么减法比 Python 中的加法快?

我正在优化一些Python代码,并尝试了以下实验:importtimestart=time.clock()x=0foriinrange(10000000):x+=1end=time.clock()print'+=',end-startstart=time.clock()x=0foriinrange(10000000):x-=-1end=time.clock()print'-=',end-start第二个循环确实更快,从mustache到10%不等,具体取决于我运行它的系统。我已经尝试改变循环的顺序、执行次数等,但它似乎仍然有效。陌生人,foriinrange(10000000,0,-1

python - 为什么减法比 Python 中的加法快?

我正在优化一些Python代码,并尝试了以下实验:importtimestart=time.clock()x=0foriinrange(10000000):x+=1end=time.clock()print'+=',end-startstart=time.clock()x=0foriinrange(10000000):x-=-1end=time.clock()print'-=',end-start第二个循环确实更快,从mustache到10%不等,具体取决于我运行它的系统。我已经尝试改变循环的顺序、执行次数等,但它似乎仍然有效。陌生人,foriinrange(10000000,0,-1

python - FSharp 运行我的算法比 Python 慢

几年前,我通过动态编程解决了一个问题:https://www.thanassis.space/fillupDVD.html解决方案是用Python编写的。作为拓展视野的一部分,我最近开始学习OCaml/F#。有什么比直接将我在Python中编写的命令式代码移植到F#更好的方法来测试水域-然后从那里开始,逐步走向函数式编程解决方案。第一个直接端口的结果......令人不安:在Python下:bash$timepythonfitToSize.py....real0m1.482suser0m1.413ssys0m0.067s在FSharp下:bash$timemono./fitToSize.

python - FSharp 运行我的算法比 Python 慢

几年前,我通过动态编程解决了一个问题:https://www.thanassis.space/fillupDVD.html解决方案是用Python编写的。作为拓展视野的一部分,我最近开始学习OCaml/F#。有什么比直接将我在Python中编写的命令式代码移植到F#更好的方法来测试水域-然后从那里开始,逐步走向函数式编程解决方案。第一个直接端口的结果......令人不安:在Python下:bash$timepythonfitToSize.py....real0m1.482suser0m1.413ssys0m0.067s在FSharp下:bash$timemono./fitToSize.

Java 默认方法比相同的代码慢,但在抽象类中

我有一个接口(interface)PackedObject:publicinterfacePackedObject{intget();intsum();voidsetIndex(intindex);defaultintdefaultSum(){returnget();}}一个抽象类AbstractPackedObject:publicabstractclassAbstractPackedObjectimplementsPackedObject{protectedintindex=0;protectedint[]buffer;publicvoidsetIndex(intindex){th