gpt4 book ai didi

c - 如何在 C 中使用 __builtin_assume_aligned

转载 作者:太空狗 更新时间:2023-10-29 15:28:31 26 4
gpt4 key购买 nike

在我的 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];
}

其中 in 是整数。

有人建议我使用 __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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com