lbclc/llvm: Moderne AMD GPUs unbenutzbar unter Linux?

Sound, Digitalkameras, TV+Video und Spiele.
Antworten
wanne
Moderator
Beiträge: 7448
Registriert: 24.05.2010 12:39:42

lbclc/llvm: Moderne AMD GPUs unbenutzbar unter Linux?

Beitrag von wanne » 24.01.2023 21:35:08

Hab mir nach längerem überlegen, in der Hoffnung, dass das im Gegensatz zu nvidia out of the Box tut, jetzt doch ne 7900 XT geholt.
Wollte die jetzt in betrieb nehmen und mal los rechnen.
Problem (unter bookworm):
Bekomme mehr oder weniger überall so eine Medlung.

Code: Alles auswählen

=== CL_PROGRAM_BUILD_LOG ===
fatal error: cannot open file '/usr/lib/clc/gfx1100-amdgcn-mesa-mesa3d.bc': No such file or directory
  Preferred work group size multiple (kernel)     <getWGsizes:1504: create kernel : error -46>
Bzw:

Code: Alles auswählen

clCompileProgram(): CL_COMPILE_PROGRAM_FAILURE

fatal error: cannot open file '/usr/lib/clc/gfx1100-amdgcn-mesa-mesa3d.bc': No such file or directory
Das betrifft jegliche OpenCL-Software die ich getestet habe.
Problem ist wohl, dass die libclc zu alt ist. Die ist teil von LLVM. Hört da bei gfx906 auf. Das ist ne GPU von 2016.
Also auf die Webseite von LLVM und mal geguckt. Aber selbst bei der aktuellen Alpha (16) hört es bei gfx1010 auf.
Gibt es da irgend welche Workarounds/Quellen oder muss man wirklich 5 Jahre warten bis der Support eintrudelt und eh jede CPU schneller ist und es gänzlich witzlos ist, auf der GPU zu rechnen?
Kann man das eventuell dem Windows-Teil entnehmen?
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
towo
Beiträge: 4403
Registriert: 27.02.2007 19:49:44
Lizenz eigener Beiträge: GNU Free Documentation License

Re: lbclc/llvm: Moderne AMD GPUs unbenutzbar unter Linux?

Beitrag von towo » 24.01.2023 23:44:19

Also ich habe mir immer OpenCL aus dem amdgpu-pro Paket installiert.
Anleitung die ich benutzt habe war https://foldingforum.org/viewtopic.php?f=81&t=33353

Bei F@H ging das dann problemlos.

wanne
Moderator
Beiträge: 7448
Registriert: 24.05.2010 12:39:42

Re: lbclc/llvm: Moderne AMD GPUs unbenutzbar unter Linux?

Beitrag von wanne » 25.01.2023 00:23:22

Code: Alles auswählen

Also ich habe mir immer OpenCL aus dem amdgpu-pro Paket installiert.
Ja. Das ist überall die Empfehlung die ich lese. Aber der wird seit 2018 nicht mehr weiterentwickelt und 2021 out of support. Man findet den entsprechend auch nicht mehr so einfach auf deren Website. Aber selbst wenn: Ich bezweifle, dass der die passenden Files für meine 7900 XT die deutlich nach 2018 kam bereitstellt. Aber falls du ne Möglichkeit kennst, an den dran zu kommen, wäre ich interessiert und würde mir das mal angucken.
Alles was die jetzigen Treiber Downloads machen ist apt install ... aufzurufen. Ubuntu geht bis gfx1036 hoch. Das würde zumindest mal die Radeon RX 6700 XT mit einschließen. Aber eben nicht meine 7900 XT Mich würde mal interessieren, woher die Files im Orginal kommen.
rot: Moderator wanne spricht, default: User wanne spricht.

wanne
Moderator
Beiträge: 7448
Registriert: 24.05.2010 12:39:42

Re: lbclc/llvm: Moderne AMD GPUs unbenutzbar unter Linux?

