Автовекторизация массива невекторизируемых процессов в VS 2012

Предположим, у вас есть следующий код:

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 процессов, каждый из которых производит несколько чисел.

По сути, модуль Unit не может быть векторизован из-за обратной зависимости данных (переменная _outDel).

Но возможно ли, чтобы VS 2012 «был установлен с некоторыми флагами», вектор модулей Unit (UnitSSE), а затем использует их для составления класса UnitBank с 32 единицами sse? Что-то вроде этого:

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 генерировать такую ​​оптимизацию автоматически?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]