在普通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
。
或memalign((,在所有Linux libc库中都可用