计算机体系结构:向量体系结构介绍

向量体系结构介绍

什么是向量?

在计算机体系结构,"向量"(vector)是指一个由多个相同类型且逻辑上相关的数据元素组成的有序集合。这些元素可以是整数、浮点数、布尔值或其他数据类型,它们在内存中连续存储,共同构成一个一维数组结构。向量处理器旨在高效处理大量数据的并行运算。

元素同质:向量中的所有元素具有相同的类型和大小。

一个双精度浮点数向量包含若干个连续存储的双精度浮点数。

连续存储:向量中的元素在内存中按顺序排列,相邻元素之间的地址差异固定(即元素间间隔等于元素大小)。这种布局有利于通过一次内存访问获取或写入多个连续数据,充分利用现代存储系统的带宽优势。

长度可变:虽然向量的长度通常在硬件设计时有一定限制(如VMIPS架构中默认为64个元素),但在软件层面,向量的长度可以根据实际应用需求动态变化。向量处理器通常支持处理不同长度的向量,通过向量长度寄存器来指定当前操作的有效元素数量。

并行处理:向量处理器设计的核心理念是同时对向量中的所有元素执行相同的运算。一条向量指令能够对整个向量的所有元素进行操作,如加法、乘法、比较、逻辑运算等。

向量化编程模型:向量体系结构支持向量化编程,即编写针对向量数据的操作代码。程序员可以通过高级语言的向量化库或特定的向量编程语言(如Fortran、OpenCL、CUDA等)来编写高效利用向量硬件的代码。编译器会负责将向量化代码转换为底层的向量指令序列。

所以向量我的理解可以看成C语言中的一个存放数的长度固定的数组。(比如泰勒展开式中的所有系数需要使用向量存储,也就是一个浮点数数组。)

向量体系结构是指指向向量并行运算的体系结构,具有一下的特点:

(1)大型顺序寄存器堆:向量处理器包含一组容量远大于传统CPU寄存器的大规模寄存器堆。这些寄存器可以同时存储一个数据向量的所有元素。这样设计使得处理器能够在单一指令周期内对整个向量的所有元素进行相同的操作。

(2)单条指令对向量操作:向量处理器支持向量化指令,即一条指令就能对寄存器堆中的所有数据元素执行相同的操作。对于一个包含64个元素的向量,只需一条指令就能完成64次“寄存器-寄存器”操作。这些操作可以包括算术运算(加、减、乘、除)、逻辑运算、比较等。

(3)隐藏存储器延迟:由于内存访问速度相对于处理器内部操作速度而言较慢,因此向量体系结构通过利用大型寄存器堆作为编译器管理的缓冲区来隐藏存储器访问延迟。当处理器需要访问内存中的数据时,它会以向量的形式批量加载多个连续数据元素到寄存器堆中。同样,处理完的结果也会以向量形式一次性写回内存。这种批量数据传输方式减少了与内存交互的次数,从而降低了总体的存储器访问延迟影响。

(4)流水线化向量载入和存储:向量处理器通常会对向量载入和存储操作进行流水线化处理。

尽管单次向量载入或存储可能需要较长的存储器延迟时间,但由于这些操作能够并行启动和独立执行,所以在等待某一批数据载入的同时,处理器可以继续处理已载入的数据或者启动下一批数据的载入。

(5)充分利用存储器带宽:由于向量处理器以批量方式访问内存,每次操作涉及大量数据元素,因此它能更好地利用现代存储系统的高带宽特性。相比传统的逐元素访问方式,向量访问模式能更充分地填满数据总线,实现更高的数据吞吐率,使存储器保持繁忙状态,进一步提升整体性能。

VMIPS架构

该架构融合了MIPS标量处理器和其逻辑向量扩展,形成一个混合型指令集体系结构。

1.向量寄存器:

(1)数量与容量:VMIPS包含8个向量寄存器,每个寄存器能存储64个元素,每个元素宽度为64位。这意味着每个向量寄存器可容纳总共64 × 64 = 4096位的数据,适用于存储大规模并行计算所需的大量数值数据。

