问题标签 [smp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cpu - 如何:四核和双四核虚拟化?
在双四核物理主机之上,我想运行具有 8 个虚拟 CPU(如果可能)或至少 4 个虚拟 CPU 的单个 VM - 用于科学计算。
我已经调查了市场在这个日期所提供的东西,似乎
- VMWare Server 2.0 仅限于 2 个虚拟 CPU。
- Microsoft Virtual Server 2005 RC2 仅限于单 CPU。
- Microsoft Hyper-V 2008 仅限于 4 个虚拟 CPU(对来宾操作系统有限制)。
有没有办法获得 8 个虚拟 CPU?
c - 如何在 Linux 中为 C 或 C++ 的进程设置 CPU 亲和性?
是否有一种编程方法可以为 Linux 操作系统的 c/c++ 中的进程设置 CPU 亲和性?
linux - 如何从用户空间应用程序(Linux、C)中获取 CPU 内核编号?
大概有一个库或简单的 asm blob 可以让我知道我正在执行的当前 CPU 的数量。
multicore - 多CPU、多核和超线程有什么区别?
谁能向我解释多 CPU、多核和超线程之间的区别?我总是对这些差异以及每种架构在不同场景中的优缺点感到困惑。
以下是我在网上学习和借鉴别人的评论后目前的理解。
- 我认为超线程是其中最劣质的技术,但价格便宜。它的主要思想是重复寄存器以节省上下文切换时间;
- 多处理器比超线程好,但是由于不同的CPU在不同的芯片上,不同CPU之间的通信比多核延迟更长,使用多芯片比多核成本和功耗更高;
- 多核将所有 CPU 集成在一个芯片上,因此与多处理器相比,不同 CPU 之间的通信延迟大大降低。由于它使用单个芯片来包含所有 CPU,因此与多处理器系统相比,它消耗的功率更少且成本更低。
它是否正确?
assembly - 多核汇编语言是什么样的?
曾几何时,要编写 x86 汇编程序,例如,您会看到说明“将 EDX 寄存器加载为 5”、“增加 EDX 寄存器”等指令。
对于具有 4 个内核(甚至更多内核)的现代 CPU,在机器代码级别是否看起来像有 4 个独立的 CPU(即只有 4 个不同的“EDX”寄存器)?如果是这样,当您说“增加 EDX 寄存器”时,是什么决定了哪个 CPU 的 EDX 寄存器增加?现在 x86 汇编器中是否有“CPU 上下文”或“线程”概念?
核心之间的通信/同步如何工作?
如果您正在编写一个操作系统,通过硬件公开什么机制来允许您在不同的内核上调度执行?它是一些特殊的特权指令吗?
如果您正在为多核 CPU 编写优化编译器/字节码 VM,您需要特别了解 x86 以使其生成可在所有内核上高效运行的代码?
对 x86 机器代码进行了哪些更改以支持多核功能?
build - 并行制造的最佳硬件/软件解决方案?
我们有一个基于 Linux 的构建系统,其中一个构建包含许多不同的嵌入式目标(启用了相应的不同驱动程序和功能集),每个目标都使用另一个单一的主源代码树构建。
与其尝试将我们的基于 make 的系统转换为对多进程更友好的系统,我们只想找到同时为所有这些目标启动构建的最佳方法。我不确定如何获得最佳性能。
我考虑了以下可能的解决方案:
- 许多单独的构建机器。缺点:共享代码的大量副本,或从(慢)共享驱动器工作。更多系统需要维护。
- 较少数量的多处理器机器(可能是双四核),具有快速条带化 RAID 本地存储。缺点:我不确定它将如何扩展。似乎体积会成为瓶颈,但我不知道这些天 Linux 处理 SMP 的能力如何。
- 类似的 SMP 机器,但带有运行 VMware 的管理程序或 Solaris 10。这是愚蠢的,还是会提供一些调度好处?缺点:没有解决存储瓶颈问题。
我打算坐下来尝试这些可能性,但我想检查一下我是否遗漏了什么。谢谢!
assembly - 在多核 x86 处理器中设置关联
(我之所以这么问,是因为我是在严肃的 SMP 和多核之前学习操作系统的。我喜欢对代码的执行方式有一些了解。)
如果我有一个多核 x86 CPU 直接启动到我的程序中。有人可以推荐一个描述我必须控制亲和力的汇编器命令的网站吗?
multithreading - 如何告诉 Hotspot JVM 是使用单处理器还是多处理器线程同步?
机器是双核的,操作系统使用多处理器内核。为了运行一些性能评估,我想将 JVM 的线程亲和性设置为单核。但是,我担心我的性能测量会出现偏差,因为 JVM 可能不知道它现在被限制在单核上,但仍然使用多处理器原语进行线程同步和垃圾收集。虽然可以从命令行调整垃圾收集器,但这对于线程同步是不可能的。
现在,JVM 主要使用(*)操作系统线程作为其线程。所以也许问题应该是“操作系统(Windows / Linux)是否在通过设置相应进程的线程亲和性来限制使用单核的多线程应用程序中使用正确的同步原语?”
(*) 这在 Windows 上并不完全正确,JVM 在调用操作系统之前会自行旋转。该行为可以通过 -XX:+UseSpinning 和 -XX:PreBlockSpin 设置来控制。
linux - Linux 中处理器间通信的最佳方式是什么?
我的芯片上有两个 CPU,它们有一个共享内存。这不是 SMP 架构。芯片上只有两个具有共享内存的 CPU。
第一个 CPU 上有一个类 Unix 操作系统,第二个 CPU 上有一个 Linux 操作系统。
第一个 CPU 做了一些工作,这个工作的结果是一些数据。在第一个 CPU 完成其工作后,它应该告诉另一个 CPU 工作已完成,并且第二个 CPU 必须处理此数据。
处理处理器间通信的方法是什么?我应该使用什么算法来做到这一点?
任何关于它的文章的参考将不胜感激。
assembly - 在不同的处理器上运行代码(x86 程序集)
在 x86 的实模式下,需要使用哪些指令在多处理器系统中的不同处理器上运行代码?
(我正在用汇编程序编写一些预启动代码,需要设置某些 CPU 寄存器,并在实际操作系统启动之前在系统中的每个 CPU 上执行此操作。)