linux – 如何增加新生成进程的CPU频率
|
我已经做了一段时间的爱好项目(用C语言编写),但还远未完成.它非常重要,它会很快,所以我最近决定做一些基准测试来验证我解决问题的方法效率不高.
我重新设计了程序的一部分,以显着删除不必要的操作,减少内存缓存未命中和分支错误预测.精彩的Callgrind工具向我展示了越来越多令人印象深刻的数字.大多数基准测试都是在不分支外部流程的情况下完成的.
显然我至少做对了.然而,运行真实的程序讲述了一个不同的故事.
您可能已经注意到,时间主要取决于外部流程.我不知道是什么导致了回归.它没什么好奇怪的;只是一个传统的vfork / execve / waitpid由一个线程完成,以相同的顺序运行相同的程序. 有些东西必须导致分支变慢,所以我做了一个小测试(类似于下面的测试)只会产生新进程并且不会产生与我的程序相关的开销.显然这必须是最快的.
我猜不会. 这时我决定投票给州长表现,时间变得更好了:
似乎每个新进程都安排在一个单独的核心上,并且它需要一段时间才能切换到更高的频率.我不能说为什么旧版本跑得更快.也许这很幸运.也许它(由于效率低下)导致CPU更早地选择更高的频率. 改变调控器的一个很好的副作用是编译时间也得到了改善.显然编译需要许多新流程.但这不是一个可行的解决方案,因为这个程序必须在其他人的台式机(和笔记本电脑)上运行. 我发现改善原始时间的唯一方法是通过在开头添加此代码将程序(和子进程)限制为单个CPU:
尽管使用默认的“ondemand”调控器,这实际上是最快的:
它不仅是一个hackish解决方案,而且在启动的程序使用多个线程的情况下也不能很好地工作.我的程序无法知道这一点. 有没有人知道如何让产生的进程以高CPU时钟频率运行?它必须是自动化的,不需要su priviliges.虽然到目前为止我只在Linux上测试了这个,但我打算将它移植到或多或少所有流行和不受欢迎的桌面操作系统(它也将在服务器上运行).欢迎任何平台上的任何想法. 最佳答案 CPU频率(大多数操作系统)被视为系统属性.因此,如果没有root权限,则无法更改它.有一些关于扩展的研究允许采用特定的程序;然而,由于能量/性能模型即使对于相同的通用架构也不同,因此您很难找到一般解决方案.此外,请注意,为了保证公平性,linux调度程序共享子项的第一个时期的perent和子进程的执行时间.这可能会对您的问题产生影响. (编辑:南阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 让rsync仅报告已更新的文件
- linux – 使用ZeroMQ的反向PUB / SUB问题
- linux-device-driver – add_disk()在insmod上挂起
- linux – Arduino上传错误“stk500_recv():程序员没有响应
- curl – 使用SSPI进行Kerberos身份验证
- linux vi 撤销重做于前进后退--转
- LINUX教程:CentOS安装使用VNC进行远程桌面登录
- linux – bash fork错误(资源暂时不可用)不会停止,并且每次
- LINUX实战:Ubuntu 16.04安装Sublime Text 3
- linux – 在tail -f中,如何过滤掉具有某些关键字的内容?
