保留所有处理器资源,核心和缓存[关闭]

Posted

技术标签:

【中文标题】保留所有处理器资源,核心和缓存[关闭]【英文标题】:reserving all processor resources, Core and Cache [closed] 【发布时间】:2014-02-21 23:32:55 【问题描述】:

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

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

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

我对 C++ JAVA 很熟悉,必要时可以做 C#

【问题讨论】:

您的目标操作系统是什么?如果机器处于静止状态,这样做的改进可能远低于 1%。 您确定要在一个问题中询问所有这些语言吗?这太宽泛了:c#、java 和 c++ 非常不同,并且有多种技术可以为它们中的每一个处理多线程。 【参考方案1】:

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

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

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

这个问题模棱两可。让我解释一些关于加快代码速度的选项,因为您似乎主要关心这一点。

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

【讨论】:

以上是关于保留所有处理器资源,核心和缓存[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

spark中要想保留流的状态怎么处理用哪种方式缓存

轻松学会Java高并发第二课-CPU多级缓存

缓存/限流

GET与POST区别

参数化:计划缓存

如何使用 Spring MVC 和 Spring Security 为资源处理程序启用 HTTP 缓存