Beitrag von wanne » 03.11.2023 04:01:17

So bin jetzt etwas schlauer:
https://llvm.org/docs/AMDGPUUsage.html
Kurz llvm unterstützt unter Linux defakto keine Grafikkarte, die neuer als 2017 ist. (Und ich glaube, dass keiner unter Windows GPGPU-Computing macht.)
AMD hat deswegen seine eigene Compilersute mit libs, cmakemodifikationen und eigenem Treiber: ROCm.
Die Einzelteile sind da aufgelistet:
https://rocm.docs.amd.com/en/latest/rel ... nsing.html
Nicht nur ziemlicher Schmerz das zu compilieren sondern man muss auch alle Software, die das nutzt wenn ich das recht sehe neu compilieren. Deswegen kommt es gleich als VM oder docker. Außerdem stolpert man am Ende darüber dass in der letzten Version nur ein Duzend GPUs (Hauptsächlich welche für Rechenzentren) unterstützt werden. – Meine wäre sogar drunter. – Dummerweise mit dem Sternchen, dass das nur unter Ubuntu läuft. Warum? In dem Fall ist das gar nicht OpenSource: Das Ubuntu-Paket enthält Closed-Source Teile, die dann auch wirklich nur für Ubuntu 22.04 zur Verfügung stehen. Windows-Nutzer bekommen zwar Support für ein paar mehr GPUs aber dafür mit total veraltetem OpenCL.
Kurz: Wer auf seiner GPU rechnen will kauft wohl besser Nvidia. Da glänzt zwar nicht alles, aber wenigstens funktioniert es am Ende. – Wenn auch mit ein paar hässlichen Klimmzügen.
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
hikaru
Moderator
Beiträge: 13559
Registriert: 09.04.2008 12:48:59

Re: lbclc/llvm: Moderne AMD GPUs unbenutzbar unter Linux?

Beitrag von hikaru » 03.11.2023 09:30:59

wanne hat geschrieben: ↑ zum Beitrag ↑
24.01.2023 21:35:08

Code: Alles auswählen

=== CL_PROGRAM_BUILD_LOG ===
fatal error: cannot open file '/usr/lib/clc/gfx1100-amdgcn-mesa-mesa3d.bc': No such file or directory
  Preferred work group size multiple (kernel)     <getWGsizes:1504: create kernel : error -46>
Diese GPU-spezifischen Namen sind nur Links. Und die "gfx9xx" verlinken alle auf "tahiti", was über 10 Jahre alt, und damit noch älter ist:

Code: Alles auswählen

lrwxrwxrwx 1 hikaru hikaru      18 Jan  1  2023 gfx900-amdgcn--.bc -> tahiti-amdgcn--.bc
lrwxrwxrwx 1 hikaru hikaru      28 Jan  1  2023 gfx900-amdgcn-mesa-mesa3d.bc -> tahiti-amdgcn-mesa-mesa3d.bc
lrwxrwxrwx 1 hikaru hikaru      18 Jan  1  2023 gfx902-amdgcn--.bc -> tahiti-amdgcn--.bc
lrwxrwxrwx 1 hikaru hikaru      28 Jan  1  2023 gfx902-amdgcn-mesa-mesa3d.bc -> tahiti-amdgcn-mesa-mesa3d.bc
lrwxrwxrwx 1 hikaru hikaru      18 Jan  1  2023 gfx904-amdgcn--.bc -> tahiti-amdgcn--.bc
lrwxrwxrwx 1 hikaru hikaru      28 Jan  1  2023 gfx904-amdgcn-mesa-mesa3d.bc -> tahiti-amdgcn-mesa-mesa3d.bc
lrwxrwxrwx 1 hikaru hikaru      18 Jan  1  2023 gfx906-amdgcn--.bc -> tahiti-amdgcn--.bc
lrwxrwxrwx 1 hikaru hikaru      28 Jan  1  2023 gfx906-amdgcn-mesa-mesa3d.bc -> tahiti-amdgcn-mesa-mesa3d.bc
[..]
-rw-r--r-- 1 hikaru hikaru 8110264 Jan  1  2023 tahiti-amdgcn--.bc
-rw-r--r-- 1 hikaru hikaru 8129020 Jan  1  2023 tahiti-amdgcn-mesa-mesa3d.bc
lrwxrwxrwx 1 hikaru hikaru      18 Jan  1  2023 tonga-amdgcn--.bc -> tahiti-amdgcn--.bc
lrwxrwxrwx 1 hikaru hikaru      28 Jan  1  2023 tonga-amdgcn-mesa-mesa3d.bc -> tahiti-amdgcn-mesa-mesa3d.bc
Schuss ins Blaue:
Leg einfach neue tahiti-Links für deine GPU an, und schau was passiert!

