gpt4 book ai didi

gcc - ARM-SVE : wrapping runtime sized register

转载 作者:行者123 更新时间:2023-12-02 18:06:07 30 4
gpt4 key购买 nike

在通用 SIMD 库中 eve我们正在研究支持与长度无关的 sve

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

struct foo {
svint8_t a;
};

有办法吗? clang 或 gcc。

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

最佳答案

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

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

对于希望支持可变长度向量的 SIMD 框架,基于函数的抽象可能是比基于类的抽象更好的起点。 Google Highway就是这方面的一个例子,它适用于 SVE。

关于gcc - ARM-SVE : wrapping runtime sized register,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73210512/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com