Предполагается обрабатывать два массива, каждый длиной до 4к. Вопросы: 1. Дает ли выигрыш в тактах загрузка из памяти и запись с помощью XMM регистров по сравнению с четырьмя загрузками/записью 32-битными регистрами? 2. При использовании prefetchnta как определить, за сколько тактов до реального обращения к памяти нужно использовать эту команду? 3. При использовании prefetchnta [esi] в линию кеша загружается 64 байта, начинающихся с адреса, указанного в esi, или выровненого по 16-байтной границе? 4. Следует ли выравнивать метку начала цикла по границе (по какой именнои в каких случаях, какой выигрыш в тактах) и как осуществить выравнивание, если код пишу как ассемблерную вставку в Borland Delphi7? Мануалы с интеловского сайта читал, но кеширование данных не совсем освоил.
Привет! Буду пока краток, т.к. новый год на носу. С наступающим! 1. Загрузка в XMM регистры даёт выигрыш лиш в том случае, если память выровнена по 16 байтной границе. Иначе, в процессоре возникают исключения, что задерживает обработку на 200 тактов. 2. Уточню после НГ. В кеш нужно грузить в то время пока выполняются арифметические и др. команды. Пример позже. 4. Лучше выравнивай по границе 16 байт. Смотрю ты давно здесь не был. Заходи пообщаемся.