Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
有没有办法在同一台计算机上的MATLAB进程之间共享内存?
我正在多核计算机上运行几个MATLAB进程(如果重要,请运行Windows)。它们都使用相同的巨大输入数据。最好在内存中只有一个副本。 编辑:不幸的是,每个过程都需要访问整个巨大的输入数据,因此无法分割数据并解决问题。 回答: 如果进程仅读取数据, 而不修改数据,那么我相信您可以将输入数据放入一个大文件中,并使每个进程打开并从该文件中读取数据。每个进程都有其自己的文件位置指示器,可以将其移动到文件中的任何位置以读取所需的数据。我测试了两个MATLAB进程同时从一个文件中读取一百万次左右,并且一切似乎都工作正常。我只使用了基本文件I / O命令(在下面列出)。似乎您也可以使用MEMMAPFILE来执行此操作,就像Fooz先生在他的回答中提到的(和SCFrench在评论中)一样,假设您使用的是MATLAB版本R2008a或更高版本。 这是您可能会使用的一些文件I / O命令:
如果流程还必须修改数据,则可能会变得更加困难。通常,您不希望文件/内存位置同时由多个进程写入,或者不希望一个进程同时另一个进程从同一位置读取而被一个进程写入,因为这会导致不必要的行为。在这种情况下,您将必须限制对文件的访问,以便一次只能对一个进程进行操作。其他过程将不得不等到第一个完成。在这种情况下,每个进程必须运行的示例代码版本为: processDone = false; while ~processDone, if file_is_free(), % A function to check that other processes are not % accessing the file fid = fopen(fileName,'r+'); % Open the file perform_process(fid); % The computation this process has to do fclose(fid); % Close the file processDone = true; end end 诸如此类的同步机制(“ 锁 ”)有时可能会具有较高的开销,从而降低了代码的总体并行效率。 更多&回答... |
![]() |
![]() |