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

python - python 是否有一个简单的基于进程的并行映射?

我正在寻找一个简单的基于进程的python的并行映射,即一个函数

这将在不同进程上的 [data] 的每个元素上运行函数(嗯,在不同的核心上,但是 AFAIK,在 python 的不同核心上运行东西的唯一方法是启动多个解释器),并返回结果列表.

这样的事情存在吗?我想要一些简单的东西,所以一个简单的模块会很好。当然,如果不存在这样的东西,我会满足于一个大图书馆:-/

0 投票
4 回答
1296 浏览

erlang - Erlang 文档/SMP:每台机器或每个应用程序的单节点和多节点,以及随之而来的混乱

我现在正在研究 Erlang 的流程模型。我在有关 Erlang的技术报告(第 3 节第 2 段)中遇到了问题:

这解释了为什么在某些情况下运行多个 SMP VM 和一个调度程序而不是在一个 SMP VM 上运行多个调度程序会更有效。当然,多个虚拟机的运行要求应用程序可以运行在许多并行任务中,这些任务彼此之间没有或只有很少的通信。

现在这一段让我感到困惑;我可以看到单进程多调度程序场景,但我没有看到单个调度程序的多个进程;大概每个进程都有一个不同的节点名称,这意味着某个应用程序未经修改就不能与该模型一起使用;报告中提到了不需要修改的优点,这是 SMP 的一个关键特征。如果多个进程具有相同的节点名称,那么由于 Erlang 进程间消息传递风暴,性能将是灾难性的——假设使用内存中的 amnesia。是否有一些本文没有介绍的流程模型,而我在这里遗漏了这些模型?

作者想在这里说什么?他是否试图建议必须为多进程单调度程序案例重写应用程序(以考虑多个唯一节点名称)?

-- 编辑 1:澄清问题的根源 --

该问题已通过讨论得到解答;以下是我遇到的麻烦的概述。

这个问题的问题是,我记得,文档没有涉及在每台物理机器上运行多个 Erlang 模拟器的场景——它一直显示模拟器代表你的物理机器(在工业用途中);此外,从未考虑过必须显式划分程序以提高计算效率的情况。这种突然的介绍是我痛苦的根源。

该约定仍然偏向于创建大量进程,并且未来将为 Erlang 的 SMP 仿真器进行许多改进,这意味着假设有利的应用程序设计,每台机器单个节点仍然是一个非常可行的选择。

0 投票
7 回答
486 浏览

linux - 高并发多线程应用程序需要硬件

我正在寻找一种硬件,它必须以 24 小时模式(一个多线程 C 应用程序)运行大约 256 个计算密集型实时并发任务。每个任务大约需要 40-50 MFLOPs,因此所有任务都需要大约 10 GFLOPs。CPU-RAM 速度无关紧要。所有任务都必须由 Linux 内核(32 位,带 SMP)管理。

我正在寻找具有一个多核 CPU 的单主板解决方案(如果存在这样的 CPU)。如果这样的 CPU 不存在,那么我需要一个多插槽主板解决方案(具有多个 CPU)。

您能否向我推荐任何可以满足此类要求的专业 CPU/主板解决方案?Linux Kernel (2.6.25) 没有问题也很重要。没有虚拟化,不需要巨大的 RAM 或 CPU 缓存。我也更喜欢英特尔架构和久经考验的稳定性。我仍然怀疑它是否可行。

先感谢您。

更新:我想我在这里这里找到了正确的答案。

0 投票
4 回答
909 浏览

linux-kernel - 为什么跨 CPU 时块 I/O 完成需要这么长时间?

我试图从高端存储设备的 Linux 块驱动程序中获得最大的性能。目前让我有点难过的一个问题是:如果用户任务在一个 CPU 上启动 I/O 操作(读或写),而设备中断发生在另一个 CPU 上,我会在此之前产生大约 80 微秒的延迟任务恢复执行。

我可以对原始块设备使用 O_DIRECT 看到这一点,因此这与页面缓存或文件系统无关。驱动程序用于make_request接收操作,因此它没有请求队列并且不使用任何内核 I/O 调度程序(您必须相信我,这种方式更快)。

