Redundant functions in Accelerate framework

This is really a question for the apple developer forums, but since I was one of the maintainers for these libraries for many years, I'll answer it here and save you the trip:

Generally speaking there is not a meaningful difference between using the BLAS, vDSP, BNNS, or vImage interfaces for the same operation. They support slightly different operations w.r.t. strides (vDSP and BLAS have different conventions for negative strides, for example) and control over threading in some cases (e.g. vImage lets you specify kvImageDoNotTile on individual operations), but they are essentially equivalent.

There are sometimes cases where one may not be as well optimized as the other--when this happens, it is a bug that will be fixed if you report it, but someone has to report it. In general your best bet to avoid this is to use the API that best matches the operation. If you are doing matrix multiplications, use the BLAS API for that. If an API makes an operation more idiomatic, that's a good hint that it's the preferred API to use for that operation.

3 Likes