# OpenCL mit AMD Ryzen 2500U mit Vega

## alfcyber

Hallo, habe jetzt nicht direkt ein technisches Problem, meine Frage paßt aber am besten in dieses Forum (u. die Suchfunktion liefert hierzu im deutschen Forum quasi nichts).

Ich wollte nur mal Fragen, ob jemand OpenCL mit Gentoo in Verbindung mit einem Ryzen Prozessor mit integrierter Grafik nutzen kann.

Meine CPU ist : model name	: AMD Ryzen 5 2500U with Radeon Vega Mobile Gfx

Ich denke, dass aufgrund bisher recht "dünner" Software Unterstützung OpenCL für viele deshalb kein Thema ist.

Ich nutze komplett die Open Source Driver amdgpu (im Kernel, den für X u. Mesa mit radeon/gallium). Soweit läuft alles ok.

Nach einen Ausflug in die Welt von OpenCL (ich habe den Wiki gelesen), installierte ich

dev-libs/rocm-opencl-runtime (2.10.0) (mit Handarbeit, weil es kompiliert nicht, es fehlt ein include für einen memory treiber). (2.9.0 kompiliert ohne Handarbeit) ((edit))2.10.0 kompiliert auch, es lag an einer verwaisten rocm header installation im /opt ordner

und natürlich alle "roc" Abhängigkeiten, wie auch den entsprechenden llvm, die automatisch mitinstalliert werden. (und auch icd)

So weit so gut, liefert clinfo:

```

 Platform Name                                   AMD Accelerated Parallel Processing

  Platform Vendor                                 Advanced Micro Devices, Inc.

  Platform Version                                OpenCL 2.0 AMD-APP.internal (2973.0)

  Platform Profile                                FULL_PROFILE

  Platform Extensions                             cl_khr_icd cl_amd_object_metadata cl_amd_event_callback 

  Platform Max metadata object keys (AMD)         8

  Platform Extensions function suffix             AMD

```

... usw....

 auch rocminfo bescheinigt 2 vorhandene "Agenten, 1CPU, 2GPU", scheint also alles i.O. zu sein.

Wenn ich aber jetzt Versuche z.b. in Blender(2.79) cycles zu aktivieren  (cycles ist ein Renderer der OpenCL unterstützt), ist sofort ein Ausstieg in dem sonst immer einwandfrei

funktionierenden Blender da. Backtrace auszug:

```

# backtrace

blender(BLI_system_backtrace+0x33) [0x5572ff4c5003]

blender(+0xac33ad) [0x5572feaf53ad]

/lib64/libc.so.6(+0x391b0) [0x7fd99ca8e1b0]

/usr/lib/llvm/8/lib64/libLLVMSupport.so.8(_ZN4llvm13StringMapImpl15LookupBucketForENS_9StringRefE+0x17) [0x7fd9992

98f77]

/usr/lib/llvm/8/lib64/libLLVMSupport.so.8(_ZN4llvm2cl6Option9setArgStrENS_9StringRefE+0x115) [0x7fd99922c2f5]

/usr/lib/llvm/roc/lib/libLLVMSupport.so.10roc(+0x59ee1) [0x7fd878f90ee1]

...

...

/usr/lib64/libamdocl64.so(+0x9c90d) [0x7fd97c36b90d]   <<< (dev-libs/rocm-opencl-runtime)

/lib64/libpthread.so.0(+0x10f97) [0x7fd99ff40f97]

/usr/lib64/libamdocl64.so(+0x5ec5b) [0x7fd97c32dc5b]   <<< dto.

...

...

```

auch in Mandelbulber (auch aus dem Portage Tree), führt ein aktivieren des OpenCL sofort zum Absturz.

((edit)) iommu(2) scheint ohne zusätzliche Kernel parameter voll funktionsfähig zu sein (sonst würde wohl auch rocminfo einen Fehler ausgeben)

(die im ebuild dev-libs/roct-thunk-interface suggerierten Kernel Konfigurationen wurden vorgenommen)

Was ich probiert habe:

- mesa einmal ohne einmal mit opencl unterstützung zu kompilieren (mit funktioniert auch teils clinfo nicht, scheint also eindeutig ohne kompiliert werden zu müssen), 

