热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Matlab并行计算确保parfor循环或spmd语句透明性

parfor循环或spmd块的主体必须是透明的。透明性意味着所有对变量的引用必须在代码的文本中可见。在下面的例子中,变量X没有转移到workers。只有字符向量’X

parfor循环或spmd块的主体必须是透明的。透明性意味着所有对变量的引用必须在代码的文本中可见。

在下面的例子中,变量X没有转移到workers。只有字符向量’X’被传递给eval,并且X在循环或块体中不作为输入变量可见。因此,MATLAB®在运行时出现错误。

X = 5;
parfor ii = 1:4eval('X');
end

X = 5;
spmdeval('X');
end

类似地,您不能通过在parfor或spmd语句中执行clear来清除工作空间中的变量:

parfor ii &#61; 1:4<statements...>clear(&#39;X&#39;) % cannot clear: transparency violation<statements...>
end

spmd; clear(&#39;X&#39;); end

或者&#xff0c;可以在不再需要变量时将其值设置为空&#xff0c;从而释放该变量所使用的内存。

parfor ii &#61; 1:4<statements...>X &#61; [];<statements...>
end

对于spmd块&#xff0c;可以从客户机工作区中清除它的组合。

一般来说&#xff0c;透明性的要求限制了对变量的所有动态访问&#xff0c;因为在任何给定的worker中可能不存在整个变量。在透明工作区中&#xff0c;如果没有在代码中显式地指定变量&#xff0c;则不能创建、删除、修改、访问或查询变量。

其他违反parfor循环透明性的行为或函数的例子包括:

谁和谁

evalc、evalin和assignin与工作区参数指定为“caller”

保存并加载&#xff0c;除非加载的输出被分配给变量

如果一个脚本试图读取或写入父工作区的变量&#xff0c;那么运行这个脚本可能会导致透明性冲突。为了避免这个问题&#xff0c;可以将脚本转换为函数&#xff0c;并使用必要的变量作为输入或输出参数来调用它。

请注意

透明性只应用于parfor或spmd构造的直接体&#xff0c;而不应用于从那里调用的任何函数。保存和加载的解决方法是在函数中隐藏保存和加载的调用。

MATLAB确实成功地执行了出现在parfor主体中调用的函数中的eval和evalc语句。

并行仿真软件模拟

您可以使用parsim命令并行运行Simulink®模型&#xff0c;而不是使用parfor循环。有关并行使用Simulink的更多信息和示例&#xff0c;请参见运行多个模拟(Simulink)。

如果您的Simulink模型需要访问包含在.mat文件中的变量&#xff0c;则必须将这些参数加载到每个worker的工作空间中。您必须在parpool打开之前和之后执行此操作。要实现这一点&#xff0c;可以使用spmd或parfevalOnAll&#xff0c;如示例所示。

spmd evalin(&#39;base&#39;, &#39;load(&#39;&#39;path/to/file&#39;&#39;)&#39;)
end

parfevalOnAll(&#64;evalin, 0, &#39;base&#39;, &#39;load(&#39;&#39;path/to/file&#39;&#39;)&#39;)

如果您的模型还需要在MATLAB脚本主体中定义的变量&#xff0c;则必须在每个parfor迭代中使用assignin或evalin将这些变量移动到每个worker的基本工作空间。


推荐阅读
  • [论文笔记] Crowdsourcing Translation: Professional Quality from Non-Professionals (ACL, 2011)
    Time:4hoursTimespan:Apr15–May3,2012OmarZaidan,ChrisCallison-Burch:CrowdsourcingTra ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 本文详细解释了如何使用@IfProfileValue注解来检测Spring框架中的配置文件是否处于活动状态,并探讨其与@Profile和@activeProfiles的区别。 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
author-avatar
手机用户2502920591_700
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有