Получи случайную криптовалюту за регистрацию!

Как быстро компьютер может досчитать до миллиона? Объясняет э | Яндекс Кью

Как быстро компьютер может досчитать до миллиона?

Объясняет эксперт Кью, программист Денис Васильковский.

«Человеческое» решение

Для того, чтобы ответить на этот вопрос, необходимо сначала перевести эту задачу на язык вычислений, то есть предельно ясно ответить на вопрос: «Каким образом мы считаем до миллиона?». Компьютеры действует немного не так, как люди. Скажем, если попросить человека досчитать до миллиона, то скорее всего он поймет задачу так: назовем последовательно все числа от одного до миллиона. Когда я скажу «миллион», счет окончен.

Решение «Человек с калькулятором»

Компьютер — это не человек, а скорее «калькулятор на максималках». Если бы меня попросили посчитать до миллиона на калькуляторе, то я бы сделал так:
1. Нажал кнопку «1»;
2. Нажал кнопку «+»;
3. Нажал кнопку «1»;
4. Нажал кнопку «=», на дисплее отобразилось «2»;
5. …

И, нажав оставшиеся 999998 раз «=», я бы наконец увидел «1 000 000» на дисплее и сказал: «Я досчитал».

«Компьютерное» решение

Если же мы хотим исключить человека из счёта, то нам на помощь придет специальная команда, которую не найдешь на калькуляторе, зато она есть у каждого современного процессора: сравнить два числа. А ещё у процессоров, в отличие от калькуляторов, нет экрана, зато есть регистр — кусочек памяти внутри процессора, где может лежать ровно одно число, то самое число, которое мы видим на экране калькулятора, когда он считает.

Таким образом, если мы хотим сосчитать до миллиона, прибавляя по единице каждый раз, то набор команд для процессора (или программы) будет выглядеть так:
1. Положить в регистр число 1;
2. Добавить к регистру единицу;
3. В регистре миллион?;
4. Если нет, вернуться к шагу 2;
5. Если да, то счет закончен.

Процессор не имеет интеллекта и исполняет команды в порядке очереди, прыгая вперёд или назад по списку команд, если его об этом просят. Для того, чтобы досчитать до миллиона, процессору, согласно такой программе, придётся «покрутиться» в буквальном смысле: прыжок с команды №4 на №2 придется повторить 999999 раз прежде чем процессор дойдёт до команды №5 и скажет нам: «Я посчитал!». Всего в данной реализации задачи процессору нужно будет выполнить чуть более трех миллионов команд, прежде чем мы закончим.

Так сколько времени нужно, чтобы досчитать до миллиона?

Одна команда в процессоре выполняется за один герц. Типичный процессор ноутбука или настольного компьютера сейчас работает в диапазоне 2-5 гигагерц, то есть 2-5 миллиардов команд в секунду — так примерно можно переводить с технического сленга слово «гигагерц». Для ровного счёта остановимся на трёх гигагерцах — трёх миллиардах команд в секунду. Мы прикинули раньше, что нам нужно исполнить 3 миллиона команд, так что при возможности исполнить 3 миллиарда в секунду, нам потребуется подождать всего одну тысячную долю секунды, чтобы дождаться ответа от компьютера.

Можно ли быстрее?

Можно и быстрее. Если перевернуть счёт и считать с миллиона до нуля, то можно соединить вместе инструкции №3 и №4, потому что в большинстве компьютеров есть специальная инструкция «сравнить с нулём и прыгнуть, если результат ноль (не ноль)». Такая программа будет выглядеть так:
1. Положить в регистр число 1000000
2. Уменьшить регистр на единицу
3. Если в регистре не ноль, вернуться к шагу 2
4. Счёт закончен

Выкинув одну операцию мы уменьшили число инструкций с примерно трех миллионов операций до двух миллионов. А значит такая программа закончит работу через 0,000666 секунды, а не через 0,001 секунды.

А ещё быстрее?

Ещё быстрее — вряд ли. Если, конечно, не сделать специализированный процессор, который умеет быстро делать ровно одну вещь — считать до миллиона. Такой процессор, думаю, способен уложиться даже за миллионные доли секунды, только вот в Fortnite на нём поиграть не получится, да и зайти на Яндекс.Кью тоже. Если ваша задача допускает такое, что два процессора будут считать одновременно: скажем, один считает от 1 до 500 тысяч, а другой от 500 тысяч до миллиона, то можно выжать немного скорости из современных многоядерных процессоров.