Книга: Программирование для Linux. Профессиональный подход
Листинг 9.2. (bit-pos-asm.c) Нахождение позиции старшего значащего бита с помощью инструкции bsrl
Листинг 9.2. (bit-pos-asm.c) Нахождение позиции старшего значащего бита с помощью инструкции bsrl
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]) {
long max = atoi(argv[1]);
long number;
unsigned position;
volatile unsigned result;
/* Повторяем вычисления для большого количества чисел. */
for (number = 1; number <= max; ++number) {
/* Вычисляем позицию старшего значащего бита с помощью
ассемблерной инструкции bsrl. */
asm("bsrl %1, %0" : "=r" (position) : "r" (number));
result = position;
}
return 0;
}
Скомпилируем обе версии программы в режиме полной оптимизации:
% cc -O2 -о bit-pos-loop bit-pos-loop.c
% cc -O2 -о bit-pos-asm bit-pos-asm.c
Теперь запустим их с помощью команды time
, которая замеряет время выполнения. В командной строке каждой программы указано большое значение, чтобы программа выполнялась хотя бы несколько секунд.
% time ./bit-pos-loop 250000000
19.51user 0.00system 0:20.40elapsed 95%CPU (0avgtext+0avgdata
0maxresident)k0inputs+0outputs (73major+11minor)pagefaults 0swaps
% time ./bit-pos-asm 250000000
3.19user 0.00system 0:03.32elapsed 95%CPU (0avgtext+0avgdata
0maxresident)k0inputs+0outputs (73major+11minor)pagefaults 0swaps
Приведенные результаты могут немного меняться в зависимости от загруженности системы, но хорошо видно, что ассемблерная версия выполняется гораздо быстрее.
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Пошаговые инструкции для перехода на 3-й диалект
- Повышение производительности приложений с помощью хранимых процедур
- Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe
- Организация пользователей в группы с помощью ролей
- Приложение 21 Образец должностной инструкции начальника отдела по работе с сетевыми клиентами
- Starting SNAT and the POSTROUTING chain
- State NEW packets but no SYN bit set
- Листинг 15.11. Код для загрузки файла с Web-сервера
- Приложение 19 Образец должностной инструкции мерчендайзера
- 6.2.2. Нахождение границ диапазона
- Часть I Скрываем свое местонахождение и посещаем заблокированные сайты