clGetDeviceIDs query fails badly

Use this forum for general user support and related questions.
Forum rules
Please upload a testscene that allows developers to reproduce the problem, and attach some images.
Post Reply
TryToRemember
Posts: 10
Joined: Tue Jul 03, 2018 3:35 am

clGetDeviceIDs query fails badly

Post by TryToRemember »

Hey Lux'ers. An old renderer getting back into 3D! Funny how the universe works.

If this warrants a bugtracker entry and isn't a simple fix for just me, I apologize.
It seems like such a small thing to file a bug report for...

Anyway, can't use the BlendLuxCore v2.0 package. Won't work at all.
Fails with 'ERROR: clGetDeviceIDs'

I know this has come up in at least one other thread before... yes I have installed - and working - both the Intel and NVIDIA CUDA/OpenCL drivers in linux. It works fine in blender*, I can pick between them for cycles.

All the [Exporter] [SDL] and [LuxCore] entries seem normal, then...

Code: Select all

...
[LuxRays][275.610] OpenCL Platform 0: The pocl project
[LuxRays][275.610] OpenCL Platform 1: NVIDIA Corporation
[LuxRays][275.610] OpenCL Platform 2: Mesa
[LuxRays][275.610] OpenCL Platform 3: Intel (R) Corporation
Traceback (most recent call last):
  File "/home/trytoremember/.config/blender/2.79/scripts/addons/BlendLuxCore/engine/__init__.py", line 36, in render_final
    final.render(self, scene)
  File "/home/trytoremember/.config/blender/2.79/scripts/addons/BlendLuxCore/engine/final.py", line 36, in render
    _render_layer(engine, scene)
  File "/home/trytoremember/.config/blender/2.79/scripts/addons/BlendLuxCore/engine/final.py", line 48, in _render_layer
    engine.session = engine.exporter.create_session(engine=engine)
  File "/home/trytoremember/.config/blender/2.79/scripts/addons/BlendLuxCore/export/__init__.py", line 169, in create_session
    session = pyluxcore.RenderSession(renderconfig)
RuntimeError: clGetDeviceIDs
ERROR: clGetDeviceIDs
Error: clGetDeviceIDs
Likewise, if I run 'clinfo' it does show the same 4 OpenCL devices:

Code: Select all

# clinfo

Number of platforms                               4
  Platform Name                                   Portable Computing Language
  Platform Vendor                                 The pocl project
  Platform Version                                OpenCL 1.2 pocl 1.1 RelWithDebInfo, LLVM 6.0.0, SPIR, SLEEF, DISTRO, POCL_DEBUG
  Platform Profile                                FULL_PROFILE
  Platform Extensions                             cl_khr_icd
  Platform Extensions function suffix             POCL

  Platform Name                                   Clover
  Platform Vendor                                 Mesa
  Platform Version                                OpenCL 1.1 Mesa 18.0.5
  Platform Profile                                FULL_PROFILE
  Platform Extensions                             cl_khr_icd
  Platform Extensions function suffix             MESA

  Platform Name                                   NVIDIA CUDA
  Platform Vendor                                 NVIDIA Corporation
  Platform Version                                OpenCL 1.2 CUDA 9.1.84
  Platform Profile                                FULL_PROFILE
  Platform Extensions                             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_fp64 cl_khr_byte_addressable_store cl_khr_icd cl_khr_gl_sharing cl_nv_compiler_options cl_nv_device_attribute_query cl_nv_pragma_unroll cl_nv_copy_opts cl_nv_create_buffer
  Platform Extensions function suffix             NV

  Platform Name                                   Intel(R) OpenCL
  Platform Vendor                                 Intel(R) Corporation
  Platform Version                                OpenCL 2.0 
  Platform Profile                                FULL_PROFILE
  Platform Extensions                             cl_khr_icd 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_byte_addressable_store cl_khr_depth_images cl_khr_3d_image_writes cl_intel_exec_by_local_thread cl_khr_spir cl_khr_fp64 cl_khr_image2d_from_buffer
  Platform Extensions function suffix             INTEL
This is on a 4.17 kernel using the Intel & nVidia vendor drivers. (Nouveau and Beignet were both taken outside, given cigarettes, and blindfolded...)

But wait, there's more!

With BlendLuxCore plugin installed but not working, it breaks all console rendering, regardless of engine! Come to think of it, I bet this part is considered worthy of a bugtracker entry, when parsing opencl abilities stops all command line rendering...

Code: Select all

$ ./blender -b -E BLENDER_RENDER -F EXR -o //example-blender-internal.exr ~/example.blend 
Read prefs: /home/trytoremember/.config/blender/2.79/config/userpref.blend
found bundled python: /home/trytoremember/Downloads/blender/blender-2.79b-linux-glibc219-x86_64/2.79/python
pyluxcore version: 2.0
Traceback (most recent call last):
  File "/home/trytoremember/.config/blender/2.79/scripts/addons/BlendLuxCore/handlers/__init__.py", line 24, in luxcore_load_post
    scene.luxcore.opencl.update_devices_if_necessary()
  File "/home/trytoremember/.config/blender/2.79/scripts/addons/BlendLuxCore/properties/opencl.py", line 39, in update_devices_if_necessary
    device_list = self.get_opencl_devices()
  File "/home/trytoremember/.config/blender/2.79/scripts/addons/BlendLuxCore/properties/opencl.py", line 74, in get_opencl_devices
    return pyluxcore.GetOpenCLDeviceList()
