Seu*_*eub 15 c++ linux windows performance qt
我已经在这里发布了这个问题,但由于它可能不是Qt特定的,我想我也可以尝试一下这个机会.我希望这样做并不合适(只要告诉我它是否是这样).
我开发了一个小型的科学计划,可以执行一些数学计算.我试图优化它,以便尽可能快.现在我差不多已经为Windows,Mac和Linux用户部署了它.但我还没能在许多不同的计算机上测试它.
这就是让我烦恼的问题:为了部署Windows,我使用的笔记本电脑上安装了Windows 7和Ubuntu 12.04(双启动).我比较了在这两个系统上运行的应用程序的速度,我惊讶地发现它在Windows上至少慢了两倍!如果存在细微差别,我不会感到惊讶,但是如何解释这种差异呢?
以下是一些准确性:
我很担心Windows上的应用程序会慢得多(2到4次),这真的很奇怪.另一方面,我还没有尝试过使用Windows的其他计算机.不过,你有什么区别吗?
附加信息:一些数据......
即使Windows似乎使用这两个内核,我认为这可能与线程管理有关,这就是为什么:
样本计算n°1(此项启动2个QThreads):
样本计算n°2(此项启动3个QThreads):
样本计算n°3(这个推出6个QThreads):
哪里:
(当然,PC2速度更快并不令人震惊.对我来说不可思议的是PC1-windows和PC1-linux之间的区别).
注意:我也尝试在最近的PC上运行程序(4或8核@~3Ghz,不记得确切)在Mac OS下,速度与PC2-linux相当(或稍快).
编辑:我将在这里回答一些问题我在评论中被问到.
我刚刚在Windows上安装了Qt SDK,所以我想我有最新版本的所有东西(包括MinGW?).编译器是MinGW.Qt版本是4.8.1.
我没有使用优化标志,因为我注意到当我在发布模式(使用Qt Creator)构建时它们会被自动使用.在我看来,如果我写了像QMAKE_CXXFLAGS + = -O1这样的东西,这只会在调试版本中产生影响.
线程的生命周期等:这很简单.当用户单击"计算"按钮时,同时启动2到6个线程(取决于他正在计算的内容),它们在计算结束时终止.没什么太花哨的.每个线程只进行残酷的计算(实际上,除了一个,每30ms进行一次(不那么)小的计算,基本上检查错误是否足够小).
编辑:最新发展和部分答案
以下是一些新的发展,提供了所有这些的答案:
我想确定速度上的差异是否真的与线程有关.所以我修改了程序,以便计算只使用1个线程,这样我们就可以比较"纯C++代码"的性能了.事实证明,现在Windows只比Linux略慢(15%左右).所以我认为差异的一小部分(但并非无意义)是系统固有的,但最大的部分是由于线程管理.
正如在评论中建议的那样(Luca Carlon,感谢您),我尝试使用Microsoft Visual Studio(MSVC)的编译器而不是MinGW构建应用程序.令人惊讶的是,计算(包括所有线程和所有内容)现在"仅"比Linux慢20%到50%!我想我会继续并对此感到满意.我注意到,奇怪的是,"纯C++"计算(只有一个线程)现在甚至更慢(与MinGW相比),这必须考虑整体差异.所以据我所知,MinGW比MSVC略胜一筹,只不过它会处理像白痴一样的线程.
所以,我想我可以做些什么来制作MinGW(理想情况下我宁愿使用它而不是MSVC)更好地处理线程,或者它不能.我会感到惊讶,怎么可能不知道并记录下来?虽然我想我应该过于谨慎地得出结论,但我只是在一台计算机上进行比较(目前).
另一种选择可能是:在 Linux 上,qt 刚刚加载,如果您使用 KDE,则可能会发生这种情况,而在 Windows 中,必须加载库,因此这会减慢计算时间。要检查有多少库加载浪费了您的应用程序,您可以使用纯 C++ 代码编写一个虚拟测试。
归档时间: |
|
查看次数: |
8812 次 |
最近记录: |