(2)端口与重叠操作:为了支持高效的数据传输,向量寄存器堆提供了充足的端口,确保数据能被馈送到所有向量功能单元。

2.向量功能单元

(1)数量与功能:VMIPS拥有5个向量功能单元,每个单元完全实现了流水线化设计,能在每个时钟周期开始一个新的操作。这些功能单元专用于执行向量数据的算术、逻辑、比较等操作。

(2)冒险检测:为了保证正确执行和避免潜在的错误,有一个控制单元负责检测两种类型的冒险:结构性冒险(如资源冲突)和数据冒险(如依赖于未完成计算结果的指令)。控制单元通过适当的调度和转发机制来解决这些问题,确保指令流水线的稳定运行。

3. 向量载入/存储单元

(1)功能:此单元负责在向量寄存器与主存储器之间进行向量数据的载入和存储。它是完全流水线化的,意味着在初始延迟(如存储器访问延迟)之后,可以以每个时钟周期一个字(64位)的速率在两者之间传输数据。这种设计有助于减少存储器访问瓶颈,提高数据吞吐率。

(2)标量处理:除了处理向量数据,该单元还负责标量数据的载入和存储操作。此外,它还能计算向量载入/存储操作所需的内存地址,可能利用来自标量寄存器堆的信息。

4. 标量寄存器集合

(1)量寄存器堆包含了MIPS架构的典型配置,即32个通用寄存器和32个浮点寄存器,用于存储和处理非向量(即标量)数据。

(2)标量寄存器不仅能为向量功能单元提供数据输入,参与向量运算,还用于计算向量载入/存储操作所需的内存地址。当向量功能单元从标量寄存器堆读取标量值时,会锁定这些值以确保数据一致性。

VMIPS架构的指令

在VMIPS架构中,向量运算指令的设计与标量MIPS指令紧密相关,但通过特定的后缀加以区分,以适应向量数据的处理需求。

向量指令命名

向量运算指令名称与对应的标量MIPS指令相同,但在末尾添加了字母“VV”,以表示这是一个针对向量数据的操作。

例如,标量MIPS指令中的“ADD.D”(双精度浮点数加法)在VMIPS中对应为“ADVV.D”,表示对两个双精度向量进行加法运算。

向量运算输入源

向量运算的输入源可以是一对向量寄存器。

例如,“ADDVV.D”指令表示将两个双精度向量寄存器中的对应元素相加。

向量运算的输入源也可以是一个向量寄存器和一个标量寄存器,此时通过在指令名称后附加“VS”来标识。

例如,“ADDVS.D”指令表示将一个双精度向量寄存器中的每个元素分别加上一个标量寄存器中的相同值。这种情况下,向量功能单元在执行指令时会获取标量值的一个副本,并将其与向量寄存器中的每个元素进行相应操作。

向量运算结果

大多数向量运算会产生一个新的向量结果,该结果通常存储在一个向量目标寄存器中。

例如,上述的“ADDVV.D”和“ADDVS.D”指令都会将运算结果写回到指定的向量寄存器。

部分向量运算可能产生一个标量结果,而非向量。这类运算通常涉及到对向量数据的某种汇总或统计操作(如人口计数),其结果会被存储在标量寄存器中。

在VMIPS架构中,向量载入和存储操作分别由指令“LV”和“SV”表示,它们专门用于高效地从存储器中载入或向存储器中写入整个双精度数据向量。

LV(向量载入):LV指令有两个操作数。第一个操作数是要载入数据的目标向量寄存器,即将从存储器中读取的双精度数据向量存储到该向量寄存器中。第二个操作数是一个MIPS通用寄存器,它存放的是该向量在主存储器中的起始地址。这意味着,处理器将从指定地址开始,连续读取双精度数据,直到填满目标向量寄存器(默认情况下为64个元素)。

SV(向量存储):SV指令同样有两个操作数。第一个操作数是要写入存储器的源向量寄存器,即从该向量寄存器中取出双精度数据向量并写入存储器。第二个操作数也是一个MIPS通用寄存器,它存放的是存储器中目标区域的起始地址。处理器将从源向量寄存器中依次取出双精度数据,按照指定地址连续写入存储器,直至完成整个向量的存储。

