aparapi icon indicating copy to clipboard operation
aparapi copied to clipboard

Scala Kernels can't handle branching

Open yuvaldeg opened this issue 5 years ago • 1 comments

It seems like any code resulting in branching (if, for, while, etc...) will fail to generate. If I avoid any branches, everything works completely fine and runs on my Mac's Radeon GPU.

Consider this simple example:

  @Test
  def failingCodeGen2(): Unit = {
    val size: Int = 500000
    val a: Array[Int] = (2 until size + 2).toArray

    val kernel = new Kernel() {
      override def run() {
        val gid = getGlobalId()
        val num = a(gid)
        var test = 1
        if (num % 2 == 0) {
          test = 2
        }
      }
    }
    kernel.execute(size)
    assert(kernel.getExecutionMode == EXECUTION_MODE.GPU)
  }

This code fails with:

com.aparapi.internal.exception.CodeGenException: goto -> 0026
	at com.aparapi.internal.writer.BlockWriter.writeInstruction(BlockWriter.java:751)
	at com.aparapi.internal.writer.KernelWriter.writeInstruction(KernelWriter.java:780)
	at com.aparapi.internal.writer.BlockWriter.writeSequence(BlockWriter.java:299)
	at com.aparapi.internal.writer.BlockWriter.writeBlock(BlockWriter.java:323)
	at com.aparapi.internal.writer.BlockWriter.writeMethodBody(BlockWriter.java:873)
	at com.aparapi.internal.writer.KernelWriter.write(KernelWriter.java:738)
	at com.aparapi.internal.writer.KernelWriter.writeToString(KernelWriter.java:792)
	at com.aparapi.internal.kernel.KernelRunner.executeInternalInner(KernelRunner.java:1535)
	at com.aparapi.internal.kernel.KernelRunner.executeInternalOuter(KernelRunner.java:1383)
	at com.aparapi.internal.kernel.KernelRunner.execute(KernelRunner.java:1374)
	at com.aparapi.Kernel.execute(Kernel.java:2897)
	at com.aparapi.Kernel.execute(Kernel.java:2854)
	at com.aparapi.Kernel.execute(Kernel.java:2829)
...

yuvaldeg avatar Jan 27 '20 19:01 yuvaldeg

Not all code structures are supported and scala is a bit less mature than java. Added as a to-do feature to look into

freemo avatar Jan 29 '20 11:01 freemo