программистское
Feb. 13th, 2007 04:52 pmПишу на ассемблере! Просто чуть ли не "бойцы вспоминают минувшие дни".
.text
.globl readcounter
readcounter:
pushl %ebx
pushl %ecx
subl %eax, %eax
cpuid
rdtsc
pushl %eax
pushl %edx
subl %eax, %eax
cpuid
popl %edx
popl %eax
popl %ecx
popl %ebx
ret
.size readcounter, .-counter
no subject
Date: 2007-02-13 03:12 pm (UTC)no subject
Date: 2007-02-13 03:12 pm (UTC)no subject
Date: 2007-02-13 03:19 pm (UTC)... Эстетически мотивированное любопытство ...
no subject
Date: 2007-02-13 03:19 pm (UTC)Тот самый классический ассемблер я ненавидела, а другой известный тебе бывший программер очень даже любил.
no subject
Date: 2007-02-13 03:22 pm (UTC)no subject
Date: 2007-02-13 03:23 pm (UTC)no subject
Date: 2007-02-13 03:27 pm (UTC)subl %eax, %eax
Date: 2007-02-13 03:29 pm (UTC)no subject
Date: 2007-02-13 03:30 pm (UTC)... She sells the seashells on the seashore ...
Re: subl %eax, %eax
Date: 2007-02-13 03:33 pm (UTC)offtopic
Date: 2007-02-13 03:47 pm (UTC)no subject
Date: 2007-02-13 03:49 pm (UTC)no subject
Date: 2007-02-13 03:50 pm (UTC)глубокую мысль
Date: 2007-02-13 03:54 pm (UTC)bash to bash
no subject
Date: 2007-02-13 04:00 pm (UTC)Re: subl %eax, %eax
Date: 2007-02-13 04:30 pm (UTC)Re: subl %eax, %eax
Date: 2007-02-13 05:07 pm (UTC)no subject
Date: 2007-02-13 05:09 pm (UTC)Мне вот интересно,
Date: 2007-02-13 05:22 pm (UTC)no subject
Date: 2007-02-13 05:30 pm (UTC)В общем, как обычно выглядит. eax это нижняя половина rax итд.
Основные инструкции те же.
no subject
Date: 2007-02-13 05:42 pm (UTC)no subject
Date: 2007-02-13 05:48 pm (UTC)no subject
Date: 2007-02-13 05:50 pm (UTC)no subject
Date: 2007-02-13 05:50 pm (UTC)no subject
Date: 2007-02-13 06:04 pm (UTC)no subject
Date: 2007-02-13 06:15 pm (UTC)no subject
Date: 2007-02-13 06:27 pm (UTC)Но как-то симметричнее и последовательнее так, по-моему. А что касается самих затрат, я все равно буду учитывать (примерные) затраты на cpuid при калибровке результатов, так какая уж разница, один раз или два.
no subject
Date: 2007-02-13 07:08 pm (UTC)no subject
Date: 2007-02-13 08:01 pm (UTC)no subject
Date: 2007-02-13 08:04 pm (UTC)no subject
Date: 2007-02-13 08:06 pm (UTC)no subject
Date: 2007-02-13 08:27 pm (UTC)no subject
Date: 2007-02-13 08:54 pm (UTC)Проще говоря, если даже в случае без 2го cpuid будет какое-то "убыстрение" (хотя неясно, относительно чего), то в случае с ним будем замедление, которое гораздо труднее учесть.
Против "подобно тому...": первый cpuid делается только чтобы избежать OOO исполнения самого rdtsc. OOO исполнения чего нужно избежать после rdtsc?
Извините, что так длинно :)
no subject
Date: 2007-02-13 10:56 pm (UTC)Разные Люди советуют всё-таки использовать АПИ (под виндой - QueryPerformanceFrequency/QueryPerformanceCounter), которые вешаются на какой-то другой счётчик, насколько я понял, потому что Есть Нюансы. Оно, конечно, гораздо тормознее (когда я мерял, вызов QueryPerformanceCounter занимал несколько тысяч тактов), но его ж и не нужно часто вызывать.
Из нюансов -- проблемы на многопроцессорных системах (рекомендуется выставлять аффинити тому треду, которому нужно это всё мерять и раздавать окружающим) и на некоторых мобильных процессорах, которые самопроизвольно роняют тактовую частоту при высоком айдл тайме.
no subject
Date: 2007-02-14 02:11 am (UTC)Во-вторых, задержка у него самого меняется 90 до 120 циклов в зависимости от знака зодиака и погоды на Марсе, так что абсолютной точности не добиться.
http://softwarecommunity.intel.com/ISN/Community/en-US/forums/thread/30226599.aspx
no subject
Date: 2007-02-14 03:26 am (UTC)no subject
Date: 2007-02-14 05:02 am (UTC)no subject
Date: 2007-02-14 05:20 am (UTC)no subject
Date: 2007-02-14 05:22 am (UTC)no subject
Date: 2007-02-14 08:19 am (UTC)Реально жрет энергию текущий по проводам ток и перезаряд емкостей.
В реализации вычитания проводов заметно больше, чем в реализации побитовых операций.
no subject
Date: 2007-02-16 12:17 am (UTC)Re: subl %eax, %eax
Date: 2007-02-18 11:15 pm (UTC)no subject
Date: 2007-02-18 11:23 pm (UTC)no subject
Date: 2007-02-18 11:28 pm (UTC)И про многопроцессоры понимаю. И про другие счетчики знаю, но спасибо все равно :) (но я в основном на линуксе запускать буду. но там тоже есть). Я в основном для самоудовлетворения, плюс все-таки для некоторых конкретных целей (сравнения нескольких разных алгоритмов на многих наборах исходных данных, причем алгоритмы бегут быстро, на однопроцессорной машине и в среднем намного быстрее, чем может переключиться контекст на другой тред - а такие редкие исключения можно убрать усреднением по медиане нескольких результатов; и все это для улучшения своего собственного понимания) хорошо подходит.
no subject
Date: 2007-02-18 11:28 pm (UTC)no subject
Date: 2007-02-18 11:29 pm (UTC)no subject
Date: 2007-02-19 01:16 am (UTC)