Благоговение

Николай Кривуша
Иногда я ощущаю благоговение, когда держу в руках современный смартфон.
Я испытываю небольшие страх и восторг одновременно, когда понимаю, что именно я держу в руке.
Современное общество настолько привыкло к этим маленьким вычислительным машинкам, что оно уже и не помнит (или не знает, или не понимает) насколько это фантастические машины!

Позвольте, я объясню, что я имею в виду.

Я захожу в меню настроек своего смартфона. В разделе спецификации тактико-технических характеристик я вижу характеристики процессора — "мозга" смартфона. Там указано: 8 ядер, 2 ГГц.
Давайте разберёмся, что же это значит.
Процессор выполняет все свои операции строго под такт волшебного маршевого барабана — генератора тактовой частоты. На каждый удар этого "барабана" процессорное ядро выполняет, как правило, одну какую-нибудь простую операцию. Такой операцией может быть сложение двух чисел, каждое из которых находится в своей уникальной ячейке памяти, с сохранением результата сложения в третью ячейку памяти, или с сохранением в одну из тех ячеек, где было одно из слагаемых, естественно, с затиранием этого слагаемого. Или же ядро может переместить численное значение из одной ячейки памяти в другую ячейку памяти.
Самой сложной и "крутой" операцией, которую способен сделать процессор, является умножение двух чисел между собой. Раньше были редки процессоры, которые могли бы сделать такое за один такт, тем не менее, нынче есть такие процессоры, которым это по зубам. Они могут перемножить два числа между собой за один такт. Звучит как-то невпечатляюще, да?!

Но, позвольте, я продолжу.

Процессор — это исключительно математическое устройство, которое знает только один язык — язык математики, и оперирует он только цифрами. Помимо математических операций процессор умеет ещё несколько интересных вещей из разряда логической алгебры, но логика является неотъемлемой частью математики, так что, это всё одно и то же.
Ядро процессора выполняет, как я уже упомянул ранее, как правило, одну операцию за один такт волшебного тактового генератора. Некоторые ядра умеют делать больше операций за один такт, но классическим вариантом является выполнение одной операции за такт.
В процессоре моего смартфона независимых самостоятельных ядер аж 8 штук, и по одному и тому же удару тактового "барабана" каждое ядро выполнит какую-нибудь одну операцию. Теперь вы понимаете, почему ядер делают несколько — это позволяет за один такт сделать аж в 8 раз больше вычислений. Можно было бы добиться того же результата в скорости вычислений и с одним ядром, но в этом случае нашему "барабанщику" пришлось бы отбивать такт в 8 раз быстрее, то есть, в моём случае, это была бы частота равная 16 гигагерц. Существуют сложности создания работающих на таких скоростях процессоров, эти сложности связаны с некоторыми ограничениями в происходящих физических процессах внутри твёрдого вещества полупроводников, из которых изготавливаются процессоры.
Ядра процессора моего смартфона работают на частоте 2 гигагерца каждое. И это довольно много. Что же такое Герц? Герц — это единица измерения частоты событий, равная числу однотипных событий, происходящих за одну секунду. Если вы будете ударять палочкой по барабану ровно один раз в одну секунду, то частота ваших ударов будет равна одному герцу. Если же вы будете ударять палочкой по барабану вдвое быстрее, то бишь — два раза в секунду, то частота ваших ударов будет равна двум герцам.
Волшебный тактовый генератор в процессоре моего смартфона отбивает этот ритм чуть-чуть быстрее. Он делает 2000000000 (2 миллиарда) ударов палочкой по барабану за одну секунду.
Таким образом, каждое ядро процессора в моём смартфоне выполняет 2 миллиарда операций в секунду. Поскольку ядер 8, то весь процессор вкупе может выполнять 16 миллиардов операций в секунду.
При частоте 2 гигагерца одно ядро выполняет одну новую операцию каждые 0,5 наносекунды (одна наносекунда равна одной миллиардной части секунды). За одну целую наносекунду ядро выполнит, соответственно, две операции, а весь процессор с его 8-ю ядрами выполнит 16 операций. Это могут быть и операции умножения между собой двух чисел.
Процессор оперирует числами в двоичной системе исчисления, эти числа состоят исключительно из нулей и единиц. Человеку удобно пользоваться для подсчётов десятичной системой исчисления, в которой есть целых 9 цифр — от нуля до девятки. Процессоры пользуются лишь двумя цифрами из этого спектра — нулём и единицей. Им так удобнее.
В одной ячейке памяти процессора моего смартфона может содержаться число из 64-х нулей или единиц, или из нулей вперемешку с единицами. Максимальное число в десятичной системе исчисления, которое может поместиться в такую ячейку памяти, равно примерно 18,44*10^18 — грубо говоря, это 18 с 18-ю нулями после. Я даже не знаю, как называется такое число. Но не суть.
Перемножить процессор может между собой два числа состоящих из 32-х единиц или нулей каждое. Таким числом максимально может быть 4,3*10^9 (4,3 миллиарда).
Я было хотел попробовать перемножить два таких числа между собой столбиком на листе бумаги, чтобы сравнить, насколько быстрее процессор делает такую операцию, чем я, но, начав писать этот рассказ, я понял, что делать это я буду очень долго, возможно, что у меня ушло бы на это несколько десятков минут. Процессор же моего смартфона может сделать целых 16 таких умножений всего за одну наносекунду.
Давайте вспомним, какой процесс в природе считается самым быстрым. Вероятно, многим сразу же на ум придёт скорость распространения света в пространстве. Действительно, считается, что ничто не может перемещаться в нашем четырёх-мерном пространстве-времени, где четвёртое измерение — время, быстрее, чем свет.
Скорость света грубо равна 300 тысячам километров в секунду. Довольно быстро. Мы с детства знаем, что это очень-очень быстро. Мы привыкли к тому, что в нашем обыденном мире предметов свет распространяется якобы "мгновенно". Тем не менее, его скорость не бесконечная, а весьма определённая и конечная. Она так же зависит от среды, в которой свет распространяется, но не будем вдаваться в подробности и будем считать, что свет распространяется со скоростью 300 тысяч километров в секунду.
С такой скоростью свет пролетит в пространстве один метр за 3,33 наносекунды.
Я представляю себе, что за то время, пока свет в моей комнате пролетает от включённой мною лампочки один метр за 3,33 наносекунды, процессор в моём смартфоне успевает сделать по 16 операций за наносекунду, итого 3,33*16 = 53,28 операций! Полных операций же будет выполненно 48 штук за 3 наносекунды, оставшиеся 0,33 наносекунды процессор будет простаивать в ожидании очередного удара магического тактового барабана.
За то время, пока свет в пространстве пролетает один метр, процессор успевает сделать 48 полных умножений между собой пар 32-х разрядных чисел!
Только вообразите себе это!

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

Каждую секунду компьютеры, смартфоны и прочие вычислительные машины по всему миру выполняют колоссальное количество вычислений. Ваш смартфон или ноутбук сейчас выполняет гиганское количество вычислений, в то время пока вы читаете этот текст. Это фантастика, которая стала обыденной реальностью. Но мне эта фантастика иногда кажется ужасающе невероятно-прекрасной.

Именно поэтому, беря в руку свой смартфон, я часто испытываю благоговение. Беря его в руку, мне иногда хочется сказать:
— Извините, Мистер Смартфон, что я отрываю вас от ваших серьёзных вычислений, но мне нужно срочно зайти в социальные сети, чтобы посмеяться с мемов и поставить пару лайков под фотографиями котиков.

14 декабря 2017 г.