Тестирование видеокарт AMD и nVidia: Обработка изображений Waifu2X и проблемы nVidia
Почему именно OpenCL
Изначально Waifu2X создавалась в CUDA варианте, но есть и OpenCL варианты, например вариант от DeadSix27 версии 5.3.3, именно его я и использую всегда.
реклама
Но почему именно OpenCL, а не CUDA? Одна из причин это необходимость "скормить" проприетарные библиотеки от nVidia, но это не основная причина, библиотеки кое-как я подобрал выкачав с десяток гигабайт вариантов пока не нашел подходящий.
Основная причина это скорость работы, CUDA вариант работает неоднозначно в плане скорости (в большинстве случаев проигрывает), первая обработка любого изображения довольно длительная (я выбрал наиболее быстрый профиль делающий идентичную работу), при повторном запуске обработки дело в целом проходит быстрее, но OpenCL вариант с первого раза может сделать работу если упростить сжатие PNG так же быстро как CUDA вариант уже имея в кэше результаты.
Учитывая что я использую Waifu2X спонтанно (в контекстное меню добавил команды), и файлы всегда различаются, CUDA вариант далеко не всегда способен по скорости быть рядом с ненастроенным OpenCL вариантом Waifu2X.
реклама
Для примера взял совершенно другое изображение, и CUDA вариант справился уже значительно хуже:
Хотя есть и еще один очень важный нюанс, это размер, одна только проприетарная библиотека от nVidia необходимая для работы CUDA Waifu2X весит в 2-4 раза больше чем OpenCL Waifu2X вместе взятая со всеми файлами и моделями...
реклама
И наконец третья причина, что обнаружил буквально во время написания данного текста, не менее серьезная чем основная, это проблемы с видеокартами у которых недостаточный объем памяти...
По факту GTX 750 с 1 ГБ памяти я не могу использовать для работы с CUDA вариантом Waifu2X, причем минимальный размер блока не спасает, как и попытка использовать разные профили, просто нехватает памяти и на этом "работа" закончена...
И еще один серьезный минус в "резюме" CUDA, это необходимость в более или менее актуальной видеокарте, проприетарные библиотеки nVidia уже отказываются работать с GTS 250 и GTX 570:
реклама
И еще один "камень в огород" CUDA когда я завершил тесты GTS250 и GTX570, а после вернул GTX1070 в систему, я не сразу заметил что видеокарта решила использовать старый драйвер когда в хранилище Windows есть новый, и мне пришлось вручную устанавливать заново последний драйвер для GTX 1070 ибо CUDA версия Waifu2X ругалась что нет драйвера CUDA...
У меня конечно была установлена еще и 461.92 версия драйвера, что отображает GPU-Z, но реально работала 391.35, иначе CUDA версия Waifu2X не ругалась бы на отсутствие CUDA.
Участники и условия тестирования
Участники тестирования у нас следующие:
0) MSI GeForce 8500GT 256MB (к сожалению её "сердечко" хватил отвал и сколы, я не желаю с ней возиться ради тестов, все равно около 8гфлопс вытягивала производительности, что крайне мало...)
1) Palit GeForce GTS 250 1GB 6-pin (отвальная, прогрета, биос отредактирован для сохранения работоспособности после прогрева)
2) Palit GeForce GTX 570 Sonic Platinum 1.28GB, 8+6-pin (отвальная, скальпирована, прогрета)
3) Palit GeForce GTX 750 1GB
4) MSI GeForce GTX 1070 AERO OC 8GB 8-pin
5) Asus Radeon HD 7870 DirectCU II TOP 2GB, 6+6-pin
6) Sapphire Radeon RX 560 4GB 6-pin
7) AMD Radeon RX 5600M 6GB*
* - MSI Alpha 15, результаты взяты из тестов для обзора ноутбука, т.к. при обзоре ноутбука исходный файл был выбран из того что под руку попалось (ограниченное время на тесты), результаты могут быть ниже чем возможны, сравнение RX5600M с GTX 1070 актуально только в пределах обзора ноутбука, результаты в данную статью вынесены только для справки.
-= Обзор и тест игрового ноутбука MSI Alpha 15: Когда ноутбук быстрее ПК =-
Условия тестирования крайне просты, в зависимости от производительности видеокарты, я буду выбирать тестовый файл соответствующего размера, чтобы не слишком долго и не слишком быстро обрабатывался.
Если файл будет слишком маленький, то обработка займет слишком мало времени, и результаты будут недостаточно точные, а если файл будет слишком большой, его обработка займет очень много времени без значительного улучшения точности результата, потому файл будет подобран в зависимости от производительности видеокарты.
Сравнению подлежит результат Gflops-Filter т.к. он отражает только скорость работы над изображением (фактическую производительность видеокарты или процессора если запретить работу с ГП).
Результат Gflops отражает общую скорость и не будет учитываться, общий результат Gflops учитывает не только саму работу над изображением, но и время потраченное на чтение/запись файлов, и т.п., по сути этот результат зависит не только от скорости работы самой видеокарты, но и от скорости процессора и файловой системы, а нам это не надо.
Всего 3 файла для разного уровня производительности видеокарт, размеры подписаны в имени файла:
Командная строка выглядит следующим образом, но в конце я опустил команду "pause":
"waifu2x-converter-cpp.exe --force-OpenCL --block-size 1024 --scale-ratio 2.0 -m scale -o %~d1%~p1 -i %1"
"--block-size 1024" - это размер блока, от него зависит выделенный объем памяти для работы и скорость работы собственно, подбирается в зависимости от видеокарты для оптимальной производительности.
"-o %~d1%~p1 -i %1" - не пугайтесь, параметр "-o" задает куда сохранять результат, а параметр "-i" указывает какой файл взять для обработки, весь этот "набор символов" я написал чтобы обычным перемещением картинки на "батник" сразу же начиналась обработка и сохраняло файл в том же каталоге, где исходный файл, ничего сложного.
У меня не прописаны абсолютные пути к папке моделей и "waifu2x-converter-cpp.exe" т.к. исходные файлы там же где и исполняемые файлы Waifu2X, если сделать возможность из любой папки обрабатывать картинку, то в моем случае командная строка будет выглядеть следующим образом:
"C:\_PORTABLE_\waifu2x_533\waifu2x-converter-cpp.exe --model-dir C:\_PORTABLE_\waifu2x_533\models_rgb --force-OpenCL --block-size 1536 --scale-ratio 2.0 -m scale -o %~d1%~p1 -i %1"
+ "pause" на следующей строке, либо использовать в начале "cmd.exe /k" чтобы предотвратить самопроизвольное закрытие окна консоли.
Результаты
Результаты вместе с GPU-Z для удобства, за исключением GTX 1070 и RX 5600M из обзора ноутбука, т.к. результаты взяты из моей предыдущей статьи:
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
*Результаты из обзора -= Обзор и тест игрового ноутбука MSI Alpha 15: Когда ноутбук быстрее ПК =-
прямому сравнению с результатами подготовленными для текущей статьи не подлежат, т.к. исходное изображение было взято недостаточных размеров для выявления максимальной производительности.
После возвращения в систему GTX 1070 я не обратил внимание на драйвер, и сделал тесты со старым драйвером (самым последним, что доступен для GTX 570), потому пришлось вернуть вручную уже установленный последний драйвер для GTX 1070 и сделать еще раз тесты.
GPU-Z к слову неправильно отображает версию драйвера что осталась после GTX 570:
![]() |
![]() |
Заключение
Однозначно CUDA вариант Waifu2X имеет множество минусов которые поставили жирный крест на данном варианте утилиты по обработке изображений.
А вот OpenCL вариант Waifu2X от DeadSix27 способен работать даже с очень старыми видеокартами, и при этом маленький объем памяти не помеха для OpenCL реализации Waifu2X, она работает даже с видеокартами на 256 МБ, правда наглядно показать это я не могу т.к. моя MSI 8500GT словила отвал (на фото за фонарем находится).
Во время написания данной статьи, по случайности я обнаружил еще "камень в огород" nVidia и CUDA...
При работе с размером блока 256 старый драйвер проиграл новому драйверу nVidia с результатами 1715 Gflops и 1870 Gflops, однако при размере блока более 512 новый драйвер безоговорочно проиграл старому драйверу, особенно при размере блока в 1024, где старый драйвер выдал скорость 2433 Gflops, а новый драйвер nVidia лишь 2172 Gflops.
Причем я неоднократно одни и те же тесты проводил, вдруг погрешность, но погрешность была в пределах ~1%, и не могла дать значительную разницу в производительности между разными драйверами, для того я собственно и подбирал оптимальный размер исходного изображения для каждой видеокарты, чтобы минимизировать погрешность...
Но оставим "муть" с видеокартами от nVidia и перейдем к AMD.
В случае AMD никаких проблем с драйверами не встретилось, даже несмотря на то, что у меня несколько версий драйвера было установлено, видеокарты выбирали самый последний драйвер в отличие от nVidia.
Мне не приходилось менять драйвера с видеокартами от AMD, один драйвер поддерживает как старую 7870 (по сути одногодки с GTX 570), так и "новую" RX 560 (в принципе поддерживает и RX 6900XT, но у меня её нет).
По уровню производительности HD 7870 оказалась значительно производительнее RX 560, хотя у меня и вариант 7870 далеко не типичный, 1100 MHz по чипу далеко не любая видеокарта 2012 годов имеет с завода.
В целом, если брать в расчет субъективные "ощущения" от скорости работы, то картина выглядит следующим образом:
- HD 7870 еще на адекватном уровне по производительности, долго делает, но подождать можно, 1920x1080 или 3840x2160 (в режиме подавления шума) обработать вполне можно, не напрягает сильно.
- RX560 уже сложно использовать без разгона, а вот GTX570 и GTX750 и видеокарты подобного уровня производительности позволят без сильной траты времени обрабатывать разве что в HD разрешении изображения, иначе говоря очень плохой уровень производительности.
- GTX1070 и тем более RX 5600M позволяют обрабатывать и 3840x2160 изображения без сильной траты времени, вполне хороший уровень производительности.
На этом все, благодарю за внимание.
реклама
Лента материалов
Интересные материалы
Возможно вас заинтересует
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Комментарии Правила