以我外行的角度看,C跟Fortran用法几乎没什么区别,过程调用时把call去掉就差不多了,函数名为全小写,我在C里用simd时也是对着那个Fortran手册一边翻书一边测试来做的。除了这种用法外C应该还可以直接嵌入simd汇编指令吧,这个方法我没用过。
W
wangli 发布的帖子
-
RE: simd可不可以在运用C语言编程中使用?
-
RE: simd_load报不对齐错误
静态数组的首地址(32Byte)对齐编译器能够保证,打印出来也是,做加零偏移的处理 i=0; simd_load(va,a[0][2]+i);就可以;而simd_load(va,a[0[[2])总是执行报错不对齐。我是做vshff轮换,循环外那个初始赋值就是数组指针的首地址,但不加这个0偏移就报错,后来包括循环外的初始赋值我全写成+i(i=0)的形式(当然了循环内天然有偏移所以一直就没问题)
i=0; ii=0;
simd_load(va[0],a[m][n]+i);
for(i=0;i<<nx;i+=4)
{
cur=(ii&1); ii++; nex=(ii&1);
simd_load(va[0+nex],a[m][n]+i+4);
vtmp=simd_vshff(va[0+nex],va[0+cur],0x4E);
v_r=simd(vtmp, va[0+cur]);
...
} -
simd_load报不对齐错误
定义一个数组指针,并让每个指针首地址256B对齐,
double work[5000] attribute((aligned(32)));
double *a[4][4];
...
a[2][0]=work+256;
simd_load(va,a[2][0]); //报错
simd_load(va,a[2][0]+i); //不报错,i=0,
i=0时,这两个应该是等价的,比较奇怪