Benutzeravatar
towo
Beiträge: 4403
Registriert: 27.02.2007 19:49:44
Lizenz eigener Beiträge: GNU Free Documentation License

Re: lbclc/llvm: Moderne AMD GPUs unbenutzbar unter Linux?

Beitrag von towo » 03.11.2023 10:33:21

Was sagt denn eigentlich clinfo?
Es gibt ja nun rusticl, welches wesentlich besser ist, als clover.

Allerdings können noch nicht alle Programme rusticl benutzen.

wanne
Moderator
Beiträge: 7448
Registriert: 24.05.2010 12:39:42

Re: lbclc/llvm: Moderne AMD GPUs unbenutzbar unter Linux?

Beitrag von wanne » 03.11.2023 13:15:57

hikaru hat geschrieben: ↑ zum Beitrag ↑
03.11.2023 09:30:59
Leg einfach neue tahiti-Links für deine GPU an, und schau was passiert!
Gar nichts mehr. Stehendes Bild. Selbst für andere User...
Was sagt denn eigentlich clinfo?
Die gleiche shon gepostete CLC Fehlermeldung.
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
towo
Beiträge: 4403
Registriert: 27.02.2007 19:49:44
Lizenz eigener Beiträge: GNU Free Documentation License

Re: lbclc/llvm: Moderne AMD GPUs unbenutzbar unter Linux?

Beitrag von towo » 03.11.2023 13:20:36

Code: Alles auswählen

RUSTICL_ENABLE=radeonsi OCL_ICD_VENDORS=rusticl.icd clinfo
geht das?

wanne
Moderator
Beiträge: 7448
Registriert: 24.05.2010 12:39:42

Re: lbclc/llvm: Moderne AMD GPUs unbenutzbar unter Linux?

Beitrag von wanne » 03.11.2023 13:51:54

Sorry, nach meiner rumspielerei gestern (ich glaube ich habe das ROCm Zeug endgültig entfernt, die Firmware upgedated) tut das..

Code: Alles auswählen

Number of platforms                               1
  Platform Name                                   Portable Computing Language
  Platform Vendor                                 The pocl project
  Platform Version                                OpenCL 3.0 PoCL 3.1+debian  Linux, None+Asserts, RELOC, SPIR, LLVM 15.0.6, SLEEF, DISTRO, POCL_DEBUG
  Platform Profile                                FULL_PROFILE
  Platform Extensions                             cl_khr_icd cl_pocl_content_size
  Platform Extensions with Version                cl_khr_icd                                                       0x400000 (1.0.0)
                                                  cl_pocl_content_size                                             0x400000 (1.0.0)
  Platform Numeric Version                        0xc00000 (3.0.0)
  Platform Extensions function suffix             POCL
  Platform Host timer resolution                  0ns

  Platform Name                                   Portable Computing Language
