在我的 C 代码中,我有
complex float M[n][n];
complex float *delta = malloc(n * sizeof *delta);
complex float *v = malloc(n * sizeof *v);
for (i = 0; i < n; i++) {
v[i] -= 2.*delta[j]*M[j][i];
}
Run Code Online (Sandbox Code Playgroud)
哪里i和n是整数。
有人建议我使用__builtin_assume_aligned确保这些对齐以帮助自动矢量化。但是,查看了文档后,我不明白该怎么做。
您将如何将它用于此代码?
本题代码摘自How to help gcc vectorize C code。这也是我想尝试调整事物的原因。
__builtin_assume_aligned只是gcc指针已经对齐的提示,因此它通常可以对以下代码进行矢量化;它不是对任何一个malloc或任何其他内存分配机制的指令,所以你可能在撒谎gcc。
为确保您实际对齐指针,您有责任使用适当的机制。所以你必须:
malloc然后四舍五入到您的粒度的下一个倍数(如果还没有)__attribute__((aligned(N)))在您的声明中使用(确保适用于堆分配,也可能适用于堆栈分配的变量)posix_memalign