Skip to content

Commit

Permalink
update readme for microarch binaries
Browse files Browse the repository at this point in the history
  • Loading branch information
ahbarnett committed Jan 14, 2022
1 parent 0723ad6 commit f935efa
Showing 1 changed file with 13 additions and 10 deletions.
23 changes: 13 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
[![codecov](https://codecov.io/gh/ludvigak/FINUFFT.jl/branch/master/graph/badge.svg?token=Tkx7kma18J)](https://codecov.io/gh/ludvigak/FINUFFT.jl)
[![](https://img.shields.io/badge/docs-latest-blue.svg)](https://ludvigak.github.io/FINUFFT.jl/latest/)

This is a full-featured Julia interface to [FINUFFT](https://github.com/flatironinstitute/finufft), which is a lightweight and fast nonuniform fast Fourier transform (NUFFT) library released by the Flatiron Institute. This interface stands at v3.0.0, and it supports FINUFFT version 2.0.3 and above (note that the interface version number is distinct from the version of the wrapped binary FINUFFT library).
This is a full-featured Julia interface to [FINUFFT](https://github.com/flatironinstitute/finufft), which is a lightweight and fast parallel nonuniform fast Fourier transform (NUFFT) library released by the Flatiron Institute. This interface stands at v3.0.0, and it uses FINUFFT version 2.0.4 (note that the interface version number is distinct from the version of the wrapped binary FINUFFT library).

## Installation

Expand All @@ -14,8 +14,9 @@ FINUFFT.jl requires Julia v1.3 or later, and has been tested up to v1.7.1. From
add FINUFFT
```

This installs the stable registered version and its dependencies, including our generic multi-platform precompiled
binaries [finufft_jll.jl](https://github.com/JuliaBinaryWrappers/finufft_jll.jl). See below for how to get more performance via locally-compiled binaries.
This installs the stable registered version and its dependencies, including our multi-platform precompiled
binaries [finufft_jll.jl](https://github.com/JuliaBinaryWrappers/finufft_jll.jl), which are now microarchitecture-specific (including `avx2`) for better performance.
You may be able to squeeze a little more performance via locally-compiled binaries; see below.

## Usage

Expand Down Expand Up @@ -71,7 +72,8 @@ The above code may be found in [examples/demo1d1.jl](examples/demo1d1.jl)

### More examples

For a 2D type 1, see [examples/time2d1.jl](examples/time2d1.jl)
For a 2D type 1 with timing benchmark,
see [examples/time2d1.jl](examples/time2d1.jl)

Finally, the more involved code [test/test_nufft.jl](test/test_nufft.jl)
tests `dtype=Float64` and `dtype=Float32` precisions
Expand All @@ -86,9 +88,9 @@ with examples.

## Advanced installation and locally compiling binaries

To get the latest version of this interface do `add FINUFFT#master`, but note it still uses the precompiled binaries.
To get the latest version of this interface do `add FINUFFT#master`, but note this still uses the precompiled binaries from `finufft_jll`.

You may get quite a lot more performance (in one example 2x speedup), by locally compiling binaries as follows. This has only been tested on ubuntu linux, so YMMV. First install the source
You may get a little more performance by locally compiling binaries as follows. This has only been tested on ubuntu linux, so YMMV. First install the source
[FINUFFT](https://github.com/flatironinstitute/finufft),
`cd` to its top directory (which we'll call `YOURFINUFFT`),
`make test` and check that gives no errors. You may need to create a
Expand All @@ -103,14 +105,15 @@ following the simple instructions to set
const libfinufft = "YOURFINUFFT/lib/libfinufft.so"
```
Restart Julia, and `pkg> test FINUFFT` to check it worked.
You should notice that `julia> include("examples/time2d1.jl")` runs faster
than before (in our Ryzen laptop test, around twice as fast!).
You may find that `julia> include("examples/time2d1.jl")` runs faster
than before (however, since we included `avx2` in our binaries, it is
unlikely to run faster on an x86_64 CPU).
Now proceed by `using FINUFFT` as usual.
You may do `pkg> free FINUFFT` and restart to return to the registered package
with generic binaries.
Here's [general info about packages](https://pkgdocs.julialang.org/v1/managing-packages).

Older versions of the package are available also for Julia v1.0-v1.2, but the user needs to have a recent version of GCC installed.
Finally, older versions of the package are available also for Julia v1.0-v1.2, but the user needs to have a recent version of GCC installed.


## Developers of this Julia wrapper
Expand All @@ -124,7 +127,7 @@ Main authors:
Additional authors:

* Alex Barnett (guidance/tweaks/docs/examples)
* Mose Giordano (packaging)
* Mose Giordano (packaging, binaries)

### To do (please help)

Expand Down

0 comments on commit f935efa

Please sign in to comment.