preciz

preciz

Max library - use :array as a matrix

After Matrax I have realized that concurrent mutable matrices of 64 bit integers with atomic updates might be a very special use case.

So while I was in the mindset I have created a similar library, but this time on top of Erlang :array to have a different set of trade-offs. For ex. use any term as an element.

GitHub: GitHub - preciz/max: A matrix library in pure Elixir based on Erlang arrays. · GitHub
Hex.pm: max | Hex
Docs: Max — max v0.1.3

MatrixReloaded by @ondrej-tucek Is the most downloaded pure Elixir matrix library out there on hex.pm so I do a quick general benchmark against that:

Benchmark suite executing with the following configuration:
warmup: 2 s
time: 5 s
memory time: 0 ns
parallel: 1
inputs: none specified
Estimated total run time: 14 s

Name                     ips        average  deviation         median         99th %
max_get              39.84 K      0.0251 ms    ±14.15%      0.0249 ms      0.0294 ms
m_reloaded_get      0.0945 K       10.59 ms     ±1.56%       10.55 ms       11.38 ms

Comparison: 
max_get              39.84 K
m_reloaded_get      0.0945 K - 421.84x slower +10.56 ms

Name                        ips        average  deviation         median         99th %
max_set                 23.58 K      0.0424 ms     ±2.95%      0.0422 ms      0.0451 ms
m_reloaded_update      0.0861 K       11.61 ms     ±1.53%       11.56 ms       12.39 ms

Comparison: 
max_set                 23.58 K
m_reloaded_update      0.0861 K - 273.77x slower +11.57 ms

Name                           ips        average  deviation         median         99th %
m_reloaded_transpose        498.99        2.00 ms     ±4.49%        1.98 ms        2.55 ms
max_transpose               104.20        9.60 ms     ±4.23%        9.41 ms       10.79 ms

Comparison: 
m_reloaded_transpose        498.99
max_transpose               104.20 - 4.79x slower +7.59 ms

So get/2 and set/3 is much faster while actually transpose/1 is slower. (Similarly to Matrax).
(Please benchmark your use case to decide between libraries. Also check Matrex which uses NIFs.)

Feedback is welcome.
(I’m also looking for employment in case you are hiring please PM me)

Where Next?

Popular in Announcing Top

danschultzer
In short Plug n’ play OAuth 2.0 provider library. Just set up a resource owner schema with Ecto (your user schema), install the dependen...
New
tmbb
PhoenixWS - Websockets over Phoenix Channels Source code on Github here: GitHub - tmbb/phoenix_ws: Websockets implemented over Phoenix Ch...
New
sorentwo
Hello! tl;dr Announcing Oban, an Ecto based job processing library with a focus on reliability and historical observability. After spen...
985 43657 311
New
josevalim
Yes, yet another parser combinator library! Most of the parser combinators in the ecosystem are either compile-time, often using AST tra...
159 19483 141
New
Crowdhailer
The latest release of Ace (0.10.0) includes serving content over HTTP/2. I have started writing a webserver to teach my self more about...
New
mtrudel
Bandit is an HTTP server for Plug and WebSock apps. Bandit is written entirely in Elixir and is built atop Thousand Island. It can serve...
New
aditya7iyengar
Rummage.Ecto and Rummage.Phoenix provide ways to perform Searching, Sorting and Pagination over Ecto queries and Phoenix collections. Fo...
New
Qqwy
TypeCheck: Fast and flexible runtime type-checking for your Elixir projects. Core ideas Type- and function specifications are const...
336 14534 100
New
woylie
Flop is an Elixir library that applies filtering, ordering and pagination parameters to your Ecto queries. offset-based pagination with...
New
trisolaran
Hi! :waving_hand: I would like to present LiveSelect, a little library that I wrote to easily add a dynamic selection input to your LV f...
198 10978 107
New

Other popular topics Top

hariharasudhan94
lets say i have a sample like a = 20; b = 10; if (a > b) do {:ok, "a"} end if (a < b) do {:ok, b} end if (a == b) do {:ok, "equa...
New
marius95
Hello everyone, I try to use an Javascript Event Handler in my root.html.leex file. Therefore I created a function in the app.js file: ...
New
siddhant3030
Hi, I have to write a raw query for one of my project. But till now I have used ecto queries and don’t have much experience writing raw ...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers’ Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
nsuchy
Hi. I’ve noticed that Windows Powershell has it’s own IEX command and you cannot access Elixir’s IEX due to the conflict. This isn’t a cr...
New
jaysoifer
Is there a way to rollback a specific migration and only that one (“skipping” all the other ones)? Would mix ecto.rollback -v 200809061...
New
minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New

We're in Beta

About us Mission Statement