Giter VIP home page Giter VIP logo

packed_simd's Introduction

Simd<[T; N]>

Implementation of Rust RFC #2366: std::simd

Travis-CI Status Appveyor Status Latest Version docs

This aims to be a 100% conforming implementation of Rust RFC 2366 for stabilization.

WARNING: this crate only supports the most recent nightly Rust toolchain.

Documentation

Examples

Most of the examples come with both a scalar and a vectorized implementation.

Cargo features

  • into_bits (default: disabled): enables FromBits/IntoBits trait implementations for the vector types. These allow reinterpreting the bits of a vector type as those of another vector type safely by just using the .into_bits() method.

  • core_arch (default: disabled): enable this feature to recompile core::arch for the target-features enabled. packed_simd includes optimizations for some target feature combinations that are enabled by this feature. Note, however, that this is an unstable dependency, that rustc might break at any time.

  • sleef-sys (default: disabled - x86_64 only): internally uses the SLEEF short-vector math library when profitable via the sleef-sys crate. SLEEF is licensed under the Boost Software License v1.0, an extremely permissive license, and can be statically linked without issues.

Performance

The following ISPC examples are also part of packed_simd's examples/ directory, where packed_simd+rayon are used to emulate ISPC's Single-Program-Multiple-Data (SPMD) programming model. The performance results on different hardware is shown in the readme.md of each example. The following table summarizes the performance ranges, where + means speed-up and - slowdown:

  • aobench: [-1.02x, +1.53x],
  • stencil: [+1.06x, +1.72x],
  • mandelbrot: [-1.74x, +1.2x],
  • options_pricing:
    • black_scholes: +1.0x
    • binomial_put: +1.4x

While SPMD is not the intended use case for packed_simd, it is possible to combine the library with rayon to poorly emulate ISPC's SPMD programming model in Rust. Writing performant code is not as straightforward as with ISPC, but with some care (e.g. see the Performance Guide) one can easily match and often out-perform ISPC's "default performance".

Platform support

The following table describes the supported platforms: build shows whether the library compiles without issues for a given target, while run shows whether the full testsuite passes on the target.

Linux targets: build run
i586-unknown-linux-gnu
i686-unknown-linux-gnu
x86_64-unknown-linux-gnu
arm-unknown-linux-gnueabi
arm-unknown-linux-gnueabihf
armv7-unknown-linux-gnueabi
aarch64-unknown-linux-gnu
mips-unknown-linux-gnu
mipsel-unknown-linux-musl
mips64-unknown-linux-gnuabi64
mips64el-unknown-linux-gnuabi64
powerpc-unknown-linux-gnu
powerpc64-unknown-linux-gnu
powerpc64le-unknown-linux-gnu
s390x-unknown-linux-gnu ✓*
sparc64-unknown-linux-gnu ✓*
thumbv7neon-unknown-linux-gnueabihf
MacOSX targets: build run
x86_64-apple-darwin
i686-apple-darwin
Windows targets: build run
x86_64-pc-windows-msvc
i686-pc-windows-msvc
x86_64-pc-windows-gnu
i686-pc-windows-gnu
WebAssembly targets: build run
wasm32-unknown-unknown
Android targets: build run
x86_64-linux-android
arm-linux-androideabi
aarch64-linux-android
thumbv7neon-linux-androideabi
iOS targets: build run
i386-apple-ios
x86_64-apple-ios
armv7-apple-ios ✗**
aarch64-apple-ios ✗**
xBSD targets: build run
i686-unknown-freebsd ✗**
x86_64-unknown-freebsd ✗**
x86_64-unknown-netbsd ✗**
Solaris targets: build run
x86_64-sun-solaris ✗**

[*] most of the test suite passes correctly on these platform but there are correctness bugs open in the issue tracker.

[**] it is currently not easily possible to run these platforms on CI.

Machine code verification

The verify/ crate tests disassembles the portable packed vector APIs at run-time and compares the generated machine code against the desired one to make sure that this crate remains efficient.

License

This project is licensed under either of

at your option.

Contributing

We welcome all people who want to contribute. Please see the contributing instructions for more information.

Contributions in any form (issues, pull requests, etc.) to this project must adhere to Rust's Code of Conduct.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in packed_simd by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

packed_simd's People

Contributors

gnzlbg avatar gabrielmajeri avatar dependabot-preview[bot] avatar theironborn avatar mati865 avatar dependabot-support avatar burrbull avatar rustyyato avatar 3for avatar atouchet avatar dtolnay avatar hsivonen avatar nivkner avatar pietroalbini avatar superfluffy avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.