我是一名自己学习算法的CS学生。我现在正在研究的算法必须在功能强大的PC上运行大约两个月,以便提供任何有用的功能,因此处理器效率会产生很大的不同。大部分处理器时间将花费在运行一个具有不同初始值的子流程上。
理想情况下,我希望在不同的线程上运行其中的几个子进程,为每个线程保留一个核心和部分缓存大约一个小时。在那个小时之后,我可以留出时间让操作系统运行其他进程,并检查用户输入。一旦完成,我想再保留所有资源一小时。
有没有一种简单的方法可以做到这一点,如果不是甚至值得做(5%-10%的性能增加值得加倍编程时间),如果它值得做,但很难资源是什么有解决方法吗?
我熟悉C ++ JAVA,如果需要可以做C#
答案 0 :(得分:3)
没有现代CPU,缓存由用户模式软件控制,即使不是这种情况,通过尝试“在进入操作系统时禁用缓存”或类似功能来提高性能,也没有任何好运想法。
类似地,除了可能对每个进程/线程使用处理器关联之外,“锁定CPU资源”没有任何意义。
在现代系统中,操作系统的开销很小,只要系统没有运行xgears
或类似“屏幕保护程序”。关闭它,你应该获得99.9%的CPU性能为您的应用程序。
如果您希望获得更高的系统性能,您可以更好地查看编译器生成的代码,选择对您的问题有效的算法等。显然,使用分析器来识别“热点”你的申请。
答案 1 :(得分:2)
虽然有办法将运行线程的优先级设置为“高”,但也许你应该考虑一个不同的整体策略。您的问题描述意味着您将进行多次独立计算(“一个具有不同初始值的子流程”)。也许您应该考虑将计算分解为“子工作单元”,将初始值和结果存储在数据库中......并招募其他学生在空闲时间在计算机上运行这些子工作单元。
对于您使用的计算机,请尝试制作多个线程(许多笔记本电脑通过多核和超线程相当于8个CPU)。
答案 2 :(得分:1)
问题含糊不清。让我解释一下加速代码的一些选项,因为您主要关心的是。