diff --git a/README.md b/README.md index 831f2d6..81c63a0 100644 --- a/README.md +++ b/README.md @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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)