2014-02-21 80 views
-1

我是CS学生,自己学习算法。我现在正在使用的算法必须在功能强大的PC上运行两个月左右,以便提供任何有用的东西,所以处理器效率会产生很大的差异。大部分处理器时间将用于运行具有不同初始值的一个子进程。保留所有处理器资源,核心和高速缓存

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

是否有一种简单的方法可以做到这一点,如果不是这样做甚至是值得的(性能增加5%-10%是值得加倍的编程时间),如果它值得做,但将很难有什么资源用于计算出来?

我熟悉C++和JAVA可以做C#如果neccessary

+0

什么是你的目标操作系统?鉴于其他情况下的静态机器,这样做的改进可能远低于1%。 –

+0

你确定要在单个问题中询问所有这些语言吗?这太明显了:c#,java和C++是非常不同的,并且有各种技术可以为它们中的每一个处理多线程。 –

回答

2

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

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

1

问题不明确。让我解释一些关于加快代码的选项,因为您的主要担心看起来如此。

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

目前还没有现代CPU在用户模式软件控制缓存的情况下,即使情况并非如此,通过尝试“在进入操作系统时禁用缓存,您将没有运气可以提高性能“或类似的想法。

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

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

如果您希望系统具有更高的性能,您最好查看编译器生成的代码,选择对您的问题有效的算法等等。显然,使用分析器来确定“热点”的应用程序。