- den closed source Treiber von AMD : dev-libs/amdgpu-pro-opencl 

- blender 2.81 selbst kompiliert (gleicher fehler wie mit dem blender aus dem portage tree)

- die aktuellste Version von Mandelbulber kompiliert (das gleiche)

- eine ältere Version von rocm-opencl-runtime

jeweils immer Absturz der besagten Programme.

einzigst ein mini source von git (SimpleOpenCL) mit wenigen Zeilen Code läuft durch u. bescheinigt ein funktionierendes OpenCL.

(Da mir die OpenCL Funktion nur in Mandelbulber o. Blender etwas bringen könnte, nützt mir das wenig).

Es wäre für mich schon hilfreich, wenn jemand sagen könnte, ja bei mir funktionierts, du hast was falsch gemacht oder hier funktionierts auch nicht, bzw. auch jeder andere HInweis der zu einem Ergebnis führen könnte wäre gut.

----------

## Christian99

hm, hab momentan keinen entsprechenden Computer. Aber der neu bestellte Laptop hat entsprechende CPU/GPU.

Ich werd das mal ausprobieren, aber das kann noch ein paar Wochen dauern bis er da und eingerichtet ist.

----------

## alfcyber

Hallo,

habe nunmehr Zeit für weitere Tests gehabt und festgestellt, dass man Mesa schon mit dem opencl Use Flag compilieren kann, ggf. kann man es mittels der Eintragung

in /etc/OpenCL/vendors ... aktivieren oder deaktivieren (es kann beim Ryzen 2500u eingeschaltet bleiben), eine Unterstützung nur mit Mesa kann man offenbar von

Blender oder Mandelbulber (die Portage Tree Version) nicht erwarten, bei der neuesten Version von Mandelb.(2.22 von git evtl..., es gibt beim deaktivieren von der rocm

implementierung zumindest keinen Absturz, aber bisher noch kein Erfolg, ich Probe weiter). 

Ausserdem kein support von AMD zu erwarten, folgendes konnte ich nunmehr im Github finden:

Not supported or limited support under ROCm

Limited support

    ROCm 2.9.x should support PCIe 2.0 enabled CPUs such as the AMD Opteron, Phenom, Phenom II, Athlon, Athlon X2, Athlon II and older Intel Xeon and Intel Core Architecture and Pentium CPUs. However, we have done very limited testing on these configurations, since our test farm has been catering to CPUs listed above. This is where we need community support. If you find problems on such setups, please report these issues.

    Thunderbolt 1, 2, and 3 enabled breakout boxes should now be able to work with ROCm. Thunderbolt 1 and 2 are PCIe 2.0 based, and thus are only supported with GPUs that do not require PCIe 3.0 atomics (e.g. Vega 10). However, we have done no testing on this configuration and would need community support due to limited access to this type of equipment.

    AMD “Carrizo” and “Bristol Ridge” APUs are enabled to run OpenCL, but do not yet support HCC, HIP, or our libraries built on top of these compilers and runtimes.

        As of ROCm 2.1, “Carrizo” and “Bristol Ridge” require the use of upstream kernel drivers.

        In addition, various “Carrizo” and “Bristol Ridge” platforms may not work due to OEM and ODM choices when it comes to key configurations parameters such as inclusion of the required CRAT tables and IOMMU configuration parameters in the system BIOS.

        Before purchasing such a system for ROCm, please verify that the BIOS provides an option for enabling IOMMUv2 and that the system BIOS properly exposes the correct CRAT table. Inquire with your vendor about the latter.

    AMD “Raven Ridge” APUs are enabled to run OpenCL, but do not yet support HCC, HIP, or our libraries built on top of these compilers and runtimes.

        As of ROCm 2.1, “Raven Ridge” requires the use of upstream kernel drivers.

        In addition, various “Raven Ridge” platforms may not work due to OEM and ODM choices when it comes to key configurations parameters such as inclusion of the required CRAT tables and IOMMU configuration parameters in the system BIOS.

        Before purchasing such a system for ROCm, please verify that the BIOS provides an option for enabling IOMMUv2 and that the system BIOS properly exposes the correct CRAT table. Inquire with your vendor about the latter.

