?

Log in

No account? Create an account
программистское - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

программистское [фев. 13, 2007|04:52 pm]
Anatoly Vorobey

Пишу на ассемблере! Просто чуть ли не "бойцы вспоминают минувшие дни".


       .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
СсылкаОтветить

Comments:
[User Picture]From: alta_voce
2007-02-13 03:12 pm
В минувшие дни какой-то не такой ассемблер был.
(Ответить) (Thread)
[User Picture]From: avva
2007-02-13 03:12 pm
Что да то да :(
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: slobin
2007-02-13 03:19 pm
А я так и не выучил ассемблера защищённого режима. На реалмодовом 8086 писал довольно много. До этого на PDP-11 и совсем немножко на 360 и 8080.

... Эстетически мотивированное любопытство ...

(Ответить) (Thread)
[User Picture]From: avva
2007-02-13 03:22 pm
Намного проще, чем реалмод, надо сказать :) после того, как привыкнешь.
(Ответить) (Parent) (Thread) (Развернуть)
From: vacuite
2007-02-13 03:23 pm
юзай насм, там интеловская семантика
(Ответить) (Thread)
[User Picture]From: avva
2007-02-13 03:27 pm
спасибо, мне своей головной боли хватает.
(Ответить) (Parent) (Thread)
[User Picture]From: aburachil
2007-02-13 03:29 pm

subl %eax, %eax

Это означает eax:=0 ? В наше время гламурнее было писать для этого "xor a" ;-)
(Ответить) (Thread)
[User Picture]From: avva
2007-02-13 03:33 pm

Re: subl %eax, %eax

Да, но sub готичнее, ведь он включает в себя глубокую мысль: "ибо прах ты и в прах возвратишься" (Бытие 3:19), а xor это что - так фигня какая-то побитовая.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: avva
2007-02-13 03:49 pm
Знаю, спасибо :)
(Ответить) (Parent) (Thread) (Развернуть)
(Удалённый комментарий)
[User Picture]From: avva
2007-02-13 03:50 pm
Это AT&T синтаксис, его понимает gcc.
(Ответить) (Parent) (Thread)
[User Picture]From: iratus
2007-02-13 04:00 pm
ну функция возвращает cpuid или артачится :)))
(Ответить) (Thread)
[User Picture]From: avva
2007-02-13 05:09 pm
вовсе нет :)
(Ответить) (Parent) (Thread)
[User Picture]From: unbe
2007-02-13 05:42 pm
А зачем второй cpuid?
(Ответить) (Thread)
[User Picture]From: avva
2007-02-13 05:50 pm
А зачем первый? Затем же.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: madfire
2007-02-13 05:48 pm
at&t синтаксис придумали нечеловеки..
(Ответить) (Thread)
[User Picture]From: avva
2007-02-13 05:50 pm
Да :( никогда не привыкну, изверги.
(Ответить) (Parent) (Thread)
[User Picture]From: djuffin
2007-02-13 06:04 pm
Все у AT&T по-другому. То два плюсика к C дорисуют, то проценты к регистрам.
(Ответить) (Thread)
[User Picture]From: faceted_jacinth
2007-02-13 10:56 pm
О, я правильно понял, что делает этот код.

Разные Люди советуют всё-таки использовать АПИ (под виндой - QueryPerformanceFrequency/QueryPerformanceCounter), которые вешаются на какой-то другой счётчик, насколько я понял, потому что Есть Нюансы. Оно, конечно, гораздо тормознее (когда я мерял, вызов QueryPerformanceCounter занимал несколько тысяч тактов), но его ж и не нужно часто вызывать.

Из нюансов -- проблемы на многопроцессорных системах (рекомендуется выставлять аффинити тому треду, которому нужно это всё мерять и раздавать окружающим) и на некоторых мобильных процессорах, которые самопроизвольно роняют тактовую частоту при высоком айдл тайме.
(Ответить) (Thread)
[User Picture]From: avva
2007-02-18 11:28 pm
С мобильными процессорами я сам убедился забавным образом - чтобы проверить таймер, обернул им вызов сначала sleep(1), а потом usleep(1). Сон длиной в одну микросекунду дал правильную тактовую частоту процессора, а длиной в секунду - в три раза меньше, совершенно последовательно.

И про многопроцессоры понимаю. И про другие счетчики знаю, но спасибо все равно :) (но я в основном на линуксе запускать буду. но там тоже есть). Я в основном для самоудовлетворения, плюс все-таки для некоторых конкретных целей (сравнения нескольких разных алгоритмов на многих наборах исходных данных, причем алгоритмы бегут быстро, на однопроцессорной машине и в среднем намного быстрее, чем может переключиться контекст на другой тред - а такие редкие исключения можно убрать усреднением по медиане нескольких результатов; и все это для улучшения своего собственного понимания) хорошо подходит.
(Ответить) (Parent) (Thread)
[User Picture]From: ygam
2007-02-14 05:20 am
Кстати, ты написал memcached? Возможно, его будут использовать в Амазоне.
(Ответить) (Thread)
[User Picture]From: avva
2007-02-18 11:23 pm
Я написал. Если можешь рассказать подробнее, расскажи (можно письмом), любопытно. Если нет - тоже нормально. Последние 2 года я почти не занимался его развитием, хотя возможно вернусь к этому, если будет время.
(Ответить) (Parent) (Thread) (Развернуть)