作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在我的 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];
}
其中 i
和 n
是整数。
有人建议我使用 __builtin_assume_aligned
来确保它们对齐以帮助自动矢量化。但是,在查看了文档后,我不明白该怎么做。
您将如何在这段代码中使用它?
本题代码摘自How to help gcc vectorize C code .这也是我想尝试调整事物的原因。
最佳答案
__builtin_assume_aligned
只是提示 gcc
指针已经对齐,因此它通常可以向量化以下代码;它不是 malloc
或任何其他内存分配机制的指令,因此您可能对 gcc
撒谎。
为确保您拥有实际 对齐的指针,您有责任使用适当的机制。所以你必须:
malloc
,然后向上舍入到您的粒度的下一个倍数(如果还没有)__attribute__((aligned(N)))
在你的声明中(肯定适用于堆分配的变量,也可能适用于堆栈分配的变量)posix_memalign
关于c - 如何在 C 中使用 __builtin_assume_aligned,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41648609/
我是一名优秀的程序员,十分优秀!