привет, кто подскажет рецепт с помощью которого можно узнать размер конвеера и вообще, расскажи те чё то %)
0136 Что значит узнать ? Если прочитать в мануалах и статьях - это одно, если же пытаться определить программными тестами - то это очень не просто и под силу только великому А.Фогу Короче - чего изволите ? Ссылки или так тебе цифры назвать ?
Классическим методом определения длины конвейера (который, кстати, использует великий А. Фог ) является измерение штрафа на неправильно предсказаный переход. Однако, в NetBurst, например, в реальном приложении штраф может быть больше, что связано с некоторыми архитектурными особенностями, поэтому действовать надо аккуратно
Ustus А ты сам пробовал ? Я тут пытался на халяву померить, да не тут-то было. NetBurst и AMD64 дают примерно вдвое завышенные значения, а PIII и PM - заниженные ?! Посему плюнул я на это дело - далеко мне до Фога, да, по правде говоря, и не очень то хотелось PS: Зато убедился в отстойности AMD64 в плане реакции на одиночную ошибку предсказания в цикле. Пеньки ошибаются один раз, но на одиночный сбой не реагируют и продолжают правильно предсказывать по старой схеме, а у этого AMD тащится шлейф ошибок на 3-4 цикла
leo На AMD64 пробовал. Получил декларированые 12 циклов На NetBurst значение плавает, судя по всему из-за известной дискретности rdtsc. Но по минимуму на Prescott'е таки около 25-30 тиков. На Northwood'е не помню, что-то мерял, фигня получилась, это было давно и я еще не умел обманывать этих хитрых кремниевых тварей, поэтому они обманывали меня Кстати, если верить Фогу, у AMD64 и P4E одинаковые механизЬмы предсказания переходов. Так может отсюда растут ноги у твоих результатов по ним? Что же касается PII - так у меня получались железные 10, как и положено. Он туповат, знаете ли, так что на нем можно померить без хитростей. PIII как-то прошел мимо меня Ох... этот предсказатель успешно отразил мои попытки его постичь и померить... Даже тот же пресловутый Фог отмечает, что он валится чаще, чем положено бы по алгоритму. Я попытался его потестировать, и у меня получилась вообще ахинея - он вроде бы не валился ЧАЩЕ, но он валился НЕ ТОГДА, когда я ожидал, исходя из алгоритма Жуть А вот прочитал Фога по поводу предиктора Core2 - и вообще офигел. ТАКОЕ померить в реальном коде вообще двинуться можно. Особенно, если учесть, что он, как и PM статического предсказания не делает, а прогнозирует первый проход бранча "от балды". Еще раз жуть
ё-моё! много текста , мало дела! читал как то книжку... по защите... вот там было такое предложение привязать код к компу.. одна из привязок - размер конвейера. Автор пишет и про P-1 на тот момент времени P-2 это было нечто из фантастики! Но у меня из за того что не было времени - так и не удалось испытать эту предложенную идею %) вобщем говорит он такое - очередь проца (конвейер) очищается перед командами (это мы все знаем), после очистки - снова заполняется... и так далее... так вот - если определить некий буфер (например командой inc dx) и перейти на его командой которая очистит очередь (jmp far) и первой же командой забить буфер другой командой (например 90h) то мы легко получим размер конвейера ( в моём примере в dx), с учётом поправки на первую команду (например stosb). Короче, я пробывал это на третем пне, в реал моде, у меня всегда ноль получается. Я думаю - что , архитектура теперешних процов совсем другая, ну как то по другому уже работает очередь проца, не лох он теперь Если кто то знает что то другое, то пусть даст мне внятный ответ.
0136 Вот сейчас как обижусь! Даже для Pentium это уже не так. Да и для всех Out-of-Order процессоров. Если не ошибаюсь, последний Intel-процессор, на котором реален такой финт ушами - 80486. Именно так. Внятный ПОЛНЫЙ ответ займет не одну страницу Покури что ли мануалы по микроархитектуре... можешь начать с производительских, но если интересует экстракт - лучше Агнера Фога. Кстати у него ман с КРАТКИМ описанием архитектур Pentium/MMX/Pro/II/III - NetBurst - Pentium M - Core - Core2 - AMD64 насчитывает 129 страниц на сегодняшний день. Плюс еще 78 страниц - таблицы инструкций. А ты хочешь, чтобы тебе это рассказали в двух словах В любом случае привязка к железу таким способом ИМХО - дело неперспективное.
0136 Если в двух словах, то в современных процессорах рулит переименование регистров. Это значит, что результаты всех операций записываются во внутренние темп-регистры процессора и сидят в них, ожидая (подтверждения) завершения всех предыдущих операций. Когда все пред.операции выполнены и направления переходов определены, то данные либо копируются в архитектурные регистры EAX, EBX и т.д., если все OK, либо просто выбрасываются, если направление перехода было определено не правильно или процессор обнаружил модификацию кода. Причем современные процы не возятся с точным анализом с какого адреса изменен код, а анализируют изменение блоков от 32\64 байт в P6 до 1К в P4 - если производится запись в тот же блок, что и исполняемый в настоящий момент код, то проц без разбора сбрасывает весь конвеер и все темп-результаты, полученные после инструкции записи. Поэтому если часть твоих inc dx и успеет "выполниться", то их результаты по любому не попадут в dx