(soweit ich das verstehe ist es softwareseitig zwar integriert aber reine glückssache ob es funktioniert, das bezieht sich auf rocm version 2.9 (da ist noch mehr info dort))

es besteht also noch Hoffnung, dass es später offiziell unterstützt werden könnte.

(Ausserdem habe ich das gleiche Procedere auf einem Laptop mit Ryzen 3500 ausprobiert, dort kommt es sofort zum Absturz nur beim Aufruf von rocminfo)

(Kernel ist jeweils 5.3.0) - (edit)(gleiches Ergebnis mit Kernel 5.4.0-gentoo u. 5.4.1-gentoo)

Danke fürs lesen, der Thread wäre somit "gelöst, mein Fehler"

----------

## alfcyber

nur zur Ergänzung :: (laptop ist ein thinkpad E485)

alf@localhost /usr/src/linux-5.3.0-gentoo $ dmesg | grep CRAT

[    0.006531] ACPI: CRAT 0x000000009CFF4000 000810 (v01 LENOVO TP-R0U   00001550 PTEC 00000002)

[    4.653767] Parsing CRAT table with 1 nodes

[    0.708632] pci 0000:00:00.2: AMD-Vi: IOMMU performance counters supported

[    0.712369] pci 0000:00:00.2: AMD-Vi: Found IOMMU cap 0x40

[    0.713985] perf/amd_iommu: Detected AMD IOMMU #0 (2 banks, 4 counters/bank).

[    4.517280] AMD-Vi: AMD IOMMUv2 driver by Joerg Roedel <jroedel@suse.de>

alf@localhost /usr/src/linux-5.4.1-gentoo $ less .config | grep -E 'USERPTR|ZONE_DEV|HMM|NUMA'

```

CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y

# CONFIG_NUMA_BALANCING is not set

CONFIG_NUMA=y

# CONFIG_AMD_NUMA is not set

CONFIG_X86_64_ACPI_NUMA=y

# CONFIG_NUMA_EMU is not set

CONFIG_USE_PERCPU_NUMA_NODE_ID=y

CONFIG_ACPI_NUMA=y

CONFIG_ZONE_DEVICE=y

CONFIG_HMM_MIRROR=y

CONFIG_DRM_AMDGPU_USERPTR=y

```

alf@localhost /usr/src/linux-5.3.0-gentoo $ rocminfo

