===== PULP LLVM Compiler ===== The PULP Project is a major effort aimed at developing a new ultra-low power clustered multi-core platform for smart cameras and other embedded applications requiring significant performance, based on open source hardware and software. The project is supported by a multi-national team from ETH Zurich, Universita' degli Studi di Bologna, Politecnico di Milano, Commissariat à l’énergie atomique et aux énergies alternatives (CEA). At Politecnico di Milano, we develop the LLVM compiler support (C/C++) for the PULP core (OpenRISC) as well as OpenCL support for the PULP platform. Within this framework, we have several opportunities for master thesis work. ===OpenCL Support for PULP=== The goal of this thesis is to extend and optimize OpenCRun, an open source OpenCL runtime developed at Politecnico di Milano, to allow the efficient execution of OpenCL programs on the PULP platform. OpenCRun is based on the LLVM compiler framework, and is currently available for x86 NUMA multicores as well as for the explicitly managed memory many-core platform P2012, providing a good starting point for the port to PULP. ===Clang/LLVM fractional arithmetics=== Fractional arithmetics are a key feature to support numerical applications such as image analysis in low-power devices where hardware floating point units would be impossible to support. LLVM and its frontend, Clang, do not currently support the Embedded C standard, ISO/IEC TR 18037, which provides fractional arithmetics. The goal of the thesis is to introduce this support, targeting in particular the OR10n OpenRISC processor, which is the processing element employed in PULP. ===A benchmark suite and library for embedded computer vision=== Current computer vision libraries such as OpenCV provide reference implementations of algorithms tuned to execution on desktop machines endowed with efficient floating point units. The goal of this thesis is to build a computer vision library and benchmark suite employing fractional arithmetics instead of floating point, and targeting low-power embedded platforms. ===Automated support for floating point to fixed point conversion=== The goal of this thesis is to develop a tool to help the programmer in developing efficient applications employing real numbers in embedded systems. Based on a static analysis of the code (already developed in part), and on user requirements on the data value ranges expressed as pragmas, the tool will adapt the original code to use the least expensive alternative to floating point arithmetics satisfying the user requirements on output precision. ===Contacts=== Giovanni Agosta Gerardo Pelosi Alessandro Barenghi Michele Scandale Michele Beretta (mail: name.surname@polimi.it)