Графические и не очень API, возможности драйверов (21.2.2 - GCN 4 / 461.40 - Pascal)

Здесь будет проведено сравнение драйверов в таких API как OpenGL, OpenCL, Vulkan и CUDA, доступные расширения и прочая техническая рутина.
26 марта 2021, пятница 01:03
Hard-Workshop для раздела Блоги

Предисловие и условия

Данная статья отпочковалась от другой статьи, ссылка на статью:

-= Установка и сравнение драйверов на видеокарту (21.2.2 - GCN 4 / 461.40 - Pascal) =-

Я сомневаюсь что данный материал будет интересен большинству обычных пользователей, здесь не будет фотографий видеокарт, как логотипы подсвечиваются, графики с FPS в играх и т.п., здесь будет очень много текста, но очень мало слов.

Если вам интересно посмотреть "изнутри" как обстоят дела с графическими (и не очень) API, то добро пожаловать.

Я не стану в пределах данной статьи разбирать каждое расширение до последнего бита, но поверхностно я постараюсь наглядно выделить разницу.

Условия:


AMD 21.2.2 nVidia 461.40
Операционная система Windows 7 SP1
(VC Redist 2005-2019, .NET 4.8 & 5.0.2)
Версия драйвера 21.2.2 (Optional, Non-WHQL)
(02.02.2021)
461.40 (GRD, WHQL)
(26.01.2021)
CPU-RAM Ryzen 5 1600 AF (3.7 GHz), 2x8 GB 3400 MHz.
Файл подкачки Отключен
Видеокарта Sapphire Radeon RX 560 Pulse MSI GeForce GTX 1070 AERO OC

Результаты

Результаты были собраны утилитой GPU Caps Viewer версии 1.50.0.0, сбор информации был проведен в текстовый файл, именно из этого файла я и буду брать данные, по сути там повторяется всё, что отображается в окне самой программы.

OpenGL

Общая информация:

Расширенная информация:

SPIR-V расширения:

OpenGL расширения:

Расширения присутствующие в обоих драйверах (272 расширения):

Расширения присутствующие только в драйвере AMD (55 расширений):

Расширения присутствующие только в драйвере nVidia (149 расширений):

OpenGL core capabilities:

OpenGL extension capabilities:

OpenCL

Vulkan

Я не придумал ничего умнее чем некоторую информацию представить скриншотом:

Vulkan Instance extensions:

Vulkan extensions:

Vulkan device features:

Vulkan device limits:

CUDA

Выводы

Кто-то скажет — безумие, и возможно будет прав, но как иначе сравнивать если даже не видел то, что собираешься сравнить?

Я старался в минимальный объем всё поместить, но даже так, количество текста оказалось на десятки тысяч символов, разбивать на несколько частей не вижу целесообразным, статья имеет конкретную тематику.

Мне пришлось перенести основную массу информации в изображения, просто чтобы хоть как-то сделать размер статьи адекватнее.

Возможности:

Можно заметить, что в разных API некоторые возможности совпадают, например "CL_DEVICE_MAX_WORK_ITEM_SIZES" из OpenCL и "Threads Per Block" из CUDA имеют одинаковые ограничения.

Еще можно заметить "maxImageDimensionXX" из Vulkan и "GL_MAX_TEXTURE_SIZE " из OpenGL, а так же ряд других аналогичных параметров имеют одинаковые ограничения, и они судя по всему обусловлены архитектурой видеокарт.

Я думаю многие люди как минимум слышали про такую игру как Minecraft, а некоторые еще и с одной интересной проблемой вероятно сталкивались, когда применяешь текстурпак (ресурспак) и он крашит игру с видеокартой от AMD, но в паре с видеокартой от nVidia все работает, как так?

Возможно некоторые уже заметили такие ограничения как "GL_MAX_TEXTURE_SIZE", просто создатели ресурспака порой не учитывают (а может специально...) разные ограничения у nVidia и AMD, и в итоге рождаются листы текстур размером 1024х20480 (и другие вариации), для анимации лавы или воды в игре, естественно такие текстуры не входят в лимит 16384 и Minecraft благополучно падает с видеокартой от AMD, когда с видеокартой от nVidia все нормально т.к. лимит 32768.

Надеюсь достаточно понятно объяснил как могут влиять ограничения, это был конечно лишь один пример, но в целом сложно сказать у кого лучше обстоят дела с ограничениями.

Очень многое зависит от конкретных случаев и разработчиков, одной лишь манипуляцией с размером текстур можно заставить работать игру только на видеокартах от nVidia, даже если эту текстуру никогда никто не увидит, и она будет размером всего 2х20480.

Расширения:

Очевидно количество расширений на стороне nVidia, хотя у AMD я заметил несколько расширений "GOOGLE_", что показалось мне довольно забавным.

Единственное, где большинство расширений оказалось на стороне AMD это OpenCL, причем у nVidia выделяются расширения "NV_", некоторые имеют одинаковые имена с расширениями "KHR_".

Хотя ради справедливости nVidia наштамповала 89 "GL_NV_" расширений, когда за AMD числится лишь 29 "GL_AMD_" расширений и 5 "GL_ATI_", естественно без учета расширений которые поддерживаются как AMD, так и nVidia.

А еще отмечу что в OpenCL у AMD есть "cl_khr_fp16" расширение (вычисления с половинной точностью), но отсутствует у nVidia, хотя в Vulkan расширение "VK_KHR_shader_float16_int8" есть у AMD и nVidia.

Версии API:

Несмотря на меньшее количество расширений у AMD, версии таких API как Vulkan, OpenCL и OpenGL выше чем у nVidia, и больше добавить нечего.

Заключение:

Я не знаю что еще добавить интересного для людей которые видят во всей массе статьи лишь набор символов и цифр.

Люди которым нужна будет данная информация вполне вероятно обойдутся и без выводов, что я написал.

На этом всё, благодарю за внимание.