问题标签 [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 投票
1 回答
1056 浏览

parallel-processing - 锁定 MCS 算法

我想在 C++ 中为我的一个应用程序实现排队锁定。我正在研究以下论文中的算法: http ://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CCUQFjAA&url=http%3A%2F%2Fwww .cs.rice.edu%2F~johnmc%2Fpapers%2Ftocs91.pdf&ei=HpRfUKCZFsfWrQfpgIGACQ&usg=AFQjCNF_QamPWhJrq5dSjJjFjO7W3WzJ5Q&sig2=3TU1vo_aAYbM2fmLxeiZ0A

A & B 正在访问同一个变量(前任->下一个 & I->下一个)以及 C & D(锁定变量),但它们在访问之前没有被锁定。我在这里错过了什么吗?

0 投票
1 回答
941 浏览

linux - SMP linux中的互斥锁所有者

在互斥锁的内核实现中,线程所有者字段仅在它是 SMP 构建时才存在。我可以理解,在良好且干净的代码下,只有在获取成功时,线程才会调用 release,因此我们可以通过不跟踪线程来节省一些缓存和 cpu 周期。但是为什么 SMP 需要它呢?是因为在 SMP 中,互斥体是混合的并且在线程所有者在另一个 cpu 上时旋转并且需要此字段作为参考,还是背后有更多原因?

0 投票
2 回答
548 浏览

affinity - irq smp_affinity 可以替代 rps(接收包转向)吗?

我有一个网卡 eth0,它有一个单队列,它的 IRQ 号是 63,</p>

我的问题是:</p>

如果我将 /proc/irq/63/smp_affinity 设置为 fffff

是否意味着Linux内核会将eth0的IRQ分配给我系统中的每个cpu?

它的功能和rps(receive package serving)一样吗?</p>

0 投票
2 回答
7659 浏览

c - Linux 内核:Spinlock SMP:为​​什么 spin_lock_irq SMP 版本中有 preempt_disable()?

Linux内核中的原始代码是:

我认为禁用本地 IRQ 后没有执行路径可以抢占当前路径。

因为所有常见的硬 IRQ 都被禁用,所以应该不会发生软中断,也不会出现启动调度轮的滴答声。我认为目前的道路是安全的。那么为什么会有一个preempt_disable()

0 投票
1 回答
2611 浏览

multithreading - 如何限制 Erlang VM (BEAM) 使用的核心数量?

我正在使用 2 个四核 Xeon E5520 2.2GHz、24.0GB RAM 和 Erlang R15B02(启用 SMP)的节点上运行实验。我想知道是否可以限制 Erlang VM 使用的核心数量,以便我可以暂时禁用一些核心并逐步增加数量,以测试可扩展性。

我无权root访问此节点。所以我期待一些方法,要么通过指定参数,erl要么通过 Erlang 代码。

0 投票
3 回答
6587 浏览

python - 并行python,还是MPI?

我有一个包含大量符号计算的代码(许多多个符号积分)。我还可以访问一台 8 核 cpu 计算机(具有 18 GB RAM)和一个小型 32 cpu 集群。我更喜欢留在我教授的 8 核电脑上,而不是在更有限的时间内使用他的集群去另一个教授的实验室,但是,我不确定它是否可以在 SMP 系统上运行,所以我正在寻找一个并行Python中的工具,可以在SMPClusters上使用,当然更喜欢一个系统上的代码可以轻松且轻松地修改以在另一个系统上使用。

到目前为止,我发现 Parallel Python (PP) 很有希望满足我的需求,但我最近告诉 MPI 也可以做同样的事情(pyMPI 或 MPI4py)。我不能批准这一点,因为在网上似乎很少讨论这个问题,只有在这里声明 MPI(pyMPI 或 MPI4py)仅可用于集群,如果我对“仅”是正确的!

“Parallel Python”是我唯一的选择,还是我也可以愉快地使用基于 MPI 的解决方案?哪一个更有希望满足我的需求?

附言。似乎他们都没有非常全面的文档,所以如果您知道他们的官方网站以外的一些链接可以帮助新手进行并行计算,如果您在回答中也提到它们,我将非常感激:)


