ATI RX500 Driver
Comment choisir le bon driver?
Système et matériels / Cartes graphiques et webcams

Suryavarman Membre non connecté
-
- Voir le profil du membre Suryavarman
- Inscrit le : 22/06/2018
- Site internet
- Groupes :
J'utilise blender et je souhaiterai qu'il reconnaisse la carte graphique (AMD RX580).
Le driver sélectionné est «Volcanic Islands and Later (amdgpu/fglrx)».
Du coup je suis allé sur le site de AMD:
Et là je me retrouve avec plusieurs choix de distribution.
https://support.amd.com/fr-fr/download#
Radeon™ Software for Linux® version 18.20 for RHEL 7.5 / CentOS 7.5
Radeon™ Software for Linux® version 18.20 for RHEL 6.9 / CentOS 6.9
Radeon™ Software for Linux® version 18.20 for Ubuntu 18.04
Radeon™ Software for Linux® version 18.20 for Ubuntu 16.04.4
Radeon™ Software for Linux® version 18.20 for SLED/SLES 12 SP3
Pour vous quel serait le choix le plus adéquat ?
A noté que le comportement des jeux tel que le dernier DeusX avec les graphismes à fond fonctionne bien.
Quelques liens sur le fofo en rapport avec cette question:
https://www.mageialinux-online.org/forum/topic-23107+nouvelles-cartes-graphiques-amd.php
Édité par Suryavarman Le 29/06/2018 à 10h20

Papoteur Membre non connecté
-
- Voir le profil du membre Papoteur
- Inscrit le : 03/10/2011
- Groupes :
-
Modérateur
-
Équipe Mageia
-
Administrateur
-
Forgeron
Aucun.
Mageia intègre les pilotes graphiques libres ou propriétaires, au choix, et les met à jour. Je doute que tu aies besoin de passer par des rpm tiers. S'ils ne sont pas disponibles, c'est qu'ils ne peuvent pas fonctionner.
Par contre, il se peut que tu aies deux cartes graphiques, et dans ce cas, tu dois utiliser des outils spécifiques pour utiliser la carte dite "discrète".
Ces outils s'appellent Bumblebee ou Prime.
Yves

Suryavarman Membre non connecté
-
- Voir le profil du membre Suryavarman
- Inscrit le : 22/06/2018
- Site internet
- Groupes :
Centre de Contrôle > Matériel > Carte Vidéo : Ellesmere [Radeon RX 470/480/570/570X/580/580X]
Ce qui veut dire que le système ne sais pas exactement de quelle carte graphique il s'agit.
Du coup blender et les autres application ne peuvent connaitre le modèle de la carte, seulement la série.
Ce qui peut ne pas être important pour certaine application, DeusEX Mankind Divide s'alarme de pas connaitre la carte mais le jeux tourne très bien avec tout les graphismes à fond. Mais pour une application comme blender, il est nécessare de connaitre le modèle pour activer l'accélération matériel.
Comment fait on pour que le système reconnaisse le modèle de la carte?
A noter que je n'ai qu'une carte graphique.
Édité par Suryavarman Le 29/06/2018 à 17h41