Number of devices                                 1
  Device Name                                     pthread-haswell-12th Gen Intel(R) Core(TM) i5-12600KF
  Device Vendor                                   GenuineIntel
  Device Vendor ID                                0x8086
  Device Version                                  OpenCL 3.0 PoCL HSTR: pthread-x86_64-pc-linux-gnu-haswell
  Device Numeric Version                          0xc00000 (3.0.0)
  Driver Version                                  3.1+debian
  Device OpenCL C Version                         OpenCL C 1.2 PoCL
  Device OpenCL C all versions                    OpenCL C                                                         0x400000 (1.0.0)
                                                  OpenCL C                                                         0x401000 (1.1.0)
                                                  OpenCL C                                                         0x402000 (1.2.0)
                                                  OpenCL C                                                         0xc00000 (3.0.0)
  Device OpenCL C features                        __opencl_c_3d_image_writes                                       0xc00000 (3.0.0)
                                                  __opencl_c_images                                                0xc00000 (3.0.0)
                                                  __opencl_c_atomic_order_acq_rel                                  0xc00000 (3.0.0)
                                                  __opencl_c_atomic_order_seq_cst                                  0xc00000 (3.0.0)
                                                  __opencl_c_atomic_scope_device                                   0xc00000 (3.0.0)
                                                  __opencl_c_read_write_images                                     0xc00000 (3.0.0)
                                                  __opencl_c_int64                                                 0xc00000 (3.0.0)
                                                  __opencl_c_fp64                                                  0xc00000 (3.0.0)
  Latest conformance test passed                  v2022-04-19-01
  Device Type                                     CPU
  Device Profile                                  FULL_PROFILE
  Device Available                                Yes
  Compiler Available                              Yes
  Linker Available                                Yes
  Max compute units                               16
  Max clock frequency                             4900MHz
  Device Partition                                (core)
    Max number of sub-devices                     16
    Supported partition types                     equally, by counts
    Supported affinity domains                    (n/a)
  Max work item dimensions                        3
  Max work item sizes                             4096x4096x4096
  Max work group size                             4096
  Preferred work group size multiple (device)     8
  Preferred work group size multiple (kernel)     8
  Max sub-groups per work group                   0
  Preferred / native vector sizes                 
    char                                                16 / 16      
    short                                               16 / 16      
    int                                                  8 / 8       
    long                                                 4 / 4       
    half                                                 0 / 0        (n/a)
    float                                                8 / 8       
    double                                               4 / 4        (cl_khr_fp64)
  Half-precision Floating-point support           (n/a)
  Single-precision Floating-point support         (core)
    Denormals                                     Yes
    Infinity and NANs                             Yes
    Round to nearest                              Yes
    Round to zero                                 Yes
    Round to infinity                             Yes
    IEEE754-2008 fused multiply-add               Yes
    Support is emulated in software               No
    Correctly-rounded divide and sqrt operations  Yes
  Double-precision Floating-point support         (cl_khr_fp64)
    Denormals                                     Yes
    Infinity and NANs                             Yes
    Round to nearest                              Yes
    Round to zero                                 Yes
    Round to infinity                             Yes
    IEEE754-2008 fused multiply-add               Yes
    Support is emulated in software               No
  Address bits                                    64, Little-Endian
  Global memory size                              31336771584 (29.18GiB)
  Error Correction support                        No
  Max memory allocation                           8589934592 (8GiB)
  Unified memory for Host and Device              Yes
  Shared Virtual Memory (SVM) capabilities        (core)
    Coarse-grained buffer sharing                 Yes
    Fine-grained buffer sharing                   Yes
    Fine-grained system sharing                   No
    Atomics                                       Yes
  Minimum alignment for any data type             128 bytes
  Alignment of base address                       1024 bits (128 bytes)
  Preferred alignment for atomics                 
    SVM                                           0 bytes
    Global                                        0 bytes
    Local                                         0 bytes
  Atomic memory capabilities                      relaxed, acquire/release, sequentially-consistent, work-group scope, device scope, all-devices scope
  Atomic fence capabilities                       relaxed, acquire/release, sequentially-consistent, work-item scope, work-group scope, device scope
  Max size for global variable                    0
  Preferred total size of global vars             0
  Global Memory cache type                        Read/Write
  Global Memory cache size                        20971520 (20MiB)
  Global Memory cache line size                   64 bytes
  Image support                                   Yes
    Max number of samplers per kernel             16
    Max size for 1D images from buffer            536870912 pixels
    Max 1D or 2D image array size                 2048 images
    Base address alignment for 2D image buffers   0 bytes
    Pitch alignment for 2D image buffers          0 pixels
    Max 2D image size                             16384x16384 pixels
    Max 3D image size                             2048x2048x2048 pixels
    Max number of read image args                 128
    Max number of write image args                128
    Max number of read/write image args           128
  Pipe support                                    No
  Max number of pipe args                         0
  Max active pipe reservations                    0
  Max pipe packet size                            0
  Local memory type                               Global
  Local memory size                               1310720 (1.25MiB)
  Max number of constant args                     8
  Max constant buffer size                        1310720 (1.25MiB)
  Generic address space support                   No
  Max size of kernel argument                     1024
  Queue properties (on host)                      
    Out-of-order execution                        Yes
    Profiling                                     Yes
  Device enqueue capabilities                     (n/a)
  Queue properties (on device)                    
    Out-of-order execution                        No
    Profiling                                     No
    Preferred size                                0
    Max size                                      0
  Max queues on device                            0
  Max events on device                            0
  Command buffer capabilities                     kernel printf, simultaneous use, out of order
    Required queue properties for command buffer  
    Out-of-order execution                        No
    Profiling                                     No
  Prefer user sync for interop                    Yes
  Profiling timer resolution                      1ns
  Execution capabilities                          
    Run OpenCL kernels                            Yes
    Run native kernels                            Yes
    Non-uniform work-groups                       No
    Work-group collective functions               No
    Sub-group independent forward progress        No
    IL version                                    (n/a)
    ILs with version                              (n/a)
    SPIR versions                                 (n/a)
  printf() buffer size                            16777216 (16MiB)
  Built-in kernels                                pocl.add.i8;org.khronos.openvx.scale_image.nn.u8;org.khronos.openvx.scale_image.bl.u8;org.khronos.openvx.tensor_convert_depth.wrap.u8.f32
  Built-in kernels with version                   pocl.add.i8                                                      0x402000 (1.2.0)
                                                  org.khronos.openvx.scale_image.nn.u8                             0x402000 (1.2.0)
                                                  org.khronos.openvx.scale_image.bl.u8                             0x402000 (1.2.0)
                                                  org.khronos.openvx.tensor_convert_depth.wrap.u8.f32              0x402000 (1.2.0)
  Device Extensions                               cl_khr_byte_addressable_store cl_khr_global_int32_base_atomics   cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics   cl_khr_local_int32_extended_atomics cl_khr_3d_image_writes cl_khr_command_buffer cl_khr_spir cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_fp64
  Device Extensions with Version                  cl_khr_byte_addressable_store                                    0x400000 (1.0.0)
                                                  cl_khr_global_int32_base_atomics                                 0x400000 (1.0.0)
                                                  cl_khr_global_int32_extended_atomics                             0x400000 (1.0.0)
                                                  cl_khr_local_int32_base_atomics                                  0x400000 (1.0.0)
                                                  cl_khr_local_int32_extended_atomics                              0x400000 (1.0.0)
                                                  cl_khr_3d_image_writes                                           0x400000 (1.0.0)
                                                  cl_khr_command_buffer                                              0x9000 (0.9.0)
                                                  cl_khr_spir                                                      0x801000 (2.1.0)
                                                  cl_khr_int64_base_atomics                                        0x400000 (1.0.0)
                                                  cl_khr_int64_extended_atomics                                    0x400000 (1.0.0)
                                                  cl_khr_fp64                                                      0x400000 (1.0.0)