编辑.

我的代码在另一个内部有两个循环,外部循环不能并行化,因为它是一种迭代方法(递归解决方案),每一步都取决于在上一步中计算的值。外循环包含内循环以及3 个额外方程,其计算取决于内循环的整个结果。但是,内部循环(包含每一步可计算的 12 个方程中的 9 个)可以安全地并行化,所有 3*3 方程彼此独立,仅取决于上一步。我所有的方程计算量都很大,因为每个方程都包含许多多重符号积分。似乎我可以并行化内循环的 9 个方程以及这 9 个方程中的每一个方程中的积分计算,并将其他 3 个方程中的所有积分与内循环并行化。如果它可以帮助您更好地理解我的需求,您可以在此处找到我的代码,它是在SageMath中编写的。

0 投票
0 回答
619 浏览

linux - 为什么 ARM 在 ISR 结束时处理 IPI

我正在研究 Linux 上的 IRQ 处理。我有一个问题,为什么我们需要在每个 ISR [for SMP] 结束时处理 IPI。IPI 有什么特别之处吗?为什么我们不在 do_asm_IRQ 中处理其他中断。

任何建议将不胜感激。

http://lxr.oss.org.cn/source/arch/arm/include/asm/entry-macro-multi.S?v=3.5.2;a=arm

0 投票
2 回答
2217 浏览

operating-system - 为什么我们需要为每个 CPU 提供单独的内核堆栈

在实践中,许多操作系统被设计为每个线程有一个内核堆栈,或者每个 CPU 至少有一个内核堆栈。但是对于一个内核在每次进程陷阱时都被锁定的操作系统,似乎没有必要为每个 CPU 设置单独的内核堆栈。由于内核(具有自己的堆栈)仅允许单个 CPU 访问,因此 CPU 永远不应同时处于内核模式。CPU 总是被阻塞,直到前一个 CPU 离开并清理内核堆栈,即使在嵌套陷阱情况下也是如此。那么在这种操作系统中,在哪种情况下需要多个内核堆栈呢?谢谢。

0 投票
3 回答
299 浏览

concurrency - 以一致的顺序看到的并发商店

英特尔架构软件开发人员手册, 2012 年 8 月,第一卷。3A 节。8.2.2:

除了那些执行存储的处理器之外,任何两个存储都以一致的顺序被处理。

但可以这样吗?

我问的原因是:考虑一个具有超线程的双核 Intel i7 处理器。根据手册的卷。如图 1 所示,图 2-8,i7 的逻辑处理器 0 和 1 共享一个 L1/L2 缓存,但其逻辑处理器 2 和 3 共享一个不同的 L1/L2 缓存——而所有逻辑处理器共享一个 L3 缓存。假设逻辑处理器 0 和 2(不共享 L1/L2 高速缓存)几乎在同一时间写入相同的内存位置,并且目前写入的深度不超过 L2。逻辑处理器 1 和 3(它们是“执行存储的处理器以外的处理器”)不能看到“两个存储顺序不一致”吗?

为了实现一致性,逻辑处理器 0 和 2 是否必须发出 SFENCE 指令,而逻辑处理器 1 和 3 是否必须发出 LFENCE 指令?尽管如此,该手册似乎不这么认为,它对此事的看法并不仅仅是印刷错误。看起来是故意的。我很困惑。

更新

根据@Benoit 的回答,提出以下问题:因此,L1 和 L2 的唯一目的是加速负载。加速存储的是 L3。是对的吗?

0 投票
2 回答
3656 浏览

linux-kernel - 为什么linux内核需要空闲线程?

如果无事可做(包括SMP),而不是“什么都不做”,为什么linux内核运行空闲线程?