· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.ZEN —› a^=b^=a^=b; //обмен значений

<< . 1 . 2 . 3 .

Посл.отвђт Сообщенiе


Дата: Июн 29, 2003 16:33:44 · Поправил: Black_mirror

Quantum

Ты был прав, без цикла получается быстрее, только вот не понятно на сколько. Оба варианта написал на асме и вставил в код, замеряющий время(а не сделал их ввиде функций). Код для замера времени сказал что он выполнится за 11 тактов(rdtsc/mov ebx,eax/.../rdtsc). Этот код был заключен в цикл, который выполнял замер 65536 раз, и сохранял минимальный результат. Вариант без цикла(для подсчета бит) работал 51 такт, с циклом - 107. Проверял на eax=0ffffffffh. Затем выровнял метку для организации внешнего цикла, и метку во втором варианте. Первый вариант стал работать за 14(!!) тактов, а второй за 90.
Вообщем я не понимаю прочему такая большая разница: 51 и 14 тактов ... Вернее не понимаю почему такая большая разника для кода в котором вообще нет переходов?!


Дата: Июл 1, 2003 09:39:13

>... почему такая большая разника для кода в
> котором вообще нет переходов?!

Насколько мне позволяют судить мои скромные познания и опыт работы с конвеером, проц тормозит тогда, когда:

1) Он неправильно предсказывает переход;
2) Всегда лучше, когда условный переход редко выполняется, вот у Зубкова есть такой пример:

; Процедура rand
; возвращает в ЕАХ случайное положительное 32-; битное число
; (от 0 до 231-2)
;
rand proc near
push edx
; считать последнее случайное число
mov eax,dword ptr seed
; проверить его, если это -1,
test eax,eax
; функция еще ни разу не
js fetch_seed
; вызывалась и надо создать
; начальное значение
randomize:
; умножить на число а,
mul dword ptr rand_a
; взять остаток от
; деления на 231-1
div dword ptr rand_m
mov eax,edx
; сохранить для
; следующих вызовов
mov dword ptr seed,eax
pop edx
ret

fetch_seed:
push ds
push 0040h
pop ds
mov eax,dword ptr ds:006Ch
; считать
; двойное слово из области
pop ds
; данных BIOS по адресу
; 0040:0060 - текущее число
jmp short randomize
; тактов таймера

Видимо, дело в этом ?

<< . 1 . 2 . 3 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.072