NULL platform behavior
  clGetPlatformInfo(NULL, CL_PLATFORM_NAME, ...)  Portable Computing Language
  clGetDeviceIDs(NULL, CL_DEVICE_TYPE_ALL, ...)   Success [POCL]
  clCreateContext(NULL, ...) [default]            Success [POCL]
  clCreateContextFromType(NULL, CL_DEVICE_TYPE_DEFAULT)  Success (1)
    Platform Name                                 Portable Computing Language
    Device Name                                   pthread-haswell-12th Gen Intel(R) Core(TM) i5-12600KF
  clCreateContextFromType(NULL, CL_DEVICE_TYPE_CPU)  Success (1)
    Platform Name                                 Portable Computing Language
    Device Name                                   pthread-haswell-12th Gen Intel(R) Core(TM) i5-12600KF
  clCreateContextFromType(NULL, CL_DEVICE_TYPE_GPU)  No devices found in platform
  clCreateContextFromType(NULL, CL_DEVICE_TYPE_ACCELERATOR)  No devices found in platform
  clCreateContextFromType(NULL, CL_DEVICE_TYPE_CUSTOM)  No devices found in platform
  clCreateContextFromType(NULL, CL_DEVICE_TYPE_ALL)  Success (1)
    Platform Name                                 Portable Computing Language
    Device Name                                   pthread-haswell-12th Gen Intel(R) Core(TM) i5-12600KF

