gcc ARM-SVE: Package 运行时大小的寄存器

5f0d552i  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(236)

在通用SIMD库eve中,我们正在研究支持长度不可知的sve
但是,我们不能将sizeless寄存器 Package 到结构体中,以便围绕它进行元编程。

struct foo {
  svint8_t a;
};

有什么办法吗?要么是clang要么是gcc。
我发现了一些关于__sizeless_struct的讨论和一些补丁,但我认为它没有任何进展。我还发现了这些gcc测试-在结构体中没有封装寄存器。

hfwmuf9z

hfwmuf9z1#

不,很遗憾这不可能__sizeless_struct是Arm在Clang中作为SVE阿克勒的初始下游实现的一部分添加的一个实验性特性。主要目的是允许像svfloat32x3_t这样的元组类型直接在<arm_sve.h>中定义。但是该特性具有复杂的反趋势语义。它违反了C++的一个基本规则,即所有的类对象都有一个固定的大小,所以这将成为上游编译器的持续维护负担。
__sizeless_struct(或类似的类型)可能不适用于可移植SIMD框架,因为无大小结构将继承无大小向量类型的所有限制:没有全局变量,不能在普通结构中使用,等等。所有SIMD目标都必须遵守这些限制,或者这些限制会因目标而异(限制可移植性)。
对于希望支持可变长度向量的SIMD框架,基于函数的抽象可能是比基于类的抽象更好的起点。Google Highway就是这样的一个例子,它对SVE工作得很好。

相关问题