С помощью MMX-команд можно быстро вычислять скалярное произведение векторов. Пусть векторы состоят из 16-разрядных слов и находятся в памяти по адресам a_vector и b_vector. Программа будет выполнять следующие шаги:
1. Скопировать 4 слова первого вектора в MMX-регистр командой movq.
2. Скопировать 4 слова второго вектора в MMX-регистр.
3. Попарно перемножить слова и сложить первое произведение со вторым, а третье с четвертым, пользуясь командой pmaddwd.
4. Добавить результаты шага 3 к ранее накопленным суммам командой paddd
Эти шаги следует повторить для всех слов исходных векторов (см. русунок).

Code Example
Команды 1-4 реализуют шаги 1-4 (см. рис.)
Команды 5-8 организуют цикл по всем элементам векторов.
Команды 9-11 складывают частичные суммы, накопленные в цикле в старших и младших разрядах регистра MM7.
Команда 12 пересылает результат в память.

back Возврат к началу темы