For those wondering what it's for: it's basically NumPy + a JIT compiler with standard Haskell syntax (you mostly just need to change the type signatures, not the code).
It can vectorize, parallelize on the CPU, or offload to the GPU automatically.
One big difference compared to NumPy (which you may or may not care about depending on how picky you are), is that Accelerate is a higher-order programming model. Basically, you can have 'map' (with a user-provided function), and it will go fast, in contrast to NumPy's model where only first-order operations go fast.
Making Haskell programs go faster. I will say that Accelerate is in most cases not faster than similar libraries for other languages (e.g. Jax), but the integration with normal Haskell is very pleasant. As Haskell is a very nice and practical language for general-purpose programming, it's convenient to be able to use Accelerate for those parts where numerical performance is critical (but not so critical that you rewrite the entire program in CUDA or C).
Yes, and that’s fine. There are many notable Michael Jordans for instance. Maybe they could have taken the opportunity to call this one Haccelerate or Haskellerate or something like that but there is no reason for everything to have a distinct name. Context has sufficient namespacing.
I think we ran out of `$NameFast` and `Fast$Name`, so people are just using plain verbs as names now, ideally as similar to something existing as possible, so you can attempt to steal their SEO and similar nifty "growth hacking" stuff.
For those wondering what it's for: it's basically NumPy + a JIT compiler with standard Haskell syntax (you mostly just need to change the type signatures, not the code).
It can vectorize, parallelize on the CPU, or offload to the GPU automatically.
It's a very mature project, maybe 10+ years old.
One big difference compared to NumPy (which you may or may not care about depending on how picky you are), is that Accelerate is a higher-order programming model. Basically, you can have 'map' (with a user-provided function), and it will go fast, in contrast to NumPy's model where only first-order operations go fast.
If the weird syntax of APL and J bothers you, you can use the familiar Haskell syntax!
Jokes aside, types should help a lot.
I guess the author is unaware of Accelerate.framework, the vector library that has shipped with Mac OS since Jaguar.
Heh... I just spent 5 minutes looking at the repo, wondering the same thing. (I was a dev on the performance team at Apple) ;-)
Were the authors of Accelerate.framework unaware of the word Accelerate, which has shipped with the English language since the 1500s?
/s
Overlaps in naming happen, especially when we all want to choose simple and catchy words like "Accelerate."
What’s the main use case for this?
Making Haskell programs go faster. I will say that Accelerate is in most cases not faster than similar libraries for other languages (e.g. Jax), but the integration with normal Haskell is very pleasant. As Haskell is a very nice and practical language for general-purpose programming, it's convenient to be able to use Accelerate for those parts where numerical performance is critical (but not so critical that you rewrite the entire program in CUDA or C).
aren't there like dozens of similar things with pretty much the same name?
Maybe. Nothing else in Haskell named similarly, so it's not confusing.
also, accelerate was first published to Hackage in 2009 though so it isn't an especially new thing.
Yes, and that’s fine. There are many notable Michael Jordans for instance. Maybe they could have taken the opportunity to call this one Haccelerate or Haskellerate or something like that but there is no reason for everything to have a distinct name. Context has sufficient namespacing.
I think we ran out of `$NameFast` and `Fast$Name`, so people are just using plain verbs as names now, ideally as similar to something existing as possible, so you can attempt to steal their SEO and similar nifty "growth hacking" stuff.