问题标签 [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.

0 投票
2 回答
2575 浏览

c - 我怎么知道进程在哪个核心上运行?

我目前正在研究一个关于在 linux 环境中将进程设置为一个核心的项目。我使用 sched_setaffinity 来完成这项工作,我想知道 linux 是否提供了一些函数来获取进程在哪个内核上运行。我使用 top 命令并发现它可以使用 j 选项获取此信息。所以我确信有一些方法可以在用户空间中获取这些信息。

0 投票
3 回答
33295 浏览

caching - 什么是 TLB 击落?

什么是 SMP 中的 TLB 击落?

我无法找到有关此概念的太多信息。任何好的例子将不胜感激。

0 投票
1 回答
447 浏览

erlang - 使用 Erlang 进行测试。

我可以在具有四个或更多内核的单核 erlang 程序的计算机上进行测试吗?

在不使用任何参数的情况下启动时,erlang smp 假定为 2:2,如下所示:

Erlang R14A (erts-5.8) [smp: 2:2] [rq: 2] [async-threads: 0]

我使用的是 Pentium 4,这是否意味着我有两个内核?

0 投票
1 回答
640 浏览

multithreading - 在 Linux SMP 上提升线程和不存在的加速

我使用 boost::thread 编写了一个小示例 C++ 程序。因为它是 215 行,所以我把它贴在了 pastebin 上

http://pastebin.com/LRZ24W7D

该程序创建大量浮点数(当前为 1gb)并将它们相加,首先按顺序添加,然后使用多个线程(托管在 device_matrix 类中)。假设机器是 SMP,我希望从代码中看到加速。在我的 Windows 机器上,当使用 4 个 device_matrix 实例(在我的双核超线程 Intel Core2 CPU 上提供 4 个线程)时,我看到了四倍的加速。Windows 上的输出如下:

但是,当我在可用的 Ubuntu 机器上编译相同的代码时,我会看到以下输出:

在这里,没有看到加速(事实上,它慢了很多)。

我正在使用的 Ubuntu 机器具有以下 uname -a 输出

hwinfo -short 给出以下输出:

我读到的机器有八核(嗯,四核和 HT)

我正在使用以下行在 Windows 上编译我的程序:

在 Ubuntu 上,我使用以下行:

运行上述行时的输出在这里http://pastebin.com/Gj6W3pcs以防它可以告诉任何人任何事情。

由于我不习惯在 Linux 上进行开发,我只是不确定要寻找什么。是否需要将某些标志传递给 GCC 或需要在某处启用某些设置以获取实际的并发线程?

我在网上寻找了一个使用 boost::thread 的示例程序,它可以给我一些基准测试,但我只找到不需要处理任何“重”的小型生产者-消费者示例。

作为额外的事情,使用 time 命令,一个线程给出以下时间(以防 boost::timer 不稳定):

当使用 8 个线程时,我看到以下内容:

无论如何,这似乎并不表明运行速度更快。

我还应该提一下,我使用的是普通用户帐户,并且我自己构建了 boost(因此,为此目的,在 Linux 上将其链接到“普通”文件夹之外。)这也意味着我已经受到严格限制我可以安装什么等等。是否有类似的限制适用于线程?

0 投票
2 回答
395 浏览

multithreading - 在处理网络连接时,有没有办法利用多核?

在我们做网络编程的时候,无论你使用多进程、多线程还是select/poll(epoll),只有一个进程/线程来处理接受同一个端口的连接。如果你想利用多核,你需要创建工作进程/线程。但是边界处理网络连接呢?在处理网络连接时,有没有办法利用多核?

我找到了一些材料。这似乎很难完成。三向握手将由内核隐式完成。并且在smp结构中操作系统会被划分为几个临界区。同一个临界区不能同时在多个核心上运行。

0 投票
3 回答
1022 浏览

cloud - 大型 RAM 需求和集群/云

这确实是一个生物信息学问题,但我会尽可能笼统地说。这是半假设的情况:

假设我可以访问集群甚至云。我想在这个集群/云上运行一些非常具体的程序(准确地说是基因组/转录组程序)。问题是我预计这些程序(Velvet/Oases、Trinity 等)需要大量 RAM,保守地说是 100GB 以上,而我的集群/云上最大的节点只有 32GB。

现在除了切换到基于 MPI/Hadoop 的程序(ABySS 或诸如此类)、编写自己的程序或购买新计算机之外,我还有哪些可行的选择?有没有人尝试过在集群/云的多个节点上使用具有共享内存的分布式操作系统(MOSIX、Kerrighed、...)?虚拟 SMP 怎么样?还有什么?

谢谢你的帮助!

编辑澄清:假设上面提到的程序(Velvet/Oases 和 Trinity)需要一个具有大量 RAM 池的单个系统。简而言之,我正在寻找一种可行的方法将一堆节点“粘贴”到一个虚拟超级节点中,其中单个进程可以访问所有节点的所有 RAM,就像它是一个系统一样。我知道这样的事情可能会对性能产生相当大的影响,但我正在寻找可能的东西,不一定有效。

ps 对不起,如果我的术语让事情变得混乱。我对很多这些都有些陌生。

0 投票
1 回答
954 浏览

linux - 除了使用关联掩码之外,如何在 Linux 中找到线程关联?

我们有一个运行 SMP Linux (2.6.18) 的嵌入式 MIPS 2 核处理器。

我们计划将主 GUI 线程的亲和性分配给两个内核之一,另一个内核用于驱动程序/数据路径处理。

但是,有人问过您如何判断哪些线程在哪个内核上?

我可以很好地获得关联掩码,但是还有其他方法可以告诉(例如 /proc 系统)哪些线程在哪个核心上?

谢谢。

0 投票
6 回答
20067 浏览

linux - Linux找出超线程核心ID

我今天早上试图找出如何确定哪个处理器 id 是超线程核心,但没有运气。

我希望找出这些信息并用于set_affinity()将进程绑定到超线程线程或非超线程线程以分析其性能。

0 投票
5 回答
8180 浏览

synchronization - 如果不同处理器中的两个进程试图同时获取锁会发生什么

好的,所以我正在阅读有关同步的内容,并阅读了各种算法,例如自旋锁、信号量和互斥锁,以避免竞争条件。

但是,当多个进程同时访问数据时,这些算法无法防止 SMP 中的竞争条件。

例如,假设处理器 A 中的线程 1 运行 lock(mutex1); 撤回(1000);解锁(互斥体1);

处理器 B 中的线程 2 运行 lock(mutex1);存款(1000);存款(1000);解锁(互斥体1);

当两个线程完全在同一时间运行时,两个线程将同时处于临界区。

唯一的解决方案(应该在硬件级别)是使每个处理器彼此稍微偏离运行,但这违背了并行性的目的。

是否有任何硬件级别的支持来避免多个处理器尝试同时获取锁的情况?

(这不是原子性问题,而是精确并行性问题,我想知道 SMP 是如何处理它的)。

0 投票
1 回答
1425 浏览

multithreading - 与多线程应用程序相比,多进程系统的预期开销是多少?

对于某些操作系统(OpenBSD 和...),线程是用户级的,并且主要是为了兼容性而存在的。不考虑这种类型的实现,内核级线程的使用与多进程设计相比如何?每种方法的安全含义是什么?表现如何?开发的复杂性?