0

假设您有以下代码:

class Unit
{
private:
    float _outDel = 0;

public:

    float Process()
    {
        float rnd = rand();
        float out = rnd + _outDel;
        _outDel = out;
        return out;
    }

    void Process(int frames, float *out)
    {
        for (int i = 0; i < frames; i++)
            out[i] += Process();
    }
}

class UnitBank
{
private:
    Unit _unit[128];

public:

    float Process(int frames, float *out)
    {
        for (int i = 0; i < 128; i++)
            _unit[i].Process(frames, out);
    }
}

这样做的目的是总结一个由 128 个进程组成的数组,每个进程都会产生一些数字。

本质上,由于向后数据依赖(_outDel 变量),Unit 模块无法向量化。

但是,VS 2012“设置了一些标志”是否有可能产生一个单元模块(UnitSSE)的向量,然后使用它们组成一个具有 32 个 sse 单元的 UnitBank 类?像这样的东西:

class UnitSSE
{
private:
    float128 _outDel = 0;

public:

    float128 Process()
    {
        float128 rnd = rand();
        float128 out = rnd + _outDel;
        _outDel = out;
        return out;
    }

    void Process(int frames, float128 *out)
    {
        for (int i = 0; i < frames; i++)
            out[i] += Process();
    }
}

class UnitBankSSE
{
private:
    UnitSSE _unit[32];

public:

    void Process(int frames, float128 *out)
    {
        for (int i = 0; i < 32; i++)
            _unit[i].Process(frames, out);
    }
}

那么,VS 2012 可以自动生成这样的优化吗?

4

0 回答 0