Vector Optimization – Vector Mask Register

文章目录

  • Vector优化 – Vector掩码寄存器

Vector优化 – Vector掩码寄存器

One of the reasons for low levels of vectorization is the presence of conditionals (IF statements) inside loops. IF statements introduce control dependencies into a loop.
矢量化水平低的原因之一是循环内存在条件(IF 语句)。 IF 语句将控制依赖性引入循环中。

for (i = 0; i < 64 i = i + 1) {
if (X[i] != 0) {
X[i] = X[i] * 2;
}
}
This loop cannot normally be vectorized because of the conditional execution of the body; however, if the inner loop could be run for the iterations for which X[i] \neq 0, then the subtraction could be vectorized.
由于循环体的条件执行,该循环通常无法矢量化;然而,如果内部循环可以运行迭代 X[i] \neq 0 ,那么减法就可以向量化。

Mask registers essentially provide conditional execution of each element operation in a vector instruction. The vector-mask control uses a Boolean vector to control the execution of a vector instruction. When the vector-mask register is enabled, any vector instructions executed operate only on the vector elements whose corresponding entries in the vector-mask register are one. The entries in the destination vector register that correspond to a zero in the mask register are unaffected by the vector operation. Clearing the vector-mask register sets it to all ones, making subsequent vector instructions operate on all vector elements.
掩码寄存器本质上提供vector指令中每个元素操作的条件执行。 vector掩码控件使用布尔vector来控制vector指令的执行。当vector掩码寄存器被使能时,所执行的任何vector指令仅对vector掩码寄存器中的对应条目为1的vector元素进行操作。目标vector寄存器中对应于掩码寄存器中的零的条目不受vector操作的影响。清除vector掩码寄存器将其设置为全 1,使后续vector指令对所有vector元素进行操作。

Consider the following snippet of code.
考虑以下代码片段。

for (i = 0; i < 64 i = i + 1) {
if (a[i] >= b[i]) {
c[i] = a[i]
} else {
c[i] = b[i]
}
}
The above code goes through the following masking processes to populate c.
上面的代码经过以下屏蔽过程来填充c 。
在这里插入图片描述

The transformation to change an IF statement to a straight-line code sequence using conditional execution is called if conversion.
使用条件执行将 IF 语句更改为直线代码序列的转换称为if 转换。

Masking introduces an overhead – conditionally executed instructions still require execution time when the condition is not satisfied. Nonetheless, the elimination of a branch and the associated control dependences can make a conditional instruction faster (faster than using scalar mode) even if it sometimes does useless work. Vector instructions executed with a vector mask still take the same execution time, even for the elements where the mask is zero.
屏蔽引入了开销——当条件不满足时,有条件执行的指令仍然需要执行时间。尽管如此,消除分支和相关的控制依赖性可以使条件指令更快(比使用标量模式更快),即使它有时会做无用的工作。使用vector掩码执行的Vector指令仍然需要相同的执行时间,即使对于掩码为零的元素也是如此。

Vector processors make the mask registers part of the architectural state and rely on compilers to manipulate mask registers explicitly. GPUs get the same effect using hardware to manipulate internal mask registers that are invisible to GPU software. In both cases, the hardware spends the time to execute a vector element whether the mask is zero or one.
Vector处理器使掩码寄存器成为体系结构状态的一部分,并依赖编译器显式操作掩码寄存器。 GPU 使用硬件来操作 GPU 软件不可见的内部掩码寄存器,从而获得相同的效果。在这两种情况下,无论掩码是零还是一,硬件都会花费时间来执行vector元素。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

冗余连接2 hard题 代随C#写法

此题在卡码网109与力扣685题亦有记载 有一说一C#写法我没咋搞懂 就看明白了思路 这里贴一个答案待后续我醒悟了再来看罢 难就难在对整体数据结构classUnion&#xff08;并查集&#xff09;的理解不熟并且 对于输入输出这个迭代过程理解上也比较吃力 109. 冗余连接II 题…

