SSE На АМД быстре чем на П4?

Тема в разделе "WASM.BEGINNERS", создана пользователем locki, 6 окт 2005.

  1. locki

    locki New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2005
    Сообщения:
    83
    Адрес:
    Russia
    такой тупой код
    Код (Text):
    1.  
    2. for i:=1 to 100000  do
    3. asm
    4. adss xmm0 ,xmm1
    5. ...24 raza...
    6. end;
    7.  


    На амд выполняется в 3раза быстрее чем на интеле п4.

    ВОПРОС: почему? и если это не оптимизированно для П4 то как это оптимизировать?
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    locki

    Для этого существуют таблицы латентностей (таймингов) как у Intel, так и AMD. И вроде как латентности addss у них одинаковые (AMD и P4 Northwood 4 тика, P4 Prescott 5 тиков). Поэтому если у тебя идет повтор addss с одним и тем же регистром xmm0, то вроде как большой разницы быть не должно.



    А собака может быть зарыта совсем в другом месте. Например, не забыл ли ты инициализировать используемые xmm регистры, ведь ты работаешь не с целыми числами, а с вещественными, и начальные значения в регистрах могут быть ивалидными или могут возникать переполнения (для single max 10^38 это не так уж много ;), а значит замаскированные эксепшены и большиие потери времени
     
  3. locki

    locki New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2005
    Сообщения:
    83
    Адрес:
    Russia
    Инициализировать не забыл. 32 битными значениями целыми числами. ИЗ-за целых чисел?

    Может проблемма в декодере P4?
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Смотря как загружал, если через movd, то да

    Команды, заканчивающиеся на ss\ps работают с вещественными 32-бит числами (single precision). У целых и вещественных чисел только значение 0 одинаковое - нули во всех битах, а битовые представления других чисел совершенно другие. Поэтому у тебя скорее всего вылетает исключение denormal operand (если целое число - положительное меньше 23 бит) или вообще NaN ("не число", например целое = -1).



    По правильному целое число из 32-битного регистра нужно загружать в xmm как вещественное single с помощью команды преобразования формата cvtsi2ss



    И декодер тут ес-но ни причем - ты же не хочешь прослыть плохим танцором, которому декодеры мешают ;)))
     
  5. locki

    locki New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2005
    Сообщения:
    83
    Адрес:
    Russia
    leo

    А ведь ты был прав! вся фишка в cvtsi2ss! ускорилось в РАЗЫ!!!