Сколько ПК нужно, чтобы досчитать до одного триллиона
Бенчмарк того, сколько времени нужно ПК, чтобы досчитать до одного триллиона и дальше, с обновлёнными результатами 2023 года.
Этот вопрос возник в разговоре с коллегой о компании, оценённой более чем в 20 trillion dollars - и мы просто не могли представить, как такая сумма выглядела бы наличными. Чтобы хоть как-то представить, мы прикинули, сколько 100-долларовых купюр нужно, чтобы один раз обернуть Землю. Ответ, кажется, был около 240.000.000 - то есть примерно 24 billion US dollars. Это очень много денег. Сколько времени человеку понадобилось бы, чтобы пересчитать столько денег? Точно никто не скажет, но речь о десятках тысяч лет.
С учётом этого, мы можем достаточно хорошо оценить, сколько времени нужно компьютеру, чтобы досчитать до одного trillion. Просто итерировать, без лишних действий. Для этого я написал небольшой кусочек кода, который замеряет, сколько занимает счёт до одного billion, и затем простыми вычислениями прикидывает, сколько займёт счёт до различных значений, и выводит это в дружественном виде.
Результаты интересные. И ответ: зависит от вашей машины. Даже на одной и той же машине вы получите разные результаты в зависимости от нагрузки. Но взглянем на мои:
Обновлённые результаты на октябрь 2023 - на этот раз на i9-11900k с водяным охлаждением.
9 minutes, 38 seconds for 1 trillion (12 zeros)
6 days, 16 hours for 1 quadrillion (15 zeros)
18 years, 130 days for 1 quintillion (18 zeros)
18356 years, 60 days for 1 sextillion (21 zeros)
Сравнить эти результаты с теми, что были 10 лет назад, когда я впервые написал этот пост, очень любопытно. Время упало с нескольких часов до менее чем 10 минут. Конечно, это в каком-то смысле сравнение яблок и апельсинов: исходный бенчмарк работал на бюджетной CPU ноутбука, а обновлённые числа - на разблокированной десктопной CPU с водяным охлаждением. Но всё равно интересно посмотреть, как это меняется со временем.
Исходные результаты 2013 года, на ноутбуке:
- one billion (9 zeros) достигается быстро - 15 секунд
- но дойти до one trillion (12 zeros) - разница потрясающая - 4 часа 10 минут. По сути в 1000 раз больше.
- разрывы становятся ещё внушительнее по мере подъёма к quadrillions (15 zeros) - это 173 дня, и затем quintillions (18 zeros) - это 475 лет
- последнее, для чего я считал, - one sextillion (21 zeros), и держитесь крепче: моему ноутбуку потребовалось бы ровно 475473 года, 292 дня, 6 часов, 43 минуты и 52 секунды, чтобы доитерировать до этого значения.
Как я говорил, эти значения сильно зависят от машины. Так что попробуйте сами и поделитесь результатами. Код ниже:
using System.Diagnostics;
var sw = new Stopwatch();
sw.Start();
// 10 billion iterations (10 zeros)
for (long i = 1; i <= 10000000000; i++) ;
sw.Stop();
Console.WriteLine($"{FormatString(sw.ElapsedTicks, 100)} for 1 trillion (12 zeros)");
Console.WriteLine($"{FormatString(sw.ElapsedTicks, 100000)} for 1 quadrillion (15 zeros)");
Console.WriteLine($"{FormatString(sw.ElapsedTicks, 100000000)} for 1 quintillion (18 zeros)");
Console.WriteLine($"{FormatString(sw.ElapsedTicks, 100000000000)} for 1 sextillion (21 zeros)");
Console.ReadKey();
string FormatString(long elapsed, long multiplier)
{
var span = new TimeSpan(elapsed * multiplier).Duration();
return string.Format("{0}{1}{2}{3}{4}",
span.Days > 364 ? $"{span.Days / 365} years, " : "",
span.Days > 0 ? $"{span.Days % 365} days, " : "",
span.Hours > 0 ? $"{span.Hours} hours, " : "",
span.Minutes > 0 ? $"{span.Minutes} minutes, " : "",
span.Seconds > 0 ? $"{span.Seconds} seconds" : "");
}
А что если итерировать по всем GUID?
Затем, в духе настоящего инженера, я переключился на другую тему - тесно связанную (для меня): на уникальность GUID. Я уже задавался вопросом, насколько GUID на самом деле уникален. Тогда я как-то получил свой ответ, но теперь, кажется, всё стало ещё яснее.
Для начала: GUID обычно представляются 32 шестнадцатеричными цифрами, поэтому можно взять наибольшее 32-значное hex-число (ffffffffffffffffffffffffffffffff) и перевести его в десятичное: 340 282 366 920 938 463 463 374 607 431 768 211 455 - это 39 цифр, и в округлённом виде: 340 undecillions.
Если мои подсчёты верны, берём время для sextillion (18365 лет), умножаем на 1.000.000.000.000.000 (дополнительные 15 разрядов между undecillion и sextillion), затем на 340 - так как речь о 340 undecillions.
Получается около 6 244 100 000 000 000 000 000 лет - то есть 6 244 100 000 000 миллионов тысячелетий. Столько времени нужно моему компьютеру, чтобы перебрать все возможные значения GUID. Так насколько же он уникален?
Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.