```

ROCk module is loaded

alf is member of video group

=====================    

HSA System Attributes    

=====================    

Runtime Version:         1.1

System Timestamp Freq.:  1000.000000MHz

Sig. Max Wait Duration:  18446744073709551615 (0xFFFFFFFFFFFFFFFF) (timestamp count)

Machine Model:           LARGE                              

System Endianness:       LITTLE                             

==========               

HSA Agents               

==========               

*******                  

Agent 1                  

*******                  

  Name:                    AMD Ryzen 5 2500U with Radeon Vega Mobile Gfx

  Marketing Name:          AMD Ryzen 5 2500U with Radeon Vega Mobile Gfx

  Vendor Name:             CPU                                

  Feature:                 None specified                     

  Profile:                 FULL_PROFILE                       

  Float Round Mode:        NEAR                               

  Max Queue Number:        0(0x0)                             

  Queue Min Size:          0(0x0)                             

  Queue Max Size:          0(0x0)                             

  Queue Type:              MULTI                              

  Node:                    0                                  

  Device Type:             CPU                                

  Cache Info:              

    L1:                      32(0x20) KB                        

  Chip ID:                 5597(0x15dd)                       

  Cacheline Size:          64(0x40)                           

  Max Clock Freq. (MHz):   2000                               

  BDFID:                   1280                               

  Internal Node ID:        0                                  

  Compute Unit:            8                                  

  SIMDs per CU:            4                                  

  Shader Engines:          1                                  

  Shader Arrs. per Eng.:   1                                  

  WatchPts on Addr. Ranges:4                                  

  Features:                None

  Pool Info:               

    Pool 1                   

      Segment:                 GLOBAL; FLAGS: KERNARG, FINE GRAINED

      Size:                    8388224(0x7ffe80) KB               

      Allocatable:             TRUE                               

      Alloc Granule:           4KB                                

      Alloc Alignment:         4KB                                

      Acessible by all:        TRUE                               

  ISA Info:                

    N/A                      

*******                  

Agent 2                  

*******                  

  Name:                    gfx902                             

  Marketing Name:          AMD Ryzen 5 2500U with Radeon Vega Mobile Gfx

  Vendor Name:             AMD                                

  Feature:                 KERNEL_DISPATCH                    

  Profile:                 FULL_PROFILE                       

  Float Round Mode:        NEAR                               

  Max Queue Number:        128(0x80)                          

  Queue Min Size:          4096(0x1000)                       

  Queue Max Size:          131072(0x20000)                    

  Queue Type:              MULTI                              

  Node:                    0                                  

  Device Type:             GPU                                

  Cache Info:              

    L1:                      16(0x10) KB                        

  Chip ID:                 5597(0x15dd)                       

  Cacheline Size:          64(0x40)                           

  Max Clock Freq. (MHz):   1100                               

  BDFID:                   1280                               

  Internal Node ID:        0                                  

  Compute Unit:            11                                 

  SIMDs per CU:            4                                  

  Shader Engines:          1                                  

  Shader Arrs. per Eng.:   1                                  

  WatchPts on Addr. Ranges:4                                  

  Features:                KERNEL_DISPATCH 

  Fast F16 Operation:      FALSE                              

  Wavefront Size:          64(0x40)                           

  Workgroup Max Size:      1024(0x400)                        

  Workgroup Max Size per Dimension:

    x                        1024(0x400)                        

    y                        1024(0x400)                        

    z                        1024(0x400)                        

  Max Waves Per CU:        160(0xa0)                          

  Max Work-item Per CU:    10240(0x2800)                      

  Grid Max Size:           4294967295(0xffffffff)             

  Grid Max Size per Dimension:

    x                        4294967295(0xffffffff)             

    y                        4294967295(0xffffffff)             

    z                        4294967295(0xffffffff)             

  Max fbarriers/Workgrp:   32                                 

  Pool Info:               

    Pool 1                   

      Segment:                 GROUP                              

      Size:                    64(0x40) KB                        

      Allocatable:             FALSE                              

      Alloc Granule:           0KB                                

      Alloc Alignment:         0KB                                

      Acessible by all:        FALSE                              

  ISA Info:                

    ISA 1                    

      Name:                    amdgcn-amd-amdhsa--gfx902+xnack    

      Machine Models:          HSA_MACHINE_MODEL_LARGE            

      Profiles:                HSA_PROFILE_BASE                   

      Default Rounding Mode:   NEAR                               

      Default Rounding Mode:   NEAR                               

      Fast f16:                TRUE                               

      Workgroup Max Size:      1024(0x400)                        

      Workgroup Max Size per Dimension:

        x                        1024(0x400)                        

        y                        1024(0x400)                        

        z                        1024(0x400)                        

      Grid Max Size:           4294967295(0xffffffff)             

      Grid Max Size per Dimension:

        x                        4294967295(0xffffffff)             

        y                        4294967295(0xffffffff)             

        z                        4294967295(0xffffffff)             

      FBarrier Max Size:       32                                 

*** Done ***  

```

(in Blender 2.81 verschwand die ad-on cycles option nach dem ersten Absturz)

~/ext_src/blender_2_8/blender-2.80-87de71a8aaa0-linux-glibc224-x86_64 $ more /tmp/blender.crash.txt

