beehive-lab / TornadoVM

TornadoVM: A practical and efficient heterogeneous programming framework for managed languages
https://www.tornadovm.org
Apache License 2.0
1.16k stars 109 forks source link

Error in FPGA emulation mode for TaskGraphs that contain multiple tasks #401

Closed stratika closed 2 months ago

stratika commented 2 months ago

Describe the bug

I tried to run on FPGA emulation mode with Intel oneAPI, the BlurFilter example that contains 3 tasks of the same kernel for computing the blur filter for red, green and blue. Here are all the steps:

Step 1: I installed TornadoVM and in particular the develop branch:

tornado --version
version=1.0.5-dev
branch=develop
commit=fcdebe5

Backends installed: 
     - opencl

Step 2: I have installed the Intel oneAPI Base Toolkit and set the variables. Then I was able to see the devices (including the FPGA):

tornado --devices
WARNING: Using incubator modules: jdk.incubator.vector

Number of Tornado drivers: 1
Driver: OpenCL
  Total number of OpenCL devices  : 4
  Tornado device=0:0  (DEFAULT)
    OPENCL --  [NVIDIA CUDA] -- NVIDIA RTX A2000 8GB Laptop GPU
        Global Memory Size: 7.8 GB
        Local Memory Size: 48.0 KB
        Workgroup Dimensions: 3
        Total Number of Block Threads: [1024]
        Max WorkGroup Configuration: [1024, 1024, 64]
        Device OpenCL C version: OpenCL C 1.2

  Tornado device=0:1
    OPENCL --  [Intel(R) OpenCL HD Graphics] -- Intel(R) Graphics [0x46a6]
        Global Memory Size: 24.8 GB
        Local Memory Size: 64.0 KB
        Workgroup Dimensions: 3
        Total Number of Block Threads: [512]
        Max WorkGroup Configuration: [512, 512, 512]
        Device OpenCL C version: OpenCL C 1.2

  Tornado device=0:2
    OPENCL --  [Intel(R) OpenCL] -- 12th Gen Intel(R) Core(TM) i9-12900H
        Global Memory Size: 31.0 GB
        Local Memory Size: 32.0 KB
        Workgroup Dimensions: 3
        Total Number of Block Threads: [8192]
        Max WorkGroup Configuration: [8192, 8192, 8192]
        Device OpenCL C version: OpenCL C 3.0

  Tornado device=0:3
    OPENCL --  [Intel(R) FPGA Emulation Platform for OpenCL(TM)] -- Intel(R) FPGA Emulation Device
        Global Memory Size: 31.0 GB
        Local Memory Size: 256.0 KB
        Workgroup Dimensions: 3
        Total Number of Block Threads: [67108864]
        Max WorkGroup Configuration: [67108864, 67108864, 67108864]
        Device OpenCL C version: OpenCL C 1.2

Step 3: Note that I had to put the configuration file for Intel oneAPI FPGA in the etc path:

cat etc/intel-oneapi-fpga.conf 
# Configure the fields for FPGA compilation & execution
# [device]
DEVICE_NAME = fpga_fast_emu
# [compiler]
COMPILER = aocl-ioc64
# [options]
DIRECTORY_BITSTREAM = fpga-source-comp/ # Specify the directory

Step 4: I tried to run the example, as follows:

tornado --debug --threadInfo --jvm="-Dblur.red.device=0:3 -Dblur.green.device=0:3 -Dblur.blue.device=0:3 -Dtornado.recover.bailout=False" -m tornado.examples/uk.ac.manchester.tornado.examples.compute.BlurFilter

And got the following error:

