Giter VIP home page Giter VIP logo

portable-simd's Introduction

The Rust standard library's portable SIMD API

Build Status

Code repository for the Portable SIMD Project Group. Please refer to CONTRIBUTING.md for our contributing guidelines.

The docs for this crate are published from the main branch. You can read them here.

If you have questions about SIMD, we have begun writing a guide. We can also be found on Zulip.

If you are interested in support for a specific architecture, you may want stdarch instead.

Hello World

Now we're gonna dip our toes into this world with a small SIMD "Hello, World!" example. Make sure your compiler is up to date and using nightly. We can do that by running

rustup update -- nightly

or by setting up rustup default nightly or else with cargo +nightly {build,test,run}. After updating, run

cargo new hellosimd

to create a new crate. Finally write this in src/main.rs:

#![feature(portable_simd)]
use std::simd::f32x4;
fn main() {
    let a = f32x4::splat(10.0);
    let b = f32x4::from_array([1.0, 2.0, 3.0, 4.0]);
    println!("{:?}", a + b);
}

Explanation: We construct our SIMD vectors with methods like splat or from_array. Next, we can use operators like + on them, and the appropriate SIMD instructions will be carried out. When we run cargo run you should get [11.0, 12.0, 13.0, 14.0].

Supported vectors

Currently, vectors may have up to 64 elements, but aliases are provided only up to 512-bit vectors.

Depending on the size of the primitive type, the number of lanes the vector will have varies. For example, 128-bit vectors have four f32 lanes and two f64 lanes.

The supported element types are as follows:

  • Floating Point: f32, f64
  • Signed Integers: i8, i16, i32, i64, isize (i128 excluded)
  • Unsigned Integers: u8, u16, u32, u64, usize (u128 excluded)
  • Pointers: *const T and *mut T (zero-sized metadata only)
  • Masks: 8-bit, 16-bit, 32-bit, 64-bit, and usize-sized masks

Floating point, signed integers, unsigned integers, and pointers are the primitive types you're already used to. The mask types have elements that are "truthy" values, like bool, but have an unspecified layout because different architectures prefer different layouts for mask types.

portable-simd's People

Contributors

calebzulawski avatar workingjubilee avatar miguelraz avatar lokathor avatar ralfjung avatar kodraus avatar thomcc avatar programmerjake avatar sstangl avatar sp00ph avatar mark-simulacrum avatar taiki-e avatar bjorn3 avatar pro465 avatar mulimoen avatar dtolnay avatar est31 avatar cuishuang avatar howjmay avatar weihanglo avatar petrochenkov avatar urgau avatar tako8ki avatar t-o-r-u-s avatar oli-obk avatar nvzqz avatar compiler-errors avatar kadiwa4 avatar jorgecarleitao avatar guillaumegomez 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.