Recently I wrote a small simple ray-tracer using CPPAMP with reference in the smallpt.
On GPU, recursive is not allowed. At least this is what I see both in CUDA and CPPAMP, and in TRAX architecture. I assume OpenCL also has this restriction. So we have to convert the recursive path-tracing into iterative version.