tornado --debug --threadInfo --jvm="-Dblur.red.device=0:3 -Dblur.green.device=0:3 -Dblur.blue.device=0:3 -Dtornado.recover.bailout=False" -m tornado.examples/uk.ac.manchester.tornado.examples.compute.BlurFilter
WARNING: Using incubator modules: jdk.incubator.vector
[DEBUG] JIT compilation for the FPGA
uk.ac.manchester.tornado.api.exceptions.TornadoBailoutRuntimeException: Code generator Failed
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.interpreter.TornadoVMInterpreter.executeLaunch(TornadoVMInterpreter.java:656)
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.interpreter.TornadoVMInterpreter.execute(TornadoVMInterpreter.java:338)
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.interpreter.TornadoVMInterpreter.execute(TornadoVMInterpreter.java:855)
    at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:1024)
    at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.TornadoVM.executeInterpreterSingleThreaded(TornadoVM.java:125)
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.TornadoVM.execute(TornadoVM.java:112)
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.tasks.TornadoTaskGraph.scheduleInner(TornadoTaskGraph.java:859)
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.tasks.TornadoTaskGraph.execute(TornadoTaskGraph.java:1366)
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.tasks.TornadoTaskGraph.execute(TornadoTaskGraph.java:1378)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.TaskGraph.execute(TaskGraph.java:777)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.ImmutableTaskGraph.execute(ImmutableTaskGraph.java:49)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.TornadoExecutionPlan$TornadoExecutor.lambda$execute$0(TornadoExecutionPlan.java:406)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.TornadoExecutionPlan$TornadoExecutor.execute(TornadoExecutionPlan.java:406)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.TornadoExecutionPlan.execute(TornadoExecutionPlan.java:117)
    at tornado.examples@1.0.5-dev/uk.ac.manchester.tornado.examples.compute.BlurFilter$BlurFilterImage.parallelCompute(BlurFilter.java:183)
    at tornado.examples@1.0.5-dev/uk.ac.manchester.tornado.examples.compute.BlurFilter$BlurFilterImage.paint(BlurFilter.java:251)
    at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:975)
    at java.desktop/javax.swing.JComponent.paint(JComponent.java:1137)
    at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:961)
    at java.desktop/javax.swing.JComponent.paint(JComponent.java:1137)
    at java.desktop/javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
    at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:961)
    at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5325)
    at java.desktop/javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:246)
    at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1336)
    at java.desktop/javax.swing.JComponent.paint(JComponent.java:1114)
    at java.desktop/java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
    at java.desktop/sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:75)
    at java.desktop/sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:112)
    at java.desktop/java.awt.Container.paint(Container.java:2005)
    at java.desktop/java.awt.Window.paint(Window.java:3959)
    at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:889)
    at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:861)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:861)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:834)
    at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:784)
    at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1897)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Exception in thread "AWT-EventQueue-0" uk.ac.manchester.tornado.api.exceptions.TornadoBailoutRuntimeException: Bailout is disabled. 
Reason: Code generator Failed
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.tasks.TornadoTaskGraph.scheduleInner(TornadoTaskGraph.java:869)
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.tasks.TornadoTaskGraph.execute(TornadoTaskGraph.java:1366)
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.tasks.TornadoTaskGraph.execute(TornadoTaskGraph.java:1378)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.TaskGraph.execute(TaskGraph.java:777)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.ImmutableTaskGraph.execute(ImmutableTaskGraph.java:49)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.TornadoExecutionPlan$TornadoExecutor.lambda$execute$0(TornadoExecutionPlan.java:406)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.TornadoExecutionPlan$TornadoExecutor.execute(TornadoExecutionPlan.java:406)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.TornadoExecutionPlan.execute(TornadoExecutionPlan.java:117)
    at tornado.examples@1.0.5-dev/uk.ac.manchester.tornado.examples.compute.BlurFilter$BlurFilterImage.parallelCompute(BlurFilter.java:183)
    at tornado.examples@1.0.5-dev/uk.ac.manchester.tornado.examples.compute.BlurFilter$BlurFilterImage.paint(BlurFilter.java:251)
    at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:975)
    at java.desktop/javax.swing.JComponent.paint(JComponent.java:1137)
    at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:961)
    at java.desktop/javax.swing.JComponent.paint(JComponent.java:1137)
    at java.desktop/javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
    at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:961)
    at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5325)
    at java.desktop/javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:246)
    at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1336)
    at java.desktop/javax.swing.JComponent.paint(JComponent.java:1114)
    at java.desktop/java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
    at java.desktop/sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:75)
    at java.desktop/sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:112)
    at java.desktop/java.awt.Container.paint(Container.java:2005)
    at java.desktop/java.awt.Window.paint(Window.java:3959)
    at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:889)
    at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:861)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:861)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:834)
    at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:784)
    at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1897)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
