Heptagon 同步语言介绍

同步语言于20世纪80年代创立,用于建模、设计和实现实时关键反应系统。随着被控制系统的复杂性不断增加,执行速度成为一个重要标准。与此同时,处理器在核心数量上的增长超过了速度的提升。因此,我们正在寻求一种并行执行方式,兼顾效率和安全性。

同步语言始终将并行性纳入其建模的表达能力中。它们的编译主要针对电路或顺序代码的生成。所有这些语言都具有形式语义,使得代码的正确分布成为可能。然而,保留这种语义可能会成为生成代码效率的障碍,特别是在需要保留系统全局时间概念的情况下。

我们感兴趣的语义模型是Kahn网络的功能性数据流模型。这些网络模拟了通过无界队列进行通信的分布式计算器。在这种框架下,分布不需要任何同步或外部信息。通过考虑通信队列的历史,Kahn语义允许抽象出实际执行过程,同时保证计算的功能确定性。

在最初的三种同步语言中,只有Esterel是命令式的,而非数据流。Signal语言以建模为导向,是关系式的。Lustre是第一个功能性数据流同步语言。它的第一个指称语义已经类似于Kahn语义。Caspi和Pouzet关于同步Kahn网络的研究最终将Lustre与Kahn语义联系起来,用merge替换了current原语。这导致了高阶同步功能性语言Lucio Synchrone的诞生。

从这一脉络中诞生了Heptagon,其第一个版本名为MiniLustre,旨在通过一个极简语言进行自动机的源到源编译。Heptagon是一种一阶功能性语言,其编译器是一个学术原型,与工业工具Scade相关。后者广泛应用于设计关键嵌入式系统的行业。

得益于其Kahn语义,Heptagon程序可以类比为Kahn网络。通常,Heptagon中的每个函数调用都可以理解为一个独立的进程,通过队列与程序的其他部分进行通信。在一般模型中,队列的大小无法限制。同步语言通过时钟标记逻辑时刻的数据流存在,确保所有生成的值在同一时刻被消费。因此,Heptagon程序具有同步Kahn语义,确保网络中的队列在时刻之间为空。在这种情况下,即使网络不同步,也可以保证使用单槽队列执行。因此,一旦程序被分割,分布本身就不再是问题,其效率则更为关键。

确保效率涉及两个相互依赖的方面。首先,计算之间需要有足够的解耦:计算之间的依赖关系存在延迟。其次,计算的粒度需要足够大:计算时间与通信频率的比率要高。然而,同步语义和Heptagon程序的时钟恰恰反映了相反的情况。它们允许程序员满足于一个时刻的解耦,并且在每个时刻最多计算一个值。此外,时刻通常很短,以确保系统能够快速反应。

为了获得性能提升,工具Ocrep采用静态数据流分析来优化生成代码的控制和通信。在这种框架下,程序员决定计算的位置,但计算器之间的解耦和同步是自动的。某些SIGNAL程序的分布可以通过通用工具SYNDEx或Polychrony实现。

从这些工作中,我们得出了两个结论。

首先,我们希望程序员能够直接在源代码中控制并行性。他们必须能够掌握在哪些时刻进行通信或同步。我们提出的解决方案是在Heptagon中使用futures。它们为程序员提供了这种能力,同时仍然是可以在不改变程序指称语义的情况下删除的注解。

第二个结论是,计算的粒度是一个深刻的问题,特别是涉及数据依赖性、时钟选择和模块化编译的问题。Heptagon与其前辈一样,限制了可以编写的Kahn网络,使得这三个问题可以分别处理。为了更好地理解这些元素之间的联系,我们回到了Kahn网络。我们的主要成果是定义了有序反应网络的子类。这些网络是唯一可以通过时钟模块化描述其行为的网络,而不限制调用上下文。这些网络具有一种最大粒度的时钟签名。为了表达这一点,我们引入了整数时钟,描述在单个时刻内通信的多个值。随后,我们应用这些成果,重新审视Heptagon、SIGNAL、LUCID SYNCHRONE的策略,并提出对LUCY-n的完全模块化分析,这是最忠实于Kahn网络的同步语言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/964075.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库环境搭建

下载MySQL 官网:https://downloads.mysql.com/archives/installer/ 下载社区版就行了。 安装流程 看b站大佬的视频吧:https://www.bilibili.com/video/BV12q4y1477i/?spm_id_from333.337.search-card.all.click&vd_source37dfd298d2133f3e1f3e3c…

1.2 基于深度学习的底层视觉技术

文章目录 高层视觉任务与底层视觉任务深度神经网络相对于传统方法的优势 高层视觉任务与底层视觉任务 计算机视觉中的任务包含高层视觉任务,底层视觉任务。高层视觉任务是处理语义级别相关的任务,例如图像分类、目标检测、图像分割等。底层视觉任务处理与…

YOLOV11-1:YoloV11-安装和CLI方式训练模型

YoloV11-安装和CLI方式训练模型 1.安装和运行1.1安装的基础环境1.2安装yolo相关组件1.3命令行方式使用1.3.1 训练1.3.2 预测 本文介绍yoloV11的安装和命令行接口 1.安装和运行 1.1安装的基础环境 GPU环境,其中CUDA是12.4版本 1.2安装yolo相关组件 # 克隆github…

后盾人JS -- 原型

没有原型的对象 也有没有原型的对象 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document<…

【NEXT】网络编程——上传文件(不限于jpg/png/pdf/txt/doc等),或请求参数值是file类型时,调用在线服务接口

最近在使用华为AI平台ModelArts训练自己的图像识别模型&#xff0c;并部署了在线服务接口。供给客户端&#xff08;如&#xff1a;鸿蒙APP/元服务&#xff09;调用。 import核心能力&#xff1a; import { http } from kit.NetworkKit; import { fileIo } from kit.CoreFileK…