Suryavarman Membre non connecté
-
- Voir le profil du membre Suryavarman
- Inscrit le : 22/06/2018
- Site internet
- Groupes :
Je met ici mes démarches:
----------------
https://docs.blender.org/manual/en/dev/render/cycles/gpu_rendering.html
(We only support graphics cards with GCN architecture 2.0 and above)
https://www.youtube.com/watch?v=REQuKDZXfLA
Il reconnait Ellsemere sur la vidéo.
----------------
Comme mon soucis est sur blender je vais essayé de trouver comment il défini le périphérique graphique:
L'option que j'ai besoin est pour cycles:
Code PYTHON :
qui pour OpenCL est affecté de la mamière suivante:CyclesPreferences.compute_device_type
Code PYTHON :
if self.compute_device_type == 'OPENCL' and opencl_devices: box = row.box() for device in opencl_devices: box.prop(device, "use", text=device.name)
Le code ce situe dans le répertoire : 2.79/scripts/addons/cycles/
Cycles effectue donc une liste de périphériques qui est obtenu par la fonction
Code PYTHON :
CyclesPreferences.get_devices()
Pour ce faire il récupère une liste de périphériques
Code PYTHON :
(à noté que _cycles est un module)il l'a met à jour _cycles.available_devices()
Code PYTHON :
puis il regarde pour chaque périphérique si il existe et si oui il regarde si il est du type CUDA ou OPENCL.self.update_device_entries(device_list)
Le module _cycles n'existe pas. Je suppose que ça doit être la partie c qui le génère. Je vais donc voir du côté du code source de cycles:
https://developer.blender.org/diffusion/C/
Il n'y ai pas non plus.
Du coup je vais voir à partir de console python de blender ce que renvoie cette fonction
Code PYTHON :
available_devices()
Code PYTHON :
>>> _cycles.available_devices() (('AMD Ryzen 7 1800X Eight-Core Processor', 'CPU', 'CPU'),)
On s'aperçoit donc que seul le processeur est dans la liste.
Je retourne du côté du code de cycles. On peut trouver le code qui établit la liste des périphériques OpenCL dans :
https://developer.blender.org/diffusion/C/browse/master/src/device/device_opencl.cpp
Du côté de blender on retrouve dans le source de blender les occurrences de «available_devices»
https://developer.blender.org/diffusion/B/browse/master/intern/cycles/device/
On retombe sur quelque chose de connu: le code de cycles.
Code CPP :
devices.clear(); #ifdef WITH_OPENCL if(device_opencl_init()) { device_opencl_info(devices); } #endif
opencl_utils.cpp -> OpenCLInfo::get_usable_devices -> OpenCLInfo::device_type() -> si DebugFlags().opencl.device_type == DebugFlags::OpenCL:

https://developer.blender.org/diffusion/B/browse/master/intern/cycles/util/util_debug.cpp
Code CPP :
char *device = getenv("CYCLES_OPENCL_TEST"); if(device) { ... else if(strcmp(device, "GPU") == 0) { device_type = DebugFlags::OpenCL::DEVICE_GPU; }
getenv("CYCLES_OPENCL_TEST") <--Du coup j'ai fait dans la console blender:
Code PYTHON :
import os os.environ
Et le résultat est un dictionnaire exan de "CYCLES_OPENCL_TEST"
Du coup j'ai trouvé ça :
https://www.facebook.com/BCGIU/posts/908410379170636
https://blenderartists.org/t/cycles-amd-opencl-test/598060
mais ça change rien.
Donc on reprend :
device_opencl_init initialise la liste des périphériques:
Pour ce faire il regarde si la variable d'environnement «CYCLES_OPENCL_TEST» correspond à quelque-chose. Peut importe si c'est un processeur, ou un GPU pour le moment.
Ensuite interviens le clewInit (https://github.com/martijnberger/clew)
du coup j'ai fait un projet avec ce bout de code pour voir ce que retourne clewInit()
Code CPP :
#include <iostream> #include "clew.h" int main() { bool clpresent = 0 == clewInit(); if( !clpresent ) { throw std::runtime_error("OpenCL library not found"); } else { std::cout << "clpresent == CLEW_SUCCESS" << (clpresent == CLEW_SUCCESS) << std::endl; } return 0; }
Il retourne CLEW_SUCCESS. OpenCL s'initialise correctement.
Donc device_opencl_init() devrait retourner True.
J'ai ajouté au test ce code:
Code CPP :
cl_int error = 0; cl_platform_id platform_ids[10]; cl_uint num_platforms; error = clGetPlatformIDs(10, platform_ids, &num_platforms); if(error != CL_SUCCESS) { std::cout << "something went wrong, errorcode " << error << " it's mean " << clewErrorString(error) << std::endl; return -1; } std::cout << "num platforms: " << num_platforms << std::endl;
Il me retourne: «something went wrong, errorcode -1001 it's mean CL_PLATFORM_NOT_FOUND_KHR»
https://stackoverflow.com/questions/20335579/error-clgetplatformids-1001-when-running-opencl-code-linux
https://www.khronos.org/registry/OpenCL/sdk/1.0/docs/man/xhtml/clGetPlatformIDs.html
Amusant quand j'effectue l'opération suivante:
Code :
glxinfo | grep "OpenGL renderer"
Il me renvoit la bonne carte graphique :
Code :
OpenGL renderer string: Radeon RX 580 Series (POLARIS10 / DRM 3.19.0 / 4.14.50-desktop-2.mga6, LLVM 3.9.1)
J'ai installé opencl-header, libopencl-devel et lib64opencl-devel. Ça n'a rien changé.
https://wiki.tiker.net/OpenCLHowTo
du coup j'ai lancé une recherche de l'icd (le fichier qui dit à opencl quel périphérique il y a sur ma machine)
Du coup j'ai trouvé un package
Code :
urpmi libocl-icd-devel
https://forums.mageia.org/en/viewtopic.php?t=12327&p=72598
Édité par Suryavarman Le 01/07/2018 à 17h30

Antoniop Membre non connecté
-
- Voir le profil du membre Antoniop
- Inscrit le : 21/12/2011
- Groupes :
Si le pilote s'intitule "Carte Vidéo : Ellesmere [Radeon RX 470/480/570/570X/580/580X]", cela ne veut pas dire que le système ne sait pas reconnaître la carte, cela veut dire que c'est le même pilote pour l'ensemble de ces cartes.
Maintenant, heureusement, le pilote et les logiciels savent déterminer la carte (normalement) ! sans quoi seules les possibilités de la carte la plus faible seraient disponibles (ben oui, comment exploiter un shader si tu ne sais pas s'il existe).
Que blender ne soit pas capable de lui même d'interroger le driver pour déterminer les caractéristiques de la carte me semble bizarre, mais je n'utilise pas blender.
Il y aurait un autre moyen, je ne suis pas sûr que cela pourrait marcher, mais sait-on jamais, qui serait de modifier le fichier
/etc/X11/xorg.conf
Attention, cette opération est à risque, simplement de ne pas pouvoir redémarrer en mode fenêtre, mais uniquement en mode console.
Faire une copie de ce fichier dans le même répertoire avant modif.
Dans ce fichier il y a une section "device" (par exemple sur mon petit portable à carte intel) :
Code :
Section "Device"
Identifier "device1"
VendorName "Intel Corporation"
BoardName "Intel 810 and later"
Driver "intel"
Option "DPMS"
EndSection
qui représente ta carte, mais à vrai dire, seule la ligne "driver" modifie le driver, à ne pas toucher.
Tu peux laisser VendorName" tel quel et modifier la ligne BoardName en mettant "Radeon RX 580 Series".
ça ne mange pas de pain et ça n'empêchera pas DeuxEx de tourner normalement.
Le pire ça serait AMA qu'openCL ne soit pas supporté par ta carte sous linux....
Édité par Antoniop Le 05/07/2018 à 14h26

Suryavarman Membre non connecté
-
- Voir le profil du membre Suryavarman
- Inscrit le : 22/06/2018
- Site internet
- Groupes :
Oui j'avais trouvé comment voir si il reconnaissait bien la bonne carte graphique:
Code :
glxinfo | grep "OpenGL renderer"
Résultat:
Code :
OpenGL renderer string: Radeon RX 580 Series (POLARIS10 / DRM 3.19.0 / 4.14.50-desktop-2.mga6, LLVM 3.9.1)
Je viens d'essayer ton idée. Je n'ai pas eu de mode console. Mais blender ne peut toujours pas reconnaitre la carte. Cela est tout simplement dû au fait que le driver ne supporte pas OpenCL. Ce qui me permet de dire ça c'est le code openCL suivant (comprendre le code utilise l'implémentation d'OpenCL du driver):
J'ai tout de même réessayer d'exécuter le code suivant avec le fichier xorg modifier
Code CPP :
#include <iostream> #include "clew.h" int main() { bool clpresent = 0 == clewInit(); if( !clpresent ) { throw std::runtime_error("OpenCL library not found"); } else { std::cout << "clpresent == CLEW_SUCCESS" << (clpresent == CLEW_SUCCESS) << std::endl; } cl_int error = 0; cl_platform_id platform_ids[10]; cl_uint num_platforms; error = clGetPlatformIDs(10, platform_ids, &num_platforms); if(error != CL_SUCCESS) { std::cout << "something went wrong, errorcode " << error << " it's mean " << clewErrorString(error) << std::endl; return -1; } else { std::cout << "num platforms: " << num_platforms << std::endl; } return 0; }
Résultat:
Code :
clpresent == CLEW_SUCCESS0
something went wrong, errorcode -1001 it's mean CL_PLATFORM_NOT_FOUND_KHR
Le résultat est le même. Il ne reconnait pas la carte graphique.
Édité par Suryavarman Le 09/07/2018 à 09h18

Antoniop Membre non connecté
-
- Voir le profil du membre Antoniop
- Inscrit le : 21/12/2011
- Groupes :
J'ai trouvé cela :
https://wiki.archlinux.org/index.php/GPGPU#AMD.2FATI
Pour archlinux seulement malheureusement
ça n'a pas l'air simple !
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie