Векторизация коротких, чтобы плавать преобразование?

Я пытаюсь понять, почему Visual Studio 2012 (x64) не хочет векторизовать преобразование из short к float, У кого-нибудь есть причина или выход?

//unsigned short* __restrict A,B,C,D
for (int j = 0; j < H*W;j++)
{
float Gs = D[j]-B[j];
float Gc = A[j]-C[j];
in[j]=atan2f(Gs,Gc);
}

информация C5002: цикл не векторизован по причине ‘1101’

РАЗРЕШАЮЩАЯ СПОСОБНОСТЬ

Время выполнения с использованием шорт и не векторизация о 800ms

Время конвертирования во все целые и автоматическая векторизация 140ms (!!!)

4

Решение

От эта страница, Похоже, что ваш «цикл содержит не-векторизуемую операцию преобразования (может быть неявной)». Вы пытались сначала преобразовать в тип, который имеет ту же ширину, что и float (такие как int)?

По более конкретной причине см. Вот. По-видимому, в SSE нет прямого способа преобразовать регистр SSE, состоящий из вектора коротких замыканий, в вектор с плавающей точкой, однако есть инструкция, которая преобразует 32-разрядные целые числа в числа с плавающей точкой.

2

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

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

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