Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Вопрос знатокам asm


dmk ©   (15.08.17 18:46

С LEA, просо приходится сразу 128 бит писать и выравнивать массив на границу четверного слова. С PINSRD прощеб лишнего не прочитаешь.
Как будет быстрее с LEA или PINSRD ? Работают оба варианта.


function Scale(A, B: TVertex; Factor: single): TVertex;
const
 D: single = 100.0;
 FillXMM: UInt128 = ($0302010003020100, $0302010003020100);

asm
 .NOFRAME
 movss xmm2, Factor
 divss xmm2, D //F := (Factor / 100.0);
 movdqu xmm3, FillXMM //Маска заполнения регистра
 pshufb xmm2, xmm3 //Размножаем F на весь регистр

 lea rax, [A]
 lea r10, [B]
 movdqu xmm0, [rax]
 movdqu xmm1, [r10]

 //pinsrd xmm0, A.X, 0
 //pinsrd xmm0, A.Y, 1
 //pinsrd xmm0, A.Z, 2
 //pinsrd xmm1, B.X, 0
 //pinsrd xmm1, B.Y, 1
 //pinsrd xmm1, B.Z, 2

 //Вычитаем, умножаем и складываем сразу по 4 значения
 subps xmm1, xmm0 //Вычитаем из вектора B вектор A
 mulps xmm1, xmm2 //Умножаем разницу векторов на фактор
 addps xmm1, xmm0 //к результату добавляем вектор A

 extractps Result.X, xmm1, 0
 extractps Result.Y, xmm1, 1
 extractps Result.Z, xmm1, 2
end;


dmk ©   (15.08.17 18:58[1]

Разница всего 0.5 fps по тесту:
LEA - 65.7 fps
PINSRD - 65.2 fps
Хотя это тоже существенно.


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо