Students are strongly encouraged to form groups of two (or even three) because group projects are much more likely to work out well and complete on time.

See also the Check list for projects.

**Logical constraints on investments**The compliance module of Simcorp's Dimension software allows an investment manager to describe constraints on investment portfolios; for instance that at most half the investment must be unlisted shares. These constraints are input through a user interface. The purpose of this project is design a domain-specific language that can express these constraints, including concrete and abstract syntax, lexer, parser, prettyprinter, and an informal or formal description of the language semantics. Among relevant extensions one can mention a constraint evaluator (interpreter), constraint optimizer, constraint compiler (eg compilation to C# expression trees), and more. This project is in collaboration with Simcorp, a worldwide supplier of software for investment management. It has 1250 employees and international head quarters just a short walk from ITU.**Modern collection library C6 for .NET:**Extend and complete the C6 collection library, a successor for the C5 collection classes; a project started by Mikkel Riise Lund (here is a link to Mikkel's thesis report). This project involves library design, algorithm and data structure implementation, Code Contracts (design by contract), extensive unit tests, and high-quality documention.**Design, implement and test concurrent versions**of the C5 collection classes for .NET**Parallel programming projects**related to the Popular Parallel Programming (P3) research project:- Static dataflow partitioning algorithms
- Dynamic scheduling algorithms on .NET
- Using vector (SSE, AVX) .NET intrinsics for spreadsheets
- Supercomputing with Excel and .NET

**Testing and coverage analysis of concurrent software**using for instance Java Pathfinder, Microsoft CHESS, Findbugs, ThreadSafe and similar tools.**Spreadsheet with interval arithmetics**based on our Funcalc spreadsheet implementation (in C#), where interval arithmetics can be used to give guarantees on the accuracy of a computed result. One can extend the project with autodifferentiation of spreadsheet functions, and interval-based search procedures, equation solving and more. A relevant text is Tucker: Validated numerics, Princeton University Press 2010.**Type system for sheet-defined functions in spreadsheets**. The goal of this project is to define and implement a type system for sheet-defined functions as implemented in Funcalc. Funcalc is described in the book Sestoft: Spreadsheet Implementation Technology, MIT Press 2014. The purpose is to improve both safety and performance of sheet-defined functions, by avoiding the overhead of boxing values at function calls. Some promising work in this direction was done by Poul Broennum in a previous project.**Multicore programming via dataflow computing**Implement a version of the Sisal dataflow language that takes good advantage of multicore shared-memory machines, through the use of high-level intermediate languages such as Java or C#, their libraries, and their runtime platforms (JVM or .NET).**Computations on GPGPUs (graphics cards)**Modern graphics cards are ultrafast computers, also called GPGPUs (general-purpose graphics processing units). They can perform certains computations 10 to 300 times faster than a typical CPU. Programming them requires special techniques and libraries (Nvidia CUDA, OpenCL, or similar). In this project, you must implement some numeric computations, typically linear algebra, measure their performance, and tune them for optimal speed.**Parallelization of spreadsheet computations**Investigate parallelization of heavy spreadsheet computations, such as scientific or financial simulations. In particular, exploit multicore servers through the .NET 4.0 Task Parallel Library and the spreadsheet implementation described in Sestoft: Spreadsheet Implementation Technology, MIT Press 2014. This can be done on a scale from simple-minded (one task "future" per cell that needs to be computed) to very sophisticated (use the support graph structure in Sestoft: Spreadsheet Implementation Technology, MIT Press 2014, to statically parallelize independent computations.

An alternative is to use general-purpose graphics processors (GPGPU). One may use Nvidia CUDA, OpenCL, the Accelerator v2 framework from Microsoft Research, GPU.NET or similar. In any case, GPGPU-based parallel programming has recently become far more practical thanks to much improved libraries.**Generation of specialized collection libraries**The C5 generic collection library is a comprehensive library for C#/.Net 2.0 that provides very rich functionality such as sublist views, update events, hash-indexed lists, persistent trees, cached hashcodes and much more. One drawback of this rich functionality is that user programs pay (in terms of memory requirements) also for the advanced features that they do not use. The purpose of this project is to investigate the automatic generation/selection of only the relevant components (classes, methods and fields) for any particular use of the library, to minimize memory consumption and make the library as fast as possible.**Applications of run-time code generation in Java or C#.**The Java or JVM platform from Sun Microsystems/Oracle and the C# or Common Language Runtime/.Net platform from Microsoft provide good support for generation and fast execution of bytecode by a running program. This opens new implementation possibilities for serialization/deserialization, communication protocols, encryption, image transformation and image analysis algorithms.

Peter Sestoft (sestoft@itu.dk) Last update 2018-02-06