размер конвеера

Тема в разделе "WASM.ASSEMBLER", создана пользователем 0136, 25 апр 2007.

  1. 0136

    0136 New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2007
    Сообщения:
    112
    привет, кто подскажет рецепт с помощью которого можно узнать размер конвеера и вообще, расскажи те чё то %)
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    http://www.wasm.ru/publist.php?list=10
     
  3. 0136

    0136 New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2007
    Сообщения:
    112
    не, это не то, мне нужно узнать размер конвеера!
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    0136
    Что значит узнать ? Если прочитать в мануалах и статьях - это одно, если же пытаться определить программными тестами - то это очень не просто и под силу только великому А.Фогу
    Короче - чего изволите ? Ссылки или так тебе цифры назвать ?
     
  5. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Классическим методом определения длины конвейера (который, кстати, использует великий А. Фог :) ) является измерение штрафа на неправильно предсказаный переход. Однако, в NetBurst, например, в реальном приложении штраф может быть больше, что связано с некоторыми архитектурными особенностями, поэтому действовать надо аккуратно :)
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Ustus
    А ты сам пробовал ? Я тут пытался на халяву померить, да не тут-то было. NetBurst и AMD64 дают примерно вдвое завышенные значения, а PIII и PM - заниженные ?! Посему плюнул я на это дело - далеко мне до Фога, да, по правде говоря, и не очень то хотелось ;)

    PS: Зато убедился в отстойности AMD64 в плане реакции на одиночную ошибку предсказания в цикле. Пеньки ошибаются один раз, но на одиночный сбой не реагируют и продолжают правильно предсказывать по старой схеме, а у этого AMD тащится шлейф ошибок на 3-4 цикла
     
  7. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    leo
    На AMD64 пробовал. Получил декларированые 12 циклов :) На NetBurst значение плавает, судя по всему из-за известной дискретности rdtsc. Но по минимуму на Prescott'е таки около 25-30 тиков. На Northwood'е не помню, что-то мерял, фигня получилась, это было давно и я еще не умел обманывать этих хитрых кремниевых тварей, поэтому они обманывали меня :):):)
    Кстати, если верить Фогу, у AMD64 и P4E одинаковые механизЬмы предсказания переходов. Так может отсюда растут ноги у твоих результатов по ним? :)
    Что же касается PII - так у меня получались железные 10, как и положено. Он туповат, знаете ли, так что на нем можно померить без хитростей. PIII как-то прошел мимо меня :dntknw:

    Ох... этот предсказатель успешно отразил мои попытки его постичь и померить... Даже тот же пресловутый Фог отмечает, что он валится чаще, чем положено бы по алгоритму. Я попытался его потестировать, и у меня получилась вообще ахинея - он вроде бы не валился ЧАЩЕ, но он валился НЕ ТОГДА, когда я ожидал, исходя из алгоритма :dntknw:
    Жуть :):):)

    А вот прочитал Фога по поводу предиктора Core2 - и вообще офигел. ТАКОЕ померить в реальном коде вообще двинуться можно. Особенно, если учесть, что он, как и PM статического предсказания не делает, а прогнозирует первый проход бранча "от балды".
    Еще раз жуть :):):)
     
  8. 0136

    0136 New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2007
    Сообщения:
    112
    ё-моё! много текста , мало дела!

    читал как то книжку... по защите... вот там было такое предложение привязать код к компу.. одна из привязок - размер конвейера. Автор пишет и про P-1 на тот момент времени P-2 это было нечто из фантастики! Но у меня из за того что не было времени - так и не удалось испытать эту предложенную идею %)
    вобщем говорит он такое - очередь проца (конвейер) очищается перед командами (это мы все знаем), после очистки - снова заполняется... и так далее... так вот - если определить некий буфер (например командой inc dx) и перейти на его командой которая очистит очередь (jmp far) и первой же командой забить буфер другой командой (например 90h) то мы легко получим размер конвейера ( в моём примере в dx), с учётом поправки на первую команду (например stosb).
    Короче, я пробывал это на третем пне, в реал моде, у меня всегда ноль получается.
    Я думаю - что , архитектура теперешних процов совсем другая, ну как то по другому уже работает очередь проца, не лох он теперь ;)
    Если кто то знает что то другое, то пусть даст мне внятный ответ.
     
  9. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    0136
    Вот сейчас как обижусь! :):):)
    Даже для Pentium это уже не так. Да и для всех Out-of-Order процессоров. Если не ошибаюсь, последний Intel-процессор, на котором реален такой финт ушами - 80486.
    Именно так. :)
    Внятный ПОЛНЫЙ ответ займет не одну страницу :)
    Покури что ли мануалы по микроархитектуре... можешь начать с производительских, но если интересует экстракт - лучше Агнера Фога. Кстати у него ман с КРАТКИМ описанием архитектур Pentium/MMX/Pro/II/III - NetBurst - Pentium M - Core - Core2 - AMD64 насчитывает 129 страниц на сегодняшний день. Плюс еще 78 страниц - таблицы инструкций. А ты хочешь, чтобы тебе это рассказали в двух словах :)
    В любом случае привязка к железу таким способом ИМХО - дело неперспективное.
     
  10. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    0136
    Если в двух словах, то в современных процессорах рулит переименование регистров. Это значит, что результаты всех операций записываются во внутренние темп-регистры процессора и сидят в них, ожидая (подтверждения) завершения всех предыдущих операций. Когда все пред.операции выполнены и направления переходов определены, то данные либо копируются в архитектурные регистры EAX, EBX и т.д., если все OK, либо просто выбрасываются, если направление перехода было определено не правильно или процессор обнаружил модификацию кода. Причем современные процы не возятся с точным анализом с какого адреса изменен код, а анализируют изменение блоков от 32\64 байт в P6 до 1К в P4 - если производится запись в тот же блок, что и исполняемый в настоящий момент код, то проц без разбора сбрасывает весь конвеер и все темп-результаты, полученные после инструкции записи. Поэтому если часть твоих inc dx и успеет "выполниться", то их результаты по любому не попадут в dx
     
  11. 0136

    0136 New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2007
    Сообщения:
    112
    Всем спасибо за внимание :)