MySQL:CRUD

MySQL表的增删改查&#xff08;操作的是表中的记录&#xff09; CRUD(增删改查) C-Create新增R-Retrieve检查&#xff0c;查询U-Update更新D-Delete删除 新增&#xff08;Create&#xff09; 语法&#xff1a; 单行数据全列插入 insert into 表名[字段一&#xff0c;字段…

【stable diffusion部署】手把手教你从0基础入门Stable Diffusion

前言 在开始学之前&#xff0c;我想提前说一下&#xff0c;我所理解的AI绘画的本质&#xff0c;就是手替&#xff0c;人提出方案&#xff0c;AI帮你完成具体的作画过程。 写这篇文章的初衷&#xff0c;网上的Stable Diffusion教程太多了&#xff0c;但是我真正去学的时候发现…

前端单元测试框架 引入说明

1. 背景&#xff1a; 2. 如何选择&#xff1a; 2.1. 流行框架 Jest&#xff1a;由Facebook开源的JavaScript测试框架&#xff0c;应用于脸书系以及 ReactJs 系Mocha&#xff1a;适用于 NodeJs 和 浏览器、简易、灵活、有趣的JavaScript 测试框架Jasmine&#xff1a;BDD&#…

有效提升网站流量的SEO技巧分享

内容概要 在数字时代&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;已经成为提升网站曝光度和吸引访问者的重要工具。SEO的核心目标是通过优化网站的各个方面&#xff0c;提高在搜索引擎结果页面上的排名&#xff0c;从而获得更多的自然流量。有效的SEO策略能够让您在激…

MacBook不额外安装软件,怎样投屏到安卓手机上?

提起iPhone或MacBook的投屏&#xff0c;人们总会想到airplay功能。但离开了苹果生态&#xff0c;其他品牌的手机电脑就未必配备airplay功能了。 如果想要将MacBook的电脑屏幕共享到安卓手机或平板上&#xff0c;到底要怎样做&#xff1f;需要安装什么软件吗&#xff1f; 不需要…

自定义面板,高效的游戏性能分析利器

为了更有效地聚焦并解决性能问题&#xff0c;UWA报告采用了分模块监控策略&#xff0c;确保每个模块独立成章&#xff0c;各司其职。然而&#xff0c;随着对性能分析需求的不断升级&#xff0c;我们已经意识到&#xff0c;在深入分析某些跨模块的性能瓶颈或优化点时&#xff0c…

2024第四次随堂测验参考答案

从第四次开始答案会以c语言提供&#xff0c;自行了解&#xff0c;学习 6-1 报数 报数游戏是这样的&#xff1a;有n个人围成一圈&#xff0c;按顺序从1到n编好号。从第一个人开始报数&#xff0c;报到m&#xff08;<n&#xff09;的人退出圈子&#xff1b;下一个人从1开始报…

CTF杂项基本题目思路(图片文件隐写-压缩文件-流量取证)

一、文件隐写 1.当遇到文件类型未知的文件时怎么办&#xff1f; ①linux系统可以使用file命令查看文件的类型&#xff0c;格式&#xff1a;file 文件名 ②使用winhex或者010editor查看文件头&#xff0c;从而判断文件的类型&#xff0c;①中file命令的本质也是查看文件的文件…

sa-token使用及与spring-security的对比

sa-token相关资料地址 官网: https://sa-token.cc/ gitee: https://gitee.com/dromara/sa-token github: https://github.com/dromara/sa-token 快速开始: https://sa-token.cc/doc.html#/ sa-token典型应用 这里我直接拿SpringBoot_v2&#xff08;springboot的开源后台脚手…

MySQL:left join后用on与where的区别

一、前言 前几天项目中&#xff0c;写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条&#xff0c;奈何发现还是有两条。在此记录一下&#xff0c;on与where的区别。 二、ON 原始数据展示 SELECT t1.*,t2.* FROM t_test_staff t1 left join t_te…

