【发布时间】:2013-04-25 15:19:00
【问题描述】:
这里有什么问题?当我运行程序时,它会显示Segmentation Fault (Core Dumped)。
我使用了一些 SIMD 命令。
float function ( Point p1, Point p2, int dim )
{
int k;
float result=0.0;
float *p3;
p3 = (float*) malloc (16);
k=dim%4;
__m128 *v_p1 = (__m128*)p1.coord;
__m128 *v_p2 = (__m128*)p2.coord;
__m128 *v_p3 = (__m128*)p3;
for (int i=0; i<dim/4; i++){
*v_p3= _mm_sub_ps(*v_p1,*v_p2);
}
for(int i=0; i<dim; i++){
result+=p3[i];
}
return(result);
}
【问题讨论】:
-
我猜
_mm_sub_ps需要16 byte对齐的数据,而p1.coord、p2.coord和p3没有正确对齐。因此,如果您按应该正确对齐的值分配给__m128变量并使用那些我敢打赌问题就会消失。 -
尝试使用 gdb 进行调试。
-
与故障无关:似乎第一个循环一次又一次地使用相同的数据执行操作