shared-memory相关内容

在 Python 多处理中将 Pool.map 与共享内存数组结合起来

我有一个非常大的(只读)数据数组,希望由多个进程并行处理. 我喜欢 Pool.map 函数,并希望使用它来并行计算该数据上的函数. 我看到可以使用 Value 或 Array 类在进程之间使用共享内存数据.但是当我尝试使用它时,我得到一个 RuntimeError: 'SynchronizedString objects should only be shared between pr ..
发布时间:2022-01-12 12:07:29 Python

进程VS线程:两个进程可以共享相同的共享内存吗?两个线程可以吗?

在思考了共享内存的整个概念之后,提出了一个问题: 两个进程可以共享同一个共享内存段吗?两个线程可以共享同一个共享内存吗? 仔细考虑之后,我几乎肯定两个进程可以共享同一个共享内存段,其中第一个是父亲,第二个是儿子,这是用 fork 创建的() ,但是两个线程呢? 谢谢 解决方案 两个进程可以共享同一个共享内存段吗? 是和不是.通常在现代操作系统中,当另一个进程从第 ..

何时真正需要填充共享内存?

我对来自 NVidia 的 2 个文档感到困惑.“CUDA 最佳实践"描述了共享内存是按银行组织的,通常在 32 位模式下,每 4 个字节就是一个银行(这就是我的理解).然而 Parallel Prefix Sum (Scan) with CUDA 详细介绍了应该如何填充由于银行冲突,添加到扫描算法中. 对我来说问题是,这个算法的基本类型是浮点数,它的大小是 4 个字节.因此每个浮点数都是一 ..
发布时间:2022-01-10 16:17:02 其他开发

如何使用 cuda 沿行方向对巨大的 2D 矩阵执行缩减?(每行的最大值和最大值的索引)

我正在尝试沿二维矩阵的行方向进行缩减.我从在 stackoverflow 上找到的代码开始(非常感谢 Robert!) thrust::max_element 比较慢cublasIsamax - 更高效的实施? 上面的链接显示了一个在单行上执行归约的自定义内核.它将输入行分成许多行,每行有 1024 个线程.效果很好. 对于 2D 情况,除了现在有一个 y 网格维度之外,一切都相 ..
发布时间:2022-01-10 15:32:14 其他开发

madvise(___, ___, MADV_DONTNEED) 是否指示操作系统懒惰地写入磁盘?

假设我想对一个可能非常大的文件执行顺序写入. 如果我 mmap() 一个巨大的区域并在整个区域上使用 madvise(MADV_SEQUENTIAL),那么我可以以相对有效的方式写入内存.我已经开始工作了. 现在,为了在我编写时释放各种操作系统资源,我偶尔会在已经写入的小块内存上执行 munmap().我担心 munmap() 和 msync() 会阻塞我的线程,等待数据物理提交到磁盘 ..
发布时间:2022-01-04 22:29:25 服务器开发

如何使用共享内存在两个进程之间进行通信

我正在尝试在两个进程之间进行通信.我正在尝试在一个进程中将数据(如姓名、电话号码、地址)保存到共享内存中,并尝试通过其他进程打印该数据. process1.c #include #include #include int主(){int segment_id;char* shared_memory[3];int 段大小;key_t shm_key;国际我= 0;const int share ..
发布时间:2022-01-02 19:34:19 其他开发

在两个应用程序之间共享内存

我有两个不同的 Windows 应用程序(两个不同的人编写代码).一种是用 C++ 编写的,另一种是用 C# 编写的.我需要一些方法来在它们之间共享 RAM 中的数据.一个必须写入数据,另一个只读取写入的数据.我应该使用什么来使其最有效和快速?谢谢. 解决方案 您可以使用 内存映射文件. 这里 是一篇描述如何使用它们的文章. ..
发布时间:2022-01-02 18:54:16 C#/.NET

使用 numpy 数组和共享内存并行化 python 循环

