Unable to create openCL renderer for interactive rendering

Issue #13 resolved
Former user created an issue

Hello,

When I open Fractorium by default it is set to use the CPU for interactive rendering, when I open options and select openCL, selecting both or only one of my GTX 970 cards when I press ok I get an error about being unable to create the renderer, and then reverts back to CPU rendering.

Specific error message in the rendering logs is "EmberCLns::RendererCL<float,float>::Init: failed to init all devices and platforms.

Error initializing OpenCL renderer, using CPU renderer instead."

Oddly enough when I perform final rendering I am able to use the openCL renderer without issue, using one or both cards at the same time.

Fresh installs, deleting .ini files and clearing registry settings seem to have no effect on my issue.

Having looked through your source code I think perhaps there's an issue related to the fact that my system has a Xeon E3 processor with no onboard graphics, meaning the only OpenCL targets are dedicated GPUs. Other systems where I don't have this problem have onboard graphics in addition to dedicated. Obviously if this issue is related to my hardware I understand if you can't focus on it, but I'd really prefer to not have to revert back to the now defunct Fractron 9000 for real time xform editing.

Thanks for all your hard work! I love the results I get, even if it takes me forever to create them!

Comments (10)

  1. Matt Feemster repo owner

    Hi, I definitely don't want you feeling like your only resort is Fractron, which has long since been discontinued and is inferior in every way.

    Thankfully, Fractorium has been ran on a variety of systems, so I'm sure we can get it working on yours.

    When you are in the options dialog, not only do you have to select which GPU you want to use, but you must also select the "primary" one. This is the device that is connected to your display. If this is not done properly, then the symptoms you describe will happen every time.

    This is also inline with your observation that GPU rendering works fine in the final render dialog. This is because there is no visual output in that case so selecting a primary doesn't matter as much.

    So try going back to the options dialog, and select the GPU which is connected to your display as the primary one.

    For good measure, are you using a laptop or desktop? I've heard of some problems with laptops before.

  2. Isaac Lund

    Hello again, back with an account I should have created in the first place.

    This is a desktop. Based on what you suggested I tried every possible combination of primary and enabled GPU in the options dialogue. I would like to point out that each GPU has an identical name so if Fractorium doesn't populate the list in a specific order each time I have no way of knowing which I have selected. Unfortunately I never got anything to work. I also tried disabling SLI to no avail.

    What did work however was completely disabling my secondary GPU in device manager so that Fractorium only had one available GPU to choose from.

    I'd consider this workaround to be a "good enough" fix at this point as it allows me to work in real time(so excited) but obviously it's a tad bit annoying to have to go enable and disable hardware when switching between editing and batch rendering.

    If you'd like to consider this resolved I'd say that's fair but ask that you consider making a note somewhere in the documentation warning people about a potential issue possibly related to using identical GPUs in systems without onboard graphics.

    If you'd like to keep working this issue with me and see if we can figure out why only having 2 identical GPUs seems to cause problems with creating the renderer I'd be happy to assist.

    Thanks again for all your help!

  3. Matt Feemster repo owner

    Hi Isaac, thanks for making an account. It helps me keep track of which users want what.

    The behavior you are describing sounds incredibly strange. I have tested multi-gpu setups before and they worked fine. However, they always had different gpu types. There is perhaps a bug when both are the same type, as in your case, but that seems really odd.

    One thing I will say is that SLI/Crossfire are not supported. Each device must be seen individually.

    Perhaps reboot after disabling SLI?

    Not having onboard graphics shouldn't matter. I've tested with and without, and as long as you don't select it for use, you will be fine.

    Can you please do me two favors to help diagnose.

    Post a screenshot of the options dialog, with the Use OpenCL checkbox checked.

    Second, go to the installation folder and run this:

    emberrender.exe --openclinfo

    and paste the output here.

    Hopefully we can solve this.

  4. Isaac Lund

    Hi, apologies for the delay, been rather busy.

    Just to be absolutely sure I disabled SLI completely and rebooted twice, making sure it stayed disabled both times and was unable to start the OpenCL renderer.

    Here is a screenshot of my options dialog as it appears when I have both GPUs enabled (it will fail to create the renderer if I click OK, regardless of the number selected and which one is chosen as primary):

    fractorium_options.PNG

    Here is the output from --openclinfo:

    OpenCL Info:
    Platform 0: NVIDIA Corporation  NVIDIA CUDA  OpenCL 1.2 CUDA 9.1.84
    Device 0: NVIDIA Corporation  GeForce GTX 970
    CL_DEVICE_OPENCL_C_VERSION: OpenCL C 1.2
    CL_DEVICE_LOCAL_MEM_SIZE: 49,152
    CL_DEVICE_LOCAL_MEM_TYPE: 1
    CL_DEVICE_MAX_COMPUTE_UNITS: 13
    CL_DEVICE_MAX_READ_IMAGE_ARGS: 256
    CL_DEVICE_MAX_WRITE_IMAGE_ARGS: 16
    CL_DEVICE_MAX_MEM_ALLOC_SIZE: 1,073,741,824
    CL_DEVICE_ADDRESS_BITS: 64
    CL_DEVICE_GLOBAL_MEM_CACHE_TYPE: 2
    CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE: 128
    CL_DEVICE_GLOBAL_MEM_CACHE_SIZE: 212,992
    CL_DEVICE_GLOBAL_MEM_SIZE: 4,294,967,296
    CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE: 65,536
    CL_DEVICE_MAX_CONSTANT_ARGS: 9
    CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: 3
    CL_DEVICE_MAX_WORK_GROUP_SIZE: 1,024
    CL_DEVICE_MAX_WORK_ITEM_SIZES: 1,024, 1,024, 64
    
    Device 1: NVIDIA Corporation  GeForce GTX 970
    CL_DEVICE_OPENCL_C_VERSION: OpenCL C 1.2
    CL_DEVICE_LOCAL_MEM_SIZE: 49,152
    CL_DEVICE_LOCAL_MEM_TYPE: 1
    CL_DEVICE_MAX_COMPUTE_UNITS: 13
    CL_DEVICE_MAX_READ_IMAGE_ARGS: 256
    CL_DEVICE_MAX_WRITE_IMAGE_ARGS: 16
    CL_DEVICE_MAX_MEM_ALLOC_SIZE: 1,073,741,824
    CL_DEVICE_ADDRESS_BITS: 64
    CL_DEVICE_GLOBAL_MEM_CACHE_TYPE: 2
    CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE: 128
    CL_DEVICE_GLOBAL_MEM_CACHE_SIZE: 212,992
    CL_DEVICE_GLOBAL_MEM_SIZE: 4,294,967,296
    CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE: 65,536
    CL_DEVICE_MAX_CONSTANT_ARGS: 9
    CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: 3
    CL_DEVICE_MAX_WORK_GROUP_SIZE: 1,024
    CL_DEVICE_MAX_WORK_ITEM_SIZES: 1,024, 1,024, 64
    
  5. Matt Feemster repo owner

    Everything looks normal, and I've tested dual gpu setups before and they were fine, so this is extremely frustrating. But I really want to fix it.

    So let's recap what works. With SLI disabled:

    One GPU as primary. Can you tell me which one is the primary?

    Two GPUs does not work, no matter which you select as the primary?

    Can you please try setting the OpenCL Filtering option back to Log Scale (TBH, full DE was sort of just something I tried for engineering interest, it's not that useful).

    Also, I assume you have a somewhat reasonable image size in the main window? Not something insane like 20k x 20k? You can sync to the window size by double clicking each of the width and height spinners in the flame tab.

  6. Isaac Lund

    Sure thing.

    Starting from the top: I assume that the top GPU shown is the primary. My primary GPU is in the first PCIe slot so windows lists it first, in almost every application they are shown exactly the same (both GPUs are identical) Windows shows them as follows:

    doublegpu.PNG

    For all of these tests I first disabled SLI and rebooted twice making sure that SLI was still disabled both times. I rendered/attempted to render a basic flame containing only a single linear variation at a resolution of 2000 x 1000

    Options are set as follows:

    fractorium_options.PNG

    I have tried for the GPU selection all of the following options:

    Top GPU enabled and set as primary, bottom GPU disabled = Failure to create renderer

    Bottom GPU enabled and set as primary, top GPU disabled = Failure to create renderer

    Top and bottom GPU enabled, top set as primary = Failure to create renderer

    Top and bottom GPU enabled, bottom set as primary = Failure to create renderer

    If however I use the final render dialogue I can select any of the above mentioned combinations and render an image just fine. The problem only occurs with OpenCL for preview rendering.

    If I go into device manager and disable my secondary GPU so that only one GPU appears in the options dialogue I am able to use OpenCL for previewing and rendering without issue. Here are screenshots of that setup:

    singlegpu.PNG

    fractorium_options_single.PNG

    Let me know if there are any other questions or anything you'd like to try, I'm more than happy to help.

  7. Matt Feemster repo owner

    Thank you for this information. I am looking through the device creation code and am seeing some things that look suspicious. Which is odd because I swore up and down years ago that this was rock solid (since it worked perfectly on every configuration I tried). Alas, there is obviously something wrong.

    But in order to do test this, I will need your help. I cannot use my own machine since my hardware seems to work fine.

    Would you be willing to email me at matt.feemster@gmail.com

    I can get you test builds. That's normally how I've done it with users during this effort over the past several years.

  8. Isaac Lund

    That's what I figured you'd like to do. I'd be more than happy to run them. I'll send you an email.

  9. Matt Feemster repo owner

    We've coordinated via email and fixed this with a workaround that uses OpenCL but without sharing a texture with OpenGL. Marking as closed.

  10. Log in to comment