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: https://github.com/preciz/max
Hex.pm: https://hex.pm/packages/max
Docs: https://hexdocs.pm/max/Max.html

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 Libraries Top

oltarasenko
Dear Elixir community, After a year of development, bug fixes, and improvements, we are proudly ready to share the release of Crawly 0.1...
New
seancribbs
Today I released a new dialyzer Mix task as the dialyzex package! At the time we started writing this task, the existing dialyzer integra...
New
KronicDeth
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine) This is a plugin that adds support for Elixir to JetBrains IntelliJ...
289 35421 110
New
mindok
What is ContEx? A pure Elixir server-side data plotting/charting library outputting SVG. It has nice barcharts in particular and works g...
New
danschultzer
None of the current solutions worked well for me, so I went ahead and built a user management system from scratch. This project took far...
548 27727 240
New
Jskalc
Hi! Today, after a couple weeks of development I’ve released v0.1 of LiveVue. It’s a seamless integration of Vue and Phoenix LiveView, i...
New
engineeringdept
I’ve just released the first version of Snap, an Elasticsearch client. It borrows ideas about application structure and process managemen...
New
Crowdhailer
Experimenting with this code. OK.try do user <- fetch_user(1) cart <- fetch_cart(1) order = checkout(cart, user) save_or...
New
Hal9000
Here is my first stab at this. README pasted below. https://github.com/Hal9000/elixir_random Comments and critiques are welcome. Th...
New
bluzky
You may know https://ui.shadcn.com/, a UI component library for React. I really love it’s design style and components. I’ve built some co...
381 12391 119
New

Other popular topics Top

yurko
Here are few pieces of (common) Linux knowledge that we use for reasonably small one server apps. We use Ubuntu but this should work for ...
New
yawaramin
In the Dialyzer docs ( http://erlang.org/doc/man/dialyzer.html#requesting-or-suppressing-warnings-in-source-files ), there is a way to tu...
New
malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
quazar
How to set Jason to encode all fields in ecto schema, I don’t care about security and implementing only is taking long list of attributes...
New
hariharasudhan94
I would like to know what is the best IDE for elixir development?
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
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
qwerescape
Is there a way to get the call stack or stack trace at any point in the code? Not from exceptions, but an expression that returns how the...
New
fireproofsocks
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? https://hexdocs.pm/ecto/Ecto.Repo.h...
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

Sub Categories:

We're in Beta

About us Mission Statement