Monday, April 15, 2013

Adding a generic, parallel array to a Delite DSL

During the past week Adam dusted off the Delite DSL for interval arithmetic that he has worked on previously and extended it with a generic data structure supporting a data-parallel map operation. The Delite framework supports this through its DeliteCollection and DeliteOpMap interface traits. Generic data types in Delite DSLs require some additional effort to develop, e.g. type information needs to be carried throughout the implementation to get around the erasure that eliminates type information in JVM bytecode. This is most conveniently done using Scala's type manifests.
Thanks to the kind people of the delite-devel mailing list Adam was also able to understand how to implement the supporting operations that need to be added so that Delite can use the custom data type that Adam implemented (a generic array). Something that is still under investigation is how to generate CUDA code from the example DSL program (an Interval Newton-based root finder), as the side-effectful functions that work well with the Scala code generator seem to cause problems with the CUDA generator.