Войти
ПрограммированиеФорумГрафика

Несколько разных видеокарт в системе.

#0
(Правка: 1:37) 1:34, 10 июля 2019

Не совсем понятно, тот ли раздел, но пожалуй спрошу здесь.

По роду своей деятельности требуется проверять(да и писать) свой код на нескольких платформах, код должен работать не только на NVidia, но и на AMD и еще на Intel. Это касается как OpenGL, так и аппаратного кодирования и декодирования видео: NVENC, VCE и интеловское что-то. Так вот, конечно мне не хочется собирать несколько изолированных компов. Как я понимаю, в одной системе интел + еще что-то еще более менее уживется, то NVidia с AMD наверно не очень, вопрос, как вы обходите это? Есть у меня идея, вроде какие-то конкретные железяки можно было в Hyper-V прокидывать. В общем что можете посоветовать в организации системы.
Блок питания - на 1250 вт, проц i7 6/12. (правда пока HEDT без их видяхи). Возможно как-то стоит в сторону виртуализации, только вот систем придется несколько ставить и везде окружение рабочее настраивать.Одну бы систему на это все + какую-то хитру песочницу.
под винду все, ну если совсем беда, тогда придется в сторону линуспа можно.


#1
(Правка: 2:26) 2:22, 10 июля 2019

Без отдельного железа плохо, а виртуалки только для отладки нужны. Пару устройств как минимум нужны и желательно одно из них для минимальных требований. Кстати при помощи этого же форума, многие просят потестить на своем. Как аналог просто организовать хороший фидбек.

#2
(Правка: 6:35) 6:27, 10 июля 2019

У меня в одном компе стоят три карты - Titan V, Titan X (Nvidia) и R9 Nano (AMD). Когда нужно проверить аппликацию на конкретной карте я просто переключаю на нее монитор. Никаких проблемм при этом на Win-10 не наблюдается.
Могу сказать больше - у меня аппликация (DX12) работает на всех трех картах одновременно, т.е используется мультиадаптерный режим. При, этом не смотря на разную архитектуру и производительность, все работает нормально. Интела у меня нет, но я могу задействовать еще и микрософтовский эмулятор, так что всего получается 4 адаптера. Кстати на нем я реализовал GUI, для этого его мощьности вполне хватает.
Для лучшего обмена между адаптерами по шине я взял мазаборду и процессор (7800) обеспечивающий 28 линий. Т.е. каждая карта сидит на своих 8 линиях и еще 4 остаются в запасе. Блок питания - 1200 вт. При полной нагрузке всех трех карт потребление иногда подскакивает до 1000 ватт.

#3
11:14, 10 июля 2019

Windows работает с несколькими драйверами видеокарт достаточно давно. Только в Windows Vista сломали такую поддержку в новой драйверной модели и вернули в улучшенной модели в Windows 7.

При этом есть нюансы.
Во первых, OpenGL, в котором нельзя выбрать видеокарту, если они разных вендоров. Активный OpenGL драйвер выбирает система исходя из того, к какой видеокарте подключен главный монитор в системе (который можно менять в настройках), а в случае с RDP - берется первый в списке устройств (меняя GeForce и Radeon местами в слотах PCI-E влияет на результат). Логика отличается в случае с ноутбуком, где работает тандем NVidia+intel, где драйвер nvidia выбирает какой opengl драйвер загружать для каждого приложения через профили.

У AMD есть бага, которая приводит к краху приложения при запуске, если он открывается на втором мониторе, подключённом не к AMD.

#4
1:00, 11 июля 2019

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

#5
3:06, 11 июля 2019

gkv311
> У AMD есть бага, которая приводит к краху приложения при запуске, если он
> открывается на втором мониторе, подключённом не к AMD.
Возможно это была бага не AMD, а у тебя сначала контекст был на другом девайсе. Я напарывался на такое. wglGetProcAddress может вернуть разные значения. При первом вызове glewInit оно получает указатели на функции OpenGL (а функции эти находятся в интеловском драйвере) и сохраняет их. Когда окно появляется на экране, и ты начинаешь создавать контекст - оно создает уже на AMD. Если после этого не вызвать еще раз glewInit, то крешится.

#6
3:12, 11 июля 2019

MrShoor
Я, кстати, поматерился, пока не допёр, что glewInit нужно выполнять даже на одной карте для каждого потока :)
Всё работало, но CodeXL матюгался, что указатели на функции, инициализированные в одном потоке, используются в другом...

#7
5:22, 11 июля 2019

Daniil Petrov
> Всё работало, но CodeXL матюгался, что указатели на функции, инициализированные
> в одном потоке, используются в другом...
Нене, оно не на потоки ругается, а на контекст. Т.к. на винде ты сначала создаешь временный контекст, потом делаешь glewInit, то внутри glewInit вызывается wglGetProcAddress для этого временного контекста. Когда ты создаешь новый, уже не временный core контекст - то это другой контекст, и потенциально wglGetProcAddress может вернуть другие адреса. Это как раз тот случай, что я описал выше. Поэтому после того как уже создал постоянный core контекст нужно звать glewInit еще раз.

#8
6:52, 11 июля 2019

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

#9
20:48, 11 июля 2019

MrShoor

Возможно это была бага не AMD, а у тебя сначала контекст был на другом девайсе. Я напарывался на такое. wglGetProcAddress может вернуть разные значения. При первом вызове glewInit оно получает указател

Нет, я не использую ущербный glew и загружаю функции в класс для каждого контекста. Падает рандомно именно внутри драйвера амд, причем все другие комбинации не падают (когда главный драйвер intel или nvidia).
#10
21:20, 11 июля 2019

gkv311
> Нет, я не использую ущербный glew и загружаю функции в класс для каждого
> контекста. Падает рандомно именно внутри драйвера амд, причем все другие
> комбинации не падают
Странно. Может тогда все таки не в AMD проблема, а в твоем коде? Например у меня были случаи, когда я вылазил за пределы памяти, и какие-то железки вели себя нормально, а какие-то крешились. На минимальном приложении проблема воспроизводится?

#11
(Правка: 2:33) 2:30, 12 июля 2019

Кстати! У меня на AMD вылетает расшаривание GL-контекста, когда на Intel и Nvidia всё работает прекрасно!
Я вообще считаю AMD`шные карты ущербными ещё с тех пор, как мне собрали компьютер на ATI Radeon, потом скоропостижно проапгрейдился на Nvidia GeForce и забыл.
P.S. Есть, конечно, онанисты, которые их богословят, но это уже их личные проблемы интимного характера...
Если видеокарты от Intel себя зарекомендуют, я и от Nvidia с удовольствием оттолкнусь :) что-то они мне последние годы тоже как-то не комильфо...

ПрограммированиеФорумГрафика