Внимание! Это продолжение предыдущей статьи! Ранее были разработаны новые тесты и исправлены некоторые недостатки нового бенчмарка под названием ChimbaBenchXPL. Среди нововведений был создан и протестирован Shader Test, однако получилось слабовато...
Впрочем, если оставить новый тест на пять минут, то он вполне разогревает 9500 GT до 75 градусов. Нагрузка на шину памяти — 66 процентов.
Меховой кубик при таком же размере окна грузит шину до 87 процентов, а температура поднимается до 79 градусов. Тем временем простая сцена даже до 70 градусов не греет карточку, так что у нас уже есть неплохой результат.
Я уже говорил, что не разбираюсь в разработке шейдеров, поэтому пока оставлю сцену в текущем состоянии. Может быть, потом разберусь в шейдерах и создам более эффективный вариант. Или кто-то, разбирающийся в этой теме, сделает действительно хороший шейдер за меня. Хотя нет смысла чего-либо полезного ожидать от так называемого «сообщества». Так что оставлю сцену до лучших времён и просто буду двигаться дальше.
Если бы я останавливался на каждом сложном месте, я бы не создал относительно пригодный для использования Linux под названием Chimbalix и не разработал бы перспективный самодостаточный установочный пакет приложений для FreeBSD и Linux под названием Installer-SH. Установочный пакет, который будет жить, даже если все репозитории вымрут естественным образом...
Возвращаясь к разработке: был добавлен сброс результата при смене тестовой сцены. Раньше результат сохранялся при смене сцены, но кое-чего всё же не хватает.
Я хотел добавить таблицу результатов, но пока не решил, как именно это сделаю. Однако раздел интерфейса подготовил заранее.
Сначала пытался воспользоваться встроенным функционалом движка для создания вкладок под разные платформы и тесты, но встроенный функционал Godot Engine оказался слишком кривым, непонятным и непригодным для комфортного использования.
Так что будем разрабатывать свой интерфейс. Как всегда.
Раз уж делаю таблицу результатов, надо бы сделать кнопку сохранения результата с информацией о системе. Я не хотел бы тратить слишком много времени на нажатие кнопок, потому по умолчанию оно будет сохранять в файл рядом с исполняемым файлом программы.
Вот и реализовали функцию записи информации в файл. И да, я сохраняю информацию прямо в папке с программой в текстовый файл. А что это означает? Правильно! Данную программу невозможно будет распространять через типичные линуксоидные репозитории и пакетные менеджеры, которые размазывают софт по всей операционной системе с root-правами. Да и не стоит забывать о зависимости пакетных менеджеров от доступа в интернет, что является отдельной проблемой в распространении софта и даже работоспособности дистрибутивов Linux. Некоторые, вроде CachyOS, даже установить невозможно без интернета.
Но мне всё равно, ведь я не очень-то и уважаю линуксоидные репозитории и пакетные менеджеры по множеству причин, и размазывание кусков программы по всей системе — одна из них. Можно просто распаковать архив с программой в любое место, доступное для записи и выполнения, или воспользоваться Installer-SH для установки без использования root-прав и спокойно пользоваться программой. Хотя пока я не вижу смысла паковать бенчмарк в формат Installer-SH. Может быть, потом и сделаю, когда будет выпущена полноценная версия проекта.
Первые результаты наконец собраны. Похоже, у меня есть небольшая ошибка в исходном коде. Нужно поправить.
Заодно сократил объём вывода текстовой информации в файл.
Единственная проблема состоит в формировании таблицы результатов. Хотелось бы вынести данные во внешний файл, чтобы можно было обновлять независимо от сборки проекта. Думаю, для начала оформлю всё в виде простых строк, без наворотов. Слишком уж много времени потрачу, если попытаюсь реализовать с функциями сортировки и тому подобное. Я не хочу сразу разрабатывать целую базу данных.
Нужно упростить и разбить список. Полагаю, список следует разделить по сценам и размеру окна. Итого выйдет две вкладки на каждый тест. Если ещё разделить по платформам, то это уже будет пять вкладок на один тест. Не знаю, стоит ли это делать, потому что одна конфигурация ПК может быть протестирована на разных платформах, и было бы интересно сравнить именно платформы между собой.
Думаю, не стоит заморачиваться над вкладками при таких неопределённых ситуациях. Гораздо практичнее будет сделать кнопку с выпадающим списком под неопределённое количество элементов. Хотя даже с выпадающим списком получилось слишком много элементов. В таком случае есть смысл сделать комбинацию из вкладок и выпадающего списка.
Спустя некоторое количество экспериментов я добился желаемого результата. Ну а новые кнопки так же следует заменить вторым выпадающим списком. Не хочу усложнять исходный код лишний раз.
Пожалуй, пора бы обновить код в репозитории проекта на платформе GitHub.
А вот количество текстовых файлов для хранения собранных результатов оказалось внушительным. Придётся немного постараться, чтобы разработать систему взаимодействия со всем этим. Да и результаты, полученные в среде Linux при использовании WINE, можно не сохранять, ведь есть нативные исполняемые файлы под Linux. Хотя кто знает, что там линуксоиды в очередной раз поломают с обновлениями Linux... Может оказаться так, что только через WINE и получится запустить старую программу в каком-нибудь новом Linux...
Раз уж определился со структурой, можно поработать и над обработкой ошибок.
Осталось разобраться с форматом записи результатов. Наверное, следует название видеокарты поставить на первое место вместо операционной системы...
Попутно были собраны результаты с видеокартой Radeon RX 470. Сразу отмечаю довольно низкий fps в простой тестовой сцене, в которой «бутылочным горлышком» является процессор, а не видеокарта. С видеокартами NVIDIA даже с более слабыми процессорами получается больше fps.
И хотя визуально всё выглядит нормально, но на самом деле AMD Radeon немного неправильно обрабатывает шейдеры. Слева — немного халтурный шейдер, выданный видеокартой Radeon. Справа — образец для сравнения. Разница совсем незначительная, но если сравнивать с оригиналом, то становиться очевидно, что графика AMD работает не совсем правильно.
Впрочем, графика Intel выдаёт гораздо худшие несоответствия оригиналу при обработке этого шейдера. В случае AMD Radeon гораздо страшнее другой нюанс — это неадекватная зависимость от процессора. Только Shader Test в разрешении 1280x720 смог нагрузить RX 470 на полную. В остальных случаях упор производительности приходился на процессор AMD Athlon II x2 245e. И да, частота ГП у видеокарты RX 470 упала значительно ниже базового значения от моего теста.
Так или иначе, сильная зависимость от производительности ЦП — давно известная проблема любых видеокарт AMD. Меня гораздо больше заботит тот факт, что моя утилита не определила имя видеокарты в данном конкретном случае, и у меня больше нет данного ПК под рукой, чтобы проводить дополнительные тесты и эксперименты.
Я добавил полученные результаты в таблицу. Отдельным пунктом выделил ограничитель, потому что не всегда видеокарта является ограничителем производительности. Для отметок использую логичные знаки вроде плюса, минуса и вопросительного знака. Пока что так. Потом, может быть, реализую как-нибудь иначе.
Преимущество текущего подхода в том, что результаты можно прочитать обычным текстовым редактором, даже не запуская ChimbaBenchXPL. Это же и уязвимость, потому что можно легко вписать что угодно в данный файл. Впрочем, это уже на совести людей, которые будут вписывать у себя что-то там. Я же вписываю реально полученные результаты, набираю опыт и совершенствую систему.
Я хоть ещё и не выпустил третью альфа-версию бенчмарка под названием ChimbaBenchXPL, но он уже позволил мне провести тесты и быстро собрать результаты для сравнения с другими системами. Это уже значительный успех. Единственное, немного непривычно использовать функции сохранения результатов в файл. Обычная фотография делает то же самое и является доказательством того, что тест был реально проведён, а не просто вписан текст в файл.
Внезапно я задумался о том, что таблицу результатов можно обновлять независимо от самой программы. А всё благодаря тому, что я изначально решил вынести результаты в отдельные файлы. Ну а чтобы избежать путаницы, я прописал версию программы и дату обновления данных в первой строке.
Далее подправляю вспомогательную утилиту, определяющую имя видеокарты. Осталось протестировать её на компьютере с двумя видеокартами. Мне просто лень перезагружать ноутбук для активации встроенной графики Intel. Тем более я использую Linux вместо операционной системы, а для графики Intel нет адекватных драйверов. Только Mesa с утечками памяти, бесконечными регрессиями и прочим. Не хочу иметь рядом с видеокартой от NVIDIA что-то неполноценное вроде AMD Radeon или Intel UHD для постоянного использования...
Доработка вспомогательной утилиты оказалась весьма полезной при наличии нескольких видеокарт в системе.
Так же не выйдет переключить видеокарту без перезапуска программы, потому что Godot Engine просто «падает» при таких манипуляциях.
Ну а Shader Test всё ещё недотягивает до уровня мехового куба. И тут я заметил неприятный момент.
Актуальная версия теста нагружает GTX 750 всего на 33 Вт мощности из 38 максимальных. Тем временем одна из старых версий теста нагружала эту же видеокарту на полную мощность. Похоже, надо отправлять на переработку новую сцену.
Проблема здесь в том, что результаты, полученные с видеокартой RX 470 в Shader Test, придётся удалить из списка. Потому я и не спешу с наполнением таблицы, что тест может в любой момент отправиться на переработку.
Вместо GeForce 9500 GT я переключился на GTX 750, ибо у этой видеокарты гораздо больше полезных датчиков. Особенно полезен датчик PerfCap Reason. Но последующие итерации шейдеров не позволяли полностью нагрузить видеокарту, чтобы она уперлась в лимит мощности. Во втором случае я сделал настолько несбалансированный шейдер, что он серьёзно нагружает контроллер памяти. 60 процентов для GTX 750 — это очень большой показатель нагрузки на контроллер памяти, так как у этой видеокарты пропускная способность памяти неадекватно большая по отношению к мощности GPU.
Но опыт накапливался, и у меня наконец получилось существенно нагрузить видеокарту.
Теперь от разгона памяти видеокарты производительность не прибавилась. Но вот от разгона GPU она увеличилась существенно. Это был хороший знак.
Ещё больший хороший знак в том, что мне удалось даже перегнать меховой кубик в плане нагрузки и разогрева видеокарты.
Теперь можно снова приступать к тестированию и собирать результаты для дальнейшего совершенствования проекта. Но об этом поговорим в следующей части.
Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.
Читайте далее на сайте
Почему Linux — лучшая операционная система всех времён
Ремонтирую, модифицирую и разгоняю видеокарту GeForce 8600 GT из коробки с нерабочими видеокартами
Разработка и выпуск новой версии бенчмарка под названием ChimbaBenchXPL (Alpha-3). Часть 1