Доброго времени суток! Где можно найти информацию о количестве тактов на исполнение x86 инструкция? Смотрел сайт Интела: не нашел.
А однозначного ответа на этот вопрос попросту нет, уж очень от многих факторов зависит время выполнения в зависимости от обстоятельств.
Хм... возможно,но в сети я находил эту информацию для 8086-486. Сейчас интересуют современным модели. Хотелосьбы знать сколько тактов требуется для SSE, переходов и целочисленного деления в ALU на процессорах поколения Intel Core 2.
exst Латентности инструкций приводятся в мануалах по оптимизации - у АМД подробно (практически для всех команд и вариаций операндов), а у Интел выборочно. Поэтому дополнительно можно юзать instruction_tables.pdf Агнера Фога (http://www.agner.org/optimize/)
exst А вот для этих процов сказать как раз вполне возможно: они не выполняют несколько инструкций параллельно (первыми такими стали Пни-1), поэтому нет проблем с зависимостью по данным и прочими прелестями. Поэтому скорость выполнения одной отдельной инструкции уже на просто Пнях не имеет особого смысла, надо всегда смотреть, в какой обстановке ей приходится выполняться (грубо говоря, команды MOV EAX, EBX и MOV ECX, EDX могут быть выполнены параллельно, а вот MOV EAX, EBX и MOV ECX, EAX -- нет, потому что возникает зависимость по данным).
А FPU не суперскалрен? Просто ожидаю от SSE более быстрое деление чем от FPU. С переходами уже разобрался - муторно это).
exst Латентность веществ.деления зависит от требуемой точности (single,double,extended). В SSE точность определяется типом операции и соотв-но divss\ps выполняется быстрее divsd\pd. FPU по умолчанию работает с макс.точностью extended, однако ее можно понизить до single или double установкой поля PC в control-word (FSTCW,FLDCW). При одинаковой точности SSE и FPU деления выполняются примерно за одно время, поэтому заметный выигрыш SSE может дать только на векторных операциях divps\pd (причем pd только на Core2 и AMD K10, т.к. в других процах 128-бит xmm обрабатываются за два приема по 64 бита) PS: За счет суперскалярности\внеочередности во время деления могут выполняться другие независимые операции. Это позволяет например оптимизировать вычисление сложных выражений вида X/Y, первым делом вычисляя Y и запуская деление Z=1/Y, на фоне которого производить расчет сложного выражения X (см.коммент к статье). Ну и ес-но везде, где это возможно, лучше заменять деление на умножение, т.е. если нужно все значения в массиве X поделить на одно значение Y, то лучше перед циклом вычислить Z=1/Y и затем в цикле умножать X*Z