VMIPS架构中还引入了两个额外的通用寄存器

(1)向量长度寄存器:当向量长度不等于默认的64个元素时,可以使用向量长度寄存器来指定实际的向量长度。在执行LV或SV指令时,处理器会根据该寄存器中的值来确定实际需要载入或存储的元素数量,而非默认的64个。这样,即使向量大小变化,也能确保正确且高效地处理数据。

(2)向量遮罩寄存器:在涉及循环中的条件分支(如IF语句)时,向量遮罩寄存器用于指示哪些向量元素应参与当前的运算或存储操作。遮罩寄存器中的每一位对应向量中的一个元素,若该位为1,则对应的元素参与操作;若为0,则元素被忽略。通过这种方式,程序员可以在循环中根据特定条件动态选择向量中的部分元素进行处理,无需中断向量流水线,从而保持高效的向量计算性能。

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

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

相关文章

SpringSecurity + Oauth2 + jwt实现单点登录

文章目录 前言一、springsecurity oauth2 redis方式的缺点二、oauth2认证的4种模式的选择三、认证服务器的编写 第一步、创建WebSecurity配置类第二步、创建jwt仓库配置类第三步、创建UserDetailsService类第四步、创建认证服务器配置类 四、测试认证服务器的功能 1.创建Login…

墨水屏技术在工业智能化领域的创新应用

墨水屏技术在工业智能化领域的创新应用 随着科技的快速发展,各种显示技术层出不穷,其中墨水屏作为一种独特的显示技术,逐渐在工业领域展现出其独特的优势和价值。墨水屏以其低功耗、高对比度和阅读舒适度高等特点,正成为工业应用…

uniapp-css多颜色渐变:左右+上下

案例展示 案例代码&#xff1a; 代码灵感&#xff1a;使用伪类进行处理 <view class"headBox"></view>.headBox {height: 200rpx;background: linear-gradient(to right, #D3D5F0, #F0DCF3, #F7F6FB, #DAE8F2, #E1D3EE);position: relative; }.headBox…

【C++】哈希思想

目录 哈希介绍&#xff1a; 一&#xff0c;位图 1-1&#xff0c;位图的认识 1-2&#xff0c;位图的简单实现 1-3&#xff0c;位图的应用 二&#xff0c;布隆过滤器 2-1&#xff0c;布隆过滤器的认识 2-2&#xff0c;布隆过滤器的简单实现 2-3&#xff0c;布隆过滤器的…

3d设计网站有哪些(1)?渲染100邀请码1a12

做3d设计需要各类资源&#xff0c;比如模型、材质、贴图等&#xff0c;如果这些都要自己做会非常麻烦&#xff0c;所幸现在有网站可以下载&#xff0c;有的免费有的收费&#xff0c;这篇文章我就先分享几个给有需要的朋友看看吧。 1、Pikbest Pikbest成立于2018年7月12日&…

万辰集团如何破局“增收不增利”的困境?

在波澜不惊的食用菌加工行业&#xff0c;万辰集团&#xff08;300972.SZ&#xff09;曾是一名平凡的参与者。2021年战略转型的号角吹响&#xff0c;万辰集团挥别了传统业务&#xff0c;转而投身于快速增长的量贩零食市场&#xff0c;并迅速扩张到成为这一领域的重要玩家。万辰的…

TDSQL手动调整备份节点或冷备节点

一、背景描述 近期TDSQL数据库备份不稳定&#xff0c;有些set实例的备份任务未自动发起。经排查分析&#xff0c;存在多个set实例容量已经超过TB级别&#xff0c;且冷备节点都是同一台。因此&#xff0c;需要手动将当前备份节点改到其他备节点&#xff0c;开启增量备份&#x…

C语言笔试题之重排链表

重排链表 实例要求 1、给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln2、请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …3、不能只是单纯的改变节点内部的值&#xff0c;而是…

高级STM32应用开发:使用HAL库和RTOS

引言 STM32系列微控制器以其高性能、丰富的外设支持和低功耗特性&#xff0c;在工业、汽车及消费电子市场中占有显著地位。 下面我们旨在探讨STM32的高级开发技术&#xff0c;包括硬件抽象层&#xff08;HAL&#xff09;库的使用和实时操作系统&#xff08;RTOS&#xff09;的…

