Any tips on what to do when ioc32 and ioc64 die with an "internal error"?
This is what both the command line and VS2013 return when using the latest Intel OpenCL API release (126.96.36.1990):
ioc32 -cmd=build -input=abc.cl -device=gpu -bo="-cl-std=CL2.0 -cl-fast-relaxed-math -cl-no-signed-zeros -cl-mad-enable -cl-denorms-are-zero" Using build options: -cl-std=CL2.0 -cl-fast-relaxed-math -cl-no-signed-zeros -cl-mad-enable -cl-denorms-are-zero OpenCL Intel(R) Graphics device was found! Device name: Intel(R) Iris(TM) Pro Graphics 6200 Device version: OpenCL 2.0 Device vendor: Intel(R) Corporation Device profile: FULL_PROFILE fcl build 1 succeeded. fcl build 2 succeeded. Error: internal error. Build failed!
After some debugging... it's even more confounding.
The .cl file contains 32 kernels and ioc32 merrily builds the first 6 with the rest commented out.
IOC also builds all kernels individually with the remaining commented out.
Finally, splitting the original .cl file into 32 individual files also results in all .cl programs successfully building.
Is there some sort of size limitation in IOC? The attached PNG shows the compiled kernel sizes.
It's bugs like this that just kill productivity.
And.... I found it.
I had a pointer hiding in a struct and after hoisting it to the kernel functions argument list the 32 kernel CL program compiles just fine.
Apparently that mistake breaks the compiler.