首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在ARMV8中,组装指令"ptrue p0.b vl64“的效果是什么?

在ARMV8中,组装指令"ptrue p0.b vl64“的效果是什么?
EN

Stack Overflow用户
提问于 2022-02-23 08:35:49
回答 1查看 135关注 0票数 -1

此外,我还阅读了以下说明:

代码语言:javascript
代码运行次数:0
运行
复制
ptrue p0.s
ptrue p0.d
ptrue p0.b vl64
ptrue p0.b vl32

那么,它们的影响和区别是什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-23 09:45:08

我是SVE的新手,所以我的回答可能是错的:

一些背景

(也许你已经知道了.)

SVE寄存器的宽度因CPU而异,因此可能会遇到以下问题:

您可以为CPU编写程序,该程序允许每个寄存器有3个数字,并将值{10, 20, 30}加载到一个寄存器,将{5, 10, 3}加载到另一个寄存器,并执行按元素划分的操作。您期望结果是{10/5, 20/10, 30/3} = {2, 2, 10}

但是,您正在另一个CPU上运行您的程序,该程序允许每个寄存器有5个元素,因此第二个寄存器包含{0, 0, 5, 10, 3},因此您将得到零除法(因为前两个元素)。

为了避免这种情况,SVE使用特殊的“谓词寄存器”(P0-P15),其中包含一个位掩码,它告诉CPU寄存器中哪个元素是有效的,哪个元素无效。在上面的例子中,位掩码应该是{invalid, invalid, valid, valid, valid}

您的实际问题

那么,它们的影响和区别是什么呢?

ptrue p0.s

此指令设置寄存器P0的值,以便以后的32位(.s)操作将处理寄存器中的所有字段。

“32位操作”是指将320位SVE寄存器解释为10 32位值的操作。

ptrue p0.d

此指令设置寄存器P0的值,以便以后的64位(.d)操作将处理寄存器中的所有字段。

ptrue p0.b vl64 ptrue p0.b vl32

这些指令将设置寄存器P0的值,以便以后的8位(.b)操作将处理寄存器的低64字节(vl64)或32字节(vl32)。

在SVE寄存器小于512 (vl64)或256 (vl32)位宽的CPU上,相应的指令将P0的值设置为“所有元素都无效”,以确保不会发生任何愚蠢的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71233647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档