Giter Site home page Giter Site logo

appleaccelerate.jl's Introduction

AppleAccelerate.jl

This provides a Julia interface to some of the macOS Accelerate framework. At the moment, this package provides:

  1. Access to Accelerate BLAS and LAPACK using the libblastrampoline framework,
  2. An interface to the array-oriented functions, which provide a vectorised form for many common mathematical functions

The performance is significantly better than using standard libm functions in some cases, though there does appear to be some reduced accuracy.

OS Requirements

MacOS 13.4 is required in order to run AppleAccelerate.jl, especially for the libblastrampoline forwarding. On older MacOS versions, your mileage may vary.

Supported Functions

The following functions are supported:

  • Rounding: ceil, floor, trunc, round
  • Logarithmic: exp, exp2, expm1, log, log1p, log2, log10
  • Trigonometric: sin, sinpi, cos, cospi, tan, tanpi, asin, acos, atan, atan2, cis
  • Hyperbolic: sinh, cosh, tanh, asinh, acosh, atanh
  • Convolution: conv, xcorr
  • Other: sqrt, copysign, exponent, abs, rem

Note there are some slight differences from behaviour in Base:

  • No DomainErrors are raised, instead NaN values are returned.
  • round breaks ties (values with a fractional part of 0.5) by choosing the nearest even value.
  • exponent returns a floating point value of the same type (instead of an Int).

Some additional functions that are also available:

  • rec(x): reciprocal (1.0 ./ x)
  • rsqrt(x): reciprocal square-root (1.0 ./ sqrt(x))
  • pow(x,y): power (x .^ y in Base)
  • fdiv(x,y): divide (x ./ y in Base)
  • sincos(x): returns (sin(x), cos(x))

Example

To use the Accelerate BLAS and LAPACK, simply load the library:

julia> peakflops(4096)
3.6024175318268243e11

julia> using AppleAccelerate

julia> peakflops(4096)
5.832806459434183e11

To avoid naming conflicts with Base, methods are not exported and so need to be accessed via the namespace:

using AppleAccelerate
using BenchmarkTools
X = randn(1_000_000);
@btime exp.($X); # standard libm function
@btime AppleAccelerate.exp($X); # Accelerate array-oriented function

The @replaceBase macro replaces the relevant Base methods directly

@btime sin.($X); # standard libm function
AppleAccelerate.@replaceBase sin cos tan
@btime sin($X);  # will use AppleAccelerate methods for vectorised operations

X = randn(1_000_000);
Y = fill(3.0, 1_000_000);
@btime $X .^ $Y;
AppleAccelerate.@replaceBase(^, /) # use parenthesised form for infix ops
@btime $X ^ $Y;

Output arrays can be specified as first arguments of the functions suffixed with !:

out = zeros(Float64, 1_000_000)
@btime AppleAccelerate.exp!($out, $X)

Warning: no dimension checks are performed on the ! functions, so ensure your input and output arrays are of the same length.

Operations can be performed in-place by specifying the output array as the input array (e.g. AppleAccelerate.exp!(X,X)). This is not mentioned in the Accelerate docs, but this comment by one of the authors indicates that it is safe.

appleaccelerate.jl's People

Contributors

simonbyrne avatar rprechelt avatar viralbshah avatar staticfloat avatar daviehh avatar dependabot[bot] avatar dlfivefifty avatar chenspc avatar ranocha avatar juliatagbot avatar mcabbott avatar timholy avatar tk3369 avatar tkelman avatar femtocleaner[bot] 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.