Время выполнения инструкций

Тема в разделе "WASM.ASSEMBLER", создана пользователем paymera, 10 апр 2010.

  1. paymera

    paymera New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2009
    Сообщения:
    15
    Приветствую.
    Скажите, почему нижеприведенный код на разных машинах дает разный результат (разница в 3-4 раза):
    Код (Text):
    1.        _asm{       
    2.        rdtsc
    3.        xchg ecx,eax
    4.        rdtsc
    5.        sub eax,ecx
    6.        mov lval,eax
    7.     }
    На десктопе (Pentium E8500 Core 2 Duo 3.17 Ггц 2 Гб ОЗУ) этот код дает 28 тактов. А на ноутбуке (Core 2 Duo T7500 2,2 ГГц 1 Гб ОЗУ) - 130.
    Разве количество тактов зависит от мощности процессора? Неужели на ноуте большое количество переключений планировщика на другие процессы и в связи с этим считаются "ненужные" мне такты?
     
  2. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Разная скорость работы памяти, разное содержимое кэша и TLB... В общем, измерять время выполнения одной отдельно взятой инструкции на современных процессорах попросту бессмысленно: слишком много посторонних факторов на это влияет. Да и исполняются простые команды по нескольку штук за такт (а сколько -- зависит от самих инструкций, их порядка, используемых в них операндов)...
     
  3. Maratyszcza

    Maratyszcza New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    32
    Измерять время выполнения одной инструкции не имеет смысла, ибо счётчик числа тактов обновляется реже, чем раз в такт. Поэтому измеряют всегда время выполнения куска кода, и желательно, чтобы этот кусок кода был побольше. Кроме того, нужно сериализовать конвеер до и после выполнения кода с помощью инструкции cpuid. Как это делать правильно смотри, например, в коде Агнера Фога (www.agner.org/optimize/). Если тебе просто нужно время выполнения инструкции, могу посоветовать несколько документов, где их можно взять:
    http://instlatx64.freeweb.hu - реально замеренные Everest'ом latency и throughput инструкций и некоторые параметры кэша
    http://www.agner.org/optimize/ - уже упомянутый сайт Агнера Фога, где есть не только latency и throughput инструкций, но и кое-какие сведения о микрооперациях, из которых они состоят
    Optimization Manuals от Intel и AMD. В приложениях к этим мануалам есть latency, throughput и execution unit наиболее распространённых инструкций
     
  4. paymera

    paymera New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2009
    Сообщения:
    15
    Все понял! Благодарю за ответы!