```

# Blender 2.80 (sub 74), Commit date: 2019-06-15 22:35, Hash 87de71a8aaa0

bpy.data.window_managers["WinMan"].addon_search = "cyc"  # Property

# backtrace

./blender(BLI_system_backtrace+0x1d) [0x138384d]

./blender() [0x116a039]

/lib64/libc.so.6(+0x391b0) [0x7fc1363aa1b0]

/usr/lib/llvm/8/lib64/libLLVMSupport.so.8(_ZN4llvm13StringMapImpl15LookupBucketF

orENS_9StringRefE+0x17) [0x7fc128e72f77]

/usr/lib/llvm/8/lib64/libLLVMSupport.so.8(_ZN4llvm2cl6Option9setArgStrENS_9Strin

gRefE+0x115) [0x7fc128e062f5]

/usr/lib/llvm/roc/lib/libLLVMSupport.so.10roc(+0x59ee1) [0x7fc005d62ee1]

/lib64/ld-linux-x86-64.so.2(+0xf89a) [0x7fc136da589a]

/lib64/ld-linux-x86-64.so.2(+0xf9b1) [0x7fc136da59b1]

/lib64/ld-linux-x86-64.so.2(+0x13993) [0x7fc136da9993]

/lib64/libc.so.6(_dl_catch_exception+0x71) [0x7fc1364b8291]

/lib64/ld-linux-x86-64.so.2(+0x1325a) [0x7fc136da925a]

/lib64/libdl.so.2(+0x12cc) [0x7fc1365462cc]

/lib64/libc.so.6(_dl_catch_exception+0x71) [0x7fc1364b8291]

/lib64/libc.so.6(_dl_catch_error+0x2f) [0x7fc1364b832f]

/lib64/libdl.so.2(+0x1b4d) [0x7fc136546b4d]

/lib64/libdl.so.2(dlopen+0x46) [0x7fc136546376]

/usr/lib64/libamdocl64.so(+0x8c3c7) [0x7fc11385c3c7]

/usr/lib64/libamdocl64.so(+0x9d01d) [0x7fc11386d01d]

/lib64/libpthread.so.0(+0x10f97) [0x7fc136d48f97]

/usr/lib64/libamdocl64.so(+0x5ec5b) [0x7fc11382ec5b]

/usr/lib64/libamdocl64.so(+0xa6e13) [0x7fc113876e13]

/usr/lib64/libamdocl64.so(+0xa8123) [0x7fc113878123]

/usr/lib64/libamdocl64.so(+0x5ea31) [0x7fc11382ea31]

/usr/lib64/libamdocl64.so(+0x8179e) [0x7fc11385179e]

/usr/lib64/libamdocl64.so(+0xda3d5) [0x7fc1138aa3d5]

/lib64/libpthread.so.0(+0x10f97) [0x7fc136d48f97]

/usr/lib64/libamdocl64.so(clIcdGetPlatformIDsKHR+0xac) [0x7fc1138aa4ec]

/usr/lib64/OpenCL/vendors/ocl-icd/libOpenCL.so(+0x6456) [0x7fc12a37e456]

/lib64/libpthread.so.0(+0x10f97) [0x7fc136d48f97]

/usr/lib64/OpenCL/vendors/ocl-icd/libOpenCL.so(+0x5470) [0x7fc12a37d470]

/usr/lib64/OpenCL/vendors/ocl-icd/libOpenCL.so(clGetPlatformIDs+0xf4) [0x7fc12a3

7fc84]

./blender(_ZN3ccl18device_opencl_infoERNS_6vectorINS_10DeviceInfoENS_16GuardedAl

locatorIS1_EEEE+0x36) [0x32406d6]

./blender(_ZN3ccl6Device17available_devicesEj+0x766) [0x3208ef6]

./blender() [0x1561460]

./blender(_PyMethodDef_RawFastCallKeywords+0x2b9) [0x176c239]

./blender(_PyCFunction_FastCallKeywords+0x25) [0x176c2f5]

./blender(_PyEval_EvalFrameDefault+0x8d5f) [0x11660df]

./blender(_PyEval_EvalCodeWithName+0xae3) [0x1820603]

./blender(_PyFunction_FastCallKeywords+0xa6) [0x176bd76]

./blender(_PyEval_EvalFrameDefault+0x79c3) [0x1164d43]

./blender() [0x115c2d0]

./blender(_PyEval_EvalFrameDefault+0x79c3) [0x1164d43]

./blender() [0x115c2d0]

./blender(_PyEval_EvalFrameDefault+0x7a81) [0x1164e01]

./blender(_PyEval_EvalCodeWithName+0xae3) [0x1820603]

./blender(_PyFunction_FastCallDict+0xb7) [0x176bac7]

./blender() [0x13ffe2e]

./blender() [0x150c07f]

./blender() [0x2d6aa83]

./blender(ED_region_panels_layout_ex+0x326) [0x2d6cfe6]

./blender(ED_region_panels_ex+0x2d) [0x2d6d4cd]

./blender(ED_region_do_draw+0x851) [0x2d71051]

./blender(wm_draw_update+0x462) [0x15307c2]

./blender(WM_main+0x30) [0x152df80]

./blender(main+0x30a) [0x10d037a]

/lib64/libc.so.6(__libc_start_main+0xeb) [0x7fc136394f1b]

./blender(_start+0x2a) [0x116694a]

```

