保留所有处理器资源,核心和缓存

时间:2014-02-21 23:32:55

标签: c# java c++ multithreading caching

我是一名自己学习算法的CS学生。我现在正在研究的算法必须在功能强大的PC上运行大约两个月,以便提供任何有用的功能,因此处理器效率会产生很大的不同。大部分处理器时间将花费在运行一个具有不同初始值的子流程上。

理想情况下,我希望在不同的线程上运行其中的几个子进程,为每个线程保留一个核心和部分缓存大约一个小时。在那个小时之后,我可以留出时间让操作系统运行其他进程,并检查用户输入。一旦完成,我想再保留所有资源一小时。

有没有一种简单的方法可以做到这一点,如果不是甚至值得做(5%-10%的性能增加值得加倍编程时间),如果它值得做,但很难资源是什么有解决方法吗?

我熟悉C ++ JAVA,如果需要可以做C#

3 个答案:

答案 0 :(得分:3)

没有现代CPU,缓存由用户模式软件控制,即使不是这种情况,通过尝试“在进入操作系统时禁用缓存”或类似功能来提高性能,也没有任何好运想法。

类似地,除了可能对每个进程/线程使用处理器关联之外,“锁定CPU资源”没有任何意义。

在现代系统中,操作系统的开销很小,只要系统没有运行xgears或类似“屏幕保护程序”。关闭它,你应该获得99.9%的CPU性能为您的应用程序。

如果您希望获得更高的系统性能,您可以更好地查看编译器生成的代码,选择对您的问题有效的算法等。显然,使用分析器来识别“热点”你的申请。

答案 1 :(得分:2)

虽然有办法将运行线程的优先级设置为“高”,但也许你应该考虑一个不同的整体策略。您的问题描述意味着您将进行多次独立计算(“一个具有不同初始值的子流程”)。也许您应该考虑将计算分解为“子工作单元”,将初始值和结果存储在数据库中......并招募其他学生在空闲时间在计算机上运行这些子工作单元。

对于您使用的计算机,请尝试制作多个线程(许多笔记本电脑通过多核和超线程相当于8个CPU)。

答案 2 :(得分:1)

问题含糊不清。让我解释一下加速代码的一些选项,因为您主要关心的是。

  1. 如果您有多核处理器,请使用C#4.0附带的并行编程或使用MPI或OpenMP
  2. 有许多并行化技术可以用来提高处理速度,如平铺等取决于问题
  3. 确保每个线程或进程都是独立的,例如将日志文件分开等,以便每个线程都可以自己运行。
  4. 确保所有主题都具有高优先级
  5. 如果内存超过4GB,则使程序成为64位应用程序
  6. 增加系统时钟周期
  7. 增加进程的RAM内存(例如,如果您使用的是4GB并非所有4GB都被进程使用,则应根据您的操作系统选择控制该内存。
  8. 如果您知道任何过程,例如防病毒使用http://www.maketecheasier.com/limit-app-cpu-usage-in-windows/此限制其cpu访问
  9. 使用缓存分析并尝试改进您的代码。
  10. 有一些超级计算中心,如果你需要更多的电力接触它们并要求群集节点 - 你可能会很幸运!