从零学习 InfiniBand-network架构(八) —— IB协议中的原子操作

news/2024/5/6 13:50:07/文章来源:https://blog.csdn.net/sz_woshishazi/article/details/127817723

从零学习 InfiniBand-network架构(八) —— IB协议中的原子操作


🔈声明:
😃博主主页:王_嘻嘻的CSDN主页
🔑未经作者允许,禁止转载
🚩本专题部分内容源于《InfiniBand-network architecture》,侵权必删

   本章将介绍IB协议中传输请求中的原子操作,并解释原子操作存在的意义以及IB协议中原子操作的具体类型与流程


什么是原子操作

  原子(atomic),在信息领域中指的就是不可分割的操作,不会因为线程调度被打断的操作。在IB协议中,原子操作指:如果一个处理器必须对特定的内存区域(例如,一个数据结构)执行一系列的两次或两次以上的访问,需确保在该处理器的一系列访问完成之前没有其他处理器访问同一内存。

  通过这种方式,原子操作的任务已经为自己保留了资源,然后可以启动一系列数据结构访问,而不必担心另一个任务成功访问该数据结构。


原子操作的意义

  假设系统中不存在原子操作:

  • 任务A在处理器A上运行,任务B在处理器B上运行;
  • 任务A必须访问共享数据结构;
  • 处理器A启动并完成一次内存读取,检查目标内存的状态,并标记该空间其它任务不可用;
  • 任务A然后执行存储指令将更新的信号量放回内存中;
  • 同时,运行在处理器B上的任务也希望访问该空间,但它可能在处理器a之前获得对信号量位置的访问权;
  • 此时,任务A和任务B现在都认为数据结构只属于它们,数据将进入无法预测的状态;

  出现上述问题将导致整个系统陷入糟糕的状态,这不是设计人员希望看到的。


  如果处理器A能够执行内存读、值测试和寄存器中的设置,以及作为原子的、不可分割的操作的内存写,并确保在原子系列访问(在本例中,是内存读和内存写)完成之前没有其他实体访问同一内存区域,那么这种情况是可以避免的。


IB协议中原子操作的类型与流程

  为了解决上述问题,IB协议提供了两种原子操作:

  • fetch and add的原子操作
  • Compare and Swap If Equal的原子操作(同Java中的CAS)

  原子操作由请求和Ack包组成,一个由请求方QP的SQ逻辑发出的原子请求包和一个由响应方QP的RQ逻辑返回的原子确认包,但是这两个数据包都不包含数据有效负载字段。操作所需的数据项在报文的AtomicETH字段中携带,AtomicETH字段包含:

  • 虚拟内存地址(VA);
  • 远程访问键(R_Key);
  • 添加数据(在Fetch和Add操作的情况下),或比较数据和交换数据(在比较和交换如果相等操作的情况下);

  IB协议规定了在接收到原子请求包时,响应端QP的RQ将其发布到特定于设备的队列中,(由硬件,而不是软件来执行),在内存读写之间的时间间隔内,CA必须阻止同一CA上的其他QP访问同一位置

以fetch and add操作为例,具体流程如下图:

  1. 从响应端内存中可被8整除的虚拟地址开始的内存中读取64-bits值;
  2. 使用请求包的AtomicETH字段中提供的64位add Data字段执行无符号添加;
  3. 将结果写回相同的虚拟地址;

在这里插入图片描述

Compare and Swap操作与fetch and add操作类似,在此就不再详细描述。




搜索关注我的公众号【IC墨鱼仔】,获取我的更多IC干货分享!

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

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

相关文章

Docker——容器命令介绍、创建Nginx容器与Redis容器

