- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们刚刚购买了32核Opteron机器,但获得的加速却令人失望:超过24个线程之后,我们根本看不到加速(实际上总体上变慢了),经过6个线程后,它显着地变成了次线性。
我们的应用程序非常线程友好:我们的工作分解为大约170,000个小任务,每个小任务可以分别执行,每个过程需要5到10秒。它们都从大小约为4Gb的同一内存映射文件中读取。他们偶尔会对其进行写入,但每次写入可能会读取10,000次-我们在170,000个任务的每个末端都只写入了一点数据。写入受锁保护。分析表明,锁不是问题。线程在非共享对象中各自使用大量的JVM内存,并且它们对共享的JVM对象的访问非常少,其中只有很少一部分访问涉及写入。
我们在启用NUMA的Linux上用Java编程。我们有128Gb RAM。我们有2个Opteron CPU(型号6274),每个都有16个内核。每个CPU有2个NUMA节点。在Intel四核(即8核)上运行的同一作业几乎线性扩展至8个线程。
我们已尝试将只读数据复制为每个线程一个,以希望大多数查找都可以在NUMA节点本地进行,但是我们发现此操作不会加快速度。
在32个线程中,“top”显示CPU的74%“us”(用户)和大约23%的“id”(idle)。但是没有 sleep ,几乎没有磁盘I/O。使用24个线程,我们可以获得83%的CPU使用率。我不确定如何解释“空闲”状态-这是否意味着“正在等待内存 Controller ”?
我们尝试打开和关闭NUMA(我指的是需要重新引导的Linux级别设置),但没有发现任何区别。启用NUMA时,“numastat”仅显示“分配和访问未命中”的大约5%(95%的缓存未命中是NUMA节点本地的)。 [编辑:]但是,将“-XX:+ useNUMA”添加为java命令行标志可以使我们提高10%。
我们有一种理论是,我们要最大化内存 Controller ,因为我们的应用程序使用大量RAM,并且我们认为有很多高速缓存未命中。
我们怎么办?(a)加速程序以实现线性可伸缩性,或(b)诊断正在发生的事情?
另外:(c)如何解释“最高”结果-“空闲”是否意味着“在存储 Controller 上被阻塞”? (d)Opteron与Xeon的特性有何不同?
最佳答案
我也有一台32核Opteron机器,带有8个NUMA节点(4x6128处理器,Mangy Cours,而不是Bulldozer),并且遇到了类似的问题。
我认为您的问题的答案在顶部显示了2.3%的“sys”时间。以我的经验,这个sys时间是系统在内核中等待锁定所花费的时间。当线程无法获得锁时,它将处于空闲状态,直到进行下一次尝试。 sys和空闲时间都是锁争用的直接结果。您说您的探查器未显示锁定是问题所在。我的猜测是,由于某种原因,导致问题锁的代码未包含在配置文件结果中。
就我而言,锁争用的一个重要原因不是我实际执行的处理,而是将工作分配给每个线程的工作调度程序。该代码使用锁来跟踪哪个线程正在执行哪个工作。我对这个问题的解决方案是重写我的工作计划程序,以避免互斥体,我已经读过它不能扩展到超过8-12个核,而使用gcc内置原子(我在Linux上用C编程)。原子操作实际上是一种非常细粒度的锁,可以在高内核数的情况下更好地扩展。在您的情况下,如果您的工作包裹确实确实需要5到10秒钟,这似乎对您来说就不那么重要了。
我还遇到了malloc的问题,在高内核数情况下,malloc遇到了可怕的锁定问题,但是我无法记住,这是否还会导致sys和idle数字出现,或者它是否刚刚出现使用Mike Dunlavey的调试器性能分析方法(How can I profile C++ code running in Linux?)。我怀疑它确实会导致系统和空闲问题,但是我在研究所有旧注释时发现了一条线:)我确实知道我现在尽可能避免运行时malloc。
我最好的猜测是,您正在使用的某些库代码在您不知情的情况下实现了锁,没有包含在性能分析结果中,并且无法很好地扩展到高内核数的情况。当心内存分配器!
关于parallel-processing - 多核CPU的: Programming techniques to avoid disappointing scalability,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13465425/
@Embedded 注释技术和@OneToOne 注释技术之间的区别是什么,因为在 Embedded 中,java 类在类中包含“Has a”关系,并且在 @Embedded 注释的帮助下,我们将 h
大家好.. 我正在使用来自 Github 的非常好的动画技术.这个家伙为我们提供了非常好的文字效果,我喜欢无限次地使用其中的一些,不仅是在用户按下那个特定的按钮然后播放那个效果的时候。 这是我的代码:
在直接代理中,youtube 在我的学校被屏蔽了。但是通过代理链,每个被阻止的站点都可以访问。它使用了什么技术? 最佳答案 proxychains 将所有请求发送到目标服务器,甚至是 dns 查询。m
我的程序非常适合 MPI。每个 CPU 都做自己的、特定的(复杂的)工作,产生一个 double ,然后我使用 MPI_Reduce将每个 CPU 的结果相乘。 但是我重复了很多很多次(> 100,0
假设有一家公司拥有几个vending machines收集硬币的。当投币保险箱已满时,机器将无法出售任何新元素。为了防止这种情况发生,公司必须在此之前收集硬币。但如果公司太早 dispatch 技术人
我在 Java 规范中看到了以下声明。 Programs where threads hold (directly or indirectly) locks on multiple objects s
在我的代码中,每次我用鼠标单击该图像时,该图像都会交换到另一张图像。我在向第二个(交换的)图像添加随机文本时遇到困难。当我看到第一张图片时,文本不应出现。这是我的代码。当我尝试为随机文本编写代码时,j
如果 f 是 [a,b] 上的连续函数并且在[a,b] 并且 [a,b] 中没有局部最大值,您可以找到最小值通过重复将间隔切成三分之一来实现任意精度,在这三分之一的端点上观察 f 的值,并且重复。 这
好吧,我只是浪费了一个小时来寻找为什么我的 lookless WPF 控件没有出现在窗口中。 最终,我追查到我忘记在 themes 目录下的 generic.xaml 文件中添加 ResourceDi
下个月我将指导一个 ACM 团队(请看图),现在是时候讨论 C 中的字符串了。除了讨论标准库、strcpy、strcmp 等,我想给他们一些提示(比如 str[0] 等同于 *str 之类的东西)。
我的开发人员盒子的屏幕分辨率为 1680 x 1050。我正在开发一个全屏 Silverlight 3 应用程序,我正在考虑将其部署到 Internet。所以,我想确保应用程序在各种屏幕分辨率下看起来
当我通过向底层存储添加过滤器来过滤组合框时,过滤器有时起作用(项目被删除),有时不起作用。我已经调试了 filterBy 函数;它被调用并返回真/假,因为我希望过滤/显示项目。 我在 ExtJS 论坛
这个问题在这里已经有了答案: Why don't people use xor swaps? [closed] (4 个答案) 关闭 7 年前。 我遇到了一种交换 2 个变量(整数、字符或指针)的“
它是如何工作的?请用英语或伪代码足够详细地解释,以便我可以用任何语言实现。 在这篇论文中提到并简要描述了: http://citeseerx.ist.psu.edu/viewdoc/download?
这是我一直在尝试的一种快速但肮脏的圆 Angular 技术。 是的,它很丑,但速度很快,边 Angular 流畅,它避免了嵌套的 div,并且不
我正在开发一个 Java Web 应用程序,该应用程序的行为基于从 Web 服务加载的大型 XML 配置文件。由于在访问应用程序的特定部分之前实际上并不需要这些文件,因此它们是延迟加载的。当需要这些文
我也需要在MVC 4上实现“部分验证技术”,如this answer中所述: public class DontValidateEmailAttribute : ActionFilterA
我在 MySql 中遇到了对大量数据进行查询处理的问题。我需要通过连接函数将数据提取到四个以上的表中。查询在服务器上运行速度非常慢。 如何优化多个连接查询的处理时间。 我目前正在使用 innodb 引
当我们在我们的网站中放置 flash 文件时,它 OFF-COURSE 需要在客户端机器上安装 flash player,并提示安装 flash player... 是否有一些 php 代码,我可以使
无可否认,我是一名新手和自学成才的程序员,并且终于开始探索 C 和 C++ 的深度和强大功能。这种自学过程带来的一些东西不是教科书或公开的 google 知识,例如在困难情况下使用的技巧和调试策略。
我是一名优秀的程序员,十分优秀!