0

我有一个应用程序,其中有 3 个不同的进程需要在 Windows 上以 3 种不同的语言同时运行:

  • 与传感器阵列接口的“数据收集”过程。传感器阵列的开发人员非常友好地向我们提供了他们的 C# 源代码,我可以对其进行修改。这应该生成原始数据并将其推入共享内存
  • “后处理”过程。这是使用 CUDA 尽可能快地完成处理的 C++ 代码。这应该是获取原始数据,将其移动到 GPU,然后从 GPU 获取结果并将其传达给——
  • 用 Matlab 编写的反馈控制器,它获取后处理的结果并使用它来决定如何控制机械系统。

我已经完成了关于并行编程的课程,但是这些课程都在 Linux 中工作,我使用了mmap.h多个进程之间的协调。这对我来说很有意义——您要求操作系统将虚拟内存中的一个页面映射到共享物理内存地址,然后操作系统会为您提供一些共享内存。

谷歌搜索,似乎在 Windows 中的进程之间设置共享内存的首选方法(事实上,在 Matlab 中这样做的唯一“简单”方法)是使用内存映射文件,但这对我来说似乎完全是疯狂的。如果我理解正确,内存映射文件会占用一些磁盘空间并将其映射到物理地址空间,然后将其映射到访问同一内存映射文件的任何进程的虚拟地址空间。

这似乎比仅让多个进程将其虚拟地址空间中的页面映射到同一物理内存所需的复杂度高出三倍。我觉得我不应该为我想要完成的事情做任何与磁盘 I/O 远程相关的事情,特别是因为性能对我来说是一个大问题(理想情况下我应该能够每秒处理 1000 组数据,尽管这不是硬性限制)。这真的是协调我的流程的正确方法吗?

4

0 回答 0