69,371
社区成员
发帖
与我相关
我的任务
分享
void vec4_add(float* a, float* b) {
a[0] += b[0];
a[1] += b[1];
a[2] += b[2];
a[3] += b[3];
}
如果不带restrict,编译器不能确保a和b指向的空间是不是有重叠,就会编译成4次加载内容、执行浮点加法、传回内容,不做任何优化。而如果a和b都restrict,编译器会优化为两次SIMD读取、一次SIMD加、一次SIMD传回内存,快4倍。
INT32* at(INT32* array, int index)
{
return array + index;
}
//startIdx = 20208;
//z = (INT32*)&DMRS_LUT[startIdx];
INT32* (*pf)(INT32*, int) = &a;
z = (*pf)(DMRS_LUT, 20208);
#include <stdio.h>
int main(int argc, char* argv[])
{
volatile int a;
/* int a; */
a = 80;
a = 51;
printf("%d\n", a);
return 0;
}
当用int a时:
gcc 4.c -S
movl $80, 28(%esp)
movl $51, 28(%esp)
gcc 4.c -O3 -S
movl $51, 28(%esp)
当用volatile int a时:
gcc 4.c -O3 -S
movl $80, 28(%esp)
movl $51, 28(%esp)