如何解决动态分配 SIMD 向量数组是否安全?
在普通 C++ 中,我们可以使用标准库函数 malloc
或 new
关键字动态分配浮点数组。
当我们想到 SIMD 向量时,它们是像 float32x4_t
这样的编译器扩展(对于 ARM neon),动态分配这样的 SIMD 向量数组是否安全:
uint32_t number_req = 32;
float32x4_t *simd_arr = (float32x4_t *)malloc(sizeof(float32x4_t) * number_req);
我正在尝试限制代码中加载存储指令的数量。 如果以上不是合法的方法,那么实现它的正确方法是什么? 每一个帮助将不胜感激! 非常感谢您提前!
解决方法
我正在尝试限制代码中加载存储指令的数量。
以这种方式减少代码中加载/存储内部函数的数量无济于事。
取消引用 float32x4_t*
完全等同于加载或存储内部函数,实际上可能是如何实现 1 向量对齐加载内部函数的。
何时可以将向量类型保存在向量寄存器中取决于编译器,就像将 int
对象保存在普通整数寄存器中一样。
加载/存储内部函数主要用于与编译器通信对齐,并使其对类型感到满意;查看编译器生成的 asm 以了解实际情况。
,您可能需要 aligned_alloc
,它是在 C11 中引入的,用于替代此类情况的 malloc
。
或在所有 Linux libc 库中都可用的 memalign()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。