HigherOrderCO / HVM

A massively parallel, optimal functional runtime in Rust

Home Page:https://higherorderco.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Comparison to Lunatic

ShalokShalom opened this issue · comments

Considering both HVM and Lunatic are Rust-written platforms, who aim to massively increase parallelism, without the need to change the incoming code - how do the two compare?

Next to the obvious fact, that one does it with Actors, and the other thanks to the Interaction Net.
HVM seems to need no GC - yey! - and Lunatic is compatible to all Wasm languages.

Anything else?

Agents based approach are quite standard. HVM attempts to break down programs in the most granular level possible, and parallelize at that level. So, while HVM is fit for the CPU with 10-12 threads (like agents are), in the (near) future we could manage to run it on GPUs and other massively parallel architecture. So, you write a Haskell-like program, you get a massively parallel executable, run it in thousands of threads. That's the ultimate goal of HVM's approach. Right now, though, since agents do a fairly good job at filling the ~16 or so threads that CPUs have, they both should keep all cores busy. Although there is still a difference that agents need to be programmed manually, while HVM is capable of parallelizing everything with no programmer input.

Interesting. Does the calculation on the GPU impose any limits on the type of code, that is written?

I mean, would it be possible to run all on GPU? An OS?

Interesting. Does the calculation on the GPU impose any limits on the type of code, that is written?

There's a relevant comment here: HigherOrderCO/hvm-64#6 (comment):

syscalls can be done via a monadic interface as with other pure functional languages, being on the GPU doesn't prevent that in any way, although it does add some overhead communicating with the CPU. on the ideal, finished runtime, I believe most of the code should run on the CPU, with gthe GPU being an opt-in for specific functions (like, if you're rendering an image using pure recursive functions, you probably want that on the gpu)