Skip to content

Commit

Permalink
Inverse Burrows-Wheeler transform.
Browse files Browse the repository at this point in the history
  • Loading branch information
IlyaGrebnov committed Jan 25, 2024
1 parent b76466a commit 8f78fe9
Show file tree
Hide file tree
Showing 6 changed files with 857 additions and 31 deletions.
3 changes: 2 additions & 1 deletion AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@
Leyuan Wang, Sean Baxter, John D. Owens, Yury Shukhrov,
Rory Mitchell, Jacopo Pantaleoni, Duane Merrill,
Georgy Evtushenko, Allison Vacanti, Robert Crovella,
Mark Harris, Vitaly Osipov.
Mark Harris, Vitaly Osipov, Andy Adinets, Elias Stehle,
Michael Maniscalco.
3 changes: 3 additions & 0 deletions CHANGES
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
Changes in 1.6.0 (January 24, 2024)
- Inverse Burrows-Wheeler transform.

Changes in 1.5.0 (March 24, 2023)
- Reduced memory usage and improved performance.

Expand Down
20 changes: 17 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# libcubwt
# libcubwt

The libcubwt is a library for fast (see [Benchmarks](#benchmarks) below) GPU-based Burrows-Wheeler transform construction on the CUDA platform using prefix doubling + Skew/DC3 approach as described in the following papers:
The libcubwt is a library for fast (see [Benchmarks](#benchmarks) below) GPU-based Burrows-Wheeler transform construction and inversion on the CUDA platform using prefix doubling + Skew/DC3 approach as described in the following papers:
* Vitaly Osipov, *Parallel Suffix Array Construction for Shared Memory Architectures*, 2012
* Leyuan Wang, Sean Baxter, and John D. Owens *Fast Parallel Suffix Array on the GPU*, 2015
* Florian Büren, Daniel Jünger, Robin Kobus, Christian Hundt, Bertil Schmidt *Suffix Array Construction on Multi-GPU Systems*, 2019

Copyright (c) 2022-2023 Ilya Grebnov <[email protected]>
Copyright (c) 2022-2024 Ilya Grebnov <[email protected]>

## Introduction
The libcubwt provides simple API to construct Burrows-Wheeler transform from a given string over constant-size alphabet using 20.5n bytes of GPU memory.
Expand All @@ -20,6 +20,8 @@ The libcubwt provides simple API to construct Burrows-Wheeler transform from a g
The libcubwt is released under the [Apache License Version 2.0](LICENSE "Apache license") and is considered suitable for production use. However, no warranty or fitness for a particular purpose is expressed or implied.

## Changes
* January 24, 2024 (1.6.0)
* Inverse Burrows-Wheeler transform.
* March 24, 2023 (1.5.0)
* Reduced memory usage and improved performance.
* February 10, 2023 (1.0.0)
Expand Down Expand Up @@ -50,6 +52,18 @@ The libcubwt is released under the [Apache License Version 2.0](LICENSE "Apache
* @return The primary index if no error occurred, libcubwt error code otherwise.
*/
int64_t libcubwt_bwt(void * device_storage, const uint8_t * T, uint8_t * L, int64_t n);

/**
* Reconstructs the original string from a given burrows-wheeler transformed string (BWT) with primary index.
* @param device_storage The previously allocated storage on the CUDA device.
* @param T [0..n-1] The input string.
* @param U [0..n-1] The output string (can be T).
* @param n The length of the given string.
* @param freq [0..255] The input symbol frequency table (can be NULL).
* @param i The primary index.
* @return LIBCUBWT_NO_ERROR if no error occurred, libcubwt error code otherwise.
*/
int64_t libcubwt_unbwt(void * device_storage, const uint8_t * T, uint8_t * U, int64_t n, const int32_t * freq, int32_t i);
```
---
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.5.0
1.6.0
Loading

0 comments on commit 8f78fe9

Please sign in to comment.