Name: Anonymous 2012-11-08 11:36
Now that SPIR has been standardized for OpenCL, your goal is to create a high-performance Lisp-like language compiler specialized for stream-processing that targets the OpenCL stack. Think S-expression syntax with semantics compatible with OpenCL.
Some things to keep in mind:
• No recursion. Current GPU hardware can't support it.
• No garbage-collection, at least outside of your compiler, you can use GC inside for your lexer/parser/codegen if you want, but the final output must compile down to SPIR assembly and host language C code. Therefore, the language must be lexically scoped.
• No bignums/bigfloats. The language should expose access to all underlying fundamental OpenCL integer and floating point types, as well as all vector types and associated operations.
• Should expose access to OpenCL buffer/texture-map data types and operations, offering both manual memory management and automatic region-based allocation of these OpenCL objects. OpenCL buffers are arrays optimized for sequential access, and OpenCL texture maps are arrays optimized for random access and hardware filtering.
• Should build up a task dependency graph at compile-time and automatically insert synchronization barriers were required into the command buffer.
• Should be implemented as a library that can be easily embedded into any C/C++ program.
References:
• http://www.khronos.org/opencl/
• http://www.khronos.org/registry/cl/specs/spir_spec-1.0-provisional.pdf
• http://www.khronos.org/registry/cl/specs/opencl-1.2.pdf
Some things to keep in mind:
• No recursion. Current GPU hardware can't support it.
• No garbage-collection, at least outside of your compiler, you can use GC inside for your lexer/parser/codegen if you want, but the final output must compile down to SPIR assembly and host language C code. Therefore, the language must be lexically scoped.
• No bignums/bigfloats. The language should expose access to all underlying fundamental OpenCL integer and floating point types, as well as all vector types and associated operations.
• Should expose access to OpenCL buffer/texture-map data types and operations, offering both manual memory management and automatic region-based allocation of these OpenCL objects. OpenCL buffers are arrays optimized for sequential access, and OpenCL texture maps are arrays optimized for random access and hardware filtering.
• Should build up a task dependency graph at compile-time and automatically insert synchronization barriers were required into the command buffer.
• Should be implemented as a library that can be easily embedded into any C/C++ program.
References:
• http://www.khronos.org/opencl/
• http://www.khronos.org/registry/cl/specs/spir_spec-1.0-provisional.pdf
• http://www.khronos.org/registry/cl/specs/opencl-1.2.pdf