Skip to content

tarsa/SortAlgoBox

Repository files navigation

Sorting Algorithms Toolbox

Project goal:

  • provide a foundation for easy creation of new sorting algorithms

Implemented features:

  • executing sorting algorithms written in Java, Scala, OpenCL (on both CPU and GPGPU) and C++
  • printing (to standard output) and graphing (using ScalaFX) benchmark results
  • generation of CMake projects for native C++ sorts
  • portable PRNG implementation (Mwc64x) in Scala, OpenCL (both CPU and GPGPU) and C++

Implemented sorting algorithms:

  • wrappers for standard Java sorts: Arrays.sort and Arrays.parallelSort
  • Scala sorts: Bitonic Sort, Bubble Sort, Heap Sort, Insertion Sort, Merge Sort, Quick Sort, Radix Sort, Selection Sort, Shell Sort
  • OpenCL sorts for CPU: Bitonic Sort, Bubble Sort, Heap Sort, Insertion Sort, Merge Sort, Quick Sort, Radix Sort, Selection Sort, Shell Sort
  • OpenCL Bitonic Sort for GPGPU
  • native C++ sorts: Bubble Sort, wrapper for std::sort, 25 variants of Heap Sort, Quick Sort

Things to do after project checkout:

  • download Typesafe Activator or SBT and make it possible to invoke them from main project directory (e.g. by copying "activator", "activator.bat" and/ or "activator-launch-1.2.10.jar" into main project directory)
  • download and install OpenCL driver
  • create link to libOpenCL.so in main directory if needed, for example using "ln -s /usr/lib/libOpenCL.so.1 libOpenCL.so
  • run tests using "./activator test" or "sbt test"

Current basic goals:

  • applying Clean Code principles, making code well tested and testable
  • lots of sorting algorithms covered by elegant Scala implementations
  • lots (but maybe less) of sorting algorithms covered by performance optimized OpenCL implementations
  • thorough tests for Scala implementations
  • tests that check whether Scala and OpenCL implementations behave identically by checking if they do comparisons and swaps in the same order
  • making parallel performance optimized OpenCL implementations
  • making a benchmark suite that measures OpenCL implementations performance and sorting algorithms from Java standard libraries
  • make GPGPU implementations of (some) sorting algorithms

Current bonus goals:

  • making visualization of sorting in ScalaFX (JavaFX wrapper)
  • making performance optimized Scala or Java versions of sorting algorithms

Suggestions welcome.

About

Sorting Algorithms Toolbox

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published