[DEBUG] JIT compilation for the FPGA
uk.ac.manchester.tornado.api.exceptions.TornadoBailoutRuntimeException: Code generator Failed
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.interpreter.TornadoVMInterpreter.executeLaunch(TornadoVMInterpreter.java:656)
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.interpreter.TornadoVMInterpreter.execute(TornadoVMInterpreter.java:338)
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.interpreter.TornadoVMInterpreter.execute(TornadoVMInterpreter.java:855)
    at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:1024)
    at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.TornadoVM.executeInterpreterSingleThreaded(TornadoVM.java:125)
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.TornadoVM.execute(TornadoVM.java:112)
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.tasks.TornadoTaskGraph.scheduleInner(TornadoTaskGraph.java:859)
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.tasks.TornadoTaskGraph.execute(TornadoTaskGraph.java:1366)
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.tasks.TornadoTaskGraph.execute(TornadoTaskGraph.java:1378)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.TaskGraph.execute(TaskGraph.java:777)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.ImmutableTaskGraph.execute(ImmutableTaskGraph.java:49)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.TornadoExecutionPlan$TornadoExecutor.lambda$execute$0(TornadoExecutionPlan.java:406)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.TornadoExecutionPlan$TornadoExecutor.execute(TornadoExecutionPlan.java:406)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.TornadoExecutionPlan.execute(TornadoExecutionPlan.java:117)
    at tornado.examples@1.0.5-dev/uk.ac.manchester.tornado.examples.compute.BlurFilter$BlurFilterImage.parallelCompute(BlurFilter.java:183)
    at tornado.examples@1.0.5-dev/uk.ac.manchester.tornado.examples.compute.BlurFilter$BlurFilterImage.paint(BlurFilter.java:251)
    at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:975)
    at java.desktop/javax.swing.JComponent.paint(JComponent.java:1137)
    at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:961)
    at java.desktop/javax.swing.JComponent.paint(JComponent.java:1137)
    at java.desktop/javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
    at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:961)
    at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5325)
    at java.desktop/javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:246)
    at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1336)
    at java.desktop/javax.swing.JComponent.paint(JComponent.java:1114)
    at java.desktop/java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
    at java.desktop/sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:75)
    at java.desktop/sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:112)
    at java.desktop/java.awt.Container.paint(Container.java:2005)
    at java.desktop/java.awt.Window.paint(Window.java:3959)
    at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:889)
    at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:861)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:861)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:834)
    at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:784)
    at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1897)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Exception in thread "AWT-EventQueue-0" uk.ac.manchester.tornado.api.exceptions.TornadoBailoutRuntimeException: Bailout is disabled. 
Reason: Code generator Failed
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.tasks.TornadoTaskGraph.scheduleInner(TornadoTaskGraph.java:869)
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.tasks.TornadoTaskGraph.execute(TornadoTaskGraph.java:1366)
    at tornado.runtime@1.0.5-dev/uk.ac.manchester.tornado.runtime.tasks.TornadoTaskGraph.execute(TornadoTaskGraph.java:1378)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.TaskGraph.execute(TaskGraph.java:777)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.ImmutableTaskGraph.execute(ImmutableTaskGraph.java:49)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.TornadoExecutionPlan$TornadoExecutor.lambda$execute$0(TornadoExecutionPlan.java:406)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.TornadoExecutionPlan$TornadoExecutor.execute(TornadoExecutionPlan.java:406)
    at tornado.api@1.0.5-dev/uk.ac.manchester.tornado.api.TornadoExecutionPlan.execute(TornadoExecutionPlan.java:117)
    at tornado.examples@1.0.5-dev/uk.ac.manchester.tornado.examples.compute.BlurFilter$BlurFilterImage.parallelCompute(BlurFilter.java:183)
    at tornado.examples@1.0.5-dev/uk.ac.manchester.tornado.examples.compute.BlurFilter$BlurFilterImage.paint(BlurFilter.java:251)
    at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:975)
    at java.desktop/javax.swing.JComponent.paint(JComponent.java:1137)
    at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:961)
    at java.desktop/javax.swing.JComponent.paint(JComponent.java:1137)
    at java.desktop/javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
    at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:961)
    at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5325)
    at java.desktop/javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:246)
    at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1336)
    at java.desktop/javax.swing.JComponent.paint(JComponent.java:1114)
    at java.desktop/java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
    at java.desktop/sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:75)
    at java.desktop/sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:112)
    at java.desktop/java.awt.Container.paint(Container.java:2005)
    at java.desktop/java.awt.Window.paint(Window.java:3959)
    at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:889)
    at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:861)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:861)
    at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:834)
    at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:784)
    at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1897)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

How To Reproduce

Follow the previous steps and run:

tornado --debug --threadInfo --jvm="-Dblur.red.device=0:3 -Dblur.green.device=0:3 -Dblur.blue.device=0:3 -Dtornado.recover.bailout=False" -m tornado.examples/uk.ac.manchester.tornado.examples.compute.BlurFilter

Expected behavior

The tasks should run on the emulation mode without any issue.

Computing system setup (please complete the following information):


stratika commented 2 months ago

I spotted the problem, it seems that there are two problems that result in erroneous execution:

[TornadoVM-OCL-JNI] ERROR : clEnqueueNDRangeKernel -> Returned: -54 Task info: blur.green Backend : OPENCL Device : Intel(R) FPGA Emulation Device CL_DEVICE_TYPE_ACCELERATOR (available) Dims : 2 Global work offset: [0, 0] Global work size : [448, 640] Local work size : [64, 1, 1] Number of workgroups : [7, 640]

[TornadoVM-OCL-JNI] ERROR : clEnqueueNDRangeKernel -> Returned: -54 Task info: blur.blue Backend : OPENCL Device : Intel(R) FPGA Emulation Device CL_DEVICE_TYPE_ACCELERATOR (available) Dims : 2 Global work offset: [0, 0] Global work size : [448, 640] Local work size : [64, 1, 1] Number of workgroups : [7, 640]

[TornadoVM-OCL-JNI] ERROR : clEnqueueNDRangeKernel -> Returned: -54



I will work on a fix.