首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARM-SVE:包装运行时大小的寄存器

ARM-SVE:包装运行时大小的寄存器
EN

Stack Overflow用户
提问于 2022-08-02 16:01:00
回答 1查看 69关注 0票数 2

在一个通用的SIMD库夏娃中,我们正在研究支持长度无关的sve

但是,我们不能将sizeless寄存器封装到一个结构中,以便围绕它进行一些元编程。

代码语言:javascript
复制
struct foo {
  svint8_t a;
};

有办法吗?不是嘎吱作响就是gcc。

我发现了一些关于__sizeless_struct的讨论和一些补丁,但我认为它没有去任何地方。我还发现了这些gcc试验 --没有在结构中包装寄存器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-03 08:33:21

不,不幸的是这是不可能的(在撰写本报告时)。__sizeless_struct是Arm添加的一个实验性特性,它是Clang中SVE初始下游实现的一部分。其主要目的是允许像svfloat32x3_t这样的元组类型直接在<arm_sve.h>中定义。但这一特征具有复杂的反趋势语义。它打破了C++的基本规则之一,即所有类对象都具有恒定的大小,因此对于上游编译器来说,这将是一个持续的维护负担。

对于可移植的SIMD框架来说,__sizeless_struct (或类似的东西)可能是不可接受的,因为无大小的结构将继承无大小向量类型的所有限制:没有全局变量,在普通结构中没有用途,或者所有SIMD目标都必须遵守这些限制,或者限制会因目标而不同(限制可移植性)。

对于支持可变长度向量的SIMD框架来说,基于函数的抽象可能是一个比基于类的抽象更好的起点。谷歌高速公路就是这方面的一个例子,它对SVE很有效。

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

https://stackoverflow.com/questions/73210512

复制
相关文章

相似问题

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