问题描述
在普通 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()