Я пытался выяснить, как получить некоторое улучшение в моем коде на очень важных пару линий:Помощь с Assembly/SSE Умножение
float x = a*b;
float y = c*d;
float z = e*f;
float w = g*h;
все а, б, в ... являются поплавки ,
Я решил изучить SSE, но, похоже, не может найти улучшения, на самом деле он оказывается в два раза медленнее. Мой SSE код:
Vector4 abcd, efgh, result;
abcd = [float a, float b, float c, float d];
efgh = [float e, float f, float g, float h];
_asm {
movups xmm1, abcd
movups xmm2, efgh
mulps xmm1, xmm2
movups result, xmm1
}
Я также попытался с помощью стандартных ассемблерного, но это не кажется, что я могу упаковать регистр с четырьмя плавающими точками, как я могу с SSE.
Любые комментарии или помощь были бы очень благодарны, мне в основном нужно понять, почему мои вычисления с использованием SSE медленнее, чем серийный код на C++?
Я компилирую в Visual Studio 2005 на Windows XP, используя Pentium 4 с HT, если это предоставляет любую дополнительную информацию для поимки.
Заранее спасибо!
Я думаю, вам нужно предоставить больше контекста. Простое умножение четырех пар поплавков займет практически измеримое время на любом современном ПК. Это в цикле? Сохраняете ли вы результаты где-то или используете их в качестве промежуточных элементов для следующей итерации? –
Я понимаю, что наибольшая выгода от SSE заключалась бы в том, чтобы делать много итераций, каждый раз упаковывая регистр, но все, что я планирую делать, - это использование чисел, генерируемых из этого, только что будет возвращено в некоторые вызовы сложения и вычитания, ничего, что я хотел бы включить в код SSE, но любое улучшение времени вычисления приведет к значительной экономии времени на протяжении всего срока службы кода. – Brett
Это не обязательно так. Если это не в цикле, то любые преимущества будут совершенно незаметны в любом данном проходе через код. Конечно, если программное обеспечение используется в течение нескольких тысяч лет, общее время сохранения может быть значимым, но это действительно так. Не переустраивайте, сегодняшние компиляторы очень хороши. Если он работает слишком медленно, сначала профиль, затем оптимизируйте узкие места. – Donnie