问题标签 [shared-memory]

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 回答
1520 浏览

multithreading - 共享内存计算机上的多线程 FFTW 3.1.2

我使用带有 Fortran 的FFTW 3.1.2 来执行实数到复数和复数到实数的 FFT。它在一个线程上完美运行。

不幸的是,当我在 32 CPU 共享内存计算机上使用多线程 FFTW 时遇到了一些问题。我有两个计划,一个用于 9 个实数到复数 FFT,一个用于 9 个复数到实数 FFT(每个实数场的大小:512*512)。我使用 Fortran 并编译(使用ifort)链接到以下库的代码:

程序似乎编译正确,函数sfftw_init_threads返回一个非零整数值,通常为 65527。

然而,即使程序运行完美,使用 2 个或更多线程也比使用 1 个要慢。一条top命令显示奇怪的 CPU 负载大于 100%(并且比 n_threads*100 大得多)。一条htop 命令显示一个处理器(假设 1 号处理器)正在以 100% 的程序负载运行,而所有其他处理器(包括 1 号处理器)都在以 0% 负载、0% 内存运行同一程序和 0 时间。

如果有人知道这里发生了什么......非常感谢!

0 投票
3 回答
6317 浏览

c++ - C++的分布式共享内存库?

我正在用 C++ 编写分布式应用程序框架。要求之一是提供分布式共享内存。与其从头开始编写我自己的(并且可能重新发明轮子),我想我会看看是否有任何预先存在的开源库 - 快速的谷歌搜索并没有产生任何有用的东西。

这里有没有人有任何他们可以推荐的好的 C++ DSM 库的经验?

理想情况下,该库将支持 MRMW(多读/多写),但如果需要,我可以使用 MRSW(多读,单写)。我正在Linux上开发。

0 投票
2 回答
735 浏览

c++ - 与多个进程共享连接和数据的最快方法?

我有多个应用程序进程,每个进程都连接到服务器并从它们接收数据。通常,连接到的服务器和正在检索的数据在进程之间重叠。因此,整个网络中存在大量不必要的数据重复,超出应有的连接数量(这会对服务器造成负担),并且数据最终会冗余地存储在应用程序的内存中。

一种解决方案是将多个应用程序进程组合成一个进程——但在大多数情况下,它们在逻辑上确实是不同的,这可能需要多年的工作。

不幸的是,延迟非常重要,并且数据量很大(任何一个数据都可能不会太大,但是一旦客户端发出请求,服务器就会随着数据的变化发送快速的更新流,这可能超过20MB/s,所有这些都需要以尽可能短的延迟提供给请求的应用程序)。

想到的解决方案是编写一个本地守护进程,应用程序进程将从中请求数据。守护进程将检查是否已经存在与适当服务器的连接,如果不存在则建立连接。然后它会检索数据并使用共享内存(由于延迟问题,否则我会使用套接字)将数据提供给请求的应用程序。

短期内只解决冗余连接的一个更简单的想法是使用 unix 域套接字(这将在 unix 操作系统上运行,尽管我更喜欢在可能的情况下坚持使用跨平台库)在所有进程,因此它们共享一个连接。这样做的问题是消耗缓冲区——我希望所有进程都能看到来自套接字的所有内容,如果我对这种方法的理解正确,则在套接字上的一个进程中读取将阻止其他进程在其上看到相同的数据下一次读取(共享描述符中的偏移量将被碰撞)。

0 投票
2 回答
1172 浏览

mpi - 共享内存设置中的 MPI 开销

我想并行化一个程序。在共享内存中处理一个大数据结构的线程并不难。但是我希望能够在集群上使用它,我必须选择一种技术来做到这一点。MPI 是一种想法。

问题是如果我跳过共享内存专用版本的实现并让 MPI 处理所有情况,MPI(或其他技术)会有什么开销?

更新:

我想在多台计算机上同时增长一个大型数据结构(游戏树)。它的大部分将仅在一个集群节点上,但其中一些(树的不规则顶部)将不时共享和同步。

在共享内存机器上,我想通过共享内存来实现这一点。这可以通用吗?

0 投票
1 回答
3361 浏览

