And there's also a scale to 0 story for when you're not using that GPU at all: https://github.com/phoenixframework/flame
1 language/toolchain. 1 deployable app. Real time and distributed machine learning baked in. 1 dev can go really far.
And there's also a scale to 0 story for when you're not using that GPU at all: https://github.com/phoenixframework/flame
1 language/toolchain. 1 deployable app. Real time and distributed machine learning baked in. 1 dev can go really far.
What parts of that does elixir (and company) allow me to not write? Is there a good balance between abstractions when it comes to still maybe wanting control over what goes where (heteregeneity)?
Super curious and kinda looking for an excuse here :)
If you have a parallelizeable workflow, it's very easy to make it (properly!) parallel locally, where by "properly" I mean having supervision trees, sane restart behavior, etc.
And once you have that you can extend that parallelism to different nodes in a network (with the same sanity around supervision and discovery) basically for free. Like, one-line-of-code for free.
Nonetheless, it's all message-passing, and so pretty high level. AFAIK it's not designed for parallelizing compute at GPU scale.
That being said, if you have multiple GPUs and multiple machines that have to coordinate between them, Elixir/Erlang is pretty much perfect.
Aparapi allows Java developers to take advantage of the compute power of GPU and APU devices by executing data parallel code fragments on the GPU rather than being confined to the local CPU. It does this by converting Java bytecode to OpenCL at runtime and executing on the GPU, if for any reason Aparapi can't execute on the GPU it will execute in a Java thread pool.
https://github.com/aparapi/aparapi
but avoid the non-official fork which sometimes comes up in search results.