python批量删除文件

python批量删除文件 1、查询与删除2、添加模块到地址中3、批量删除多个路径中不需要导出的文件 1、查询与删除 mport osdef get_files_in_folder(folder_path):files []for file in os.listdir(folder_path):if os.path.isfile(os.path.join(folder_path, file)):files.appen…

Kafka 生产者应用解析

目录 1、生产者消息发送流程 1.1、发送原理 2、异步发送 API 2.1、普通异步发送 2.2、带回调函数的异步发送 3、同步发送 API 4、生产者分区 4.1、分区的优势 4.2、生产者发送消息的分区策略 示例1&#xff1a;将数据发往指定 partition 示例2&#xff1a;有 key 的…

大数据—数仓分层概论

数据仓库&#xff08;Data Warehouse&#xff09;是一个用于集成和存储大量数据的系统&#xff0c;旨在支持企业的决策制定过程。它是一个面向主题的、集成的、非易失的数据集合&#xff0c;用于支持管理决策制定过程。数据仓库的发展源于企业对数据分析和决策支持的需求&#…

tcp服务器端与多个客户端连接

如果希望Tcp服务器端可以与多个客户端连接&#xff0c;可以这样写&#xff1a; tcpServernew QTcpServer(this);connect(tcpServer,SIGNAL(newConnection()),this,SLOT(onNewConnection())); void MainWindow::onNewConnection() {QTcpSocket *tcpSocket;//TCP通讯的Sockettcp…

Linux系统安全及应用(1)

目录 一.账号安全控制 系统账号清理 二.密码安全控制 密码安全控制 三.命令历史限制 命令历史限制 四.限制su切换用户 1&#xff09;将信任的用户加入到wheel组中 2&#xff09;修改su的PAM认证配置文件 ​编辑五.PAM认证的构成 六.使用sudo机制提升权限…

PT Application Inspector 4.5 (Linux) - 静态、动态和交互式应用程序安全测试

PT Application Inspector 4.5 (Linux) - 静态、动态和交互式应用程序安全测试 唯一一款提供高质量分析和便捷工具以自动确认漏洞的源代码分析器 请访问原文链接&#xff1a;PT Application Inspector 4.5 (Linux) - 静态、动态和交互式应用程序安全测试&#xff0c;查看最新…

自定义一个RedisTemplate

1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis&…

【09-选择合适的评估指标:Scikit-learn中的性能度量】

文章目录 前言1. 了解评估指标的重要性2. 分类问题的评估指标准确率精确率和召回率F1分数混淆矩阵ROC曲线和AUC3. 回归问题的评估指标均方误差(MSE)均方根误差(RMSE)平均绝对误差(MAE)R分数4. 如何选择评估指标5. 使用Scikit-learn选择评估指标结论前言 在机器学习中,评…

跳出框架:Facebook的创新策略与社交影响

1. 引言 在数字化时代&#xff0c;社交媒体如同一面镜子&#xff0c;反映出我们社会的多元性和变革。Facebook&#xff0c;作为这面镜子中最明亮的一个&#xff0c;不仅改变了人们的日常生活&#xff0c;更深刻地塑造了社交、文化和经济的面貌。本文将深入探讨Facebook的创新策…

React真的好难用

我发现React就像个宗教一样&#xff0c;网络上总有一群信徒。信徒&#xff1a;React天下第一&#xff0c;谁也不能说他不好。 网络上大佬对React的评价一般有几类&#xff1a; React跟Vue比就是手动档和自动档的区别&#xff0c;高手都开手动档。—— 就一个破打工的&#xf…

Swin Transformer—— 基于Transformer的图像识别模型

概述 Swin Transformer是微软研究院于2021年在ICCV上发表的一篇论文&#xff0c;因其在多个视觉任务中的出色表现而被评为当时的最佳论文。它引入了移动窗口的概念&#xff0c;提出了一种层级式的Vision Transformer&#xff0c;将Shifted Windows&#xff08;移动窗口&#x…
最新文章