哪个更高效?更多核心或更多 CPU

2024-04-15

我意识到这更多的是一个硬件问题,但这也与软件非常相关,特别是在多线程多核/CPU 环境编程时。

哪个更好?为什么?无论是效率、速度、生产力、可用性等。

1.)具有 4 个四核 CPU 的计算机/服务器?

or

2.)具有 16 个单核 CPU 的计算机/服务器?

请假设所有其他因素(速度、缓存、总线速度、带宽等)相同。

Edit:

我对总体性能方面感兴趣。至于它是否在一方面特别好而在另一方面特别糟糕(或不优选),那么我也想知道。

如果我必须选择,我最感兴趣的是 I/O 密集型应用程序和计算密集型应用程序哪个更好。


这不是一个容易回答的问题。毫不奇怪,计算机体系结构相当复杂。以下是一些指导原则,但这些也只是简化。这很大程度上取决于您的应用程序以及您正在工作的限制(业务和技术)。

CPU有几个(一般2-3个)CPU 上的缓存级别 http://en.wikipedia.org/wiki/CPU_cache。一些现代 CPU 的芯片上还有一个内存控制器。这可以大大提高核心之间交换内存的速度。 CPU 之间的内存 I/O 必须通过外部总线进行,这往往会比较慢。

AMD/ATI芯片使用超传输 http://en.wikipedia.org/wiki/HyperTransport,这是一个点对点协议。

然而,总线架构使这一切变得复杂。 Intel 的 Core 2 Duo/Quad 系统使用共享巴士 http://en.wikipedia.org/wiki/Front-side_bus。可以将其想象为以太网或有线互联网,其中只有这么多带宽可供使用,每个新参与者只能从整体中获取另一份份额。 Core i7 和更新的 Xeons 使用快速通道 http://en.wikipedia.org/wiki/Intel_QuickPath_Interconnect,这与 HyperTransport 非常相似。

更多的核心将占用更少的空间,使用更少的空间和更少的功率,并且成本更低(除非您使用功率非常低的CPU),无论是在每个核心方面还是其他硬件(例如主板)的成本。

一般来说,一个 CPU 是最便宜的(无论是硬件还是软件)。为此可以使用商品硬件。一旦您使用第二个插槽,您往往必须使用不同的芯片组、更昂贵的主板以及通常更昂贵的 RAM(例如 ECC 全缓冲 RAM),因此您将承受从一个 CPU 到两个 CPU 的巨大成本打击。这是许多大型网站(包括 Flickr、Google 等)使用的原因之一数千商品服务器(虽然 Google 的服务器在某种程度上进行了定制,包括 9V 电池之类的东西,但原理是相同的)。

您的编辑实际上并没有太大变化。 “性能”是一个非常主观的概念。表现在什么方面?但请记住,如果您的应用程序没有足够的多线程(或多进程)来利用额外的内核,那么您实际上可以通过添加更多内核来降低性能。

I/O 密集型应用程序可能不会更喜欢其中一种。毕竟,它们受 I/O 而不是 CPU 的约束。