RuntimeError: clGetDeviceIDs
Read blend: /home/trytoremember/example.blend
Traceback (most recent call last):
  File "/home/trytoremember/.config/blender/2.79/scripts/addons/BlendLuxCore/handlers/__init__.py", line 24, in luxcore_load_post
    scene.luxcore.opencl.update_devices_if_necessary()
  File "/home/trytoremember/.config/blender/2.79/scripts/addons/BlendLuxCore/properties/opencl.py", line 39, in update_devices_if_necessary
    device_list = self.get_opencl_devices()
  File "/home/trytoremember/.config/blender/2.79/scripts/addons/BlendLuxCore/properties/opencl.py", line 74, in get_opencl_devices
    return pyluxcore.GetOpenCLDeviceList()
RuntimeError: clGetDeviceIDs

Blender quit

Thoughts?

I thought maybe it could it be the mesa or pocl entries since they don't list any extensions, but the script didn't include much in the way of checks; it doesn't seem like it would break, just maybe present something that wasn't a GPU?

Code: Select all

...
    def devices_to_selection_string(self):
        selection = ""

        for device in self.devices:
            enabled = device.enabled
            # Never use OpenCL CPU devices
            if device.type == "OPENCL_CPU":
                enabled = False
            selection += "1" if enabled else "0"

        return selection

    def get_opencl_devices(self):
        """
        Returns a list of tuples of the form:
        (name, type, compute_units, native_vector_width_float, max_memory, max_memory_alloc_size)
        where:
        - name is a name string, e.g. "Tahiti"
        - type is a string in ("ALL", "NATIVE_THREAD", "OPENCL_ALL", "OPENCL_DEFAULT",
          "OPENCL_CPU", "OPENCL_GPU", "OPENCL_UNKNOWN", "VIRTUAL", "UNKOWN")
          (most common is probably "OPENCL_CPU" and "OPENCL_GPU")
        """
        return pyluxcore.GetOpenCLDeviceList()
What about maybe the tuple structure? If it returns gibberish or a null for any of those, could that cause it?

Can I maybe force it (hardcode it) to use nVidia/Intel/both and just bypass the query routine?

It's frustrating that the query routine failing breaks CPU rendering too; the i7-8750H has six 2.2GHz cores which might not be a supercomputer but is faster than 99% of laptops. ~40% faster than the ubitiquous gamer laptop's i7-7700HQ and ~25% faster than a Ryzen 7 Pro 2700 8-core desktop.

Any help appreciated, and thanks for reading!
---

* [[ Once I figured out the Fedora 28 package maintainer didn't properly compile CUDA/OpenCL support. Wasted an hour trying to figure it out before grabbing the blender.org one, which worked effortlessly. According to the build log they set the flags wrong, even though CUDA & OpenCL libs are actually compiled in. I guess I should learn how to file 'proper' bug reports. sigh. ]]
User avatar
B.Y.O.B.
Developer
Developer
Posts: 4146
Joined: Mon Dec 04, 2017 10:08 pm
Location: Germany
Contact:

Re: clGetDeviceIDs query fails badly

Post by B.Y.O.B. »

TryToRemember wrote: Tue Jul 03, 2018 3:52 am It's frustrating that the query routine failing breaks CPU rendering too;
You could use the NoOpenCL version until the problem is solved.

Abou the errors: I doubt that they are caused by the Python code.
RuntimeError means that LuxCore has raised the exception.
TryToRemember
Posts: 10
Joined: Tue Jul 03, 2018 3:35 am

Re: clGetDeviceIDs query fails badly

Post by TryToRemember »

Oi. Damn. Never even occurred to me. Thanks... I will do just that.

Off to install and render something, anything! over the long American holiday weekend. :D

PS: I pulled source and am setting up a dev environment to play, and I noticed the end of the LinuxCompile / README states:

"If you have any questions and suggestions regarding these tools, leave
them in http://www.luxrender.net/forum/viewforum.php?f=22"

Don't know if it's common knowledge to any new people trying to create accounts at the old site,
since the registration process uses reCaptcha v1 that Google 'lovingly retired' 31-MAR-18.
User avatar
B.Y.O.B.
Developer
Developer
Posts: 4146
Joined: Mon Dec 04, 2017 10:08 pm
Location: Germany
Contact:

Re: clGetDeviceIDs query fails badly

Post by B.Y.O.B. »

TryToRemember wrote: Tue Jul 03, 2018 1:36 pm PS: I pulled source and am setting up a dev environment to play, and I noticed the end of the LinuxCompile / README states:

"If you have any questions and suggestions regarding these tools, leave
them in http://www.luxrender.net/forum/viewforum.php?f=22"
Thanks for the report, I updated the readme.
Post Reply