All Projects → SaschaWitt → Ips4o

SaschaWitt / Ips4o

Licence: bsd-2-clause
In-place Parallel Super Scalar Samplesort (IPS⁴o)

Projects that are alternatives of or similar to Ips4o

ips2ra
In-place Parallel Super Scalar Radix Sort (IPS²Ra)
Stars: ✭ 22 (-83.94%)
Mutual labels:  sorting, parallel
ultra-sort
DSL for SIMD Sorting on AVX2 & AVX512
Stars: ✭ 29 (-78.83%)
Mutual labels:  sorting, parallel
Sorty
Fast Concurrent / Parallel Sorting in Go
Stars: ✭ 74 (-45.99%)
Mutual labels:  parallel, sorting
Doazureparallel
A R package that allows users to submit parallel workloads in Azure
Stars: ✭ 102 (-25.55%)
Mutual labels:  parallel
Yabox
Yet another black-box optimization library for Python
Stars: ✭ 103 (-24.82%)
Mutual labels:  parallel
Bach
Compose your async functions with elegance.
Stars: ✭ 117 (-14.6%)
Mutual labels:  parallel
Rubico
[a]synchronous functional programming
Stars: ✭ 133 (-2.92%)
Mutual labels:  parallel
Root
The official repository for ROOT: analyzing, storing and visualizing big data, scientifically
Stars: ✭ 1,377 (+905.11%)
Mutual labels:  parallel
Core
parallel finite element unstructured meshes
Stars: ✭ 124 (-9.49%)
Mutual labels:  parallel
Mpm
CB-Geo High-Performance Material Point Method
Stars: ✭ 115 (-16.06%)
Mutual labels:  parallel
React Native Workers
Do heavy data process outside of your UI JS thread.
Stars: ✭ 114 (-16.79%)
Mutual labels:  parallel
Vue Table Dynamic
🎉 A dynamic table with sorting, filtering, editing, pagination, multiple select, etc.
Stars: ✭ 106 (-22.63%)
Mutual labels:  sorting
Redo
Smaller, easier, more powerful, and more reliable than make. An implementation of djb's redo.
Stars: ✭ 1,589 (+1059.85%)
Mutual labels:  parallel
Quadsort
Quadsort is a stable adaptive merge sort which is faster than quicksort.
Stars: ✭ 1,385 (+910.95%)
Mutual labels:  sorting
Threadsx.jl
Parallelized Base functions
Stars: ✭ 126 (-8.03%)
Mutual labels:  parallel
Parallel Process
🏃 Run multiple processes simultaneously
Stars: ✭ 102 (-25.55%)
Mutual labels:  parallel
Android Download Manager Pro
Android/Java download manager library help you to download files in parallel mechanism in some chunks.
Stars: ✭ 1,568 (+1044.53%)
Mutual labels:  parallel
Pandarallel
A simple and efficient tool to parallelize Pandas operations on all available CPUs
Stars: ✭ 1,887 (+1277.37%)
Mutual labels:  parallel
Index
Metarhia educational program index 📖
Stars: ✭ 2,045 (+1392.7%)
Mutual labels:  parallel
Razzle
✨ Create server-rendered universal JavaScript applications with no configuration
Stars: ✭ 10,547 (+7598.54%)
Mutual labels:  parallel

In-place Parallel Super Scalar Samplesort (IPS⁴o)

This is the implementation of the algorithm presented in the eponymous paper, which contains an in-depth description of its inner workings, as well as an extensive experimental performance evaluation. Here's the abstract:

We present a sorting algorithm that works in-place, executes in parallel, is cache-efficient, avoids branch-mispredictions, and performs work O(n log n) for arbitrary inputs with high probability. The main algorithmic contributions are new ways to make distribution-based algorithms in-place: On the practical side, by using coarse-grained block-based permutations, and on the theoretical side, we show how to eliminate the recursion stack. Extensive experiments show that our algorithm IPS⁴o scales well on a variety of multi-core machines. We outperform our closest in-place competitor by a factor of up to 3. Even as a sequential algorithm, we are up to 1.5 times faster than the closest sequential competitor, BlockQuicksort.

This repository is deprecated! The current version of IPS⁴o is published at https://github.com/ips4o/ips4o. You may also want to check out our prototypical implementation of In-place Parallel Super Scalar Radix Sort (IPS²Ra) at https://github.com/ips4o/ips2ra. IPS²Ra applies the in-place approach of IPS⁴o to radix sort. The new repositories support the CMake build system.

Usage

#include "ips4o.hpp"

// sort sequentially
ips4o::sort(begin, end[, comparator])

// sort in parallel (uses OpenMP if available, std::thread otherwise)
ips4o::parallel::sort(begin, end[, comparator])

Make sure to compile with C++14 support. Currently, the code does not compile on Windows.

For the parallel algorithm, you need to enable either OpenMP (-fopenmp) or C++ threads (e.g., -pthread). You also need a CPU that supports 16-byte compare-and-exchange instructions. If you get undefined references to __atomic_fetch_add_16, either set your CPU correctly (e.g., -march=native), enable the instructions explicitly (-mcx16), or try linking against GCC's libatomic (-latomic).

Licensing

IPS⁴o is free software provided under the BSD 2-Clause License described in the LICENSE file. If you use IPS⁴o in an academic setting please cite the eponymous paper using the BibTeX entry

@InProceedings{axtmann2017,
  author =	{Michael Axtmann and
                Sascha Witt and
                Daniel Ferizovic and
                Peter Sanders},
  title =	{{In-Place Parallel Super Scalar Samplesort (IPSSSSo)}},
  booktitle =	{25th Annual European Symposium on Algorithms (ESA 2017)},
  pages =	{9:1--9:14},
  series =	{Leibniz International Proceedings in Informatics (LIPIcs)},
  year =	{2017},
  volume =	{87},
  publisher =	{Schloss Dagstuhl--Leibniz-Zentrum fuer Informatik},
  doi =		{10.4230/LIPIcs.ESA.2017.9},
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].