游戏引擎 Unity - Unity 下载与安装

Unity Unity 首次发布于 2005 年&#xff0c;属于 Unity Technologies Unity 使用的开发技术有&#xff1a;C# Unity 的适用平台&#xff1a;PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域&#xff1a;开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…

结构体DMA串口接收比特错位

发送&#xff1a; 显示&#xff1a; uint16_t接收时候会比特错位。

在线知识库的构建策略提升组织信息管理效率与决策能力

内容概要 在线知识库作为现代企业信息管理的重要组成部分&#xff0c;具有显著的定义与重要性。它不仅为组织提供了一个集中存储与管理知识的平台&#xff0c;还能够有效提升信息检索的效率&#xff0c;促进知识的创新和利用。通过这样的知识库&#xff0c;企业可以更好地应对…

e2studio开发RA2E1(4)----GPIO输出

e2studio开发RA2E1.4--GPIO输出 概述视频教学样品申请硬件准备参考程序源码下载新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置GPIO口配置R_IOPORT_PinWrite()函数原型R_IOPORT_PortWrite()函数原型代码 概述 本篇文章主要介绍如何使用e2studio对瑞萨单片机进行GP…

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之用户登录

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【Spring篇】【计算机网络】【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f3af;1.登录-持久层 &…

51单片机看门狗系统

在 STC89C52 单片机中&#xff0c;看门狗控制寄存器的固定地址为 0xE1。此地址由芯片厂商在硬件设计时确定&#xff0c;但是它在头文件中并未给出&#xff0c;因此在使用看门狗系统时需要声明下这个特殊功能寄存器 sfr WDT_CONTR 0xE1; 本案将用一个小灯的工作状况来展示看门…

【C语言入门】解锁核心关键字的终极奥秘与实战应用(三)

目录 一、auto 1.1. 作用 1.2. 特性 1.3. 代码示例 二、register 2.1. 作用 2.2. 特性 2.3. 代码示例 三、static 3.1. 修饰局部变量 3.2. 修饰全局变量 3.3. 修饰函数 四、extern 4.1. 作用 4.2. 特性 4.3. 代码示例 五、volatile 5.1. 作用 5.2. 代码示例…

springCload快速入门

原作者&#xff1a;3. SpringCloud - 快速通关 前置知识&#xff1a; Java17及以上、MavenSpringBoot、SpringMVC、MyBatisLinux、Docker 1. 分布式基础 1.1. 微服务 微服务架构风格&#xff0c;就像是把一个单独的应用程序开发为一套小服务&#xff0c;每个小服务运行在自…

Unity Shader Graph 2D - 跳动的火焰

在游戏中&#xff0c;火焰是一种常见的特效。通常来讲火焰特效通过粒子系统的方式实现的相对较多&#xff0c;本文将通过Shader Graph的方式来实现一种不同的火焰效果。 那么怎么实现呢 首先创建一个名为Fire的Shader Graph文件&#xff0c;然后创建一个名为M_Fire的材质球。 …

【工欲善其事】利用 DeepSeek 实现复杂 Git 操作:从原项目剥离出子版本树并同步到新的代码库中

文章目录 利用 DeepSeek 实现复杂 Git 操作1 背景介绍2 需求描述3 思路分析4 实现过程4.1 第一次需求确认4.2 第二次需求确认4.3 第三次需求确认4.4 V3 模型&#xff1a;中间结果的处理4.5 方案验证&#xff0c;首战告捷 5 总结复盘 利用 DeepSeek 实现复杂 Git 操作 1 背景介绍…

CommonJS

CommonJS 是由 JavaScript 社区于 2oo9 年提出的包含模块、文件、IO、控制台在内的一系列标准。Node.js 的实现中采用了 CommonJS 标准的一部分&#xff0c;并在其基础上进行了一些调整。我们所说的 CommonJS 模块和 Node.js 中的实现并不完全一样&#xff0c;现在一般谈到 Com…

AP单类平均准确率

P_true N_true P_pred TP Fp N_pred FN TNP NTP&#xff08;真正样本&#xff0c;与真实框IoU大于阈值的框&#xff09; FP&#xff08;假正样本&#xff0c;与真实框IoU小于阈值的框&#xff09; TN&#xff08;真负样本&#xff0c;背景&#xff09;…

MQTT实战之在vue和java中使用

在VUE中使用MQTT 1、创建vue项目&#xff08;使用node版本为20.12.0&#xff09; >>npm create vitelatest Need to install the following packages: create-vite6.1.1 Ok to proceed? (y) y √ Project name: ... mqtt-vue √ Select a framework: Vue √ Select a v…

oracle: 表分区>>范围分区,列表分区,散列分区/哈希分区,间隔分区,参考分区,组合分区,子分区/复合分区/组合分区

分区表 是将一个逻辑上的大表按照特定的规则划分为多个物理上的子表&#xff0c;这些子表称为分区。 分区可以基于不同的维度&#xff0c;如时间、数值范围、字符串值等&#xff0c;将数据分散存储在不同的分区 中&#xff0c;以提高数据管理的效率和查询性能&#xff0c;同时…

数据分析系列--⑥RapidMiner构建决策树(泰坦尼克号案例含数据)

一、资源下载 二、数据处理 1.导入数据 2.数据预处理 三、构建模型 1.构建决策树 2.划分训练集和测试集 3.应用模型 4.结果分析 一、资源下载 点击下载数据集 二、数据处理 1.导入数据 2.数据预处理 三、构建模型 1.构建决策树 虽然决策树已经构建,但对于大多数初学者或…