c++ - C++ Read from shared memory

I want to read status information that an application provides via shared memory. I want to use C++ in order to read the content of that named shared memory and then call it with pinvoke from a C#-class.

From the software I know that it has a certain file structure: A struct STATUS_DATA with an array of four structs of SYSTEM_CHARACTERISTICS.

I'm not (yet) familiar with C++, so I tried to follow msdn basically. To find the size of the file to be mapped, I added the sizes of the struct members as to be seen in the code below. This results in a ACCESS DENIED, so I figured, that the result based on the structs is too high. When I use sizeof(STATUS_DATA) (I added the struct to my source), it still ends up in an ACCESS DENIED. If I try something lower, like 1024 Bytes, only thing I can see in pbuf is a <, while debugging.

This is what I got so far:

I also made sure that this Shared Mem "is there" by following that hint. Can somebody give me a hint, what I'm missing? Thanks!

0 投票
1 回答
1181 浏览

multithreading - 原子操作在进程间的工作方式是否与它们在线程间的工作方式相同?

显然,原子操作确保不同的线程不会破坏一个值。但是,当使用共享内存时,跨进程是否仍然如此?即使这些进程碰巧被操作系统安排在不同的内核上运行?还是跨不同的不同 CPU?

编辑:另外,如果它不安全,即使在像 Linux 这样的操作系统上也不安全,从调度程序的角度来看,进程和线程是相同的?

0 投票
2 回答
1054 浏览

c++ - 无法解释的 Linux System V IPC 共享内存段被标记为销毁

我有一个 Linux System V IPC 共享内存段,它由一个进程填充并由许多其他进程读取。所有进程都以类的形式使用共享内存段的接口,该类负责查找、附加和分离到段,作为其构造函数/析构函数方法的一部分。

这里的问题是,我不时看到该段已“拆分”。我的意思是,查看“ipcs -m -s”输出,我看到我列出了两个部分:一个已标记为销毁但仍附加一些进程,另一个似乎获取所有新尝试附加到该段。但是,我从来没有真正要求内核销毁该段。这里发生了什么事?!

需要注意的另一件事是,不幸的是,运行此系统的系统在内存部门中严重过度使用。有 1 GB 的物理内存,没有交换,/proc/meminfo 中的 Committed_AS 报告大约 2.5 GB 的已提交内存。幸运的是,系统进程实际上并没有使用这么多内存......他们只是要求它(我仍然有大约 660MB 的“空闲”内存,正如 vmstat 报告的那样)。虽然我知道这远非理想,但目前我对过度使用的内存无能为力。但是,浏览内核/libc 源代码时,除了用户请求之外,我没有看到任何将共享内存段标记为删除的内容(但也许我错过了隐藏在某处的地方)。

以下是共享内存接口类的构造函数供参考:

这是我的 uname 输出:Linux 2.6.18-5-686 #1 SMP Fri Jun 1 00:47:00 UTC 2007 i686 GNU/Linux

0 投票
1 回答
12615 浏览

shared-memory - 共享内存与分布式内存和多线程与多进程

我正在自学并行编程。我想知道分布式内存是否总是多进程而多线程总是共享内存?如果多进程既可以用于分布式内存,也可以用于共享内存?谢谢并恭祝安康!

0 投票
2 回答
2653 浏览

winapi - Interlocked* 函数对共享内存有用吗?

两个 Windows 进程将内存映射到同一个共享文件。如果文件包含计数器,是否适合使用Interlocked*函数(如InterlockedIncrement)来更新这些计数器?那些会跨进程同步访问吗?还是我需要使用更重的东西,比如互斥体?或者也许共享内存机制本身可以确保一致的视图。

0 投票
2 回答
1742 浏览

c - 按名称列出 Solaris 上的共享内存对象

我可以使用 ipcs(1) 列出 Solaris 10 机器上的活动共享内存对象,但它通过键列出它们。不过,我正在通过 shm_open(3) 打开对象,它采用字符串作为名称来识别对象。有没有办法按名称列出共享内存对象,或者只获取键<->名称映射?我最感兴趣的是从命令行运行的东西,尽管这样做的 API 也可以。谢谢!