目录 一、容器命令 二、创建并运行Nginx容器 1.1 去dockerhub查看Nginx容器运行命令 1.2 怎么访问Nginx? 1.3 查看容器日志 1.4总结 三、进入Nginx容器并修改HTML内容 3.1 进入容器 3.2 进入Nginx的HTML所在目录 3.3 修改index.html文件(容器内修…

【OpenEVSE 】汽车充电桩控制项目解析

【OpenEVSE 】汽车充电桩控制项目解析1. 项目介绍2. 项目硬件3. 软件原理以及流程4. 系统结构:ESP32RAPI APIMQTT 上的 RAPI:5. SAE J1772协议简析:6. 专用充电接插件7 . 源码解析:此项目来源于openEnergyMonitor 的 openEVSE 部分&#xff0…

查阅必备----常用的SQL语句,配语句和图解超详细,不怕你忘记

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 **收录于专栏 数据库 ⭐查阅必备–常用的SQL语句⭐ 文章目录⭐查阅必备--常用的SQL语句⭐一,关键语句大全&am…

python离线安装module以及常见问题及解决方案

文章目录一,离线安装module1.1 下载module1.2 离线安装二,常见的问题2.1 模块缺少合适的适配:error: Could not find suitable distribution for Requirement.parse()2.2 install成功但发现控制台打印的最后一行显示下载module版本为0.0.0工作…

微信商城小程序怎么开发_分享微信商城小程序的搭建

如何搭建好一个微信商城?这三个功能要会用! 1.定期低价秒杀,提高商城流量 除了通过私域流量裂变,低价秒杀是为商城引流提高打开率的良好手段。 以不同节日作为嘘头,在情人节、38妇女节、中秋国庆、七夕节等日子&…

机器学习-回归模型相关重要知识点

目录01 线性回归的假设是什么?02 什么是残差,它如何用于评估回归模型?03 如何区分线性回归模型和非线性回归模型?04 什么是多重共线性,它如何影响模型性能?05 异常值如何影响线性回归模型的性能&#xff1f…

R语言结课及Matlab开始

R语言结课 我们R语言的学习这节课下课就结束了,接下来进行Matlab的学习。下面我会说一下R的结课任务及如何考试,以及我自己整理的Matlab安装教程。 R的结课作业:周二上课时提到的两个回归模型课程总结(老师说作业总结主要是作业…

通过ref进行组件间的通信

ref&#xff1a;绑定dom节点&#xff0c;拿到的就是dom对象&#xff1b; ref&#xff1a;绑定组件&#xff0c;拿到的就是组件对象&#xff1b; ref绑在dom节点上&#xff1a; //绑在dom上&#xff0c; <input type"text" ref"mytext"> <input…

SpringBoot SpringBoot 开发实用篇 6 监控 6.3 actuator

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇6 监控6.3 actuator6.3.1 actuator6.3.2 监控原理6.3.3 小结6 监控 …

IOS逆向初探

前言 这些文章用于记录学习路上的点点滴滴&#xff0c;也希望能给到刚入门的小伙伴们一点帮助。爱而所向&#xff0c;不负所心。 环境 iphone 6 MacOS Monterey 12.3.1 一、IOS开发语言 Objective-C Objective-C是iOS操作系统运用的软件开发语言。Objective-C的流行完全是因…

Flutter高仿微信-第21篇-支付-向商家付款(二维码)

Flutter高仿微信系列共59篇&#xff0c;从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图&#xff1a; 实现代码&#xff1a; /*** Author : wangning* Email : maoning20080809163.…

【Hack The Box】Linux练习-- Knife

HTB 学习笔记 【Hack The Box】Linux练习-- Knife &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月17日&#x1f334; &#x1f36…

【计算机网络】Servlet API重点知识汇总

目录 1.HttpServlet&#xff1a; 2.HttpServletRequest&#xff1a; 3.HttpServletRequest代码实例&#xff1a; 3.1.打印请求的内容&#xff1a; 3.2.获取请求中的重要参数 &#xff08;query string中的值&#xff09;&#xff1a; 3.3.获取请求中的重要参数 &#x…

用HTML+CSS仿网易云音乐网站(6个页面)_实训素材

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 音乐网页设计 | 仿网易云音乐 | 各大音乐官网网页 | 明星音乐演唱会主题 | 爵士乐音乐 | 民族音乐 | 等网站的设计与制作 | HTML期末大学生网页设计作…

【安装教程】vscode安装教程(超详细)

Visual Studio Code&#xff08;简称 VSCode&#xff09;是一款由微软开发且跨平台的免费源代码编辑器。该软件支持语法高亮、代码自动补全、代码重构功能&#xff0c;并且内置了命令行工具和 Git版本控制系统。用户可以更改主题和键盘快捷方式实现个性化设置&#xff0c;也可以…

SpringBoot SpringBoot 开发实用篇 6 监控 6.5 health 端点指标控制

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇6 监控6.5 health 端点指标控制6.5.1 问题引入6.5.2 health 端点指标…

还有人以为高并发=多线程吗?跟着大佬带你了解二者关系与区别,面试难题轻松拿下!

高并发和多线程的关系 “高并发和多线程”总是被一起提起&#xff0c;给人感觉两者好像相等&#xff0c;实则高并发≠多线程 多线程是完成任务的一种方法&#xff0c;高并发是系统运行的一种状态&#xff0c;通过多线程有助于系统承受高并发状态的实现。 高并发是一种系统运…

Android 10.0 11.0 12.0 启动模拟器教程

Android 10.0 11.0 12.0 启动模拟器教程 一、android 12.0 模拟器二、创建模拟器设备三、创建删除路经文件夹avd和配置环境变量四、启动模拟器一、android 12.0 模拟器 Android 10.0 11.0 12.0 启动模拟器都行,我选择android 12.0 模拟器 二、创建模拟器设备 第一步骤:在 …

推荐一个基于Springboot + Vue 开发的前后端分离博客

基于Springboot Vue 开发的前后端分离博客 博客介绍 本博客是参考 [风丶宇] 大佬的博客更新而成&#xff0c;感谢大佬提供的页面&#xff0c;然后定制新增部分功能&#xff0c;是个非常值得新手入门学习的Java规范化编程案例&#xff01; 在线地址 项目链接&#xff1a; h…

JVM 中类加载的链接与初始化

类加载系统&#xff0c;主要有以下部分 加载链接 验证准备解析初始化 它们每部分都做些什么事情呢&#xff1f; 加载 (2条消息) JVM 双亲委派模型_兜兜转转m的博客-CSDN博客 链接 链接-验证 一般验证部分&#xff0c;IDEA已经帮我们规范了。 验证是连接阶段的第一步&…