如何使用C语言中的内置假定对齐
在我的C代码中如何使用C语言中的内置假定对齐,c,C,在我的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]; } 复数浮点M[n][n]; 复杂浮点*delta=malloc(n*sizeof*delta); 复数浮点*v=malloc(
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];
}
复数浮点M[n][n];
复杂浮点*delta=malloc(n*sizeof*delta);
复数浮点*v=malloc(n*sizeof*v);
对于(i=0;i
其中i
和n
是整数
有人建议我使用\u内置\u假定\u对齐
来确保这些对齐,以帮助自动矢量化。然而,看了这些文档后,我不知道该怎么做
您如何将其用于此代码
本问题中的代码摘自。这也是我想尝试对齐东西的原因。
\uuuuuu内置\uu aligned
只是提示gcc
指针已经对齐,因此它通常可以矢量化以下代码;它既不是对malloc
的指令,也不是对任何其他内存分配机制的指令,因此您可能对gcc
撒谎
为了确保指针实际对齐,您有责任使用适当的机制。因此,你必须:
然后向上取整到粒度的下一个倍数(如果还没有)malloc
- 或者在声明中使用(确保为堆分配的变量工作,也可能为堆栈分配的变量工作)
- 或者使用对齐内存分配调用,如
M
,delta
和v
?@Someprogrammerdude绝对是。问题来自于。