我知道有关此主题的几个问题和答案,但尚未找到对此特定问题的满意答案: 在其中通过 numpy/scipy 函数操作 numpy 数组的 Python 循环中执行简单共享内存并行化的最简单方法是什么? 我不是在寻找最有效的方法,我只是想要一些简单的实现,当循环不并行运行时不需要大量重写.就像 OpenMP 在低级语言中实现一样. 我在这方面看到的最佳答案是这个,但这是一种相当笨拙的 ..

序列化原始 boost::variant 是否安全?

boost::variant 声称它是一种值类型.这是否意味着简单地写出 boost::variant 的原始表示并稍后加载它是安全的,只要它只包含 POD 类型?假设它将由相同编译器和相同版本的 boost 编译的代码在相同的架构上重新加载. 另外,(可能)等价地,boost::variant 可以用在共享内存中吗? 解决方案 关于序列化:它应该有效,是的.但是为什么不使用boos ..
发布时间:2021-12-24 15:36:17 C/C++开发

制作 boost::interprocess 共享内存对象的非共享副本

我已经实现了各种旨在用于boost::interprocess 共享内存段的类.他们所有的构造函数都使用 allocator 引用——有些在我写的定义中是明确的(比如下面的 Foo 构造函数),有些只是因为这就是 boost 容器定义要求,在 boost 库代码中,我不应该更改(如下面的 IndexVector). #include #include ..
发布时间:2021-12-24 15:26:07 C/C++开发

想要有效地克服 Boost.Interprocess 共享内存中映射中键类型之间的不匹配

我正在使用 Boost.Interprocess 在共享内存中创建一个映射(在本例中从字符串到字符串).编译器似乎想强迫我在从地图检索期间分配内存托管段只是为了(不必要地)包含查询词. 我希望能够通过将映射的键与已经在非共享内存中的实例进行匹配,更有效地在共享映射中查找值,而无需执行此额外分配.但它如果我尝试使用 std::string 或 const char * 作为映射的 find 方 ..
发布时间:2021-12-24 15:13:30 C/C++开发

如何在 C 中与 Linux 一起使用共享内存

我的一个项目有点问题. 我一直试图找到一个有据可查的示例,该示例将共享内存与 fork() 一起使用,但没有成功. 基本上的情况是,当用户启动程序时,我需要在共享内存中存储两个值:current_path,它是一个 char* 和一个 file_name 也是 char*. 根据命令参数,使用 fork() 启动一个新进程,该进程需要读取和修改存储在共享内存中的 current_ ..
发布时间:2021-12-02 08:03:31 服务器开发

在 Delphi 中的两个应用程序之间共享数据数组

我想在两个应用程序之间共享数组数据.在我看来,第一个程序创建数组,第二个程序可以从已经分配的内存区域读取数组.该数组不是动态数组. 我找到了一种使用 OpenFileMapping 和 MapViewOfFile 来共享指针的方法.我没有实现数组共享的运气,我想我还不想使用 IPC 方法. 有没有可能规划这样的方案(共享数组)?我的目的是尽量减少内存使用和快速读取数据. 解决方案 ..
发布时间:2021-11-18 04:09:08 其他开发

PCIe 总线上的写入是原子的吗?

我是 PCIe 的新手,所以这可能是一个愚蠢的问题.这似乎是询问有关 PCIe 接口的相当基本的信息,但我很难找到答案,所以我猜我遗漏了一些使答案显而易见的信息. 我有一个系统,其中有一个 ARM 处理器(主机)通过 PCIe(设备)与 Xilinx SoC 通信.SoC 内的端点也是 ARM 处理器. 外部 ARM 处理器(主机)将通过 PCIe 写入 SoC 的 ARM 处理器(设 ..
发布时间:2021-11-17 22:19:59 其他开发

“unlink()"在 Windows 上的 Python 共享内存中不起作用

我正在使用 Python 3.8 的新 shared_memory 模块并且无法在不终止使用它的进程的情况下释放共享内存. 在创建和使用共享内存块shm后,我在所有进程中通过shm.close()关闭它,最后通过shm释放它.在主进程中取消链接.但是,资源监视器显示内存在程序终止之前不会释放.这对我来说是一个严重的问题,因为我的程序需要运行很长时间.可以使用以下程序在 Windows/Pyt ..
发布时间:2021-09-25 20:28:50 Python