相关疑难解决方法(0)

为什么mulss在Haswell上只用了3个周期,与Agner的指令表不同?

我是指令优化的新手.

我对一个简单的函数dotp进行了简单的分析,该函数用于获取两个浮点数组的点积.

C代码如下:

float dotp(               
    const float  x[],   
    const float  y[],     
    const short  n      
)
{
    short i;
    float suma;
    suma = 0.0f;

    for(i=0; i<n; i++) 
    {    
        suma += x[i] * y[i];
    } 
    return suma;
}
Run Code Online (Sandbox Code Playgroud)

我用昂纳雾在网络上提供的测试框架testp.

在这种情况下使用的数组是对齐的:

int n = 2048;
float* z2 = (float*)_mm_malloc(sizeof(float)*n, 64);
char *mem = (char*)_mm_malloc(1<<18,4096);
char *a = mem;
char *b = a+n*sizeof(float);
char *c = b+n*sizeof(float);

float *x = (float*)a;
float *y = (float*)b;
float *z = (float*)c;
Run Code Online (Sandbox Code Playgroud)

然后我调用函数dotp,n = 2048,repeat …

c optimization assembly sse micro-optimization

31
推荐指数
1
解决办法
1471
查看次数

每个核心上是否“存在”AVX/AVX2?

那么,这个 AVX 的东西 - 它就像每个核心的小型机器?或者它就像整个 CPU 的一个引擎单元?

比如,我可以以某种方式在每个核心上使用它吗?我正在玩它,我觉得我可能会“过度使用”它并造成某种瓶颈。

你能解释一下吗?我都弄错了吗?

c++ simd cpu-architecture avx avx2

2
推荐指数
1
解决办法
562
查看次数

标签 统计

assembly ×1

avx ×1

avx2 ×1

c ×1

c++ ×1

cpu-architecture ×1

micro-optimization ×1

optimization ×1

simd ×1

sse ×1