What is aliasing and how does it affect performance?

前端 未结 4 1891
迷失自我
迷失自我 2021-02-04 02:19

At the GoingNative event, during the Interactive Panel on Day2 at the 9 minute mark, Chandler Carruth says:

Pointers create aliasing problems. They slow d

4条回答
  •  死守一世寂寞
    2021-02-04 02:46

    Consider the following function:

    void f(float* lhs, float* rhs, float* out, int size) {
        for(int i = 0; i < size; i++) {
            out[i] = *lhs + *rhs;
        }
    }
    

    What's the fastest version of this function? Probably, you hoist *lhs + *rhs out of the loop. The problem is what happens when the pointers alias. Imagine what that optimization does if I call it like this:

    float arr[6] = { ... };
    f(arr, arr + 1, arr, 6);
    

    As you can see, the problem is that *lhs + *rhs cannot be hoisted out of the loop, because out[i] modifies their values. In fact, the compiler can't hoist any logic out of the loop. So the compiler cannot perform the "obvious" optimization, because if the parameters alias the logic is now incorrect. However, if the floats are taken by value, then the compiler knows they can't alias and can perform the hoist.

    Of course, this function is pretty silly, but it demonstrates the point.

提交回复
热议问题