ANX9833FN-AA-R ANX9833 ANALOGIX QFN48 VGA视频转换器件

ANX9833概述:ANX9833是VGA显示接口适配器集成电路设计一个显示端口1.2/1.1源连接到一个VGA显示。与芯片上的单片机和记忆,ANX9833不需要任何外部配置或设置。它自动引导VGA显示接口适配器的输出,有效地处理所有类型的遗产显示器、投影仪,和电视。ANX9833提供Gbps带宽在两车道到…

2025全平台短剧系统 : 快手、抖音、微信全覆盖

之前&#xff0c;我曾详细阐述过公司短剧系统的一些功能&#xff0c;它们共同构建了一个全面、高效的短剧制作与运营平台。这些功能&#xff0c;无论是媒资管理、剧场设定&#xff0c;还是后期运营&#xff0c;都是经过深思熟虑、精心设计的&#xff0c;是一个成熟的短剧系统所…

机圈白刃战,vivo聚势成风

金秋十月&#xff0c;国产手机市场进入了空前激烈的竞争局势&#xff0c;几乎每天都有发布会&#xff0c;甚至隔段时间就有新机话题登上热搜。网友戏称&#xff0c;发布会密度高到“工作日都不够用了”。 10月14日&#xff0c;vivo X200系列率先登场&#xff0c;拉开了国产旗舰…

scp 或 ssh 报错no matching host key type found. Their offer: ssh-rsa 解决方案

报错如下&#xff1a; 解决方案&#xff1a; 在 scp 或 ssh 命令后面增加参数&#xff1a; -o HostKeyAlgorithmsssh-rsa 可以解决此问题&#xff0c; scp格式如下&#xff1a; scp -o HostKeyAlgorithmsssh-rsa [local_file_path] [user][hosts]:[remote_path]

ElasticSearch概述

ElasticSearch概述 Elaticsearch&#xff0c;简称为es&#xff0c; es是一个开源的高扩展的分布式全文检索引擎&#xff0c;它可以近乎实时的存储、检索数据&#xff1b;本身扩展性很好&#xff0c;可以扩展到上百台服务器&#xff0c;处理PB级别的数据。es也使用Java开发并使…

一文彻底了解UDHCP源码核心☝️

&#x1f344;参考学习: udhcp源码剖析&#xff08;一&#xff09;——DHCP服务器和客户端的工作流程_udhcpc源码v1.29.2-CSDN博客 前言介绍 本文深入探讨了DHCP服务器和客户端的工作流程&#xff0c;以udhcp为例&#xff0c;详细阐述了udhcpd&#xff08;服务器&#xff09;…

开启鸿蒙开发之旅:静态页面搭建

写在前面 了解了一些常用的系统组件及其属性之后&#xff0c;我准备开始搭建我第一个页面&#xff0c;本次鸿蒙Next初体验我准备模仿这款“提醒事项”APP&#xff0c;从页面搭建到基本功能实现。今天从入口页开始&#xff1a; 布局思路 整体结构 从该页面的整体布局结构来看&…

C++20 STL CookBook 7 Containers(II)

让vector在插入删除的时候仍然保证是有序的 首先&#xff0c;STL的确提供了一种办法来检查我们的目标容器是不是有序的&#xff1a;std::is_sorted - cppreference.com&#xff0c;也就是std::is_sorted。我们当然可以这样做&#xff1a; #include <iostream> #include…

二叉树搜索树(下)

二叉树搜索树&#xff08;下&#xff09; 二叉搜索树key和key/value使用场景 key搜索场景 只有key作为关键码&#xff0c;结构中只需要存储key即可&#xff0c;关键码即为需要搜索到的值&#xff0c;搜索场景只需要判断 key在不在。key的搜索场景实现的二叉树搜索树支持增删查…