(https://rocm.github.io/ROCmInstall.html)

----------

## toralf

Moin, eine kleine Bitte: Nutze doch bitte die Tgas "<code>" und "/<code>" für die Systemausgaben.

Vielen Dank.

----------

## alfcyber

Danke für den Hinweis, ich vergaß.

Nach nun weiteren Tests mit einem kleineren opencl Programm ist zwar ein kompilieren von kleinen Kernels auf der CPU sowie auf der GPU möglich,

die CPU ist aber deutlich schneller (u. manchmal ein single thread sogar viel schneller) als opencl. 

Ein Indiz, dass es nicht richtig funktioniert, um so ärgerlicher da wie ich gefunden habe ein Blogger behauptet, eben auf einer gleichen cpu (aber einem anderen Laptop),

dass OpenCL mit Blender (aber sehr langsam) funktioniert:

https://blog.thefinalzone.net/2018/12/running-rocm-on-amd-raven-ridge-mobile.html

----------

## saitam

@alfcyber: Ich habe mit Freuden festgestellt, dass Du das gleiche Lenovo Modell wie ich besitzt und ebenfalls versuchst, ROCm ans Laufen zu bringen. Ich versuche dieses unter Solus. Ich habe mir die Tage das letzte BIOS update installiert. Wenn ich nun Dein dmsg output mit meinem vergeiche, scheint noch ein Kernel Parameter nicht richtig gesetzt zu sein. Meine Ausgabe

```

dmesg | grep CRAT

[    0.005256] ACPI: CRAT 0x000000009CFF3000 000810 (v01 LENOVO TP-R0U   00001560 PTEC 00000002)

[   85.031693] Parsing CRAT table with 1 nodes

```

und hier vor allem die Fehlermeldung:

```

dmesg | grep IOMMU

[    1.375699] pci 0000:00:00.2: AMD-Vi: Unable to read/write to IOMMU perf counter.

[    1.377241] pci 0000:00:00.2: AMD-Vi: Found IOMMU cap 0x40

[   84.957443] AMD-Vi: AMD IOMMUv2 driver by Joerg Roedel <jroedel@suse.de>

```

Kernel config:

```

less kernel_config.txt | grep -E 'USERPTR|ZONE_DEV|HMM|NUMA' 

CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y

CONFIG_NUMA_BALANCING=y

CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y

# CONFIG_X86_NUMACHIP is not set

CONFIG_NUMA=y

CONFIG_AMD_NUMA=y

CONFIG_X86_64_ACPI_NUMA=y

# CONFIG_NUMA_EMU is not set

CONFIG_USE_PERCPU_NUMA_NODE_ID=y

CONFIG_ACPI_NUMA=y

# CONFIG_DRM_RADEON_USERPTR is not set

CONFIG_DRM_AMDGPU_USERPTR=y

CONFIG_DRM_I915_USERPTR=y

```

Hast Du an dieser Stelle einen Tip für mich, wie ich den Fehler Unable to read/write to IOMMU perf counter. beheben kann ?

Vielen Dank.

----------

## alfcyber

Hallo, ist vllt etwas spät, aber mit folgender zusätzlicher Kernelconfig :

https://stackoverflow.com/questions/6341540/how-to-read-extended-pcie-configuration-space-in-linux

(CONFIG_PCI_MMCONFIG=y)

ist bei mir der lästige Fehler im Kernel Log bezüglich iommu u. kfd verschwunden.

(Leider habe ich derzeit kein rocm installiert u. konnte bisher nicht testen, ob es nun einwandfrei funktioniert)

----------

