A collection of Agorithms in topics as diverse as computational geometry, scientific computing, quantitative finance, physics simulations, statistics, bioinformatics, DSP, EDA etc.
- Learning Practical (sort of) implementation of algorithms and data structures in C/C++.
- Complexity Analysis (cache, time and space) of algorithms.
- Benchmarking, Energy and power analyses of applications.
- Act as a testbed for the following 4.1 Kernel/Application benchmarking. 4.2 Inspect code generation and assembly code quality 4.3 Use of tools like gdb/valgrind/PIN.
- Not meant to be a production codebase. So dont expect rigorous software development techniques to be applied consistently.
- The level of abstraction is resticted to C/C++, any higher level programming abstraction are to be avoided. The basic objective to understand how programs behave under the hood. process.
- C/C++ programming in the UNIX environment.
- C/C++ based parallel programming frameworks and libraries (pthreads, openMP, Intel TBB and cilk)
- Learn task and data parallelism and their implementation using thread and SIMD instructions. Try to understand the compiler optimizations (IR level and below) and code generation process.
- Dynamic analyses like gdb/valgrind/PIN.
- Build tools like GNUMake/CMake.
- Computer System Security concepts
- Check C++ STL implementation from scratch stl-from-scatch
- Also check the implementation of Discrete Event Simulators in C++ (Book by James Nutaro). In particular gem5 for computer systems. Also check Sniper simulator.
- Use GSL for mathematical functions.
- Use Boost.Graph for graph algorithms in C/C++.
- Use srsLTE for SDR for 3GPP based cellular communication.
- Use GNURadio for implementation of DSP kernels and (simulink-like) interfaces for creating Radio Systems. Volk provides SIMD implementation for many of the core DSP functions.
- Use LLVM for program analyses/compilation/code generation.