我可以向自己证明,在调用bio_endio一个 CPU 和在另一个 CPU 上重新安排任务之间会出现问题。如果任务在同一个 CPU 上,它会很快启动,如果任务在另一个物理 CPU 上,则需要更长的时间——在我当前的测试系统上通常要多 80 微秒(Intel 5520 [NUMA] 芯片组上的 x86_64 )。

通过将进程和 IRQ cpu 关联设置为相同的物理 CPU,我可以立即将性能翻倍,但这不是一个好的长期解决方案——无论 I/O 来自何处,我都希望能够获得良好的性能。而且我只有一个 IRQ,所以我一次只能将它引导到一个 CPU —— 如果多个线程在多个 CPU 上运行,那就不好了。

我可以在从 Centos 5.4 的 2.6.18 到主线 2.6.32 的内核上看到这个问题。

bio_endio所以问题是:如果我从另一个 CPU调用,为什么用户进程需要更长的时间才能恢复?这是调度程序问题吗?有什么办法可以消除或降低延迟?

0 投票
3 回答
629 浏览

compiler-construction - 这个 pthread 实际上是如何工作的?

我实际上在我的项目上使用 SMP 编译器,并且想用 pthreads 编码并听说过许多并行的东西打开 mpi 等等,所以从调用 pthread 时如何将这个线程分配给核心开始,有什么办法给pthreads 到不同内核的线程?

0 投票
2 回答
5733 浏览

linux-kernel - Linux内核模块的处理器关联设置?

在 Windows 中,我可以使用 KeSetSystemAffinityThread 设置驱动程序代码的处理器亲和性,并使用 KeGetCurrentProcessorNumber 检查我的代码在哪个处理器上运行。

我正在尝试在 Linux 内核模块中做类似的事情,但我能看到的唯一关联调用是针对用户态进程的。有没有办法做到这一点,以便我可以在特定处理器上运行汇编代码?(即新加坡元)

编辑:

我想我已经弄清楚如何获得当前的处理器了。smp_processor_id() 似乎应该可以工作。

0 投票
2 回答
151 浏览

embedded - 运行函数的核心

考虑一个调度并执行 tasklet 功能的内核 tasklet。

有没有办法知道 tasklet 正在运行哪个内核?我的意思是有一个函数/变量可以知道 tasklet 在哪个核心运行。建筑是手臂。

谢谢!

0 投票
2 回答
1647 浏览

linux - SMP 系统中的 linux 内核是否保证按顺序从网络到达的 UDP 数据包将按顺序从套接字中读取?

在我正在进行的一个项目中,当我们从网络读取 UDP 流时,我们在 SMP 系统上的某些情况下看到了乱序问题。通过嗅探发送方和接收方之间连接的集线器,我们可以看到它按顺序从网络到达。但是,有时从套接字读取时它似乎无序到达。在这种情况下对 UDP 数据包是否有任何保证,或者应用程序是否应该实现重新排序缓冲区?我们没有在这里设置 CPU 亲和性,我怀疑这可能会有所帮助,但理想情况下,我希望所有 CPU/硬件线程都能够处理网络流量。

0 投票
3 回答
591 浏览

java - 带 smp 的 Java 互斥锁

我正在学习多线程编程;在练习互斥锁时,我注意到它在我的双核笔记本电脑上似乎无法正常工作。

互斥代码位于http://pastebin.com/axGY5y3c

结果如下:

结果表明,线程在开始时似乎会获得相同的 init 值。这看起来不正确。

我的代码有什么问题吗?或者是否有任何资源提供有关在 smp/dule-core/multiple cpus 上运行 java mutex 的示例?

感谢帮助。

0 投票
1 回答
1292 浏览

linux - 多线程和 SMP Linux

Linux 内核被称为 SMP。据说进程和内核线程应该分布在处理器之间。

  1. 默认情况下,所有 Linux 发行版(如 fedora13、ubuntu 10.04 Lucid)是否都启用 SMP Linux?

  2. 在 SMP Linux 上,最好遵循-a) 多进程方法与 b) 多线程方法

  3. pthread 是否默认创建内核级线程,以便任何应用程序都可以利用 LWP 和 SMP?

如果没有,如何使用 Pthreads 制作内核级线程。任何参考将不胜感激。