Том 1 Глава 99Глава 99

Глава 99: Участник №101 уже ушёл вперёд Честно говоря, это задание действительно поставило Хао Юня в тупик. Он долго смотрел на экран, но так и не написал ни одной строчки кода. Оптимизировать “Ледниковый движок”? Повысить его эффективность на 10%? Да он даже толком не видел, как выглядит его исходный код! В это время, в закулисье финального этапа соревнования, по просьбе академика Чжань Юншу сотрудники вывели на экран действия участника под номером 101. Увидев, что тот выбрал четвёртое задание, профессор Чжан Цунхао, стоявший рядом, печально усмехнулся и покачал головой: — Не ожидал, что он выберет именно его. Похоже, ему уже не спастись. — О? — Чжань Юншу слегка приподнял брови, заинтересовавшись. — Учитель, вы ведь не забыли, что до того, как вернуться преподавать в Шуйму, я работал в отделе разработки ПО компании “Лунвэй”, да? — Я ещё не смотрел само задание. Этот “Ледниковый движок” тоже разработан вашей командой? — Не совсем, — ответил профессор, — изначально его создала сторонняя команда, которую мы потом выкупили. Но третью версию — ту, что сейчас используется, — наш отдел оптимизировал и довёл до ума. Сейчас почти все современные 3D-игры, особенно в жанре третьего лица, делаются именно на нём! Профессор не скрывал гордости на лице — и было за что. Компания “Лунвэй” — гигант в области электронной промышленности страны Ся, а её отдел разработки ПО — один из главных столпов успеха. И пусть игры — явление относительно новое, появившееся после эпохи Нового Летосчисления, ни один уважающий себя инженер не смеет относиться к ним с пренебрежением. Мысль профессора была проста: Среди всех заданий это — единственное, где чётко прописан критерий успеха — повышение производительности на 10%. Но это невозможно. Потому что: — это результат многолетнего труда профессионалов; — это плод многоступенчатой оптимизации; — это вылизанный до блеска программный код. Он как произведение искусства — в нём нет ни одного лишнего символа! Даже среди присутствующих здесь членов жюри, едва ли кто-то сможет за три дня выжать из него дополнительные 10% производительности. А если бы это было так просто — разработчики уже давно бы сделали это сами. — Честно говоря, — задумчиво сказал Чжань Юншу, — задание, которое кажется невозможным даже тебе, разве уместно давать студентам? Профессор Чжан неловко усмехнулся: — Ну, знаете же, у нас ведь уже стало традицией: среди четырёх заданий — одно обязательно должно быть ловушкой. Так мы проверяем, насколько объективно участник оценивает свои силы. Думаю, если немного поразмыслить, легко понять, что оптимизировать столь зрелое ПО — почти невозможно. Академик Чжань только усмехнулся, но не стал спорить. Он и сам понимал: Причина, по которой это задание включили в конкурс, вовсе не только “проверка здравого смысла”. Да, это “ловушка” — как и всегда. Но вторая причина, вероятно, заключается в том, что “Лунвэй” — спонсор турнира. Потому что даже невыполненное задание может быть отличной рекламой. “Вот, смотрите, никто не смог улучшить наш движок” — разве это не мощный пиар? Вся конкурсная платформа — тоже, кстати, спонсирована компанией “Лунвэй”. Так что спорить здесь бессмысленно. Да и сам академик не особо верил в успех участника №101. Потому что даже он сам, имея тридцать лет опыта, не уверен, что справился бы с этим задание всего за три дня. Уметь выбирать — тоже важный навык программиста. Если ты не можешь адекватно оценить задачу и выбрать правильную цель — Ты уже проиграл. Именно так подумали и в жюри: Участник №101 уже остался позади. Но сам Хао Юнь этого, конечно, не знал. Он просто читал задание… Пока несколько влиятельных фигур уже мысленно вынесли ему приговор. Действительно ли всё кончено? Он и сам почти поверил в это. Просто глядя на исходники “Ледникового движка”, он уже изрядно вымотался «Сначала надо успокоиться…» «А потом — разобраться, как вообще работает этот движок.» Ключ к хорошему движку — это скорость и качество графического вывода. Можно не сомневаться, что до релиза движка его разработчики уже выжали из него максимум. Конечно, теоретически доработать такой код возможно. Но одному человеку за три дня — почти нереально. Даже с его “системной помощью”. Значит… Прямое улучшение исходного кода — бесполезно. Остаётся искать решение вне ядра движка. Например: в часто используемых низкоуровневых функциях? Ведь и 2D, и 3D движки, будь то отечественный “Ледниковый” или зарубежный “Пустошь”, — все они в основе опираются на частые вызовы базовых функций. Особенно в графике. Иногда, когда у игрока подгружается локация и начинается лаг или баг (провал сквозь стены и т. п.), причина зачастую — медленные графические вычисления. Если ускорить ключевую функцию — можно ускорить весь движок. А вдруг?.. С этой мыслью Хао Юнь даже поёжился — настолько смелой она показалась. Чёрт… Да это даже сложнее, чем оптимизировать сам движок! Ведь сам “Ледниковый движок” появился после объединения человечества, а вот используемые им базовые функции — созданы ещё в эпоху до Объединения! Но всё же… а вдруг получится? Хао Юнь сглотнул и, решив рискнуть, открыл в папке движка файл math.c — там хранились низкоуровневые математические функции. Прочитать всё было нереально — да он и не собирался. Главное — найти ту самую функцию, которая вызывается чаще всего, которая непосредственно влияет на производительность движка, и попробовать её оптимизировать. Вскоре он нашёл: Q_Sqrt() — функция, вычисляющая обратный квадратный корень с помощью метода Ньютона. Выглядит обычно. Но при работе движка вызывается просто безумное количество раз. А значит — её производительность прямо влияет на весь движок. Как винтик в ракете: Кажется неважным, но когда двигатели и топливо уже на пределе эффективности — улучшение даже винтика может дать прирост. Именно этим сейчас и занялся Хао Юнь. Однако… Хотя направление найдено — путь всё ещё труден. Ведь метод Ньютона — уже один из самых эффективных. Придумать что-то лучше — почти невозможно. Единственное, что приходит в голову — огромная база значений “вход-выход”, чтобы просто подставлять готовые ответы. Но это слишком громоздко ради одной функции. Шло время… А экран Хао Юня всё ещё пуст — ни строчки кода. Чжань Юншу, наблюдая за этим в закулисье, вздохнул. На его лице отразилось разочарование. Очевидно: участник зашёл в тупик. Если он немедленно не сменит задачу, то окажется в числе отстающих. Другие участники уже продвинулись на четверть в остальных заданиях. — Хоть и смело, но результата так не будет, — усмехнулся Чжан Цунхао. — Похоже, только он один до сих пор возится с четвёртым заданием. — Такое задание вообще не стоило включать, — покачал головой академик. — В следующий раз так больше не пойдёт. — Да, да, конечно… — неловко откашлялся профессор. Но как раз в тот момент, когда все подумали, что 101-й участник потерян, Хао Юнь внезапно начал действовать. Причём — очень странно. Он не начал писать новую функцию. Он удалил старую версию Q_Sqrt() из math.c. — Что он делает? — удивился профессор Чжан. Он уже начал догадываться: тот пытается переписать алгоритм. Но разве в этом мире существует способ проще Ньютона? Это уже не просто программирование — это чистая математика! Даже академик Чжань поразился. Он не сразу понял, что делает парень. Но когда увидел строчку: i = 0x5f375a86 - (i >> 1); — его зрачки сжались. — Кажется, я понял, что он делает… — А? — профессор недоумённо уставился на экран. Но Чжань Юншу не стал объяснять. Он лишь погладил подбородок и кивнул с одобрением: — Гениально. — Просто гениально!
Обновлено: 21.01.2026

Комментарии к главе

Загрузка комментариев...