ICD loader properties
  ICD loader Name                                 OpenCL ICD Loader
  ICD loader Vendor                               OCL Icd free software
  ICD loader Version                              2.3.1
  ICD loader Profile                              OpenCL 3.0

Code: Alles auswählen

$ RUSTICL_ENABLE=radeonsi OCL_ICD_VENDORS=rusticl.icd clinfo
Number of platforms                               0

ICD loader properties
  ICD loader Name                                 OpenCL ICD Loader
  ICD loader Vendor                               OCL Icd free software
  ICD loader Version                              2.3.1
  ICD loader Profile                              OpenCL 3.0
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
schorsch_76
Beiträge: 2535
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: lbclc/llvm: Moderne AMD GPUs unbenutzbar unter Linux?

Beitrag von schorsch_76 » 03.11.2023 19:02:19

Also voller Erfolg? Was hast du gemacht das es geht?

lorn10
Beiträge: 2
Registriert: 23.01.2024 14:57:02

Re: lbclc/llvm: Moderne AMD GPUs unbenutzbar unter Linux?

Beitrag von lorn10 » 23.01.2024 15:48:39

Hallo an alle

Hier folgt nun eine ggf. interessante Info für alle von diesem Problem Betroffenen. Die libclc wurde nach Jahren tatsächlich aktualisiert und bietet nun Unterstützung bis hinauf zur neuesten RDNA Generation.

Mehr Infos findet man beim entsprechenden LLVM MR: https://github.com/llvm/llvm-project/pull/78884

Somit müsste nun also auch eine gewisse Unterstützung via der alten OpenCL API "clover" möglich sein. In wie fern diese funktionsfähig ist kann ich nicht sagen. Die folgenden Resultate eines älteren libclc Patches (und einer älteren LLVM Version) sehen aber nicht so schlecht aus: https://gitlab.freedesktop.org/mesa/mes ... te_1534861

Die aktualisierte libclc wird in der kommenden LLVM 18 Version dabei sein. Der Patch kann aber auch in ältere Versionen integriert werden.

Sofern das jemand austesten will gibt es Folgendes zu beachten. Der neue "LLVM Pass Manager" welcher seit LLVM 17 der alleinige Standard ist hat mit der alten OpenCL API "clover" eventuell so seine Schwierigkeiten. Das wurde jedenfalls hier berichtet:
https://gitlab.freedesktop.org/mesa/mes ... ests/24879

Vielleicht ist aber auch ein anderes (LLVM) Problem dafür verantwortlich. Jedenfalls war LLVM 16 die letzte welche noch den alten "legacy" und neuen LLVM Pass Manager unterstützte. Bei Mesa wurde das in Version 23.3.0 gewechselt, ergo ist Mesa 23.2 die letzte mit "legacy Pass Manager" Support.

Antworten