对于基于计算的应用程序来说,这取决于计算的性质。如果您正在执行大量浮点运算,那么通过使用 GPU 来卸载计算(例如使用英伟达CUDA http://en.wikipedia.org/wiki/CUDA)。你可以获得一个huge性能由此受益。看看Folding@Home 的 GPU 客户端 http://techreport.com/articles.x/11022举个例子。

简而言之,您的问题无法给出具体答案,因为主题很复杂并且信息不足。技术架构必须针对特定应用程序进行设计。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哪个更高效?更多核心或更多 CPU 的相关文章

  • 使用 Thread.Sleep() 时,异步编程如何与线程一起工作?

    假设 前言 在之前的问题中 我们注意到Thread Sleep阻塞线程参见 什么时候使用Task Delay 什么时候使用Thread Sleep https stackoverflow com questions 20082221 whe
  • c++11 中的 std::thread 问题

    我在尝试从标准模板库编译具有多线程的程序时遇到一些麻烦 当我尝试编译以下程序时 它返回一个晦涩的错误 include
  • R:使用带有 .Call 和 C/C++ 包装器的 Fortran 子例程而不是 .Fortran 的优点?

    我有一个 R 包 它使用大量 Fortran 子例程来进行递归线性代数计算的嵌套循环 很大程度上依赖于 BLAS 和 LAPACK 例程 作为 Fortran 的接口 我使用 Fortran功能 我刚刚读过乔纳森卡拉汉的博客文章 http
  • 为什么 pandas 在简单的数学运算上比 numpy 更快?

    最近 我观察到 pandas 的乘法速度更快 我在下面的例子中向您展示了这一点 如此简单的操作怎么可能做到这一点 这怎么可能呢 pandas 数据帧中的底层数据容器是 numpy 数组 测量 我使用形状为 10k 10k 的数组 数据框 i
  • 时间复杂度和运行时间有什么区别?

    时间复杂度和运行时间有什么区别 它们是一样的吗 运行时间是指程序运行所需的时间 时间复杂度是对输入大小趋于无穷大时运行时间渐进行为的描述 您可以说运行时间 是 O n 2 或其他什么 因为这是描述复杂性类和大 O 表示法的惯用方式 事实上
  • 带有闭包的 JavaScript 性能

    var name function n var digits one two three four return digits n var namenew function digits one two three four return
  • C++11 动态线程池

    最近 我一直在尝试寻找一个用于线程并发任务的库 理想情况下 是一个在线程上调用函数的简单接口 任何时候都有 n 个线程 有些线程比其他线程完成得更快 并且到达的时间不同 首先我尝试了 Rx 它在 C 中非常棒 我还研究了 Blocks 和
  • 如何通过start-stop-daemon正常关闭Spring Boot应用程序[重复]

    这个问题在这里已经有答案了 我们有一个多线程 Spring Boot 应用程序 它作为守护进程在 Linux 机器上运行 当我尝试像这样通过启动停止守护进程停止应用程序时 start stop daemon stop quiet retry
  • 大数组上的 SSE 性能较慢

    我是 SSE 编程新手 所以我希望有人可以帮助我 我最近使用 GCC SSE 内在函数实现了一个函数来计算 32 位整数数组的总和 下面给出了我的实现代码 int ssum const int d unsigned int len stat
  • 循环内的局部变量会被垃圾收集吗?

    我想知道将循环内引用的任何变量放在循环外是否更有效 或者它们可以像函数内的变量一样被垃圾收集吗 var obj key val for var i 0 i lt 10 i console log obj or for var i 0 i l
  • 优化数据可视化 Web 应用程序的性能

    我正在重写 3 年前编写的数据可视化网络工具 从那时起 浏览器的 JavaScript 引擎变得更快 所以我正在考虑将部分工作从服务器转移到客户端 在页面上 数据在表格和地图 或图表 中可视化 它使用相同的数据 但以不同的方式 因此准备显示
  • Python——捕获异常的效率[重复]

    这个问题在这里已经有答案了 可能的重复 Python 常见问题解答 异常有多快 https stackoverflow com questions 8107695 python faq how fast are exceptions 我记得
  • Android 为什么这不会抛出错误的线程异常?

    我的印象是视图只能从主线程操作 但是 为什么这不会崩溃 public class MainActivity extends Activity TextView tv Override protected void onCreate Bund
  • 将 pandas 数据帧拆分为子数据帧列表的最快方法

    我有一个大数据框df我有完整的清单indices中的独特元素df index 我现在想创建一个由元素索引的所有子数据帧的列表indices 具体来说 list df df loc x for x in indices 运行这个命令需要很长时
  • 在所有浏览器中启用我的网站的平滑滚动

    我正在开发一个视差滚动网站Stellar http markdalgleish com projects stellar js and Skrollr https github com Prinzhorn skrollr图书馆 该网站在 F
  • JavaFX 中 WebView 的性能

    我有一个 HTML5 UI 和一个 Java 后端 并且希望避免在纯 java 中重建 HTML ui 所以我的想法是运行本地 Web 服务器并使用 WebView 在 本机 窗口中呈现它 解决方案似乎是使用可以嵌入到 swing 中的 J
  • 调用许多网络服务的最佳方式?

    我有 30 家子公司 每家都实施了他们的 Web 服务 使用不同的技术 我需要实现一个Web服务来聚合它们 例如 所有子公司的Web服务都有一个名为的Web方法GetUserPoint int nationalCode 我需要实现我的网络服
  • 这个等待通知线程语义的真正目的是什么?

    我刚刚遇到一些代码 它使用等待通知构造通过其其他成员方法与类中定义的线程进行通信 有趣的是 获取锁后 同步范围内的所有线程都会在同一锁上进行定时等待 请参见下面的代码片段 随后 在非同步作用域中 线程执行其关键函数 即 做一些有用的事情1
  • Erlang 如何睡觉(晚上?)

    我想在 Erlang 服务器上每隔几个小时运行一次小型清理过程 我知道计时器模块 我在教程中看到一个示例 使用链式计时器 睡眠命令来等待几天后发生的事件 我觉得这很奇怪 我知道 Erlang 进程与其他语言中的进程相比是独一无二的 但是进程
  • 从 Invoke 方法获取 RETURN

    我正在尝试从另一个线程上的列表框项目中读取值 我尝试创建一种新方法来运行调用命令 我可以设法将命令发送到列表框 例如通过调用方法添加 但我似乎无法得到响应 我似乎无法获取该项目的值 我尝试了几种方法 一旦我将它从空变为字符串 事情就开始变得

随机推荐