Тормозят SIMD-команды

Тема в разделе "WASM.A&O", создана пользователем persicum, 9 фев 2008.

  1. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    Был у меня значит код несложный, решил я его переделать под SIMD. Выровнял данные, а все OR,XOR,AND,ADD заменил на POR, PXOR, PAND, PADD. Ну и загружал в MMX сразу 64 бит, а в SSE2 - сразу 128 бит.

    Результаты замера производительности такие.
    С ММХ код стал шустрее в 1.5 раза,
    С SSE2 код стал шустрее в 2.3 раза.

    Блин, а я ожидал в 2 и в 4 раза =(((.
    А как обычно бывает?
     
  2. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    смотря на каком процессоре ).
    MMX эффективно реализуется при развёртке циклов на линейные блоки большого размера, также бывает зависимость по MMX регистрам ;)
     
  3. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    persicum
    У тебя вполне адекватное ускорение получилось.
    Ускорение в 2 и 4 раза на практике получить практически невозможно :dntknw:
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    я получал ускорение больше чем на порядок.
    такое ускорение можно получить при работе с массивом и использовании медленных команд - умножение, деление.
    Для быстрых логичиских команд прирост должен быть не сильно большим, примерно таким как у тебя и получился.
     
  5. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    наверно ограничение пропускной способности шины памяти ограничивает ускорение. теоретически, процессоры начиная с C2D побыстрее считают MMX и SSE.
    persicum
    на несколько ядер не пробовали распоточить?
     
  6. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    Не дорос я еще до многопроцессорности, нету таких тачек в моем окружении =(((

    Кстати, АЛУшный код у меня был весь разруленный, все сплошняком в линейку записано, а с MMX у меня в цикле, засасываю порциями, чтобы все регистры были забиты под завязку, а потом с ними орудую. Я так подумал, что для СОПРа разруливание не нужно... вот такой стиль программирования...
     
  7. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    на PII или PIII была зависимость по MMX регистрам (копирование + арифметические операции), на новых процессорах не проверял.
     
  8. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    А сколько копий FPU имеют современные многоядерники?
    Одну чтоли? :o