Был у меня значит код несложный, решил я его переделать под SIMD. Выровнял данные, а все OR,XOR,AND,ADD заменил на POR, PXOR, PAND, PADD. Ну и загружал в MMX сразу 64 бит, а в SSE2 - сразу 128 бит. Результаты замера производительности такие. С ММХ код стал шустрее в 1.5 раза, С SSE2 код стал шустрее в 2.3 раза. Блин, а я ожидал в 2 и в 4 раза =(((. А как обычно бывает?
смотря на каком процессоре ). MMX эффективно реализуется при развёртке циклов на линейные блоки большого размера, также бывает зависимость по MMX регистрам
persicum У тебя вполне адекватное ускорение получилось. Ускорение в 2 и 4 раза на практике получить практически невозможно
я получал ускорение больше чем на порядок. такое ускорение можно получить при работе с массивом и использовании медленных команд - умножение, деление. Для быстрых логичиских команд прирост должен быть не сильно большим, примерно таким как у тебя и получился.
наверно ограничение пропускной способности шины памяти ограничивает ускорение. теоретически, процессоры начиная с C2D побыстрее считают MMX и SSE. persicum на несколько ядер не пробовали распоточить?
Не дорос я еще до многопроцессорности, нету таких тачек в моем окружении =((( Кстати, АЛУшный код у меня был весь разруленный, все сплошняком в линейку записано, а с MMX у меня в цикле, засасываю порциями, чтобы все регистры были забиты под завязку, а потом с ними орудую. Я так подумал, что для СОПРа разруливание не нужно... вот такой стиль программирования...
на PII или PIII была зависимость по MMX регистрам (копирование + арифметические операции), на новых процессорах не проверял.