保留所有处理器资源、Core和Cache

reserving all processor resources, Core and Cache

本文关键字:Core Cache 资源 处理器 保留      更新时间:2023-10-16

我是一名CS学生,独自学习算法。我现在正在研究的算法必须在功能强大的PC上运行大约两个月才能产生任何有用的东西,所以处理器的效率会有很大的不同。处理器的大部分时间将用于运行具有不同初始值的一个子进程。

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

有没有一种简单的方法可以做到这一点,如果没有,它甚至值得做(性能提高5%-10%值得编程时间翻倍),如果值得做,但很难弄清楚有什么资源?

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

没有一种现代CPU的缓存由用户模式软件控制,即使不是这样,你也不会通过尝试"在进入操作系统时禁用缓存"或类似的想法来提高性能。

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

在现代系统中,操作系统的开销是最小的,只要系统没有运行xgears或类似于"屏幕保护程序"的东西。关闭它,您的应用程序应该可以获得99.9%的CPU性能。

如果你想让系统获得更高的性能,你可以更好地查看编译器生成的代码,选择对你的问题有效的算法,等等。显然,使用探查器来识别你的应用程序的"热点"。

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

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

这个问题不明确。让我解释一下关于加速代码的一些选项,因为您主要关心的似乎是这一点。

  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. 有一些超级计算中心,如果你需要更多的电力,请联系他们并要求提供集群节点——你可能会很幸运